{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "

Методы машинного обучения

\n", "

Семинар: деревья решений

" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "plt.style.use('ggplot')\n", "plt.rcParams['figure.figsize'] = (12,8)" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "Для тех у кого проблемы с graphviz (В основном касается Windows/)\n", "\n", "1) Установите graphviz через Anaconda Navigator - Environments\n", "Not installed, выберите graphviz\n", "\n", "2) найдите куда скачался graphviz\n", "C:\\Users\\\\Anaconda3\\Library\\bin\\graphviz\n", "\n", "3) скопируйте путь и добавьте его в переменную PATH\n", "- Зайдите в Панель управления -> Система и Безопасность -> Система-> Продвинутые настройки системы - > Переменные окружения.\n", "control panel -> system and security -> system -> advanced system settings - > environment variables.\n", "\n", "- Выделите переменную PATH и нажмите \"редактировать\"\n", "- Добавьте новый путь к graphviz (который вы скопировали в буфер обмена)\n", "4) перезагрузите компьютер" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Titanic Dataset" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [], "source": [ "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.tree import export_graphviz\n", "import subprocess" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Load titanic [dataset](https://cloud.mail.ru/public/N1Tn/25zEKkqge)" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "VARIABLE DESCRIPTIONS:\n", "survival Survival\n", " (0 = No; 1 = Yes)\n", "pclass Passenger Class\n", " (1 = 1st; 2 = 2nd; 3 = 3rd)\n", "name Name\n", "sex Sex\n", "age Age\n", "sibsp Number of Siblings/Spouses Aboard\n", "parch Number of Parents/Children Aboard\n", "ticket Ticket Number\n", "fare Passenger Fare\n", "cabin Cabin\n", "embarked Port of Embarkation\n", " (C = Cherbourg; Q = Queenstown; S = Southampton)\n", "\n", "SPECIAL NOTES:\n", "Pclass is a proxy for socio-economic status (SES)\n", " 1st ~ Upper; 2nd ~ Middle; 3rd ~ Lower\n", "\n", "Age is in Years; Fractional if Age less than One (1)\n", " If the Age is Estimated, it is in the form xx.5" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", "
" ], "text/plain": [ " PassengerId Survived Pclass \\\n", "0 1 0 3 \n", "1 2 1 1 \n", "2 3 1 3 \n", "3 4 1 1 \n", "4 5 0 3 \n", "\n", " Name Sex Age SibSp \\\n", "0 Braund, Mr. Owen Harris male 22.0 1 \n", "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", "2 Heikkinen, Miss. Laina female 26.0 0 \n", "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", "4 Allen, Mr. William Henry male 35.0 0 \n", "\n", " Parch Ticket Fare Cabin Embarked \n", "0 0 A/5 21171 7.2500 NaN S \n", "1 0 PC 17599 71.2833 C85 C \n", "2 0 STON/O2. 3101282 7.9250 NaN S \n", "3 0 113803 53.1000 C123 S \n", "4 0 373450 8.0500 NaN S " ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv('./data/titanic.csv')\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Проанализируем данные\n", " * Типы признаков\n", " * Пропущенные значения?\n", " * Пропорции классов" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PassengerId 0.000000\n", "Survived 0.000000\n", "Pclass 0.000000\n", "Name 0.000000\n", "Sex 0.000000\n", "Age 0.198653\n", "SibSp 0.000000\n", "Parch 0.000000\n", "Ticket 0.000000\n", "Fare 0.000000\n", "Cabin 0.771044\n", "Embarked 0.002245\n", "dtype: float64" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.isnull().mean()" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 549\n", "1 342\n", "Name: Survived, dtype: int64" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.Survived.value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Предобработка данных\n", " * выкидываем ненужные признаки\n", " * готовимся к работе с пропусками\n", " * подготовка категориальных признаков\n", " * разбиваем на обучение и контроль" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 S\n", "dtype: object" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.Embarked.mode()" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "drop_cols = ['PassengerId', 'Name', 'Ticket', 'Cabin']\n", "\n", "df.loc[:, 'Age'] = df.Age.fillna(df.Age.mean())\n", "df.loc[:, 'Embarked'] = df.Embarked.fillna(df.Embarked.mode()[0])\n", "df = pd.get_dummies(df, columns=['Embarked'])\n", "\n", "df.loc[:, 'Sex'] = df.Sex.replace({'male': 1, 'female': 0})\n", "\n", "df_result = df.drop(drop_cols, axis=1)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SurvivedPclassSexAgeSibSpParchFareEmbarked_CEmbarked_QEmbarked_S
003122.0107.2500001
111038.01071.2833100
213026.0007.9250001
311035.01053.1000001
403135.0008.0500001
\n", "
" ], "text/plain": [ " Survived Pclass Sex Age SibSp Parch Fare Embarked_C Embarked_Q \\\n", "0 0 3 1 22.0 1 0 7.2500 0 0 \n", "1 1 1 0 38.0 1 0 71.2833 1 0 \n", "2 1 3 0 26.0 0 0 7.9250 0 0 \n", "3 1 1 0 35.0 1 0 53.1000 0 0 \n", "4 0 3 1 35.0 0 0 8.0500 0 0 \n", "\n", " Embarked_S \n", "0 1 \n", "1 0 \n", "2 1 \n", "3 1 \n", "4 1 " ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_result.head()" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "X = df_result.iloc[:, 1:].values\n", "y = df_result.iloc[:, 0].values" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=123)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " * Обучим модель и визуализируем ее\n", " * Посмотрим на важность признаков" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "def plot_tree(tree, feature_names=None, class_names=['0', '1']):\n", " with open('tree.dot', 'w') as fout:\n", " export_graphviz(tree, out_file=fout, filled=True, feature_names=feature_names, class_names=class_names)\n", " command = [\"dot\", \"-Tpng\", \"tree.dot\", \"-o\", \"tree.png\"]\n", " subprocess.check_call(command)\n", " plt.imshow(plt.imread('tree.png'))\n", " plt.axis(\"off\")\n" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "from sklearn.tree import DecisionTreeClassifier" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "model = DecisionTreeClassifier(max_depth=4)" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=4,\n", " max_features=None, max_leaf_nodes=None,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=1, min_samples_split=2,\n", " min_weight_fraction_leaf=0.0, presort=False, random_state=None,\n", " splitter='best')" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "y_hat = model.predict_proba(X_valid)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.38541667, 0.61458333],\n", " [0.86486486, 0.13513514],\n", " [0.60465116, 0.39534884],\n", " [0.60465116, 0.39534884],\n", " [0.86486486, 0.13513514],\n", " [0.93902439, 0.06097561],\n", " [0.11111111, 0.88888889],\n", " [0.11111111, 0.88888889],\n", " [0.38541667, 0.61458333],\n", " [0.38541667, 0.61458333]])" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_hat[:10]" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import roc_auc_score, roc_curve" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [], "source": [ "fpr, tpr, thresh = roc_curve(y_valid, y_hat[:, 1])" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'TPR')" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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oDnOATIAAAA+QLhOB82NtIUAAAD4AOHaY3Zvu7R3L20hAAAAPkC49lpzU+Ij4RoAACDjEa691n06o6EtBAAAIOMRrr3WFE98ZOcaAAAg4xGuvdbTFsLONQAAQMYjXHvMdreFKI9wDQAAkOkI117raQth5xoAACDjEa691hyXcnJkcnK9rgQAAACjRLj2WnNcGlfgdRUAAABIAsK1x2xTXBqX73UZAAAASALCtdea44zhAwAA8AnCtdea4ryZEQAAwCcI115rjsuwcw0AAOALhGsPWWullibaQgAAAHyCcO2l1hapq4u2EAAAAJ8YVbj+4IMPklVHMDV3HyDDKD4AAABfCB/shpaWFu3evVslJSUqKEiEwPfff1+PP/64Nm3apEceeSTlRfpWd7g2jOIDAADwhSHD9caNG3XnnXeqvb1d4XBY1157rd5880298MILmjNnju666y636vQnjj4HAADwlSHD9aOPPqrLLrtM55xzjtauXau7775bM2bM0F133aX8fHZbR8vSFgIAAOArQ/Zc79mzR1VVVcrJydHcuXPV2dmpq666imCdLM3sXAMAAPjJkOHaWrvvxlBIY8aMUW5ubsqLCoyetpA8/rICAADgB0O2hbS3t+vmm2/uvW5ra+t3LUm33npraioLgua4NHacTFaW15UAAAAgCYYM11deeWW/69mzZ6e0mMDh6HMAAABfGTJcz5o1S5LU1NREn3UK2JY4LSEAAAA+MmS4fuedd7RixQo1NDQoEoloyZIlOvroo10qLQDYuQYAAPCVId/Q+NBDD+lTn/qUVqxYobPOOksPPfSQW3UFQ3NchjF8AAAAvjFkuN65c6cWLFigI444QhdffDHHnScbO9cAAAC+MmS4dhxHoVDiluzsbHV2drpSVBDYri6ptVni6HMAAADfGLLneu/evVq5cmXvdXt7e79rSbrmmmtSU5nftTQlPtIWAgAA4BtDhusLLrig3/X555+f0mICpYnTGQEAAPxmyHB92GGH6ZOf/KRbtQRL99HnZhzhGgAAwC+G7Lm+//773aojeLrDtQjXAAAAvjFkuLbWulVH4FjaQgAAAHxnyLYQx3G0ZcuWIb/BiSeemNSCAqO5MfGRnWsAAADfGDJcd3R06N577z3gDrYxZsD0EAxTc5MUCklj87yuBAAAAEkyZLgeM2YM4TlVmuLSuPEyxnhd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zZo1S5J05plnasuWLbK8PzSjDGedTzzxROXm5kqSjjvuOEWjUS9KxSgMZ50lac2aNTrvvPOUnZ3tQZUYjeGs8bPPPqtzzz1X+fn5kqTCwkIvSsUoDGedjTFqaWmRJLW0tKi4uNiLUjEK06dP7/11OphXXnlF55xzjowxmjZtmpqbm1VfX+9ihUMjXB9ANBpVJBLpvY5EIgNCVd97srKylJeXp3g87mqdGJ3hrHNfa9eu1amnnupGaUii4azz9u3bVVtbqxkzZrhdHpJgOGu8a9cu1dTU6KabbtI//dM/afPmzW6XiVEazjpfeOGFeuGFF3TllVfqtttu08KFC90uEykWjUZVUlLSe32wP7vdRrg+gMF2oI0xh3wP0tuhrOHzzz+v9957T+edd16qy0KSHWydHcfRAw88oMsuu8zNspBEw/m17DiOampqdPPNN+u6667Tvffeq+bmZrdKRBIMZ53XrVunWbNm6d5779UNN9ygu+66S47juFUiXJDu+YtwfQCRSER1dXW913V1dQP+aanvPV1dXWppaRnynzGQfoazzpL0+uuv64knntCSJUtoGchAB1vntrY27dixQ7feequuvvpqbd26VT/4wQ/07rvvelEuRmA4v5YnTJig008/XeFwWJMmTVJZWZlqamrcLhWjMJx1Xrt2rc466yxJ0rRp09TR0cG/KvtMJBJRbW1t7/WB/uz2CuH6AMrLy1VTU6M9e/aos7NT69evV2VlZb97ZsyYoeeee05SYsLACSeckFZ/c8LBDWedt2/frvvvv19LliyhRzNDHWyd8/LytGrVKt199926++67ddxxx2nJkiVMC8kgw/m1fMYZZ2jLli2SpMbGRtXU1Gjy5MlelIsRGs46l5SU9K7zzp071dHRoYKCAi/KRYpUVlbq+eefl7VW77zzjvLy8tIqXHNC4xA2btyoBx54QI7jaPbs2brgggu0Zs0alZeXq7KyUnv37tXKlSu1fft25efna/HixfxGnYEOts7f//739cEHH6ioqEhS4jfu66+/3uOqcagOts593XLLLbr00ksJ1xnmYGtsrdWDDz6ozZs3KxQK6YILLtDZZ5/tddk4RAdb5507d+q+++5TW1ubJOmSSy7RKaec4nHVOBR33nmn3nzzTcXjcRUWFmr+/Pnq7OyUJM2dO1fWWq1atUqvvfaacnJytGjRorT6/ZpwDQAAACQJbSEAAABAkhCuAQAAgCQhXAMAAABJQrgGAAAAkoRwDQAAACQJ4RoAAABIkrDXBQAAkuPqq69WQ0ODQqF9+yY33nijbrrpJuXm5kqSCgoK9NnPflbz5s2TJM2fP7/3sby8PM2cOVOXXnppv+8BABg+wjUA+Mj111+vk08+ufd6z549kqSf/vSnysrK0jvvvKN//ud/1tFHH61TTz1VkvTDH/5QpaWl2r17t26++WYdfvjhqqqq8qR+AMh0bE0AQIBMmzZNU6ZM0QcffDDgsdLSUh1//PF6//333S8MAHyCcA0AAWGt1VtvvaUdO3Zo6tSpAx7/8MMP9dZbb6m0tNSD6gDAH2gLAQAf+eEPf6isrCxJ0vTp03XFFVdIkr72ta/JGKOioiItWLBAJ510Uu9zrr/+ejmOo/b2ds2cOVPnnnuuF6UDgC8QrgHAR7773e8O2nO9atWq3tC9v3/913/V5MmT9dJLL+lnP/uZ2tvblZ2d7Uq9AOA3tIUAAGSM0cyZMzVt2jQ9/vjjXpcDABmLcA0A6DVv3jxVV1eroaHB61IAICMRrgEAvY488khNnz5dv/71r70uBQAykrHWWq+LAAAAAPyAnWsAAAAgSQjXAAAAQJIQrgEAAIAkIVwDAAAASUK4BgAAAJKEcA0AAAAkCeEaAAAASBLCNQAAAJAk/x8quZoqf0txIgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(fpr, tpr)\n", "plt.xlabel('FPR')\n", "plt.ylabel('TPR')" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8749662618083671" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "roc_auc_score(y_valid, y_hat[:, 1])" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Pclass 0.195365\n", "Sex 0.577291\n", "Age 0.095079\n", "SibSp 0.072319\n", "Parch 0.005876\n", "Fare 0.054071\n", "Embarked_C 0.000000\n", "Embarked_Q 0.000000\n", "Embarked_S 0.000000\n", "dtype: float64" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.Series(index=df_result.columns[1:], data=model.feature_importances_)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_tree(model, feature_names=df_result.columns[1:])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Speed Dating Data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Предобработка данных" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv('./data/speed-dating-experiment/Speed Dating Data.csv', encoding='latin1')" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(8378, 195)" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.shape" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [], "source": [ "df = df.iloc[:, :97]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Рассмотрим нужные признаки по очереди" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### iid\n", "unique subject number, group(wave id gender)\n", "\n", "Кажется это идентификатор" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "551" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iid.nunique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### id \n", "\n", "Subject number within wave\n", "\n", "Кажется это нам не нужно" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['id'], axis=1)\n", "df = df.drop(['idg'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### gender\n", "\n", "* Female=0\n", "* Male=1" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1 277\n", "0 274\n", "Name: gender, dtype: int64" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates(subset=['iid']).gender.value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### condtn:\n", "* 1=limited choice\n", "* 2=extensive choice\n", "\n", "???" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2 386\n", "1 165\n", "Name: condtn, dtype: int64" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates(subset=['iid']).condtn.value_counts()" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['condtn'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### wave\n", "\n", "Пока оставим в таблице, но в качестве признака рассматривать не будем" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", " 18, 19, 20, 21])" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.wave.unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### round:\n", "\n", "number of people that met in wave\n", "\n", "Можно взять в качестве признака.." ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['round'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### position:\n", "station number where met partner \n", "\n", "#### positin1\n", "station number where started \n", "\n", "Выкидываем" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['position', 'positin1'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### order: \t\t\n", "the number of date that night when met partner\n" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['order'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### partner: \t\n", "partner’s id number the night of event\n", "\n", "Это можно удались\n", "\n", "#### pid: \t\t\n", "partner’s iid number\n", "А вот это важно\n" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['partner'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### match\t\t\n", "* 1=yes, \n", "* 0=no\n", "\n", "Наш таргет" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### int_corr:\t\n", "correlation between participant’s and partner’s ratings of interests in \t\t\n", "\n", "#### samerace: \t\n", "participant and the partner were the same race. 1= yes, 0=no\n", "\n", "Придумали за нас признаки)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### age_o:\t\t\n", "age of partner\n", "#### race_o:\t\t\n", "race of partner\n", "#### pf_o_att: \t\n", "partner’s stated preference at Time 1 (attr1_1) for all 6 attributes\n", "#### dec_o: \t\t\n", "decision of partner the night of event\n", "#### attr_o: \t\t\n", "rating by partner the night of the event, for all 6 attributes\n", "\n", "Убираем" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['age_o', 'race_o', 'pf_o_att', \n", " 'pf_o_sin', 'pf_o_int',\n", " 'pf_o_fun', 'pf_o_amb', 'pf_o_sha',\n", " 'dec_o', 'attr_o', 'sinc_o', 'intel_o', 'fun_o',\n", " 'amb_o', 'shar_o', 'like_o', 'prob_o','met_o'], \n", " axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### age\n", "оставляем" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAHVCAYAAAADyWaQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAG9hJREFUeJzt3X9sXfV9//GXY9PSJIqxc0OYA4y4pJqgoaxLRErHkoW7TiodyreqIhXCxNqB2iAQZKqImASduqmWRnCUKoi1q0At0rpqWtyOdVvlWQlSIzRDQGNhzaCiv1uCY5MQCGX+8f2jwhofEiW5Pva1k8fjL+7NvT6f++Yj3yeHk3tbJiYmJgIAAEya1+wFAADAbCOSAQCgIJIBAKAgkgEAoCCSAQCgIJIBAKAgkgEAoCCSAQCgIJIBAKAgkgEAoNDW7AW85ec//3mzl9A0tVotQ0NDzV7GnGeO1TDHaphjdcyyGuZYDXOsRjPn2NXVdUqPcyYZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKbc1eAEy3sVuub9qxW7/y7aYdGwBonDPJAABQEMkAAFAQyQAAUBDJAABQEMkAAFAQyQAAUDjpR8A9+OCD2bdvX9rb27Nt27Ykyde//vU89dRTaWtry9KlS7N58+YsWLAgSbJr164MDAxk3rx5+ZM/+ZNceeWV0/sKAACgYic9k7xu3brcc889b7vviiuuyLZt23L//ffnN37jN7Jr164kyU9/+tPs3bs3DzzwQP78z/88X/3qVzM+Pj49KwcAgGly0ki+7LLLsnDhwrfd94EPfCCtra1Jkve9730ZHh5OkgwODubqq6/OOeeck/PPPz8XXHBBXnjhhWlYNgAATJ8pf+PewMBArr766iTJ8PBwVqxYMflnnZ2dkwFd6u/vT39/f5Kkp6cntVptqkuZs9ra2s7q11+VE83xpSas5S1z8d+r/VgNc6yOWVbDHKthjtWYC3OcUiT/4z/+Y1pbW3PNNdckSSYmJk75ufV6PfV6ffL20NDQVJYyp9VqtbP69VdlNs5xtq3nVMzGOc5F5lgds6yGOVbDHKvRzDl2dXWd0uMa/nSL3bt356mnnsodd9yRlpaWJMnixYtz6NChyccMDw+ns7Oz0UMAAEBTNBTJzzzzTL71rW/l7rvvzrvf/e7J+1etWpW9e/fmf//3f3Pw4MH84he/yKWXXlrZYgEAYCac9HKL7du357nnnsurr76az3zmM9m4cWN27dqV0dHRfOELX0iSrFixIrfeemsuuuiifOhDH8qWLVsyb968fPrTn868eT6KGQCAueWkkXznnXe+477169ef8PEf//jH8/GPf3xqqwIAgCZymhcAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKbc1eAGePsVuun9af/9K0/nQA4GziTDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAU2k72gAcffDD79u1Le3t7tm3bliQ5evRoent78/LLL2fJkiW56667snDhwkxMTOThhx/O008/nXe/+93ZvHlzuru7p/1FAABAlU56JnndunW555573nZfX19fVq5cmR07dmTlypXp6+tLkjz99NP55S9/mR07duTWW2/N3/7t307PqgEAYBqdNJIvu+yyLFy48G33DQ4OZu3atUmStWvXZnBwMEny5JNP5vd+7/fS0tKS973vfXnttdcyMjIyDcsGAIDpc9LLLY7n8OHD6ejoSJJ0dHTkyJEjSZLh4eHUarXJxy1evDjDw8OTj/2/+vv709/fnyTp6el52/PONm1tbTP6+l/6f1fP2LHOdnNxX8/0fjxTmWN1zLIa5lgNc6zGXJhjQ5F8IhMTE++4r6Wl5biPrdfrqdfrk7eHhoaqXMqcUqvVzurXfyabi/9e7cdqmGN1zLIa5lgNc6xGM+fY1dV1So9r6NMt2tvbJy+jGBkZyaJFi5L8+szx/33Bhw4dOu5ZZAAAmM0aiuRVq1Zlz549SZI9e/Zk9erVk/c//vjjmZiYyP/8z/9k/vz5IhkAgDnnpJdbbN++Pc8991xeffXVfOYzn8nGjRuzYcOG9Pb2ZmBgILVaLVu2bEmS/PZv/3b27duXO+64I+9617uyefPmaX8BAABQtZNG8p133nnc+++999533NfS0pI//dM/nfqqAACgiXzjHgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAURDIAABREMgAAFEQyAAAU2pq9ADiTjd1yfVOO2/qVbzfluABwpnAmGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACiIZAAAKIhkAAAoiGQAACm1TefJjjz2WgYGBtLS05KKLLsrmzZvzyiuvZPv27Tl69GiWL1+e22+/PW1tUzoMAADMqIbPJA8PD+df/uVf0tPTk23btmV8fDx79+7No48+muuuuy47duzIggULMjAwUOV6AQBg2k3pcovx8fG8+eabGRsby5tvvpnzzjsv+/fvz5o1a5Ik69aty+DgYCULBQCAmdLwdRCdnZ35oz/6o3z2s5/Nu971rnzgAx9Id3d35s+fn9bW1snHDA8PH/f5/f396e/vT5L09PSkVqs1upQ5r62tbUZf/0szdiSaZSr7aab345nKHKtjltUwx2qYYzXmwhwbjuSjR49mcHAwO3fuzPz58/PAAw/kmWeeOeXn1+v11Ov1ydtDQ0ONLmXOq9VqZ/Xrp3pT2U/2YzXMsTpmWQ1zrIY5VqOZc+zq6jqlxzUcyc8++2zOP//8LFq0KEly1VVX5cCBA3n99dczNjaW1tbWDA8Pp7Ozs9FDAABAUzR8TXKtVsvzzz+fX/3qV5mYmMizzz6bCy+8MJdffnmeeOKJJMnu3buzatWqyhYLAAAzoeEzyStWrMiaNWty9913p7W1NZdccknq9Xo++MEP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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df.drop_duplicates(subset=['iid']).age.hist(bins=20)" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "8" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates('iid').age.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [], "source": [ "df = df.dropna(subset=['age'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### field:\t\t\n", "field of study \n", "\n", "#### field_cd: \t\n", "field coded \n" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==========\n", "Field Code 1.0\n", "['Law' 'law' 'LAW' 'Law and Social Work'\n", " 'Law and English Literature (J.D./Ph.D.)' 'Intellectual Property Law'\n", " 'Law/Business']\n", "==========\n", "Field Code 2.0\n", "['Economics' 'Mathematics' 'Statistics' 'math' 'Mathematics, PhD' 'Stats'\n", " 'math of finance' 'Math']\n", "==========\n", "Field Code 3.0\n", "['Psychology' 'Speech Language Pathology' 'Speech Languahe Pathology'\n", " 'Educational Psychology' 'Organizational Psychology' 'psychology'\n", " 'Communications' 'Sociology' 'psychology and english' 'theory'\n", " 'Health policy' 'Clinical Psychology' 'Sociology and Education'\n", " 'sociology' 'Anthropology/Education' 'speech pathology'\n", " 'Speech Pathology' 'Anthropology' 'School Psychology' 'anthropology'\n", " 'Counseling Psychology' 'African-American Studies/History']\n", "==========\n", "Field Code 4.0\n", "['Medicine' 'Art History/medicine'\n", " 'Sociomedical Sciences- School of Public Health' 'Epidemiology'\n", " 'GS Postbacc PreMed' 'medicine']\n", "==========\n", "Field Code 5.0\n", "['Operations Research' 'Mechanical Engineering' 'Engineering'\n", " 'Electrical Engineering' 'Operations Research (SEAS)'\n", " 'Education Administration' 'Computer Science' 'Biomedical Engineering'\n", " 'electrical engineering' 'engineering' 'Medical Informatics'\n", " 'medical informatics' 'Electrical Engg.' 'Environmental Engineering'\n", " 'Instructional Tech & Media' 'MA in Quantitative Methods'\n", " 'Urban Planning' 'Financial Engineering' 'biomedical engineering'\n", " 'biomedical informatics' 'ELECTRICAL ENGINEERING'\n", " 'Biomedical engineering' 'Industrial Engineering'\n", " 'Industrial Engineering/Operations Research'\n", " 'Masters of Industrial Engineering' 'Biomedical Informatics']\n", "==========\n", "Field Code 6.0\n", "['MFA Creative Writing' 'Classics' 'Journalism' 'English'\n", " 'Comparative Literature' 'English and Comp Lit'\n", " 'Communications in Education' 'Creative Writing'\n", " 'Creative Writing - Nonfiction' 'Writing: Literary Nonfiction'\n", " 'Creative Writing (Nonfiction)' 'NonFiction Writing' 'SOA -- writing'\n", " 'journalism' 'Nonfiction writing']\n", "==========\n", "Field Code 7.0\n", "['German Literature' 'Religion' 'philosophy' 'History of Religion'\n", " 'Modern Chinese Literature' 'Philosophy' 'Religion, GSAS' 'History'\n", " 'History (GSAS - PhD)' 'American Studies' 'Philosophy (Ph.D.)'\n", " 'Philosophy and Physics' 'Art History' 'art history']\n", "==========\n", "Field Code 8.0\n", "['Finance' 'Business' 'money' 'Applied Maths/Econs' 'Economics' 'Finanace'\n", " 'Finance&Economics' 'Mathematical Finance' 'MBA'\n", " 'Business & International Affairs' 'Marketing' 'Business (MBA)'\n", " 'financial math' 'Business- MBA' 'Economics, English'\n", " 'Economics, Sociology' 'Economics and Political Science' 'business'\n", " 'Business, marketing' 'Business/ Finance/ Real Estate'\n", " 'International Affairs/Finance' 'international finance and business'\n", " 'International Business' 'International Finance, Economic Policy'\n", " 'Business/Law' 'Business and International Affairs (MBA/MIA Dual Degree)'\n", " 'QMSS' 'Public Administration' 'Master in Public Administration'\n", " 'Business School' 'MBA / Master of International Affairs (SIPA)'\n", " 'Finance/Economics' 'Business Administration' 'MBA Finance'\n", " 'BUSINESS CONSULTING' 'business school' 'Business, Media'\n", " 'Fundraising Management' 'Business (Finance & Marketing)' 'Consulting'\n", " 'MBA - Private Equity / Real Estate' 'General management/finance']\n", "==========\n", "Field Code 9.0\n", "['TC (Health Ed)' 'Elementary/Childhood Education (MA)'\n", " 'International Educational Development' 'Art Education'\n", " 'elementary education' 'MA Science Education' 'Social Studies Education'\n", " 'MA Teaching Social Studies' 'Education Policy'\n", " 'Education- Literacy Specialist' 'bilingual education' 'Education'\n", " 'math education' 'TESOL' 'Elementary Education'\n", " 'Cognitive Studies in Education' 'education'\n", " 'Curriculum and Teaching/Giftedness' 'Instructional Media and Technology'\n", " 'English Education' 'art education' 'Early Childhood Education'\n", " 'Ed.D. in higher education policy at TC' 'EDUCATION' 'music education'\n", " 'Music Education' 'Higher Ed. - M.A.' 'Neuroscience and Education'\n", " 'Elementary Education - Preservice'\n", " 'Education Leadership - Public School Administration'\n", " 'Bilingual Education' 'teaching of English']\n", "==========\n", "Field Code 10.0\n", "['chemistry' 'microbiology' 'Chemistry'\n", " 'Climate-Earth and Environ. Science' 'marine geophysics'\n", " 'Nutrition/Genetics' 'Neuroscience' 'physics (astrophysics)' 'Physics'\n", " 'Biochemistry' 'biology' 'Cell Biology' 'Microbiology' 'climate change'\n", " 'MA Biotechnology' 'Ecology' 'Computational Biochemsistry' 'Neurobiology'\n", " 'biomedicine' 'Biology' 'Conservation biology' 'biotechnology'\n", " 'Earth and Environmental Science' 'nutrition' 'Genetics' 'Nutritiron'\n", " 'Molecular Biology' 'Genetics & Development' 'genetics'\n", " 'medicine and biochemistry' 'Epidemiology' 'Nutrition'\n", " 'Applied Physiology & Nutrition' 'Biomedical Engineering' 'physics'\n", " 'Biotechnology' 'Neurosciences/Stem cells' 'Biology PhD'\n", " 'biochemistry/genetics' 'epidemiology'\n", " 'Biochemistry & Molecular Biophysics']\n", "==========\n", "Field Code 11.0\n", "['social work' 'Social Work' 'Masters of Social Work' 'Social work'\n", " 'International Affairs' 'Social Work/SIPA']\n", "==========\n", "Field Code 12.0\n", "['Undergrad - GS']\n", "==========\n", "Field Code 13.0\n", "['Masters in Public Administration' 'Masters of Social Work&Education'\n", " 'political science' 'International Relations'\n", " 'international affairs - economic development' 'Political Science'\n", " 'American Studies (Masters)' 'International Affairs'\n", " 'international affairs/international finance' 'International Development'\n", " 'International Affairs and Public Health' 'International affairs'\n", " 'International Affairs/Business' 'Master of International Affairs'\n", " 'International Politics' 'SIPA / MIA'\n", " 'International Security Policy - SIPA' 'Intrernational Affairs'\n", " 'International Affairs - Economic Policy' 'SIPA - Energy' 'Public Policy'\n", " 'Human Rights: Middle East' 'Human Rights' 'SIPA-International Affairs'\n", " 'Public Administration']\n", "==========\n", "Field Code 14.0\n", "['Film' 'MFA -Film' 'film']\n", "==========\n", "Field Code 15.0\n", "['Arts Administration' 'Museum Anthropology'\n", " 'Theatre Management & Producing' 'MFA Writing' 'MFA Poetry' 'Theater'\n", " 'MFA Acting Program' 'Acting' 'Public Health']\n", "==========\n", "Field Code 16.0\n", "['Polish' 'Japanese Literature' 'french']\n", "==========\n", "Field Code 17.0\n", "['Architecture']\n", "==========\n", "Field Code 18.0\n", "['working' 'GSAS' 'Climate Dynamics']\n" ] } ], "source": [ "for i, group in df.groupby('field_cd'):\n", " print('=' * 10)\n", " print('Field Code {}'.format(i))\n", " print(group.field.unique())" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "19" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.field_cd.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [], "source": [ "df.loc[:, 'field_cd'] = df.loc[:, 'field_cd'].fillna(19)" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['field'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Надо же как-то закодировать field_cd!" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [], "source": [ "from sklearn.preprocessing import OneHotEncoder" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [], "source": [ "df = \\\n", "pd.get_dummies(df, prefix='field_code', prefix_sep='=', \n", " columns=['field_cd'])" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
iidgenderwavepidmatchint_corrsameraceageundergramn_sat...field_code=10.0field_code=11.0field_code=12.0field_code=13.0field_code=14.0field_code=15.0field_code=16.0field_code=17.0field_code=18.0field_code=19.0
010111.000.14021.0NaNNaN...0000000000
110112.000.54021.0NaNNaN...0000000000
210113.010.16121.0NaNNaN...0000000000
310114.010.61021.0NaNNaN...0000000000
410115.010.21021.0NaNNaN...0000000000
\n", "

