{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning\n", "\n", "*Екатерина Лобачева / Илья Щуров / Сергей Сметанин *\n", "\n", "*Совместный бакалавриат НИУ ВШЭ и РЭШ, 2016-17 учебный год*\n", "\n", "[Страница курса](http://math-info.hse.ru/2016-17/Machine_Learning)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Домашнее задание №ML3\n", "\n", "Чтобы выполнить работу, скачайте настоящий ipynb-файл, откройте его в *Jupyter Notebook*, впишите решения в оставленные для этого ячейки (при необходимости можно добавлять новые ячейки), приводя полный работающий код, а также все необходимые пояснения и ответы (для этого нужно использовать markdown-ячейки). Вы можете вставлять формулы с помощью TeX-разметки в markdown-ячейки. После выполнения работы необходимо вытащить ipynb-файл из Jupyter (например, с помощью *File → Download as… → IPython Notebook*) и загрузить его на my.NES." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 1\n", "В некотором царстве, в некотором государстве, банк Б выдаёт кредиты населению. Анализируя заявку на выдачу кредита с помощью алгоритмов машинного обучения (а именно, алгоритма классификации), банк пытается предсказать, вернёт ли заёмщик кредит, и в зависимости от результата одобряет или отклоняет заявку. Иногда в некотором царстве, некотором государстве, случаются экономические кризисы, во время которых банк минимизирует свои риски, стараясь выдавать кредиты только самым надёжным заёмщикам. Если же кризиса нет и экономика растёт, банк может позволить себе больше рисковать и выдавать кредиты более широкому кругу заёмщиков. На картинке ниже изображены ROC-кривые для двух алгоритмов классификации (здесь считается, что положительный класс — это «заёмщик вернёт кредит», а отрицательный класс — «не вернёт»). Площадь под кривыми одинакова. Какой из этих двух алгоритмов банк должен использовать во время кризиса? Ответ обосновать." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAF/CAYAAABT1F6HAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcjeX/x/HXNWMsyTZ2WRMt1pBCZY2QqK+EslZkS7+U\n8i3bVxLRLqWUpbIkFSFLTChLWYbssmUNYyzDmO36/XHGmJgZs5ztnnk/H4/zcJb7XPfHMc57rvu6\nr/sy1lpERESuFuDrAkRExD8pIEREJEkKCBERSZICQkREkqSAEBGRJCkgREQkSR4NCGPMJGPMcWPM\n5hS2ed8Ys9sYs8kYU92T9YiISOp5ugfxBdAsuReNMc2B8tbaCkBP4GMP1yMiIqnk0YCw1q4CTqew\nSWtgavy2a4F8xpiinqxJRERSx9djEDcBfyd6fDj+ORER8TFfB4SIiPipbD7e/2GgVKLHJeOfu4Yx\nRheNEhFJB2utSc/7vNGDMPG3pMwFOgMYY+4Bwq21x5NryFqrm7UMHTrU5zX4y02fhT4Lx30Whw5h\nixTBwr9v+fJh4+Ku3T4iAvvkk9jnn8f+73/YDz/Efv01dunSf20XFxfHvJ3zqPlxDW4bVYX8tWaz\n7OfYDH15e7QHYYz5GmgAFDTGHASGAtkBa62daK1dYIxpYYzZA0QA3TxZj4iIR128COvXw+rVsGUL\nTJkC5qrfj4sVg/PnIUcOKF8ebrnlyi0uDgID/739DTfAtGnJ7tJay8I9CxkWMozImEjaFhrG+6+1\n4btvAmjQIGN/HY8GhLW2Yyq26evJGkREPMpaGDAAVq6ETZsgJubKa6+/DqVL/3v7wEDYuxcKF4aA\n9B/Esday6K9FDAsZxvmo8wxrMIzg44/yeLsAZn9DhsMBfD8GIenQwB3/8pmEPosr9Flc4dXPwhj4\n5RfYsMH1hV+1KtSpA3ffDXnzJv2eouk/m99ay9K9SxkSMoSzl84ytP5Q2t7RlhW/BPBYO/jGTeEA\nYKx1xtivMcY6pVYRySQuXIBly2DJEvj5Z3jvPWjc+NrtFi2CoCC46y7Ik8dj5aw4sILBywdz/Pxx\nhtYfSrtK7QgMCCQkBB57LOlwMMZg0zlI7fsBm1TeXKVeq0yZMteM9eimW3pvZcqUSfLnTLKYBQus\nfegha3PmtBau3P77X5+Us+bvNfaBqQ/Ycu+Ws5M3TrbRsdEJry1fbm2hQq4/kwJYm87vXccfYjpw\n4MDlABHJMHP1gKJkTX/9BT/+6Lpfqxa0aAFNmrgOG3nRpmObGLJ8CBuPbWTw/YPpVr0bQYFBCa+n\n1HNwB8cHhIhIuuzc6QqCFi2ufe2RR1xnGbVsCSVKeL20bSe2MTRkKKsOrmLQvYOY9dgscmbL+a9t\nPB0OkAnGIOKPr/mgIsmM9POUye3bBzNnum6bNkGRInD4MGTzj9+V94TtYfgvw1m0ZxEv1n2RPnf1\nIXf23Ndsl5ZwyMgYhH98KiIinhQVBU2bus42uixvXmjeHM6eheBg39UGHAg/wOsrXue7Hd/R/+7+\njH9uPHlzJH0GlDd6DpfpWkwetmvXLu68807y5cvHhx9+SK9evRg5cqRPamnYsCGff/65R9oeNWoU\nPXr0SPb1KVOmcN9993lk3yLXlT276yyjG26Ajh3hhx/gn39g8mSfhsORc0fou6AvNSbWoEjuIuzq\nt4vB9Qf7RTiAehAeN2bMGBo1asTGjRsz3Fa5cuWYNGkSjRo1ckNl7jVo0KCE+wcOHKBcuXLExMQQ\nkGgikAaAxeNOnHD1Fm5K4qLQn3zimpzmwdNQU+tExAlG/zqazzd+Trfq3djeZztFchdJ8T3eDgdQ\nD8LjDhw4QKVKlVK1bWxsxq6b4itX122t1bF88a5166BLFyhZEoYOTXqbm2/2eTicvnia15a9xm3j\nbyMyJpI/e//JuGbj/DIcQAHhUY0bN2b58uX06dOHvHnzsmfPHrp168aQIUMA+OWXXyhVqhRjxoyh\nePHidO/enVOnTtGqVSsKFChAwYIFqV+/PgCdO3fm4MGDtGrVirx58zJ27Nhr9hceHk6rVq0oUqQI\nBQsWpFWrVhw+nOTFcYmLi2PAgAEULlyY8uXLM378eAICAoiLiwPg6NGjtG7dmoIFC1KxYkU+++yz\nhPcOHz6cxx57jE6dOpE/f36mTJnC8OHD6dy5M0BCzfnz5ydv3rysXbsWcAXHSy+9RHBwMOXLl+en\nn35KaLNhw4YMHjyYevXqkSdPHlq3bs2pU6d48sknyZcvH3fffTcHDx7M6D+JZCaXLsHUqVC7tuv0\n06lTITraNabgZ7+cXIi+wJur3qTihxU5eu4oG3ps4MMWH1Iiz/XPkPJVOAD4fAJcam+uUpOdBOK3\nGjRoYCdNmpTwuGvXrnbw4MHWWmtDQkJstmzZ7KBBg2xUVJSNjIy0gwYNsr169bKxsbE2JibGrlq1\nKuG9ZcuWtcuWLUt2X6dOnbJz5syxkZGR9vz587Zdu3a2TZs2SdYyYcIEW6lSJXvkyBEbHh5umzRp\nYgMCAmxsbKy11tr77rvP9u3b10ZFRdlNmzbZwoUL2+XxM3GGDRtms2fPbufOnWuttfbixYt22LBh\ntlOnTtZaa/fv328DAgJsXFxcwr4nT55sg4KC7KRJk2xcXJydMGGCLVGixL9qq1Chgt23b589e/as\nveOOO2yFChXssmXLbGxsrO3cubPt3r17uv4N0sLff54kkePHrc2e3TWBrUABa196ydq//vJ1Vf8S\nFRNlP1r3kS0+trh9bNZjdseJHWl6//UmwaUGGZgopx6EjwUGBjJ8+HCCgoLIkSMHQUFBHD16lH37\n9hEYGEi9evX+tb1N4Tej4OBgHnnkEXLkyEHu3LkZNGgQK1asSHLbb775hv79+1O8eHHy5cvHK6+8\nkvDa33//zerVqxk9ejRBQUFUq1aNp59+mqlTpyZsU6dOHVq1agVAzpw5r2k/qVrLli1L9+7dMcbQ\npUsXjh49yj///JPwerdu3Shbtix58uShefPmVKhQgYYNGxIQEMBjjz3mlnEcyUSKFIH//hcmTYJD\nh2DMGNdhJD8QZ+P4esvX3D7+dr7f+T3zOsxj1mOzuLXQraluw6c9h3hZYpDaDM/44Kgd6pkua+HC\nhQkKujIzcuDAgQwdOpSmTZtijOGZZ57h5ZdfTlVbFy9e5Pnnn2fRokWEh4djreX8+fMJYwKJHTly\nhFKlrqzVlPj+0aNHCQ4O5oYbbkh4rkyZMqxfvz7J7VOrWLFiCfdz5coFwPnz5ylSxHX8tWiiC5jl\nypXrmsfnz59P8z4lE1i3DnLlgipVrn0tufEGH7HWsmD3Al5d9io5suVgYquJNCqX9pNK/CEcIIsE\nhKe+3N3h6i/u3LlzM3bsWMaOHcu2bdto2LAhtWvXpmHDhtc9C2jcuHHs3r2b33//ncKFCxMaGkqN\nGjWSDIjixYtz6NChhMeJj++XKFGCsLAwIiIiyJ07d8LrNyU6MySlWnS2kmSYta6L440c6fq2bNny\nyqUv/NSqg6sY9PMgTl04xRuN36D1ra3T9X/BX8IBNEjtd+bPn89ff/0FQJ48eciWLRuB8QuIFC1a\nlL179yb73nPnzpErVy7y5s1LWFgYw4YNS3bbdu3a8d5773HkyBHCw8MZM2ZMwmslS5akbt26DBo0\niEuXLrF582YmTZpEp06dUvV3KFy4MAEBAQl/D5FUsxaWLoX77oMHHnB9W+bNC5UruxbT8UOhx0J5\n6OuHeGLOEzx151Ns6bWFNre1cXw4gALC49L6Q7J7926aNGlCnjx5qFevHn369OH+++8HXHMNRowY\nQXBwMG+//fY1733++ee5cOEChQoVom7durS46hoziWt55plnaNq0KVWrVqVmzZq0bNmSbNmyJcxb\nmD59Ovv27aNEiRL85z//YcSIETRs2DBVf4dcuXLx6quvUq9ePYKDg1m3bl2S2yWuR70OAeDcOWjb\nFn791TWBbeRIOHgQ3nwzQ4vreMJfYX/xxJwnaPZlMx64+QF29d1F1+pdCQwIvP6bk+Bv4QC6FpPE\n++mnn+jVqxf79u3zdSk+pZ8nP/DOOxAZCX37+nzeQlKOnjvKiBUjmLV1Fs/d/Rz/d8//kSdHxur0\nZDjoWkySZpGRkSxfvpymTZty7Ngxhg8fzqOPPurrsiQruXTJdcXUq/3f/3m/llQIjwxnzK9j+PiP\nj+lWvRs7+u6g0A2FMtyuP/YcLvOvPpt4jbWWoUOHEhwcTM2aNalUqRLDhw/3dVmSFezb57oeUoMG\nfjehLSmXYi7x9uq3qfhBRY6dP8amZzcxrtm4TB8OoENMIv+inycPOnkSXn8dPvrINeM5e3b444+k\nT1/1A3E2julbpvPa8teoVLgSbzZ5k8pFKrutfW+Fgw4xiYh/+/BDePVV12UwjIFOneB//4OyZX1d\nWZKW7l3KwCUDyRaQjcmtJ1O/bH23tu/vPYfLFBAi4h1nz0KzZjB6NFSr5utqkhR6LJSXl77MnrA9\njGo8irZ3tHX7GXZOCQfQISaRf9HPk4fExMBvv0H8Kdv+5uCZgwxePphFexbx2v2v0aNmD7IHZnf7\nfnwRDhk5xKRBahFxn/DwpCe0Zcvml+Fw+uJpBi4ZyJ2f3EnpvKXZ1W8XfWv3zTThkFEKCBHJuLg4\n+PRTuOUW+OILX1dzXZExkYz7bRy3fngr4ZHhbOm1hRGNRiS7kltGOTEcQAGRpQ0fPjzVl8+4mpYv\nlQRbtrgujdGjB5w6BYsX+7qiZMXZOL7c/CW3fXgbKw6uIKRrCBNbTUzVugzp5dRwAA1SZ3n+eIkL\nLV/qEJGRMGwYjBvnGmMoVgzefRfatfN1ZUn6ee/PvLjkRXIE5mDaI9O4r4znf8lwcjiAAkL8TGxs\nbMLFCUHLl/q1bNlg0SKIjYXevV3XTcqf39dVXWPHyR28tOQltv6zldFNRnvkzKSkOD0cQIeYPG70\n6NGULFmSvHnzcvvtt7N8+XLA9cX35ptvcsstt1C4cGHat29PeHh4wvtWrVpFvXr1KFCgAGXKlElY\nrOfs2bN07tyZIkWKUK5cOUaOHJnwnsuHXpJb1nP//v00aNCAfPny0axZM06ePJls3Vq+VK4rWzbX\neMPq1TB+vN+Fw4mIE/Rd0Jf7vriPBmUasL3Pdh6r9JjCIS3SuxSdt284cMnRnTt32lKlStljx45Z\na609cOCA3bt3r7XW2nfffdfWqVPHHjlyxEZFRdlnn33WdujQwVrrWrIzT548dubMmTYmJsaGhYXZ\n0NBQa621nTp1sm3atLERERF2//79tmLFivbzzz+31rqW9cyePXuyy3rWqVPHvvjiizYqKsquWLHC\n5smTJ2GZ0Ktl1eVL/fnnSVInMjrSjlk1xhYaU8j2W9DPnog44dX9u2OZUHciA0uO+vyLP9WFZiQg\nXFd8ufaW2u3Tac+ePbZo0aJ26dKlNjo6+l+v3X777f9aX/rIkSM2KCjIxsbG2lGjRtlHH330mvZi\nY2Nt9uzZ7Y4dV9a1/eSTT2zDhg2tta4vzgoVKiS8duHCBWuMscePH7cHDx60QUFB9sKFCwmvd+zY\nMdmAuNrGjRttcHBwwuPEAdGoUSM7ceLEhNeWLl2aEBAHDx602bJlsxEREQmvDxo0yHbr1s1a6wqI\n+vXr/2tfSQXE5bC53t/zcm1vvPFGwusDBgywLVq0SHg8b948e+eddyb591RAJOHQIWu7drU2LMzX\nlaQoLi7Ozvxzpi33bjn78PSH07z+szv4WzhYm7GA0BiEB5UvX553332XYcOGsW3bNpo1a8bbb79N\nsWLFOHDgAI888kjCwKu1lqCgII4fP87ff/9N+fLlr2nv5MmTxMTEULp06YTnypQp869DP8kt63ni\nxAkKFCiQ8Nzl9yZeVS4xLV8qWAtTpsDzz8OZM5AzJ0yY4OuqkrTm0BpeWPQCkTGRTHp4Eg3LpW7t\nEnfKNIeVEskaYxDJ9SFSu30GtG/fnpUrV3LgwAGAhPWlS5cuzcKFCwkLCyMsLIzTp08TERFB8eLF\nKVWqFHv27LmmrUKFChEUFJTQFrjO8km8FGhyihcvzunTp7l48WLCcykdh0+8fGl4eDgrVqwAuNyb\nu6bt1Cxfmvh1LV/q5/7+27XMZ7durnB46CF47TVfV3WN/eH7aT+7PW1ntaVnzZ780eMPhYMbZY2A\n8JFdu3axfPlyoqKiyJ49O7ly5UroMfTs2ZP//ve/CV+mJ06cYO7cuQA88cQT/Pzzz8yePZvY2FjC\nwsIIDQ0lICCAdu3a8eqrr3L+/HkOHDjAO++8k6q5DKVLl6ZWrVoMHTqU6OhoVq1axbx585LdXsuX\nZmHHj7uusLpwIRQoANOmwdy5kIpfRLzlTOQZXl7yMjUn1uSOwnews+9OulTvQoDx/ldaZg0HUEB4\n1KVLl3jllVcoXLgwJUqU4MSJE4waNQqA/v3707p1a5o2bUq+fPmoW7duwtKcpUqVYsGCBYwdO5bg\n4GDuvPNONm/eDMD777/PDTfcwM0338z999/Pk08+Sbdu3ZKtIfFv4F999RVr1qyhYMGCjBgxgi5d\nuiT7Pi1fmoUVLQpPPgkPPwxbt7ru+8lnGhMXw0e/f8StH97KyQsn2dJrC0PqDyF39tw+qSczhwPo\nYn3iAU5evlQ/T/Gio12nsfpJMAAs/msxz//0PMXzFGdc03FUL1bdp/U4JRy0HoT4lJYvdTBrkw6B\noCDv15KM3ad2M2DxALad2Mbbzd6mVcVWPu8lOiUcMkqHmCTDrNXypY70559QqxasWePrSpJ0JvIM\nLy1+iTqT6nBf6fvY2nsrD9/6sMLBi3SISSSRLPHzZC1MnAj9+8OlS/Dgg64BaT8RGxfL5E2TeW35\na7S4pQUjG4+k2I3Frv9GL3BiOOgQk4ikzpkzrquuzprlety9O7z3nm9rSmTVwVX0/6k/ubLl4scO\nP1KzRE1fl5TAieGQUQoIkazCWmjcGNavhxtvhE8+gY4dfV0V4FrRbeCSgfz292+MeWAMj1d63OeH\nkhLLiuEAGoMQyTqMgf/+F+68EzZs8ItwiIiKYOjyodT4pAa3FbqNHX130L5ye4WDn9AYhEgiWeLn\nKSbGdQqrD1lrmfHnDF5e+jL1StdjdJPRlM5X+vpv9LLMEA5ZegyiTJkyfvXbhjhbmTJlfF2C5/k4\nHDYc3cBzC5/jYsxFvnr0K68s3JMemSEcMsrxPQgRScKUKXDxIjz7rK8rSXDqwileW/Ya3+34jtcb\nvU636t0IDAi8/ht9IDOFQ0Z6EBqDEMlMLl2CXr2ga1fo1w927/Z1RcTGxfLJH59wx0d3kC0gG9v7\nbOfpGk8rHBzA8YeYRCTe339D27awbh3kyAEffggVKvi0pDWH1tB3QV9yBeVi8ZOLqVasmk/ruR6F\nw78pIEQyg19/hTZt4ORJKF0avv3WNUvaR/6J+IdXlr7Cor8WMbrJaJ6o8oTfjxUqHK6lQ0wimUGx\nYq6zkx54wDXPwUfhEBMXwwdrP6DSR5UIzhXM9j7bebLqkwoHh9IgtUhmsX07VKwIgb45tr/iwAr6\nLuhL4dyF+aD5B9xR+A6f1JFWmT0cMjJIrYAQkQw5cu4IA5cMZMWBFYxrOo62d7T1+x7DZZk9HEBn\nMYlkLfv2ZXgpXHeIio1i7G9jqTqhKmXylWF7n+08VukxhUMmooAQcZJvvoFKlWDcOJ+WEbI/hOof\nV2fZvmWsfmo1IxuP9NmqbumhcEgdncUk4gTWwvDhrhvAjh3JL/bjQf9E/MOLi18kZH8I7z34Hm1u\na+OYHsNlCofUUw9CxN9duuRaF3r4cAgIgLffhk8/9Wo4xMbF8vEfH1P5o8oUu7EY2/ps45HbH1E4\nZHLqQYj4u3794OuvXZfonjkTWrTw6u43HN1Ar/m9yB6YnWVdllG5SGWv7t9dFA5pp7OYRPzdwYOu\nGdKffgrVvDcT+UzkGQYvH8ysrbMY1XgUXap3IcA486BDVg4Hvz6LyRjzoDFmhzFmlzHm5SReL2iM\nWWiM2WSM2WKM6erpmkQcpXRpWLvWa+Fw+VLcd3x0BxejL7K191a63dlN4ZAFebQHYYwJAHYBjYEj\nwO9Ae2vtjkTbDAVyWmsHGWMKATuBotbamKvaUg9CxMN2ndpFnwV9+CfiHya0nEDdUnV9XVKGKBz8\nuwdRG9htrT1grY0GZgCtr9rmGJAn/n4e4NTV4SCSJVgLc+f6ZI7DxeiLDFk+hLqT6tLilhas77Fe\n4SAeD4ibgL8TPT4U/1xinwKVjDFHgFCgv4drEvE/cXHQvz+0bg1Dhnh114v/WkyVCVXYfnI7m57d\nxP/V+T+yBTj7/BWFg3v4w0/BICDUWtvQGFMeWGKMqWqtPe/rwkS84tIl6NwZZs2C7NmhalWv7PZE\nxAleWPwCqw6uYnyL8bSo4N2zozxF4eA+ng6Iw0DihWZLxj+XWD1gJIC19i9jzD7gNuCPqxsbNmxY\nwv0GDRrQQP/64nRnz8Ijj8CyZZA3L3z/PTRs6NFdWmuZGjqVgUsH0qlqJ/7s9aejZkGnROEAISEh\nhISEuKUtTw9SB+IadG4MHAXWAR2stdsTbTMOOGutHW6MKYorGKpZa8OuakuD1JL5dO3qWh60WDFY\nuBCqV/fo7naf2s2z858lPDKcT1t9So3iNTy6P29SOCTNbweprbWxQF9gMbAVmGGt3W6M6WmM6RG/\n2SigljEmFFgCDLw6HEQyrdGj4cEH4bffPBoO0bHRvLHyDepMqsNDFR5i7dNrFQ5yXZooJ5LJrTm0\nhmfmPUOpvKX4qOVHlM1f1tcluZXCIWUZ6UH4wyC1iHjA2Utn+e/P/2XO9jm80+wd2lVq57hrJ12P\nwsGznDk1UsSJNm1ync7qBd/v+J5KH1UiKjaKrb238njlxxUOkmbqQYh4w7ffQocO8PTTMH68x67E\nevjsYfot7Me2E9v46tGvuL/M/R7Zj68pHLxDPQgRT5syBdq1g+hoyJnTI7uw1vLp+k+p/kl1qhSp\nQuizoQoHyTD1IEQ86YMP4LnnXPeHDXPNknZz72Hv6b08M+8Zzl06x/Iuyx17Oe7UUDh4l3oQIp4y\nefKVcBg3DoYOdWs4xMbF8u6ad6n9aW2a39Kc3576TeEgbqXTXEU8JSwMGjWCPn3gmWfc2vT2E9t5\nau5TBAUG8Vmrz6hQsIJb2/c3Cof0y8hprgoIEU+KjoagIPc1FxvNmF/H8O7ad/lfg//Rs1ZPx67T\nkFoKh4zRPAgRf+XGcNh4dCPd53an2I3FWN9jPaXzlb7+mxxO4eBbCggRd7DWNcchMNDtTUfGRDLi\nlxF8uuFT3nrgLTpX65zp5jQkReHgewoIkYyyFv7v/yA8HCZNcmtIrP57Nd3ndueOwnewuddmit1Y\nzG1t+zOFg3/QGIRIRlgL/fq5Jr9lzw6rV0ONjF8E72L0RQYvH8xXW77ig+Yf0PaOtm4o1hkUDu6l\nMQgRX4iLc52h9PHHkCMHzJnjlnBYe2gtXX/oSpUiVdj87GYK5y7shmKdQeHgXxQQIukRFwe9esHE\nia5w+OEHaNYsQ01eirnE8F+G8/nGz3m/+fu0q9TOTcU6g8LB/yggRNIjIgLWr3ddOmPePGjSJEPN\nbTi6gS7fd+GW4FsIfTaUojcWdVOhzqBw8E8agxBJrzNnYOtWqFs33U1ExUYxcsVIJvwxgbebvc0T\nVZ7IEmcoJaZw8CxNlBNxoM3HN9Pl+y6UyFOCT1t9Sok8JXxdktcpHDzPb5ccFZFrxcTFMHLFSBpP\nbcxztZ/jxw4/Khwa+LoaSYrGIERSY8ECaNoUsmXsv8y2E9vo8n0XCuQskGVmQydF4eAM6kGIXM8H\nH0DLltCpk2veQzrE2TjeXv029SfX5+k7n2bRk4sUDgoHv6cehEhKJk68csnuhg3Tdbnug2cO0vX7\nrkTFRrH26bXcXOBmNxfpHAoHZ1EPQiQ506bBs8+67r/3HvTokaa3W2v5avNX1JpYi6blm/JL118U\nDgoHR1EPQiQpS5ZA166uQ0qjR1/pRaRS2MUwes/vzebjm1n05CLuLH6nZ+p0CIWDM6kHIZKU2rWh\nXj147TUYODBNb13y1xKqfVwt4bLcCgeFg1NpHoRIci5dcl2AL5XjDhejL/LK0leYs2MOX7T+giY3\nZ2x2dWagcPA9XaxPxBNy5Ej1phuObuDJOU9SrVg1Nj+7mQK5CniwMGdQODifAkIkA2LjYhn962je\nXfMu7z34Hh2qdPB1SX5B4ZA5KCBETpyAsWNhxAjXIaVUOnjmIE/MeYLsgdlZ32M9pfKV8mCRzqFw\nyDw0SC1Z29mz0Lw5jBmTpsHob7Z+Q62JtXi44sMs6bRE4RBP4ZC5aJBasq7ISGjRApYvh/LlYdUq\nKJbykp7no87Tf2F/VhxcwfT/TKdWiVpeKtb/KRz8ky7WJ5JWsbHQsaMrHIoXd817uE44bDi6gZoT\na2KxbOy5UeGQiMIhc9IYhGRN77wD330H+fPD4sVQrlyym8bZON5Z/Q6jfx3N+83fp33l9l4s1P8p\nHDIvHWKSrCkiAjp3hv794f77k93s6LmjdPm+CxHREXz16FeUzV/WezU6gMLB/2nBIBEPmL9rPk/P\ne5oeNXowuP5gsgWow52YwsEZNFFOxI0iYyIZuGQgP+z8gVltZ3Ffmft8XZLfUThkDQoIkUR2ntxJ\nu9ntqFiwIpt6btKM6CQoHLIOncUkmd+BA9CzJ1y8mOJmX23+inu/uJfetXozq+0shUMSFA5Zi3oQ\nkrmFhbkmwm3fDrlzw9tvX7PJhegLPLfwOVYeXMnSTkupVqyaDwr1fwqHrEc9CMm8IiOhTRtXOFSu\nDEOGXLPJthPbqP1pbSJjIvnjmT8UDslQOGRNCgjJnOLioEsXWLkSbroJFixwzXlIZPKmydSfXJ8X\n6rzAtEemkSdHHh8V698UDlmXDjFJ5jRxIsyaBXnywMKFUOrKtZIioiLovaA3vx/+neVdllO5SGUf\nFurfFA5Zm3oQkjl17QpPPukKiSpVEp7ecnwLtT6tRYAJ4Pdnflc4pEDhIJooJ1mCtZbPN37OKz+/\nwrim4+hNBbeDAAAgAElEQVRcrbOvS/JrCofMQxPlRFJwMfoifRb0Ye3htazouoLbC9/u65L8msJB\nLtMhJsnU9oTtoc6kOlyKvcTap9cqHK5D4SCJKSDE+aKi4NVXXYv/JPLDjh+oO6kuPWr24MtHvuTG\n7Df6qEBnUDjI1XSISZzNWujRA6ZMgfXr4aefiImL4bVlrzH9z+nM6zCPu0ve7esq/Z7CQZKigBBn\nGzXKFQ433ABvvMHx88dp/237hHWiC91QyNcV+j2FgyRHh5jEuWbPdh1aMga+/ppVhS5Qc2JN7i99\nPws6LlA4pILCQVKi01zFmbZtg7vuggsXsGPG8O692Xjz1zeZ3HoyzSs093V1jqBwyBp0mqtkPbfc\nAk88QfSlC3Qss5b9fx5g7dNrteJbKikcJDV0iEmcKXt29ox6iVq1NpIvZ35WdlupcEglhYOklgJC\nHOmnPT9R74t76VWnH5+2+pSc2XL6uiRHUDhIWugQkziKtZY3V73JB+s+4Nt233Jv6Xt9XZJjKBwk\nrRQQ4gy//875UkXptnIAB88cZN0z6yiZt6Svq3IMhYOkhw4xif/76y9imzUlrGoFSp/Pxi9df1E4\npIHCQdJLp7mKfzt7lnM1q5Bnz0H231uZMss3YrKp45taCgfJyGmu6kGI37KxsexueQ959hzkwi1l\nKDv/V4VDGigcJKM8HhDGmAeNMTuMMbuMMS8ns00DY8xGY8yfxpjlnq5J/N+F6AvM7lCVCqu2E5s/\nHzcsXAp58/q6LMdQOIg7eDQgjDEBwIdAM6AS0MEYc9tV2+QDxgMPWWsrA495sibxf4fOHuK+z+8l\nz8U4bEAAgTNnuSbGSaooHMRdPN2DqA3sttYesNZGAzOA1ldt0xH41lp7GMBae9LDNYkfW3d4Hfd8\ndg/tKj1Os7nbMFu2QNOmvi7LMRQO4k6eDoibgL8TPT4U/1xiFYFgY8xyY8zvxphOHq5J/NT0LdNp\n+XVLxrcYz8v3vowxBu64w9dlOYbCQdzNH0b8sgE1gEZAbmC1MWa1tXaPb8sSb4mzcQxdPpRpm6fx\nc+efqVq0qq9LchyFg3iCpwPiMFA60eOS8c8ldgg4aa2NBCKNMSuAasA1ATFs2LCE+w0aNKCB/ic4\nXkRUBJ2/78zx88dZ1/VXiuS/uoMp16NwkMRCQkIICQlxS1senQdhjAkEdgKNgaPAOqCDtXZ7om1u\nAz4AHgRyAGuBx621265qS/MgMpm/z/xN6xmtqVq0KhPzdCR7z94wcybUrOnr0hxD4SDX47eX+7bW\nxhpj+gKLcY13TLLWbjfG9HS9bCdaa3cYYxYBm4FYYOLV4SCZz9pDa3l01qM8f/fzvFi6PaZmTThx\nAubMUUCkksJBPE0zqcXrvtn6Db0X9Obzhz+nVdmmcP/9sG4dNGkCP/0EgYG+LtHvKRwktfy2ByGS\nmLWWt357iw/WfcDiJxdzZ/E7oWdPVziUKQPTpyscUkHhIN6iHoR4RUxcDH0X9GX1odXM7zjfdbG9\n33+H2rUhZ0749VeoUcPXZfo9hYOklXoQ4tfOXTpHu9ntAFjZbSV5c8RfMuOuu2D2bLhwQeGQCgoH\n8Tb1IMSjDp09xENfP8Q9Je/hwxYfki1Av5Okh8JB0ktXcxW/tOnYJupMqsMTVZ5gQssJCod0UjiI\nr+h/rHjEwt0L6fJ9F8a3GM9jlXT9xfRSOIgvKSDE7T754xOG/TKM79t/T91Sda+8sH49xMa6Bqbl\nuhQO4msagxC3sdYyZPkQZmydwcInFnJLcKJLdJ8+7RqIPnwYFi/WN951KBzEXXQWk/hcTFwMz/74\nLKHHQ/m1+68UyV3kyotxcdClC+zf7zpzqU4dn9XpBAoH8RcKCMmwC9EXeHz240THRrO8y3JuzH7j\nvzcYNw7mzYP8+WHWLMiRwzeFOoDCQfyJzmKSDDl14RSNpzamQM4CzOsw79pwWLkSBg1y3Z86FcqW\n9XqNTqFwEH+jgJB0OxB+gHqf16N+mfpMaTOFoMCgazc6exZy54aBA6FVK+8X6RAKB/FHGqSWdNl8\nfDMtvmrBS3Vfov89/VPeeP9+KFkSsumIZlIUDuJJGRmkVkBImv2y/xce++Yx3m/+Pu0rt/d1OY6m\ncBBP01lM4jXzds6j+9zuzPjPDBrf3NjX5TiawkH8nQJCUu2rzV8xYPEA5necT+2bNNktIxQO4gQa\npJZU+ej3j3jl51f4ufPPyYeDtdC9O7z3nuu+JEnhIE6hMQhJkbWWN1e9yWcbP2NJpyXcXODm5Df+\n4gtXQOTODdu2QenS3ivUIRQO4m0agxCPsNby8tKXWbB7ASu7raREnhLJb7x9O/Tt67r/0UcKhyQo\nHMRpFBCSpNi4WHrN70Xo8VB+6foLBW8omPzGFy9C+/auhX86dYLOnb1XqEMoHMSJFBByjajYKDp9\n14mTF06ytNNS8uTIk/IbXn0VNm+GChVg/HjvFOkgCgdxqnQNUhtjHnd3IeIfImMieXTmo0TGRDK/\n4/zrhwNAnz5w770wYwbkScX2WYjCQZws2UFqY0xuoCdQHtgKfAy0BkYCu621rb1VZHw9GqT2sIvR\nF2kzsw35c+bny0e+TPrSGcmxFky6xsEyLYWD+AOPzKQ2xnwLnANWAw8ApYBIoL+1dlM6a003BYRn\nRURF0Gp6K0rkKcHkNpO1PGgGKRzEX3gqIDZba6vG3w8EjgKlrbWR6a40AxQQnnPu0jlaft2S8sHl\n+azVZwQGBPq6JEdTOIg/yUhApDQGEXP5jrU2Fjjkq3AQzzkTeYZmXzbj9kK3M+nhSakLh5MnNREu\nGQoHyUxS6kHEAhHA5eTJBVyIf2yttXm9UuGVetSDcLPTF0/T7Mtm3H3T3bzf/H1MasYQLlxwLR16\n222uiXEFCni+UIdQOIg/8shEOWutjjNkYicvnKTptKY0LNuQsU3Hpi4cAAYMgJ07ISAAcub0bJEO\nonCQzCilHkRO4FngFmAz8Lm1NibJjb1APQj3+SfiH5pMbULLCi15o/EbqQ+HefPg4Yche3ZYuxaq\nV/dsoQ6hcBB/5qkxiClALWAL0AIYl54diH85eeEkTaY2oc1tbdIWDseOua6zBDBqlMIhnsJBMrOU\nzmW8w1pbBcAYMwlY552SxFPCLobxwLQHeKjiQwxvMDz14QCuUDh5Epo0geef91yRDqJwkMwupYCI\nvnzHWhuTpi8T8TvhkeE0ndaUJuWaMLLRyLSFA8CYMa5Z0r17u8YfsjiFg2QFKY1BxAHnLz9EZzE5\n1pnIMzT9sil1StbhnWbvpD0c5F8UDuIknrrcd6i19s501iR+4tylczT/qjl3lbhL4eAGCgfJSlI6\nVqBf1x0uIiqCll+3pGrRqnzQ/AOFQwYpHCSrSakHUcQY80JyL1pr3/ZAPeImF6Iv8ND0h6hYsCIf\ntfwo7eGwfTuUKAH58nmmQIdROEhWlFJABAI3cmUmtThEVGwUbWe1pWTekkxsNZEAk8ZB5fPnoVUr\niIqCJUvg1ls9U6hDKBwkq0opII5aa//ntUrELWLjYun0XSeyB2bni9ZfpD0cAAYOhL/+gqpVoWxZ\nt9foJAoHycpSCgj1HBzGWsuzPz7LyQsnmd9xfvou2b1oEUyYAEFBMG0a5Mjh/kIdQuEgWV1K3yCN\nvVaFZJi1lpeWvMSWf7awtPNScmZLx3WSwsKuzJYeMcLVg8iiFA4iKV+sL8ybhUjGjFw5ksV/LSak\nawg3Zr8xfY388AMcOQJ168KLL7q3QAdROIi4aNmwTOD9te8zJXQKK7utJDhXcPob6tYNihaFihUh\nMGtezFfhIHJFsjOp/Y1mUidtyqYpDF4+mBXdVlA2f1lfl+NoCgfJjDw1k1r83Pxd83l56cuEdA1R\nOGSQwkHkWgoIh1p3eB1df+jKvA7zuK3Qbb4ux9EUDiJJ02U5HWjXqV20ntGaL1p/wT0l70l/QwcP\nwvr17ivMgRQOIslTQDjMsfPHaP5Vc0Y0HMFDFR9Kf0PWwtNPw913w8yZ7ivQQRQOIilTQDjI2Utn\nafFVC7pU68LTNZ7OWGOffea6jEb+/Fny21HhIHJ9OovJIaJio2j5dUvKFyjPhJYTMnZl1oMHoXJl\nOHcOpk+H9u3dV6gDKBwkK/HUmtTiJ+JsHN1/6E7uoNyMbzE+Y+Fw+dDSuXPwyCPw+OPuK9QBFA4i\nqacehAMMWjqIFQdXsLTTUnIF5cpYY3v2wF13uZYN3boVihVzT5EOoHCQrEjzIDKxzzZ8xuzts1nz\n1JqMhwPALbe4gmHXLoWDiKRIPQg/9vPen+k4pyMru62kYsGKvi7HsRQOkpVpDCIT2n5iOx3ndGRW\n21kKhwxQOIiknwLCD52IOMFD0x9iTJMx1C9b39flOJbCQSRjFBB+JjImkjYz29Chcge6VO+S8Qat\nhTlzIC4u4205iMJBJOMUEH7EWkv3H7pTKm8p/tfQTau9Tp4M//kPtG3rnvYcQOEg4h46i8mPvLHy\nDfae3svyLsvTt5b01Y4ehRdecN1/9NGMt+cACgcR9/F4D8IY86AxZocxZpcx5uUUtrvLGBNtjMka\n32RXmbtzLh+v/5jvHv/OPaezAvTrB+Hh0Lw5PPGEe9r0YwoHEffy6GmuxpgAYBeu9a2PAL8D7a21\nO5LYbglwEfjcWjsnibYy7WmuW//ZSoMpDZjfcT61b6rtnka/+87Va7jxRvjzTyhTxj3t+imFg0jS\n/Pk019rAbmvtAWttNDADaJ3Edv2A2cA/Hq7H74RdDKPNzDaMazrOfeEAMHWq689RoxQOIpIung6I\nm4C/Ez0+FP9cAmNMCaCNtXYCkIGLDDlPTFwM7We3p1XFVnSu1tm9jc+eDV9+Cb17u7ddP6NwEPEc\nfxikfhdIPDaRZULi5SWuv/aYB8a4v/HAwEw/7qBwEPEsTwfEYaB0oscl459LrBYww7guUVoIaG6M\nibbWzr26sWHDhiXcb9CgAQ0c/K0wNXQqP+z8gXXPrCNbgD/ktLMoHESSFhISQkhIiFva8vQgdSCw\nE9cg9VFgHdDBWrs9me2/AOZl9kHqTcc28cC0BwjpEkKlIpV8XY7jKBxEUs9vB6mttbFAX2AxsBWY\nYa3dbozpaYzpkdRbPFmPPwiPDKftrLa8/+D77g2HnTvhxAn3teenFA4i3qOruXqRtZZHZj5Cybwl\n+bDFh+5rODoaatWCw4fhp59c9zMhhYNI2mk9CId467e3OHb+GDPbznRvw2PGwObNcPPNcMcd7m3b\nTygcRLxPPQgvCdkfQvvZ7Vn3zDpK5yt9/Tek1s6dULUqREXB0qXQuLH72vYTCgeR9PPbMQhxOXru\nKB2/7cjUR6a6NxyshWefdYVDt24KBxFxK/UgPCw6NppGUxvxwM0PMKT+EPc2vnYt1KkDBQvCjh2u\nPzMRhYNIxmkMwo8NWT6E3EG5ee3+19zf+N13w5o1rrOXFA4i4mbqQXjQ0r1L6fJ9Fzb23EiR3EV8\nXY5jKBxE3EdjEH7on4h/6PJ9F6a2mapwSAOFg4j/UEB4QJyNo8v3XehSrQuNb858A8eeonAQ8S8K\nCA94Z/U7nIk8w/AGw93f+JEj7m/TDygcRPyPAsLN/jjyB6N/Hc3X//maoMAg9za+Y4drMlzPnhAX\n5962fUjhIOKfFBBuFBEVQYdvOzC+xXjK5i/r3satdQXDpUuucAjIHP90CgcR/6WzmNyo14+9uBhz\nkcltJru/8S++gO7doXBhV08iONj9+/AyhYOI52kehB9YsHsBC/csJPTZUPc3fuIEvPii6/477ygc\nRMQrFBBucPLCSZ6Z9wxfP/o1+XLmc/8Ohg+HsDBo0gQ6dnR/+16mcBBxBgVEBllr6fljTzpW7kj9\nsvU9s5P//Q9iY2HAADDOXpFV4SDiHBqDyKCpoVN567e3+P2Z38mZLaevy/FrCgcR79MYhI8cCD/A\ngMUDWNppqcLhOhQOIs6TOc6V9AFrLT1+7MHzdz9PtWLVfF2OX1M4iDiTAiKdpoRO4Z+IfxhYb6Bn\ndhAb65l2vUzhIOJcCoh0OHruKAOXDOSL1l+4f7Y0wNy5rnWl16xxf9tepHAQcTYFRBpZa+m9oDc9\navagerHq7t/BhQvw3HOwaZNrQSCHUjiIOJ8GqdPom23fsPPkTmb8Z4ZndvDGG3DgAFSrBn36eGYf\nHqZwEMkcdJprGpy8cJIqE6rw3ePfcU/Je9y/g127oEoV1xrTv/3mWk7UYRQOIv5FCwZ5yf8t+j86\nVu7omXCwFvr2dYVD9+4KBxHxOR1iSqVl+5ax8sBKtvbe6rmdtG/vOrz05pue24eHKBxEMh8dYkqF\nSzGXqPZxNcY8MIaHb33Ysztz4KW8FQ4i/kuHmDxs3OpxVCxY0fPhAAoHEfEbOsR0HftO7+Pt1W/z\nR48/fF2K31E4iGRuzvp11custfRb2I8BdQa4f4U4h1M4iGR+CogUfL/je/ae3suAugM8s4PZs+GD\nDyAmxjPte4jCQSRr0CGmZERERdD/p/5MfWQq2QOzu38HZ89Cv35w7BgULw5t27p/Hx6gcBDJOtSD\nSMabq97k3tL30qBsA8/sYMQIVzjUrQuPPuqZfbiZwkEka9Fprkk4EH6AGhNrsKnnJkrlK+X+HezY\n4ZoxHRsLf/wBNWq4fx9upnAQcSad5upmLy99mX61+3kmHKyF5593jTs884zCQUT8lsYgrrLq4Cp+\n+/s3Pm/9uWd2cPYsnDkD+fPD6697Zh9upHAQybp0iCmROBtH7U9r80KdF+hYpaMHdxQHu3fDrbd6\nbh9uoHAQcT4dYnKTaaHTCAoMokPlDp7dUUCAwkFE/J4OMcW7GH2RwcsHM6PtDIxJV9hmGgoHEQH1\nIBKM/308NUvUpG6pur4uxacUDiJymXoQQHhkOGN+HcMvXX/xzA62bYNChaBIEc+07yYKBxFJTD0I\nYMyvY2hVsRW3F77d/Y3HxkLHjlChAqxZ4/723UThICJXy/I9iCPnjvDJ+k/Y1HOTZ3YwcSKEhkKZ\nMq51pv2QwkFEkpLlT3PtOa8neXPk5a2mb7m9bU6dgooVISzMdWG+//zH/fvIIIWDSOaWkdNcs3QP\nYu/pvczePptdfXd5ZgdDhrjCoVEjv7zeksJBRFKSpXsQT899muI3FmdEoxFubReAo0ddh5Xi4mDT\nJqhc2f37yACFg0jWoB5EOuwP3893O75jd7/dntlB8eKwbh389pvCQUQcKcv2IHrM60HhGwozsvFI\nt7XpBAoHkaxFPYg0OhB+gG+3f+u5sQc/pXAQkbTIkvMg3lj5Bj1r9qTgDQV9XYrXKBxEJK2yXA/i\n4JmDzN4+m519d7q/8bg414X4/IzCQUTSw/++zTzsndXv0L16dwrdUMj9jffuDZ07w5Ej7m87nRQO\nIpJeWWqQ+vTF05R/vzybe22mZN6SbqosXmioa3W4gADYsgVuu8297aeDwkFEtB5EKn2y/hMeqviQ\n+8PBWnjhBdchpt69FQ4ikilkmR7EpZhLlHuvHAufWEi1Ym6+JtLcudC6NRQoAHv2QHCwe9tPI4WD\niFymHkQqTP9zOlWKVnF/OERFwYABrvvDhikcRCTTyBIBYa1l7G9jebHOi+5vPCoKWrRwzZbu1cv9\n7aeBwkFE3ClLnOb6056fyBaQjSY3N3F/4zfeCO+95wqKoCD3t59KCgcRcbcs0YN4Z807vFDnBc+u\nNZ09u+favg6Fg4h4gscDwhjzoDFmhzFmlzHm5SRe72iMCY2/rTLGVHHn/nee3Eno8VAer/S4O5v1\nGwoHEfEUjwaEMSYA+BBoBlQCOhhjrj4HdC9wv7W2GvA68Kk7a5jwxwSeuvMpcmTL4c5m/YLCQUQ8\nydNjELWB3dbaAwDGmBlAa2DH5Q2stYkXal4D3OSunUdERTBt8zQ29NjgriZdVq1yzXm4/373tpsG\nCgcR8TRPH2K6Cfg70eNDpBwATwML3bXzr7Z8xb2l76VM/jLuahJiYqBHD6hfH374wX3tpoHCQUS8\nwW/OYjLGNAS6Afe6oz1rLRP+mMDoJqPd0dwVkybB9u1Qvjw0b+7etlNB4SAi3uLpgDgMlE70uGT8\nc/9ijKkKTAQetNaeTq6xYcOGJdxv0KABDVL4htx4bCPhkeHuPbX13DkYOtR1/803vX7mksJBRK4n\nJCSEkJAQt7Tl0UttGGMCgZ1AY+AosA7oYK3dnmib0sDPQKerxiOubitNl9roM78PRW8sypD6Q9Jb\n/rWGDIERI6BOHfj1V/DkabNXUTiISHr47Ypy1tpYY0xfYDGu8Y5J1trtxpierpftRGAwEAx8ZFwT\nFaKttbUzst+L0ReZsXWGeweno6Nh2jTX/bFjFQ4ikullyov1Td8ynS82fcHiTovdW8TZszBvHjzx\nhHvbTYHCQUQyQhfru8rnmz7nqTufcn/DefMqHEQky8h0AXHwzEE2HN1A69ta+7qUDFE4iIivZbqA\nmPnnTB697VFyZsvp61LSTeEgIv4g0wXE9D+n06FKB/c0FhfnmhjnRQoHEfEXmSogdp7cydHzR6lf\npr57Gpw2DapVg59/dk9716FwEBF/4jczqd1hxp8zaHdHOwIDAjPe2MWL8NprcOgQHL5mbp/bKRxE\nxN9kmh6EtZYZW2e47/DSu++6wqF6dXjySfe0mQyFg4j4o0wTEKHHQ7kUc4m7b7o7442dOAGjRrnu\njx0LAZ77mBQOIuKvMk1AzNk+h7Z3tHXPqnHDh7uuu9S8OTRunPH2kqFwEBF/lmkCYu7OubS+1U1z\nH+69F8qVgzFj3NNeEhQOIuLvMsWlNg6EH+CuT+/i6ICj7hmgBoiNhUA3tXUVhYOIeEuWv9TGvF3z\naFmxpfvCARQOIpLlZYqA+GHnDzxc8WFfl3FdCgcRcRLHB8SZyDOsPbSWB8o/4OtSUqRwEBGncXxA\n/LTnJ+4vcz83Zr8x/Y3ExsLnn8OlS+4rLBGFg4g4keMDYv7u+TxU8aGMNfL11/DUU9C0qXuKSkTh\nICJO5eiAsNaybN+yjK07fekSDB7sut+tm3sKi6dwEBEnc3RA7A7bTYAJoHyB8ulv5OOP4cABqFQJ\nOnVyW20KBxFxOkcHxLJ9y2hUrlH6Z0+fPQuvv+66P2qU205tVTiISGbg6IBYvn85Dcs2TH8D06fD\nyZNQrx48lMFxjHgKBxHJLBw7kzrOxlFsbDH+6PEHpfOVTl+j1sKPP0KxYnDXXRmuUeEgIv4mIzOp\nHbsexNZ/tpIvZ770hwOAMdCqlVvqUTiISGbj2ENMy/Yto1HZRr4uA1A4iEjm5NyA2O8aoPY1hYOI\nZFaODAhrLasOruK+Mvel581uq0PhICKZmSMDYk/YHnIH5aZEnhJpf/Njj8HQoXD+fIZqUDiISGbn\nyIBYe3gtd5dMx9Kiy5bBt9+61pvOwHWXFA4ikhU4MyAOrU372tPWwiuvuO4PHAgFC6Zr3woHEckq\nnBkQh9MRED/8AL//DkWLwvPPp2u/CgcRyUocFxDRsdH8+c+f1CheI/Vvio2F115z3X/tNcidO837\nVTiISFbjuIlyO07uoHS+0uTOnoYv+TNnoFw518D0M8+keZ8KBxHJihwXEKHHQ6lWrFra3hQcDPPm\nQVgY5MiRprcqHEQkq3LcIabNxzdTtUjV9L05ODhNmyscRCQrc1xApKsHkQ4KBxHJ6pwXEMdCqVbU\nswGhcBARcVhAnLxwksiYSErmLXn9jc+fh/3707wPhYOIiIujAmJP2B4qFKyQuhXk3nsPKlaE999P\ndfsKBxGRKxwXELcE33L9DU+fhrfeguhoqFw5VW0rHERE/s15AVEgFQHx1luuuQ+NG0Oj618SXOEg\nInItRwXEX6f/un4P4vhx1+ElgJEjr9umwkFEJGmOCog9YXsoH1w+5Y3efBMuXICHH4a7U75ek8JB\nRCR5jppJnaoxiH79XDOmBwxIcTOFg4hIyox14wprnmSMsblH5ubcoHOpO4spBQoHEckqjDFYa9P1\npemoQ0xl85dVOIiIeImjAiI4V9qupXQ1hYOISOo5KiDy5cyX7vcqHERE0sZZAZEjmYB4+20IDU32\nfQoHEZG0c9RZTEkGxJYtrjOWcuaEI0egQIF/vaxwEBFJH0f1IPLmyHvtk8OGuf7s0UPhICLiRo4K\niGvGIDZtgjlzXL2HV17510sKBxGRjHFWQFx9iOly76F3byhePOFphYOISMY5KyAS9yCOH4eff4Zc\nuWDgwISnFQ4iIu7h3EHqokVh715Yt851H4WDiIg7OaoHcc0gdeHC0LIloHAQEXE3RwVEchPlFA4i\nIu7nrIBIYh6EwkFExDOcFRA580Giq88qHEREPMdRAZFnzUa4/3745ReFg4iIh3k8IIwxDxpjdhhj\ndhljXk5mm/eNMbuNMZuMMdWTaytw+P9g1Sr2f7Fc4SAi4mEeDQhjTADwIdAMqAR0MMbcdtU2zYHy\n1toKQE/g42QbDAkh+sb8NJ73fJYOh5CQEF+X4Df0WVyhz+IKfRbu4ekeRG1gt7X2gLU2GpgBtL5q\nm9bAVABr7VognzGmaHINjo0bwKRv82fZcAD98Cemz+IKfRZX6LNwD08HxE3A34keH4p/LqVtDiex\nDQBhJph7Zz2XpcNBRMRbHDVIHf7Ui9zXMokruoqIiNsZm+i0Ubc3bsw9wDBr7YPxj18BrLV2dKJt\nPgaWW2tnxj/eAdS31h6/qi3PFSoikolZa0163ufpazH9DtxijCkDHAXaAx2u2mYu0AeYGR8o4VeH\nA6T/LygiIunj0YCw1sYaY/oCi3Edzppkrd1ujOnpetlOtNYuMMa0MMbsASKAbp6sSUREUsejh5hE\nRMS5/G6Q2p0T65zuep+FMaajMSY0/rbKGFPFF3V6Q2p+LuK3u8sYE22MedSb9XlTKv+PNDDGbDTG\n/GmMWe7tGr0lFf9HChpjFsZ/V2wxxnT1QZkeZ4yZZIw5bozZnMI2af/etNb6zQ1XYO0BygBBwCbg\ntrD7BrgAAAPQSURBVKu2aQ7Mj79/N7DG13X78LO4B8gXf//BrPxZJNruZ+BH4FFf1+3Dn4t8wFbg\npvjHhXxdtw8/i6HAqMufA3AKyObr2j3wWdwLVAc2J/N6ur43/a0H4faJdQ523c/CWrvGWnsm/uEa\nkpk/kgmk5ucCoB8wG/jHm8V5WWo+i47At9bawwDW2pNertFbUvNZHAPyxN/PA5yy1sZ4sUavsNau\nAk6nsEm6vjf9LSDcOrHO4VLzWST2NLDQoxX5znU/C2NMCaCNtXYCkJnPeEvNz0VFINgYs9wY87sx\nppPXqvOu1HwWnwKVjDFHgFCgv5dq8zfp+t501JKjkjRjTENcZ3/d6+tafOhdIPEx6MwcEteTDagB\nNAJyA6uNMauttXt8W5ZPDAJCrbUNjTHlgSXGmKrW2vO+LswJ/C0gDgOlEz0uGf/c1duUus42mUFq\nPguMMVWBicCD1tqUuphOlprPohYwwxhjcB1rbm6MibbWzvVSjd6Sms/iEHDSWhsJRBpjVgDVcB2v\nz0xS81nUA0YCWGv/MsbsA24D/vBKhf4jXd+b/naIKWFinTEmO66JdVf/B58LdIaEmdpJTqzLBK77\nWRhjSgPfAp2stX/5oEZvue5nYa29Of5WDtc4RO9MGA6Quv8jPwD3GmMCjTE34BqU3O7lOr0hNZ/F\ndqAJQPwx94rAXq9W6T2G5HvO6fre9KsehNXEugSp+SyAwUAw8FH8b87R1travqvaM1L5WfzrLV4v\n0ktS+X9khzFmEbAZiAUmWmu3+bBsj0jlz8Uo4AtjTCiuL8+B1tow31XtGcaYr4EGQEFjzEFcZ29l\nJ4Pfm5ooJyIiSfK3Q0wiIuInFBAiIpIkBYSIiCRJASEiIklSQIiISJIUECIikiQFhMh1GGNijTEb\n4i+fvcEYU9oYU98YEx7/eKsxZkj8tlc//7qv6xdJL7+aKCfipyKstTUSP2GMKQessNY+HD9beZMx\n5vIs3svP5wQ2GmPmWGs3eLtokYxSD0Lk+lK88J+19gKwHrjlqucjca1RUN5zpYl4jgJC5PpyJTrE\n9G2i5w24Vi3Ddb2jrVc9XwC4C8h0l7mQrEGHmESu78LVh5ji3WeMWQ/E4Vq1bLsxpkj88xuBCsAn\n1tqtSbxXxO8pIETSb4W19uHknjfGlAWWGWPesdYe8m5pIhmnQ0wi15euxYestfuB94Ahbq1GxEvU\ngxC5voxc8vgTYKcxpqR6EeI0uty3iIgkSYeYREQkSQoIERFJkgJCRESSpIAQEZEkKSBERCRJCggR\nEUmSAkJERJKkgBARkST9P9t8j0P2af48AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# код, рисующий картинку. для задачи он не важен.\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "x = np.linspace(0, 1, 300)\n", "plt.figure(figsize=(6,6))\n", "plt.plot(x, x)\n", "plt.plot(x, np.sqrt(x), '-', label=\"first algorithm\")\n", "plt.plot(x, 1-(x-1)**2, '--', lw=2, label=\"second algorithm\")\n", "plt.legend(loc='best')\n", "plt.ylabel(\"TPR\")\n", "plt.xlabel(\"FPR\")" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Впишите решение сюда (при необходимости, создайте дополнительные ячейки ниже этой)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 2\n", "Основано на [этом дз](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/homeworks-theory/homework-theory-04-linclass.pdf). Алгоритм построения ROC-кривой подробно описан [здесь](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/seminars/sem05-linclass.pdf).\n", "\n", "Пусть дана выборка $X$, состоящая из 8 объектов, и классификатор $b(x)$, предсказывающий оценку принадлежности объекта положительному классу (чем больше $b(x)$, тем больше уверенность, что объект $x$ принадлежит положительному классу). Предсказания $b(x)$ и реальные метки приведены ниже. Классификатор $a(x; t)$ относит объект $x$ к положительному классу, если $b(x) \\ge t$, и к отрицательному классу в противном случае. Построить ROC-кривую и вычислить AUC-ROC для семейства классификаторов $a(x; t)$.\n", "\n", "- $b(x_1)=0.1,\\quad y_1=+1$;\n", "- $b(x_2)=0.8,\\quad y_2=+1$;\n", "- $b(x_3)=0.2,\\quad y_3=-1$;\n", "- $b(x_4)=0.25,\\quad y_4=-1$;\n", "- $b(x_5)=0.9,\\quad y_5=+1$;\n", "- $b(x_6)=0.3,\\quad y_6=+1$;\n", "- $b(x_7)=0.6,\\quad y_7=-1$;\n", "- $b(x_8)=0.95,\\quad y_8=+1$." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Впишите решение сюда (при необходимости, создайте дополнительные ячейки ниже этой)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В [csv-файле](http://math-info.hse.ru/f/2016-17/nes-ml/diabetes.csv) содержатся данные о пациентах. Требуется обучить логистическую регрессию, которая бы предсказывала, болен пациент диабетом или нет (переменная `diabet` имеет значение `+1`, если человек болен, и `-1`, если нет).\n", "\n", "Загрузите файл с помощью `pandas.read_csv`, сформируйте обучающую и тестовую матрицы признаков `X_train`, `X_test` (разделите всю выборку в отношении 80/20) и векторы ответов `y_train`, `y_test` (можно использовать `sklearn.model_selection.train_test_split` (см. [документацию](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html)), нормализуйте значения признаков с помощью [`sklearn.preprocessing.scale`](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.scale.html#sklearn.preprocessing.scale), затем обучите логистическую регрессию (`sklearn.linear_model.LogisticRegression`) на обучающей выборке.\n", "\n", "Обратите внимание, что в задачах диагностики цена ошибки false negative (не обнаружили, что человек болен диабетом, хотя он действительно болен, в результате не было дано адекватное лечение) гораздо выше цены ошибки false positive (в этом случае достаточно провести повторный анализ, который скорее всего укажет на отсутствие болезни).\n", "\n", "Найдите confusion matrix для вашего алгоритма (на тестовой выборке). Найдите число ошибок каждого вида. Найдите TPR и FPR.\n", "\n", "Метод `predict()` для объекта `LogisticRegression` относит каждый объект к тому классу, предсказанная вероятность которого для данного объекта больше предсказанной вероятности других классов. То есть для двухклассовой классификации это соответствует порогу $0.5$. На основании полученных выше данных, объясните, следует ли на ваш взгляд изменить порог, и если да, то в какую сторону?\n", "\n", "Для вычисления confusion matrix вы можете использовать функцию `sklearn.metrics.confusion_matrix`, ей необходимо передать истинные классы и предсказанные классы. (О том, какая строка и какой столбец какому классу соответствует, лучше почитать в [документации](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html).)" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Впишите решение сюда (при необходимости, создайте дополнительные ячейки ниже этой)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.0" }, "toc": { "toc_cell": false, "toc_number_sections": false, "toc_threshold": 6, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 0 }