5 rows × 88 columns

\n", "
" ], "text/plain": [ " iid gender wave pid match int_corr samerace age undergra mn_sat \\\n", "0 1 0 1 11.0 0 0.14 0 21.0 NaN NaN \n", "1 1 0 1 12.0 0 0.54 0 21.0 NaN NaN \n", "2 1 0 1 13.0 1 0.16 1 21.0 NaN NaN \n", "3 1 0 1 14.0 1 0.61 0 21.0 NaN NaN \n", "4 1 0 1 15.0 1 0.21 0 21.0 NaN NaN \n", "\n", " ... field_code=10.0 field_code=11.0 field_code=12.0 \\\n", "0 ... 0 0 0 \n", "1 ... 0 0 0 \n", "2 ... 0 0 0 \n", "3 ... 0 0 0 \n", "4 ... 0 0 0 \n", "\n", " field_code=13.0 field_code=14.0 field_code=15.0 field_code=16.0 \\\n", "0 0 0 0 0 \n", "1 0 0 0 0 \n", "2 0 0 0 0 \n", "3 0 0 0 0 \n", "4 0 0 0 0 \n", "\n", " field_code=17.0 field_code=18.0 field_code=19.0 \n", "0 0 0 0 \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 0 0 0 \n", "4 0 0 0 \n", "\n", "[5 rows x 88 columns]" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### undergrd: \t\n", "school attended for undergraduate degree\n", "\n", "Пока выкинем" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "UC Berkeley 107\n", "Harvard 104\n", "Columbia 95\n", "Yale 86\n", "NYU 78\n", "Name: undergra, dtype: int64" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.undergra.value_counts().head()" ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['undergra'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### mn_sat: \t\n", "Median SAT score for the undergraduate institution where attended. \t\t\t" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1,400.00 403\n", "1,430.00 262\n", "1,290.00 190\n", "1,450.00 163\n", "1,340.00 146\n", "Name: mn_sat, dtype: int64" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.mn_sat.value_counts().head()" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [], "source": [ "df.loc[:, 'mn_sat'] = df.loc[:, 'mn_sat'].str.replace(',', '').astype(np.float)" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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IiJi5cqVH2h/SsOcJgdzmhzMaeIzo8nBnCaHcs1p1DE8Y8aM2Lt378Dne/fujbq6ujFZFAAAlMKoY/iYY46JnTt3xu7du6O3tzeeeOKJaGxsHMu1AQDAuKr67ne/+93R7FhZWRmHHnpo3HrrrfHoo4/G6aefHgsWLBjj5b3T3Llzx/X5GRvmNDmY0+RgThOfGU0O5jQ5lGNOFcVgF/8CAEAC7kAHAEBaYhgAgLQ+0O2Yx9ojjzwSjz32WBRFEUuWLImlS5dGT09PtLS0xJ49e2LmzJlx5ZVXRk1NTRRFEXfeeWc8/fTTMWXKlFi+fLnrgcbJbbfdFlu2bIna2tpYvXp1RMSo5rJhw4Z44IEHIiLi7LPPjkWLFpXrS/rQGWxGf/nLX+K3v/1t7NixI2644YY45phjBrZft25dtLW1RWVlZXzjG9+Ik08+OSLcYn28DTane+65JzZv3hzV1dUxa9asWL58eUybNi0izKlcBpvTfffdF5s2bYqKioqora2N5cuXR319vWNemQw2o/966KGH4t57743bb789pk+fbkZlNNic7r///njsscdi+vTpERFx7rnnxmc+85mIKOMxr5gg/v3vfxcrVqwoXn/99aK3t7f4/ve/X7z00kvFPffcU6xbt64oiqJYt25dcc899xRFURSbN28ufvCDHxT9/f3Fc889V3z7298u5/I/1LZt21a88MILxYoVKwYeG+lcuru7i0svvbTo7u5+x8eMjcFm9OKLLxY7duworrvuumL79u3vePyqq64q3nzzzWLXrl3FZZddVvT19RV9fX3FZZddVrz88svFW2+9VVx11VXFiy++WI4v50NrsDlt3bq16O3tLYri7Z+r//4smVP5DDanAwcODHz8+9//vvjZz35WFIVjXrkMNqOiKIo9e/YU119/fXHJJZcU+/btK4rCjMppsDn95je/KR588MF3bVvOY96EuUxix44dcdxxx8WUKVOiqqoqPvnJT8ZTTz0V7e3tsXDhwoiIWLhw4cAtnzdt2hRf+MIXoqKiIo4//vg4cOBAdHV1lfNL+NA64YQToqam5h2PjXQuW7dujZNOOilqamqipqYmTjrppNi6dWvJv5YPq8FmdNhhhw16J5/29vY45ZRT4qCDDoqPfexjceihh8b27dvdYr0EBpvTpz71qaiqqoqIiOOPPz46OzsjwpzKabA5TZ06deDjN954Y+AmU4555THYjCIi7r777jj//PPfcRMwMyqf95rTYMp5zJswMXz44YfH3//+9+ju7o433ngjnn766di7d2/s27dv4GYedXV1sX///oh4+3bQDQ0NA/vPmDFj4JcI42+kc/m/t++ur683rzJ5r1kMdot1Myqttra2gb8WNKeJ59e//nVccskl8ac//Sm++tWvRoRj3kSyadOmqK+vj6OOOuodj5vRxPOHP/whrrrqqrjtttuip6cnIsp7zJswMXzYYYfFV77ylbj++uvjhhtuiCOPPDIqK997ecUwbwdNaY1kLuZVHoPN6L0eN6PSeeCBB6KqqipOP/30iDCniejcc8+Nn/zkJ3HaaafFo48+GhGOeRPFG2+8EQ888MDA/6T8LzOaWM4888y49dZb4+abb466urr41a9+FRHlPeZNmBiOiFi8eHHcdNNN8b3vfS9qamri4x//eNTW1g5c/tDV1TVwwfWMGTOio6NjYF+3gy6tkc6lvr7+Hbfv7uzsNK8y+b+3Uu/s7Iz6+nq3WC+jDRs2xObNm+OKK64YOMib08R12mmnxV//+teIcMybKHbt2hW7d++Oq6++Oi699NLYu3dvXHPNNfHKK6+Y0QRzyCGHRGVlZVRWVsaSJUvihRdeiIjyHvMmVAzv27cvIiI6OjriqaeeilNPPTUaGxtj48aNERGxcePGmD9/fkRENDY2xuOPPx5FUcQ//vGPmDp1qm/iEhrpXE4++eR45plnoqenJ3p6euKZZ54Z+OtgSquxsTGeeOKJeOutt2L37t2xc+fOOPbYY91ivUy2bt0aDz74YFxzzTUxZcqUgcfNaWLZuXPnwMebNm0auB7fMW9iOOKII+L222+PtWvXxtq1a2PGjBlx0003xSGHHGJGE8z//vuup556Kg4//PCIKO8xb0LdgW7VqlXR3d0d1dXV8fWvfz3mzZsX3d3d0dLSEh0dHdHQ0BArVqwYeAuvO+64I5555pn4yEc+EsuXL3/HW0cxdtasWRPPPvtsdHd3R21tbZxzzjkxf/78Ec+lra0t1q1bFxFvv4XNGWecUc4v60NlsBnV1NTEL3/5y9i/f39MmzYtjjrqqPjOd74TEW//lfwf//jHqKysjAsvvDA+/elPR0TEli1b4u67747+/v4444wz4uyzzy7nl/WhM9ic1q1bF729vQP/yOS4446Liy++OCLMqVwGm9OWLVti586dUVFREQ0NDXHxxRcPvLWaY17pDTajxYsXD/z5pZdeGjfeeOPAW6uZUXkMNqdt27bFv/71r6ioqIiZM2fGxRdfPHAys1zHvAkVwwAAUEoT6jIJAAAoJTEMAEBaYhgAgLTEMAAAaYlhAADSEsMAAKQlhgEASOv/AfPPOmfRZC6uAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df.drop_duplicates('iid').mn_sat.hist()" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "342" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates('iid').mn_sat.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [], "source": [ "# Что будем делать?\n", "df = df.drop(['mn_sat'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### tuition: \t\n", "Tuition listed for each response to undergrad in Barron’s 25th Edition college profile book." ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "26,908.00 241\n", "26,019.00 174\n", "15,162.00 138\n", "25,380.00 112\n", "26,062.00 108\n", "Name: tuition, dtype: int64" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.tuition.value_counts().head()" ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [], "source": [ "df.loc[:, 'tuition'] = df.loc[:, 'tuition'].str.replace(',', '').astype(np.float)" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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y5ble9/7Xn70ox8Nx1MBAMCQG5ZI3r59eyZPnpxJkyalqakpV111Vbq7u4fjqQAAYMgNy+kWPT09aWtrG7jd1taWl1566ahturq60tXVlSTp7OzMlClThmMpJ/b/nq7neQEAOGkj1YzDciS5qqr33NfQ0HDU7Y6OjnR2dqazs3M4lnBGue++++pewhnN/Otj9vUx+3qZf33Mvl4jOf9hieS2trbs3r174Pbu3bvT0tIyHE8FAABDblgi+eKLL85rr72WnTt35siRI9m4cWNmz549HE8FAABDrvGLX/ziF4f6Nx01alQmT56cv/iLv8i3v/3tXH311Zk7d+5QPw3vMm3atLqXcEYz//qYfX3Mvl7mXx+zr9dIzb+hOtYJxAAAcAZzxT0AACiIZAAAKAzbZak5NZ/97GdzzjnnZNSoUWlsbExnZ2f279+fZcuW5Y033siECRNyzz33pLm5OVVVZdWqVXn22Wdz9tlnZ9GiRQPn66xbty5PPvlkkuSGG27I/Pnza3xVp6+VK1dm8+bNGT9+fJYuXZokQzrvH/zgB1mxYkUOHTqUK664Irfddtt7vhbxTHWs2X/jG9/IP//zP2fcuHFJkptuuikf/vCHkySrV6/O2rVrM2rUqNx2222ZNWtWkmTLli1ZtWpV+vv7c/3112fBggVJkp07d2b58uXZv39/Lrrootx5551pavLRlyS7du3KihUr8uabb6ahoSEdHR356Ec/at8fIcebv/1/+B06dCh/8id/kiNHjqSvry9z587NwoULjzuvw4cP55FHHskPfvCDfOADH8jdd9+diRMnJjn594Tjz3/FihV54YUXMmbMmCTvtNCFF15Y32dPxWlp0aJF1Z49e46674knnqhWr15dVVVVrV69unriiSeqqqqqZ555pnrggQeq/v7+atu2bdUXvvCFqqqqat++fdVnP/vZat++fUf9mvfaunVr9fLLL1eLFy8euG8o533fffdV27Ztq/r7+6sHHnig2rx58wi/wtPXsWb/9a9/vXrqqafes+2rr75aff7zn68OHTpU7dixo/rc5z5X9fX1VX19fdXnPve56vXXX68OHz5cff7zn69effXVqqqqaunSpdV3v/vdqqqq6rHHHqu+853vjMwL+znQ09NTvfzyy1VVVdWBAwequ+66q3r11Vft+yPkePO3/w+//v7+6uDBg1VVVdXhw4erL3zhC9W2bduOO69vf/vb1WOPPVZVVVV997vfrR566KGqqgb3nnD8+T/yyCPVv/7rv75n+7o+e5xu8XOku7s78+bNS5LMmzdv4FLfTz/9dK655po0NDRkxowZeeutt9Lb25stW7bk8ssvT3Nzc5qbm3P55Zdny5Ytdb6E09all16a5ubmo+4bqnn39vbm4MGDmTFjRhoaGnLNNde4TPu7HGv2x9Pd3Z2rrroqo0ePzsSJEzN58uRs374927dvz+TJkzNp0qQ0NTXlqquuSnd3d6qqytatWwe+XWf+/Plm/y4tLS0DR2POPffcTJ06NT09Pfb9EXK8+R+P/X/oNDQ05JxzzkmS9PX1pa+vLw0NDced19NPPz1whHLu3Ln5j//4j1RVddLvCe843vyPp67PHj9zOY098MADSZLf/M3fTEdHR/bs2TNwUZaWlpbs3bs3yTuXAW9vbx94XFtbW3p6et5zefDW1taf+QHM0YZq3se6TLv34cS+853vZMOGDZk2bVp+7/d+L83Nzenp6cn06dMHtnn3Pl3O+KWXXsq+ffsyZsyYNDY2vmd7jrZz58688sorueSSS+z7NXj3/L///e/b/0dAf39/7r333rz++uv57d/+7UyaNOm483r3vtzY2JgxY8Zk3759J/2e8H/K+U+fPj3/9E//lL/5m7/J3/3d3+VXf/VX88lPfjKjR4+u7bNHJJ+mvvSlL6W1tTV79uzJn/3Zn/3M65RX7+My4Ce6n/fvZOd9rO352X7rt34rN954Y5Lk61//ev76r/86ixYtOu4sT+Y94b3efvvtLF26NLfeeuvAuYDHYt8fHuX87f8jY9SoUfnzP//zvPXWW3nwwQfzP//zP8fd9ngz9p4MXjn///7v/87NN9+c8847L0eOHMljjz2Wp556KjfeeGNtnz1OtzhNtba2JknGjx+fOXPmZPv27Rk/fnx6e3uTJL29vQP/qKOtrS27du0aeOxPLwPe2tp61OXBe3p6XB78JAzVvI91mfafvr8c23nnnZdRo0Zl1KhRuf766/Pyyy8nee8l73t6etLa2nrMGbe0tOQDH/hADhw4kL6+vqO25/8cOXIkS5cuzdVXX50rr7wyiX1/JB1r/vb/kTV27Nhceumleemll447r3fPuK+vLwcOHEhzc/NJvye810/nv2XLlrS0tKShoSGjR4/Otddem+3btyep77NHJJ+G3n777Rw8eHDg1//+7/+eCy64ILNnz8769euTJOvXr8+cOXOSJLNnz86GDRtSVVVefPHFjBkzJi0tLZk1a1aee+657N+/P/v3789zzz038K9uObGhmndLS0vOPffcvPjii6mqKhs2bHCZ9hP4aaAlyb/927/l/PPPT/LO7Ddu3JjDhw9n586dee2113LJJZfk4osvzmuvvZadO3fmyJEj2bhxY2bPnp2GhobMnDkzmzZtSvLOv4I2+/9TVVUeffTRTJ06NR//+McH7rfvj4zjzd/+P/z27t2bt956K8k737Tw/PPPZ+rUqced16/92q9l3bp1SZJNmzZl5syZaWhoOOn3hHccb/4/3fd/er73u/f9Oj57XHHvNLRjx448+OCDSd75P9bf+I3fyA033JB9+/Zl2bJl2bVrV9rb27N48eKBr2V6/PHH89xzz+Wss87KokWLcvHFFydJ1q5dm9WrVyd556tRrr322tpe1+ls+fLleeGFF7Jv376MHz8+CxcuzJw5c4Zs3i+//HJWrlyZQ4cOZdasWbn99tv96O1/HWv2W7duzX/913+loaEhEyZMyB133DFwFObJJ5/Mv/zLv2TUqFG59dZbc8UVVyRJNm/enL/6q79Kf39/rr322txwww1J3vnzVH6l0+jRo2t7vaeT73//+1myZEkuuOCCgf3xpptuyvTp0+37I+B48//e975n/x9mP/zhD7NixYr09/enqqp85CMfyY033njceR06dCiPPPJIXnnllTQ3N+fuu+/OpEmTkpz8e8Lx5/+nf/qnA/8G4pd/+Zdzxx135Jxzzqnts0ckAwBAwekWAABQEMkAAFAQyQAAUBDJAABQEMkAAFAQyQAAUBDJAABQ+P/xIq7mpcaFkQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df.drop_duplicates('iid').tuition.hist()" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "310" ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates('iid').tuition.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [], "source": [ "# Что будем делать?\n", "df = df.drop(['tuition'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### race:\n", "* Black/African American=1\n", "* European/Caucasian-American=2\n", "* Latino/Hispanic American=3\n", "* Asian/Pacific Islander/Asian-American=4\n", "* Native American=5\n", "* Other=6\n" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [], "source": [ "# Ну тут вы уже сами знаете как быть\n", "df = pd.get_dummies(df, prefix='race', prefix_sep='=',\n", " columns=['race'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### imprace:\n", "How important is it to you (on a scale of 1-10) that a person you date be of the same racial/ethnic background?\n", "\n", "#### imprelig:\n", " How important is it to you (on a scale of 1-10) that a person you date be of the same religious background?\n" ] }, { "cell_type": "code", "execution_count": 116, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates('iid').imprace.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 117, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 117, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates('iid').imprelig.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [], "source": [ "# Что делать?\n", "\n", "df = df.dropna(subset=['imprelig', 'imprace'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### from:\n", "Where are you from originally (before coming to Columbia)? \n", "\n", "#### zipcode:\n", "What was the zip code of the area where you grew up? \n", "\n", "Выкидываем" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['from', 'zipcode'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### income" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [], "source": [ "df.loc[:, 'income'] = df.loc[:, 'income'].str.replace(',', '').astype(np.float)" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df.drop_duplicates('iid').loc[:, 'income'].hist()" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "261" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates('iid').loc[:, 'income'].isnull().sum()" ] }, { "cell_type": "code", "execution_count": 123, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['income'], axis=1)\n", "# df.loc[:, 'income'] = df.loc[:, 'income'].fillna(-999)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### goal:\n", " What is your primary goal in participating in this event? \n", "\tSeemed like a fun night out=1\n", "\tTo meet new people=2\n", "\tTo get a date=3\n", "\tLooking for a serious relationship=4\n", "\tTo say I did it=5\n", "\tOther=6\n", "\n", "#### date:\n", " In general, how frequently do you go on dates? \n", "\tSeveral times a week=1\n", "\tTwice a week=2\n", "\tOnce a week=3\n", "\tTwice a month=4\n", "\tOnce a month=5\n", "\tSeveral times a year=6\n", "\tAlmost never=7\n", "\n", "#### go out:\n", " How often do you go out (not necessarily on dates)?\n", "\tSeveral times a week=1\n", "\tTwice a week=2\n", "\tOnce a week=3\n", "\tTwice a month=4\n", "\tOnce a month=5\n", "\tSeveral times a year=6\n", "\tAlmost never=7\n", "\n", "Как бы вы предложили закодировать эти переменные?" ] }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 124, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates('iid').goal.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [], "source": [ "df = pd.get_dummies(df, prefix='goal', \n", " prefix_sep='=', columns=['goal'])" ] }, { "cell_type": "code", "execution_count": 126, "metadata": {}, "outputs": [], "source": [ "df = df.dropna(subset=['date'])" ] }, { "cell_type": "code", "execution_count": 127, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 127, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates('iid').go_out.isnull().sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### career:\n", "What is your intended career?\n", "\n", "#### career_c: \n", "career coded \n", "\n", "Работаем аналогично field и field_cd" ] }, { "cell_type": "code", "execution_count": 128, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==========\n", "Career Code 1.0\n", "['lawyer/policy work' 'lawyer' 'Law' 'Corporate Lawyer' 'Lawyer'\n", " 'Corporate attorney' 'law' 'Intellectual Property Attorney' 'LAWYER'\n", " 'attorney' 'Lawyer or professional surfer' 'lawyer/gov.position'\n", " 'Law or finance' 'IP Law' 'Academic (Law)' 'Private Equity' 'attorney?'\n", " 'Corporate law' 'tax lawyer' 'Business/Law' 'Assistant District Attorney']\n", "==========\n", "Career Code 2.0\n", "['Academia, Research, Banking, Life' 'academics or journalism' 'Professor'\n", " 'Academic' 'academia' 'teacher' 'industrial scientist'\n", " 'teaching and then...' 'Professor of Media Studies'\n", " 'Education Administration' 'Academic or Research staff'\n", " 'University Professor' 'Research Scientist'\n", " 'research in industry or academia' 'Teacher/Professor'\n", " 'no idea, maybe a professor' 'a research position' 'professor' 'teaching'\n", " 'engineering professional' 'research' 'Neuroscientist/Professor'\n", " 'Education' 'Professor and Government Official'\n", " 'physicist, probably academia' 'college art teacher' 'academic'\n", " 'Research scientist, professor' 'academics' 'academic research'\n", " 'academician' 'professional student' 'education' 'Historian'\n", " 'college professor' 'scientific research' 'Academic Physician'\n", " 'Researcher' 'Professor or Consultant' 'History Professor'\n", " 'Educational Policy' 'elementary school teacher' 'Research/Teaching'\n", " 'researcher in sociology' 'scientist' 'Naturalist'\n", " 'professor, poet/critic' 'researcher/academia' 'Art educator and Artist'\n", " 'Teacher' 'Scientist' 'Scientist/educator'\n", " 'scientific research for now but who knows' 'College Professor'\n", " 'Professor or Lawyer' 'research position in pharmaceutical industry'\n", " 'Academia' 'research/academia' 'Secondary Education Teacher'\n", " 'High School Social Studies Teacher' 'Education Policy Analyst'\n", " 'Literacy Organization head/ Director of Development for non-profit'\n", " 'English Teacher' 'Program development / policy work'\n", " 'professor of education' 'Educator' 'teaching/education'\n", " 'professor in college' 'Academia; Research; Teaching'\n", " 'curriculum developer' 'academic or consulting' 'Academia or UN'\n", " 'I am a teacher.' 'Professor or journalist'\n", " 'to get Ph.D and be a professor'\n", " 'Early Childhood Ed. - College/univ. faculity'\n", " 'medical examiner or researcher' 'University President'\n", " 'EDUCATION ADMINISTRATION' 'music educator, performer'\n", " 'Elementary Education Teaching' 'research - teaching' 'Research'\n", " 'Elementary school teacher' 'Bilingual Elementary School Teacher'\n", " 'Professor, or Engineer' 'Professor; Human Rights Director'\n", " 'Clinic Trial' 'English teacher' 'writer/teacher' 'Professor...?'\n", " 'acadeic' 'researcher' 'biology industry' 'Epidemiologist'\n", " 'epidemiologist' 'teacher and performer' 'TEACHING' 'Academic/ Finance'\n", " 'Science' 'Academic Work, Consultant']\n", "==========\n", "Career Code 3.0\n", "['psychologist' 'Social Worker.... Clinician' 'Psychologist'\n", " 'school psychologist' 'School Psychologist' 'Clinical Psychology'\n", " 'Clinical Psychologist' 'clinical psychologist, researcher, professor'\n", " 'School Counseling' 'Sex Therapist']\n", "==========\n", "Career Code 4.0\n", "['Biostatistics' 'Medicine' 'pharmaceuticals' 'Cardiologist' 'Pediatrics'\n", " 'medicine' 'pharmaceuticals and biotechnology' 'Physician Scientist'\n", " 'health policy' 'Epidemiologist' 'nutrition and dental' 'Physician'\n", " 'dietician' 'doctor and entrepreneur' 'Healthcare' 'Nutritionist'\n", " 'Private practice Dietician' 'physician, informaticist' 'physician'\n", " 'Medical Sciences' 'physician/healthcare' 'Doctor']\n", "==========\n", "Career Code 5.0\n", "['Informatics' 'Engineer' 'Ph.D. Electrical Engineering'\n", " 'Operations Research' 'Engineering' 'Mechanical Engineering'\n", " 'Civil Engineer' 'Urban Planner' 'Planning' 'ASIC Engineer'\n", " 'software engr, network engr' 'Research Engineer']\n", "==========\n", "Career Code 6.0\n", "['Journalist' \"Clidren's TV\" 'Music production' 'comedienne' 'novelist'\n", " 'Journalism' 'film' 'Writer' 'Porn Star' 'boxing champ'\n", " 'Paper Back Writer'\n", " 'Poet, Writer, Singer, Policy Maker with the UN and/or Indian Govt.'\n", " 'Entertainment/Sports' 'WRITING' 'manage a museum or art gallery'\n", " 'Entertainment/Media' 'Film/Television' 'Writing'\n", " 'Museum Work (Curation?)' 'Music Industry' 'Artist' 'Art Management'\n", " 'film directing' 'Screenwriter' 'Filmmaker' 'Writer/teacher'\n", " 'Writing or Editorial' 'writer/editor'\n", " 'producer at a non-profit regional theatre' 'writer' 'playing music'\n", " 'writer/producer' 'film and radio' 'Film' 'Writer/Editor' 'Actress'\n", " 'Acting']\n", "==========\n", "Career Code 7.0\n", "['research/financial industry' 'Financial Services' 'ceo' 'CEO' 'Banking'\n", " 'Capital Markets' 'Organizational Change Consultant' 'banker / academia'\n", " 'banker' 'Entrepreneur' 'consulting' 'Private Equity Investing'\n", " 'Investment Banking' 'Engineer or iBanker or consultant' 'Trading'\n", " 'Economic research' 'Microfinancing Program Manager' 'Marketing'\n", " 'Business - Investment Management' 'Finance' 'business'\n", " 'Marketing, Advertising' 'Asset Management' 'investment banking' 'MBA'\n", " 'Business' 'finance' 'Marketing and Media' 'Brand Management'\n", " 'Management Consulting' 'management consulting'\n", " 'financial service or fashion' 'International Business' 'Private Equity'\n", " 'Investment Management' 'Development work' 'marketing / brand management'\n", " 'Biotech/business' 'Country Analysis/Research/Credit Analysis'\n", " 'Consulting' 'corporate finance'\n", " 'CEO in For Profit Biomedical Organization' 'banking'\n", " 'Conservation training and education' 'president' 'Management Consultant'\n", " 'Trader' 'Wall Street Economist' 'enterpreneur' 'Industry CTO/CEO'\n", " 'finance or engineering' 'Venture Capital/Consulting/Government'\n", " \"Int'l Business\" 'Pharmaceuticals/Consulting' 'Investment banking'\n", " 'International Development banker'\n", " 'Corporate Finance, Asset Management/ Hedge Funds'\n", " 'Real Estate Consulting' 'Director of Training and Development'\n", " 'Marketing or Strategy and Business Development' 'Business Consulting'\n", " 'CONSULTING' 'investment management' 'Finance Related'\n", " 'Media Marketing/Entrepreneurship' 'Director of Admissions'\n", " 'Consultin \\\\ Management'\n", " 'Financial Mathematics-Investment Bank or Hedge Fund-Derivatives Quant Analyst'\n", " 'Work in an investment bank' 'M&A Advisory' 'millionaire'\n", " 'Fundraising for Non-Profits' 'Money Management' 'General Management'\n", " 'Public School Principal' 'Media Management' 'Public Finance'\n", " 'Business Management' 'private equity' 'Health care finance'\n", " 'Entrepreneurship' 'Fixed Income Sales & Trading'\n", " 'Consulting, later Arts or Non-Profit' 'Finance/Economics'\n", " 'Investment Banker' 'consultant'\n", " 'Business Management and Information Technology' 'self-made millionare'\n", " 'To go into Finance' 'Private Equity - Leveraged Buy-Outs' 'Management'\n", " 'General management/consulting']\n", "==========\n", "Career Code 8.0\n", "['Real Estate' 'Real Estate/ Private Equity']\n", "==========\n", "Career Code 9.0\n", "['Congresswoman, and comedian'\n", " 'To create early childhood intervention programs'\n", " 'health/nutrition oriented social worker' 'Social Worker'\n", " 'Social work with children' 'Speech Language Pathologist'\n", " 'Social Work Administration' 'social worker' 'Social Services/ Policy'\n", " 'Clinical Social Worker' 'international development work' 'Nonprofit'\n", " 'Child Rights' 'Development work on field in the middle of nowhere'\n", " 'International Development' 'UN Civil Servant'\n", " 'Humanitarian Affairs/Human Rights'\n", " 'International affairs related career' 'public service'\n", " 'Security Policy - Homeland Defense'\n", " 'reorganizing society. no, I am not being flip.' 'Intl Development'\n", " \"Diplomat / Int'l civil servant\" 'Diplomat/Business'\n", " 'Economic Policy Advisor on Latin America' 'Energy Management' 'Diplomat'\n", " 'Work at the UN' 'Foreign Service'\n", " 'Exec. Director of social service non-profit']\n", "==========\n", "Career Code 10.0\n", "['Undecided' \"I don't know\" 'What a question!' 'if only i knew'\n", " \"don't know\" 'Not Sure' 'undecided' 'TBA' 'Am not sure' 'Who knows' '?'\n", " 'not sure yet :)' 'Make money' 'still wondering' 'Not sure yet' 'unknown'\n", " 'unsure' '??' 'dont know yet']\n", "==========\n", "Career Code 11.0\n", "['Social Worker' 'Counseling Adolescents' 'Social work' 'Social Work'\n", " 'Social Work Policy' 'Clinical Social Worker']\n", "==========\n", "Career Code 12.0\n", "['speech pathologist' 'Speech Pathologist']\n", "==========\n", "Career Code 13.0\n", "['GOVERNOR' 'Political Development in Africa' 'Lobbyist' 'politics'\n", " 'School Leadership/Politics']\n", "==========\n", "Career Code 14.0\n", "['Pro Beach Volleyball']\n", "==========\n", "Career Code 15.0\n", "['Hero' 'Energy' 'Trade Specialist' 'professional career'\n", " \"assistant master of the universe (otherwise it's too much work)\"]\n", "==========\n", "Career Code 16.0\n", "['journalism' 'Writer/journalist']\n", "==========\n", "Career Code 17.0\n", "['Architecture and design']\n" ] } ], "source": [ "for i, group in df.groupby('career_c'):\n", " print('=' * 10)\n", " print('Career Code {}'.format(i))\n", " print(group.career.unique())" ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "59" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.career_c.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 130, "metadata": {}, "outputs": [], "source": [ "df.loc[:, 'career_c'] = df.loc[:, 'career_c'].fillna(18)" ] }, { "cell_type": "code", "execution_count": 131, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['career'], axis=1)" ] }, { "cell_type": "code", "execution_count": 132, "metadata": {}, "outputs": [], "source": [ "# Теперь это надо закодировать\n", "df = pd.get_dummies(df, prefix='career', prefix_sep='=',\n", " columns=['career_c'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How interested are you in the following activities, on a scale of 1-10?\n", " \n", " sports: Playing sports/ athletics\n", " tvsports: Watching sports\n", " excersice: Body building/exercising\n", " dining: Dining out\n", " museums: Museums/galleries\n", " art: Art\n", " hiking: Hiking/camping\n", " gaming: Gaming\n", " clubbing: Dancing/clubbing\n", " reading: Reading\n", " tv: Watching TV\n", " theater: Theater\n", " movies: Movies\n", " concerts: Going to concerts\n", " music: Music\n", " shopping: Shopping\n", " yoga: Yoga/meditation\n", "\n", "По большому счету с этими признаками можно придумать много чего.. Например у нас уже есть признак, который считает корреляцию между интересами пар. Пока мы все их выкинем" ] }, { "cell_type": "code", "execution_count": 133, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "sports 0\n", "tvsports 0\n", "exercise 0\n", "dining 0\n", "museums 0\n", "art 0\n", "hiking 0\n", "gaming 0\n", "clubbing 0\n", "reading 0\n", "tv 0\n", "theater 0\n", "movies 0\n", "concerts 0\n", "music 0\n", "shopping 0\n", "yoga 0\n", "dtype: int64" ] }, "execution_count": 133, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc[:, ['sports','tvsports','exercise','dining','museums','art','hiking','gaming',\n", " 'clubbing','reading','tv','theater','movies','concerts','music','shopping','yoga']\n", " ].isnull().sum()" ] }, { "cell_type": "code", "execution_count": 134, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['sports','tvsports','exercise','dining','museums','art','hiking','gaming',\n", " 'clubbing','reading','tv','theater','movies','concerts','music','shopping','yoga'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### exphappy:\n", "Overall, on a scale of 1-10, how happy do you expect to be with the people you meet \n", "during the speed-dating event?\n", "\n", "#### expnum: \n", "Out of the 20 people you will meet, how many do you expect will be interested in dating you? \n" ] }, { "cell_type": "code", "execution_count": 135, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates('iid').exphappy.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "416" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.drop_duplicates('iid').expnum.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['expnum'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Attr1\n", "\n", "We want to know what you look for in the opposite sex. \n", "Waves 6-9: Please rate the importance of the following attributes in a potential date on a scale of 1-10 (1=not at all important, 10=extremely important):\n", "Waves 1-5, 10-21: You have 100 points to distribute among the following attributes -- give more points to those attributes that are more important in a potential date, and fewer points to those attributes that are less important in a potential date. Total points must equal 100.\n", "\n", "attr1_1 \n", "Attractive\n", "\n", "sinc1_1\n", "Sincere\n", "\n", "intel1_1\n", "Intelligent\n", "\n", "fun1_1\n", "Fun\n", "\n", "amb1_1\n", "Ambitious\n", "\n", "shar1_1\n", "Has shared interests/hobbies\n" ] }, { "cell_type": "code", "execution_count": 138, "metadata": {}, "outputs": [], "source": [ "feat = ['iid', 'wave', 'attr1_1', 'sinc1_1', 'intel1_1', 'fun1_1', 'amb1_1', 'shar1_1']" ] }, { "cell_type": "code", "execution_count": 139, "metadata": {}, "outputs": [], "source": [ "temp = df.drop_duplicates(subset=['iid', 'wave']).loc[:, feat]" ] }, { "cell_type": "code", "execution_count": 140, "metadata": {}, "outputs": [], "source": [ "temp.loc[:, 'totalsum'] = temp.iloc[:, 2:].sum(axis=1)" ] }, { "cell_type": "code", "execution_count": 141, "metadata": {}, "outputs": [], "source": [ "idx = ((temp.wave < 6) | (temp.wave > 9)) & (temp.totalsum < 99)" ] }, { "cell_type": "code", "execution_count": 142, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
iidwaveattr1_1sinc1_1intel1_1fun1_1amb1_1shar1_1totalsum
91867320.015.020.020.05.010.090.0
1530105430.015.020.020.00.05.090.0
72214891920.010.020.020.020.00.090.0
75865172115.020.020.020.05.010.090.0
77845262110.010.030.020.010.015.095.0
\n", "
" ], "text/plain": [ " iid wave attr1_1 sinc1_1 intel1_1 fun1_1 amb1_1 shar1_1 totalsum\n", "918 67 3 20.0 15.0 20.0 20.0 5.0 10.0 90.0\n", "1530 105 4 30.0 15.0 20.0 20.0 0.0 5.0 90.0\n", "7221 489 19 20.0 10.0 20.0 20.0 20.0 0.0 90.0\n", "7586 517 21 15.0 20.0 20.0 20.0 5.0 10.0 90.0\n", "7784 526 21 10.0 10.0 30.0 20.0 10.0 15.0 95.0" ] }, "execution_count": 142, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp.loc[idx, ]" ] }, { "cell_type": "code", "execution_count": 143, "metadata": {}, "outputs": [], "source": [ "idx = ((temp.wave >= 6) & (temp.wave <= 9))" ] }, { "cell_type": "code", "execution_count": 144, "metadata": {}, "outputs": [], "source": [ "# temp.loc[idx, ]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ну понятно, надо чутка подредактировать исходные признаки и в бой" ] }, { "cell_type": "code", "execution_count": 145, "metadata": {}, "outputs": [], "source": [ "df.loc[:, 'temp_totalsum'] = df.loc[:, ['attr1_1', 'sinc1_1', 'intel1_1', 'fun1_1', 'amb1_1', 'shar1_1']].sum(axis=1)" ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [], "source": [ "df.loc[:, ['attr1_1', 'sinc1_1', 'intel1_1', 'fun1_1', 'amb1_1', 'shar1_1']] = \\\n", "(df.loc[:, ['attr1_1', 'sinc1_1', 'intel1_1', 'fun1_1', 'amb1_1', 'shar1_1']].T/df.loc[:, 'temp_totalsum'].T).T * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Проведите аналогичную работу для признаков `attr2`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Attr2" ] }, { "cell_type": "code", "execution_count": 147, "metadata": {}, "outputs": [], "source": [ "feat = ['iid', 'wave', 'attr2_1', 'sinc2_1', 'intel2_1', 'fun2_1', 'amb2_1', 'shar2_1']" ] }, { "cell_type": "code", "execution_count": 148, "metadata": {}, "outputs": [], "source": [ "temp = df.drop_duplicates(subset=['iid', 'wave']).loc[:, feat]" ] }, { "cell_type": "code", "execution_count": 149, "metadata": {}, "outputs": [], "source": [ "temp.loc[:, 'totalsum'] = temp.iloc[:, 2:].sum(axis=1)" ] }, { "cell_type": "code", "execution_count": 150, "metadata": {}, "outputs": [], "source": [ "idx = ((temp.wave < 6) | (temp.wave > 9)) & (temp.totalsum < 90) & (temp.totalsum != 0)" ] }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
iidwaveattr2_1sinc2_1intel2_1fun2_1amb2_1shar2_1totalsum
48163201220.010.010.010.020.010.080.0
\n", "
" ], "text/plain": [ " iid wave attr2_1 sinc2_1 intel2_1 fun2_1 amb2_1 shar2_1 totalsum\n", "4816 320 12 20.0 10.0 10.0 10.0 20.0 10.0 80.0" ] }, "execution_count": 151, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp.loc[idx, ]" ] }, { "cell_type": "code", "execution_count": 152, "metadata": {}, "outputs": [], "source": [ "idx = ((temp.wave >= 6) & (temp.wave <= 9))" ] }, { "cell_type": "code", "execution_count": 153, "metadata": {}, "outputs": [], "source": [ "# temp.loc[idx, ]" ] }, { "cell_type": "code", "execution_count": 154, "metadata": {}, "outputs": [], "source": [ "df.loc[:, 'temp_totalsum'] = df.loc[:, ['attr2_1', 'sinc2_1', 'intel2_1', 'fun2_1', 'amb2_1', 'shar2_1']].sum(axis=1)" ] }, { "cell_type": "code", "execution_count": 155, "metadata": {}, "outputs": [], "source": [ "df.loc[:, ['attr2_1', 'sinc2_1', 'intel2_1', 'fun2_1', 'amb2_1', 'shar2_1']] = \\\n", "(df.loc[:, ['attr2_1', 'sinc2_1', 'intel2_1', 'fun2_1', 'amb2_1', 'shar2_1']].T/df.loc[:, 'temp_totalsum'].T).T * 100" ] }, { "cell_type": "code", "execution_count": 156, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['temp_totalsum'], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Признаки `attr4` и `attr5` пока выбросим" ] }, { "cell_type": "code", "execution_count": 157, "metadata": { "scrolled": true }, "outputs": [], "source": [ "for i in [4, 5]:\n", " feat = ['attr{}_1'.format(i), 'sinc{}_1'.format(i), \n", " 'intel{}_1'.format(i), 'fun{}_1'.format(i), \n", " 'amb{}_1'.format(i), 'shar{}_1'.format(i)]\n", " \n", " if i != 4:\n", " feat.remove('shar{}_1'.format(i))\n", " \n", " df = df.drop(feat, axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Теперь создалим таблицу с мужчинами, таблицу с женщинами с сджоиним их" ] }, { "cell_type": "code", "execution_count": 158, "metadata": {}, "outputs": [], "source": [ "df = df.drop(['wave'], axis=1)" ] }, { "cell_type": "code", "execution_count": 159, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(8249, 77)" ] }, "execution_count": 159, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.shape" ] }, { "cell_type": "code", "execution_count": 160, "metadata": {}, "outputs": [], "source": [ "df_male = df.query('gender == 1').drop_duplicates(subset=['iid', 'pid'])\\\n", " .drop(['gender'], axis=1)\\\n", " .dropna()\n", "df_female = df.query('gender == 0').drop_duplicates(subset=['iid'])\\\n", " .drop(['gender', 'match', 'int_corr', 'samerace'], axis=1)\\\n", " .dropna()\n", " \n", "df_female.columns = df_female.columns + '_f'" ] }, { "cell_type": "code", "execution_count": 161, "metadata": {}, "outputs": [], "source": [ "df_pair = df_male.join(df_female.set_index('iid_f'), \n", " on='pid', how='inner')" ] }, { "cell_type": "code", "execution_count": 162, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3999, 148)" ] }, "execution_count": 162, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_pair.shape" ] }, { "cell_type": "code", "execution_count": 163, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 3345\n", "1 654\n", "Name: match, dtype: int64" ] }, "execution_count": 163, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_pair.match.value_counts()" ] }, { "cell_type": "code", "execution_count": 164, "metadata": {}, "outputs": [], "source": [ "label_col = 'match'" ] }, { "cell_type": "code", "execution_count": 165, "metadata": {}, "outputs": [], "source": [ "df_pair = df_pair.drop(['iid', 'pid'], axis=1)" ] }, { "cell_type": "code", "execution_count": 166, "metadata": {}, "outputs": [], "source": [ "X = df_pair.loc[:, df_pair.columns != label_col].values\n", "y = df_pair.loc[:, df_pair.columns == label_col].values.flatten()" ] }, { "cell_type": "code", "execution_count": 167, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 1, 1, 1, 0, 0, 0, 1, 0])" ] }, "execution_count": 167, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y[:10]" ] }, { "cell_type": "code", "execution_count": 168, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.14, 0. , 27. , ..., 0. , 0. , 1. ],\n", " [ 0.54, 0. , 22. , ..., 0. , 0. , 1. ],\n", " [ 0.16, 1. , 22. , ..., 0. , 0. , 1. ],\n", " ...,\n", " [ 0.5 , 0. , 27. , ..., 0. , 0. , 1. ],\n", " [ 0.28, 0. , 28. , ..., 0. , 0. , 1. ],\n", " [-0.36, 0. , 24. , ..., 0. , 0. , 1. ]])" ] }, "execution_count": 168, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X[:10]" ] }, { "cell_type": "code", "execution_count": 169, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3999, 145)" ] }, "execution_count": 169, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.shape" ] }, { "cell_type": "code", "execution_count": 170, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split" ] }, { "cell_type": "code", "execution_count": 171, "metadata": {}, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,\n", " random_state=123)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Задание\n", "\n", "Сфокусируемся на одном гиперпараметре деревьев решений - максимальной глубине.\n", "\n", "Подберите наилучшую глубину `d` дерева с помошью \n", "* Усредненной оценки качества roc-auc на кросс-валидации при различных `d`" ] }, { "cell_type": "code", "execution_count": 172, "metadata": {}, "outputs": [], "source": [ "from sklearn.tree import DecisionTreeClassifier\n", "\n", "try:\n", " from sklearn.model_selection import cross_val_score\n", "except ImportError:\n", " from sklearn.cross_validation import cross_val_score\n", "\n", "try:\n", " from sklearn.model_selection import validation_curve\n", "except ImportError:\n", " from sklearn.learning_curve import validation_curve" ] }, { "cell_type": "code", "execution_count": 173, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(class_weight='balanced', criterion='gini', max_depth=2,\n", " max_features=None, max_leaf_nodes=None,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=1, min_samples_split=2,\n", " min_weight_fraction_leaf=0.0, presort=False, random_state=None,\n", " splitter='best')" ] }, "execution_count": 173, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = DecisionTreeClassifier(max_depth=2, class_weight='balanced')\n", "model.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 174, "metadata": {}, "outputs": [], "source": [ "y_hat = model.predict(X_train)" ] }, { "cell_type": "code", "execution_count": 175, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 1, ..., 0, 1, 1])" ] }, "execution_count": 175, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_hat" ] }, { "cell_type": "code", "execution_count": 176, "metadata": {}, "outputs": [], "source": [ "y_hat_proba = model.predict_proba(X_train)" ] }, { "cell_type": "code", "execution_count": 177, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.55207836, 0.44792164],\n", " [0.55207836, 0.44792164],\n", " [0.39504568, 0.60495432],\n", " [0.39504568, 0.60495432],\n", " [0.55207836, 0.44792164],\n", " [0.39504568, 0.60495432],\n", " [0.39504568, 0.60495432],\n", " [0.39504568, 0.60495432],\n", " [0.39504568, 0.60495432],\n", " [0.55207836, 0.44792164]])" ] }, "execution_count": 177, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_hat_proba[:10]" ] }, { "cell_type": "code", "execution_count": 178, "metadata": {}, "outputs": [], "source": [ "scores = []\n", "cv = \n", "for d in range(1, 20):\n", " model = DecisionTreeClassifier(max_depth=d, class_weight='balanced')\n", " scores.append(\n", " cross_val_score(model, X_train, y_train, scoring='roc_auc', \n", " cv=5, n_jobs=-1).mean()\n", " )" ] }, { "cell_type": "code", "execution_count": 185, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 185, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(range(1,20), scores)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Задание\n", "\n", "Отсортируйте признаки по важности. Вектор с важностью признаков можно получить с помощью `model.feature_importances_`" ] }, { "cell_type": "code", "execution_count": 186, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(class_weight='balanced', criterion='gini', max_depth=6,\n", " max_features=None, max_leaf_nodes=None,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=1, min_samples_split=2,\n", " min_weight_fraction_leaf=0.0, presort=False, random_state=None,\n", " splitter='best')" ] }, "execution_count": 186, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = DecisionTreeClassifier(max_depth=6, class_weight='balanced')\n", "model.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 187, "metadata": {}, "outputs": [], "source": [ "imp = pd.Series(index=df_pair.columns[df_pair.columns != label_col],\n", " data=model.feature_importances_)" ] }, { "cell_type": "code", "execution_count": 188, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "date 0.110340\n", "sinc2_1 0.084710\n", "shar1_1_f 0.079804\n", "amb3_1_f 0.074389\n", "sinc3_1 0.044790\n", "dtype: float64" ] }, "execution_count": 188, "metadata": {}, "output_type": "execute_result" } ], "source": [ "imp.sort_values(ascending=False).head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Задание \n", "* Получите предсказания на тестовой выборке\n", "* Постройте ROC кривые для обучающей и тестовой выборок" ] }, { "cell_type": "code", "execution_count": 190, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5681619160208415" ] }, "execution_count": 190, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "y_hat = model.predict_proba(X_test)\n", "roc_auc_score(y_test, y_hat[:, 1])" ] }, { "cell_type": "code", "execution_count": 191, "metadata": {}, "outputs": [], "source": [ "# Получилась сильная просадка.. Переобучились таки" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Задание\n", "Перейдем к модели случайного леса. Зафиксируем некоторую глубину дерева (можно звять оптимальное с предыдущих заданий).\n", "\n", "Сравните качество работы \n", "* Простого дерева решений\n", "* Бэггинга над 10,20,...,100 деревьями решений\n", "* Случайного леса с 10,20,...,100 деревьями решений\n", "\n", "Получите график, у которого по оси X откладывается количество деревьев, а по оси Y - качество классификации." ] }, { "cell_type": "code", "execution_count": 192, "metadata": {}, "outputs": [], "source": [ "from sklearn.ensemble import BaggingClassifier\n", "from sklearn.ensemble import RandomForestClassifier" ] }, { "cell_type": "code", "execution_count": 195, "metadata": {}, "outputs": [], "source": [ "bag_valid_score = []\n", "rf_valid_score = []\n", "n_est_range = range(10, 110, 10)\n", "\n", "for n_est in n_est_range:\n", " \n", " model_bag = BaggingClassifier(base_estimator=DecisionTreeClassifier(max_depth=6, class_weight='balanced'), \n", " n_estimators=n_est)\n", " model_rf = RandomForestClassifier(max_depth=6, class_weight='balanced_subsample', n_estimators=n_est)\n", " \n", " bag_valid_score.append(\n", " cross_val_score(model_bag, X_train, y_train, scoring='roc_auc', \n", " cv=5, n_jobs=-1).mean()\n", " )\n", " rf_valid_score.append(\n", " cross_val_score(model_rf, X_train, y_train, scoring='roc_auc', \n", " cv=5, n_jobs=-1).mean()\n", " )\n", " " ] }, { "cell_type": "code", "execution_count": 198, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 198, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAswAAAHVCAYAAADl4K3UAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd41eX9//Hn55yTvQdJCCNAWGGFEYZgZcWBe+FuUVutra2j41e1Fm2tVdv6rZ1qW1e1VkUc4DYMRRGULUs2BBLJInue87l/f5wQiCQQIOGck7we1+VFxsnn3Ce5PXnlPu/7flvGGIOIiIiIiLTI4esBiIiIiIj4MwVmEREREZGjUGAWERERETkKBWYRERERkaNQYBYREREROQoFZhERERGRo1BgFhERERE5CgVmEREREZGjUGAWERERETkKBWYRERERkaNw+XoALcnLy/P1EARITEykqKjI18MQP6S5Ia3R3JDWaG7I0fhqfqSmprbpdlphFhERERE5CgVmEREREZGjUGAWERERETkKv6xh/iZjDLW1tdi2jWVZvh5Ol7F//37q6uo6/H6MMTgcDkJDQ/XzFREREb8TEIG5traWoKAgXK6AGG6n4XK5cDqdp+S+3G43tbW1hIWFnZL7ExEREWmrgCjJsG1bYbmTc7lc2Lbt62GIiIiIHCEgArNepu8a9HMWERERfxQQgVlERERExFcUmNsgNzeXadOmdfj9fPvb36asrKzD70dERERE2k6FwX7k+eef9/UQREREROQbAi4w2y/9C5O7s12vafXqi+Oqm456G7fbze23386GDRvo27cvf/nLXwgLC+NPf/oTH374IbW1tWRlZfHII49gWRZr1qzhZz/7GWFhYYwbN45FixaxcOFCampquOOOO9i+fTv9+/dn7969PPjgg2RmZjJ+/HjeffddqqqquO666xg3bhwrVqwgJSWFp59+mrCwsFav+03/+Mc/mDt3LpZlMW3aNGbOnMkdd9zB22+/DXhXzW+44QZycnLa9XspIiIi0tmoJKONtm/fznXXXUdOTg5RUVE899xzAFx//fW88847TWH4ww8/BOAnP/kJDz30EPPnz292NNtzzz1HTEwMOTk53HHHHaxbt67F+9u5cyezZs1i0aJFREdH88477xz1uodbuHAh7733Hm+99RY5OTn84Ac/YMCAAdTX17N7924A5s2bx/nnn99u3x8RERGRzirgVpiPtRLcUVJTUxk7diwAl156KU8//TS33HILS5cu5fHHH6empobS0lIGDRrE+PHjqaysbLr9xRdf3LSS+/nnn/Pd734XgMGDB5ORkdHi/fXq1Ythw4YBMGLECHJzcykrK2v1uodbsmQJV155ZdOZxnFxcQBccMEFzJ8/nx/96EfMmzePxx9/vL2+PSIiIiKdllaY2+ibR55ZlkVtbS333HMPTz75JAsWLOCaa66hrq4OY0yr1zna5w4XEhLS9LbT6cTj8bT5a40xLR7RduGFFzJ//ny2b9+OZVn069evTdcTERER6coUmNto3759rFixAoA333yTsWPHNrWNjo+Pp6qqqqk+ODY2lsjISFauXNl0+4PGjRvH/PnzAdiyZQubN29u8xiOdt3DTZ48mZdeeomamhoADhw4AECfPn1wOp089thjXHjhhW2+XxEREZGuTIG5jQYMGMCcOXPIzs6mtLSUWbNmERMTwzXXXEN2djY33ngjmZmZTbf/4x//yC9+8QsuuOACAKKiogCYNWsWxcXFZGdn8/e//52MjIymz7VFa9c93NSpUznrrLOYMWMGZ555Jk888UTT5y688EJee+21pq8XERERkaOzTBte51+zZg3PPPMMtm0zffp0Lr744iNus3TpUubMmYNlWaSlpXH77bcD8MILL7B69WoALrvsMiZOnHjMQeXl5TV7v7q6mvDw8DY9IH9RVVVFREQEAH/7298oKCjgN7/5DR6Ph4aGBkJDQ9m1axdXXnklS5YsITg4+KSu2xFcLhdut7tDrt2SQPw5d1WJiYkUFRX5ehjihzQ3pDWaG9Ka/Ip6hvdN9cn8SE1NbdPtjrnpz7ZtnnrqKe69914SEhK4++67ycrKomfPnk23yc/P54033uCBBx4gMjKyqfnGqlWr2LlzJ7///e9paGjg/vvvZ+TIkV0iFOXk5PC3v/0Nj8dDjx49eOyxxwCoqalh5syZNDQ0APDQQw+1OSwf7boiIiIigWbt11X8ZtFefjrVwcQU/z2L4pgj27ZtGykpKSQnJwMwceJEvvjii2aBecGCBZx99tlERkYCEBMTA8DevXsZMmQITqcTp9NJWloaa9asadMqc6C76KKLuOiii474eGRkJO+++267X1dEREQkkGwrruV3H+2jR1QwU/onUl9Z6ushteqYgbmkpISEhISm9xMSEti6dWuz2xwsofjVr36FbdvMnDmTkSNHkpaWxquvvsr5559PXV0dGzZsaBa0D8rJyWk6Hu3hhx8mMTGx2ef379+Py+W/f3V0Zqfy+x4SEnLEz178k8vl0s9KWqS5Ia3R3JDD5R6o4YGPthMbFsSfLx9BfGQo7lD/nR/HTEMtlTh/88gy27bJz8/nvvvuo6SkhNmzZ/Poo4+SmZnJ9u3buffee4mOjmbgwIEtNtvIzs4mOzu76f1v1rDU1dW12qRDOs6prmGuq6tTfVuAUC2itEZzQ1qjuSEHldS4+cX7u7Ftm9lTemHVVuB2hwR2DXNCQgLFxcVN7xcXFzc1wjgoPj6egQMH4nK5SEpKIjU1lfz8fPr378+ll17KpZdeCsCf//xnUlJSjudxiIiIiEgnUVnv4dcLcymvc/Pb7N70iG77Pi5fOuaxcunp6eTn51NQUIDb7Wbp0qVkZWU1u824ceNYv349AOXl5eTn55OcnIxt21RUVACwe/du9uzZ0+zoNRERERHpGurcNr/7aC97y+u4+4yeDEgI8/WQ2uyYK8xOp5Mbb7yRBx98ENu2mTp1Kr169eLll18mPT2drKwsMjMzWbt2LXfeeScOh4PrrruOqKgo6uvrmT17NgDh4eH8+Mc/VmlFo/Hjx/Puu+8SHx/frtf94Q9/yJYtW7jiiiu4+eab2/XaALm5uaxYsYJLLrmk3a8tIiIinZPHNjz6aR4bC2r4yaRURnaP8PWQjkubdnSNHj2a0aNHN/vYlVde2fS2ZVnMmjWLWbNmNbtNcHAwf/rTn9phmP7DGIMxBofD/3q+FBQUsGLFCj7//PM2f43b7T6ujX25ubm8/vrrCswiIiLSJsYYHv/8a5bvreSmrCTO6BPt6yEdt4A7euLfK/az80Btu16zb1wo38tKbvXzubm5XHfddUycOJGVK1fy9NNP87e//Y21a9dSW1vLeeedx89+9jPAu3I8c+ZMPvzwQ9xuN08++ST9+/enpKSEW2+9leLiYkaOHNlsM+WTTz7Jyy+/DMDVV1/NTTfdRG5uLtdeey3jxo1j1apVDBkyhCuuuIJHH32UoqIi/va3vzFq1Khm47zmmmsoLi7mzDPP5Le//S0RERHcdddd1NbWkpaWxqOPPkpsbCyXX345Y8aMYcWKFZx55pnMnDmTu+66i3379gHw61//mrFjx7J06VJ++ctfAt4/il577TV+97vfsW3btqav++Yq9j/+8Q/mzp2LZVlMmzaNmTNncscddzS1Dc/NzeWGG25oOhVFREREOrf/ri3iw+1lzByawPmD2veV9VPF/5ZJ/dT27du5/PLL+eCDD+jZsye/+MUvePfdd8nJyWHZsmVs3Lix6bbx8fG8//77fPvb325qS/2nP/2JcePG8cEHH3DWWWc1hdN169bxyiuv8NZbbzF//nxefPHFpnrwXbt28d3vfpecnBy2bdvGG2+8wRtvvMHs2bP561//esQYn3nmGdLS0vjwww8ZP348d9xxB7/85S/Jyclh8ODB/N///V/TbcvLy5k7dy633HILs2fP5qabbuKdd97hX//6V1P4/8c//sHvfvc7PvzwQ15//XVCQ0O55557GDduHB9++OERYXnhwoW89957vPXWW+Tk5PCDH/yAAQMGUF9fz+7duwGYN28e559/fjv+ZERERMRfvfVVCXM2FHNW/xiuzfTfY+OOJeBWmI+2EtyRevbsyZgxY5renz9/Pv/973/xeDzs37+frVu3MmTIEABmzJgBwIgRI5qalCxbtox///vfgPcYvdjYWAA+//xzzjnnnKbuhzNmzGD58uWcddZZ9OrVi4yMDAAGDhzI6aefjmVZDB48mNzc3KOOt7y8nLKyMk477TQAZs6cyfe///2mz1944YVNby9ZsoQtW7Y0vV9ZWUllZSXjxo3j17/+NZdccgkzZsw45tErS5Ys4corryQszFvEf/A0lQsuuID58+fzox/9iHnz5vH4448f9ToiIiIS+D7eVc6/VxQwvmckt4xNOeJY4kAScIHZVw5v571nzx6efPJJ3n77bWJjY7njjjuorT1UJhISEgJ4N0x6PJ6mj7c0UVo65/qb1wFwOBxNLbQdDkez656Iwx+PbdvMmzevKegedNtttzF16lQWLlzIBRdc0FQ20hpjTIuP8cILL+T73/8+M2bMwLIs+vXrd1JjFxEREf+2Jr+KP3+Wx5CkMH52eipOR+CGZVBJxgmpqKggLCyM6OhoCgsLWbRo0TG/ZsKECbz22muAt3ShtLS06ePvv/8+NTU1VFdX89577zF+/PiTHmN0dDQxMTEsX74cgLlz5zJhwoQWbzt58mSeffbZpvcPLwnJyMjg1ltvJTMzk23bthEZGUlVVVWr13nppZeoqakB4MCBAwD06dMHp9PJY4891mxlW0RERDqfrcU1PPTxXnpGh3DP5J4EOwM/bmqF+QQMHTqUYcOGMXXqVHr37s3YsWOP+TV33nknt956K2effTYTJkygR48eAAwfPpyZM2dy3nnnAd5Nf8OGDTtmyUVbPPbYY02b/nr37t2shvlwDzzwAPfccw/Z2dm43W7Gjx/PI488wpNPPsmnn36Kw+Fg4MCBTJ06FYfDgdPpJDs7+4ij66ZOncqGDRuYMWMGQUFBTJs2jbvvvhvwrjI/8MADLFu27KQfl4iIiPinveV1/GbRXmJCXdw3rReRwZ3jOGHLHK0mwEfy8vKavV9dXd2shEBOjVPdGls/58ChFrfSGs0NaY3mRudXXN3AXR/sps5tePisNFKPo4ufr+ZHW1tjB/4auYiIiIj4VGWdh18v3Et5nc3sqb2OKywHAgVmERERETlhdW6bBz/ay76Keu6Z3IP+CaG+HlK7C4jA7IdVI9IB9HMWEREJLB7b8IdP8thUWMNPJnYnMyWwWl63VUAEZofDcUpraeXUc7vdftluXERERFpmjOEfn3/NF/squXlsMpPSAq/ldVsFxCkZoaGh1NbWUldXF9CHXgeakJAQ6urqOvx+jDE4HA5CQzvfSzgiIiKd1fNrCsnZXsaVwxM4d2Ccr4fToQIiMFuWdURTDel42tEsIiIiLZm3uYS5G0s4u38sVw8P3JbXbaXXwEVERESkzRbvLOOplQWc1iuK749N7hKv/iswi4iIiEibrMqr5C+f5TMsOZyfTOoe8C2v20qBWURERESOaUtRDY8s2Ufv2BB+OblHp2h53VZd55GKiIiIyAnZW1bHbxbvJTbUxX1TexEe1DlaXreVArOIiIiItKqouoH7F+bitOD+ab2ICwuIMyPalQKziIiIiLSoos7DrxfmUllvc9/UXnSP6lwtr9tKgVlEREREjlDntvnt4r3kVTRwz+Qe9Ivvuv0SFJhFREREpBm3bfjDJ/v4qqiGn0zqzohO2vK6rRSYRURERKSJMYa/L/+aL/ZV8f2xyUzq3XlbXreVArOIiIiINPnPmkIW7ijj6uGJzOjkLa/bSoFZRERERAB4c1MJr20sYcaAWK4cnuDr4fgNBWYRERERYdGOMp5eVcDE3lHclNU1Wl63lQKziIiISBe3cl8lf12Wz4jkcH4yseu0vG4rBWYRERGRLuyrxpbXfeJCuHtyD4K6UMvrttJ3RERERKSLyi2r44FFucSFuZg9peu1vG4rBWYRERGRLqiwqoH7Fubiclj8elovYrtgy+u20ndGREREpIspr/Nw/8Jcahpsfndmb1K6aMvrttIKs4iIiEgXUuu2+e3iXPZXNvDLyT3pG9d1W163lQKziIiISBfhtg2/X7KPrcW1/PT0VIYlh/t6SAFBgVlERESkC7CN4a/L8lmZV8UPxqVwWq8oXw8pYCgwi4iIiHQBz60uZPHOcq4dkchZ/WN9PZyAosAsIiIi0sm9trGYNzaVcN7AWGYOU8vr46XALCIiItKJLdxRxnOrCzk9LYrvqeX1CVFgFhEREemkvtjrbXmdmRLOHad1x6GwfEIUmEVEREQ6oU2F1fz+k330iwvlrjPU8vpk6DsnIiIi0snsKa3jt4v3khjuYvbUnmp5fZIUmEVEREQ6kcKqBu5fmEuQ08H903oRE6rGzidLgVlEREQ6VJ3bZmthJbYxvh5Kp1de6+a+hbnUum3un9qT5Ei1vG4P+pNDREREOkR1g4d3t5Ty5uYSymo9dAt3MbVfDNP7xZASpSDX3moabH6zeK93hXlaL/qo5XW7UWAWERGRdlVR5+Htrw4w/6sSKuttRnWPYPrgFBZs/po564t5ZX0xw5LCmNYvhom9owkL0gveJ6vBY3hkyT62l9Ry1xk9GJqkltftSYFZRERE2kVprZs3N5XwzpZSat0243tGMnNYAgMSwkhMTORbqUEUVTewaEcZC3eU8ZdlX/PPFfuZ2Dua7H4xDEkK0xnBJ8A2hr8sy2d1fhU/Gp/C+J5qed3eFJhFRETkpBRVN/D6xhI+2FaK2zZM6h3F5UMTWiwJSAwPYuawRC4fmsDmwhoW7Cjjk90VLNxRRkpkENP6xTCtXwzdIoJ88EgCjzGGp1cV8PGucr6d2Y0z1fK6Qygwi4iIyAn5uqKe1zaWsGBHKcbAlL4xXDY0gR7Rx65PtiyLjKRwMpLC+V5WMp/t8YbmF9cV8b91RYxICWdavxhO6xVFiEslG62Zu7GE+ZsPcMGgOC4bGu/r4XRaCswiIiJyXHLL6nh1QzEf7yrHaVmcmR7LpUMSSIo8sVXhUJeDqf1imNovhv2V9SzaWc7CHWX8aWk+Twbt5/S0KKb3i2VQYqhKNg6Ts72U59cUckafaG4ck6TvTQdSYBYREZE22VFSy5wNxXy2p4Jgp8UFg+K4KCOehPD2K59IjgzmquGJXDEsgQ0F1SzcUcZHO8v5YFsZPaKDmdYvhql9o9v1PgPR8r0V/H3514zqHsFtE9TyuqMpMIuIiMhRbS6sYc76IlbkVREe5ODyoQlcODiO6A5siOGwLIYnRzA8OYKbsjws3VPBgu1lPL+mkP+uLWRkSgTT02MY1zOS4C7W8nlDQTV//CSP9PhQfvGtHgQ5FZY7mgKziIiIHMEYw5f7q5mzvph1+6uJCnFybWYi5w6MIzL41LZZDg9ykp0eS3Z6LPkV9SxsPGXjD5/kERns4Ftp0UxPj6F/fOcv2dh1oJYHF++lW0QQs6f01JF8p4gCs4iIiDQxxrAyr4o564vZXFRDXKiTG0cncVb/WL8IZ92jgrk2sxtXDU/ky/3VLNhRxoIdZby7tZS0mBCmpUczpU8MsWGdL+Lsr6zn/kV7CXU5uH9qrw5d4Zfm9J0WERERbGNYnlvJK+uL2HGgjm7hLm4Zm8z09Bi/LHlwOixGdo9gZPcIKus9fLq7ggU7SnlmVSHPrS5kTGok09NjyEqN7BQlC2W1bu5fuJd6j81DZ6ad8AZLOTEKzCIiIl2YxzYs2V3OqxuKyS2rJzUqiB9PSGFK3xhcjsAImpHBTs4eEMvZA2LZW1bHgh1lLNpZzhf7KokOcTK5TzTT+sXQLz4wW0VXN3j4zaK9FFU38JtpvUiLDfH1kLocBWYRETlpxhhq3YZ6t+3roUgbNXgMi3aWMXdDMV9XNpAWE8JPJ6UyqXcUzgAJyi3pGRPCrFFJXJfZjTX5VU3lGvO/OkDfuBCm94thcp/ogClnaPAYHv54HzsO1HLPGT3JUMtrnwiM2SIiIqdcndumrNZDWZ2bsloP5XUeSmsPvu391/ufm7I6D/UeQ7BzG8OTwxiTGsmY1AhSoo7dwEJOrTq3Tc72Ml7bWExRtZv+8aHcc0YSY3tGdqqjyZwOizE9IhnTI5LyOg9LdpWzYEcZ/15ZwLOrCxjbI5Lp/WIZnRrht38g2Mbw58/yWPt1NbdNSGFsz0hfD6nLUmAWEekiGjw2ZXWHhdzDQnB5nfdjpY0fK6t1U+s2LV4nyGERE+okJtRFTIiTXjHBxIS6iA5xUoOLJduKWJm3H4Ae0cGMSY1gTGokQ5PCCPLDWtiuorrBw3tbS3lzUwmltR6GdAvj1vEpjOoe0elPlogOcXLeoDjOGxTHrgO1LNxRxuJd5XyWW0lsqJMpfWOY3i+G3n5U6mCM4d8rC1iyu4JZI7sxPV0tr33JMsa0/IzoQ3l5eb4eggCJiYkUFRX5ehjihzQ3/IPbNk3h9vCV3oNve8PwodXg6oaWyyVcDogOcXlDcEhjEA51EtP4sehQJ7GNgTgm1EmYy9FqwDo4N/LK61mZV8nKvCrW76+mwTaEuixGpEQ0BehuEdq0dCpU1nl4a8sB5m8uobLeZmRKOFcMS2Ro8ql9ad/fnjfctmFlXiULtpexYl8lHgMDEkKZ3i+Gb6VFExlyao/O+6ZX1hfx37VFXDQ4jhtGd/4ufr6aH6mpqW26nQKztMrfntzEf2hudAyPbaio8zSGXnezcoiDb5fXHgrBlfUtB2CHBTEhTqJDWw/BBz8WHeokIqj1AHy8WpobtW6bL7+ubgzQlRRUuQHoHRPsLd3oEUFGt/CA2WAWKEpr3czbVMI7W0qpcduM6xnJzKEJDEwM88l4/Pl5o7TWzce7ylmwvYxdpXUEOSzG94pker8YMlNOfcnGB9tK+fvyr5nSJ5rbJ3aNLn4KzCdAgdk/+POTm/iW5kbb2MZQWeehtM5DebMV4INhuPnblXUeWnpCdlgQFexsXO11NYbdQyURzd92ERHs8Nkv2GPNDWMMew9bfd5YUI3bhjCXg5HdwxmTGsno1Igu3/b4ZBRXN/D6xhLe31ZKg8cwKS2KmUMT6BPn2xMiAuF5wxjDzgN15Owo4+OdZVTU2ySEuZjaL4Zp/WLoEd3xNfmf5Vbw+yX7GNU9gnsm9+wyf0gqMJ8ABWb/EAhPbuIbmhtebtvw8a5yCqsampVDlNd6KK1zU1HnwW7lGTYqxNkUdqNDXMQ2lj40rQAfFoIjg51+uynpm453blQ3eFjXtPpcRXG1d/W5b1xI08bBQYlhAfP4fWl/ZT1zN5SwYEcZtjFM6RvNZUMT6BntH3W5gfa80eCx+WKft2RjVX4VtoHBiWFMT4/h9LQowoPav2Rj/f5q7l+YS9+4EB7I7k2oq+vU/CswnwAFZv8QaE9ucupobnj9d20hr6wvBiAi2NFy/W+zjzmbNsd11gB4MnPDGMPu0jpW5lWxMq+STYU12Mb7vR2ZEkFWj0hGd4/olB3cTsbesjpe3VDMR7vKcVgW2ekxXDoknuRI/zqhJJCfN0pq3CzeWcaC7WXsLa8n2GkxsVcU09JjGJ4c3i6v6Ow8UMs9H+4hPszFQ2elEe3jGupTzd8Ds551REROQHF1A29sKmFS7yjunJjaKTqJ+ZplWfSJC6VPXCiXDU2gst7D2q+rWLmvilV5lXy6pwKA/vGhjOnh3TjYPz600/7xcSw7D9QyZ30xS/dUEOS0OH9QHBdnxKucpQPEh7m4dEgCl2TEs7W4lgU7yliyq5zFu8rpFu4t2ZjeL+aEj1HcX1nPrxfmEhbk4P5pvbpcWA4ECswiIifgxXVF2AZmjeqmsNxBIoOdTOodzaTe0djGsOtAHSvyKlm5r4o564t5+ctiokKcjO7uPXljVPeIgGlGcTK+KqphzvpivthXSZjLwWVDE7hwcBwxXeCx+5plWQxMDGNgYhg3jk5i+d5KFuwoY876Yl5ZX8ywpDCm9YthYu9owoLaVk5RWuvmvoW5NNiGh7J76/QYP6X/u0REjtOuA7Us2F7GhYPj/O5l787KYVn0iw+lX3woVwxLpKLOw+p8b+nGqrwqPtpVjgUMTAxtrH2OpF98SKc5XcAYw4aCGl5ZX8Tar6uJCnZwzYhEzhsY5/Pjz7qqEJeDM/pEc0afaIqqG1i0o4yFO8r4y7Kv+eeK/UzsHU12vxiGJIW1egrNwZbXxdVuHpjem94x/lFvLkdSYBYROU7Pri4kItjBzGGJvh5KlxUV4mwKK7YxbC+pZeW+KlbkVfK/dUW8uK6ImFBn05nPI1MiAjJYGmNYnV/FK+uL2VRYQ2yok+tHdeOcAXFtXsGUjpcYHsTMYYlcPjSBzYU15Owo45PdFSzcUUZKZBDTGk/ZOHz1uMFj89DH+9h5oJZfTu7J4G6+Oe5P2kaBWUTkOKzOr2J1fhU3jk4iKgADWGfksCwGJIQxICGMq0YkUlbr9q4+76vi872VLNxRjsPynnBw8NznPrEhft0IwjaG5XsrmbO+mO0ltSSGu7g5K5ns9BhCutDJCYHGsiwyksLJSArnpqxkPtvjDc0vrivif+uKGJESzrR+MYzvGcVfl+Wz7utqbj+tO1k91PLa37XplIw1a9bwzDPPYNs206dP5+KLLz7iNkuXLmXOnDlYlkVaWhq33347AC+88AKrVq3CGMPw4cO54YYbjvkkpVMy/EMg72iWjtVV54bHNvzk3V3UuG3+fn5ftXlugb/NDY9t2FJc4904mF/J9pI6wLuJa3RqBFmpkWR2D++QI8JOhMc2fLK7nFc3FLOnrJ6UyCAuH5rAlL4xAV8r729z41TaX1nPoh3lLNhRRkFVAy6Hhds2XD+qG5cMSfD18PxCwJ+SYds2Tz31FPfeey8JCQncfffdZGVl0bNnz6bb5Ofn88Ybb/DAAw8QGRlJWVkZAF999RVfffUVf/zjHwH41a9+xcaNGxk6dOiJPCYREZ9atNPbBeznp6cqLAcIp8Mio1s4Gd3CuW5kN0pq3KxqrHvM2pJnAAAgAElEQVT+bE8FOdvLcFowJCm8KUD3igk+5avPDR7D4p1lzN1YTH5FA71igvnJxO6cnhbdZU8B6UySI4O5akQiVwxPYENBNYt2lJMaHaywHECOGZi3bdtGSkoKycnJAEycOJEvvviiWWBesGABZ599NpGR3pcUYmJiAO9LE/X19bjdbowxeDyeps+JiASSOrfNf9cWMTAhlEm9o3w9HDlB8WEustNjyU6PxW0bviqsYUVjgH5udSHPrS6kW7iLMT28HQdHJEd0aK1wndsmZ3sZr20spqjaTXp8CHed0YPxPSM7zYZFOcRhWQxPjmB4coSvhyLH6ZiBuaSkhISEQ38BJSQksHXr1ma3OVhC8atf/Qrbtpk5cyYjR45k4MCBDB06lJtvvhljDOecc06zoC0iEije3FRCSY2bn5+e6te1r9J2LofF0ORwhiaHM2sUFFU3sCqvihX7Klm8s5z3tpbiclgMSwprCtA9otpn9bmmwea9rQd4Y1MJpbUeBieG8cNxKYxOjdD8EvFDxwzMLZU4f/N/Ztu2yc/P57777qOkpITZs2fz6KOPUlFRwb59+3jiiScAeOCBB9i4cSNDhgxp9vU5OTnk5OQA8PDDD5OYqJ3n/sDlculnIS3qanOjpKqe1zZt5Yz0BM4Y0tvXw/FrgTw3EoHBveEavCcYrMsr57NdB/hsVwlPrSzgqZWQGhPKaX3iOK1PHKN7xhDiOr7a54o6N6+uyeOVNXmU17rJ6hXDrHG9GNUjptMH5UCeG9Lx/H1+HDMwJyQkUFxc3PR+cXExcXFxzW4THx/PwIEDcblcJCUlkZqaSn5+Phs3bmTAgAGEhoYCMGrUKLZu3XpEYM7OziY7O7vp/a66KcDfdOUNGnJ0XW1uPP7519S7PVw1JKZLPe4T0ZnmRloYpGVEcVVGFPsr61nV2LJ7/vqvmbs2n2CnxfDk8MZznyOO2uWtrNbNvM0HeGfLAaobbMb2iGDmsB4MSgwD3M1+z3ZWnWluSPsL+E1/6enp5OfnU1BQQHx8PEuXLuW2225rdptx48bxySefMGXKFMrLy8nPzyc5OZmCggIWLFiAx+PBGMPGjRs599xzT+wRiYj4QG5ZHR9sK2XGwDh6RKtJSVeVHBnMjIHBzBgYR73HZkNBDSv3VbIyr5J/rtgPQGpUMGN6eDcODk0KI8jpaGqh/v7WUuo9hom9o7h8aAL94kN9/IhE5HgcMzA7nU5uvPFGHnzwQWzbZurUqfTq1YuXX36Z9PR0srKyyMzMZO3atdx55504HA6uu+46oqKimDBhAuvXr+dnP/sZACNHjiQrK6vDH5SISHt5bnUhoS4HVw3TbnbxCnY6GNXd24r7eySTX1HPysaW3e9tKWX+5gOEOC0GJIaxubAG2xgm94nm8qEJ9FQnN5GA1KZzmE81ncPsH/TymbSmq8yNdV9X8asFuXxnZDcuG6rA3BZdZW60ps5t8+X+albmVbJhfw2Du4Vx6ZD4o5ZrdBVdfW7I0QV8SYaISFdkG8OzqwtIDHdx/qC4Y3+BCBDicpDVI1Kd20Q6GZ28LyLSgo93lbO9pI5vj+ymVsQiIl2cfguIiHxDvcfmhTWFpMeHcEafaF8PR0REfEyBWUTkG97afIDCajfXj0pStzUREVFgFhE5XHmtmzkbihnbI4IRKWpfKyIiCswiIs28vL6YWrfNd0Yl+XooIiLiJxSYRUQa5ZXX8+6WA5yZHktvnZcrIiKNFJhFRBr9Z00BQU4HV49I9PVQRETEjygwi4gAmwqq+Sy3kkuHxBMXpiPqRUTkEAVmEenyjDE8s7qA+DAXF2XE+3o4IiLiZxSYRaTLW7qngq+Kark2M5FQNSkREZFv0G8GEenSGjw2/1lTSFpsCFP7xvh6OCIi4ocUmEWkS3tnSylfVzZw/ahuOB1qUiIiIkdSYBaRLquyzsMr64sY2T2C0amRvh6OiIj4KQVmEemy5mwopqre5oZR3Xw9FBER8WMKzCLSJe2vrOetrw4wrV8MfeJCfT0cERHxYwrMItIlPb+mEIcF12aqSYmIiBydArOIdDlbimpYsruCizPiSQgP8vVwRETEzykwi0iXYozhmVUFxIQ6uWSImpSIiMixKTCLSJeyfG8lGwtruGZEIuFBTl8PR0REAoACs4h0GW7b8NzqQnpGB3NmeqyvhyMiIgFCgVlEuoz3t5aSV1HP9aOS1KRERETaTIFZRLqEqnoPL31ZxLDkcLJ6RPh6OCIiEkAUmEWkS3htYwnldR5uGJWEZWl1WURE2k6BWUQ6vcKqBuZtLmFKn2j6J6hJiYiIHB8FZhHp9P67thBj4NpMtcAWEZHjp8AsIp3a9pJaFu8s54LBcSRFqkmJiIgcPwVmEem0jDE8u6qAyBAnlw9N8PVwREQkQCkwi0intTKvinX7q7lqeAIRwWpSIiIiJ0aBWUQ6JY9teHZ1Ad2jgji7f5yvhyMiIgFMgVlEOqUFO8rILatn1sgkgpw6Rk5ERE6cArOIdDo1DTb/XVtIRrcwJvSK9PVwREQkwCkwi0in88amYkprPdwwWk1KRETk5Ckwi0inUlzdwOsbS5jUO4pBiWEdel+moR6zcTWmtKRD70dERHzL5esBiIi0pxfXFeExhu+M7NgmJaYgD/uJRyB3p/cD3XthZWRiZWTCwGFY4REdev8iInLqKDCLSKex60AtC3eUcf6gOFKigjvsfsyKT7Cf+ys4XVjX3w6VZZhNazGffIBZ+BY4HNBnANbgTKyMEZCegRWkpikiIoFKgVlEOo3nVhcSFuTgimGJHXJ909CAmfMUZtE70G8Qjpv/H1ZC40r22ZdiGhpgx1eYTWswm9dh3nsV884rEBwM/Yd4A/SQTOjVF8uhc6FFRAKFArOIdApr8qtYlV/FDaO7ERXS/mHUFH6N/eTvYfc2rDMvwrr0O1iu5qvGVlAQDBqGNWiY92tqqmHLeu/q86a1mNeew7wGhEfC4BFYGSOwBmdCcqo2J4qI+DEFZhEJeB7b8MyqApIigjhvYPs3KTGrPsN+9i9ggePWe7BGTmjT11lh4ZA5DitznPc6ZQcwm9fBpjWYTeswq5ZiAOITvcG5MUBbsfHt/hhEROTEKTCLSMBbvLOMXaV1/HRSKkHO9jv8x7gbMK8+i1kwH/oMwHHzz7G6pZzw9ayYOKzxk2H8ZIwxUJiP2bgWs3ktZu3nsHSBN0B374U1ZCTW4BHaQCgi4gcUmEUkoNW5bf67togBCaF8Ky2q3a5rivZj//MPsHML1vQLsC67vl037lmWBUmpWEmpMGUGxrYhd6c3PG9ci1nyvjeoH76BcEgm9BusDYQiIqeYArOIBLQ3N5dQXOPmp6e3Xx2wWbMc+5nHwBgct9yFNWZiu1z3aCyHA9LSsdLSD9tAuNlb+9zSBsKDR9hpA6GISIdTYBaRgFVa42buhhLG94xkaFL4SV/PuN2Y15/HfPA69O6H4/u/wErq3g4jPX7eDYTDsQYN947tmxsI5z7nLd+IiPLeLmMEVsZISOquDYTiV0xNNWblp1SUl2DGTzt0soxIAFFgFpGA9dKXRTR4bGaNSjrpa5mSQm8JxvbNWFNmYF3xXaygjjvL+XgdsYGwtMS7gXBzY4A+YgOhdwXaimn/TZAix2Lcbti4GrNsMWbNcmiop9qy4O05WOdegXXWxX71/5fIsSgwi0hA2ltWx/vbSjlnQCw9ok/uF6/5ciX20/8HDW6sm3+OY+y32mmUHceKjceaMAUmTPFuICzIP7T6fPgGwtTe3uCsDYTSwYwxsHubNyR//jFUlEFkNNbpZ2KdNpX4tL4U/fNRzBsvYD7NwXHVTVgjxvp62CJtosAsIgHpuTWFhDgdXDX8xJuUGI8H8+YLmHfnQs8+3hKMlB7tOMpTw7Is71nOyd/YQHjw+LpvbiA8WP+sDYTSDkxxIWbZIsyyxfD1XnAFYWWOwzptKgwdjeXyRg1nYiLOW+7CbFyD/b9/Yv/1ARieheOq73k3v4r4McsYY3w9iG/Ky8vz9RAESExMpKioyNfDED/k67mxfn81v8zZw7czu3H5sIQTuoY5UIz9rz/A1o1Y3zoL66qbsIJD2nmk/qHZBsJNa2HXVrDtxg2EQxvrn9tnA6Gv54acGgfrks2yxfDVl94PDhiCddo0rDETscIjj/iaw+eGcTdgFr6FmfcSeBqwzroU69zLsUJCT+GjEH/iq+eO1NS2/bGmwCyt0i8+aY0v54ZtDD9/bzcHat08fkE/QlzHf+6y2bAa+6n/g7parG//EMeEqR0wUv9lqqtg64ZDATpvj/cTTRsIG1egT2ADoZ43Oq+W6pJJ7oE1YQrW+MnHPKO8pblhSkswc5/1Bu/4RBxXfBdGT9TG1S7I3wOzSjJEJKAs2VXOtpJa7jit+3GHZWN7MPNfwrz9CnTvhePnv8Pq3quDRuq/rPCItm8gzMiEwdpA2FUZY2DPdsxni1qsS6bPgJMKt1ZsPNZ3f4I54xzsF5/EfuIRyMj01jen9m7HRyJycrTCLK3SSpG0xldzo95j88N5O4gKcfLojD44juMXtSk7gP2vP8JXX2JNmo519S1YIZ2zBONkHNpA6K1/5qsvoarC+8mDGwgzMr0bCMOOPMpPzxudgykuxCxf7F35zc8FVxBkjsVx2rRmdcnH41hzw3g8mI/fx7zxvPfVn+kXYJ1/VYvzTDofrTCLiLSTt746QGG1m9tO6358YXnTWux/Pwq11VjX345j0vQOHGVga76B8FyM7WncQLj2yA2EfQdiDR6hDYSdRKt1yd++FStrUot1ye3Jcjqxpp6LyZrkPQ/9wzcxyz/Cuvx6rPFTVKYhPqUVZmmVVoqkNb6YG+V1Hm55czuDu4Uxe2rbyiiM7cG8PQcz/yVITsVxyy+weqR18Eg7t6YNhBvXYjYfuYEwcvR4qrunQZ/+nXYTZWdiPB5vXfJni06oLvl4HO/zhtm5Fft/T8LOLdA/A8fV38fq3a/dxiP+xd9XmBWYpVUKzNIaX8yNf6/Yz9tbDvDnc/vSO/bYQcyUl3pXlTet9f7yv/YHWKFhp2CkXYuprvJ2INy8DrNxjfflewCnC3r3w+qfgdU/A9IzVAPtJ1quS47CGvstrAlTva8cdMBq7ok8bxjbxixdgHntP1BZgTX5HKyLr8WKiGr38Ylv+XtgVkmGiPi9vPJ63tlygDPTY9sWlr9a761Xrq7E+s6PvBuU9HJuh7DCI2DkeKyR4wGID3ZR/MVSzLZN3v8WvYP58E3vjbulYKVnQPpgb4hO7Y3lOP5TTuTEHFmX7ILMcd5TYoaNxnL5X0mN5XBgnX4mZtRpmHkveufTiiVYl3wH6/Tskz4GUaStFJhFxO/9Z00hQU6Lq0ccvUmJsW3Mu69i3nwRuqXguOM+rJ59T9EoBcARHettWnHwBI6GBu9q5vbGAL1hFSxb5D2FIywC0gdhpQ/2Bul+g3QObztrVpe8ZT0YA/1PXV1ye7EiIrGuvhnzrTOxX3wS8/zfMR+/j+Oa72P1G+Tr4UkXoMAsIn5tU2E1n+VWcPWIROLCWn/KMhXl3vbW61d5X1r+zq1Yodpd72tWUJB3RTl9MJx1ibccoPBrzLZNsH2zN0jP+5/34w4H9OzrXX3un+EN0vHdfP0QAk6LdclJqVgXXu3dPNeOdcmnmtWzL46fP4T5/GPMq89gP/RzrEnZWJd+Bys61tfDk05MgVlE/JYxhmdWFRIX5uLijPjWb7dtI/Y//wgVpVjX3oI1eYZKMPyUZVnehihJ3WHiNABMdSVs/+rQKvQnH8LCtw6dBZ1+MEBnQM8+WE69DP9NrdYln57doXXJvmBZFtb4yZjMsZi3XsHkvIlZ9RnWRddiTZmh+SEdQoFZRPzW0twKviqq4UfjUwhtoUmJsW3Mh294NwQlJOG46w9Yaek+GKmcDCs8EoaPwRo+BmjsKLdvl3cVetsmzNaN8MUSb4AOCYN+A5uXcYRH+HT8vtRiXfKIcThOmwLDxvhlXXJ7sULDsS6/HjMpG/ulf2Je+idmSWOZxsBhvh6edDI6JUNapVMypDWnYm40eAw/emsHIU4Hfzq3D05H89UxU1WB/fRjsO4LGD0Rx6wfd+ng5C86am6Y4kLMto2wfRNm+2bI3QXGBsvybh7sf9gqdGJyp1lNbYmpqfZ2Y/xsUfO65NOmYI05HSvCP+uSO/J5wxgDq5dhv/IUFBdgjTsD6/IbsOISOuT+pP3plAwRkRPw3tYDfF3ZwH1Tex4Zlrdvxv7nH6DsANZVN2NNO69TByQBK6EbVsJkGD8ZAFNbDTu2YLZv9pZxLP8IPnrPuwodE+c9xq6xDpre/QJ+pbXluuTunaIuuT1YlgWjT8MxdDTmvbne/9Z+jnX+lVjZFwb8z7+zM3W13g3CfkyBWUT8TmWdh5e/LGJkSjijuh9aNTbGYHLmYeY+C7EJOH7xCFbfAb4bqPiMFRoOQ0ZiDRkJeJvUsG8PZntjGce2Td5VWICgYOg7ACu9cQW6/+CAOMe3xbrkiCjvJrcJU7zlKPpDsRkrJATromswE6dhv/xvzNznMJ/k4Lj6Zqyho3w9PDmMqa3BfLkCs+JTWL+CujvuhwH+W0qjwCwifmfOhmIq622uH53UFAhMVSX2s3+BNctg5Hgc19/uty89y6lnOZzQqy9Wr74w5VwATGmx9ySObd4yDvPB6xjPq94v6N7Lu/p8sIwjOdVvwqcpKcQs/8hbctHF6pLbi9UtBeeP7sV8uQL7pX9hP3YfjJqA44rvYiUm+3p4XdY3QzL19RAdizUxG2dq2zq4+opqmKVVqmGW1nTk3NhfWc8P5+/kjD7R3H5adwDMrq3YTzwCpcVYl13vfYnVT8KNNOfPzxumrg52bcVs2+itg96+GaorvZ+MjG5qqGKlZ3hbewcFn7qxtViXnIE1YSpWlv/WJR8PX80N09Dg3Rz89itgDNaMy7HOvkSt208RU1uDWfcFZuWnsH7loZA8eiJW1ukwIAPL4VQNs4jI8XhhTREOC67NTPSWYCx6GzPnaYiOw/Hzh7yrgiInwAoJgUHDsAZ5X/Y1tg1f7/WG54NlHGs/95ZxuFyQ1r+xjKNxJbqdz/ltVpe8drk3SCR1x7rgam879y5el9xerKAgrHNnYiZMwbz6rLdj4NIFOK78HmSO0x/fHaBZSP5ypbfmPibOW0405lBIDiRaYZZW+fNKkfhWR82NrcU1/Oy93cwcmsC1A8Mx//mb9wl3xFgcN94REHWnXV2gP2+Y8lLYsbmptTe7t4Hb7f1kUvfDyjiGQPeex93a21uXvAOzbJF3o+LBuuSx3+r0dcn+MjfM5nXYLz7pLXcZNhrHlTdhpfTw9bACnqmtxqw9uJK8qjEkx2ONPg0ra5L3/5ujhGR/X2FWYJZW+cuTm/ifjpgbxhh+mbOHveX1PDHKIuTfv/ceD3XJt7HOuuS4g4n4Rmd73jANDbB7W2NTlc2wfZM35AKER0C/xjKO/hnQZ0Crrb1brksei2PCVO8Z1F2gLtmf5oZxuzGL38bM+x/U12OddRHWuVdghYb5emgBpSkkr/gUNnwzJJ/u3WDbxpVkfw/MKskQEb/w+d5KNhTU8P2YIkL+8CeIjMbxs99hDRji66FJF2YFBXlXxvpnwNmNK8QF+Y2tvRvLONav9JZxOJ2HWnunZ2Cl9cNs3XhkXfJ1P+w0dcmBynK5sLIvwow9w3uSxrtzMZ8txrriRu/PppOu8reHZiF5/UpwN3hD8rfOwhpzcCW58y1wtGmFec2aNTzzzDPYts306dO5+OKLj7jN0qVLmTNnDpZlkZaWxu2338769et57rnnmm6Tl5fH7bffzrhx4456f1ph9g/+tBog/qW954bbNtw2fzuUH+BPSx7ENSQTx3d/ghUV0273IadGV3zeMFUVsOOrQ2Ucu7Z465EPSuru3bzXxeuS/XlumG2bsP/3JOzZAYOGe4+h65Hm62H5DVNT7a3vP1hu4W6A2PhDG/fSB590SA74FWbbtnnqqae49957SUhI4O677yYrK4uePXs23SY/P5833niDBx54gMjISMrKvC9XDRs2jD/84Q8AVFZW8uMf/5jMzMwTeTwi0om9/8V29lW6uWvjawRddI13F3snXKGQzsmKiILhWVjDs4DG1t65OzG7t3mPuevEdcmdhdU/A8cvH8V8/AHmjRewf3M71rTzvRswu2gH0VZD8uRzvCvJ7RCSA8kxA/O2bdtISUkhOdl7buHEiRP54osvmgXmBQsWcPbZZxMZ6X15KSbmyFWhZcuWMWrUKEJCdIyLiHgZY6j6OIeXdsQxtK6E8bOuxTHYfw+uF2kLy+XyNkpRU52AYjmcWFNmYLImYV5/AbNgPmb5R1iXX+99haALhENvSF7eWJO8ujEkJ3hDctYkb81+F/g+tOSYgbmkpISEhEO92BMSEti6dWuz2xwsofjVr36FbdvMnDmTkSNHNrvNp59+yvnnn9/ifeTk5JCTkwPAww8/TGJi4vE9CukQLpdLPwtpUXvMDVNbQ/mTf+D53YbytOncfslwkvprp3qg0/OGtCZg5kZiItw5m4YLr6Din4/S8MyfcS1dQNRNPyUofZCvR9fu7KpK6r5YQu3SRdSvXg7uBhwJ3Qg95xJCJk0naODQUxKS/X1+HDMwt1Ti/M2XlmzbJj8/n/vuu4+SkhJmz57No48+SkSE92WMAwcOsGfPnlbLMbKzs8nOzm56319rnLoaf643E9862blh9u3BfvIRig5UMH/CXZyRFkVybIjmWyeg5w1pTcDNjZhEzE8fxFq2iIZXn6Xk5zdifetsrEuuw4qM9vXoToqprjpUbrFhlffoxLhErCkzvOUW/QZR53BQB1BSckrGFPA1zAkJCRQXFze9X1xcTFxcXLPbxMfHM3DgQFwuF0lJSaSmppKfn0///v0B+Oyzzxg3bhwulw7lEOnq7KULMP99AkJC+d+5d2FKnVw3spuvhyUicgTL4cCaOB0zcgJm/v8wC9/CrPwU6+LrsM44K6Cab5jqSsyaxpC8cbU3JMcnYk05z1tu0Xdgly23aItjJtj09HTy8/MpKCggPj6epUuXcttttzW7zbhx4/jkk0+YMmUK5eXl5OfnN9U8g7cc4+qrr27/0YtIwDB1dZj/PYH5dAEMGs6umbex+JMDXJwRR3LkqWtBLCJyvKzwCKwrv4c5/Uzs//0T89/HMUvex3HNLX7dfbRZSN6wGjwKySfqmIHZ6XRy44038uCDD2LbNlOnTqVXr168/PLLpKenk5WVRWZmJmvXruXOO+/E4XBw3XXXERXl7chVUFBAUVERQ4boLFWRrsrk78V+8hHI24N1/pVw/pU8uziPyGAHlw9LOPYFRET8gNUjDcdPf4tZ8QnmlaexH/5/WKdNw7psFlZM3LEvcAp4Q3Ljxr2NaxpDcjesaed5yy0Ukk+IOv1JqwKu3kxOmeOZG/byjzDP/x2CgnF876dYQ0excl8lv1m8l++NSeKCwfEdPFo5lfS8Ia3pbHPD1NZg3nkF88GbEByMdeHV3pVbH5SfmqrGkLzyGyE5a9KhkOznRxsGfA2ziMiJMPV1mJf/jfn4fRgwBMdNP8eKS8BjG55dXUD3qCDOGeAfKzIiIsfLCg3DunQWZmI29sv/wrz8FGbJh96mJ4NHdPj9txqSp58fMCE5kCgwi0i7M/vzsJ94BPbuxJpxGdZF12E5vZtjFuwoY09ZPb/4VipBTj2Zi0hgs1J64LjtPli7HPulf2M/eq+3vfbMG7Di23dDszckL/OWW2xa6w3JCUlY0y/w1iT3GaCQ3EEUmEWkXdlffIL5z1/B6cJx2+ym7mcANQ02L64tZHBiGKf1ivLhKEVE2o9lWTByAo4hozDvv45591XMui+wzrsC68yLsYKCTvjapqriUE3ypjXg8RwWkk+HPv0Vkk8BBWYRaRemoQHzylOYxe9A+mBvCUZC89WVNzeVcKDWw11nJOkJXkQ6HSs4BOuCqzCnTcV+5SnM689jPs3BcdXNWMPHtPk6pqoCs3qZt9xi09pDITn7QqwxCsm+oMAsIifNFORjP/l72LMd66yLsS75zhEbX0pq3Ly2sZiJvaMY3C3MRyMVEel4VmIyzh/eg1m/Cvulf2H/5deQOQ7Hld/D6pbS4teYyvJDIXnzOm9ITkzGyr7IW26RppDsSwrMInJSzKql2M/+BSwLx62/xBo5vsXbvbi2EI8xfEdNSkSki7CGjcZx/18wOfMwb72MPftWrHMu8/4XEnL0kDz2dOidrpDsJxSYReSEGHcD5tVnMQvmQ9+BOG7+OVZicou33V1ax4IdZZw3KI7uUWpSIiJdh+UKwjrnMsz4KZhXn8G89RJm6QJI6Qmb14JtQ7cUb61z1iSFZD+lwCwix81TkI/9+7th5xbvxpPLr8dytb6p5bnVBYS5HFwxLPEUjlJExH9YcQlYN/0Mc8Y52HOehqKvsc6+xFuT3LufQrKfU2AWkeNi1iyn+Nm/gG3j+MFdWKMnHvX2a/KrWJlXxfWjuhEd4jxFoxQR8U/WoGE47/0/Xw9DjpMCs4i0ifF4MG++gHl3Lq5+g7C/99NWN68cdLBJSVKEi/MGqUmJiIgEJgVmETkmU16K/a8/wuZ1WGecTfytd1FcXnHMr/toVzk7D9Tx00mpBDsdp2CkIiIi7U+BWUSOymzf7O3aV1WBdf3tOCZNxwoOAY4emOvcNi+sLWRAQiinp6lJiYiIBC4FZhFpkTEGs/gdzMtPQVwCjrt+j9W7X5u/ft7mEoqr3fx0YioObWYREZEApsAsIkcwdbWYF/6BWbYYhmfh+O5PsCIi2/z1pbVu5m4oYXzPSIYmh3fcQEVERE4BBWYRacbsz8N+/CHI24N10bVY587Echxf/fFL64qo89h8Z5SalIiISOBTYBaRJmbNMuynHwOHE8dt92ENG0ISHpIAACAASURBVH3c19hbXsf720o5u38sPaNDOmCUIiIip5YCs4g0OzKOtP7e85UTkk7oWv9ZXUiI08FVI9SkREREOgcFZpEu7ptHxllX3YQVdGLtqzfsr2b53kquy0wkNlRPLyIi0jnoN5pIF9bSkXEnyjaGZ1YXkBDu4sLB8e04ShEREd9SYBbpgk72yLiWfLK7gq3Ftdx+WndCXGpSIiIinYcCs0gXc7JHxrWk3mPz/JoC+saFMLlPdPsMVERExE8oMIt0Ie1xZFxL3v7qAAVVbn4zoTtOh5qUiIhI56LALEewjWF5biVhJYb66kqCnQ5CXBYhTgfBjf+GOC1CXA6CnJa6uAWI9jgyriXldR7mrC9mTGoEmSkR7XJNERERf6LALEdYsa+Sh5fsa/Ptg50Wwc7GIO2ymgJ2cGOwDnY1/vuNz4c4Hd6vcx0K4MGH/3t4QHdZBDksLIXz49aeR8a15JX1RdS4bWaNar9rioiI+BMFZjnCZ7mVRAQ7eGJmJgXFB6jz2NS5beo95tC/Hpt6d+O/jR+v85imj3nftjnQYFPnbqC+8WN1bvP/27vT6KjKfN/jv6eqMk8kFRIICcggKsogBoi0IghKN2qL2mqrePToOve03D7anDeNazn0bZfnePs0y37RetS7bG17VNsWj0OrjYqtYkGQSRwQELVCAiEJJFWZq/ZzXwQiUTIASXYN388bJNlJfpU8a/tj57+frY6oI8cefy6jw+W81wJ+5L+/UcCPKt5dhfxYb+tZ3n0JUs4Hc8u4Y6kJdehvnx3Uwgl5GjeCh5QAABIThRk9RB2ryr1hzSrJ1oTCLOWqddC/hrVWEUfdJbojcqRMH6OUH1XGj35/e7SreB8p4O0Rq1B7tOfHH/7zBLq5PEY9rppn+LzKS/cqN92rvHSfRqR1/Zmb7u3+77x0rzJTPDFTtAdzy7je/G7LAXmN0fXTeQQ2ACBxUZjRw0e1LQq1R1VRljNkX8MYoxSvlOL1aqgnXq216nSOuvJ9pGB/o5gfXbyPdfW8pdNRY1tUuxva1NQWVXOnc8yv5/NIeWm+w+X6SLH+ulAfed+Rt6UPwfZrQ7Fl3LF8eqBV730V0g+n+lWQwakEAJC4+L8ceghUhZXqNTq7JDFu3jLGHJ6xlrLlHbTP2xl11NgeVVNbVIfaImpsi6qx/fCfbVE1tkXU2B5VdVOHDrVF1BE99nXuNK85qkwfVayPKtcjDl/JzkvzKsXbd8Eeii3jjvl1rNVvNtUqP92rpWf4B/3zAwAQSyjM6Gat1fpgSGePzhqSK5+JJMXrUWGmR4WZKQM6vi3idJXoI4W6u1x3/XmoPaqG1oj2HGxXY3tEkWNfwFZWiqfr6vVRZbrr717ltYeU++qflLtvj0ZcdpNylyyV8Q3ePxKOtnZXvXbUtep/zxmljBTWCgAgsVGY0W1XQ5vqWiK6YfrQjWMkq3SfR+nZqSoewMVea233CEhjW0SHDl/J/vq/u0r2vlCnPq1rVag9+vVNlKVLpVJJIck8vVM5aV1lekQfYyFHrmxnpXoGtEVgZ9Tqv9/7UmPzUrVwQt5JfV8AAIgHFGZ0CwTD8hhp1pjB/xU+Bs4Yo6xUr7JSvSrJ7XtHCxuNKrr69wq98Tc1jpuipituVSgtR4cOX8XuGhnpKttfHGpXU1tEoY5jX772Gim3u0AfXaZ7lu1t+5q1t7FN98wv5SElAICkQGFGt0AwpLOKMpWTNjS/xsfgOrJlnPl0m/LmLdaIAW4ZF3Gsmg5fqT501Lx1Y4//jmh/Xasa26JqPcZ8SHlZnmYmyJw7AAD9oTBDklTV2K6qpg4tmZzvdhQMwMlsGefzGBVk+Aa8s0VH1OlxM2NTe1QLziyTWptOND4AAHGFwgxJXeMYkjSnjHGMWDZcW8YdLdXr0cgsj0ZmfX2DY2FWquoGf4tuAABiEoUZkqRAVUin+tMHvOsDht9wbRkHAAB6ojBDdS2d2lnfpht5WlvMsvur5fz3f0rVX8lcfoPMkqtlPGznBgDAcKAwQ+sPj2NUMI4Rk+yWgJzf/EryeOW5/V6Zs2a6HQkAgKRCYYYCwZBKc1NVmpfmdhQcxUajsi/8XvZvz0njJslz20oZf5HbsQAASDoU5iTX1B7V9toWXTmFxxvHkiNbxunTbTLzFssMcMs4AAAw+CjMSW7j3rAcyzhGLOm5Zdzt8nxnkduRAABIahTmJBcIhuTP9GlSQbrbUZLet7eM+78yYye6HQsAgKRHYU5ibRFHm2uaddHEPBnDI47dxJZxAADELgpzEttc3ayOqFVFWY7bUZIaW8YBABDbKMxJLBAMKSfVozOLMt2OkrTYMg4AgNhHYU5SEceqsjqsOaXZ8noYxxhubBkHAED8oDAnqe37W9Tc4aiilHGM4caWcQAAxBcKc5IKBENK8xrNGJ3ldpSkwpZxAADEHwpzEnKsVaAqrJkl2UrzcXPZcGDLOAAA4heFOQntrG/TwdYIDysZJmwZBwBAfKMwJ6FAMCSvkcrHUNqGGlvGAQAQ/yjMScZaq0AwpKmjspSd6nU7TkJjyzgAABIDhTnJBBs7VB3q1PdPL3A7SsJiyzgAABILhTnJBIIhGUlzeLrfkGDLOAAAEg+FOckEqkKaXJihggx+9IONLeMAAEhMtKYkUhvu1O6Gdt109ki3oyQUtowDACCxUZiTSKAqJEk6l3GMQcOWcQAAJD4KcxIJBEMal5em0TnM1A4GtowDACA5UJiTRGNbRJ8caNUPzvS7HSUhsGUcAADJg8KcJDZUheVYxjFOFlvGAQCQfCjMSSIQDKkoy6fx+WluR4lbbBkHAEByojAngZbOqLbsa9H3Jo+QMcbtOHGJLeMAAEheFOYksKm6WRHH6txSxjFOhP3gPTn/bxVbxgEAkKQozEkgEAwpL82r00dmuB0l7ti2Vjl/fFQqPUWeFT9nyzgAAJIQe2AluM6oo417mzWrNFteD+MYx8v+/QWp6ZA81/0vyjIAAEmKwpzgtu1rUWvEYXeME2CbDsm+9rw081yZiae7HQcAALiEwpzgAlUhpfs8mjYq0+0occe+/IzU2S7PFTe6HQUAALhoQDPMW7Zs0RNPPCHHcbRw4UItXbr0W8esW7dOzz77rIwxGjdunO644w5JUl1dnR555BHV19dLku68804VFbFv7XCIOlbrq8I6pyRLqV7+bXQ8bG2N7Nuvypx3kcyoUrfjAAAAF/VbmB3H0eOPP6677rpLfr9fd955p8rLy1Va+nWJqKmp0erVq3XfffcpOztbjY2N3e/79a9/rSuvvFLTpk1TW1sb25oNox11rWpsi6qCcYzjZl/4g+T1yFz2Q7ejAAAAl/V72XHXrl0aNWqUiouL5fP5NHfuXFVWVvY45o033tDixYuVnd11U1ReXp4kqaqqStFoVNOmTZMkpaenKy2NB2cMl0AwJJ/HqHxMlttR4or9crfshn/ILLpcZgSPEgcAINn1e4W5oaFBfv/XpcHv92vnzp09jqmurpYk3X333XIcR1dffbVmzJih6upqZWVl6Ze//KVqa2s1depU3XDDDfJ4evb0NWvWaM2aNZKkBx54QIWFhSf9wpKdtVaV1XtUXjZCY0cXn9Dn8Pl8SfmzOPjr+9SZk6fC6/9FHnbGOKZkXRvoH2sDvWFtoC+xvj76LczW2m+97ZtjFY7jqKamRvfee68aGhp0zz33aNWqVXIcR5988ol+8YtfqLCwUA8++KDWrl2rCy+8sMfHL1q0SIsWff3ktLq6uhN9PThsz8E2VTe164oz8k/4+1lYWJh0Pwv78WY5Wytlrr1VDa1tUmub25FiUjKuDQwMawO9YW2gL26tj5KSkgEd1+9Iht/v775hT5Lq6+uVn5/f45iCggLNmjVLPp9PRUVFKikpUU1NjQoKCjR+/HgVFxfL6/Vq9uzZ+vzzz4/zpeBEBIIheYw0u5QrpANlHUfOc09J/iKZC5a4HQcAAMSIfgvzxIkTVVNTo9raWkUiEa1bt07l5eU9jpk9e7a2b98uSWpqalJNTY2Ki4s1adIkNTc3q6mpSZK0ffv2HjcLYugEgmGdXpihEek8zHGg7MZ3pa92yyy9QSYlxe04AAAgRvTbprxer2655Rbdf//9chxHCxYsUFlZmZ5++mlNnDhR5eXlmj59urZu3aoVK1bI4/Fo2bJlysnp2pnhxhtv1M9//nNZazVhwoQeoxcYGvtCHfriULtumcn2fQNlI52yq38vlY6XmX2B23EAAEAMMfZYQ8ouO3ITIU7M6k/q9cSmA3rs8gkqzk494c+TTPNmzhsvyf75MXnuuFfmrHPcjhPzkmlt4PiwNtAb1gb6EvczzIg/gWBY4/PTTqosJxPb2iL70p+l06ZKZ850Ow4AAIgxFOYEc6g1ok8PtPKwkuNgX18thZvkuepmHqwDAAC+hcKcYNZXhWUlVbA7xoDYxoOyf18tc853ZMaf6nYcAAAQgyjMCeb9YEijslM0bgRPVBwI+9LTUmeHzBU3uh0FAADEKApzAmnuiOrD/c2qKMthtGAA7P5q2Xdek5m3WKZ4YEP/AAAg+VCYE8jGvWFFHKmijHGMgbCrfy/5UmQu/aHbUQAAQAyjMCeQQFVY+elenVaY4XaUmGf37JTd+K7MRUtl8vL7/wAAAJC0KMwJoj3iaFN1WLNLc+RhHKNP1lo5zz0p5eTJXLzU7TgAACDGUZgTxNZ9zWqLWMYxBuKjTdKOD2UuuVYmI9PtNAAAIMZRmBNEIBhWVopHU4uz3I4S06zjyHnut1JhscwFi92OAwAA4gCFOQFEHasNe8M6Z0y2UryMY/TFbnhbqvpCZukyGV+K23EAAEAcoDAngI8PtCjUHmUcox+2s1N29R+ksRNkZp3vdhwAABAnKMwJIBAMK8VjNHM0hbkv9u1XpPpaea66ScbD0gcAAANDa4hz1lqtD4Y0Y3SWMlL4cfbGtjTLvvyMdMZ0mSlnux0HAADEERpWnNvd0K4DLRHGMfphX3teCofkueomt6MAAIA4Q2GOc4FgSB4jzR5DYe6NPdQgu2a1zOx5MuMmuR0HAADEGQpznAtUhTSlKFO56T63o8Qs++Kfpagjs3SZ21EAAEAcojDHsb1NHQo2dqiilKvLvbH7qmTffV3mgu/KjBzldhwAABCHKMxxLBAMSZIqynJcThK7nOd/J6WkyVxyjdtRAABAnKIwx7FAMKRJBekamcUDOI7F7v5U2vS+zOIrZHJHuB0HAADEKQpznKpv6dRn9W3sjtELa62c556UcvJkLrrc7TgAACCOUZjj1PqqsCTGMXr14UZp58cyl10nk57hdhoAABDHKMxxKhAMaUxuqsry0tyOEnOsE5Xz16ekotEy51/sdhwAABDnKMxxKNwe1fb9LeyO0QsbWCvt/VJm6Y0yPrbbAwAAJ4fCHIcq94YVtYxjHIvt7JB94Q/SuEky58x1Ow4AAEgAFOY4FKgKyZ/h0yR/uttRYo5962WpoU6eH9ws42F5AwCAk0ejiDPtEUebqps1pyxbHmPcjhNTbEtY9uVnpbNmypw+ze04AAAgQVCY48ymmmZ1RC3jGMdgX31Oam2W58qb3I4CAAASCIU5zgSCIWWnenRmUabbUWKKbaiTXfOizJwLZMrGux0HAAAkEApzHIk4VpV7w5o1Jls+D+MYR7Mv/kmyjszlN7gdBQAAJBgKcxzZvr9FzR0O4xjfYKu/kn3vDZn5S2QKi92OAwAAEgyFOY4EgiGleo3OHp3ldpSY4jz/OyktTWbJNW5HAQAACYjCHCcca7W+KqyZJVlK8/FjO8Lu+ljasl7mu1fJ5OS6HQcAACQgmlec2FnfpobWiCpKGcc4wlor57nfSnn5Mou+73YcAACQoCjMcSIQDMlrpFljeBx2t60bpF2fyFx2nUwaD3EBAABDg8IcB6y1CgTDOqs4U9lpXrfjxAQbjcr561NS8RiZ8y5yOw4AAEhgFOY4EGzqUHWog90xjmLff1OqCcpz5Y0yXv4RAQAAhg6FOQ4EgiFJ0pxSxjEkyXa0y77wR2n8ZOnsc92OAwAAEhyFOQ4EgmFN9qfLn5nidpSYYN94STpUL89VN8sYHuACAACGFoU5xh1o7tTuhjbGMQ6zzSHZv/1Fmlouc9pZbscBAABJgMIc446MY1CYu9hX/iK1tchz5T+5HQUAACQJCnOMC1SFVZaXqjG5qW5HcZ2tPyD75ksyFQtkSk9xOw4AAEgSFOYY1tQW0ce1LTqXq8uSJPs/f5QkmctvcDkJAABIJhTmGLZhb1iOZRxDkmzVF7Lvvylz4SUy/pFuxwEAAEmEwhzDAsGwirJ8mpCf5nYU1znP/05Kz5T53g/cjgIAAJIMhTlGtXY62lLTrDmlOUm/dZr9bLu0rVLmez+Qyc51Ow4AAEgyFOYYtakmrE7HJv04hrVWznO/lUb4ZRZe6nYcAACQhCjMMSoQDCs3zaszRma4HcVdmwPS5ztkvn+dTCqjKQAAYPhRmGNQZ9Rq496wZpdmy+tJ3nEMG43Kef4paXSZzNyFbscBAABJisIcgz7c36yWTkcVpUk+jvHe36V9e+W58kYZr9ftOAAAIElRmGNQIBhWus+j6aMz3Y7iGtveJvs/f5Ymni5Nn+N2HAAAkMQozDEm6litrwrpnJIspXqT98dj1/yP1Nggz1U3J/0uIQAAwF3J28hi1Gd1rTrUFk3q3TFsqEn2tb9K02fLnDrF7TgAACDJUZhjTKAqLJ9HOqcky+0orrGvPCu1tclzxT+5HQUAAIDCHEustQoEQ5pWnKWs1OS8yc3W7Zdd+7LM3Atlxox1Ow4AAACFOZZ8eahd+8KdyT2O8cIfJeOR+f71bkcBAACQRGGOKYFgWEbSnNJst6O4wgb3yK5fK7PwMpmCQrfjAAAASKIwx5RAVUinj8zQiAyf21Fc4fz1KSkjS+a7V7kdBQAAoBuFOUbsD3doz8F2VZQl6dXlT7dJ2z+QWXK1TFZyfg8AAEBsojDHiEAwLElJ+XQ/a62cvzwpFRTKXHiJ23EAAAB6oDDHiEAwpFNGpGlUTqrbUYbfB+9JX+6S+f4NMilJ+PoBAEBMozDHgEOtEX1yoDUpxzFsJCLn+d9JJWNlzp3vdhwAAIBvoTDHgA17w7JSUm4nZ999XaqtkefKm2Q8ybn3NAAAiG0U5hgQCIZUnJ2iU0akuR1lWNm2VtkX/yydOkWaVu52HAAAgGOiMLuspTOqrftaVFGaLWOM23GGlV3zgtR0SJ6rbk661w4AAOIHhdllG/c2K+JYnZtk4xg21Cj76vPSzHNlJp7udhwAAIBeUZhdFgiGNCLdq9NGZrgdZVjZl5+ROtvlueJGt6MAAAD0aUCPlNuyZYueeOIJOY6jhQsXaunSpd86Zt26dXr22WdljNG4ceN0xx13SJKuvfZajR07VpJUWFion/70p4MYP751RB19UN2sC07JlSeJRhLsgX2ya/8mc95FMqNK3Y4DAADQp34Ls+M4evzxx3XXXXfJ7/frzjvvVHl5uUpLvy46NTU1Wr16te677z5lZ2ersbGx+32pqan6r//6r6FJH+e27WtRW8RJuu3k7OrfS16PzGU/dDsKAABAv/odydi1a5dGjRql4uJi+Xw+zZ07V5WVlT2OeeONN7R48WJlZ3cVv7y8vKFJm2DeD4aUmeLR1OIst6MMG/vlbtkN/5BZdLnMCL/bcQAAAPrV7xXmhoYG+f1fFxu/36+dO3f2OKa6ulqSdPfdd8txHF199dWaMWOGJKmzs1MrV66U1+vV5ZdfrtmzZ3/ra6xZs0Zr1qyRJD3wwAMqLCw88VcUJ6KO1cbq3frOeL9GF490O84x+Xy+Qf9ZHPz1ferMzlXh9f8iT1ZyXVlPJEOxNpAYWBvoDWsDfYn19dFvYbbWfutt39wCzHEc1dTU6N5771VDQ4PuuecerVq1SllZWXr44YdVUFCg/fv36+c//7nGjh2rUaNG9fj4RYsWadGiRd1/r6urO9HXEzc+2t+iQ62dOrsoJWZfb2Fh4aBmsx9vlrO1UuaaW9XQ2ia1tg3a58bwGuy1gcTB2kBvWBvoi1vro6SkZEDH9TuS4ff7VV9f3/33+vp65efn9zimoKBAs2bNks/nU1FRkUpKSlRTU9P9PkkqLi7WlClT9MUXXwz0NSS094MhpXiMZpYkx1VW6zhynntK8hfJzF/idhwAAIAB67cwT5w4UTU1NaqtrVUkEtG6detUXt7zqWyzZ8/W9u3bJUlNTU2qqalRcXGxwuGwOjs7u9++Y8eOHjcLJitrrQLBkGaMzlRGSnLs7Gc3vit9tVvm8htkUlLcjgMAADBg/Y5keL1e3XLLLbr//vvlOI4WLFigsrIyPf3005o4caLKy8s1ffp0bd26VStWrJDH49GyZcuUk5OjHTt26LHHHpPH45HjOFq6dCmFWdLnB9t1oCWiH06L3VmdwWQjnV07Y5SeIjNnnttxAAAAjouxxxpSdtmRmwgT1R+2HtBfPqrXk1dOUl76gLbCdsVgzRM5b74k+6fH5LnjXpmzzhmEZHAbs4joDWsDvWFtoC9xP8OMwRcIhjRlZEZMl+XBYttaZF96WjptqnTmTLfjAAAAHDcK8zCrburQV40dqijLcTvKsLCvr5ZCjfJcdfO3dlcBAACIBxTmYRYIhiRJc0oTvzDbxoOyr6+WOec7MuNPdTsOAADACaEwD7NAVUgTC9JUlJ34O0XYl56WOjtkrrjR7SgAAAAnjMI8jOpbOrWjrk0VyXB1eX+17DuvycxbLFM8sIF6AACAWERhHkYbqsKSlBTzy3b17yWvT+bSH7odBQAA4KRQmIdRIBhSSU6KyvJS3Y4ypOyenbIb35W5eKlMXn7/HwAAABDDKMzDJNwe1Yf7W1RRlpPQu0VYa+U896SUnStz8RVuxwEAADhpFOZhsrE6rKhNgnGMjzZLOz6UufRamYxMt9MAAACcNArzMAkEQ8rP8OlUf7rbUYaMdRw5z/1WKiyWueC7bscBAAAYFBTmYdAecbSpulkVpdnyJPI4xoZ/SFV7ZJYuk/El/rZ5AAAgOVCYh8GWmma1R21Cj2PYzs6unTHGTpCZdb7bcQAAAAYNhXkYBKpCykr16KzixJ3ptW+/ItXXynPVTTIelhUAAEgcNJshFnWsKqvCmjUmWz5PYo5j2JZm2Zefkc6YLjPlbLfjAAAADCoK8xD7qLZFoQ4nsccxXnteCofkueomt6MAAAAMOgrzEAsEQ0r1Gs0cneV2lCFhDzXIrlktM+t8mXGT3I4DAAAw6CjMQ8haq0BVWGePzlKaLzG/1fbFP0vRqMzSZW5HAQAAGBKJ2eJixK6GNtW3RBJ2HMPuq5J993WZed+VKRrtdhwAAIAhQWEeQoFgWB4jzRqT7XaUIeE8/3spJU3m0mvdjgIAADBkKMxD6P1gSGcVZyonzet2lEFnd38qbVons/gKmdwRbscBAAAYMhTmIRJsbNfepg5VlCbeOIa1Vs5ffyvl5MlcdLnbcQAAAIYUhXmIBIIhSVJFWQKOY2z/QPrsI5nLrpNJz3A7DQAAwJCiMA+RQDCsU/3p8memuB1lUFknKue530pFo2XOv9jtOAAAAEOOwjwEDjR3aldDW0LujmEDa6W9X8osvVHG53M7DgAAwJCjMA+B9VWJOY5hOztkX/iDNG6SzDlz3Y4DAAAwLCjMQyAQDKs0N1WluWluRxlU9q2XpYY6ea66ScbD0gEAAMmB1jPImtqj+qi2JeHGMWxLWPblZ6Uzz5Y5Y7rbcQAAAIYNhXmQVVaF5NgEHMd49TmptVmeK29yOwoAAMCwojAPskBVWIWZPk0qSHc7yqCxB+tl17woM+cCmbET3I4DAAAwrCjMg6gt4mhLTbPmlOXIGON2nEFjX/yTZB2Zy29wOwoAAMCwozAPok3VYXVErSpKE2ccw9YEZd9dIzN/iUxhsdtxAAAAhh2FeRAFgmHlpHl1ZlGm21EGjfPX30lpaTJLrnE7CgAAgCsozIOkM2q1cW9Ys8Zky+tJjHGMjk+2SVsCMt+9SiYn1+04AAAArqAwD5LttS1q7nQSZncMa63CTz0s5eXLLPq+23EAAABcQ2EeJIFgSOk+oxmjstyOMji2blDnp9tkLrtOJi1xdvwAAAA4XhTmQeBYq/VVYc0syVaaL/6/pba9Tc5fn5K3ZKzMdxa5HQcAAMBVPrcDJILP6tp0sDUS97tj2H1Vsmv/JrvuDam1Rdkr/1NhH0sEAAAkN9rQIAgEQ/J5pPIx8VeYrROVtlXKeesV6eMtktcnc85cmQsvVfqc8xSuq3M7IgAAgKsozCfJWqtAVUhTi7OUlep1O86A2VCj7Duvy779qtRwQMovlLn8Bpl5F8vk5rsdDwAAIGZQmE/SV40dqgl1aukZBW5H6Ze1Vtrzmexbr8hufEeKRKTTp8lz7a3S9Dky3vgp/AAAAMOFwnySAsGQjKQ5pTluR+mV7WiXrXxH9q1XpC93SekZMudf3PX0vpKxbscDAACIaRTmkxQIhnRaYYbyM2LvW2kP7Ou6ie+9NVJzSBpdJnP9j2TOnS+TnjhPIwQAABhKsdfy4sj+cIc+P9ium88e6XaUbtZxpI82y3nrZWn7B5Ix0tkV8iy4RJp8loxJjKcQAgAADBcK80kIBMOSpIoy98cxbHNY9r01smtfkQ7sk3JHyFxyjcz5i2UKCt2OBwAAELcozCchEAxp3Ig0jc5JdS2D/Wp31018G96WOjqkSVNkli6TmXmujC/FtVwAAACJgsJ8gg61RfTJgVZdM9U/7F/bdnbKfvBe19Xk3Z9KqWkyc+bLLLhEpmz8sOcBAABIZBTmE7ShKiwrqWIYd8ewDQdk335N9p3XpFCjVFQic+2tMnMXymTG30NTAAAA4gGF+QQFgiEVZaVofH7akH4da6306baum/i2bJBkpWmzum7i4KQ7lQAADPFJREFUO2O6jMczpF8fAAAg2VGYT0BLZ1Rb97VoyeQRQ7brhG1tkX3/za69k/dVSdk5MouvkLnguzKFxUPyNQEAAPBtFOYT8MHeZkUcOyS7Y9i9X8mufVn2/bVSe6s0frLMP/9EZtZ5Minu3VwIAACQrCjMJyBQFVJemlenF2YMyuezkYi0JSDnrVekz7ZLvhSZWed33cQ3/tRB+RoAAAA4MRTm49QZdfTB3madNy5HXs/JjWPYQw2y77wu+49XpUMNkr9I5qqbZL5zkUxO7iAlBgAAwMmgMB+nrfta1BpxTngcw1or7fxYdu0rspvWSdGodObZ8ixbLk09R8bjHeTEAAAAOBkU5uMUCIaU4fNo+qjM4/o4294mu35t1018VV9ImVkyCy6Vmf89meKSoQkLAACAk0ZhPg5Rx2pDVVjnjMlSindg27nZfXu7riave1NqbZbKxsv8049lZs+TSUsf4sQAAAA4WRTm4/BpXasa26P9PqzEOlFp28auvZM/3iJ5fTLnzJVZsESaeMaQbUUHAACAwUdhPg6BYEg+j9E5Y7KO+X4bapR99++yb78q1ddKI/wyl98gc/7FMnn5w5wWAAAAg4HCPEDWWgWCYU0flanMlJ435tk9n8m++bLsxnelSKd02lR5rrlFmj5HxstNfAAAAPGMwjxAew62q7a5U9ec5Zck2Y522cp3Zd96Wfpyl5SWIXP+RTLzl8iUjHU5LQAAAAYLhXmAAlUheYw0K6NFzl+el313jdQckkaXyVz/I5lz58ukH9/OGQAAAIh9FOYBsI6jwM4DOr2jXjn/56eyxkgzKuRZsEQ6bSo38QEAACQwCnMfbHNY9r01qlm3Tl+eeov+ed8WmUuukTl/sUxBodvxAAAAMAwozMdgv/q8a+/k9Wuljg4FZlwtSaq47VZ58hi7AAAASCYU5sNspFP2g3VdN/Ht/lRKTZOZM19mwSXa8LFHE6KORlGWAQAAkg6FWZKNRuXcvVyq2y8VjZa59laZuQtlMrN1sDWiHXW7dN00RjAAAACSEYVZkvF6ZS6+QmbkKGnKDBnP14+9Xl8VkpVUUdb30/0AAACQmAZUmLds2aInnnhCjuNo4cKFWrp06beOWbdunZ599lkZYzRu3Djdcccd3e9raWnRihUrNHv2bN16662Dl34QeRYsOebb3w+GNTonRWPzUoc5EQAAAGJBv4XZcRw9/vjjuuuuu+T3+3XnnXeqvLxcpaWl3cfU1NRo9erVuu+++5Sdna3GxsYen+Ppp5/WlClTBj/9EAt3RPXhvmZ9//QCto4DAABIUp7+Dti1a5dGjRql4uJi+Xw+zZ07V5WVlT2OeeONN7R48WJlZ2dLkvLy8rrf9/nnn6uxsVHTp08f5OhDb+PesKKWcQwAAIBk1u8V5oaGBvn9/u6/+/1+7dy5s8cx1dXVkqS7775bjuPo6quv1owZM+Q4jp566in9+Mc/1vbt23v9GmvWrNGaNWskSQ888IAKC2PjBrvN6w/In5WquaeXypOEV5h9Pl/M/CwQW1gb6A1rA71hbaAvsb4++i3M1tpvve2b4wmO46impkb33nuvGhoadM8992jVqlV65513dPbZZ/f7DVi0aJEWLVrU/fe6urqB5h8y7RFH7+9p0IIJeWqor3c7jisKCwtj4meB2MPaQG9YG+gNawN9cWt9lJSUDOi4fguz3+9X/VGFsb6+Xvn5+T2OKSgo0OTJk+Xz+VRUVKSSkhLV1NTos88+0yeffKLXX39dbW1tikQiSk9P1w033HCcL2f4bdnXrPaoZRwDAAAgyfVbmCdOnKiamhrV1taqoKBA69at0+23397jmNmzZ+vdd9/V/Pnz1dTUpJqaGhUXF/c4bu3atdq9e3dclGVJCgTDykrx6KwiHlYCAACQzPotzF6vV7fccovuv/9+OY6jBQsWqKysTE8//bQmTpyo8vJyTZ8+XVu3btWKFSvk8Xi0bNky5eTE75XZqGNVuTes8jHZSvEm3+wyAAAAvmbssYaUXXbkJkK3bNvXrLvfCOqn55do7thcV7O4iXkz9Ia1gd6wNtAb1gb6EuszzP1uK5eMAlVhpXqNZpZkux0FAAAALqMwf4O1VuuDIc0YnaV0H98eAACAZEcj/IZdDW2qa4moopSrywAAAKAwf0sgGJbHSLNK4/emRQAAAAweCvM3BIIhnVmUqdw0r9tRAAAAEAMozEepampXVVOHKsoYxwAAAEAXCvNRAsGwJGkO4xgAAAA4jMJ8lEAwpFP96RqZleJ2FAAAAMQICvNh9S2d2lnfpgquLgMAAOAoFObDjoxjML8MAACAo1GYDwtUhVSam6rSvDS3owAAACCG+NwOEAsca5WV4tGZp+S6HQUAAAAxhsIsyWOMVs4rdTsGAAAAYhAjGQAAAEAfKMwAAABAHyjMAAAAQB8ozAAAAEAfKMwAAABAHyjMAAAAQB8ozAAAAEAfKMwAAABAHyjMAAAAQB8ozAAAAEAfKMwAAABAHyjMAAAAQB8ozAAAAEAfKMwAAABAHyjMAAAAQB8ozAAAAEAfKMwAAABAHyjMAAAAQB+Mtda6HQIAAACIVVxhRq9WrlzpdgTEKNYGesPaQG9YG+hLrK8PCjMAAADQBwozAAAA0AcKM3q1aNEityMgRrE20BvWBnrD2kBfYn19cNMfAAAA0AeuMAMAAAB9oDADAAAAffC5HQDuq6ur00MPPaRDhw7JGKNFixZpyZIlCofDevDBB3XgwAGNHDlSK1asUHZ2tttx4QLHcbRy5UoVFBRo5cqVqq2t1a9+9SuFw2GNHz9e//Zv/yafj9NJMmpubtYjjzyiYDAoY4xuu+02lZSUcO6AXnrpJb355psyxqisrEzLly/XoUOHOHckoYcfflibNm1SXl6eVq1aJUm9dgxrrZ544glt3rxZaWlpWr58uSZMmODyK5C8P/vZz37mdgi4q729XZMnT9Z1112nefPm6dFHH9XUqVP16quvqqysTCtWrNDBgwe1bds2TZs2ze24cMHLL7+sSCSiSCSi8847T48++qgWLFigf/3Xf9WHH36ogwcPauLEiW7HhAsee+wxTZ06VcuXL9eiRYuUmZmp1atXc+5Icg0NDXrsscf0y1/+UkuWLNG6desUiUT02muvce5IQllZWVqwYIEqKyu1ePFiSdIzzzxzzPPE5s2btWXLFv3Hf/yHxo8fr9/85jdauHChy6+AkQxIys/P7/7XW0ZGhsaMGaOGhgZVVlbqggsukCRdcMEFqqysdDMmXFJfX69NmzZ1n7Cstfroo49UUVEhSZo/fz5rI0m1tLTok08+0YUXXihJ8vl8ysrK4twBSV2/mero6FA0GlVHR4dGjBjBuSNJTZky5Vu/ZertPLFx40bNmzdPxhhNnjxZzc3NOnjw4LBn/iZ+D4IeamtrtWfPHk2aNEmNjY3Kz8+X1FWqm5qaXE4HNzz55JNatmyZWltbJUmhUEiZmZnyer2SpIKCAjU0NLgZES6pra1Vbm6uHn74YX355ZeaMGGCbr75Zs4dUEFBgS677DLddtttSk1N1fTp0zVhwgTOHejW23mioaFBhYWF3cf5/X41NDR0H+sWrjCjW1tbm1atWqWbb75ZmZmZbsdBDPjggw+Ul5cXE/NjiD3RaFR79uzRxRdfrF/84hdKS0vT6tWr3Y6FGBAOh1VZWamHHnpIjz76qNra2rRlyxa3YyEOHGu3Y2OMC0l64gozJEmRSESrVq3S+eefrzlz5kiS8vLydPDgQeXn5+vgwYPKzc11OSWG244dO7Rx40Zt3rxZHR0dam1t1ZNPPqmWlhZFo1F5vV41NDSooKDA7ahwgd/vl9/v16mnnipJqqio0OrVqzl3QB9++KGKioq6f/Zz5szRjh07OHegW2/nCb/fr7q6uu7j6uvrXb+6LHGFGer619wjjzyiMWPG6NJLL+1+e3l5ud5++21J0ttvv61Zs2a5FREuuf766/XII4/ooYce0k9+8hOdddZZuv3223XmmWcqEAhIktauXavy8nKXk8INI0aMkN/vV3V1taSuklRaWsq5AyosLNTOnTvV3t4ua2332uDcgSN6O0+Ul5frH//4h6y1+uyzz5SZmRkThZkn/UGffvqp7rnnHo0dO7b71x7XXXedTj31VD344IOqq6tTYWGh/v3f/52toZLYRx99pBdffFErV67U/v37v7U1VEpKitsR4YIvvvhCjzzyiCKRiIqKirR8+XJZazl3QM8884zWrVsnr9erU045RT/60Y/U0NDAuSMJ/epXv9LHH3+sUCikvLw8XXPNNZo1a9YxzxPWWj3++OPaunWrUlNTtXz58pjYSYXCDAAAAPSBkQwAAACgDxRmAAAAoA8UZgAAAKAPFGYAAACgDxRmAAAAoA8UZgAAAKAPFGYAAACgD/8fLiJl8xmbOSYAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(n_est_range, bag_valid_score, label='bagging cv')\n", "plt.plot(n_est_range, rf_valid_score, label='random forest cv')\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": 199, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "RandomForestClassifier(bootstrap=True, class_weight='balanced_subsample',\n", " criterion='gini', max_depth=6, max_features='auto',\n", " max_leaf_nodes=None, min_impurity_decrease=0.0,\n", " min_impurity_split=None, min_samples_leaf=1,\n", " min_samples_split=2, min_weight_fraction_leaf=0.0,\n", " n_estimators=100, n_jobs=None, oob_score=False,\n", " random_state=None, verbose=0, warm_start=False)" ] }, "execution_count": 199, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model_rf = RandomForestClassifier(max_depth=6, class_weight='balanced_subsample', n_estimators=100)\n", "model_rf.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 202, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.6817614606593985" ] }, "execution_count": 202, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_hat = model_rf.predict_proba(X_test)\n", "roc_auc_score(y_test, y_hat[:, 1])\n", "# Есть просадка, но не такая значительная" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Подбор всех гиперпараметров\n", "\n", "Обычно подбирают гиперпараметры целыми группами. Есть несколько способов это делать\n", "* Полный перебор (Grid Search) - явно задаются все возможные значения параметров. Далее перебираются все возможные комбинации этих параметров\n", "* Случайный перебор (Random Search) - для некоотрых параметров задается распределение через функцию распределения. Задается количество случайных комбинаций, которых требуется перебрать.\n", "* \"Умный\" перебор ([hyperopt](http://hyperopt.github.io/hyperopt/)) - после каждого шага, следующия комбинация выбирается специальным образом, чтобы с одной стороны проверить неисследованные области, а с другой минимизировать функцию потерь. Не всегда работат так хорошо, как звучит.\n", "\n", "Мы же попробует случайный поиск. Почему случайный поиск лучше перебора:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "#### Задание\n", "* С помощью GridSearchCV или RandomSearchCV подберите наиболее оптимальные параметры для случайного леса.\n", "* Для этих параметров сравните средние результаты по кросс-валидации и качество на контрольной выборке\n", "\n" ] }, { "cell_type": "code", "execution_count": 203, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import GridSearchCV\n", "from sklearn.model_selection import RandomizedSearchCV" ] }, { "cell_type": "code", "execution_count": 204, "metadata": {}, "outputs": [], "source": [ "# Your Code Here" ] }, { "cell_type": "code", "execution_count": 205, "metadata": {}, "outputs": [], "source": [ "from scipy.stats import randint as randint\n", "from scipy.stats import uniform\n", "\n", "try:\n", " from sklearn.model_selection import GridSearchCV\n", " from sklearn.model_selection import RandomizedSearchCV\n", " from sklearn.model_selection import StratifiedKFold\n", "except ImportError:\n", " from sklearn.cross_validation import GridSearchCV\n", " from sklearn.cross_validation import RandomizedSearchCV\n", " from sklearn.cross_validation import StratifiedKFold\n", "\n", "\n", "RND_SEED = 123" ] }, { "cell_type": "code", "execution_count": 207, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "RandomizedSearchCV(cv=StratifiedKFold(n_splits=5, random_state=123, shuffle=True),\n", " error_score='raise-deprecating',\n", " estimator=DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n", " max_features=None, max_leaf_nodes=None,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=1, min_samples_split=2,\n", " min_weight_fraction_leaf=0.0, presort=False, random_state=123,\n", " splitter='best'),\n", " fit_params=None, iid='warn', n_iter=200, n_jobs=-1,\n", " param_distributions={'criterion': ['gini', 'entropy'], 'max_depth': , 'min_samples_leaf': , 'class_weight': [None, 'balanced']},\n", " pre_dispatch='2*n_jobs', random_state=123, refit=True,\n", " return_train_score='warn', scoring='roc_auc', verbose=0)" ] }, "execution_count": 207, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Определим пространство поиска\n", "\n", "param_grid = {\n", " 'criterion': ['gini', 'entropy'],\n", " 'max_depth': randint(2, 10),\n", " 'min_samples_leaf': randint(1, 100),\n", " 'class_weight': [None, 'balanced']}\n", "\n", "# Некоторые параметры мы задали не простым перечислением значений, а \n", "# с помощью распределений.\n", "\n", "# Будем делать 200 запусков поиска\n", "cv = StratifiedKFold(n_splits=5, random_state=123, shuffle=True)\n", "\n", "model = DecisionTreeClassifier(random_state=123)\n", "random_search = RandomizedSearchCV(model, param_distributions=param_grid, n_iter=200, n_jobs=-1,\n", " cv=cv, scoring='roc_auc', random_state=123)\n", "# А дальше, просто .fit()\n", "random_search.fit(X, y)" ] }, { "cell_type": "code", "execution_count": 208, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=8,\n", " max_features=None, max_leaf_nodes=None,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=95, min_samples_split=2,\n", " min_weight_fraction_leaf=0.0, presort=False, random_state=123,\n", " splitter='best')" ] }, "execution_count": 208, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random_search.best_estimator_" ] }, { "cell_type": "code", "execution_count": 209, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.6135310935440562" ] }, "execution_count": 209, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random_search.best_score_" ] }, { "cell_type": "code", "execution_count": 210, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'class_weight': None,\n", " 'criterion': 'gini',\n", " 'max_depth': 8,\n", " 'min_samples_leaf': 95}" ] }, "execution_count": 210, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random_search.best_params_" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "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.7.0" }, "toc": { "base_numbering": 1, "nav_menu": { "height": "142px", "width": "252px" }, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": "block", "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }