{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Лабораторная 4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Информация о диабете индейцев Пима"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin',\n",
" 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome'],\n",
" dtype='object')\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 6 | \n",
" 148 | \n",
" 72 | \n",
" 35 | \n",
" 0 | \n",
" 33.6 | \n",
" 0.627 | \n",
" 50 | \n",
" 1 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 85 | \n",
" 66 | \n",
" 29 | \n",
" 0 | \n",
" 26.6 | \n",
" 0.351 | \n",
" 31 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 8 | \n",
" 183 | \n",
" 64 | \n",
" 0 | \n",
" 0 | \n",
" 23.3 | \n",
" 0.672 | \n",
" 32 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" 1 | \n",
" 89 | \n",
" 66 | \n",
" 23 | \n",
" 94 | \n",
" 28.1 | \n",
" 0.167 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 0 | \n",
" 137 | \n",
" 40 | \n",
" 35 | \n",
" 168 | \n",
" 43.1 | \n",
" 2.288 | \n",
" 33 | \n",
" 1 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 763 | \n",
" 10 | \n",
" 101 | \n",
" 76 | \n",
" 48 | \n",
" 180 | \n",
" 32.9 | \n",
" 0.171 | \n",
" 63 | \n",
" 0 | \n",
"
\n",
" \n",
" 764 | \n",
" 2 | \n",
" 122 | \n",
" 70 | \n",
" 27 | \n",
" 0 | \n",
" 36.8 | \n",
" 0.340 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 765 | \n",
" 5 | \n",
" 121 | \n",
" 72 | \n",
" 23 | \n",
" 112 | \n",
" 26.2 | \n",
" 0.245 | \n",
" 30 | \n",
" 0 | \n",
"
\n",
" \n",
" 766 | \n",
" 1 | \n",
" 126 | \n",
" 60 | \n",
" 0 | \n",
" 0 | \n",
" 30.1 | \n",
" 0.349 | \n",
" 47 | \n",
" 1 | \n",
"
\n",
" \n",
" 767 | \n",
" 1 | \n",
" 93 | \n",
" 70 | \n",
" 31 | \n",
" 0 | \n",
" 30.4 | \n",
" 0.315 | \n",
" 23 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
768 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"0 6 148 72 35 0 33.6 \n",
"1 1 85 66 29 0 26.6 \n",
"2 8 183 64 0 0 23.3 \n",
"3 1 89 66 23 94 28.1 \n",
"4 0 137 40 35 168 43.1 \n",
".. ... ... ... ... ... ... \n",
"763 10 101 76 48 180 32.9 \n",
"764 2 122 70 27 0 36.8 \n",
"765 5 121 72 23 112 26.2 \n",
"766 1 126 60 0 0 30.1 \n",
"767 1 93 70 31 0 30.4 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"0 0.627 50 1 \n",
"1 0.351 31 0 \n",
"2 0.672 32 1 \n",
"3 0.167 21 0 \n",
"4 2.288 33 1 \n",
".. ... ... ... \n",
"763 0.171 63 0 \n",
"764 0.340 27 0 \n",
"765 0.245 30 0 \n",
"766 0.349 47 1 \n",
"767 0.315 23 0 \n",
"\n",
"[768 rows x 9 columns]"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn import set_config\n",
"\n",
"set_config(transform_output=\"pandas\")\n",
"df = pd.read_csv(\".//scv//diabetes.csv\")\n",
"print(df.columns)\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование выборок"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'X_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" 1 | \n",
" 105 | \n",
" 58 | \n",
" 0 | \n",
" 0 | \n",
" 24.3 | \n",
" 0.187 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 69 | \n",
" 4 | \n",
" 146 | \n",
" 85 | \n",
" 27 | \n",
" 100 | \n",
" 28.9 | \n",
" 0.189 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 494 | \n",
" 3 | \n",
" 80 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0.0 | \n",
" 0.174 | \n",
" 22 | \n",
" 0 | \n",
"
\n",
" \n",
" 463 | \n",
" 5 | \n",
" 88 | \n",
" 78 | \n",
" 30 | \n",
" 0 | \n",
" 27.6 | \n",
" 0.258 | \n",
" 37 | \n",
" 0 | \n",
"
\n",
" \n",
" 653 | \n",
" 2 | \n",
" 120 | \n",
" 54 | \n",
" 0 | \n",
" 0 | \n",
" 26.8 | \n",
" 0.455 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" 0 | \n",
" 124 | \n",
" 70 | \n",
" 20 | \n",
" 0 | \n",
" 27.4 | \n",
" 0.254 | \n",
" 36 | \n",
" 1 | \n",
"
\n",
" \n",
" 109 | \n",
" 0 | \n",
" 95 | \n",
" 85 | \n",
" 25 | \n",
" 36 | \n",
" 37.4 | \n",
" 0.247 | \n",
" 24 | \n",
" 1 | \n",
"
\n",
" \n",
" 27 | \n",
" 1 | \n",
" 97 | \n",
" 66 | \n",
" 15 | \n",
" 140 | \n",
" 23.2 | \n",
" 0.487 | \n",
" 22 | \n",
" 0 | \n",
"
\n",
" \n",
" 651 | \n",
" 1 | \n",
" 117 | \n",
" 60 | \n",
" 23 | \n",
" 106 | \n",
" 33.8 | \n",
" 0.466 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 197 | \n",
" 3 | \n",
" 107 | \n",
" 62 | \n",
" 13 | \n",
" 48 | \n",
" 22.9 | \n",
" 0.678 | \n",
" 23 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"196 1 105 58 0 0 24.3 \n",
"69 4 146 85 27 100 28.9 \n",
"494 3 80 0 0 0 0.0 \n",
"463 5 88 78 30 0 27.6 \n",
"653 2 120 54 0 0 26.8 \n",
".. ... ... ... ... ... ... \n",
"322 0 124 70 20 0 27.4 \n",
"109 0 95 85 25 36 37.4 \n",
"27 1 97 66 15 140 23.2 \n",
"651 1 117 60 23 106 33.8 \n",
"197 3 107 62 13 48 22.9 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"196 0.187 21 0 \n",
"69 0.189 27 0 \n",
"494 0.174 22 0 \n",
"463 0.258 37 0 \n",
"653 0.455 27 0 \n",
".. ... ... ... \n",
"322 0.254 36 1 \n",
"109 0.247 24 1 \n",
"27 0.487 22 0 \n",
"651 0.466 27 0 \n",
"197 0.678 23 1 \n",
"\n",
"[614 rows x 9 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" 0 | \n",
"
\n",
" \n",
" 69 | \n",
" 0 | \n",
"
\n",
" \n",
" 494 | \n",
" 0 | \n",
"
\n",
" \n",
" 463 | \n",
" 0 | \n",
"
\n",
" \n",
" 653 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" 1 | \n",
"
\n",
" \n",
" 109 | \n",
" 1 | \n",
"
\n",
" \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 651 | \n",
" 0 | \n",
"
\n",
" \n",
" 197 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"196 0\n",
"69 0\n",
"494 0\n",
"463 0\n",
"653 0\n",
".. ...\n",
"322 1\n",
"109 1\n",
"27 0\n",
"651 0\n",
"197 1\n",
"\n",
"[614 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'X_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 669 | \n",
" 9 | \n",
" 154 | \n",
" 78 | \n",
" 30 | \n",
" 100 | \n",
" 30.9 | \n",
" 0.164 | \n",
" 45 | \n",
" 0 | \n",
"
\n",
" \n",
" 379 | \n",
" 0 | \n",
" 93 | \n",
" 100 | \n",
" 39 | \n",
" 72 | \n",
" 43.4 | \n",
" 1.021 | \n",
" 35 | \n",
" 0 | \n",
"
\n",
" \n",
" 640 | \n",
" 0 | \n",
" 102 | \n",
" 86 | \n",
" 17 | \n",
" 105 | \n",
" 29.3 | \n",
" 0.695 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 658 | \n",
" 11 | \n",
" 127 | \n",
" 106 | \n",
" 0 | \n",
" 0 | \n",
" 39.0 | \n",
" 0.190 | \n",
" 51 | \n",
" 0 | \n",
"
\n",
" \n",
" 304 | \n",
" 3 | \n",
" 150 | \n",
" 76 | \n",
" 0 | \n",
" 0 | \n",
" 21.0 | \n",
" 0.207 | \n",
" 37 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 203 | \n",
" 2 | \n",
" 99 | \n",
" 70 | \n",
" 16 | \n",
" 44 | \n",
" 20.4 | \n",
" 0.235 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 605 | \n",
" 1 | \n",
" 124 | \n",
" 60 | \n",
" 32 | \n",
" 0 | \n",
" 35.8 | \n",
" 0.514 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 561 | \n",
" 0 | \n",
" 198 | \n",
" 66 | \n",
" 32 | \n",
" 274 | \n",
" 41.3 | \n",
" 0.502 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 280 | \n",
" 0 | \n",
" 146 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 37.9 | \n",
" 0.334 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 103 | \n",
" 1 | \n",
" 81 | \n",
" 72 | \n",
" 18 | \n",
" 40 | \n",
" 26.6 | \n",
" 0.283 | \n",
" 24 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"669 9 154 78 30 100 30.9 \n",
"379 0 93 100 39 72 43.4 \n",
"640 0 102 86 17 105 29.3 \n",
"658 11 127 106 0 0 39.0 \n",
"304 3 150 76 0 0 21.0 \n",
".. ... ... ... ... ... ... \n",
"203 2 99 70 16 44 20.4 \n",
"605 1 124 60 32 0 35.8 \n",
"561 0 198 66 32 274 41.3 \n",
"280 0 146 70 0 0 37.9 \n",
"103 1 81 72 18 40 26.6 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"669 0.164 45 0 \n",
"379 1.021 35 0 \n",
"640 0.695 27 0 \n",
"658 0.190 51 0 \n",
"304 0.207 37 0 \n",
".. ... ... ... \n",
"203 0.235 27 0 \n",
"605 0.514 21 0 \n",
"561 0.502 28 1 \n",
"280 0.334 28 1 \n",
"103 0.283 24 0 \n",
"\n",
"[154 rows x 9 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 669 | \n",
" 0 | \n",
"
\n",
" \n",
" 379 | \n",
" 0 | \n",
"
\n",
" \n",
" 640 | \n",
" 0 | \n",
"
\n",
" \n",
" 658 | \n",
" 0 | \n",
"
\n",
" \n",
" 304 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 203 | \n",
" 0 | \n",
"
\n",
" \n",
" 605 | \n",
" 0 | \n",
"
\n",
" \n",
" 561 | \n",
" 1 | \n",
"
\n",
" \n",
" 280 | \n",
" 1 | \n",
"
\n",
" \n",
" 103 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"669 0\n",
"379 0\n",
"640 0\n",
"658 0\n",
"304 0\n",
".. ...\n",
"203 0\n",
"605 0\n",
"561 1\n",
"280 1\n",
"103 0\n",
"\n",
"[154 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from typing import Tuple\n",
"import pandas as pd\n",
"from pandas import DataFrame\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"def split_stratified_into_train_val_test(\n",
" df_input,\n",
" stratify_colname=\"y\",\n",
" frac_train=0.6,\n",
" frac_val=0.15,\n",
" frac_test=0.25,\n",
" random_state=None,\n",
") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame, DataFrame, DataFrame]:\n",
" \n",
" if frac_train + frac_val + frac_test != 1.0:\n",
" raise ValueError(\n",
" \"fractions %f, %f, %f do not add up to 1.0\"\n",
" % (frac_train, frac_val, frac_test)\n",
" )\n",
" if stratify_colname not in df_input.columns:\n",
" raise ValueError(\"%s is not a column in the dataframe\" % (stratify_colname))\n",
" X = df_input # Contains all columns.\n",
" y = df_input[\n",
" [stratify_colname]\n",
" ] # Dataframe of just the column on which to stratify.\n",
" # Split original dataframe into train and temp dataframes.\n",
" df_train, df_temp, y_train, y_temp = train_test_split(\n",
" X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n",
" )\n",
" if frac_val <= 0:\n",
" assert len(df_input) == len(df_train) + len(df_temp)\n",
" return df_train, pd.DataFrame(), df_temp, y_train, pd.DataFrame(), y_temp\n",
" # Split the temp dataframe into val and test dataframes.\n",
" relative_frac_test = frac_test / (frac_val + frac_test)\n",
" df_val, df_test, y_val, y_test = train_test_split(\n",
" df_temp,\n",
" y_temp,\n",
" stratify=y_temp,\n",
" test_size=relative_frac_test,\n",
" random_state=random_state,\n",
" )\n",
" assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n",
" return df_train, df_val, df_test, y_train, y_val, y_test\n",
"\n",
"X_train, X_val, X_test, y_train, y_val, y_test = split_stratified_into_train_val_test(\n",
" df, stratify_colname=\"Outcome\", frac_train=0.80, frac_val=0, frac_test=0.20, random_state=9\n",
")\n",
"\n",
"display(\"X_train\", X_train)\n",
"display(\"y_train\", y_train)\n",
"\n",
"display(\"X_test\", X_test)\n",
"display(\"y_test\", y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Классификация данных"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.discriminant_analysis import StandardScaler\n",
"from sklearn.impute import SimpleImputer\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import OneHotEncoder\n",
"\n",
"from transformers import DiabetFeatures\n",
"\n",
"\n",
"columns_to_drop = [\"Glucose\", \"Age\", \"BloodPressure\", \"Outcome\", \"DiabetesPedigreeFunction\"]\n",
"num_columns = [\n",
" column\n",
" for column in df.columns\n",
" if column not in columns_to_drop and df[column].dtype != \"object\"\n",
"]\n",
"cat_columns = [\n",
" column\n",
" for column in df.columns\n",
" if column not in columns_to_drop and df[column].dtype == \"object\"\n",
"]\n",
"\n",
"num_imputer = SimpleImputer(strategy=\"median\")\n",
"num_scaler = StandardScaler()\n",
"preprocessing_num = Pipeline(\n",
" [\n",
" (\"imputer\", num_imputer),\n",
" (\"scaler\", num_scaler),\n",
" ]\n",
")\n",
"\n",
"cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\")\n",
"cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n",
"preprocessing_cat = Pipeline(\n",
" [\n",
" (\"imputer\", cat_imputer),\n",
" (\"encoder\", cat_encoder),\n",
" ]\n",
")\n",
"\n",
"features_preprocessing = ColumnTransformer(\n",
" verbose_feature_names_out=False,\n",
" transformers=[\n",
" (\"prepocessing_num\", preprocessing_num, num_columns),\n",
" (\"prepocessing_cat\", preprocessing_cat, cat_columns),\n",
" ],\n",
" remainder=\"passthrough\"\n",
")\n",
"\n",
"drop_columns = ColumnTransformer(\n",
" verbose_feature_names_out=False,\n",
" transformers=[\n",
" (\"drop_columns\", \"drop\", columns_to_drop),\n",
" ],\n",
" remainder=\"passthrough\",\n",
")\n",
"\n",
"\n",
"pipeline_end = Pipeline(\n",
" [\n",
" (\"features_preprocessing\", features_preprocessing),\n",
" (\"drop_columns\", drop_columns),\n",
" ]\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Проверка работы конвеера"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" -0.838489 | \n",
" -1.297466 | \n",
" -0.688684 | \n",
" -0.946400 | \n",
"
\n",
" \n",
" 69 | \n",
" 0.072181 | \n",
" 0.395520 | \n",
" 0.180416 | \n",
" -0.377190 | \n",
"
\n",
" \n",
" 494 | \n",
" -0.231376 | \n",
" -1.297466 | \n",
" -0.688684 | \n",
" -3.953317 | \n",
"
\n",
" \n",
" 463 | \n",
" 0.375738 | \n",
" 0.583630 | \n",
" -0.688684 | \n",
" -0.538054 | \n",
"
\n",
" \n",
" 653 | \n",
" -0.534932 | \n",
" -1.297466 | \n",
" -0.688684 | \n",
" -0.637047 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" -1.142046 | \n",
" -0.043402 | \n",
" -0.688684 | \n",
" -0.562802 | \n",
"
\n",
" \n",
" 109 | \n",
" -1.142046 | \n",
" 0.270114 | \n",
" -0.375808 | \n",
" 0.674613 | \n",
"
\n",
" \n",
" 27 | \n",
" -0.838489 | \n",
" -0.356918 | \n",
" 0.528056 | \n",
" -1.082516 | \n",
"
\n",
" \n",
" 651 | \n",
" -0.838489 | \n",
" 0.144708 | \n",
" 0.232562 | \n",
" 0.229143 | \n",
"
\n",
" \n",
" 197 | \n",
" -0.231376 | \n",
" -0.482325 | \n",
" -0.271516 | \n",
" -1.119638 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 4 columns
\n",
"
"
],
"text/plain": [
" Pregnancies SkinThickness Insulin BMI\n",
"196 -0.838489 -1.297466 -0.688684 -0.946400\n",
"69 0.072181 0.395520 0.180416 -0.377190\n",
"494 -0.231376 -1.297466 -0.688684 -3.953317\n",
"463 0.375738 0.583630 -0.688684 -0.538054\n",
"653 -0.534932 -1.297466 -0.688684 -0.637047\n",
".. ... ... ... ...\n",
"322 -1.142046 -0.043402 -0.688684 -0.562802\n",
"109 -1.142046 0.270114 -0.375808 0.674613\n",
"27 -0.838489 -0.356918 0.528056 -1.082516\n",
"651 -0.838489 0.144708 0.232562 0.229143\n",
"197 -0.231376 -0.482325 -0.271516 -1.119638\n",
"\n",
"[614 rows x 4 columns]"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"preprocessing_result = pipeline_end.fit_transform(X_train)\n",
"preprocessed_df = pd.DataFrame(\n",
" preprocessing_result,\n",
" columns=pipeline_end.get_feature_names_out(),\n",
")\n",
"\n",
"preprocessed_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование набора моделей для классификации"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [],
"source": [
"from sklearn import ensemble, linear_model, naive_bayes, neighbors, neural_network, tree\n",
"\n",
"class_models = {\n",
" \"logistic\": {\"model\": linear_model.LogisticRegression()},\n",
" # \"ridge\": {\"model\": linear_model.RidgeClassifierCV(cv=5, class_weight=\"balanced\")},\n",
" \"ridge\": {\"model\": linear_model.LogisticRegression(penalty=\"l2\", class_weight=\"balanced\")},\n",
" \"decision_tree\": {\n",
" \"model\": tree.DecisionTreeClassifier(max_depth=7, random_state=9)\n",
" },\n",
" \"knn\": {\"model\": neighbors.KNeighborsClassifier(n_neighbors=7)},\n",
" \"naive_bayes\": {\"model\": naive_bayes.GaussianNB()},\n",
" \"gradient_boosting\": {\n",
" \"model\": ensemble.GradientBoostingClassifier(n_estimators=210)\n",
" },\n",
" \"random_forest\": {\n",
" \"model\": ensemble.RandomForestClassifier(\n",
" max_depth=11, class_weight=\"balanced\", random_state=9\n",
" )\n",
" },\n",
" \"mlp\": {\n",
" \"model\": neural_network.MLPClassifier(\n",
" hidden_layer_sizes=(7,),\n",
" max_iter=500,\n",
" early_stopping=True,\n",
" random_state=9,\n",
" )\n",
" },\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Обучение моделей на обучающем наборе данных и оценка на тестовом"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: logistic\n",
"Model: ridge\n",
"Model: decision_tree\n",
"Model: knn\n",
"Model: naive_bayes\n",
"Model: gradient_boosting\n",
"Model: random_forest\n",
"Model: mlp\n"
]
}
],
"source": [
"from sklearn import metrics\n",
"\n",
"for model_name in class_models.keys():\n",
" print(f\"Model: {model_name}\")\n",
" model = class_models[model_name][\"model\"]\n",
"\n",
" model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\n",
" model_pipeline = model_pipeline.fit(X_train, y_train.values.ravel())\n",
"\n",
" y_train_predict = model_pipeline.predict(X_train)\n",
" y_test_probs = model_pipeline.predict_proba(X_test)[:, 1]\n",
" y_test_predict = np.where(y_test_probs > 0.5, 1, 0)\n",
"\n",
" class_models[model_name][\"pipeline\"] = model_pipeline\n",
" class_models[model_name][\"probs\"] = y_test_probs\n",
" class_models[model_name][\"preds\"] = y_test_predict\n",
"\n",
" class_models[model_name][\"Precision_train\"] = metrics.precision_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Precision_test\"] = metrics.precision_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Recall_train\"] = metrics.recall_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Recall_test\"] = metrics.recall_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Accuracy_train\"] = metrics.accuracy_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Accuracy_test\"] = metrics.accuracy_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"ROC_AUC_test\"] = metrics.roc_auc_score(\n",
" y_test, y_test_probs\n",
" )\n",
" class_models[model_name][\"F1_train\"] = metrics.f1_score(y_train, y_train_predict)\n",
" class_models[model_name][\"F1_test\"] = metrics.f1_score(y_test, y_test_predict)\n",
" class_models[model_name][\"MCC_test\"] = metrics.matthews_corrcoef(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Confusion_matrix\"] = metrics.confusion_matrix(\n",
" y_test, y_test_predict\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Сводная таблица оценок качества для использованных моделей классификации\n",
"\n",
"Матрица неточностей"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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zIRCodA8sC4uLs5oD6wjIiKyanrkZnPDThIRWRdRxFUpYfizGErigXVERERWTY/cbG7YSSIi65JXxBfxSzxMtiQeWEdERGTVjJybSwLvSSIi62KBD6wjIiKyahb4oHeOJBGRdREoYgUdw5oqqQfWERERWTUj5uaSwk4SEVmXvDxA5BW+T62jXIf8B9YlJydDpVIhICCgwAPrbGxs0K1bN2RlZSEkJASLFi161TMgIiKyLkbMzSWFnSQisi5GfBZDST2wjoiIyKpZ4HOS2EkiIutigV/EREREVs0CczM7SURkVUReHoSOIX1hpkP6RERE1swSczM7SURkXYTQ/WA6M71aRUREZNUsMDezk0RE1kUU8VRvM/0iJiIismoWmJvZSSIi65KXB0h0DN3rWlmHiIiIio8F5mZ2kojIqgi1GkJS+NO7ha6nfRMREVGxscTczE4SEVkXCxzSJyIismoWmJvZSSIi66IWgMSyvoiJiIismgXmZnaSiMiqiDw1hI55z+Y6pE9ERGTNLDE3s5NERNZFqAHo+MI10y9iIiIiq2aBuZmdpBIm/jekmIscnVMzqXgJkW3qEEqt3P999qIYh9Zz1NkQOv7nykVOsR2XiCyXJjermR+odMr/t19c+dkSczM7SSXs0aNHAIBD+M3EkZRiD00dAD169AgqlcqobUqlUnh6euLQna1F1vP09IRUKjXqsYnIsuXn5v23vjdxJESmZez8bMm5WSKK85IuFaBWq5GUlAQnJydIJBJTh2Ow9PR0eHt7IzExEUql0tThlDqW/vkLIfDo0SN4eXnBxsbG6O1nZmYiO7voK8FSqRRyudzoxyYiy8XcTK/K0v8OijM/W2puZieJDJKeng6VSoW0tDSL/BKwdPz8iYjo35gbTI9/B9bH+JdyiYiIiIiILBg7SURERERERM9hJ4kMIpPJEB4eDplMZupQSiV+/kRE9G/MDabHvwPrw3uSiIiIiIiInsORJCIiIiIiouewk0RERERERPQcdpKIiIiIiIiew04SERERERHRc9hJopeyf/9+SCQSpKamFlmvYsWKmDdvXonEZK0kEgk2bdqkV92IiAjUrVu3WOMhIiLzxNxccpibrR87SVYmLCwMXbp0KVCu7xfny4qOjoazs3OxtG3t7t27hyFDhsDHxwcymQyenp4ICQlBbGwsACA5ORnt27c3cZRERPSymJstD3Mz2Zk6AKLSrlu3bsjOzsbKlStRuXJlpKSkYO/evbh//z4AwNPT08QREhERlS7MzcSRpFLq0KFDaN68ORwcHODt7Y2RI0fi8ePHmv0//vgjGjZsCCcnJ3h6eqJXr164e/duoW3t378f/fr1Q1paGiQSCSQSCSIiIjT7nzx5gv79+8PJyQk+Pj747rvvNPuCg4MxfPhwrfbu3bsHqVSKvXv3GvekzVBqaioOHjyImTNnolWrVvD19cWbb76JCRMmoFOnTgAKDunfunULPXv2hKurKxwdHdGwYUP8+eefhbZ/9epVVK5cGcOHDwcfiUZEZN6Ym80DczMB7CSVSlevXkW7du3QrVs3nDlzBmvXrsWhQ4e0vhBzcnIwdepUnD59Gps2bcKNGzcQFhZWaHtNmjTBvHnzoFQqkZycjOTkZIwdO1azf/bs2WjYsCFOnTqFoUOHYsiQIYiPjwcADBw4EDExMcjKytLUX7VqFV577TUEBwcXzwdgRhQKBRQKBTZt2qT1GeiSkZGBoKAg3L59G5s3b8bp06cxfvx4qNXqAnXPnDmDZs2aoVevXliwYAEkEklxnAIRERkBc7P5YG4mAIAgqxIaGipsbW2Fo6Oj1iaXywUA8fDhQzFgwADx4Ycfar3v4MGDwsbGRjx9+rTQdo8dOyYAiEePHgkhhNi3b5+mPSGEiIqKEiqVqsD7fH19RZ8+fTSv1Wq1cHd3F4sXLxZCCPH06VPh4uIi1q5dq6kTEBAgIiIiXuVjsCgbNmwQLi4uQi6XiyZNmogJEyaI06dPa/YDEBs3bhRCCLF06VLh5OQk7t+/X2hb4eHh4vXXXxexsbHCxcVFfP311yVxCkREVATmZsvD3EwcSbJCrVq1QlxcnNb2/fffa/afPn0a0dHRmislCoUCISEhUKvVuH79OgDgxIkT6NixI3x8fODk5ISgoCAAQEJCgsHxBAQEaP4skUjg6empmR4gl8vxwQcfYMWKFQCAkydP4ty5czqvjFmjbt26ISkpCZs3b0a7du2wf/9+1K9fH9HR0QXqxsXFoV69enB1ddXZXkJCAtq2bYtJkyZhzJgxxRg5ERHpi7nZsjA3ExdusEKOjo7w8/PTKrt165bmzxkZGfjoo48wcuTIAu/18fHB48ePERISgpCQEKxevRpubm5ISEhASEgIsrOzDY7H3t5e67VEItEagh44cCDq1q2LW7duISoqCsHBwfD19TX4OJZMLpejbdu2aNu2LSZOnIiBAwciPDy8QEJycHB4YVtubm7w8vLCTz/9hP79+0OpVBZT1EREpC/mZsvD3Fy6cSSpFKpfvz4uXLgAPz+/AptUKsVff/2F+/fvY8aMGWjevDn8/f113hiaTyqVIi8v76XiqVOnDho2bIhly5YhJiYG/fv3f6l2rEnNmjW1btbNFxAQgLi4ODx48EDnex0cHLB161bI5XKEhITg0aNHxRkqEREZAXOz+WNuLl3YSSqFPv30Uxw+fBjDhw9HXFwcLl++jF9//VVzc6iPjw+kUim+/fZbXLt2DZs3b8bUqVOLbLNixYrIyMjA3r178ffff+PJkycGxTRw4EDMmDEDQgi8++67L31ulub+/fsIDg7GqlWrcObMGVy/fh3r16/HrFmz0Llz5wL1e/bsCU9PT3Tp0gWxsbG4du0afv75Zxw5ckSrnqOjI7Zt2wY7Ozu0b98eGRkZJXVKRET0EpibzQdzMwHsJJVKAQEBOHDgAC5duoTmzZujXr16mDRpEry8vAA8GxKOjo7G+vXrUbNmTcyYMQNff/11kW02adIEgwcPRo8ePeDm5oZZs2YZFFPPnj1hZ2eHnj17Qi6Xv/S5WRqFQoFGjRph7ty5aNGiBWrXro2JEydi0KBBWLBgQYH6UqkUu3btgru7O95++23UqVMHM2bMgK2tbaFtb9++HUIIdOjQodCrX0REZB6Ym80HczMBgEQILtBOpnfjxg1UqVIFx44dQ/369U0dDhERUanH3EylGTtJZFI5OTm4f/8+xo4di+vXryM2NtbUIREREZVqzM1EnG5HJhYbG4vy5cvj2LFjWLJkianDISIiKvWYm4k4kkRERERERKSFI0lERERERETPYSeJiIiIiIjoOewkERERERERPYedJCIiIiIiouewk0RmKSwsDF26dNG8btmyJUaNGlXicezfvx8SiQSpqak660gkEmzatEnvNiMiIlC3bt1XiuvGjRuQSCSIi4t7pXaIiIj0xdxcNOZm68JOEuktLCwMEokEEokEUqkUfn5+mDJlCnJzc4v92L/88gumTp2qV119vjyJiIisAXMzUfGwM3UAZFnatWuHqKgoZGVl4bfffsOwYcNgb2+PCRMmFKibnZ0NqVRqlOO6uroapR0iIiJrw9xMZHwcSSKDyGQyeHp6wtfXF0OGDEGbNm2wefNmAP8Mw0+bNg1eXl6oXr06ACAxMRHdu3eHs7MzXF1d0blzZ9y4cUPTZl5eHj755BM4OzujbNmyGD9+PP79+K5/D+lnZWXh008/hbe3N2QyGfz8/LB8+XLcuHEDrVq1AgC4uLhAIpEgLCwMAKBWqxEZGYlKlSrBwcEBr7/+OjZs2KB1nN9++w3VqlWDg4MDWrVqpRWnvj799FNUq1YNZcqUQeXKlTFx4kTk5OQUqLd06VJ4e3ujTJky6N69O9LS0rT2f//996hRowbkcjn8/f2xaNEig2MhIiLrx9z8YszNZCh2kuiVODg4IDs7W/N67969iI+Px+7du7F161bk5OQgJCQETk5OOHjwIGJjY6FQKNCuXTvN+2bPno3o6GisWLEChw4dwoMHD7Bx48Yij9u3b1/89NNPmD9/Pi5evIilS5dCoVDA29sbP//8MwAgPj4eycnJ+OabbwAAkZGR+OGHH7BkyRKcP38eo0ePRp8+fXDgwAEAzxJG165d0bFjR8TFxWHgwIH47LPPDP5MnJycEB0djQsXLuCbb77BsmXLMHfuXK06V65cwbp167Blyxbs2LEDp06dwtChQzX7V69ejUmTJmHatGm4ePEipk+fjokTJ2LlypUGx0NERKULc3NBzM1kMEGkp9DQUNG5c2chhBBqtVrs3r1byGQyMXbsWM1+Dw8PkZWVpXnPjz/+KKpXry7UarWmLCsrSzg4OIidO3cKIYQoX768mDVrlmZ/Tk6OqFChguZYQggRFBQkPv74YyGEEPHx8QKA2L17d6Fx7tu3TwAQDx8+1JRlZmaKMmXKiMOHD2vVHTBggOjZs6cQQogJEyaImjVrau3/9NNPC7T1bwDExo0bde7/6quvRIMGDTSvw8PDha2trbh165ambPv27cLGxkYkJycLIYSoUqWKiImJ0Wpn6tSpIjAwUAghxPXr1wUAcerUKZ3HJSIi68fcXDjmZnpVvCeJDLJ161YoFArk5ORArVajV69eiIiI0OyvU6eO1lzn06dP48qVK3ByctJqJzMzE1evXkVaWhqSk5PRqFEjzT47Ozs0bNiwwLB+vri4ONja2iIoKEjvuK9cuYInT56gbdu2WuXZ2dmoV68eAODixYtacQBAYGCg3sfIt3btWsyfPx9Xr15FRkYGcnNzoVQqter4+Pjgtdde0zqOWq1GfHw8nJyccPXqVQwYMACDBg3S1MnNzYVKpTI4HiIism7MzS/G3EyGYieJDNKqVSssXrwYUqkUXl5esLPT/ifk6Oio9TojIwMNGjTA6tWrC7Tl5ub2UjE4ODgY/J6MjAwAwLZt27S+AIFnc7mN5ciRI+jduzcmT56MkJAQqFQqrFmzBrNnzzY41mXLlhVIDLa2tkaLlYiIrANzc9GYm+llsJNEBnF0dISfn5/e9evXr4+1a9fC3d29wBWbfOXLl8eff/6JFi1aAHh2VebEiROoX79+ofXr1KkDtVqNAwcOoE2bNgX2518ty8vL05TVrFkTMpkMCQkJOq9y1ahRQ3Oja76jR4+++CSfc/jwYfj6+uKLL77QlN28ebNAvYSEBCQlJcHLy0tzHBsbG1SvXh0eHh7w8vLCtWvX0Lt3b4OOT0REpQ9zc9GYm+llcOEGKla9e/dGuXLl0LlzZxw8eBDXr1/H/v37MXLkSNy6dQsA8PHHH2PGjBnYtGkT/vrrLwwdOrTI5yhUrFgRoaGh6N+/PzZt2qRpc926dQAAX19fSCQSbN26Fffu3UNGRgacnJwwduxYjB49GitXrsTVq1dx8uRJfPvtt5obLgcPHozLly9j3LhxiI+PR0xMDKKjow0636pVqyIhIQFr1qzB1atXMX/+/EJvdJXL5QgNDcXp06dx8OBBjBw5Et27d4enpycAYPLkyYiMjMT8+fNx6dIlnD17FlFRUZgzZ45B8RAREf0bczNzM+nB1DdFkeV4/uZQQ/YnJyeLvn37inLlygmZTCYqV64sBg0aJNLS0oQQz24G/fjjj4VSqRTOzs7ik08+EX379tV5c6gQQjx9+lSMHj1alC9fXkilUuHn5ydWrFih2T9lyhTh6ekpJBKJCA0NFUI8u6F13rx5onr16sLe3l64ubmJkJAQceDAAc37tmzZIvz8/IRMJhPNmzcXK1asMPjm0HHjxomyZcsKhUIhevToIebOnStUKpVmf3h4uHj99dfFokWLhJeXl5DL5eI///mPePDggVa7q1evFnXr1hVSqVS4uLiIFi1aiF9++UUIwZtDiYjoGebmwjE306uSCKHjDjwiIiIiIqJSiNPtiIiIiIiInsNOEhERERER0XPYSSIiIiIiInoOO0lERERERETPYSeJiIiIiIjoOewkERERERERPYedJCIiIiIiouewk0RERERERPQcdpKIiIiIiIiew04SERERERHRc9hJIiIiIiIieg47SURERERERM9hJ4mIiIiIiOg57CQRERERERE9h50kMpmWLVuiZcuWJo+hdu3aJo2BiIiouEkkEkRERGheR0dHQyKR4MaNGyaLqSj79++HRCLBhg0bTB2KQW7cuAGJRILo6GhTh0KviJ0kIiIiIjK6J0+eICIiAvv37zd1KEYXExODefPmmToMKkZ2pg6ASq9du3aZOgQiIqJS6YMPPsD7778PmUxWbMd48uQJJk+eDAAmnzlibDExMTh37hxGjRqlVe7r64unT5/C3t7eNIGR0bCTRCYjlUpNHQIREZHZUqvVyM7OhlwuN3rbtra2sLW1NXq7pZ1EIimWvy8qeZxuR3qLiIiARCLBlStXEBYWBmdnZ6hUKvTr1w9PnjzR1IuKikJwcDDc3d0hk8lQs2ZNLF68uEB7z9+TlJKSAjs7O80Vp+fFx8dDIpFgwYIFmrLU1FSMGjUK3t7ekMlk8PPzw8yZM6FWq1/q3E6cOIEmTZrAwcEBlSpVwpIlS7T2Z2dnY9KkSWjQoAFUKhUcHR3RvHlz7Nu3T1NHCIGKFSuic+fOBdrPzMyESqXCRx99pCnLyspCeHg4/Pz8IJPJ4O3tjfHjxyMrK0vrvbt370azZs3g7OwMhUKB6tWr4/PPP3+p8yQiItPYv38/GjZsCLlcjipVqmDp0qWavJpPIpFg+PDhWL16NWrVqgWZTIYdO3YAAL7++ms0adIEZcuWhYODAxo0aFDo/TpZWVkYPXo03Nzc4OTkhE6dOuHWrVsF6um6J2n79u1o3rw5HB0d4eTkhA4dOuD8+fNadcLCwqBQKHD79m106dIFCoUCbm5uGDt2LPLy8gA8uzfHzc0NADB58mRIJJIC90XpIy8vD59//jk8PT3h6OiITp06ITExsUC99evXo0GDBnBwcEC5cuXQp08f3L59u0C933//XXN+zs7O6Ny5My5evKhV59GjRxg1ahQqVqwImUwGd3d3tG3bFidPngTw7PfLtm3bcPPmTc15VaxYUXPe/74nSZ/PK9/9+/fxwQcfQKlUwtnZGaGhoTh9+jTvczIBjiSRwbp3745KlSohMjISJ0+exPfffw93d3fMnDkTALB48WLUqlULnTp1gp2dHbZs2YKhQ4dCrVZj2LBhhbbp4eGBoKAgrFu3DuHh4Vr71q5dC1tbW7z33nsAng3fBwUF4fbt2/joo4/g4+ODw4cPY8KECUhOTjZ4jvDDhw/x9ttvo3v37ujZsyfWrVuHIUOGQCqVon///gCA9PR0fP/99+jZsycGDRqER48eYfny5QgJCcF///tf1K1bFxKJBH369MGsWbPw4MEDuLq6ao6xZcsWpKeno0+fPgCeXR3s1KkTDh06hA8//BA1atTA2bNnMXfuXFy6dAmbNm0CAJw/fx7vvPMOAgICMGXKFMhkMly5cgWxsbEGnSMREZnOqVOn0K5dO5QvXx6TJ09GXl4epkyZoulEPO/333/HunXrMHz4cJQrV07z4/ubb75Bp06d0Lt3b2RnZ2PNmjV47733sHXrVnTo0EHz/oEDB2LVqlXo1asXmjRpgt9//11rf1F+/PFHhIaGIiQkBDNnzsSTJ0+wePFiNGvWDKdOndLEAjzrvISEhKBRo0b4+uuvsWfPHsyePRtVqlTBkCFD4ObmhsWLF2PIkCF499130bVrVwBAQECAQZ/dtGnTIJFI8Omnn+Lu3buYN28e2rRpg7i4ODg4OAB41uHr168f3njjDURGRiIlJQXffPMNYmNjcerUKTg7OwMA9uzZg/bt26Ny5cqIiIjA06dP8e2336Jp06Y4efKk5vwGDx6MDRs2YPjw4ahZsybu37+PQ4cO4eLFi6hfvz6++OILpKWl4datW5g7dy4AQKFQFHkeL/q8gGe/DTp27Ij//ve/GDJkCPz9/fHrr78iNDTUoM+MjEQQ6Sk8PFwAEP3799cqf/fdd0XZsmU1r588eVLgvSEhIaJy5cpaZUFBQSIoKEjzeunSpQKAOHv2rFa9mjVriuDgYM3rqVOnCkdHR3Hp0iWtep999pmwtbUVCQkJep9TUFCQACBmz56tKcvKyhJ169YV7u7uIjs7WwghRG5ursjKytJ678OHD4WHh4fW5xEfHy8AiMWLF2vV7dSpk6hYsaJQq9VCCCF+/PFHYWNjIw4ePKhVb8mSJQKAiI2NFUIIMXfuXAFA3Lt3T+9zIiIi89KxY0dRpkwZcfv2bU3Z5cuXhZ2dnXj+pxgAYWNjI86fP1+gjX/n1uzsbFG7dm2t/BgXFycAiKFDh2rV7dWrlwAgwsPDNWVRUVECgLh+/boQQohHjx4JZ2dnMWjQIK333rlzR6hUKq3y0NBQAUBMmTJFq269evVEgwYNNK/v3btX4Lj62rdvnwAgXnvtNZGenq4pX7dunQAgvvnmG83n4O7uLmrXri2ePn2qqbd161YBQEyaNElTlp/b79+/ryk7ffq0sLGxEX379tWUqVQqMWzYsCLj69Chg/D19S1Qfv36dQFAREVFacr0/bx+/vlnAUDMmzdPU5aXlyeCg4MLtEnFj9PtyGCDBw/Wet28eXPcv38f6enpAKC5sgMAaWlp+PvvvxEUFIRr164hLS1NZ7tdu3aFnZ0d1q5dqyk7d+4cLly4gB49emjK1q9fj+bNm8PFxQV///23ZmvTpg3y8vLwxx9/GHQ+dnZ2WtPgpFIpPvroI9y9excnTpwA8Gzudv49VGq1Gg8ePEBubi4aNmyoGX4HgGrVqqFRo0ZYvXq1puzBgwfYvn07evfurZlWsX79etSoUQP+/v5a5xAcHAwAmml8+Ve/fv3115eeSkhERKaTl5eHPXv2oEuXLvDy8tKU+/n5oX379gXqBwUFoWbNmgXKn8+tDx8+RFpaGpo3b66Vg3777TcAwMiRI7Xe++/FBQqze/dupKamomfPnlp5ydbWFo0aNdKaXp6vsN8D165de+GxDNG3b184OTlpXv/nP/9B+fLlNed6/Phx3L17F0OHDtW6F6hDhw7w9/fHtm3bAADJycmIi4tDWFiY1kyPgIAAtG3bVtMe8Cz3/vnnn0hKSjLqubzo89qxYwfs7e0xaNAgTZmNjY3OWThUvNhJIoP5+PhovXZxcQHw7EsbAGJjY9GmTRvNfF83NzfNPTRFdZLKlSuH1q1bY926dZqytWvXws7OTjNMDwCXL1/Gjh074ObmprW1adMGAHD37l2DzsfLywuOjo5aZdWqVQMArbnaK1euREBAAORyOcqWLQs3Nzds27atwDn17dsXsbGxuHnzJoBnHaKcnBx88MEHWudw/vz5AueQf9z8c+jRoweaNm2KgQMHwsPDA++//z7WrVvHDhMRkYW4e/cunj59Cj8/vwL7CiurVKlSoe1s3boVjRs3hlwuh6urq2Y62/M56ObNm7CxsUGVKlW03lu9evUXxnn58mUAQHBwcIHctGvXrgK5VS6XF5gu6OLiovktYCxVq1bVei2RSODn56fJz/m5trBz9Pf31+wvql6NGjXw999/4/HjxwCAWbNm4dy5c/D29sabb76JiIiIV+786fN53bx5E+XLl0eZMmW06hX274SKH+9JIoPpWg1HCIGrV6+idevW8Pf3x5w5c+Dt7Q2pVIrffvsNc+fOfeGP+/fffx/9+vVDXFwc6tati3Xr1qF169YoV66cpo5arUbbtm0xfvz4QtvI72gY06pVqxAWFoYuXbpg3LhxcHd3h62tLSIjI3H16tUC5zB69GisXr0an3/+OVatWoWGDRtqfTGr1WrUqVMHc+bMKfR43t7eAJ5dOfzjjz+wb98+bNu2DTt27MDatWsRHByMXbt2cWUiIiIr8/yIUb6DBw+iU6dOaNGiBRYtWoTy5cvD3t4eUVFRiImJMcpx8/Pzjz/+CE9PzwL77ey0fzJac/7p3r07mjdvjo0bN2LXrl346quvMHPmTPzyyy+Fjv7pw5o/L2vFThIZ1ZYtW5CVlYXNmzdrjTgVNkxfmC5duuCjjz7STLm7dOkSJkyYoFWnSpUqyMjI0IwcvaqkpCQ8fvxYazTp0qVLAKC5iXPDhg2oXLkyfvnlF62ViP69yAQAuLq6okOHDli9ejV69+6N2NjYAotJVKlSBadPn0br1q212iuMjY0NWrdujdatW2POnDmYPn06vvjiC+zbt89onwERERUPd3d3yOVyXLlypcC+wsoK8/PPP0Mul2Pnzp1azzWKiorSqufr6wu1Wo2rV69qXZiLj49/4THyR5/c3d2NlltelN/0kT/ClU8IgStXrmgWgPD19QXw7Bzzp6zni4+P1+x/vt6//fXXXyhXrpzW74Dy5ctj6NChGDp0KO7evYv69etj2rRpmk6SMc7t33x9fbFv3z48efJEazRJ338nZFycbkdGlX+lRAihKUtLSyvwRa6Ls7MzQkJCsG7dOqxZswZSqRRdunTRqtO9e3ccOXIEO3fuLPD+1NRU5ObmGhRzbm4uli5dqnmdnZ2NpUuXws3NDQ0aNNB5Xn/++SeOHDlSaJsffPABLly4gHHjxsHW1hbvv/9+gXO4ffs2li1bVuC9T58+1Qz5P3jwoMD+unXrAkCBpcKJiMj82Nraok2bNti0aZPWPS5XrlzB9u3b9W5DIpFoLRd948YNzUqo+fJ/wM+fP1+rXJ9VX0NCQqBUKjF9+nTk5OQU2H/v3j29Yn1e/g/91NRUg9+b74cffsCjR480rzds2IDk5GTNuTZs2BDu7u5YsmSJVl7cvn07Ll68qFnZr3z58qhbty5WrlypFc+5c+ewa9cuvP322wCe3UP272n07u7u8PLy0mrf0dGxyFsIXkZISAhycnK0fhuo1WosXLjQqMch/XAkiYzqrbfeglQqRceOHfHRRx8hIyMDy5Ytg7u7O5KTk/Vqo0ePHujTpw8WLVqEkJAQzeIF+caNG4fNmzfjnXfeQVhYGBo0aIDHjx/j7Nmz2LBhA27cuKE1Pe9FvLy8MHPmTNy4cQPVqlXD2rVrERcXh++++07zxOx33nkHv/zyC95991106NAB169fx5IlS1CzZk1kZGQUaLNDhw4oW7Ys1q9fj/bt28Pd3V1r/wcffIB169Zh8ODB2LdvH5o2bYq8vDz89ddfWLduHXbu3ImGDRtiypQp+OOPP9ChQwf4+vri7t27WLRoESpUqIBmzZrpfY5ERGQ6ERER2LVrF5o2bYohQ4YgLy8PCxYsQO3atREXF/fC93fo0AFz5sxBu3bt0KtXL9y9excLFy6En58fzpw5o6lXt25d9OzZE4sWLUJaWhqaNGmCvXv36jUSoVQqsXjxYnzwwQeoX78+3n//fbi5uSEhIQHbtm1D06ZNtZ5XqA8HBwfUrFkTa9euRbVq1eDq6oratWujdu3aerfh6uqKZs2aoV+/fkhJScG8efPg5+enWdzA3t4eM2fORL9+/RAUFISePXtqlgCvWLEiRo8erWnrq6++Qvv27REYGIgBAwZolgBXqVSa5zc9evQIFSpUwH/+8x+8/vrrUCgU2LNnD44dO4bZs2dr2mrQoAHWrl2LTz75BG+88QYUCgU6duxo0Ofzb126dMGbb76JMWPG4MqVK/D398fmzZs1F0yLY/SKimDaxfXIkuQvAf7v5aj/vYzo5s2bRUBAgJDL5aJixYpi5syZYsWKFVp1hCi4BHi+9PR04eDgIACIVatWFRrLo0ePxIQJE4Sfn5+QSqWiXLlyokmTJuLrr7/WLNutj6CgIFGrVi1x/PhxERgYKORyufD19RULFizQqqdWq8X06dOFr6+vkMlkol69emLr1q0iNDS00CVAhRBi6NChAoCIiYkpdH92draYOXOmqFWrlpDJZMLFxUU0aNBATJ48WaSlpQkhhNi7d6/o3Lmz8PLyElKpVHh5eYmePXsWWP6ciIjM2969e0W9evWEVCoVVapUEd9//70YM2aMkMvlmjoAdC49vXz5clG1alUhk8mEv7+/iIqK0uTl5z19+lSMHDlSlC1bVjg6OoqOHTuKxMTEFy4Bnm/fvn0iJCREqFQqIZfLRZUqVURYWJg4fvy4pk5oaKhwdHQsEGNh8Rw+fFg0aNBASKVSg5YDz18C/KeffhITJkwQ7u7uwsHBQXTo0EHcvHmzQP21a9eKevXqCZlMJlxdXUXv3r3FrVu3CtTbs2ePaNq0qXBwcBBKpVJ07NhRXLhwQbM/KytLjBs3Trz++uvCyclJODo6itdff10sWrRIq52MjAzRq1cv4ezsLABofgvoWgJc38/r3r17olevXsLJyUmoVCoRFhYmYmNjBQCxZs0avT47Mg6JEM/NHyIioxk9ejSWL1+OO3fuFFiphoiIqEuXLjh//nyB+26Inrdp0ya8++67OHToEJo2bWrqcEoN3pNEVAwyMzOxatUqdOvWjR0kIiLC06dPtV5fvnwZv/32G1q2bGmagMgs/fvfSV5eHr799lsolUrUr1/fRFGVTrwniazSgwcPkJ2drXO/ra1tgecVGMPdu3exZ88ebNiwAffv38fHH39s9GMQEZHlqVy5MsLCwlC5cmXcvHkTixcvhlQq1fk4C2uVnZ1d6KJEz1OpVIUuhV4ajBgxAk+fPkVgYCCysrLwyy+/4PDhw5g+fXqp/UxMxtTz/YiKQ1BQkACgc9N1H9Gryp9D7e7uLr799ttiOQYREVmesLAwzX2tSqVShISEiBMnTpg6rBKXnyeL2p6/n6e0Wb16tahfv75QKpVCKpWKmjVr8vfEv+Tm5or/+7//ExUrVhRyuVxUrlxZTJkyRajVak0dtVotJk6cKDw9PYVcLhetW7c2+H5u3pNEVunEiRNFPvXbwcGB83qJiIhK2MOHD3HixIki69SqVQvly5cvoYjI0kyfPh1z5szBypUrUatWLRw/fhz9+vXDtGnTMHLkSADAzJkzERkZiZUrV6JSpUqYOHEizp49iwsXLkAul+t1HHaSiIiIiIjIIrzzzjvw8PDA8uXLNWXdunWDg4MDVq1aBSEEvLy8MGbMGIwdOxbAs2d2enh4IDo6usCzK3XhPUklTK1WIykpCU5OTlzvnkodIQQePXoELy8v2NgYf92YzMzMIu9FAwCpVKr3VSQiKh2Ym6m0K878rE9uFkIU+H9PJpNBJpMVqNukSRN89913uHTpEqpVq4bTp0/j0KFDmDNnDgDg+vXruHPnDtq0aaN5j0qlQqNGjXDkyBF2ksxVUlISvL29TR0GkUklJiaiQoUKRm0zMzMTlXwVuHM3r8h6np6euH79OjtKRKTB3Ez0jLHzs765WaFQICMjQ6ssPDxc85Df53322WdIT0+Hv78/bG1tkZeXh2nTpqF3794AgDt37gAAPDw8tN7n4eGh2acPdpJKmJOTEwDg5smKUCq4ArspvFutjqlDKLVykYND+E3z/4ExZWdn487dPFw/4QulU+H/b6U/UqNSg5vIzs5mJ4mINJibTY+52bSKKz8bkpsTExOhVCo15YWNIgHAunXrsHr1asTExKBWrVqIi4vDqFGj4OXlhdDQUKPFzk5SCcsfSlQqbHT+Y6HiZSexN3UIpdf/7oAszuksDgoBB0Xht1rm8BZMIioEc7PpMTebWDHnZ31ys1Kp1Ook6TJu3Dh89tlnmmlzderUwc2bNxEZGYnQ0FB4enoCAFJSUrQWAElJSUHdunX1jpnfBERkVdQv+I+IiIhKljFz85MnTwrcN2Vrawu1+lk7lSpVgqenJ/bu3avZn56ejj///BOBgYF6H4cjSURkVfKEQJ6OESNd5URERFR8jJmbO3bsiGnTpsHHxwe1atXCqVOnMGfOHPTv3x/As9GwUaNG4csvv0TVqlU1S4B7eXmhS5cueh+HnSQisiq5UCOniH1ERERUsoyZm7/99ltMnDgRQ4cOxd27d+Hl5YWPPvoIkyZN0tQZP348Hj9+jA8//BCpqalo1qwZduzYYdD9yOwkEZFVUUNAjcKvSukqJyIiouJjzNzs5OSEefPmYd68eTrrSCQSTJkyBVOmTDGo7eexk0REVoXT7YiIiMyLJeZmdpKIyKrkQCBHx1UpXeVERERUfCwxN7OTRERWJU8823TtIyIiopJlibmZnSQisirq/2269hEREVHJssTczE4SEVmVXCFBjij8YXi5OsqJiIio+FhibmYniYisSh4kyEPhX7i6yomIiKj4WGJuZieJiKyKJX4RExERWTNLzM02pg6AiMiYcoRNkZsh8vLyMHHiRFSqVAkODg6oUqUKpk6dCvHccqVCCEyaNAnly5eHg4MD2rRpg8uXLxv7tIiIiCyWMXNzSTHPqIiIXlIebIrcDDFz5kwsXrwYCxYswMWLFzFz5kzMmjUL3377rabOrFmzMH/+fCxZsgR//vknHB0dERISgszMTGOfGhERkUUyZm4uKZxuR0RWRQgJ1DpuAhUG3hx6+PBhdO7cGR06dAAAVKxYET/99BP++9///q89gXnz5uH//u//0LlzZwDADz/8AA8PD2zatAnvv//+K5wJERGRdTBmbi4p5tl1IyJ6SdnCtsgNANLT07W2rKysQttq0qQJ9u7di0uXLgEATp8+jUOHDqF9+/YAgOvXr+POnTto06aN5j0qlQqNGjXCkSNHivlMiYiILIM+udnccCSJiKyKGhKodVz/Uf/vqd7e3t5a5eHh4YiIiChQ/7PPPkN6ejr8/f1ha2uLvLw8TJs2Db179wYA3LlzBwDg4eGh9T4PDw/NPiIiotJOn9xsbthJIiKros8KOomJiVAqlZpymUxWaP1169Zh9erViImJQa1atRAXF4dRo0bBy8sLoaGhxg+eiIjIClni6nbsJBGRVckRtsjRMXSf87+LVUqlUquTpMu4cePw2Wefae4tqlOnDm7evInIyEiEhobC09MTAJCSkoLy5ctr3peSkoK6deu+2okQERFZCX1ys7nhPUlEZFXURayeo2uoX5cnT57Axkb7Pba2tlCr1QCASpUqwdPTE3v37tXsT09Px59//onAwMBXPxkiIiIrYMzcXFI4kkREViVP2CBPxzMX8oRhl6s6duyIadOmwcfHB7Vq1cKpU6cwZ84c9O/fHwAgkUgwatQofPnll6hatSoqVaqEiRMnwsvLC126dHnVUyEiIrIKxszNJYWdJCKyKsYc0v/2228xceJEDB06FHfv3oWXlxc++ugjTJo0SVNn/PjxePz4MT788EOkpqaiWbNm2LFjB+Ry+aucBhERkdWwxOl27CQRkVUp6sF0eQauoOPk5IR58+Zh3rx5OutIJBJMmTIFU6ZMMahtIiKi0sKYubmksJNERFZFLWyg1jGkrzbTIX0iIiJrZom5mZ0kIrIqObDR+WC6HDO9WkVERGTNLDE3s5NERFZFXcRKOea6gg4REZE1s8TcbJ5RERG9pPwVdHRtREREVLKMmZsrVqwIiURSYBs2bBgAIDMzE8OGDUPZsmWhUCjQrVs3pKSkGBwzfzEQkVXJX0FH10ZEREQly5i5+dixY0hOTtZsu3fvBgC89957AIDRo0djy5YtWL9+PQ4cOICkpCR07drV4Jg53Y6IrErRK+jwuhAREVFJM2ZudnNz03o9Y8YMVKlSBUFBQUhLS8Py5csRExOD4OBgAEBUVBRq1KiBo0ePonHjxnofh78YiMiqqIWkyI2IiIhKlj65OT09XWvLysp6YbvZ2dlYtWoV+vfvD4lEghMnTiAnJwdt2rTR1PH394ePjw+OHDliUMzsJBGRVckVdsjRseUKDp4TERGVNH1ys7e3N1QqlWaLjIx8YbubNm1CamoqwsLCAAB37tyBVCqFs7OzVj0PDw/cuXPHoJj5i4GIrEoeJMhD4SNGusqJiIio+OiTmxMTE6FUKjXlMpnshe0uX74c7du3h5eXl3ECfQ47SURkVYp+YB0Hz4mIiEqaPrlZqVRqdZJe5ObNm9izZw9++eUXTZmnpyeys7ORmpqqNZqUkpICT09Pg2LmLwYisio5wqaIFXT4lUdERFTSiiM3R0VFwd3dHR06dNCUNWjQAPb29ti7d6+mLD4+HgkJCQgMDDSofY4kEZFVKeqZC3xOEhERUckzdm5Wq9WIiopCaGgo7Oz+6c6oVCoMGDAAn3zyCVxdXaFUKjFixAgEBgYatLIdwE4SEVkZAQnUOuY9C96TREREVOKMnZv37NmDhIQE9O/fv8C+uXPnwsbGBt26dUNWVhZCQkKwaNEig4/BThIRWZUctS1s1IU/mC5HrS7haIiIiMjYufmtt96CEKLQfXK5HAsXLsTChQsNbvd57CQRkVXhw2SJiIjMiyXmZnaSiMiqFPXQWD5MloiIqORZYm5mJ4mIrEqOsIWN0DGkLzjdjoiIqKRZYm5mJ4mIrIolXq0iIiKyZpaYm0tFJ2n//v1o1aoVHj58qPVgqX+rWLEiRo0ahVGjRpVYbOYoLw9YNdsTe392wcN79ijrkYO23R+g16gUSP737zjEq26h7x34f7fx3tB7JReslardKAPvDb2HqnWeoKxnLiL6V8SRHSrN/j5j7qBl51S4eeUgJ1uCK2cdEDXDE/GnHE0YtXkQRTywTnAJcCKzwdxsOH3ysxDAD195YkdMWWSk26Jmw8cYOSMRr1XONm3wVqDH8BQ0fTsN3n5ZyM60wYXjZbB8WnncuirX1LGXqfFheBJadkqFvUzgxH4nfDvhNaT+bW/CyE3PEnOzSaMKCwtDly5dCpTv378fEokEqampxXLc6OjoIr+QS7t1C92xdWU5DJt2G8sO/IUBXyRh/SJ3/Lq8nKbOT3HntLZP5iRAIhFo1iHNhJFbD3kZNa6dl2PB5xUK3X/7mgwLv3gNHwVXw5gufriTKEXkT9egcs0t4UjNTx4kRW5EVDTmZvOlT35et9Adv65ww4gZifhm6yXIy6jxea8qyM7k99+rCgh8jC3R5TDqnaqY8H5l2NoJTP/pGmQOeZo6gyOS0LhtOr78yBdju1aBq0cOJi2/YbqgzYQl5uZSMZJEhrlw3BGBIWlo1CYdAODpnY19mx4hPq6Mpo6ru/aP8SM7VXi9aQbK+/JKlTEc36fE8X1Knfv3bXTRev1dhBfa93qASjWfIu6QU3GHZ9Zy1TY6lxnNVecVWk5EZAlelJ+FADZ974aeH99Bk3bP6oyffxM9Xq+NwztUaNkl1VShW4UvelfWej17lA/WnTuPqgFPce5PBco45SGk5wPMGOaD07HPcvGcT7zx/R/x8K//GH+dLL2zPSwxN5vn+Na/HDp0CM2bN4eDgwO8vb0xcuRIPH78WLP/xx9/RMOGDeHk5ARPT0/06tULd+/eLbSt/fv3o1+/fkhLS4NEIoFEIkFERIRm/5MnT9C/f384OTnBx8cH3333nWZfcHAwhg8frtXevXv3IJVKsXfvXuOetAnVbPgYcYeccOuqDABw9bwc5//riDeCHxVa/+E9O/x3rxIh798vyTDpf+zs1Xi7z31kpNng2gUHU4djcur/PbBO10ZExsHcXPJelJ/vJEjx4K496jfP0LzHUamGf70nuHii9P5ALy6Oymc/7h+lPvvxXzXgCeylAqcO/nOxMvGKHCm37FGjwROTxGguLDE3m30n6erVq2jXrh26deuGM2fOYO3atTh06JDWF2JOTg6mTp2K06dPY9OmTbhx4wbCwsIKba9JkyaYN28elEolkpOTkZycjLFjx2r2z549Gw0bNsSpU6cwdOhQDBkyBPHx8QCAgQMHIiYmBllZWZr6q1atwmuvvYbg4OBCj5eVlYX09HStzdz1GH4XQZ0fYmALf7zt8zqGvVUd7w66h+CuDwutv3udKxwUeWj2NqfalaRGbdKx6fJZbLl+Fu8OuocJ71dB+gMODucJSZEbEb065mbTeFF+fnD3WQ5wdsvRep+zW45mHxmHRCIwePJtnPtvGdyMf3aB0tU9F9lZEjxO1x4xSb1nB1f3nMKaKTUsMTebvJO0detWKBQKra19+/aa/ZGRkejduzdGjRqFqlWrokmTJpg/fz5++OEHZGZmAgD69++P9u3bo3LlymjcuDHmz5+P7du3IyMjo8DxpFIpVCoVJBIJPD094enpCYVCodn/9ttvY+jQofDz88Onn36KcuXKYd++fQCArl27AgB+/fVXTf3o6GiEhYVBIin8LzgyMhIqlUqzeXt7v/qHVsz+2OyM339xwWcLb2LhzniM/SYBG5a4Y/c6l0Lr71zjiuB3H0IqL/zJx1Q84mIdMbRtNYzu5Ifj+5X4YulNqMqW7i9hAMgVtshV69h0LD9KRNqYm82TofmZis/w6bfh65+JyCG+pg7FIlhibjZ5J6lVq1aIi4vT2r7//nvN/tOnTyM6OlrrizokJARqtRrXr18HAJw4cQIdO3aEj48PnJycEBQUBABISEgwOJ6AgADNn/O/rPOnB8jlcnzwwQdYsWIFAODkyZM4d+6czitjADBhwgSkpaVptsTERINjKmnLpnqhx/C7aNklFZVqZKLNfx6i66B7WPOtR4G6Z/90xK2rcrTrxal2JS3rqS2Sbsjw10lHzB3jjbxcoF3PB6YOy+REEcP5wkyH9InMDXOzeXpRfs6/Xzj1nvZKaqn37AvcS0wvb9i0W2jUNh3j/1MFfydLNeUP7tpBKhOaaXj5nN1y8eBuKV/dzgJzs8nHXh0dHeHn56dVduvWLc2fMzIy8NFHH2HkyJEF3uvj44PHjx8jJCQEISEhWL16Ndzc3JCQkICQkBBkZxu+iIC9vfY/YolEArX6n4dcDRw4EHXr1sWtW7cQFRWF4OBg+Prqvoogk8kgk8kMjsOUsjJtILHRHhWysRUQhQwU7fypLKoGPEGVWpklFB3pIrEB7GUczbPEZzEQmRvmZvP0ovzs6ZMNV/ccnDqkQJXaTwEAjx/Z4K9TZfBO379LOlwrJDBs2m00aZeGcf/xQ0qi9r+hy2fKICdbgnrNHuHQb84AgApVMuFRIQcXT5QppL3SwxJzs8k7SS9Sv359XLhwocCXdb6zZ8/i/v37mDFjhma4/Pjx40W2KZVKkZf3citp1KlTBw0bNsSyZcsQExODBQsWvFQ75qxx23Ssme8B99dy4Fs9E1fPOeCXpe54618LMzx+ZIM/tqjwYXiSiSK1XvIyefCq9M8PCU/vbFSu9RSPUm2R/sAWvT6+iyO7lHiQYg+lay469fsb5TxzcHCLs+mCNhO5altIdK6gY55D+kSWhrnZNF6UnyUSoMvAe/jpGw+8VikLnj7ZWDmrPMp65KBJO943/KqGT7+NVu8+RES/SniaYQOX/9379fiRLbIzbfDkkS12/uSKDyOS8CjVDo8f2WDYtNu4cLxMqV7ZDrDM3Gz2naRPP/0UjRs3xvDhwzFw4EA4OjriwoUL2L17NxYsWAAfHx9IpVJ8++23GDx4MM6dO4epU6cW2WbFihWRkZGBvXv34vXXX0eZMmVQpoz+PfyBAwdi+PDhcHR0xLvvvvuqp2h2hn55CytnlceCCRWQet8OZT1y8PYHf6P36BStegd+dQGEBK26FL6gA728aq8/xVc/X9W8Hjz5WUd011oXzP+sAir4ZWHiezegdM3Do4e2uHS6DMa864ebl+S6miw1ilopx1xX0CGyNMzNpqFPfu4+7C4yn9jgm/HeyEi3Ra03HmPa6mu8b9gIOoY964x+/ctVrfKvR3lj9zpXAMCSCC+oBTBx2Q3YywSO73fCggmvlXis5sYSc7PZd5ICAgJw4MABfPHFF2jevDmEEKhSpQp69OgBAHBzc0N0dDQ+//xzzJ8/H/Xr18fXX3+NTp066WyzSZMmGDx4MHr06IH79+8jPDxca6nRF+nZsydGjRqFnj17Qi63vh+lZRRqDJlyG0Om3C6y3tt97uPtPrwXqTicOaJAiNfrOvdPHVix5IKxMJY4pE9kaZibTUOf/CyRAKHj7yB0/J0SjKx0KCov58vJssHCzytgoY6HwZdWlpibJUIUdqcJFeXGjRuoUqUKjh07hvr16xv03vT0dKhUKjy8VBlKJ5Ovm1EqhXjVNXUIpVauyMF+/Iq0tDQolboflvsy8v/fCtn+IewdpYXWyXmcjZ3tvyuW4xORaTE3WzbmZtMqrvxsybnZ7EeSzElOTg7u37+P//u//0Pjxo0N/hImouJniVeriOjlMTcTmT9LzM28XGKA2NhYlC9fHseOHcOSJUtMHQ4RFUJA95O9OWxOZH2Ym4nMnyXmZo4kGaBly5bg7EQi85artgHUhV//ydVRTkSWi7mZyPxZYm5mJ4mIrIolDukTERFZM0vMzewkEZFVscQvYiIiImtmibnZPMe3iIheUp6wKXIjIiKikmXs3Hz79m306dMHZcuWhYODA+rUqaP1wGohBCZNmoTy5cvDwcEBbdq0weXLlw06Bn8xEJFVyb9apWsjIiKikmXM3Pzw4UM0bdoU9vb22L59Oy5cuIDZs2fDxcVFU2fWrFmYP38+lixZgj///BOOjo4ICQlBZmam3sfhdDsisipCSCB0fOHqKiciIqLiY8zcPHPmTHh7eyMqKkpTVqlSpefaE5g3bx7+7//+D507dwYA/PDDD/Dw8MCmTZvw/vvv63UcjiQRkVXJU9sUuREREVHJ0ic3p6ena21ZWVmFtrV582Y0bNgQ7733Htzd3VGvXj0sW7ZMs//69eu4c+cO2rRpoylTqVRo1KgRjhw5onfM/MVARFZFFDGcz5EkIiKikqdPbvb29oZKpdJskZGRhbZ17do1LF68GFWrVsXOnTsxZMgQjBw5EitXrgQA3LlzBwDg4eGh9T4PDw/NPn3oNd1u8+bNejfYqVMnvesSERmbAKDrkSl8kgpZE+ZmIrIU+uTmxMREKJVKTblMJiu0vlqtRsOGDTF9+nQAQL169XDu3DksWbIEoaGhRotZr05Sly5d9GpMIpEgLy/vVeIhInolecIG0LFSzsuuoPPpp59i+/btePLkCfz8/BAVFYWGDRsCeDb3OTw8HMuWLUNqaiqaNm2qucJFVJyYm4nIUuiTm5VKpVYnSZfy5cujZs2aWmU1atTAzz//DADw9PQEAKSkpKB8+fKaOikpKahbt67eMev1i0GtVuu18UuYiEzNElfQIXoZzM1EZCmMmZubNm2K+Ph4rbJLly7B19cXwLNFHDw9PbF3717N/vT0dPz5558IDAzU+zivtLpdZmYm5HL5qzRBRGRUQhQxpG/gfLuSWkGHyJiYm4nI3BgzN48ePRpNmjTB9OnT0b17d/z3v//Fd999h++++w7As9HzUaNG4csvv0TVqlVRqVIlTJw4EV5eXnqPwAMvsXBDXl4epk6ditdeew0KhQLXrl0DAEycOBHLly83tDkiIqNSq22K3ADzW0GH6FUxNxOROdMnN+vrjTfewMaNG/HTTz+hdu3amDp1KubNm4fevXtr6owfPx4jRozAhx9+iDfeeAMZGRnYsWOHQReQDO4kTZs2DdHR0Zg1axakUqmmvHbt2vj+++8NbY6IyKj0GdI3txV0iF4VczMRmTNjP+j9nXfewdmzZ5GZmYmLFy9i0KBBWvslEgmmTJmCO3fuIDMzE3v27EG1atUMOobB0+1++OEHfPfdd2jdujUGDx6sKX/99dfx119/GdocEZFR6TOkb24r6BC9KuZmIjJnxpxuV1IMHkm6ffs2/Pz8CpSr1Wrk5OQYJSgiopelVkuKGNJ/drUqfwWd/E1XJ0nXCjoJCQkAtFfQeV5KSopmH1FJYG4mInOmT242NwZ3kmrWrImDBw8WKN+wYQPq1atnlKCIiF6WeMFmiJJaQYfoVTE3E5E5M2ZuLikGT7ebNGkSQkNDcfv2bajVavzyyy+Ij4/HDz/8gK1btxZHjEREehPPPb27sH2GKKkVdIheFXMzEZkzY+bmkmLwSFLnzp2xZcsW7NmzB46Ojpg0aRIuXryILVu2oG3btsURIxGR/tQSCB0bDBzSL6kVdIheFXMzEZk1I+bmkvJSz0lq3rw5du/ebexYiIhembFvDn3nnXfwzjvv6Nyfv4LOlClTDG+cyIiYm4nIXFniwg0v/TDZ48eP4+LFiwCezYVu0KCB0YIiInpZljikT2QszM1EZI4sMTcb3Em6desWevbsidjYWDg7OwMAUlNT0aRJE6xZswYVKlQwdoxERHrTDN/r2EdkjZibicicWWJuNviepIEDByInJwcXL17EgwcP8ODBA1y8eBFqtRoDBw4sjhiJiPRniUvoEL0i5mYiMmsWmJsNHkk6cOAADh8+jOrVq2vKqlevjm+//RbNmzc3anBERIayxCF9olfF3ExE5swSc7PBnSRvb+9CH0yXl5cHLy8vowRFRPSyhChiSN9Mv4iJXhVzMxGZM0vMzQZPt/vqq68wYsQIHD9+XFN2/PhxfPzxx/j666+NGhwRkcEscEif6FUxNxORWbPA3KzXSJKLiwskkn96eY8fP0ajRo1gZ/fs7bm5ubCzs0P//v35AEUiMjHJ/zZd+4isA3MzEVkOy8vNenWS5s2bV8xhEBEZifp/m659RFaCuZmILIYF5ma9OkmhoaHFHQcRkXEIybNN1z4iK8HcTEQWwwJz80s/TBYAMjMzkZ2drVWmVCpfKSAioldhiU/1JjIm5mYiMjeWmJsNXrjh8ePHGD58ONzd3eHo6AgXFxetjYjIpNSSojciK8TcTERmzQJzs8GdpPHjx+P333/H4sWLIZPJ8P3332Py5Mnw8vLCDz/8UBwxEhHpTSKK3oisEXMzEZkzS8zNBk+327JlC3744Qe0bNkS/fr1Q/PmzeHn5wdfX1+sXr0avXv3Lo44iYj0U9Ryomb6RUz0qpibicisWWBuNngk6cGDB6hcuTKAZ3OcHzx4AABo1qwZ/vjjD+NGR0RkKAsc0id6VczNRGTWLDA3G9xJqly5Mq5fvw4A8Pf3x7p16wA8u4rl7Oxs1OCIiAxmgQ+sI3pVzM1EZNYsMDcb3Enq168fTp8+DQD47LPPsHDhQsjlcowePRrjxo0zeoBERAaxwC9iolfF3ExEZs2IuTkiIgISiURr8/f31+zPzMzEsGHDULZsWSgUCnTr1g0pKSkGh2zwPUmjR4/W/LlNmzb466+/cOLECfj5+SEgIMDgAIiIjEmilkCiY+heVzmRpWNuJiJzZuzcXKtWLezZs0fz2s7uny7N6NGjsW3bNqxfvx4qlQrDhw9H165dERsba9AxXuk5SQDg6+sLX1/fV22GiMg4LPDmUCJjY24mIrNi5NxsZ2cHT0/PAuVpaWlYvnw5YmJiEBwcDACIiopCjRo1cPToUTRu3Fj/Y+hTaf78+Xo3OHLkSL3rlmYhY/vBzl5u6jBKJaeaD00dQqkl8rKAv0wdBZF1YG42vg5D+8LOjrnZFGT2Z0wdQqkmERIgx7QxpKena72WyWSQyWSF1r18+TK8vLwgl8sRGBiIyMhI+Pj44MSJE8jJyUGbNm00df39/eHj44MjR44Yv5M0d+5cvRqTSCT8IiYik5KIIob0BafbkfVgbiYiS6FPbvb29tYqDw8PR0RERIH6jRo1QnR0NKpXr47k5GRMnjwZzZs3x7lz53Dnzh1IpdICC9Z4eHjgzp07BsWsVycpf8UcIiKzx+l2VEowNxORxdAjNycmJkKpVGqKdY0itW/fXvPngIAANGrUCL6+vli3bh0cHByMFPBLrG5HRGTWuLodERGRedEjNyuVSq1NVyfp35ydnVGtWjVcuXIFnp6eyM7ORmpqqladlJSUQu9hKgo7SURkVSTqojciIiIqWcWZmzMyMnD16lWUL18eDRo0gL29Pfbu3avZHx8fj4SEBAQGBhrU7iuvbkdEZFY43Y6IiMi8GDE3jx07Fh07doSvry+SkpIQHh4OW1tb9OzZEyqVCgMGDMAnn3wCV1dXKJVKjBgxAoGBgQYt2gCwk0REVkYinm269hEREVHJMmZuvnXrFnr27In79+/Dzc0NzZo1w9GjR+Hm5gbg2aI2NjY26NatG7KyshASEoJFixYZHDM7SURkXdSSZ5uufURERFSyjJib16xZU+R+uVyOhQsXYuHChQa1+28vdU/SwYMH0adPHwQGBuL27dsAgB9//BGHDh16pWCIiF5V/tUqXRuRtWJuJiJzZYm52eBO0s8//4yQkBA4ODjg1KlTyMrKAvDsCbfTp083eoBERAbh6nZUCjE3E5FZs8DcbHAn6csvv8SSJUuwbNky2Nvba8qbNm2KkydPGjU4IiKDFbV6Dle3IyvF3ExEZs0Cc7PB9yTFx8ejRYsWBcpVKlWBNcmJiEocV7ejUoi5mYjMmgXmZoNHkjw9PXHlypUC5YcOHULlypWNEhQR0cuyxHnPRK+KuZmIzJkl5maDO0mDBg3Cxx9/jD///BMSiQRJSUlYvXo1xo4diyFDhhRHjERE+rPAec9Er4q5mYjMmgXmZoOn23322WdQq9Vo3bo1njx5ghYtWkAmk2Hs2LEYMWJEccRIRKQ3PieJSiPmZiIyZ5aYmw3uJEkkEnzxxRcYN24crly5goyMDNSsWRMKhaI44iMiMpyZfuESFRfmZiIyexaWm1/6YbJSqRQ1a9Y0ZixERK9Ms1qOjn1E1oy5mYjMkSXmZoM7Sa1atYJEovvJuL///vsrBURE9EoscAUdolfF3ExEZs0Cc7PBnaS6detqvc7JyUFcXBzOnTuH0NBQY8VFRPRSLHHeM9GrYm4mInNmibnZ4E7S3LlzCy2PiIhARkbGKwdERPRKinownZkO6RO9KuZmIjJrFpibDV4CXJc+ffpgxYoVxmqOiOilWOKzGIiKC3MzEZkDS8zNL71ww78dOXIEcrncWM0REb0cC5z3TFRcmJuJyCxYYG42uJPUtWtXrddCCCQnJ+P48eOYOHGi0QIjInoZlriCDtGrYm4mInNmibnZ4Ol2KpVKa3N1dUXLli3x22+/ITw8vDhiJCLSXzE+1XvGjBmQSCQYNWqUpiwzMxPDhg1D2bJloVAo0K1bN6SkpLzagYgMxNxMRGatGHNzcTFoJCkvLw/9+vVDnTp14OLiUlwxERG9tOJaQefYsWNYunQpAgICtMpHjx6Nbdu2Yf369VCpVBg+fDi6du2K2NjYlz8YkQGYm4nI3Fni6nYGjSTZ2trirbfeQmpqajGFQ0T0itQv2F5CRkYGevfujWXLlmn9CE1LS8Py5csxZ84cBAcHo0GDBoiKisLhw4dx9OjRVz0TIr0wNxOR2SuG3FzcDJ5uV7t2bVy7dq04YiEiemWSF2wAkJ6errVlZWUV2eawYcPQoUMHtGnTRqv8xIkTyMnJ0Sr39/eHj48Pjhw5YrRzInoR5mYiMmf65GZzY3An6csvv8TYsWOxdetWJCcnF/ixQURkUnrMe/b29ta6fyMyMlJnc2vWrMHJkycLrXPnzh1IpVI4OztrlXt4eODOnTtGOR0ifTA3E5FZs+Z7kqZMmYIxY8bg7bffBgB06tQJEsk/fT8hBCQSCfLy8owfJRGRnvRZQScxMRFKpVJTLpPJCq2fmJiIjz/+GLt37+YyymSWmJuJyBJY4up2eneSJk+ejMGDB2Pfvn3FGQ8R0at7wVUppVKp1UnS5cSJE7h79y7q16+vKcvLy8Mff/yBBQsWYOfOncjOzkZqaqrWaFJKSgo8PT1fNnoivTE3E5HFKKYRoxkzZmDChAn4+OOPMW/ePADPVp4dM2YM1qxZg6ysLISEhGDRokXw8PDQu129O0lCPDuzoKAgwyInIipBxlxBp3Xr1jh79qxWWb9+/eDv749PP/0U3t7esLe3x969e9GtWzcAQHx8PBISEhAYGPgy4RMZhLmZiCyBJa48a9AS4M8P4RMRmSNjDuk7OTmhdu3aWmWOjo4oW7aspnzAgAH45JNP4OrqCqVSiREjRiAwMBCNGzd+mfCJDMbcTETmrjim2z2/8uyXX36pKc9feTYmJgbBwcEAgKioKNSoUQNHjx7VOz8b1EmqVq3aC7+MHzx4YEiTRETGVdRNoMUw1D937lzY2NigW7duWkP6RCWFuZmIzJ4eufnfi8zIZDKd9wwD2ivPPt9JetHKs8XSSZo8eTJUKpUhbyEiKlHF/cC6/fv3a72Wy+VYuHAhFi5c+OqNE70E5mYiMnf65GZvb2+t8vDwcERERBT6nvyVZ48dO1Zgn7FWnjWok/T+++/D3d3dkLcQEZWsoh5MZ6Yr6BC9CuZmIjJ7euRmc1t5Vu/nJHHOMxFZgvyrVbo2ImvC3ExElkCf3Jy/8mz+pquT9PzKs3Z2drCzs8OBAwcwf/582NnZwcPDQ7Py7PMMXXnW4NXtiIjMWgnfk0RkSszNRGQRjJibS2rlWb07SWo156kQkfmTqAUk6sK/cXWVE1kq5mYisgTGzM0ltfKsQfckERGZu+JeuIGIiIgMU9K52Rgrz7KTRETWhdPtiIiIzEsx5+biWHmWnSQisirF8cA6IiIienmWmJvZSSIiq8LpdkRERObFEnMzO0lEZF043Y6IiMi8WGBuZieJiKyL0L2CDrhcMhERUcmzwNzMThIVqkuzC+jS/AI8XR8BAK7fcUH09vr484IPnMpkYkCHE3jD/xY8XDKQmiHHwTMV8f3WN/A4U2riyK1D954X0aTZbVTwfoTsLFtcvFAWK5YF4PYtJwCAwikbfULPo36DO3Bzf4K0NBmOxL6GH6Nr48ljexNHb1qWOKRPRKSPTq0uolOri/AslwEAuHHbGT9srof/nvUGAHwSegj1ayahnPMTPM2yx/kr7li67g0k3nE2YdTWo8fQJDRt9xAVqmQiO9MGF04osGJGBdy65qCp077nXbTq/ABVaj+Go5Ma3erUw+N0/ty2xNxsY+oAzIFEIsGmTZv0qhsREYG6desWazzm4G6qI5b8+iYGzuqKQV+9i5OXvBD54S5U9HyAcqonKKt6jIUbG6Pv9PcwfVVLNKp5C5/1PmDqsK1G7YB72PqrHz4ZEYwvPm0BWzs1ps38AzJ5LgCgbNmnKFv2Kb5f+jqGDAzB3FlvouEbdzBqzDETR24GxAs2IrIIzM0F3XvgiGUb3sBHkztj8OTOOHXRC1+O3IOKXg8BAJdulMOs5c0R+nk3jJ8dAgD4auwO2JjrnfEWpk6jR9jygwdGd6mJCX2qw85eYNqPlyBzyNPUkTmocfyACmsXepkwUjNkgbm5VHSS7t27hyFDhsDHxwcymQyenp4ICQlBbGwsACA5ORnt27c3cZTm5fA5Xxy94INb91RIvOuMZVvexNMse9SqdBfXk10x8fu3cPicL5L+VuLkpdfw3ZY30KT2Tdja8IvYGCZNaIE9uyoi4aYK1685Y86sN+Hu8QRVqz5LhDdvqDBtchP896gX7iQrcDrOHStX1EajxsmwKeV/B5K8ojciMg/MzYY7ctoHf57xxu0UFW6lqLD8l4Z4mmmHmlXuAgC2HvDHmUvlkXLfCZdvlsOKXxrAo+xjzcgTvZr/C62O3RvK4eZlB1y/WAazx1SCR4VsVK3zRFNn0wpPrFtcHn+dcjRhpObHEnNzqRj/69atG7Kzs7Fy5UpUrlwZKSkp2Lt3L+7fvw8A8PT0NHGE5s1Gokar+tcgl+bg/HWPQuso5Nl4kilFnrpU9LtLnKNjDgDg0SPd0xkdHXPw5Ikd1KX878ASh/SJSiPm5ldjI1Ej6I3rkMtycf6qe4H9cmkO2jW7hKS7Trj7gD/Yi0MZp2e/7h+l2po4EvNnibnZ6jtJqampOHjwIPbv34+goCAAgK+vL958801NHYlEgo0bN6JLly4AgFu3bmHcuHHYuXMnsrKyUKNGDSxcuBCNGjUq0P7Vq1fRtm1bvP322/j2228hkUi09mdlZSErK0vzOj09vRjOsnhU9nqAxWM2QWqXh6dZ9vhi2Vu4ccelQD2VYyZC25/E5sP+JojS+kkkAh8NjcP5c2Vx84aq0DpKZRZ69rmI7dsql3B0ZkgI3TeBmunNoUSlDXPzy6tU4QEWfrEFUvtnuXnSgja4mfRPbu7c6gI+6n4MDvJcJCSrMO7rdsjN4494Y5NIBAaHJ+D8MQVuXipj6nDMnwXmZqu/5KxQKKBQKLBp0yatL0RdMjIyEBQUhNu3b2Pz5s04ffo0xo8fD7W64BSmM2fOoFmzZujVqxcWLFhQ4EsYACIjI6FSqTSbt7e3Uc6rJCSkqNA/shs++roLfj1UE198sB8VPR9q1Skjz8asIdtxI9kFK7Y1NFGk1m3oyJPwrZiGGV82LnS/Q5kcTJ52CAk3lVj9Q60Sjs785D+wTtdGRKbH3PzyEpNVGBj+LoZO7YRf9/njs4F/wNfrn9y856gfBkV0wceRbyPxjgrhQ3+HvV2uCSO2TsOm3kTFak8RObyKqUOxCJaYm62+k2RnZ4fo6GisXLkSzs7OaNq0KT7//HOcOXOm0PoxMTG4d+8eNm3ahGbNmsHPzw/du3dHYGCgVr3Dhw+jZcuWGDt2LL788kudx58wYQLS0tI0W2JiolHPrzjl5tni9t8qXEp0w9LNb+LK7bL4T8uzmv0Osmx8PXQ7nmRK8cWytpxqVwyGDD+JNxsl47OxLXH/74JXqhwccjA18iCePLXD1PAmyMvj30H+kL6ujYhMj7n55eXm2SLprhKXbpbD9xvewNUEV3Rre16z//FTKW6nqHDmUnlELAyGd/k0NG9w04QRW5+hU26iUetUjO/pj7/vcFVffVhibi4Vv6i6deuGpKQkbN68Ge3atcP+/ftRv359REdHF6gbFxeHevXqwdXVVWd7CQkJaNu2LSZNmoQxY8YUeWyZTAalUqm1WSqJREBq96y7X0aejTnDf0Nung0+WxqC7Fyrn7lZwgSGDD+JwGa3MWFcEFLuFJxP7lAmB1/O/AO5uTaYMrEpcnI4nQLAP0P6ujYiMgvMzcYhsRGwtyv8UrxEAkggYG9npnfGWxyBoVNuoknIQ3za0x8piTJTB2Q5LDA3l4pOEgDI5XK0bdsWEydOxOHDhxEWFobw8PAC9RwcHAp5tzY3Nze8+eab+OmnnyxqHrMhPur0X7xeJRmero9Q2esBPur0X9SrmoRdx/2edZCG/QYHaS5mrA6Cozwbrk5P4Or0hMuMGsnQkafQqk0CZk1vjKdP7OHikgkXl0xIpc8SnUOZHEyb+Qfk8jzM+7ohypTJ1dSxsTHPL5uSYolD+kSlFXOzYQb+5xgCqiXDo+wjVKrwAAP/cwx1qydjz5EqKO+Wjl4dTqOa799wd81ALb8UhA/9HVk5dvjzjOVMJzRnw768ieAu9zFzZGU8fWwLF7ccuLjlQCr7J7m4uOWgcs0n8Kr4bBppxepPUbnmEyhUpXvKoyXm5lJ7+b9mzZqFPn8hICAA33//PR48eKDzipWDgwO2bt2Kt99+GyEhIdi1axecnJyKOeKS5ax4ii/67kNZ5RM8zpTi6u2yGLPobRz/qwLqVk1CrUrPlhtdG7FG633vTeqJOw+s67MwhXc6XQUAzJqzX6t8zqw3sGdXRfhVfQj/Gg8AACt+3K5VJ6z327ibUnpXMrLEFXSI6Bnm5qK5OGViwqA/4Kp6gsdPpbiW6Irxs9vhxIXXUNb5MepUu4Nubc/ByTEbD9MdcCbeEyOmvYPURy/uZNKLdfzgHgDgq3XxWuWzx1TC7g3lAAAdet9Fn9FJ/+zb8FeBOqWRJeZmq+8k3b9/H++99x769++PgIAAODk54fjx45g1axY6d+5coH7Pnj0xffp0dOnSBZGRkShfvjxOnToFLy8vrbnPjo6O2LZtG9q3b4/27dtjx44dUCgUJXlqxWpmTJDOfXGXvdB8+IclGE3p83ab94rcf/a0+wvrlFpq8WzTtY+ITI65+eV8FdVc5777qY6YMDekBKMpfdr5vvHCOqvmvYZV814rgWgsjAXmZqufbqdQKNCoUSPMnTsXLVq0QO3atTFx4kQMGjQICxYsKFBfKpVi165dcHd3x9tvv406depgxowZsLUteL+HQqHA9u3bIYRAhw4d8Pjx45I4JSIqgkQUMaRvnt/DRKUOczNR6WKJuVkihJneLWWl0tPToVKp8GanqbCzl5s6nFLJ6a+HL65ExSI3Lwt7/5qNtLQ0o98onf//VtPWEbCzK/z/rdzcTMTujSiW4xOR5cr//mjSRvf3BxUv2e+Fr2xIJSNX5GBfznqj50dLzs1WP92OiEoXS5z3TEREZM0sMTezk0REVkWiFpDomN+sq5yIiIiKjyXmZnaSiMi6qP+36dpHREREJcsCczM7SURkVSRCQKLjVktd5URERFR8LDE3s5NERNbFApcZJSIismoWmJutfglwIipd8m8O1bURERFRyTJmbl68eDECAgKgVCqhVCoRGBiI7du3a/ZnZmZi2LBhKFu2LBQKBbp164aUlBSDY2YniYisixBFb0RERFSyjJibK1SogBkzZuDEiRM4fvw4goOD0blzZ5w/fx4AMHr0aGzZsgXr16/HgQMHkJSUhK5duxocMqfbEZFVkeQJSHRclpLksZNERERU0vTJzenp6VrlMpkMMpmsQP2OHTtqvZ42bRoWL16Mo0ePokKFCli+fDliYmIQHBwMAIiKikKNGjVw9OhRNG7cWO+YOZJERNZFvGAjIiKikqVHbvb29oZKpdJskZGRL2w2Ly8Pa9aswePHjxEYGIgTJ04gJycHbdq00dTx9/eHj48Pjhw5YlDIHEkiIqtiiSvoEBERWTN9cnNiYiKUSqWmvLBRpHxnz55FYGAgMjMzoVAosHHjRtSsWRNxcXGQSqVwdnbWqu/h4YE7d+4YFDM7SURkXdQC0DWtzkxX0CEiIrJqeuTm/IUY9FG9enXExcUhLS0NGzZsQGhoKA4cOGCsaAGwk0REVoYjSURERObF2LlZKpXCz88PANCgQQMcO3YM33zzDXr06IHs7GykpqZqjSalpKTA09PToGPwniQisi4CRaygY+rgiIiISqFizs1qtRpZWVlo0KAB7O3tsXfvXs2++Ph4JCQkIDAw0KA2OZJERNYlr4gVGri6HRERUckzYm6eMGEC2rdvDx8fHzx69AgxMTHYv38/du7cCZVKhQEDBuCTTz6Bq6srlEolRowYgcDAQINWtgPYSSIiK8PpdkRERObFmLn57t276Nu3L5KTk6FSqRAQEICdO3eibdu2AIC5c+fCxsYG3bp1Q1ZWFkJCQrBo0SKDY2YniYisS1EPpmMniYiIqOQZMTcvX768yP1yuRwLFy7EwoULDWr339hJIiLrolYDErXufURERFSyLDA3s5NERNZFDUBSxD4iIiIqWRaYm7m6HRFZlfx5z7o2Q0RGRuKNN96Ak5MT3N3d0aVLF8THx2vVyczMxLBhw1C2bFkoFAp069YNKSkpxjwlIiIii2bM3FxS2EkiIuuSpy56M8CBAwcwbNgwHD16FLt370ZOTg7eeustPH78WFNn9OjR2LJlC9avX48DBw4gKSkJXbt2NfZZERERWS4j5uaSwul2RGRdjHhz6I4dO7ReR0dHw93dHSdOnECLFi2QlpaG5cuXIyYmBsHBwQCAqKgo1KhRA0ePHjV4uVEiIiKrZIGLKnEkiYisjK6H1f3zjIb09HStLSsrS6+W09LSAACurq4AgBMnTiAnJwdt2rTR1PH394ePjw+OHDli3NMiIiKyWC/OzeaGnSQisi56DOl7e3tDpVJptsjIyBc2q1arMWrUKDRt2hS1a9cGANy5cwdSqRTOzs5adT08PHDnzh2jnxoREZFF4nQ7IiITE+pnm659ABITE6FUKjXFMpnshc0OGzYM586dw6FDh4wSJhERUamhR242N+wkEZF10WPes1Kp1Ookvcjw4cOxdetW/PHHH6hQoYKm3NPTE9nZ2UhNTdUaTUpJSYGnp+dLhU9ERGR1eE8SEZGJGXFIXwiB4cOHY+PGjfj9999RqVIlrf0NGjSAvb099u7dqymLj49HQkICAgMDjXI6REREFo/T7YiITEygiKtVhjU1bNgwxMTE4Ndff4WTk5PmPiOVSgUHBweoVCoMGDAAn3zyCVxdXaFUKjFixAgEBgZyZTsiIqJ8RszNJYWdJCKyLkYc0l+8eDEAoGXLllrlUVFRCAsLAwDMnTsXNjY26NatG7KyshASEoJFixYZGjUREZH1ssDpduwkEZF1ycsDRF7h+9Q6ynUQenxxy+VyLFy4EAsXLjSobSIiolLDiLm5pLCTRETWxQKvVhEREVk1C8zN7CQRkXVRF/FgOrV5fhETERFZNQvMzewkEZFVEeo8CB1D+rrKiYiIqPhYYm5mJ4mIrIso4mqVmQ7pExERWTULzM3sJBGRdVGrAYllPdWbiIjIqllgbmYniYisisjLg5BY1pA+ERGRNbPE3MxOEhFZFwsc0iciIrJqFpib2UkiIuuiFoDEsr6IiYiIrJoF5mYbUwdARGRMIk/9bFi/0M085z0TERFZM2Pm5sjISLzxxhtwcnKCu7s7unTpgvj4eK06mZmZGDZsGMqWLQuFQoFu3bohJSXFoOOwk0RE1kWoi96IiIioZBkxNx84cADDhg3D0aNHsXv3buTk5OCtt97C48ePNXVGjx6NLVu2YP369Thw4ACSkpLQtWtXg47D6XYlTPxvSDEvJ9PEkZReuXlZpg6h1Mr/7EUxDq3nqLMhdMx7zkVOsR2XiCxX/ndSbi5zs6nYCn4/m1Lu/z7/4srP+uTm9PR0rXKZTAaZTFag/o4dO7ReR0dHw93dHSdOnECLFi2QlpaG5cuXIyYmBsHBwQCAqKgo1KhRA0ePHkXjxo31ipmdpBL26NEjAMCJ7dNMHAmR6Tx69AgqlcqobUqlUnh6euLQna1F1vP09IRUKjXqsYnIsuXn5v/un2HiSIhMy9j5Wd/crFAo4O3trVUWHh6OiIiIFx4jLS0NAODq6goAOHHiBHJyctCmTRtNHX9/f/j4+ODIkSPsJJkrLy8vJCYmwsnJCRKJxNThGCw9PR3e3t5ITEyEUqk0dTiljqV//kIIPHr0CF5eXkZvWy6X4/r168jOzi6ynlQqhVwuN/rxichyMTfTq7L0v4Piys/65mYhRIH/9wobRfo3tVqNUaNGoWnTpqhduzYA4M6dO5BKpXB2dtaq6+HhgTt37ugdOztJJczGxgYVKlQwdRivTKlUWuSXgLWw5M/f2CNIz5PL5ewAEZHBmJvJWCz576C48nNx5uZhw4bh3LlzOHTokNHb5sINRERERERkUYYPH46tW7di3759Whc5PD09kZ2djdTUVK36KSkp8PT01Lt9dpKIiIiIiMgiCCEwfPhwbNy4Eb///jsqVaqktb9Bgwawt7fH3r17NWXx8fFISEhAYGCg3sfhdDsyiEwmQ3h4uF7zRMn4+PkTEdG/MTeYHv8OSs6wYcMQExODX3/9FU5OTpr7jFQqFRwcHKBSqTBgwAB88skncHV1hVKpxIgRIxAYGKj3og0AIBHFuRYvERERERGRkehaXCUqKgphYWEAnj1MdsyYMfjpp5+QlZWFkJAQLFq0yKDpduwkERERERERPYf3JBERERERET2HnSQiIiIiIqLnsJNERERERET0HHaS6KXs378fEomkwBr0/1axYkXMmzevRGKyVhKJBJs2bdKrbkREBOrWrVus8RARkXlibi45zM3Wj50kKxMWFoYuXboUKNf3i/NlRUdHw9nZuVjatnb37t3DkCFD4OPjA5lMBk9PT4SEhCA2NhYAkJycjPbt25s4SiIielnMzZaHuZn4nCQiE+vWrRuys7OxcuVKVK5cGSkpKdi7dy/u378PAAYtV0lERESvjrmZOJJUSh06dAjNmzeHg4MDvL29MXLkSDx+/Fiz/8cff0TDhg3h5OQET09P9OrVC3fv3i20rf3796Nfv35IS0uDRCKBRCJBRESEZv+TJ0/Qv39/ODk5wcfHB999951mX3BwMIYPH67V3r179yCVSrWelGytUlNTcfDgQcycOROtWrWCr68v3nzzTUyYMAGdOnUCUHBI/9atW+jZsydcXV3h6OiIhg0b4s8//yy0/atXr6Jy5coYPnw4uNo/EZF5Y242D8zNBLCTVCpdvXoV7dq1Q7du3XDmzBmsXbsWhw4d0vpCzMnJwdSpU3H69Gls2rQJN27c0Dyg69+aNGmCefPmQalUIjk5GcnJyRg7dqxm/+zZs9GwYUOcOnUKQ4cOxZAhQxAfHw8AGDhwIGJiYpCVlaWpv2rVKrz22msIDg4ung/AjCgUCigUCmzatEnrM9AlIyMDQUFBuH37NjZv3ozTp09j/PjxUKvVBeqeOXMGzZo1Q69evbBgwQKdD18jIiLTY242H8zNBAAQZFVCQ0OFra2tcHR01NrkcrkAIB4+fCgGDBggPvzwQ633HTx4UNjY2IinT58W2u6xY8cEAPHo0SMhhBD79u3TtCeEEFFRUUKlUhV4n6+vr+jTp4/mtVqtFu7u7mLx4sVCCCGePn0qXFxcxNq1azV1AgICRERExKt8DBZlw4YNwsXFRcjlctGkSRMxYcIEcfr0ac1+AGLjxo1CCCGWLl0qnJycxP379wttKzw8XLz++usiNjZWuLi4iK+//rokToGIiIrA3Gx5mJuJI0lWqFWrVoiLi9Pavv/+e83+06dPIzo6WnOlRKFQICQkBGq1GtevXwcAnDhxAh07doSPjw+cnJwQFBQEAEhISDA4noCAAM2fJRIJPD09NdMD5HI5PvjgA6xYsQIAcPLkSZw7d07nlTFr1K1bNyQlJWHz5s1o164d9u/fj/r16yM6OrpA3bi4ONSrVw+urq4620tISEDbtm0xadIkjBkzphgjJyIifTE3WxbmZuLCDVbI0dERfn5+WmW3bt3S/DkjIwMfffQRRo4cWeC9Pj4+ePz4MUJCQhASEoLVq1fDzc0NCQkJCAkJQXZ2tsHx2Nvba72WSCRaQ9ADBw5E3bp1cevWLURFRSE4OBi+vr4GH8eSyeVytG3bFm3btsXEiRMxcOBAhIeHF0hIDg4OL2zLzc0NXl5e+Omnn9C/f38olcpiipqIiPTF3Gx5mJtLN44klUL169fHhQsX4OfnV2CTSqX466+/cP/+fcyYMQPNmzeHv7+/zhtD80mlUuTl5b1UPHXq1EHDhg2xbNkyxMTEoH///i/VjjWpWbOm1s26+QICAhAXF4cHDx7ofK+DgwO2bt0KuVyOkJAQPHr0qDhDJSIiI2BuNn/MzaULO0ml0KefforDhw9j+PDhiIuLw+XLl/Hrr79qbg718fGBVCrFt99+i2vXrmHz5s2YOnVqkW1WrFgRGRkZ2Lt3L/7++288efLEoJgGDhyIGTNmQAiBd99996XPzdLcv38fwcHBWLVqFc6cOYPr169j/fr1mDVrFjp37lygfs+ePeHp6YkuXbogNjYW165dw88//4wjR45o1XN0dMS2bdtgZ2eH9u3bIyMjo6ROiYiIXgJzs/lgbiaAnaRSKSAgAAcOHMClS5fQvHlz1KtXD5MmTYKXlxeAZ0PC0dHRWL9+PWrWrIkZM2bg66+/LrLNJk2aYPDgwejRowfc3Nwwa9Ysg2Lq2bMn7Ozs0LNnT8jl8pc+N0ujUCjQqFEjzJ07Fy1atEDt2rUxceJEDBo0CAsWLChQXyqVYteuXXB3d8fbb7+NOnXqYMaMGbC1tS207e3bt0MIgQ4dOhR69YuIiMwDc7P5YG4mAJAIwQXayfRu3LiBKlWq4NixY6hfv76pwyEiIir1mJupNGMniUwqJycH9+/fx9ixY3H9+nXExsaaOiQiIqJSjbmZiNPtyMRiY2NRvnx5HDt2DEuWLDF1OERERKUeczMRR5KIiIiIiIi0cCSJiIiIiIjoOewkERERERERPYedJCIiIiIiouewk0RERERERPQcdpLILIWFhaFLly6a1y1btsSoUaNKPI79+/dDIpEgNTVVZx2JRIJNmzbp3WZERATq1q37SnHduHEDEokEcXFxr9QOERGRvpibi8bcbF3YSSK9hYWFQSKRQCKRQCqVws/PD1OmTEFubm6xH/uXX37B1KlT9aqrz5cnERGRNWBuJioedqYOgCxLu3btEBUVhaysLPz2228YNmwY7O3tMWHChAJ1s7OzIZVKjXJcV1dXo7RDRERkbZibiYyPI0lkEJlMBk9PT/j6+mLIkCFo06YNNm/eDOCfYfhp06bBy8sL1atXBwAkJiaie/fucHZ2hqurKzp37owbN25o2szLy8Mnn3wCZ2dnlC1bFuPHj8e/H9/17yH9rKwsfPrpp/D29oZMJoOfnx+WL1+OGzduoFWrVgAAFxcXSCQShIWFAQDUajUiIyNRqVIlODg44PXXX8eGDRu0jvPbb7+hWrVqcHBwQKtWrbTi1Nenn36KatWqoUyZMqhcuTImTpyInJycAvWWLl0Kb29vlClTBt27d0daWprW/u+//x41atSAXC6Hv78/Fi1aZHAsRERk/ZibX4y5mQzFThK9EgcHB2RnZ2te7927F/Hx8di9eze2bt2KnJwchISEwMnJCQcPHkRsbCwUCgXatWuned/s2bMRHR2NFStW4NChQ3jw4AE2btxY5HH79u2Ln376CfPnz8fFixexdOlSKBQKeHt74+effwYAxMfHIzk5Gd988w0AIDIyEj/88AOWLFmC8+fPY/To0ejTpw8OHDgA4FnC6Nq1Kzp27Ii4uDgMHDgQn332mcGfiZOTE6Kjo3HhwgV88803WLZsGebOnatV58qVK1i3bh22bNmCHTt24NSpUxg6dKhm/+rVqzFp0iRMmzYNFy9exPTp0zFx4kSsXLnS4HiIiKh0YW4uiLmZDCaI9BQaGio6d+4shBBCrVaL3bt3C5lMJsaOHavZ7+HhIbKysjTv+fHHH0X16tWFWq3WlGVlZQkHBwexc+dOIYQQ5cuXF7NmzdLsz8nJERUqVNAcSwghgoKCxMcffyyEECI+Pl4AELt37y40zn379gkA4uHDh5qyzMxMUaZMGXH48GGtugMGDBA9e/YUQggxYcIEUbNmTa39n376aYG2/g2A2Lhxo879X331lWjQoIHmdXh4uLC1tRW3bt3SlG3fvl3Y2NiI5ORkIYQQVapUETExMVrtTJ06VQQGBgohhLh+/boAIE6dOqXzuEREZP2YmwvH3EyvivckkUG2bt0KhUKBnJwcqNVq9OrVCxEREZr9derU0ZrrfPr0aVy5cgVOTk5a7WRmZuLqBZ7EdAAAVqxJREFU1atIS0tDcnIyGjVqpNlnZ2eHhg0bFhjWzxcXFwdbW1sEBQXpHfeVK1fw5MkTtG3bVqs8Ozsb9erVAwBcvHhRKw4ACAwM1PsY+dauXYv58+fj6tWryMjIQG5uLpRKpVYdHx8fvPbaa1rHUavViI+Ph5OTE65evYoBAwZg0KBBmjq5ublQqVQGx0NERNaNufnFmJvJUOwkkUFatWqFxYsXQyqVwsvLC3Z22v+EHB0dtV5nZGSgQYMGWL16dYG23NzcXioGBwcHg9+TkZEBANi2bZvWFyDwbC63sRw5cgS9e/fG5MmTERISApVKhTVr1mD27NkGx7ps2bICicHW1tZosRIRkXVgbi4aczO9DHaSyCCOjo7w8/PTu379+vWxdu1auLu7F7hik698+fL4888/0aJFCwDPrsqcOHEC9evXL7R+nTp1oFarceDAAbRp06bA/vyrZXl5eZqymjVrQiaTISEhQedVrho1amhudM139OjRF5/kcw4fPgxfX1988cUXmrKbN28WqJeQkICkpCR4eXlpjmNjY4Pq1avDw8MDXl5euHbtGnr37m3Q8YmIqPRhbi4aczO9DC7cQMWqd+/eKFeuHDp37oyDBw/i+vXr2L9/P0aOHIlbt24BAD7++GPMmDEDmzZtwl9//YWhQ4cW+RyFihUrIjQ0FP3798emTZs0ba5btw4A4OvrC4lEgq1bt+LevXvIyMiAk5MTxo4di9GjR2PlypW4evUqTp48iW+//VZzw+XgwYNx+fJljBs3DvHx8YiJiUF0dLRB51u1alUkJCRgzZo1uHr1KubPn1/oja5yuRyhoaE4ffo0Dh48iJEjR6J79+7w9PQEAEyePBmRkZGYP38+Ll26hLNnzyIqKgpz5swxKB4iIqJ/Y25mbiY9mPqmKLIcz98casj+5ORk0bdvX1GuXDkhk8lE5cqVxaBBg0RaWpoQ4tnNoB9//LFQKpXC2dlZfPLJJ6Jv3746bw4VQoinT5+K0aNHi/LlywupVCr8/PzEihUrNPunTJkiPD09hUQiEaGhoUKIZze0zps3T1SvXl3Y29sLNzc3ERISIg4cOKB535YtW4Sfn5+QyWSiefPmYsWKFQbfHDpu3DhRtmxZoVAoRI8ePcTcuXOFSqXS7A8PDxevv/66WLRokfDy8hJyuVz85z//EQ8ePNBqd/Xq1aJu3bpCKpUKFxcX0aJFC/HLL78IIXhzKBERPcPcXDjmZnpVEiF03IFHRERERERUCnG6HRERERER0XPYSSIiIiIiInoOO0lERERERETPYSeJiIiIiIjoOewkERERERERPYedJCIiIiIiouewk0RERERERPQcdpKIiIiIiIiew04SERERERHRc9hJIiIiIiIieg47SURERERERM9hJ4mIiIiIiOg57CQRERERERE9h50kIiIiIiKi57CTRGZDIpEgIiLC1GHo9OOPP8Lf3x/29vZwdnY2dThERERW5caNG5BIJIiOjjZ1KETsJBHp46+//kJYWBiqVKmCZcuW4bvvvjN1SAUkJSUhIiICcXFxpg6FiIiIyKLZmToAIkuwf/9+qNVqfPPNN/Dz8zN1OIVKSkrC5MmTUbFiRdStW9fU4RARERFZLI4kkU6PHz82dQhm4+7duwBg1Gl2T548MVpbRERERGQ87CQRACAiIgISiQQXLlxAr1694OLigmbNmuHMmTMICwtD5cqVIZfL4enpif79++P+/fuFvv/KlSsICwuDs7MzVCoV+vXrV6AzkJWVhdGjR8PNzQ1OTk7o1KkTbt26VWhcp06dQvv27aFUKqFQKNC6dWscPXpUq050dDQkEgkOHTqEkSNHws3NDc7Ozvjoo4+QnZ2N1NRU9O3bFy4uLnBxccH48eMhhND7s6lYsSLCw8MBAG5ubgXunVq0aBFq1aoFmUwGLy8vDBs2DKmpqVpttGzZErVr18aJEyfQokULlClTBp9//rnm8wgPD4efnx9kMhm8vb0xfvx4ZGVlabWxe/duNGvWDM7OzlAoFKhevbqmjf379+ONN94AAPTr1w8SiYTzuomIqMTl/x64dOkS+vTpA5VKBTc3N0ycOBFCCCQmJqJz585QKpXw9PTE7Nmzi2wvLCwMCoUC165dQ0hICBwdHeHl5YUpU6YYlMuJDMXpdqTlvffeQ9WqVTF9+nQIIbB7925cu3YN/fr1g6enJ86fP4/vvvsO58+fx9GjRyGRSLTe3717d1SqVAmRkZE4efIkvv/+e7i7u2PmzJmaOgMHDsSqVavQq1cvNGnSBL///js6dOhQIJbz58+jefPmUCqVGD9+POzt7bF06VK0bNkSBw4cQKNGjbTqjxgxAp6enpg8eTKOHj2K7777Ds7Ozjh8+DB8fHwwffp0/Pbbb/jqq69Qu3Zt9O3bV6/PZN68efjhhx+wceNGLF68GAqFAgEBAQCeJYPJkyejTZs2GDJkCOLj47F48WIcO3YMsbGxsLe317Rz//59tG/fHu+//z769OkDDw8PqNVqdOrUCYcOHcKHH36IGjVq4OzZs5g7dy4uXbqETZs2aT6Ld955BwEBAZgyZQpkMhmuXLmC2NhYAECNGjUwZcoUTJo0CR9++CGaN28OAGjSpIle50hERGRMPXr0QI0aNTBjxgxs27YNX375JVxdXbF06VIEBwdj5syZWL16NcaOHYs33ngDLVq00NlWXl4e2rVrh8aNG2PWrFnYsWMHwsPDkZubiylTppTgWVGpIoiEEOHh4QKA6Nmzp1b5kydPCtT96aefBADxxx9/FHh///79teq+++67omzZsprXcXFxAoAYOnSoVr1evXoJACI8PFxT1qVLFyGVSsXVq1c1ZUlJScLJyUm0aNFCUxYVFSUAiJCQEKFWqzXlgYGBQiKRiMGDB2vKcnNzRYUKFURQUNALPhFt+ed37949Tdndu3eFVCoVb731lsjLy9OUL1iwQAAQK1as0JQFBQUJAGLJkiVa7f7444/CxsZGHDx4UKt8yZIlAoCIjY0VQggxd+7cAsf/t2PHjgkAIioqyqBzIyIiMpb8fPnhhx9qyvJzr0QiETNmzNCUP3z4UDg4OIjQ0FAhhBDXr18vkMdCQ0MFADFixAhNmVqtFh06dBBSqbTIvEj0KjjdjrQMHjxY67WDg4Pmz5mZmfj777/RuHFjAMDJkydf+P7mzZvj/v37SE9PBwD89ttvAICRI0dq1Rs1apTW67y8POzatQtdunRB5cqVNeXly5dHr169cOjQIU2b+QYMGKA1stWoUSMIITBgwABNma2tLRo2bIhr164V/gEYYM+ePcjOzsaoUaNgY/PP/0qDBg2CUqnEtm3btOrLZDL069dPq2z9+vWoUaMG/P398ffff2u24OBgAMC+ffsA/HMv1K+//gq1Wv3KsRMRERWngQMHav6cn3v/nZOdnZ1RvXp1vXLy8OHDNX+WSCQYPnw4srOzsWfPHuMGTvQ/7CSRlkqVKmm9fvDgAT7++GN4eHjAwcEBbm5umjppaWkF3u/j46P12sXFBQDw8OFDAMDNmzdhY2ODKlWqaNWrXr261ut79+7hyZMnBcqBZ1PL1Go1EhMTizy2SqUCAHh7excoz4/nVdy8ebPQ2KVSKSpXrqzZn++1116DVCrVKrt8+TLOnz8PNzc3ra1atWoA/lkwokePHmjatCkGDhwIDw8PvP/++1i3bh07TEREZJYKy8lyuRzlypUrUP6inGxjY6N1wRSAJk/euHHj1YMlKgTvSSItz48cAc/uMTp8+DDGjRuHunXrQqFQQK1Wo127doX+QLe1tS20XVECN1fqOnZh5SURz7/9+7MFALVajTp16mDOnDmFvie/g+fg4IA//vgD+/btw7Zt27Bjxw6sXbsWwcHB2LVrl85zJyIiMoXC8pIpfyMQGYqdJNLp4cOH2Lt3LyZPnoxJkyZpyi9fvvzSbfr6+kKtVuPq1ataIzDx8fFa9dzc3FCmTJkC5cCzB7va2NgUGCEqab6+vgCexf78Fa7s7Gxcv34dbdq0eWEbVapUwenTp9G6desCi2D8m42NDVq3bo3WrVtjzpw5mD59Or744gvs27cPbdq0eeH7iYiILJFarca1a9c0o0cAcOnSJQDPVqAlKg6cbkc65V/x+fcVnnnz5r10m+3btwcAzJ8/v8g2bW1t8dZbb+HXX3/VGkpPSUlBTEwMmjVrBqVS+dJxGEObNm0glUoxf/58rc9o+fLlSEtLK3TFvn/r3r07bt++jWXLlhXY9/TpU82zqh48eFBgf/4DY/OXCnd0dASAAsuPExERWboFCxZo/iyEwIIFC2Bvb4/WrVubMCqyZhxJIp2USiVatGiBWbNmIScnB6+99hp27dqF69evv3SbdevWRc+ePbFo0SKkpaWhSZMm2Lt3L65cuVKg7pdffql5NtDQoUNhZ2eHpUuXIisrC7NmzXqVUzMKNzc3TJgwAZMnT0a7du3QqVMnxMfHY9GiRXjjjTfQp0+fF7bxwQcfYN26dRg8eDD27duHpk2bIi8vD3/99RfWrVuHnTt3omHDhpgyZQr++OMPdOjQAb6+vrh79y4WLVqEChUqoFmzZgCejUo5OztjyZIlcHJygqOjIxo1alTgPjMiIiJLIpfLsWPHDoSGhqJRo0bYvn07tm3bhs8//xxubm6mDo+sFDtJVKSYmBiMGDECCxcuhBACb731FrZv3w4vL6+XbnPFihVwc3PD6tWrsWnTJgQHB2Pbtm0Fps/VqlULBw8exIQJExAZGQm1Wo1GjRph1apVBZ6RZCoRERFwc3PDggULMHr0aLi6uuLDDz/E9OnTtZ6RpIuNjQ02bdqEuXPnap7FVKZMGVSuXBkff/yxZmpBp06dcOPGDaxYsQJ///03ypUrh6CgIEyePFmzQIW9vT1WrlyJCRMmYPDgwcjNzUVUVBQ7SUREZNFsbW2xY8cODBkyBOPGjYOTkxPCw8O1bgUgMjaJ4N1yRERERGSGwsLCsGHDBmRkZJg6FCpleE8SERERERHRczjdjkq1Bw8eIDs7W+d+W1tbzncmIiIiKmXYSaJSrWvXrjhw4IDO/b6+vnxQHREREVEpw3uSqFQ7ceJEkU/6dnBwQNOmTUswIiIiIiIyNXaSiIiIiIiInsPpdiVMrVYjKSkJTk5OkEgkpg6HqEQJIfDo0SN4eXnBxsb468ZkZmYWeY8ZAEilUsjlcqMfm4gsF3MzlXbFmZ8tNTezk1TCkpKSCjwPiKi0SUxMRIUK/9/evYdFUfZvAL+Hwy7IYRFCFhRQwhMpHkvxkEoaapkmvyzT0jyUZ8V8MysPqYn5VpqllmagpZmWmlpmRsnrOUTxkEaKKAcBDQQEBRZ2fn+Qmxss7sLC7gz357qe65JnZmefpdzb7zwzzzQx6zGLiorQzN8ZmdfLqtxPrVYjOTnZ6r6MichymM1E5cydz1LOZhZJdczFxQUAcPVkU7g6cwV2S/i/zt0sPYR6q1QsQeytrbq/B+ZUUlKCzOtlSI73h6tL5X+38m9p0azTVZSUlFjVFzERWdbd76Smr86DjZLfDZYQP/ozSw+hXssv0MK/4xWz57OUs5lFUh27O43v6mxj8H8Wql12gsLSQ6j3avNyFifn8laZMt6BSUSVuPudZKN0gK0V/SOtPuG/iaxDbeWzFLOZRRIRyUopylCKyr9xS6Gt49EQERGRFLOZRRIRyUqZKKLMwKKdhvqJiIio9kgxm1kkEZGsaCFCa+BslaF+IiIiqj1SzGYWSUQkK6XQQlPFNiIiIqpbUsxmFklEJCtSnNInIiKSMylmM4skIpIV7d/N0DYiIiKqW1LMZhZJRCQrJaKIEgNnpQz1ExERUe2RYjazSCIiWZHi2SoiIiI5k2I2s0giIlnRQkAZKn8YntZAPxEREdUeKWYzH29MRLKiEYUqmymaNm0KQRAqtMmTJwMAioqKMHnyZHh4eMDZ2Rnh4eHIysqqjY9FREQkWebM5rrCIomIZKXs77NVhpop4uLikJGRoWv79+8HADzzzDMAgIiICOzevRvbtm1DbGwsrl27hqFDh5r9MxEREUmZObO5rvByOyKSFa0oQGvgrJShfkM8PT31fl66dCkefPBB9OrVC3l5eVi/fj02b96M0NBQAEBUVBRat26NY8eOoWvXrtX7AERERDJjzmyuK5xJIiJZKYFtlQ0A8vPz9VpxcfH9j1tSgi+//BJjxoyBIAiIj4+HRqNB3759dfu0atUKfn5+OHr0aK19PiIiIqkxJputDYskIpIV8e+zVZU18e+zVb6+vlCpVLoWGRl53+Pu3LkTubm5GD16NAAgMzMTCoUCbm5uevt5eXkhMzPT3B+LiIhIsozJZmvDy+2ISFaqur75bn9qaipcXV11/Uql8r7HXb9+PQYMGAAfHx/zDJSIiKieMCabrQ2LJCKSFY1oC41Y+dS9RiwDALi6uuoVSfdz9epV/Pzzz9i+fbuuT61Wo6SkBLm5uXqzSVlZWVCr1dUbPBERkQwZk83WhpfbEZGs1MYKOlFRUWjUqBGeeOIJXV+nTp1gb2+PmJgYXV9iYiJSUlIQEhJS489BREQkF+bO5vT0dIwcORIeHh5wdHRE27ZtceLECd12URQxb948eHt7w9HREX379sXFixdNeg/OJBGRrJSJNigTKz//UyaKJh9Pq9UiKioKo0aNgp3dP1+ZKpUKY8eOxcyZM+Hu7g5XV1dMnToVISEhXNmOiIjoHubM5ps3b6J79+7o06cP9u7dC09PT1y8eBENGzbU7bNs2TKsXLkSGzZsQLNmzTB37lyEhYXh/PnzcHBwMOp9WCQRkayUwhYaAyvllFbjeD///DNSUlIwZsyYCtuWL18OGxsbhIeHo7i4GGFhYVi9enU13oWIiEi+jMnm/Px8vX6lUlnpPcPvvvsufH19ERUVpetr1qyZ7s+iKGLFihV46623MHjwYADAxo0b4eXlhZ07d+K5554zasy83I6IZOXu2SpDzVSPP/44RFFEixYtKmxzcHDAqlWrkJOTg8LCQmzfvp33IxEREf2LMdls7Mqzu3btQufOnfHMM8+gUaNG6NChA9atW6fbnpycjMzMTL1HdKhUKnTp0sWkR3RwJomIZEULG2gNnP/RwvTL7YiIiKhmjMlmY1eevXz5MtasWYOZM2fijTfeQFxcHKZNmwaFQoFRo0bpHsPh5eWl9zpTH9HBIomIZKVEtIWdgRV0SlgjERER1TljstnYlWe1Wi06d+6MJUuWAAA6dOiAc+fO4ZNPPsGoUaPMNmZebkdEsqIVbapsREREVLfMmc3e3t4ICgrS62vdujVSUlIAQHfZe1ZWlt4+pj6ig/9iICJZKYNNlY2IiIjqljmzuXv37khMTNTr+/PPP+Hv7w+gfBEHtVqt94iO/Px8HD9+3KRHdPByOyKSlVLYGHxgXSnvSSIiIqpz5szmiIgIdOvWDUuWLMGwYcPw22+/Ye3atVi7di0AQBAEzJgxA4sXL0bz5s11S4D7+PhgyJAhRr8PiyQikpWqn8XAmSQiIqK6Zs5sfvjhh7Fjxw7MmTMHCxcuRLNmzbBixQqMGDFCt89rr72GwsJCvPzyy8jNzUWPHj3w448/Gv2MJIBFEhHJjBYCtAae3m2on4iIiGqPubP5ySefxJNPPmlwuyAIWLhwIRYuXGjyse9ikUREslIi2sFWrPyrjavbERER1T0pZjOLJCKSFa0oQCsaOFtloJ+IiIhqjxSzmUUSEcmKtoqVcgw9yI6IiIhqjxSzmUUSEcmKRrSFrYEVdDSilc7pExERyZgUs5lFEhHJSlUPpuPDZImIiOqeFLOZRRIRyUoZgDIDK+WU1e1QiIiICNLMZhZJRCQrGq0dbLWVf7VptNY5pU9ERCRnUsxmFklEJCtiFc9iEPmcJCIiojonxWxmkUREsmLOp3oTERFRzUkxm1kkEZGsaERb2BhcQUdbx6MhIiIiKWYziyQikhUpPrCOiIhIzqSYzSySiEhWtLAx+GA6a31gHRERkZxJMZtZJBGRrGi0NrDRVv6FqzHQT0RERLVHitnMIokq9eIjQchKU1ToHzTqBqZEput+FkXgrZEBOPGrK+avT0a3AXl1OUzZGvZyKrr1+wtNAu6gpMgGF0654vP3myI9uYHefq3a52PUjCtoGXwLWq2Ayxec8Na4Nigprvy63/pArOKBdaKV3hxKRGSM51qfw/DWv6Oxyy0AwKWb7lh1shMOpvkDAN7uEYuQxmlo1KAQtzX2OJWlxnu/dUVyXkNLDltW/sqwx/p3vBH3qyuK79jAp2kxXl2eghbt7gAAwnzaV/q6cW+l45lJN+pwpNZFitlcL4qkAwcOoE+fPrh58ybc3NwM7te0aVPMmDEDM2bMqLOxWauVexOhLfvnGtErfzhgznOB6DlIvwjasc4TgnVeSippbR7Ow57NPvjzrDNsbUWMiriCdz47h1ee7ITiO+UFUKv2+Vi07hy2rvXFmsUPoqxMQEDLQmi19fs/SBmEKh5YV79/N0TWhNlsuqxCZ7wf1xVX81QQBGBI80SsevxHDN3xDC7ddMfvf3li96XmyChwhkpZjCmd4rB+4B703TLC4D9QyXi3cm0xc3BzBHe7hcVfXoabRynSLyvhrPrncahfJZzTe03cL65Y/qovejxRv08iSzGbLfo3ZvTo0RgyZEiF/gMHDkAQBOTm5tbK+0ZHR1f5hUyAm0cZ3BuV6trxn1XwblqM4JAC3T5J5xzx7aeemPlBigVHKk/zxrfBzzu8kHLJCcmJzvhgTgs0alyM5g/98/t/+fXL2PWFD7at80XKJSekJzfAwR89Uaqp30FYqrVBqdbWQKvfvxsiYzCbrdevKU3xv1R/XM13w5U8N6w40QW3NfZo1ygLALD1jyCcyPRBeoErzmd7YsWJLvBxLkBj51sWHrk8bF3VCA/4lGDWilS06nAbar8SdOp9Cz5NS3T73PtvJ/dGpTi6T4V23Qvg7V9SxZHlT4rZbJ2jIquiKRHwy7cNEfZctm7WqOi2gKWT/TH5nTS4Nyq17ADrASeX8rNUt/LKJ39V7iVo1f4WcnPs8d5XCdh06Bje/eI0gjrW7zNVAKD9+4F1hhoRkRzYCFoMDLiIBvYaJGR5VdjuaKfB0BZ/IDXfBZmFzhYYofwc+0mFFu1uY/HLTTGs7UOY1K8FftjkbnD/mzfs8FuMK8Key67DUVonKWazJIqkQ4cOoWfPnnB0dISvry+mTZuGwsJC3fYvvvgCnTt3houLC9RqNZ5//nlcv3690mMdOHAAL730EvLy8iAIAgRBwIIFC3Tbb9++jTFjxsDFxQV+fn5Yu3atbltoaCimTJmid7wbN25AoVAgJiam0vcrLi5Gfn6+XpOaIz+qUJBvi8eH5ej6Pl3QGEGdC9Gtv/Q+j9QIgohX3riM3+NdcfWiEwBA7VsEABgxJQX7tqkxd3wbXPrdGZHRZ+Hjf8eSw7W4MlGoshGReTCbLaNFw2zEj16HM2PWYkGP/2HK/v5Iyv3nH+rDW59D/Oh1OPXSZ3jUNwVjfhgEjbb+3qdqThkpCuzZ+AB8mhVjyebLeHJUNtbMbYL9Wyu/52v/Vnc4Opehx0CewJRiNlt9kZSUlIT+/fsjPDwcZ86cwddff41Dhw7pfSFqNBosWrQIp0+fxs6dO3HlyhWMHj260uN169YNK1asgKurKzIyMpCRkYFZs2bptr///vvo3LkzTp06hUmTJmHixIlITEwEAIwbNw6bN29GcXGxbv8vv/wSjRs3RmhoaKXvFxkZCZVKpWu+vr5m+K3UrX1fuePhPvnwUJfPGB3d54qEwy6YsDD9Pq8kc5g07xL8mxdi6cxWuj6bv//m7v3aG/u3q3H5gjPWLX0QacmOeDw800IjtQ6loqHpfFuUGniQHRGZhtlsOcl5bnh6+zA8+104tlx4CEt7/YIH3f45ibn7UnMM3f4MRu4ejCt5Kqx47CcobHnFhzmIWiCwzR2MmZOBwLZ3MHBkNgY8n43vv3ig0v33bXFH6NM3oXAQ63ik1keK2WzxImnPnj1wdnbWawMGDNBtj4yMxIgRIzBjxgw0b94c3bp1w8qVK7Fx40YUFZWfTR8zZgwGDBiAgIAAdO3aFStXrsTevXtRUFBQ4f0UCgVUKhUEQYBarYZarYaz8z/T0AMHDsSkSZMQGBiI2bNn44EHHsCvv/4KABg6dCgA4LvvvtPtHx0djdGjR0MwsHrBnDlzkJeXp2upqak1/6XVoaw0e5w66IL+z/8zVZxw2AUZVxQY2qotBvi2wwDfdgCAReOb4j/hgZYaqixNnHsJj/TOwesvBiM7S6nrz7levvJgyiX91e5SkxrA07sY9ZlYxXS+aKVT+kTWhtlsvTRaW6Tkq/D7X574IK4r/sjxwIttzuq2F2iUuJrvhhOZPpj+cxiaueWiX9NkC45YPtwblcK/RZFen2/zIlxPt6+w79njTkhLctD791N9JsVstniR1KdPHyQkJOi1zz77TLf99OnTiI6O1vuiDgsLg1arRXJy+V/6+Ph4DBo0CH5+fnBxcUGvXr0AACkppi8oEBwcrPvz3S/ru5cHODg44IUXXsDnn38OADh58iTOnTtn8MwYACiVSri6uuo1KflpiwfcHihFl77/XIrw7JQsfBKTiDX7/2kA8MqCdLy6nIs4mIeIiXMvIaRvNuaMDkZWuoPe1qx0Jf7KUqBJs9t6/Y2b3sH1a/r71jd3n+ptqJkqPT0dI0eOhIeHBxwdHdG2bVucOHFCt10URcybNw/e3t5wdHRE3759cfHiRXN+JKI6x2yWDhtBhMK2zOB2QQAUNoa3k/GCHi5EapJSry/9shKNGmsq7LvvKw80D76NBx8qqrCtPjJ3NtcFiy8B7uTkhMBA/dmHtLQ03Z8LCgrwyiuvYNq0aRVe6+fnh8LCQoSFhSEsLAybNm2Cp6cnUlJSEBYWhpIS01cSsbfXPxsgCAK0Wq3u53HjxqF9+/ZIS0tDVFQUQkND4e/vb/L7SIFWC/z0tTv6PpMD23v+T7m7Ysu/NWqsgdqvfq/eYi6T5iWh95PXsXByEO4U2qLhA+W/18Jbtn8/A0nAt+ubYOTUq7ic6ITLF5zRd0gWmgTcwTvTK97AW5+Uam0hGLj+vtTE6/Jv3ryJ7t27o0+fPti7dy88PT1x8eJFNGz4z/Xny5Ytw8qVK7FhwwY0a9YMc+fORVhYGM6fPw8Hh/pdsJJ0MZut08yHj+F/qX7IKHCGk70GTwZexCPe1zBu75No4pKPgQGXcDjdFzl3HKB2KsT49idRXGqL2FQ/Sw9dFoa+fB0RT7XAVysb4dFBuUg81QA/fOmBGf9N09uv8JYN/rdbhZfnX7PQSK2PObO5rli8SLqfjh074vz58xW+rO86e/YssrOzsXTpUt01xfee5a2MQqFAWVn1zqq0bdsWnTt3xrp167B582Z8/PHH1TqOFJz6nwuupysQ9lzO/Xcms3ry+QwAwLIvzur1fzCnBX7eUV4EfbexMRRKLV5+/TJcVKW4nOiEN8e0QWaqY52P15pUtVKOqSvovPvuu/D19UVUVJSur1mzZro/i6KIFStW4K233sLgwYMBABs3boSXlxd27tyJ5557rhqfgMj6MZstw93xDt7t/Qs8GxTiVokCiTkeGLf3SRxJ90WjBoXopM7Ai23OwFVZjOw7jjiR6YPhu55GTlGD+x+c7qtl+zuYtz4ZUZHe2LRcDbVvCSYsTEfo0Jt6+8V+1xAQBfQZctPAkeofc2ZzXbH6Imn27Nno2rUrpkyZgnHjxsHJyQnnz5/H/v378fHHH8PPzw8KhQIfffQRJkyYgHPnzmHRokVVHrNp06YoKChATEwM2rVrhwYNGqBBA+O/QMaNG4cpU6bAyckJTz/9dE0/otXq1PsW9l1LMGpfY/cj4wxs1dOo/bat88W2ddK54bguVDV1f7f/3ytZKZVKKJXKCvvv2rULYWFheOaZZxAbG4vGjRtj0qRJGD9+PAAgOTkZmZmZ6Nu3r+41KpUKXbp0wdGjR1kkkWwxmy3jrf/1Mbjt+m0nvLLviTocTf3UtV8+uvarejXEgSOzMXAk70W6lzHZbG0sfk/S/QQHByM2NhZ//vknevbsiQ4dOmDevHnw8fEBAHh6eiI6Ohrbtm1DUFAQli5divfee6/KY3br1g0TJkzAs88+C09PTyxbtsykMQ0fPhx2dnYYPnw4L6chsjLGXPfs6+urt7JVZGRkpce6fPky1qxZg+bNm2Pfvn2YOHEipk2bhg0bNgAAMjPLVxL08tK/xNHLy0u3jUiOmM1EZAop3pMkiKLIdQlNdOXKFTz44IOIi4tDx44dTXptfn4+VCoVbv4ZAFcXq69RZWlgq0ctPYR6q1QsQUz+l8jLyzP7jdJ3/271++EV2DspKt1HU1iC/QM/RWpqqt77G5pJUigU6Ny5M44cOaLrmzZtGuLi4nD06FEcOXIE3bt3x7Vr1+Dt7a3bZ9iwYRAEAV9//bUZPyERVcUc2RzwxhLYssCyiD/Gr7b0EOq1/FtaNGxx2ez5bEo218a/DWqC/0o3gUajQWZmJt566y107drV5C9hIqp9Igw/2fvuGaF/r2pVWYEEAN7e3ggKCtLra926tW51LrVaDQDIysrS2ycrK0u3jYhqF7OZyPoZk83WhkWSCQ4fPgxvb2/ExcXhk08+sfRwiKgS5pzS7969u+6BlXf9+eefulWzmjVrBrVajZiYGN32/Px8HD9+HCEhITX/MER0X8xmIusnxcvtrH7hBmvSu3dv8OpEIutWqrUBtJWf/yk10G9IREQEunXrhiVLlmDYsGH47bffsHbtWqxduxZA+TLEM2bMwOLFi9G8eXPdEuA+Pj4YMmRITT8KERmB2Uxk/cyZzXWFRRIRyYo5V9B5+OGHsWPHDsyZMwcLFy5Es2bNsGLFCowYMUK3z2uvvYbCwkK8/PLLyM3NRY8ePfDjjz/yxnEiIqK/SXF1OxZJRCQroihANPCFa6i/Kk8++SSefPJJg9sFQcDChQuxcOFCk49NRERUH5g7m+sCiyQikpVS0QYQDUzpG+gnIiKi2iPFbGaRRESyIsWzVURERHImxWxmkUREsiLF656JiIjkTIrZzCKJiGRFq7VBmYGVcrRWuoIOERGRnEkxm40qknbt2mX0AZ966qlqD4aIqKZEAIZWA+YiwSQnzGYikgopZrNRRZKxz/sQBAFlZWU1GQ8RUY1oIUCAgSl9A/1EUsRsJiKpkGI2G1UkabXa2h4HEZFZlFXxwDpDU/1EUsRsJiKpkGI212hURUVF5hoHEZFZiGLVjUjumM1EZG2kmM0mF0llZWVYtGgRGjduDGdnZ1y+fBkAMHfuXKxfv97sAyQiMsXdZUYNNSI5YjYTkTWTYjabXCS98847iI6OxrJly6BQKHT9bdq0wWeffWbWwRERmars7xV0DDUiOWI2E5E1k2I2mzyqjRs3Yu3atRgxYgRsbW11/e3atcMff/xh1sEREZlKilP6RDXFbCYiaybFbDb5OUnp6ekIDAys0K/VaqHRaMwyKCKi6ir/wjX0VO86HgxRHWE2E5E1k2I2mzyTFBQUhIMHD1bo/+abb9ChQwezDIqIqLruPtXbUCOSI2YzEVkzKWazyTNJ8+bNw6hRo5Ceng6tVovt27cjMTERGzduxJ49e2pjjERERqvqJlBrvTmUqKaYzURkzaSYzSbPJA0ePBi7d+/Gzz//DCcnJ8ybNw8XLlzA7t270a9fv9oYIxGR8cT7NCIZYjYTkVWTYDabPJMEAD179sT+/fvNPRYiohoTtQK0WgNnqwz0E8kBs5mIrJUUs7laRRIAnDhxAhcuXABQfi10p06dzDYoIqLqkuKUPpG5MJuJyBpJMZtNLpLS0tIwfPhwHD58GG5ubgCA3NxcdOvWDVu2bEGTJk3MPUYiIuOJQnkztI1IhpjNRGTVJJjNJt+TNG7cOGg0Gly4cAE5OTnIycnBhQsXoNVqMW7cuNoYIxGR0URt1Y1IjpjNRGTNpJjNJs8kxcbG4siRI2jZsqWur2XLlvjoo4/Qs2dPsw6OiMhUUpzSJ6opZjMRWTMpZrPJRZKvr2+lD6YrKyuDj4+PWQZFRFQjVrpSDlFtYTYTkdWTWDabfLndf//7X0ydOhUnTpzQ9Z04cQLTp0/He++9Z9bBERGZStQKVTYiOWI2E5E1q81sXrp0KQRBwIwZM3R9RUVFmDx5Mjw8PODs7Izw8HBkZWWZdFyjZpIaNmwIQfjnAxQWFqJLly6wsyt/eWlpKezs7DBmzBgMGTLEpAEQEZmX8HcztI1IHpjNRCQdtZPNcXFx+PTTTxEcHKzXHxERge+//x7btm2DSqXClClTMHToUBw+fNjoYxtVJK1YscKkARMRWUxVD6aT2FQ/UVWYzUQkGbWQzQUFBRgxYgTWrVuHxYsX6/rz8vKwfv16bN68GaGhoQCAqKgotG7dGseOHUPXrl2NOr5RRdKoUaOqMXQiIgvQCuXN0DYimWA2E5FkGJHN+fn5et1KpRJKpdLgISdPnownnngCffv21SuS4uPjodFo0LdvX11fq1at4Ofnh6NHj5q3SDKkqKgIJSUlen2urq41OSQRUY2IYnkztI1I7pjNRGRtjMlmX19fvf758+djwYIFlb5my5YtOHnyJOLi4ipsy8zMhEKh0D0z7i4vLy9kZmYaPWaTi6TCwkLMnj0bW7duRXZ2doXtZWVlph6SiMh8eLkd1UPMZiKyakZkc2pqqt4JHUOzSKmpqZg+fTr2798PBwcH847zHiavbvfaa6/hl19+wZo1a6BUKvHZZ5/h7bffho+PDzZu3FgbYyQiMpqgFapsRHLEbCYia2ZMNru6uuo1Q0VSfHw8rl+/jo4dO8LOzg52dnaIjY3FypUrYWdnBy8vL5SUlCA3N1fvdVlZWVCr1UaP2eQiaffu3Vi9ejXCw8NhZ2eHnj174q233sKSJUuwadMmUw9HRGRe4n2aCRYsWABBEPRaq1atdNvNscQokTkwm4nIqpkxmx977DGcPXsWCQkJuta5c2eMGDFC92d7e3vExMToXpOYmIiUlBSEhIQY/T4mX26Xk5ODgIAAAOUVX05ODgCgR48emDhxoqmHIyIyL1Eob4a2meihhx7Czz//rPv57vLKgHmWGCUyB2YzEVk1M2azi4sL2rRpo9fn5OQEDw8PXf/YsWMxc+ZMuLu7w9XVFVOnTkVISIjRizYA1SiSAgICkJycDD8/P7Rq1Qpbt27FI488gt27d1e4QYqIqM5p/26GtpnIzs6u0ul5cy0xSmQOzGYismpmzub7Wb58OWxsbBAeHo7i4mKEhYVh9erVJh3D5CLppZdewunTp9GrVy+8/vrrGDRoED7++GNoNBp88MEHph6OiMi8jLg51JRlRi9evAgfHx84ODggJCQEkZGR8PPzM9sSo0TmwGwmIqtWy4sqHThwQO9nBwcHrFq1CqtWrar2MU0ukiIiInR/7tu3L/744w/Ex8cjMDCwwtNuiYjqnBFT+sYuM9qlSxdER0ejZcuWyMjIwNtvv42ePXvi3LlzZltilMgcmM1EZNXMfCl8XajRc5IAwN/fH/7+/uYYCxFRjQna8mZoG2D8MqMDBgzQ/Tk4OBhdunSBv78/tm7dCkdHR7ONmcjcmM1EZE2MyWZrY1SRtHLlSqMPOG3atGoPhoioLtxdXtRUbm5uaNGiBS5duoR+/frplhi9dzbJ1CVGiaqL2UxEVHuMKpKWL19u1MEEQeAXsZGebtEWdoK9pYdRL9m29rL0EOqvsmIg//671YQAQDBwfXNNJ/QLCgqQlJSEF154AZ06ddItMRoeHg6gekuMElUXs9n8/JYcZzZbSJ9ugy09hHqttLAYwMe1dvzazObaYlSRlJycXNvjICIyD61Q3gxtM8GsWbMwaNAg+Pv749q1a5g/fz5sbW0xfPhwqFQqsywxSlRdzGYikgwzZnNdqfE9SUREVsWMK+ikpaVh+PDhyM7OhqenJ3r06IFjx47B09MTgHmWGCUiIpK9Wl7drjawSCIiWRHEKqb0Tfwi3rJlS5XbzbHEKBERkdyZM5vrCoskIpKXOn5gHREREd2HBLOZRRIRyYoUz1YRERHJmRSzmUUSEcmLBB9YR0REJGsSzGab6rzo4MGDGDlyJEJCQpCeng4A+OKLL3Do0CGzDo6IyFR3H1hnqBHJFbOZiKyVFLPZ5CLp22+/RVhYGBwdHXHq1CkUFxcDAPLy8rBkyRKzD5CIyCTifRqRDDGbiciqSTCbTS6SFi9ejE8++QTr1q2Dvf0/D1zr3r07Tp48adbBERGZTPzn2ud/N2v9IiaqKWYzEVk1CWazyfckJSYm4tFHH63Qr1KpkJuba44xERFVnwRX0CGqKWYzEVk1CWazyTNJarUaly5dqtB/6NAhBAQEmGVQRETVZehMVVUr6xBJHbOZiKyZFLPZ5CJp/PjxmD59Oo4fPw5BEHDt2jVs2rQJs2bNwsSJE2tjjERERFQFZjMRkXmZfLnd66+/Dq1Wi8ceewy3b9/Go48+CqVSiVmzZmHq1Km1MUYiIqNVtVKOta6gQ1RTzGYismZSzGaTiyRBEPDmm2/iP//5Dy5duoSCggIEBQXB2dm5NsZHRGQ6K526J6otzGYisnoSy+ZqP0xWoVAgKCjInGMhIqq5qlbKkdgXNJGpmM1EZJUkmM0mF0l9+vSBIBh+Mu4vv/xSowEREdWEFKf0iWqK2UxE1kyK2WxykdS+fXu9nzUaDRISEnDu3DmMGjXKXOMiIqqWqlbKsdYVdIhqitlMRNZMitlscpG0fPnySvsXLFiAgoKCGg+IiKhGJDilT1RTzGYismoSzGaTlwA3ZOTIkfj888/NdTgiomq5O6VvqBHVJ8xmIrIGUszmai/c8G9Hjx6Fg4ODuQ5HRFQ9EjxbRVRbmM1EZBUkmM0mF0lDhw7V+1kURWRkZODEiROYO3eu2QZGRFQtEvwiJqopZjMRWTUJZrPJRZJKpdL72cbGBi1btsTChQvx+OOPm21gRETVIcUVdIhqitlMRNZMitlsUpFUVlaGl156CW3btkXDhg1ra0xERNUmxRV0iGqC2UxE1k6K2WzSwg22trZ4/PHHkZubW0vDISKqIfE+jUhmmM1EZPUkmM0mr27Xpk0bXL58uTbGQkRUY3fPVhlqRHLEbCYiaybFbDa5SFq8eDFmzZqFPXv2ICMjA/n5+XqNiMiiJHi2iqimmM1EZNUkmM1G35O0cOFCvPrqqxg4cCAA4KmnnoIgCLrtoihCEASUlZWZf5REREaS4nXPRNXFbCYiKZBiNhtdJL399tuYMGECfv3119ocDxFRzYgADK2UY6VfxETVxWwmIkmQYDYbXSSJYvkn6NWrV60NhoiopqR4toqoupjNRCQFUsxmk5YAv3cKn4jIKknwgXVENcFsJiKrJ8FsNmnhhhYtWsDd3b3KRkRkSXcfWGeo1cTSpUshCAJmzJih6ysqKsLkyZPh4eEBZ2dnhIeHIysrq2ZvRGQCZjMRWbvazObaYtJM0ttvv13hqd5ERNaktqb04+Li8OmnnyI4OFivPyIiAt9//z22bdsGlUqFKVOmYOjQoTh8+HD134zIBMxmIrJ2sr/c7rnnnkOjRo1qayxERDVXC1P6BQUFGDFiBNatW4fFixfr+vPy8rB+/Xps3rwZoaGhAICoqCi0bt0ax44dQ9euXav3hkQmYDYTkdWT8+V2vOaZiKTAmCn9fz9Dpri4uMpjTp48GU888QT69u2r1x8fHw+NRqPX36pVK/j5+eHo0aNm/2xE/8ZsJiIpkOLldkYXSXdX0CEismpGPLDO19cXKpVK1yIjIw0ebsuWLTh58mSl+2RmZkKhUMDNzU2v38vLC5mZmWb5OERVYTYTkSTI+WGyWq2VlnlERPcQRBGCgX843u1PTU2Fq6urrl+pVFa6f2pqKqZPn479+/fDwcHB/IMlqiFmMxFJgTHZbG1MWt2OiMjaGTOl7+rqqtcMFUnx8fG4fv06OnbsCDs7O9jZ2SE2NhYrV66EnZ0dvLy8UFJSgtzcXL3XZWVlQa1W1/InJSIikgYpXm5n0sINRERWz4w3hz722GM4e/asXt9LL72EVq1aYfbs2fD19YW9vT1iYmIQHh4OAEhMTERKSgpCQkJMHzsREZEcSXDhBhZJRCQr5lxm1MXFBW3atNHrc3JygoeHh65/7NixmDlzJtzd3eHq6oqpU6ciJCSEK9sRERH9TfZLgBMRWbuqpu5rY0p/+fLlsLGxQXh4OIqLixEWFobVq1eb/42IiIgkqq6z2RxYJBGRvNTylP6BAwf0fnZwcMCqVauwatWqmh+ciIhIjni5HRGR5Vnr1D0REVF9JbVsZpFEFTw7JQvdB+bBN7AYJUU2OH+iAda/4420pMqWQBax+MtkPBx6CwvGNMXRH1V1Pl45GjgoCU88dRleXoUAgKtXXfHVF61x4jdvAIC9fRnGTzyDR/ukwt6+DCfj1Fi1sgNyb3KZakErQtAaWGbUQD8RkVR5qDUY++Y1PNznFpSOWly7osT7Eb64eKaBpYcmazZb8mC3PhdlT7ugbJJ7eWdOGWzX3oTNyTvAHRFiE3uUPe8KsaeTZQdrBaSYzVwCHOVPLN+5c6dR+y5YsADt27ev1fFYWnBIIXZHP4AZTzbHnOcCYGsnYslXl6F0LKuw79Pj/4KVLm8vaX/95YiodW0wbeJjmD7pMZw+1QhzFx6Bn38eAODlSafxSNdriHy7K2ZH9Ib7A3fw1oKjlh20tZDgA+uIqCJm8/05q0rxwXcXUVYq4K2RARjfuyXWLvRBQZ6tpYcma0JiMWy/vwVtgL1ev927f0FI06B0YSNo1npD28MRdov/gnCpxEIjtSISzOZ6USTduHEDEydOhJ+fH5RKJdRqNcLCwnD48GEAQEZGBgYMGGDhUVqPN0cEYP9Wd1z90wGXzzvi/Rl+8GqiQfPgO3r7BTx0B+Gv3MAHM30tNFL5+u2oD0785o1r6S5IT3PBxs/boOiOHVoF5aCBkwaPD0jGuk/a4XRCI1y62BDLl3VGUJtstGydbemhW5wUn8VAVB8xm2tu2OTr+OuaAu9H+CExoQGyUpU4GeuCjKuVP/uNzOCOFnaRf6E0wgNw1v9ntHC+GNrBLhBbKQFve2hHuAFONhD+LLbMWK2IFLO5XlxuFx4ejpKSEmzYsAEBAQHIyspCTEwMsrPL/0HJhz5Wzcm1fAbpVu4/Z6aUjlq8vuoqVr3ZGDdv2Bt6KZmBjY2IHr3S4OBQhgvnPdC8+U3Y24tIiG+k2yct1RXXsxqgdVA2Ei94WHC0lifFFXSI6iNmc811fTwf8Qdc8OanVxAcUoi/Mu2wJ/oB7N1cv3OgNtl+lANtF0eIHR2BTXl628QgJWxib0PbxRFwtoFN7G1AI0LbjpfCSzGbZT+TlJubi4MHD+Ldd99Fnz594O/vj0ceeQRz5szBU089BaDilH5aWhqGDx8Od3d3ODk5oXPnzjh+/Hilx09KSkJAQACmTJkCUYbXnQmCiAlvp+Pcbw1wNdFR1//KgnScP+GEo/t4D1JtadosD9/u2YHvftyOKTNOYtH8EKRedUVD9yJoSmxQWKjQ2//mTSUauhdZaLRWRBSrbkRkccxm8/D2K8GTL2bjWrISbzzfDHs2PICJi9LR95kcSw9Nlmx+LYRwsQRlYxtWur10ridQKkIRngb7gSmwXZGN0vmeQGOeTJZiNst+JsnZ2RnOzs7YuXMnunbtCqWy6inogoIC9OrVC40bN8auXbugVqtx8uRJaLUVy9wzZ84gLCwMY8eOxeLFiys9XnFxMYqL/5lmzc/Pr9kHqmNTlqTDv1URXh0SqOvr+nge2ncvwKTHW1hwZPKXluqCKS/3g5OTBj0eTcOrs+Pw2szelh6W1ZPiA+uI6htms3kINsDFM46IWlq+qE/SuQZo2qoIT7yQjZ+3uVt4dDJzvRS2q3NQ+q4XoBAq3cU2Ohco1ELzbiNAZQvhyG3YLb6B0uVqiM0Ulb6mvpBiNst+JsnOzg7R0dHYsGED3Nzc0L17d7zxxhs4c+ZMpftv3rwZN27cwM6dO9GjRw8EBgZi2LBhCAkJ0dvvyJEj6N27N2bNmmXwSxgAIiMjoVKpdM3XVzr370x+Jw1d+uXjtf97EH9l/POXu333Ang3LcH2P87hh5TT+CHlNABg7rorWPbNJUsNV3ZKS22Qcc0Zly42RPT6tric5IbBQy/iZo4D7BVaODnp3wjasGExbuZwSl+K1z0T1TfMZvPIuW6Hq3/qf++nXlSiUWMuFGBuwsUSCLla2E3MgH3YVdiHXYXNmWLY7LwF+7CrwDUNbL+7hbJXPSB2dIT4oALaF9wgtlDC5rtblh6+xZkzmyMjI/Hwww/DxcUFjRo1wpAhQ5CYmKi3T1FRESZPngwPDw84OzsjPDwcWVlZJr2P7IskoPy652vXrmHXrl3o378/Dhw4gI4dOyI6OrrCvgkJCejQoQPc3Q2fgUlJSUG/fv0wb948vPrqq1W+95w5c5CXl6drqampNf04dUDE5HfS0K1/Hl575kFkpeqf4fv640aY8FgLTOz3TwOATxf44P0IaQaNFNjYiLC31+LixYbQaAS073hdt61xk1to5HUbF87zOnQpTukT1UfM5po7H+cE3wf1FwVoHFCM6+n1e9aiNogdHKBZ643ST/5p2hYKaEOdUPqJN4Ti8nwRhX/NMtnAaldvq1NmzObY2FhMnjwZx44dw/79+6HRaPD444+jsLBQt09ERAR2796Nbdu2ITY2FteuXcPQoUNNep96USQBgIODA/r164e5c+fiyJEjGD16NObPn19hP0dHx0perc/T0xOPPPIIvvrqq/tO0SuVSri6uuo1azdlSTpCh97E0sn+uFNgg4aeGjT01EDhUF7q37xhj6uJjnoNAK6nKyoUVFQ9o8eeRZu2N9DIqxBNm+Vh9NizaNvuBg7E+OF2oT1+2tsM4yeeQXD76whsfhMRr8Xh/O/u9X7RBuCfKX1DjYisB7O5Zrav9USrjoV4bmoWfJoWo8/TNzFwZA52RT1g6aHJTwMbiM0Ueg0OAuD6d7+vPUQfO9h9mA3hj2LgmgY22/IhnCyCthufWWXObP7xxx8xevRoPPTQQ2jXrh2io6ORkpKC+Ph4AEBeXh7Wr1+PDz74AKGhoejUqROioqJw5MgRHDt2zOj3qTdF0r8FBQXpVZx3BQcHIyEhATk5hm96dHR0xJ49e+Dg4ICwsDDcuiWvadRBo7PhrNLive1J2HL6vK71eirX0kOrN1QNi/Hq63FYF70PS/77PzRveRNzX++JU/FeAIC1q9vht2PeeHP+USxbfgA3cxzwzvxuFh61deDldkTSxWw2zZ+nG2Dh2GboPSQXn/6SiOdnZOGTeT74dUflCwtQLbIToHmn/F4ku7nXYf9KBmx+LkDZfzwgdrl/kS93xmRzfn6+Xrv3vsGq5OWVrzJ4d6Y5Pj4eGo0Gffv21e3TqlUr+Pn54ehR458pKfuFG7Kzs/HMM89gzJgxCA4OhouLC06cOIFly5Zh8ODBFfYfPnw4lixZgiFDhiAyMhLe3t44deoUfHx89K59dnJywvfff48BAwZgwIAB+PHHH+Hs7FyXH63WhPm0q5PXkGEfvte5yu0ajS1Wr+yA1Ss71NGIJEQrljdD24jI4pjN5nP8Z1cc/1maM2FSV/r+v5apb2JfvpodVWRENv/73sD58+djwYIFVR9Wq8WMGTPQvXt3tGnTBgCQmZkJhUIBNzc3vX29vLyQmZlp9JBlXyQ5OzujS5cuWL58OZKSkqDRaODr64vx48fjjTfeqLC/QqHATz/9hFdffRUDBw5EaWkpgoKCsGrVqkqPvXfvXoSFheGJJ57ADz/8ACcnp7r4WERkSFVP72aNRGQVmM1E9YwR2Zyamqp36ev9Vr0EgMmTJ+PcuXM4dOhQzcf4L4Io5wcIWKH8/HyoVCr0xmDYCVw33xJsWze39BDqrdKyYsQkfoC8vDyz3wNw9+9W98cWwM6u8lX+SkuLcDhmQa28PxFJF7PZ8kr2+1t6CPVaaWExjgz+2Oz5WJvZPGXKFHz33Xf43//+h2bNmun6f/nlFzz22GO4efOm3mySv78/ZsyYgYiICKOOX2/vSSIieeLCDURERNbFnNksiiKmTJmCHTt24JdfftErkACgU6dOsLe3R0xMjK4vMTERKSkpFR4bUBXZX25HRPUML7cjIiKyLmbM5smTJ2Pz5s347rvv4OLiorvPSKVSwdHRESqVCmPHjsXMmTPh7u4OV1dXTJ06FSEhIejatavR78MiiYhkRSgTIRg4LSWUsUoiIiKqa+bM5jVr1gAAevfurdcfFRWF0aNHAwCWL18OGxsbhIeHo7i4GGFhYVi9erVJ78MiiYhkRRBFCAZutTTUT0RERLXHnNlszHIKDg4OWLVqVaWLuxiLRRIRyQsvtyMiIrIuEsxmFklEJCuCVoRg4FkMhvqJiIio9kgxm1kkEZG8iGJ5M7SNiIiI6pYEs5lFEhHJiqAtb4a2ERERUd2SYjazSCIiedGK5c3QNiIiIqpbEsxmFklEJCtc3Y6IiMi6SDGbWSQRkbxI8LpnIiIiWZNgNrNIIiJZEbSiwQfTWesKOkRERHImxWxmkURE8iKiirNVdToSIiIiAiSZzSySiEheJDilT0REJGsSzGYbSw+AiMichDKxymaKNWvWIDg4GK6urnB1dUVISAj27t2r215UVITJkyfDw8MDzs7OCA8PR1ZWlrk/EhERkaSZM5vrCoskIpKXu2erDDUTNGnSBEuXLkV8fDxOnDiB0NBQDB48GL///jsAICIiArt378a2bdsQGxuLa9euYejQobXxqYiIiKTLjNlcV3i5HRHJixmn9AcNGqT38zvvvIM1a9bg2LFjaNKkCdavX4/NmzcjNDQUABAVFYXWrVvj2LFj6Nq1a7WGT0REJDu83I6IyMLKxKobgPz8fL1WXFx8/8OWlWHLli0oLCxESEgI4uPjodFo0LdvX90+rVq1gp+fH44ePVprH4+IiEhyjMhma8MiiYhk5e4D6ww1APD19YVKpdK1yMhIg8c7e/YsnJ2doVQqMWHCBOzYsQNBQUHIzMyEQqGAm5ub3v5eXl7IzMyszY9IREQkKcZks7Xh5XZEJC9GTOmnpqbC1dVV161UKg0ermXLlkhISEBeXh6++eYbjBo1CrGxsWYdMhERkaxJ8HI7FklEJC9lWgDaKrZBt1qdMRQKBQIDAwEAnTp1QlxcHD788EM8++yzKCkpQW5urt5sUlZWFtRqdU0+ARERkbwYkc3WhpfbEZHMVLV6Ts3PVmm1WhQXF6NTp06wt7dHTEyMbltiYiJSUlIQEhJS4/chIiKSj9rN5trAmSQikhczTunPmTMHAwYMgJ+fH27duoXNmzfjwIED2LdvH1QqFcaOHYuZM2fC3d0drq6umDp1KkJCQriyHRER0b14uR0RkYWVlQFiWeXbtAb6Dbh+/TpefPFFZGRkQKVSITg4GPv27UO/fv0AAMuXL4eNjQ3Cw8NRXFyMsLAwrF69uqafgIiISF7MmM11hUUSEcmLGc9WrV+/vsrtDg4OWLVqFVatWmXScYmIiOoVziQREVmYtorrm7XW+UVMREQkaxLMZhZJRCQvWhEGV9Cx0i9iIiIiWZNgNrNIIiJ5keCUPhERkaxJMJtZJBGRvGireBaD1jqfxUBERCRrEsxmFklEJC8S/CImIiKSNQlmM4skIpIXCd4cSkREJGsSzGYWSUQkK6KohShWflbKUD8RERHVHilmM4skIpIXrRYw9IVrpV/EREREsibBbGaRRETyotUCgrS+iImIiGRNgtnMIomI5EWs4rpnK11mlIiISNYkmM0skohIVsSyMohCWeXbxMr7iYiIqPZIMZtZJBGRvGhFQJDW2SoiIiJZk2A2s0giInkRRRh8FoOVfhETERHJmgSzmUUSEclK+ZS+TeXbrHRKn4iISM6kmM0skohIVkStCNHAlL5opWeriIiI5EyK2cwiqY7d/R+hFBqDi3xQ7RLLii09hHqr9O/ffW1+IZaKxQaXEy2Fptbel4iki9lseaWFzGZLKr1dAqD28lmK2cwiqY7dunULAHAIP1h4JPVYoqUHQLdu3YJKpTLrMRUKBdRqNQ5lVv13S61WQ6FQmPW9iUjamM1WYLClB0CA+fNZytksiNY6xyVTWq0W165dg4uLCwRBsPRwTJafnw9fX1+kpqbC1dXV0sOpd6T++xdFEbdu3YKPjw9sbCq/NrkmioqKUFJSUuU+CoUCDg4OZn9vIpIuZjPVlNT/G9RmPks1m1kkkUny8/OhUqmQl5cnyS8BqePvn4iI/o3ZYHn8byA/5j+VS0REREREJGEskoiIiIiIiO7BIolMolQqMX/+fCiVSksPpV7i75+IiP6N2WB5/G8gP7wniYiIiIiI6B6cSSIiIiIiIroHiyQiIiIiIqJ7sEgiIiIiIiK6B4skqpYDBw5AEATk5uZWuV/Tpk2xYsWKOhmTXAmCgJ07dxq174IFC9C+fftaHQ8REVknZnPdYTbLH4skmRk9ejSGDBlSod/YL87qio6OhpubW60cW+5u3LiBiRMnws/PD0qlEmq1GmFhYTh8+DAAICMjAwMGDLDwKImIqLqYzdLDbCY7Sw+AqL4LDw9HSUkJNmzYgICAAGRlZSEmJgbZ2dkAALVabeEREhER1S/MZuJMUj116NAh9OzZE46OjvD19cW0adNQWFio2/7FF1+gc+fOcHFxgVqtxvPPP4/r169XeqwDBw7gpZdeQl5eHgRBgCAIWLBggW777du3MWbMGLi4uMDPzw9r167VbQsNDcWUKVP0jnfjxg0oFArExMSY90NbodzcXBw8eBDvvvsu+vTpA39/fzzyyCOYM2cOnnrqKQAVp/TT0tIwfPhwuLu7w8nJCZ07d8bx48crPX5SUhICAgIwZcoUcLV/IiLrxmy2DsxmAlgk1UtJSUno378/wsPDcebMGXz99dc4dOiQ3heiRqPBokWLcPr0aezcuRNXrlzB6NGjKz1et27dsGLFCri6uiIjIwMZGRmYNWuWbvv777+Pzp0749SpU5g0aRImTpyIxMREAMC4ceOwefNmFBcX6/b/8ssv0bhxY4SGhtbOL8CKODs7w9nZGTt37tT7HRhSUFCAXr16IT09Hbt27cLp06fx2muvQavVVtj3zJkz6NGjB55//nl8/PHHEAShNj4CERGZAbPZejCbCQAgkqyMGjVKtLW1FZ2cnPSag4ODCEC8efOmOHbsWPHll1/We93BgwdFGxsb8c6dO5UeNy4uTgQg3rp1SxRFUfz11191xxNFUYyKihJVKlWF1/n7+4sjR47U/azVasVGjRqJa9asEUVRFO/cuSM2bNhQ/Prrr3X7BAcHiwsWLKjJr0FSvvnmG7Fhw4aig4OD2K1bN3HOnDni6dOnddsBiDt27BBFURQ//fRT0cXFRczOzq70WPPnzxfbtWsnHj58WGzYsKH43nvv1cVHICKiKjCbpYfZTJxJkqE+ffogISFBr3322We67adPn0Z0dLTuTImzszPCwsKg1WqRnJwMAIiPj8egQYPg5+cHFxcX9OrVCwCQkpJi8niCg4N1fxYEAWq1Wnd5gIODA1544QV8/vnnAICTJ0/i3LlzBs+MyVF4eDiuXbuGXbt2oX///jhw4AA6duyI6OjoCvsmJCSgQ4cOcHd3N3i8lJQU9OvXD/PmzcOrr75aiyMnIiJjMZulhdlMXLhBhpycnBAYGKjXl5aWpvtzQUEBXnnlFUybNq3Ca/38/FBYWIiwsDCEhYVh06ZN8PT0REpKCsLCwlBSUmLyeOzt7fV+FgRBbwp63LhxaN++PdLS0hAVFYXQ0FD4+/ub/D5S5uDggH79+qFfv36YO3cuxo0bh/nz51cIJEdHx/sey9PTEz4+Pvjqq68wZswYuLq61tKoiYjIWMxm6WE212+cSaqHOnbsiPPnzyMwMLBCUygU+OOPP5CdnY2lS5eiZ8+eaNWqlcEbQ+9SKBQoKyur1njatm2Lzp07Y926ddi8eTPGjBlTrePISVBQkN7NuncFBwcjISEBOTk5Bl/r6OiIPXv2wMHBAWFhYbh161ZtDpWIiMyA2Wz9mM31C4ukemj27Nk4cuQIpkyZgoSEBFy8eBHfffed7uZQPz8/KBQKfPTRR7h8+TJ27dqFRYsWVXnMpk2boqCgADExMfjrr79w+/Ztk8Y0btw4LF26FKIo4umnn672Z5Oa7OxshIaG4ssvv8SZM2eQnJyMbdu2YdmyZRg8eHCF/YcPHw61Wo0hQ4bg8OHDuHz5Mr799lscPXpUbz8nJyd8//33sLOzw4ABA1BQUFBXH4mIiKqB2Ww9mM0EsEiql4KDgxEbG4s///wTPXv2RIcOHTBv3jz4+PgAKJ8Sjo6OxrZt2xAUFISlS5fivffeq/KY3bp1w4QJE/Dss8/C09MTy5YtM2lMw4cPh52dHYYPHw4HB4dqfzapcXZ2RpcuXbB8+XI8+uijaNOmDebOnYvx48fj448/rrC/QqHATz/9hEaNGmHgwIFo27Ytli5dCltb20qPvXfvXoiiiCeeeKLSs19ERGQdmM3Wg9lMACCIIhdoJ8u7cuUKHnzwQcTFxaFjx46WHg4REVG9x2ym+oxFElmURqNBdnY2Zs2aheTkZBw+fNjSQyIiIqrXmM1EvNyOLOzw4cPw9vZGXFwcPvnkE0sPh4iIqN5jNhNxJomIiIiIiEgPZ5KIiIiIiIjuwSKJiIiIiIjoHiySiIiIiIiI7sEiiYiIiIiI6B4skoiIiIiIiO7BIoms0ujRozFkyBDdz71798aMGTPqfBwHDhyAIAjIzc01uI8gCNi5c6fRx1ywYAHat29fo3FduXIFgiAgISGhRschIiIyFrO5asxmeWGRREYbPXo0BEGAIAhQKBQIDAzEwoULUVpaWuvvvX37dixatMiofY358iQiIpIDZjNR7bCz9ABIWvr374+oqCgUFxfjhx9+wOTJk2Fvb485c+ZU2LekpAQKhcIs7+vu7m6W4xAREckNs5nI/DiTRCZRKpVQq9Xw9/fHxIkT0bdvX+zatQvAP9Pw77zzDnx8fNCyZUsAQGpqKoYNGwY3Nze4u7tj8ODBuHLliu6YZWVlmDlzJtzc3ODh4YHXXnsN/37G8b+n9IuLizF79mz4+vpCqVQiMDAQ69evx5UrV9CnTx8AQMOGDSEIAkaPHg0A0Gq1iIyMRLNmzeDo6Ih27drhm2++0XufH374AS1atICjoyP69OmjN05jzZ49Gy1atECDBg0QEBCAuXPnQqPRVNjv008/ha+vLxo0aIBhw4YhLy9Pb/tnn32G1q1bw8HBAa1atcLq1atNHgsREckfs/n+mM1kKhZJVCOOjo4oKSnR/RwTE4PExETs378fe/bsgUajQVhYGFxcXHDw4EEcPnwYzs7O6N+/v+5177//PqKjo/H555/j0KFDyMnJwY4dO6p83xdffBFfffUVVq5ciQsXLuDTTz+Fs7MzfH198e233wIAEhMTkZGRgQ8//BAAEBkZiY0bN+KTTz7B77//joiICIwcORKxsbEAygNj6NChGDRoEBISEjBu3Di8/vrrJv9OXFxcEB0djfPnz+PDDz/EunXrsHz5cr19Ll26hK1bt2L37t348ccfcerUKUyaNEm3fdOmTZg3bx7eeecdXLhwAUuWLMHcuXOxYcMGk8dDRET1C7O5ImYzmUwkMtKoUaPEwYMHi6IoilqtVty/f7+oVCrFWbNm6bZ7eXmJxcXFutd88cUXYsuWLUWtVqvrKy4uFh0dHcV9+/aJoiiK3t7e4rJly3TbNRqN2KRJE917iaIo9urVS5w+fbooiqKYmJgoAhD3799f6Th//fVXEYB48+ZNXV9RUZHYoEED8ciRI3r7jh07Vhw+fLgoiqI4Z84cMSgoSG/77NmzKxzr3wCIO3bsMLj9v//9r9ipUyfdz/PnzxdtbW3FtLQ0Xd/evXtFGxsbMSMjQxRFUXzwwQfFzZs36x1n0aJFYkhIiCiKopicnCwCEE+dOmXwfYmISP6YzZVjNlNN8Z4kMsmePXvg7OwMjUYDrVaL559/HgsWLNBtb9u2rd61zqdPn8alS5fg4uKid5yioiIkJSUhLy8PGRkZ6NKli26bnZ0dOnfuXGFa/66EhATY2tqiV69eRo/70qVLuH37Nvr166fXX1JSgg4dOgAALly4oDcOAAgJCTH6Pe76+uuvsXLlSiQlJaGgoAClpaVwdXXV28fPzw+NGzfWex+tVovExES4uLggKSkJY8eOxfjx43X7lJaWQqVSmTweIiKSN2bz/TGbyVQsksgkffr0wZo1a6BQKODj4wM7O/3/hZycnPR+LigoQKdOnbBp06YKx/L09KzWGBwdHU1+TUFBAQDg+++/1/sCBMqv5TaXo0ePYsSIEXj77bcRFhYGlUqFLVu24P333zd5rOvWrasQDLa2tmYbKxERyQOzuWrMZqoOFklkEicnJwQGBhq9f8eOHfH111+jUaNGFc7Y3OXt7Y3jx4/j0UcfBVB+ViY+Ph4dO3asdP+2bdtCq9UiNjYWffv2rbD97tmysrIyXV9QUBCUSiVSUlIMnuVq3bq17kbXu44dO3b/D3mPI0eOwN/fH2+++aau7+rVqxX2S0lJwbVr1+Dj46N7HxsbG7Rs2RJeXl7w8fHB5cuXMWLECJPen4iI6h9mc9WYzVQdXLiBatWIESPwwAMPYPDgwTh48CCSk5Nx4MABTJs2DWlpaQCA6dOnY+nSpdi5cyf++OMPTJo0qcrnKDRt2hSjRo3CmDFjsHPnTt0xt27dCgDw9/eHIAjYs2cPbty4gYKCAri4uGDWrFmIiIjAhg0bkJSUhJMnT+Kjjz7S3XA5YcIEXLx4Ef/5z3+QmJiIzZs3Izo62qTP27x5c6SkpGDLli1ISkrCypUrK73R1cHBAaNGjcLp06dx8OBBTJs2DcOGDYNarQYAvP3224iMjMTKlSvx559/4uzZs4iKisIHH3xg0niIiIj+jdnMbCYjWPqmKJKOe28ONWV7RkaG+OKLL4oPPPCAqFQqxYCAAHH8+PFiXl6eKIrlN4NOnz5ddHV1Fd3c3MSZM2eKL774osGbQ0VRFO/cuSNGRESI3t7eokKhEAMDA8XPP/9ct33hwoWiWq0WBUEQR40aJYpi+Q2tK1asEFu2bCna29uLnp6eYlhYmBgbG6t73e7du8XAwEBRqVSKPXv2FD///HOTbw79z3/+I3p4eIjOzs7is88+Ky5fvlxUqVS67fPnzxfbtWsnrl69WvTx8REdHBzE//u//xNzcnL0jrtp0yaxffv2okKhEBs2bCg++uij4vbt20VR5M2hRERUjtlcOWYz1ZQgigbuwCMiIiIiIqqHeLkdERERERHRPVgkERERERER3YNFEhERERER0T1YJBEREREREd2DRRIREREREdE9WCQRERERERHdg0USERERERHRPVgkERERERER3YNFEhERERER0T1YJBEREREREd2DRRIREREREdE9/h8L735ub4J+TgAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import ConfusionMatrixDisplay\n",
"import matplotlib.pyplot as plt\n",
"\n",
"_, ax = plt.subplots(int(len(class_models) / 2), 2, figsize=(12, 10), sharex=False, sharey=False)\n",
"for index, key in enumerate(class_models.keys()):\n",
" c_matrix = class_models[key][\"Confusion_matrix\"]\n",
" disp = ConfusionMatrixDisplay(\n",
" confusion_matrix=c_matrix, display_labels=[\"Healthy\", \"Sick\"]\n",
" ).plot(ax=ax.flat[index])\n",
" disp.ax_.set_title(key)\n",
"\n",
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.1)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Точность, полнота, верность (аккуратность), F-мера"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Precision_train | \n",
" Precision_test | \n",
" Recall_train | \n",
" Recall_test | \n",
" Accuracy_train | \n",
" Accuracy_test | \n",
" F1_train | \n",
" F1_test | \n",
"
\n",
" \n",
" \n",
" \n",
" naive_bayes | \n",
" 0.564516 | \n",
" 0.628571 | \n",
" 0.327103 | \n",
" 0.407407 | \n",
" 0.677524 | \n",
" 0.707792 | \n",
" 0.414201 | \n",
" 0.494382 | \n",
"
\n",
" \n",
" ridge | \n",
" 0.494382 | \n",
" 0.552632 | \n",
" 0.616822 | \n",
" 0.777778 | \n",
" 0.646580 | \n",
" 0.701299 | \n",
" 0.548857 | \n",
" 0.646154 | \n",
"
\n",
" \n",
" knn | \n",
" 0.670807 | \n",
" 0.551020 | \n",
" 0.504673 | \n",
" 0.500000 | \n",
" 0.741042 | \n",
" 0.681818 | \n",
" 0.576000 | \n",
" 0.524272 | \n",
"
\n",
" \n",
" random_forest | \n",
" 0.955157 | \n",
" 0.535714 | \n",
" 0.995327 | \n",
" 0.555556 | \n",
" 0.982085 | \n",
" 0.675325 | \n",
" 0.974828 | \n",
" 0.545455 | \n",
"
\n",
" \n",
" logistic | \n",
" 0.618644 | \n",
" 0.525000 | \n",
" 0.341121 | \n",
" 0.388889 | \n",
" 0.697068 | \n",
" 0.662338 | \n",
" 0.439759 | \n",
" 0.446809 | \n",
"
\n",
" \n",
" gradient_boosting | \n",
" 0.920213 | \n",
" 0.512195 | \n",
" 0.808411 | \n",
" 0.388889 | \n",
" 0.908795 | \n",
" 0.655844 | \n",
" 0.860697 | \n",
" 0.442105 | \n",
"
\n",
" \n",
" decision_tree | \n",
" 0.718615 | \n",
" 0.459016 | \n",
" 0.775701 | \n",
" 0.518519 | \n",
" 0.815961 | \n",
" 0.616883 | \n",
" 0.746067 | \n",
" 0.486957 | \n",
"
\n",
" \n",
" mlp | \n",
" 0.409195 | \n",
" 0.417391 | \n",
" 0.831776 | \n",
" 0.888889 | \n",
" 0.522801 | \n",
" 0.525974 | \n",
" 0.548536 | \n",
" 0.568047 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
" [\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" \"Accuracy_train\",\n",
" \"Accuracy_test\",\n",
" \"F1_train\",\n",
" \"F1_test\",\n",
" ]\n",
"]\n",
"class_metrics.sort_values(\n",
" by=\"Accuracy_test\", ascending=False\n",
").style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ROC-кривая, каппа Коэна, коэффициент корреляции Мэтьюса"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Accuracy_test | \n",
" F1_test | \n",
" ROC_AUC_test | \n",
" Cohen_kappa_test | \n",
" MCC_test | \n",
"
\n",
" \n",
" \n",
" \n",
" ridge | \n",
" 0.701299 | \n",
" 0.646154 | \n",
" 0.767037 | \n",
" 0.400271 | \n",
" 0.417827 | \n",
"
\n",
" \n",
" logistic | \n",
" 0.662338 | \n",
" 0.446809 | \n",
" 0.766296 | \n",
" 0.211501 | \n",
" 0.216434 | \n",
"
\n",
" \n",
" naive_bayes | \n",
" 0.707792 | \n",
" 0.494382 | \n",
" 0.753704 | \n",
" 0.301834 | \n",
" 0.315869 | \n",
"
\n",
" \n",
" knn | \n",
" 0.681818 | \n",
" 0.524272 | \n",
" 0.745556 | \n",
" 0.286093 | \n",
" 0.286855 | \n",
"
\n",
" \n",
" mlp | \n",
" 0.525974 | \n",
" 0.568047 | \n",
" 0.729074 | \n",
" 0.173747 | \n",
" 0.240181 | \n",
"
\n",
" \n",
" random_forest | \n",
" 0.675325 | \n",
" 0.545455 | \n",
" 0.715093 | \n",
" 0.293059 | \n",
" 0.293176 | \n",
"
\n",
" \n",
" gradient_boosting | \n",
" 0.655844 | \n",
" 0.442105 | \n",
" 0.709630 | \n",
" 0.199961 | \n",
" 0.203926 | \n",
"
\n",
" \n",
" decision_tree | \n",
" 0.616883 | \n",
" 0.486957 | \n",
" 0.612870 | \n",
" 0.183061 | \n",
" 0.183927 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
" [\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" \"ROC_AUC_test\",\n",
" \"Cohen_kappa_test\",\n",
" \"MCC_test\",\n",
" ]\n",
"]\n",
"class_metrics.sort_values(by=\"ROC_AUC_test\", ascending=False).style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\n",
" \"ROC_AUC_test\",\n",
" \"MCC_test\",\n",
" \"Cohen_kappa_test\",\n",
" ],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'ridge'"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"best_model = str(class_metrics.sort_values(by=\"MCC_test\", ascending=False).iloc[0].name)\n",
"\n",
"display(best_model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод данных с ошибкой предсказания для оценки"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Error items count: 46'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Predicted | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 30 | \n",
" 5 | \n",
" 1 | \n",
" 109 | \n",
" 75 | \n",
" 26 | \n",
" 0 | \n",
" 36.0 | \n",
" 0.546 | \n",
" 60 | \n",
" 0 | \n",
"
\n",
" \n",
" 82 | \n",
" 7 | \n",
" 1 | \n",
" 83 | \n",
" 78 | \n",
" 26 | \n",
" 71 | \n",
" 29.3 | \n",
" 0.767 | \n",
" 36 | \n",
" 0 | \n",
"
\n",
" \n",
" 86 | \n",
" 13 | \n",
" 1 | \n",
" 106 | \n",
" 72 | \n",
" 54 | \n",
" 0 | \n",
" 36.6 | \n",
" 0.178 | \n",
" 45 | \n",
" 0 | \n",
"
\n",
" \n",
" 91 | \n",
" 4 | \n",
" 1 | \n",
" 123 | \n",
" 80 | \n",
" 15 | \n",
" 176 | \n",
" 32.0 | \n",
" 0.443 | \n",
" 34 | \n",
" 0 | \n",
"
\n",
" \n",
" 95 | \n",
" 6 | \n",
" 1 | \n",
" 144 | \n",
" 72 | \n",
" 27 | \n",
" 228 | \n",
" 33.9 | \n",
" 0.255 | \n",
" 40 | \n",
" 0 | \n",
"
\n",
" \n",
" 176 | \n",
" 6 | \n",
" 1 | \n",
" 85 | \n",
" 78 | \n",
" 0 | \n",
" 0 | \n",
" 31.2 | \n",
" 0.382 | \n",
" 42 | \n",
" 0 | \n",
"
\n",
" \n",
" 201 | \n",
" 1 | \n",
" 1 | \n",
" 138 | \n",
" 82 | \n",
" 0 | \n",
" 0 | \n",
" 40.1 | \n",
" 0.236 | \n",
" 28 | \n",
" 0 | \n",
"
\n",
" \n",
" 204 | \n",
" 6 | \n",
" 1 | \n",
" 103 | \n",
" 72 | \n",
" 32 | \n",
" 190 | \n",
" 37.7 | \n",
" 0.324 | \n",
" 55 | \n",
" 0 | \n",
"
\n",
" \n",
" 223 | \n",
" 7 | \n",
" 1 | \n",
" 142 | \n",
" 60 | \n",
" 33 | \n",
" 190 | \n",
" 28.8 | \n",
" 0.687 | \n",
" 61 | \n",
" 0 | \n",
"
\n",
" \n",
" 228 | \n",
" 4 | \n",
" 1 | \n",
" 197 | \n",
" 70 | \n",
" 39 | \n",
" 744 | \n",
" 36.7 | \n",
" 2.329 | \n",
" 31 | \n",
" 0 | \n",
"
\n",
" \n",
" 233 | \n",
" 4 | \n",
" 1 | \n",
" 122 | \n",
" 68 | \n",
" 0 | \n",
" 0 | \n",
" 35.0 | \n",
" 0.394 | \n",
" 29 | \n",
" 0 | \n",
"
\n",
" \n",
" 266 | \n",
" 0 | \n",
" 0 | \n",
" 138 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 36.3 | \n",
" 0.933 | \n",
" 25 | \n",
" 1 | \n",
"
\n",
" \n",
" 274 | \n",
" 13 | \n",
" 1 | \n",
" 106 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 34.2 | \n",
" 0.251 | \n",
" 52 | \n",
" 0 | \n",
"
\n",
" \n",
" 280 | \n",
" 0 | \n",
" 0 | \n",
" 146 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 37.9 | \n",
" 0.334 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 282 | \n",
" 7 | \n",
" 1 | \n",
" 133 | \n",
" 88 | \n",
" 15 | \n",
" 155 | \n",
" 32.4 | \n",
" 0.262 | \n",
" 37 | \n",
" 0 | \n",
"
\n",
" \n",
" 302 | \n",
" 5 | \n",
" 1 | \n",
" 77 | \n",
" 82 | \n",
" 41 | \n",
" 42 | \n",
" 35.8 | \n",
" 0.156 | \n",
" 35 | \n",
" 0 | \n",
"
\n",
" \n",
" 309 | \n",
" 2 | \n",
" 0 | \n",
" 124 | \n",
" 68 | \n",
" 28 | \n",
" 205 | \n",
" 32.9 | \n",
" 0.875 | \n",
" 30 | \n",
" 1 | \n",
"
\n",
" \n",
" 335 | \n",
" 0 | \n",
" 1 | \n",
" 165 | \n",
" 76 | \n",
" 43 | \n",
" 255 | \n",
" 47.9 | \n",
" 0.259 | \n",
" 26 | \n",
" 0 | \n",
"
\n",
" \n",
" 358 | \n",
" 12 | \n",
" 1 | \n",
" 88 | \n",
" 74 | \n",
" 40 | \n",
" 54 | \n",
" 35.3 | \n",
" 0.378 | \n",
" 48 | \n",
" 0 | \n",
"
\n",
" \n",
" 364 | \n",
" 4 | \n",
" 1 | \n",
" 147 | \n",
" 74 | \n",
" 25 | \n",
" 293 | \n",
" 34.9 | \n",
" 0.385 | \n",
" 30 | \n",
" 0 | \n",
"
\n",
" \n",
" 379 | \n",
" 0 | \n",
" 1 | \n",
" 93 | \n",
" 100 | \n",
" 39 | \n",
" 72 | \n",
" 43.4 | \n",
" 1.021 | \n",
" 35 | \n",
" 0 | \n",
"
\n",
" \n",
" 397 | \n",
" 0 | \n",
" 0 | \n",
" 131 | \n",
" 66 | \n",
" 40 | \n",
" 0 | \n",
" 34.3 | \n",
" 0.196 | \n",
" 22 | \n",
" 1 | \n",
"
\n",
" \n",
" 405 | \n",
" 2 | \n",
" 1 | \n",
" 123 | \n",
" 48 | \n",
" 32 | \n",
" 165 | \n",
" 42.1 | \n",
" 0.520 | \n",
" 26 | \n",
" 0 | \n",
"
\n",
" \n",
" 406 | \n",
" 4 | \n",
" 0 | \n",
" 115 | \n",
" 72 | \n",
" 0 | \n",
" 0 | \n",
" 28.9 | \n",
" 0.376 | \n",
" 46 | \n",
" 1 | \n",
"
\n",
" \n",
" 442 | \n",
" 4 | \n",
" 1 | \n",
" 117 | \n",
" 64 | \n",
" 27 | \n",
" 120 | \n",
" 33.2 | \n",
" 0.230 | \n",
" 24 | \n",
" 0 | \n",
"
\n",
" \n",
" 486 | \n",
" 1 | \n",
" 1 | \n",
" 139 | \n",
" 62 | \n",
" 41 | \n",
" 480 | \n",
" 40.7 | \n",
" 0.536 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 515 | \n",
" 3 | \n",
" 0 | \n",
" 163 | \n",
" 70 | \n",
" 18 | \n",
" 105 | \n",
" 31.6 | \n",
" 0.268 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 517 | \n",
" 7 | \n",
" 1 | \n",
" 125 | \n",
" 86 | \n",
" 0 | \n",
" 0 | \n",
" 37.6 | \n",
" 0.304 | \n",
" 51 | \n",
" 0 | \n",
"
\n",
" \n",
" 583 | \n",
" 8 | \n",
" 1 | \n",
" 100 | \n",
" 76 | \n",
" 0 | \n",
" 0 | \n",
" 38.7 | \n",
" 0.190 | \n",
" 42 | \n",
" 0 | \n",
"
\n",
" \n",
" 594 | \n",
" 6 | \n",
" 1 | \n",
" 123 | \n",
" 72 | \n",
" 45 | \n",
" 230 | \n",
" 33.6 | \n",
" 0.733 | \n",
" 34 | \n",
" 0 | \n",
"
\n",
" \n",
" 622 | \n",
" 6 | \n",
" 1 | \n",
" 183 | \n",
" 94 | \n",
" 0 | \n",
" 0 | \n",
" 40.8 | \n",
" 1.461 | \n",
" 45 | \n",
" 0 | \n",
"
\n",
" \n",
" 630 | \n",
" 7 | \n",
" 0 | \n",
" 114 | \n",
" 64 | \n",
" 0 | \n",
" 0 | \n",
" 27.4 | \n",
" 0.732 | \n",
" 34 | \n",
" 1 | \n",
"
\n",
" \n",
" 634 | \n",
" 10 | \n",
" 1 | \n",
" 92 | \n",
" 62 | \n",
" 0 | \n",
" 0 | \n",
" 25.9 | \n",
" 0.167 | \n",
" 31 | \n",
" 0 | \n",
"
\n",
" \n",
" 646 | \n",
" 1 | \n",
" 0 | \n",
" 167 | \n",
" 74 | \n",
" 17 | \n",
" 144 | \n",
" 23.4 | \n",
" 0.447 | \n",
" 33 | \n",
" 1 | \n",
"
\n",
" \n",
" 658 | \n",
" 11 | \n",
" 1 | \n",
" 127 | \n",
" 106 | \n",
" 0 | \n",
" 0 | \n",
" 39.0 | \n",
" 0.190 | \n",
" 51 | \n",
" 0 | \n",
"
\n",
" \n",
" 669 | \n",
" 9 | \n",
" 1 | \n",
" 154 | \n",
" 78 | \n",
" 30 | \n",
" 100 | \n",
" 30.9 | \n",
" 0.164 | \n",
" 45 | \n",
" 0 | \n",
"
\n",
" \n",
" 674 | \n",
" 8 | \n",
" 1 | \n",
" 91 | \n",
" 82 | \n",
" 0 | \n",
" 0 | \n",
" 35.6 | \n",
" 0.587 | \n",
" 68 | \n",
" 0 | \n",
"
\n",
" \n",
" 676 | \n",
" 9 | \n",
" 0 | \n",
" 156 | \n",
" 86 | \n",
" 0 | \n",
" 0 | \n",
" 24.8 | \n",
" 0.230 | \n",
" 53 | \n",
" 1 | \n",
"
\n",
" \n",
" 682 | \n",
" 0 | \n",
" 1 | \n",
" 95 | \n",
" 64 | \n",
" 39 | \n",
" 105 | \n",
" 44.6 | \n",
" 0.366 | \n",
" 22 | \n",
" 0 | \n",
"
\n",
" \n",
" 699 | \n",
" 4 | \n",
" 1 | \n",
" 118 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 44.5 | \n",
" 0.904 | \n",
" 26 | \n",
" 0 | \n",
"
\n",
" \n",
" 702 | \n",
" 1 | \n",
" 0 | \n",
" 168 | \n",
" 88 | \n",
" 29 | \n",
" 0 | \n",
" 35.0 | \n",
" 0.905 | \n",
" 52 | \n",
" 1 | \n",
"
\n",
" \n",
" 723 | \n",
" 5 | \n",
" 1 | \n",
" 117 | \n",
" 86 | \n",
" 30 | \n",
" 105 | \n",
" 39.1 | \n",
" 0.251 | \n",
" 42 | \n",
" 0 | \n",
"
\n",
" \n",
" 725 | \n",
" 4 | \n",
" 1 | \n",
" 112 | \n",
" 78 | \n",
" 40 | \n",
" 0 | \n",
" 39.4 | \n",
" 0.236 | \n",
" 38 | \n",
" 0 | \n",
"
\n",
" \n",
" 730 | \n",
" 3 | \n",
" 0 | \n",
" 130 | \n",
" 78 | \n",
" 23 | \n",
" 79 | \n",
" 28.4 | \n",
" 0.323 | \n",
" 34 | \n",
" 1 | \n",
"
\n",
" \n",
" 744 | \n",
" 13 | \n",
" 1 | \n",
" 153 | \n",
" 88 | \n",
" 37 | \n",
" 140 | \n",
" 40.6 | \n",
" 1.174 | \n",
" 39 | \n",
" 0 | \n",
"
\n",
" \n",
" 750 | \n",
" 4 | \n",
" 0 | \n",
" 136 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 31.2 | \n",
" 1.182 | \n",
" 22 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Predicted Glucose BloodPressure SkinThickness Insulin \\\n",
"30 5 1 109 75 26 0 \n",
"82 7 1 83 78 26 71 \n",
"86 13 1 106 72 54 0 \n",
"91 4 1 123 80 15 176 \n",
"95 6 1 144 72 27 228 \n",
"176 6 1 85 78 0 0 \n",
"201 1 1 138 82 0 0 \n",
"204 6 1 103 72 32 190 \n",
"223 7 1 142 60 33 190 \n",
"228 4 1 197 70 39 744 \n",
"233 4 1 122 68 0 0 \n",
"266 0 0 138 0 0 0 \n",
"274 13 1 106 70 0 0 \n",
"280 0 0 146 70 0 0 \n",
"282 7 1 133 88 15 155 \n",
"302 5 1 77 82 41 42 \n",
"309 2 0 124 68 28 205 \n",
"335 0 1 165 76 43 255 \n",
"358 12 1 88 74 40 54 \n",
"364 4 1 147 74 25 293 \n",
"379 0 1 93 100 39 72 \n",
"397 0 0 131 66 40 0 \n",
"405 2 1 123 48 32 165 \n",
"406 4 0 115 72 0 0 \n",
"442 4 1 117 64 27 120 \n",
"486 1 1 139 62 41 480 \n",
"515 3 0 163 70 18 105 \n",
"517 7 1 125 86 0 0 \n",
"583 8 1 100 76 0 0 \n",
"594 6 1 123 72 45 230 \n",
"622 6 1 183 94 0 0 \n",
"630 7 0 114 64 0 0 \n",
"634 10 1 92 62 0 0 \n",
"646 1 0 167 74 17 144 \n",
"658 11 1 127 106 0 0 \n",
"669 9 1 154 78 30 100 \n",
"674 8 1 91 82 0 0 \n",
"676 9 0 156 86 0 0 \n",
"682 0 1 95 64 39 105 \n",
"699 4 1 118 70 0 0 \n",
"702 1 0 168 88 29 0 \n",
"723 5 1 117 86 30 105 \n",
"725 4 1 112 78 40 0 \n",
"730 3 0 130 78 23 79 \n",
"744 13 1 153 88 37 140 \n",
"750 4 0 136 70 0 0 \n",
"\n",
" BMI DiabetesPedigreeFunction Age Outcome \n",
"30 36.0 0.546 60 0 \n",
"82 29.3 0.767 36 0 \n",
"86 36.6 0.178 45 0 \n",
"91 32.0 0.443 34 0 \n",
"95 33.9 0.255 40 0 \n",
"176 31.2 0.382 42 0 \n",
"201 40.1 0.236 28 0 \n",
"204 37.7 0.324 55 0 \n",
"223 28.8 0.687 61 0 \n",
"228 36.7 2.329 31 0 \n",
"233 35.0 0.394 29 0 \n",
"266 36.3 0.933 25 1 \n",
"274 34.2 0.251 52 0 \n",
"280 37.9 0.334 28 1 \n",
"282 32.4 0.262 37 0 \n",
"302 35.8 0.156 35 0 \n",
"309 32.9 0.875 30 1 \n",
"335 47.9 0.259 26 0 \n",
"358 35.3 0.378 48 0 \n",
"364 34.9 0.385 30 0 \n",
"379 43.4 1.021 35 0 \n",
"397 34.3 0.196 22 1 \n",
"405 42.1 0.520 26 0 \n",
"406 28.9 0.376 46 1 \n",
"442 33.2 0.230 24 0 \n",
"486 40.7 0.536 21 0 \n",
"515 31.6 0.268 28 1 \n",
"517 37.6 0.304 51 0 \n",
"583 38.7 0.190 42 0 \n",
"594 33.6 0.733 34 0 \n",
"622 40.8 1.461 45 0 \n",
"630 27.4 0.732 34 1 \n",
"634 25.9 0.167 31 0 \n",
"646 23.4 0.447 33 1 \n",
"658 39.0 0.190 51 0 \n",
"669 30.9 0.164 45 0 \n",
"674 35.6 0.587 68 0 \n",
"676 24.8 0.230 53 1 \n",
"682 44.6 0.366 22 0 \n",
"699 44.5 0.904 26 0 \n",
"702 35.0 0.905 52 1 \n",
"723 39.1 0.251 42 0 \n",
"725 39.4 0.236 38 0 \n",
"730 28.4 0.323 34 1 \n",
"744 40.6 1.174 39 0 \n",
"750 31.2 1.182 22 1 "
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"preprocessing_result = pipeline_end.transform(X_test)\n",
"preprocessed_df = pd.DataFrame(\n",
" preprocessing_result,\n",
" columns=pipeline_end.get_feature_names_out(),\n",
")\n",
"\n",
"y_pred = class_models[best_model][\"preds\"]\n",
"\n",
"error_index = y_test[y_test[\"Outcome\"] != y_pred].index.tolist()\n",
"display(f\"Error items count: {len(error_index)}\")\n",
"\n",
"error_predicted = pd.Series(y_pred, index=y_test.index).loc[error_index]\n",
"error_df = X_test.loc[error_index].copy()\n",
"error_df.insert(loc=1, column=\"Predicted\", value=error_predicted)\n",
"error_df.sort_index()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Пример использования обученной модели (конвейера) для предсказания"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 450 | \n",
" 1.0 | \n",
" 82.0 | \n",
" 64.0 | \n",
" 13.0 | \n",
" 95.0 | \n",
" 21.2 | \n",
" 0.415 | \n",
" 23.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"450 1.0 82.0 64.0 13.0 95.0 21.2 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"450 0.415 23.0 0.0 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
"
\n",
" \n",
" \n",
" \n",
" 450 | \n",
" -0.838489 | \n",
" -0.482325 | \n",
" 0.136961 | \n",
" -1.329999 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies SkinThickness Insulin BMI\n",
"450 -0.838489 -0.482325 0.136961 -1.329999"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'predicted: 0 (proba: [0.81353825 0.18646175])'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'real: 0'"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model = class_models[best_model][\"pipeline\"]\n",
"\n",
"example_id = 450\n",
"test = pd.DataFrame(X_test.loc[example_id, :]).T\n",
"test_preprocessed = pd.DataFrame(preprocessed_df.loc[example_id, :]).T\n",
"display(test)\n",
"display(test_preprocessed)\n",
"result_proba = model.predict_proba(test)[0]\n",
"result = model.predict(test)[0]\n",
"real = int(y_test.loc[example_id].values[0])\n",
"display(f\"predicted: {result} (proba: {result_proba})\")\n",
"display(f\"real: {real}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Подбор гиперпараметров методом поиска по сетке"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"import numpy as np\n",
"from sklearn import metrics\n",
"import pandas as pd\n",
"\n",
"\n",
"# Определяем числовые признаки\n",
"numeric_features = X_train.select_dtypes(include=['float64', 'int64']).columns.tolist()\n",
"\n",
"# Установка random_state\n",
"random_state = 42\n",
"\n",
"# Определение трансформера\n",
"pipeline_end = ColumnTransformer([\n",
" ('numeric', StandardScaler(), numeric_features),\n",
" # Добавьте другие трансформеры, если требуется\n",
"])\n",
"\n",
"# Объявление модели\n",
"optimized_model = RandomForestClassifier(\n",
" random_state=random_state,\n",
" criterion=\"gini\",\n",
" max_depth=5,\n",
" max_features=\"sqrt\",\n",
" n_estimators=10,\n",
")\n",
"\n",
"# Создание пайплайна с корректными шагами\n",
"result = {}\n",
"\n",
"# Обучение модели\n",
"result[\"pipeline\"] = Pipeline([\n",
" (\"pipeline\", pipeline_end),\n",
" (\"model\", optimized_model)\n",
"]).fit(X_train, y_train.values.ravel())\n",
"\n",
"# Прогнозирование и расчет метрик\n",
"result[\"train_preds\"] = result[\"pipeline\"].predict(X_train)\n",
"result[\"probs\"] = result[\"pipeline\"].predict_proba(X_test)[:, 1]\n",
"result[\"preds\"] = np.where(result[\"probs\"] > 0.5, 1, 0)\n",
"\n",
"# Метрики для оценки модели\n",
"result[\"Precision_train\"] = metrics.precision_score(y_train, result[\"train_preds\"])\n",
"result[\"Precision_test\"] = metrics.precision_score(y_test, result[\"preds\"])\n",
"result[\"Recall_train\"] = metrics.recall_score(y_train, result[\"train_preds\"])\n",
"result[\"Recall_test\"] = metrics.recall_score(y_test, result[\"preds\"])\n",
"result[\"Accuracy_train\"] = metrics.accuracy_score(y_train, result[\"train_preds\"])\n",
"result[\"Accuracy_test\"] = metrics.accuracy_score(y_test, result[\"preds\"])\n",
"result[\"ROC_AUC_test\"] = metrics.roc_auc_score(y_test, result[\"probs\"])\n",
"result[\"F1_train\"] = metrics.f1_score(y_train, result[\"train_preds\"])\n",
"result[\"F1_test\"] = metrics.f1_score(y_test, result[\"preds\"])\n",
"result[\"MCC_test\"] = metrics.matthews_corrcoef(y_test, result[\"preds\"])\n",
"result[\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(y_test, result[\"preds\"])\n",
"result[\"Confusion_matrix\"] = metrics.confusion_matrix(y_test, result[\"preds\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование данных для оценки старой и новой версии модели"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [],
"source": [
"optimized_metrics = pd.DataFrame(columns=list(result.keys()))\n",
"optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n",
" data=class_models[optimized_model_type]\n",
")\n",
"optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n",
" data=result\n",
")\n",
"optimized_metrics.insert(loc=0, column=\"Name\", value=[\"Old\", \"New\"])\n",
"optimized_metrics = optimized_metrics.set_index(\"Name\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Оценка параметров старой и новой модели"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Precision_train | \n",
" Precision_test | \n",
" Recall_train | \n",
" Recall_test | \n",
" Accuracy_train | \n",
" Accuracy_test | \n",
" F1_train | \n",
" F1_test | \n",
"
\n",
" \n",
" Name | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Old | \n",
" 0.955157 | \n",
" 0.535714 | \n",
" 0.995327 | \n",
" 0.555556 | \n",
" 0.982085 | \n",
" 0.675325 | \n",
" 0.974828 | \n",
" 0.545455 | \n",
"
\n",
" \n",
" New | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"optimized_metrics[\n",
" [\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" \"Accuracy_train\",\n",
" \"Accuracy_test\",\n",
" \"F1_train\",\n",
" \"F1_test\",\n",
" ]\n",
"].style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Accuracy_test | \n",
" F1_test | \n",
" ROC_AUC_test | \n",
" Cohen_kappa_test | \n",
" MCC_test | \n",
"
\n",
" \n",
" Name | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Old | \n",
" 0.675325 | \n",
" 0.545455 | \n",
" 0.715093 | \n",
" 0.293059 | \n",
" 0.293176 | \n",
"
\n",
" \n",
" New | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"optimized_metrics[\n",
" [\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" \"ROC_AUC_test\",\n",
" \"Cohen_kappa_test\",\n",
" \"MCC_test\",\n",
" ]\n",
"].style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\n",
" \"ROC_AUC_test\",\n",
" \"MCC_test\",\n",
" \"Cohen_kappa_test\",\n",
" ],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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6nBKWSf99I83dmjJ+s169l871aYTU3AB1AwZaf46ecxPna759SJUcJhdrTqe1p7twZKkPduCFRJ+Rpde/ovzmE7XnJLNR/ruq+BqrxnVx9fPrhbtT+vLz0Od+xwOm776PFRtOp92Y2XwFh7RzK1fv17XXHONgoKCFBMTowcffFB5eXnO1//1r3+pS5cuCg0NVVRUlO666y4dO3aszHOtXbtW99xzj7Kzs2Wz2WSz2TRlyhTn66dPn9a9996r0NBQxcbG6qWXXnK+1qtXL40cOdLlfMePH5e/v79SUlLK/LyCggLl5OS4bCbbuDpcuTm1dOOdv16NenFKI7XpkqfuN5n9e2M6m82hv/+/A/p2e5h+3Fvyj5uomHxJ0sCRafp4eZQmDm2rfd+GKCn5G0U3/uV8p8M5mD4dpaYg17zHyWMlF5/q1HedMlenfpHztZPHfVWnnuvFylq+UmidM85j4J3CIopVy1fKOu763/nnn3xVtz4XsK1geq7V+GZu//79uummm5SYmKivv/5ab775ptavX+8SPkVFRXrqqae0c+dOrVixQj/88IMGDx5c5vm6d++u2bNnKywsTEePHtXRo0f1yCOPOF+fOXOmunTpoq+++krDhw/XsGHDlJqaKkkaMmSIli5dqoKCAufxr7/+uho1aqRevXqV+XlJSUkKDw93bjExZs+P//iNCF3RM0f1okr+Atv0cZh2bAjVA1MP/8E74e2GT9qnxi3yNH1sK+c+n//9DfXRmw215t9ROrAnRAunX6JDB4N0Y2KGmyr1bA6LpqJ4aujVBOQaAFjH9FxzezO3atUqhYSEuGy9e/d2vp6UlKSBAwdq9OjRatGihbp37645c+botddeU35+yVX7e++9V71791azZs3UrVs3zZkzRx999JFyc3NLfZ6/v7/Cw8Nls9kUFRWlqKgohYSEOF+/+eabNXz4cDVv3lzjx4/XRRddpP/85z+SpH79+kmS3nvvPefxycnJGjx4sGznWLljwoQJys7Odm7p6emV/03zUJmH/PTV56G66a4Tzn07NoTq6A/+6teqnXrHXK7eMZdLkp4a2kSPJjZ3V6moZsMm7tOV153UY39rrxOZAc79J4+VrIKats91xa/0/bVVv2GBgJqIXDPL2dsDso77uezPOu7nfC2i/hllnXAdmSk+I53K8uX2Ai+Xc7KWis9IdX43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WOF6/Pz8XH622WwuUxSGDBmiNWvW6NChQ1q8eLF69eqlxo0bX+C3h9UCAwN1ww03aOLEidq4caMGDx6syZMnlzouKCjoD89Vv359XXnllXrjjTeUk5NTFeWiHGJiYhQeHu7ckpKSyjzum2++UUhIiAICAvTAAw/o3XffVZs2bZSRkSF/f/9SK/1FRkYqIyOjGr4BTEOuwUrkGtyNaZaolE6dOmn37t1lThWQSv4Bd+LECU2fPl0xMTGSpG3btp33nP7+/i5TXiqiXbt26tKlixYuXKilS5fqhRdeuKDzoHq0adOmzGfwtG/fXi+//LJOnjx5zquYQUFBWrVqlW6++WYlJCTok08+UWhoaBVX7PmsepbO2XOkp6crLCzMuT8gIKDM41u2bKkdO3YoOztbb7/9tgYNGqR169ZVug7AauQaKoNcq35W55qnYWQOlTJ+/Hht3LhRI0eO1I4dO7R371699957zhvFY2Nj5e/vr+eff14HDhzQypUr9dRTT533nE2aNFFubq5SUlL0008/6fTp0xWqaciQIZo+fbocDofuuOOOC/5usM6JEyfUq1cvvf766/r666918OBBLV++XDNmzFCfPn1KHT9gwABFRUWpb9++2rBhgw4cOKB33nmn1LS74OBgffDBB/L19VXv3r2Vm5tbXV/Jc1m86tfZFSrPbudq5vz9/dW8eXN17txZSUlJuvzyy/XPf/5TUVFRKiwsLPV8r8zMTJb1hluQaygPcq0GYTVL4MK1b99e69at0/fff69rrrlGHTt21KRJkxQdHS2pZMpAcnKyli9frjZt2mj69On6xz/+cd5zdu/eXQ888ID+8pe/qH79+poxY0aFahowYIB8fX01YMAABQYGXvB3g3VCQkLUtWtXzZo1S9dee63atm2riRMnaujQoWVeZfb399cnn3yiBg0a6Oabb1a7du00ffp01apVq8xzf/TRR3I4HLrllltclg9HzWW321VQUKDOnTvLz8/PZZn11NRUpaWlKS4uzo0VwlTkGsqDXENNYXPw8Ap4mR9++EGXXHKJtm7dqk6dOrm7HKBGyMnJUXh4uOIvGS3fWmWPnlXEmeICfbp/trKzs12mWZZlwoQJ6t27t2JjY3Xq1CktXbpUzz77rD7++GPdcMMNGjZsmD788EMlJycrLCxMo0aNklSyqhsAcg0oiztzrSbhnjl4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fPh5n6XTpEkTDRo0SPfee69WrFjhPOdbb70lSWrcuLFsNptWrVql48ePKzc3V6GhoXrkkUc0ZswYvfrqq9q/f7++/PJLPf/8886brx944AHt3btXjz76qFJTU7V06VIlJydX6Pu2aNFCaWlpWrZsmfbv3685c+aUedN7YGCgBg0apJ07d+rzzz/Xgw8+qDvvvFNRUVGSpCeffFJJSUmaM2eOvv/+e33zzTdavHixnnvuuQrVAwCwFrlGrsFMNHMwUu3atfXf//5XsbGx6tevn1q3bq377rtP+fn5ziuaDz/8sP76179q0KBBiouLU2hoqO64447znnf+/Pn605/+pOHDh6tVq1YaOnSo8vLyJEmNGjXSk08+qccee0yRkZEaOXKkJOmpp57SxIkTlZSUpNatW+umm27SBx98oKZNm0oqme//zjvvaMWKFbr88su1YMECTZs2rULf9/bbb9eYMWM0cuRIdejQQRs3btTEiRNLHde8eXP169dPN998s2688Ua1b9/eZYnmIUOG6OWXX9bixYvVrl079ejRQ8nJyc5a4QEMX8IZ8FbkGrlmLMNzzeY4112vAACvkZOTo/DwcMVfdK98fSr/cOEz9kJ9+tMrys7OPueULgAAqgq5VoKROQAAAADwQCyAAgAmsTtkycN07EzqAADUAIbnGs0cABjE4bDL4aj8il1WnAMAgMoyPdeYZgkAAAAAHoiROQAwicNhzVQS1s4CANQEhucazRwAmMRh0b0FHhp6AAAvY3iuMc0SAAAAADwQI3MAYBK7XbJZcJO3h94oDgDwMobnGs0cAJjE8OkoAAAvY3iuMc0SAAAAADwQI3MAYBCH3S6HBdNRPPV5PAAA72J6rjEyBwAAAAAeiJE5ADCJ4fcWAAC8jOG5RjMHACaxOySbuaEHAPAyhuca0ywBAAAAwAMxMgcAJnE4JFnxPB7PvIIJAPAyhucazRwAGMRhd8hhwXQUh4eGHgDAu5iea0yzBAAAAAAPxMgcAJjEYZc101E883k8AAAvY3iuMTIHAAZx2B2WbQAAuJs7c23u3Llq0qSJAgMD1bVrV33xxRdV8A3Pj2YOAAAAACrgzTff1NixYzV58mR9+eWXuvzyy5WQkKBjx45Vax00cwBgEofdug0AAHdzU64999xzGjp0qO655x61adNGCxYsUO3atfXKK69U0RctG/fMAYBBzqhIsmCG5BkVVf4kAABUktW5lpOT47I/ICBAAQEBLvsKCwu1fft2TZgwwbnPx8dH8fHx2rRpU+WLqQCaOQAwgL+/v6KiorQ+40PLzhkVFSV/f3/LzgcAQHlVRa6FhIQoJibGZd/kyZM1ZcoUl30//fSTiouLFRkZ6bI/MjJS3333nWX1lAfNHAAYIDAwUAcPHlRhYaFl5/T391dgYKBl5wMAoLyqItccDodsNpvLvt+PytU0NHMAYIjAwECaLwCA13BXrl100UWqVauWMjMzXfZnZmYqKiqqWmthARQAAAAAKCd/f3917txZKSkpzn12u10pKSmKi4ur1loYmQMAAACAChg7dqwGDRqkLl266Morr9Ts2bOVl5ene+65p1rroJkDAAAAgAr4y1/+ouPHj2vSpEnKyMhQhw4dtHr16lKLolQ1m8PhsGAxTwAAAABAdeKeOQAAAADwQDRzAAAAAOCBaOYAAAAAwAPRzAEAAACAB6KZAwAAAAAPRDMHAAAAAB6IZg4AAAAAPBDNHAAAAAB4IJo5AAAAAPBANHMAAAAA4IFo5gAAAADAA/1/g00awjwa1uoAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"\n",
"_, ax = plt.subplots(1, 2, figsize=(10, 4), sharex=False, sharey=False\n",
")\n",
"\n",
"for index in range(0, len(optimized_metrics)):\n",
" c_matrix = optimized_metrics.iloc[index][\"Confusion_matrix\"]\n",
" disp = ConfusionMatrixDisplay(\n",
" confusion_matrix=c_matrix, display_labels=[\"Healthy\", \"Sick\"]\n",
" ).plot(ax=ax.flat[index])\n",
"\n",
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.3)\n",
"plt.show()\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"В желтом квадрате мы видим значение 74, что обозначает количество правильно классифицированных объектов, отнесенных к классу \"Sick\". Это свидетельствует о том, что модель успешно идентифицирует объекты этого класса, минимизируя количество ложных положительных срабатываний.\n",
"\n",
"В зеленом квадрате значение 54 указывает на количество правильно классифицированных объектов, отнесенных к классу \"Healthy\". Это также является показателем хорошей точности модели в определении объектов данного класса."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Определение достижимого уровня качества модели для второй задачи"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Подготовка данных"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin \\\n",
"count 768.000000 768.000000 768.000000 768.000000 768.000000 \n",
"mean 3.845052 120.894531 69.105469 20.536458 79.799479 \n",
"std 3.369578 31.972618 19.355807 15.952218 115.244002 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 1.000000 99.000000 62.000000 0.000000 0.000000 \n",
"50% 3.000000 117.000000 72.000000 23.000000 30.500000 \n",
"75% 6.000000 140.250000 80.000000 32.000000 127.250000 \n",
"max 17.000000 199.000000 122.000000 99.000000 846.000000 \n",
"\n",
" BMI DiabetesPedigreeFunction Age Outcome \n",
"count 768.000000 768.000000 768.000000 768.000000 \n",
"mean 31.992578 0.471876 33.240885 0.348958 \n",
"std 7.884160 0.331329 11.760232 0.476951 \n",
"min 0.000000 0.078000 21.000000 0.000000 \n",
"25% 27.300000 0.243750 24.000000 0.000000 \n",
"50% 32.000000 0.372500 29.000000 0.000000 \n",
"75% 36.600000 0.626250 41.000000 1.000000 \n",
"max 67.100000 2.420000 81.000000 1.000000 \n"
]
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn import set_config\n",
"\n",
"\n",
"random_state = 9\n",
"set_config(transform_output=\"pandas\")\n",
"df = pd.read_csv(\".//scv//diabetes.csv\")\n",
"print(df.describe())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование выборок"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'X_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" 1 | \n",
" 105 | \n",
" 58 | \n",
" 0 | \n",
" 0 | \n",
" 24.3 | \n",
" 0.187 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 69 | \n",
" 4 | \n",
" 146 | \n",
" 85 | \n",
" 27 | \n",
" 100 | \n",
" 28.9 | \n",
" 0.189 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 494 | \n",
" 3 | \n",
" 80 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0.0 | \n",
" 0.174 | \n",
" 22 | \n",
" 0 | \n",
"
\n",
" \n",
" 463 | \n",
" 5 | \n",
" 88 | \n",
" 78 | \n",
" 30 | \n",
" 0 | \n",
" 27.6 | \n",
" 0.258 | \n",
" 37 | \n",
" 0 | \n",
"
\n",
" \n",
" 653 | \n",
" 2 | \n",
" 120 | \n",
" 54 | \n",
" 0 | \n",
" 0 | \n",
" 26.8 | \n",
" 0.455 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" 0 | \n",
" 124 | \n",
" 70 | \n",
" 20 | \n",
" 0 | \n",
" 27.4 | \n",
" 0.254 | \n",
" 36 | \n",
" 1 | \n",
"
\n",
" \n",
" 109 | \n",
" 0 | \n",
" 95 | \n",
" 85 | \n",
" 25 | \n",
" 36 | \n",
" 37.4 | \n",
" 0.247 | \n",
" 24 | \n",
" 1 | \n",
"
\n",
" \n",
" 27 | \n",
" 1 | \n",
" 97 | \n",
" 66 | \n",
" 15 | \n",
" 140 | \n",
" 23.2 | \n",
" 0.487 | \n",
" 22 | \n",
" 0 | \n",
"
\n",
" \n",
" 651 | \n",
" 1 | \n",
" 117 | \n",
" 60 | \n",
" 23 | \n",
" 106 | \n",
" 33.8 | \n",
" 0.466 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 197 | \n",
" 3 | \n",
" 107 | \n",
" 62 | \n",
" 13 | \n",
" 48 | \n",
" 22.9 | \n",
" 0.678 | \n",
" 23 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"196 1 105 58 0 0 24.3 \n",
"69 4 146 85 27 100 28.9 \n",
"494 3 80 0 0 0 0.0 \n",
"463 5 88 78 30 0 27.6 \n",
"653 2 120 54 0 0 26.8 \n",
".. ... ... ... ... ... ... \n",
"322 0 124 70 20 0 27.4 \n",
"109 0 95 85 25 36 37.4 \n",
"27 1 97 66 15 140 23.2 \n",
"651 1 117 60 23 106 33.8 \n",
"197 3 107 62 13 48 22.9 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"196 0.187 21 0 \n",
"69 0.189 27 0 \n",
"494 0.174 22 0 \n",
"463 0.258 37 0 \n",
"653 0.455 27 0 \n",
".. ... ... ... \n",
"322 0.254 36 1 \n",
"109 0.247 24 1 \n",
"27 0.487 22 0 \n",
"651 0.466 27 0 \n",
"197 0.678 23 1 \n",
"\n",
"[614 rows x 9 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" 0 | \n",
"
\n",
" \n",
" 69 | \n",
" 0 | \n",
"
\n",
" \n",
" 494 | \n",
" 0 | \n",
"
\n",
" \n",
" 463 | \n",
" 0 | \n",
"
\n",
" \n",
" 653 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" 1 | \n",
"
\n",
" \n",
" 109 | \n",
" 1 | \n",
"
\n",
" \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 651 | \n",
" 0 | \n",
"
\n",
" \n",
" 197 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"196 0\n",
"69 0\n",
"494 0\n",
"463 0\n",
"653 0\n",
".. ...\n",
"322 1\n",
"109 1\n",
"27 0\n",
"651 0\n",
"197 1\n",
"\n",
"[614 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'X_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 669 | \n",
" 9 | \n",
" 154 | \n",
" 78 | \n",
" 30 | \n",
" 100 | \n",
" 30.9 | \n",
" 0.164 | \n",
" 45 | \n",
" 0 | \n",
"
\n",
" \n",
" 379 | \n",
" 0 | \n",
" 93 | \n",
" 100 | \n",
" 39 | \n",
" 72 | \n",
" 43.4 | \n",
" 1.021 | \n",
" 35 | \n",
" 0 | \n",
"
\n",
" \n",
" 640 | \n",
" 0 | \n",
" 102 | \n",
" 86 | \n",
" 17 | \n",
" 105 | \n",
" 29.3 | \n",
" 0.695 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 658 | \n",
" 11 | \n",
" 127 | \n",
" 106 | \n",
" 0 | \n",
" 0 | \n",
" 39.0 | \n",
" 0.190 | \n",
" 51 | \n",
" 0 | \n",
"
\n",
" \n",
" 304 | \n",
" 3 | \n",
" 150 | \n",
" 76 | \n",
" 0 | \n",
" 0 | \n",
" 21.0 | \n",
" 0.207 | \n",
" 37 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 203 | \n",
" 2 | \n",
" 99 | \n",
" 70 | \n",
" 16 | \n",
" 44 | \n",
" 20.4 | \n",
" 0.235 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 605 | \n",
" 1 | \n",
" 124 | \n",
" 60 | \n",
" 32 | \n",
" 0 | \n",
" 35.8 | \n",
" 0.514 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 561 | \n",
" 0 | \n",
" 198 | \n",
" 66 | \n",
" 32 | \n",
" 274 | \n",
" 41.3 | \n",
" 0.502 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 280 | \n",
" 0 | \n",
" 146 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 37.9 | \n",
" 0.334 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 103 | \n",
" 1 | \n",
" 81 | \n",
" 72 | \n",
" 18 | \n",
" 40 | \n",
" 26.6 | \n",
" 0.283 | \n",
" 24 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"669 9 154 78 30 100 30.9 \n",
"379 0 93 100 39 72 43.4 \n",
"640 0 102 86 17 105 29.3 \n",
"658 11 127 106 0 0 39.0 \n",
"304 3 150 76 0 0 21.0 \n",
".. ... ... ... ... ... ... \n",
"203 2 99 70 16 44 20.4 \n",
"605 1 124 60 32 0 35.8 \n",
"561 0 198 66 32 274 41.3 \n",
"280 0 146 70 0 0 37.9 \n",
"103 1 81 72 18 40 26.6 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"669 0.164 45 0 \n",
"379 1.021 35 0 \n",
"640 0.695 27 0 \n",
"658 0.190 51 0 \n",
"304 0.207 37 0 \n",
".. ... ... ... \n",
"203 0.235 27 0 \n",
"605 0.514 21 0 \n",
"561 0.502 28 1 \n",
"280 0.334 28 1 \n",
"103 0.283 24 0 \n",
"\n",
"[154 rows x 9 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 669 | \n",
" 0 | \n",
"
\n",
" \n",
" 379 | \n",
" 0 | \n",
"
\n",
" \n",
" 640 | \n",
" 0 | \n",
"
\n",
" \n",
" 658 | \n",
" 0 | \n",
"
\n",
" \n",
" 304 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 203 | \n",
" 0 | \n",
"
\n",
" \n",
" 605 | \n",
" 0 | \n",
"
\n",
" \n",
" 561 | \n",
" 1 | \n",
"
\n",
" \n",
" 280 | \n",
" 1 | \n",
"
\n",
" \n",
" 103 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"669 0\n",
"379 0\n",
"640 0\n",
"658 0\n",
"304 0\n",
".. ...\n",
"203 0\n",
"605 0\n",
"561 1\n",
"280 1\n",
"103 0\n",
"\n",
"[154 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from typing import Tuple\n",
"import pandas as pd\n",
"from pandas import DataFrame\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"\n",
"def split_stratified_into_train_val_test(\n",
" df_input: DataFrame,\n",
" stratify_colname: str = \"y\",\n",
" frac_train: float = 0.6,\n",
" frac_val: float = 0.15,\n",
" frac_test: float = 0.25,\n",
" random_state: int = None,\n",
") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame, DataFrame, DataFrame]:\n",
" \n",
"\n",
" if not (0 < frac_train < 1) or not (0 <= frac_val <= 1) or not (0 <= frac_test <= 1):\n",
" raise ValueError(\"Fractions must be between 0 and 1 and the sum must equal 1.\")\n",
" \n",
" if not (frac_train + frac_val + frac_test == 1.0):\n",
" raise ValueError(\"fractions %f, %f, %f do not add up to 1.0\" %\n",
" (frac_train, frac_val, frac_test))\n",
"\n",
" if stratify_colname not in df_input.columns:\n",
" raise ValueError(f\"{stratify_colname} is not a column in the DataFrame.\")\n",
"\n",
" X = df_input\n",
" y = df_input[[stratify_colname]]\n",
"\n",
" \n",
" df_train, df_temp, y_train, y_temp = train_test_split(\n",
" X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n",
" )\n",
"\n",
" if frac_val == 0:\n",
" return df_train, pd.DataFrame(), df_temp, y_train, pd.DataFrame(), y_temp\n",
"\n",
" relative_frac_test = frac_test / (frac_val + frac_test)\n",
"\n",
" df_val, df_test, y_val, y_test = train_test_split(\n",
" df_temp,\n",
" y_temp,\n",
" stratify=y_temp,\n",
" test_size=relative_frac_test,\n",
" random_state=random_state,\n",
" )\n",
"\n",
" assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n",
" \n",
" return df_train, df_val, df_test, y_train, y_val, y_test\n",
"\n",
"\n",
"X_train, X_val, X_test, y_train, y_val, y_test = split_stratified_into_train_val_test(\n",
" df, stratify_colname=\"Outcome\", frac_train=0.80, frac_val=0.0, frac_test=0.20, random_state=random_state\n",
")\n",
"\n",
"display(\"X_train\", X_train)\n",
"display(\"y_train\", y_train)\n",
"display(\"X_test\", X_test)\n",
"display(\"y_test\", y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование конвейера для классификации данных"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from sklearn.base import BaseEstimator, TransformerMixin\n",
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.discriminant_analysis import StandardScaler\n",
"from sklearn.impute import SimpleImputer\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import OneHotEncoder\n",
"\n",
"class DiabetFeatures(BaseEstimator, TransformerMixin):\n",
" def __init__(self):\n",
" pass\n",
" def fit(self, X, y=None):\n",
" return self\n",
" \n",
"\n",
"columns_to_drop = [\"Pregnancies\", \"SkinThickness\", \"Insulin\", \"BMI\"]\n",
"num_columns = [\"Glucose\", \"Age\", \"BloodPressure\", \"Outcome\", \"DiabetesPedigreeFunction\"]\n",
"cat_columns = []\n",
"\n",
"num_imputer = SimpleImputer(strategy=\"median\")\n",
"num_scaler = StandardScaler()\n",
"preprocessing_num = Pipeline(\n",
" [\n",
" (\"imputer\", num_imputer),\n",
" (\"scaler\", num_scaler),\n",
" ]\n",
")\n",
"\n",
"cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\")\n",
"cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n",
"preprocessing_cat = Pipeline(\n",
" [\n",
" (\"imputer\", cat_imputer),\n",
" (\"encoder\", cat_encoder),\n",
" ]\n",
")\n",
"\n",
"features_preprocessing = ColumnTransformer(\n",
" verbose_feature_names_out=False,\n",
" transformers=[\n",
" (\"prepocessing_num\", preprocessing_num, num_columns),\n",
" (\"prepocessing_cat\", preprocessing_cat, cat_columns),\n",
" ],\n",
" remainder=\"passthrough\"\n",
")\n",
"\n",
"\n",
"drop_columns = ColumnTransformer(\n",
" verbose_feature_names_out=False,\n",
" transformers=[\n",
" (\"drop_columns\", \"drop\", columns_to_drop),\n",
" ],\n",
" remainder=\"passthrough\",\n",
")\n",
"\n",
"features_postprocessing = ColumnTransformer(\n",
" verbose_feature_names_out=False,\n",
" transformers=[\n",
" (\"prepocessing_cat\", preprocessing_cat, [\"Cabin_type\"]),\n",
" ],\n",
" remainder=\"passthrough\",\n",
")\n",
"\n",
"pipeline_end = Pipeline(\n",
" [\n",
" (\"features_preprocessing\", features_preprocessing),\n",
" (\"drop_columns\", drop_columns),\n",
" ]\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Демонстрация работы конвейера"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Glucose | \n",
" Age | \n",
" BloodPressure | \n",
" Outcome | \n",
" DiabetesPedigreeFunction | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" -0.478144 | \n",
" -1.029257 | \n",
" -0.554050 | \n",
" -0.731437 | \n",
" -0.849205 | \n",
"
\n",
" \n",
" 69 | \n",
" 0.818506 | \n",
" -0.522334 | \n",
" 0.804885 | \n",
" -0.731437 | \n",
" -0.843172 | \n",
"
\n",
" \n",
" 494 | \n",
" -1.268784 | \n",
" -0.944770 | \n",
" -3.473244 | \n",
" -0.731437 | \n",
" -0.888421 | \n",
"
\n",
" \n",
" 463 | \n",
" -1.015779 | \n",
" 0.322537 | \n",
" 0.452568 | \n",
" -0.731437 | \n",
" -0.635028 | \n",
"
\n",
" \n",
" 653 | \n",
" -0.003760 | \n",
" -0.522334 | \n",
" -0.755374 | \n",
" -0.731437 | \n",
" -0.040763 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" 0.122742 | \n",
" 0.238050 | \n",
" 0.049921 | \n",
" 1.367172 | \n",
" -0.647095 | \n",
"
\n",
" \n",
" 109 | \n",
" -0.794400 | \n",
" -0.775796 | \n",
" 0.804885 | \n",
" 1.367172 | \n",
" -0.668211 | \n",
"
\n",
" \n",
" 27 | \n",
" -0.731149 | \n",
" -0.944770 | \n",
" -0.151403 | \n",
" -0.731437 | \n",
" 0.055767 | \n",
"
\n",
" \n",
" 651 | \n",
" -0.098637 | \n",
" -0.522334 | \n",
" -0.453388 | \n",
" -0.731437 | \n",
" -0.007581 | \n",
"
\n",
" \n",
" 197 | \n",
" -0.414893 | \n",
" -0.860283 | \n",
" -0.352726 | \n",
" 1.367172 | \n",
" 0.631933 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 5 columns
\n",
"
"
],
"text/plain": [
" Glucose Age BloodPressure Outcome DiabetesPedigreeFunction\n",
"196 -0.478144 -1.029257 -0.554050 -0.731437 -0.849205\n",
"69 0.818506 -0.522334 0.804885 -0.731437 -0.843172\n",
"494 -1.268784 -0.944770 -3.473244 -0.731437 -0.888421\n",
"463 -1.015779 0.322537 0.452568 -0.731437 -0.635028\n",
"653 -0.003760 -0.522334 -0.755374 -0.731437 -0.040763\n",
".. ... ... ... ... ...\n",
"322 0.122742 0.238050 0.049921 1.367172 -0.647095\n",
"109 -0.794400 -0.775796 0.804885 1.367172 -0.668211\n",
"27 -0.731149 -0.944770 -0.151403 -0.731437 0.055767\n",
"651 -0.098637 -0.522334 -0.453388 -0.731437 -0.007581\n",
"197 -0.414893 -0.860283 -0.352726 1.367172 0.631933\n",
"\n",
"[614 rows x 5 columns]"
]
},
"execution_count": 122,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"preprocessing_result = pipeline_end.fit_transform(X_train)\n",
"preprocessed_df = pd.DataFrame(\n",
" preprocessing_result,\n",
" columns=pipeline_end.get_feature_names_out(),\n",
")\n",
"\n",
"preprocessed_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование набора моделей для классификации"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.pipeline import make_pipeline\n",
"from sklearn.preprocessing import PolynomialFeatures\n",
"from sklearn import linear_model, tree, neighbors, ensemble, neural_network\n",
"\n",
"random_state = 9\n",
"\n",
"models = {\n",
" \"linear\": {\"model\": linear_model.LinearRegression(n_jobs=-1)},\n",
" \"linear_poly\": {\n",
" \"model\": make_pipeline(\n",
" PolynomialFeatures(degree=2),\n",
" linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
" )\n",
" },\n",
" \"linear_interact\": {\n",
" \"model\": make_pipeline(\n",
" PolynomialFeatures(interaction_only=True),\n",
" linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
" )\n",
" },\n",
" \"ridge\": {\"model\": linear_model.RidgeCV()},\n",
" \"decision_tree\": {\n",
" \"model\": tree.DecisionTreeRegressor(max_depth=7, random_state=random_state)\n",
" },\n",
" \"knn\": {\"model\": neighbors.KNeighborsRegressor(n_neighbors=7, n_jobs=-1)},\n",
" \"random_forest\": {\n",
" \"model\": ensemble.RandomForestRegressor(\n",
" max_depth=7, random_state=random_state, n_jobs=-1\n",
" )\n",
" },\n",
" \"mlp\": {\n",
" \"model\": neural_network.MLPRegressor(\n",
" activation=\"tanh\",\n",
" hidden_layer_sizes=(3,),\n",
" max_iter=500,\n",
" early_stopping=True,\n",
" random_state=random_state,\n",
" )\n",
" },\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Обучение моделей на обучающем наборе данных и оценка на тестовом¶"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: logistic\n",
"Model: ridge\n",
"Model: decision_tree\n",
"Model: knn\n",
"Model: naive_bayes\n",
"Model: gradient_boosting\n",
"Model: random_forest\n",
"Model: mlp\n"
]
}
],
"source": [
"import numpy as np\n",
"from sklearn import metrics\n",
"\n",
"for model_name in class_models.keys():\n",
" print(f\"Model: {model_name}\")\n",
" model = class_models[model_name][\"model\"]\n",
"\n",
" model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\n",
" model_pipeline = model_pipeline.fit(X_train, y_train.values.ravel())\n",
"\n",
" y_train_predict = model_pipeline.predict(X_train)\n",
" y_test_probs = model_pipeline.predict_proba(X_test)[:, 1]\n",
" y_test_predict = np.where(y_test_probs > 0.5, 1, 0)\n",
"\n",
" class_models[model_name][\"pipeline\"] = model_pipeline\n",
" class_models[model_name][\"probs\"] = y_test_probs\n",
" class_models[model_name][\"preds\"] = y_test_predict\n",
"\n",
" class_models[model_name][\"Precision_train\"] = metrics.precision_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Precision_test\"] = metrics.precision_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Recall_train\"] = metrics.recall_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Recall_test\"] = metrics.recall_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Accuracy_train\"] = metrics.accuracy_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Accuracy_test\"] = metrics.accuracy_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"ROC_AUC_test\"] = metrics.roc_auc_score(\n",
" y_test, y_test_probs\n",
" )\n",
" class_models[model_name][\"F1_train\"] = metrics.f1_score(y_train, y_train_predict)\n",
" class_models[model_name][\"F1_test\"] = metrics.f1_score(y_test, y_test_predict)\n",
" class_models[model_name][\"MCC_test\"] = metrics.matthews_corrcoef(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Confusion_matrix\"] = metrics.confusion_matrix(\n",
" y_test, y_test_predict\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Сводная таблица оценок качества для использованных моделей классификации¶\n",
"\n",
"Матрица неточностей\n"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAz8AAAQ9CAYAAAB3OvPGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXxM5/4H8M/JNonsISsRkdhSW1CqoZRUqFourUtpE5RW7YpyW/sS9NdWqaVVgl6utoqri6iqUKquvUXEFsSSWCKJhGwzz++P1LTTJJNMnMnJnPm87+u8rjzPyZnnRHM+vuc5iySEECAiIiIiIlI5G6UHQEREREREVBlY/BARERERkVVg8UNERERERFaBxQ8REREREVkFFj9ERERERGQVWPwQEREREZFVYPFDRERERERWgcUPERERERFZBRY/RERERERkFVj8UIWsXbsWkiTh8uXLZtn+5cuXIUkS1q5dK8v2EhISIEkSEhISZNkeERGRWsycOROSJJVrXUmSMHPmTPMOiMiMWPyQqixfvly2gomIiIiI1MVO6QEQlSQoKAgPHz6Evb29Sd+3fPly1KhRAzExMQbtzzzzDB4+fAgHBwcZR0lERGT53n33XUyZMkXpYRBVChY/VCVJkgRHR0fZtmdjYyPr9oiIiNQgJycHzs7OsLPjPwnJOvCyN5LN8uXL8cQTT0Cj0SAgIAAjR45ERkZGsfWWLVuGunXrwsnJCa1bt8bPP/+Mjh07omPHjvp1SrrnJzU1FYMHD0atWrWg0Wjg7++PXr166e87qlOnDk6fPo29e/dCkiRIkqTfZmn3/Bw6dAjPP/88PD094ezsjKZNm+Kjjz6S9wdDRERUBTy6t+fMmTN4+eWX4enpiXbt2pV4z09eXh7Gjx8Pb29vuLq6omfPnrh27VqJ201ISECrVq3g6OiIkJAQfPLJJ6XeR/Tvf/8bLVu2hJOTE7y8vNC/f3+kpKSYZX+JSsIyn2Qxc+ZMzJo1C5GRkRgxYgSSkpKwYsUKHD58GAcOHNBfvrZixQqMGjUK7du3x/jx43H58mX07t0bnp6eqFWrltHP6Nu3L06fPo3Ro0ejTp06uHXrFnbt2oWrV6+iTp06WLx4MUaPHg0XFxe88847AABfX99St7dr1y688MIL8Pf3x9ixY+Hn54fExER8++23GDt2rHw/HCIioirkpZdeQr169TB//nwIIXDr1q1i67z22mv497//jZdffhlPP/00fvrpJ3Tv3r3YesePH0fXrl3h7++PWbNmQavVYvbs2fD29i627rx58zBt2jT069cPr732Gm7fvo2lS5fimWeewfHjx+Hh4WGO3SUyJIgqIC4uTgAQycnJ4tatW8LBwUF06dJFaLVa/Toff/yxACDWrFkjhBAiLy9PVK9eXTz55JOioKBAv97atWsFANGhQwd9W3JysgAg4uLihBBC3Lt3TwAQ7733ntFxPfHEEwbbeWTPnj0CgNizZ48QQojCwkIRHBwsgoKCxL179wzW1el05f9BEBERWYgZM2YIAGLAgAEltj9y4sQJAUC8+eabBuu9/PLLAoCYMWOGvq1Hjx6iWrVq4vr16/q28+fPCzs7O4NtXr58Wdja2op58+YZbPP3338XdnZ2xdqJzIWXvdFj+/HHH5Gfn49x48bBxubP/6SGDRsGNzc3fPfddwCAI0eO4O7duxg2bJjBtcUDBw6Ep6en0c9wcnKCg4MDEhIScO/evcce8/Hjx5GcnIxx48YVO9NU3sd9EhERWaI33njDaP/3338PABgzZoxB+7hx4wy+1mq1+PHHH9G7d28EBATo20NDQ9GtWzeDdbds2QKdTod+/frhzp07+sXPzw/16tXDnj17HmOPiMqPl73RY7ty5QoAoEGDBgbtDg4OqFu3rr7/0f+HhoYarGdnZ4c6deoY/QyNRoOFCxfirbfegq+vL5566im88MILePXVV+Hn52fymC9evAgAaNy4scnfS0REZMmCg4ON9l+5cgU2NjYICQkxaP97zt+6dQsPHz4slutA8aw/f/48hBCoV69eiZ9p6tNdiSqKxQ9ZjHHjxqFHjx7Ytm0bdu7ciWnTpiE2NhY//fQTwsPDlR4eERGRRXBycqr0z9TpdJAkCTt27ICtrW2xfhcXl0ofE1knXvZGjy0oKAgAkJSUZNCen5+P5ORkff+j/79w4YLBeoWFhfontpUlJCQEb731Fn744QecOnUK+fn5eP/99/X95b1k7dHZrFOnTpVrfSIiImsRFBQEnU6nv0rikb/nvI+PDxwdHYvlOlA860NCQiCEQHBwMCIjI4stTz31lPw7QlQCFj/02CIjI+Hg4IAlS5ZACKFvX716NTIzM/VPh2nVqhWqV6+OVatWobCwUL/ehg0byryP58GD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xcVFbp8yZYqoV6+eWLRokfD19RV2dnbi7bffFklJSTr7Xbdunahfv76wsbERbm5uolWrVmLLli1CCN5USUREOZjN+WM2U0mRhCjgTjgiIiIiIiIV4WVvRERERERkFlj8EBERERGRWWDxQ0REREREZoHFDxERERERmQUWP0REREREZBZY/BARERERkVlg8UNERERERGaBxQ8REREREZkFFj9ERERERGQWWPwQEREREZFZYPFDRERERERmgcUPERERERGZBRY/RERERERkFlj8EBERERGRWWDxQwZ55ZVX8Morrxi9D7Vr1zZqH4iIiIqbJEmYOnWq/Hr16tWQJAnXr183Wp/02b9/PyRJwubNm43dFYNcv34dkiRh9erVxu4KlQAWP0REREQEAHjy5AmmTp2K/fv3G7srilu/fj2ioqKM3Q0yMitjd4BMy6+//mrsLhAREZml999/Hz169ICtrW2xfcaTJ08wbdo0ADD6lR5KW79+Pc6dO4dRo0bprPf398fTp09hbW1tnI5RiWLxQwaxsbExdheIiIhKLa1Wi8zMTNjZ2Sm+b0tLS1haWiq+X3MnSVKx/P9FpRMve1O5qVOnQpIkXLlyBeHh4XB1dYWLiwv69u2LJ0+eyNutWrUKbdq0gaenJ2xtbREUFITFixfn2d+z9/wkJCTAyspKPkP0rJiYGEiShAULFsjrkpOTMWrUKPj5+cHW1haBgYGYPXs2tFrtcx3byZMn0bx5c9jb2yMgIABLlizRac/MzMTkyZPRqFEjuLi4wMHBAS1btsS+ffvkbYQQqFSpErp06ZJn/+np6XBxccGHH34or8vIyMCUKVMQGBgIW1tb+Pn5Ydy4ccjIyNB57549e9CiRQu4urrC0dER1atXx8cff/xcx0lERMaxf/9+NG7cGHZ2dqhSpQqWLl0q52ouSZIwbNgwrFu3DrVq1YKtrS12794NAPi///s/NG/eHGXLloW9vT0aNWqU7/0wGRkZGD16NDw8PODk5ITOnTvj1q1bebYr6J6fXbt2oWXLlnBwcICTkxM6duyI8+fP62wTHh4OR0dH3L59G127doWjoyM8PDwwZswYaDQaADn3vnh4eAAApk2bBkmS8tx3VBQajQYff/wxvL294eDggM6dOyMuLi7Pdt9//z0aNWoEe3t7lCtXDr1798bt27fzbPf777/Lx+fq6oou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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import ConfusionMatrixDisplay\n",
"import matplotlib.pyplot as plt\n",
"\n",
"_, ax = plt.subplots(int(len(class_models) / 2), 2, figsize=(12, 10), sharex=False, sharey=False)\n",
"for index, key in enumerate(class_models.keys()):\n",
" c_matrix = class_models[key][\"Confusion_matrix\"]\n",
" disp = ConfusionMatrixDisplay(\n",
" confusion_matrix=c_matrix, display_labels=[\"Less\", \"More\"]\n",
" ).plot(ax=ax.flat[index])\n",
" disp.ax_.set_title(key)\n",
"\n",
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.1)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Precision_train | \n",
" Precision_test | \n",
" Recall_train | \n",
" Recall_test | \n",
" Accuracy_train | \n",
" Accuracy_test | \n",
" F1_train | \n",
" F1_test | \n",
"
\n",
" \n",
" \n",
" \n",
" logistic | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" ridge | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" decision_tree | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" naive_bayes | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" random_forest | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" gradient_boosting | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" knn | \n",
" 1.000000 | \n",
" 0.981818 | \n",
" 0.990654 | \n",
" 1.000000 | \n",
" 0.996743 | \n",
" 0.993506 | \n",
" 0.995305 | \n",
" 0.990826 | \n",
"
\n",
" \n",
" mlp | \n",
" 0.729323 | \n",
" 0.685714 | \n",
" 0.453271 | \n",
" 0.444444 | \n",
" 0.750814 | \n",
" 0.733766 | \n",
" 0.559078 | \n",
" 0.539326 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 126,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
" [\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" \"Accuracy_train\",\n",
" \"Accuracy_test\",\n",
" \"F1_train\",\n",
" \"F1_test\",\n",
" ]\n",
"]\n",
"class_metrics.sort_values(\n",
" by=\"Accuracy_test\", ascending=False\n",
").style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"Почти все модели, включая логистическую регрессию, ридж-регрессию, KNN, наивный байесовский классификатор, многослойную перцептронную сеть, случайный лес, дерево решений и градиентный бустинг, демонстрируют 100% точность (1.000000) на обучающей выборке. Это указывает на то, что модели смогли подстроиться под обучающие данные, что может указывать на возможное переобучение.\n",
"\n",
"ROC-кривая, каппа Коэна, коэффициент корреляции Мэтьюса\n"
]
},
{
"cell_type": "code",
"execution_count": 129,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Accuracy_test | \n",
" F1_test | \n",
" ROC_AUC_test | \n",
" Cohen_kappa_test | \n",
" MCC_test | \n",
"
\n",
" \n",
" \n",
" \n",
" logistic | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" ridge | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" decision_tree | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" knn | \n",
" 0.993506 | \n",
" 0.990826 | \n",
" 1.000000 | \n",
" 0.985801 | \n",
" 0.985901 | \n",
"
\n",
" \n",
" naive_bayes | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" gradient_boosting | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" random_forest | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" mlp | \n",
" 0.733766 | \n",
" 0.539326 | \n",
" 0.653148 | \n",
" 0.363893 | \n",
" 0.380814 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 129,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
" [\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" \"ROC_AUC_test\",\n",
" \"Cohen_kappa_test\",\n",
" \"MCC_test\",\n",
" ]\n",
"]\n",
"class_metrics.sort_values(by=\"ROC_AUC_test\", ascending=False).style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\n",
" \"ROC_AUC_test\",\n",
" \"MCC_test\",\n",
" \"Cohen_kappa_test\",\n",
" ],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'logistic'"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"best_model = str(class_metrics.sort_values(by=\"MCC_test\", ascending=False).iloc[0].name)\n",
"\n",
"display(best_model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод данных с ошибкой предсказания для оценки"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Error items count: 0'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Predicted | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: [Pregnancies, Predicted, Glucose, BloodPressure, SkinThickness, Insulin, BMI, DiabetesPedigreeFunction, Age, Outcome]\n",
"Index: []"
]
},
"execution_count": 132,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"preprocessing_result = pipeline_end.transform(X_test)\n",
"preprocessed_df = pd.DataFrame(\n",
" preprocessing_result,\n",
" columns=pipeline_end.get_feature_names_out(),\n",
")\n",
"\n",
"y_pred = class_models[best_model][\"preds\"]\n",
"\n",
"error_index = y_test[y_test[\"Outcome\"] != y_pred].index.tolist()\n",
"display(f\"Error items count: {len(error_index)}\")\n",
"\n",
"error_predicted = pd.Series(y_pred, index=y_test.index).loc[error_index]\n",
"error_df = X_test.loc[error_index].copy()\n",
"error_df.insert(loc=1, column=\"Predicted\", value=error_predicted)\n",
"error_df.sort_index()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Пример использования обученной модели (конвейера) для предсказания"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 555 | \n",
" 7.0 | \n",
" 124.0 | \n",
" 70.0 | \n",
" 33.0 | \n",
" 215.0 | \n",
" 25.5 | \n",
" 0.161 | \n",
" 37.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"555 7.0 124.0 70.0 33.0 215.0 25.5 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"555 0.161 37.0 0.0 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Glucose | \n",
" Age | \n",
" BloodPressure | \n",
" Outcome | \n",
" DiabetesPedigreeFunction | \n",
"
\n",
" \n",
" \n",
" \n",
" 555 | \n",
" 0.122742 | \n",
" 0.322537 | \n",
" 0.049921 | \n",
" -0.731437 | \n",
" -0.927636 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Glucose Age BloodPressure Outcome DiabetesPedigreeFunction\n",
"555 0.122742 0.322537 0.049921 -0.731437 -0.927636"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'predicted: 0 (proba: [0.99431769 0.00568231])'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'real: 0'"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model = class_models[best_model][\"pipeline\"]\n",
"\n",
"example_id = 555\n",
"test = pd.DataFrame(X_test.loc[example_id, :]).T\n",
"test_preprocessed = pd.DataFrame(preprocessed_df.loc[example_id, :]).T\n",
"display(test)\n",
"display(test_preprocessed)\n",
"result_proba = model.predict_proba(test)[0]\n",
"result = model.predict(test)[0]\n",
"real = int(y_test.loc[example_id].values[0])\n",
"display(f\"predicted: {result} (proba: {result_proba})\")\n",
"display(f\"real: {real}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Подбор гиперпараметров методом поиска по сетке"
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\5_semester\\AIM\\rep\\AIM-PIbd-31-Razubaev-S-M\\.venv\\Lib\\site-packages\\numpy\\ma\\core.py:2881: RuntimeWarning: invalid value encountered in cast\n",
" _data = np.array(data, dtype=dtype, copy=copy,\n"
]
},
{
"data": {
"text/plain": [
"{'model__criterion': 'gini',\n",
" 'model__max_depth': 5,\n",
" 'model__max_features': 'sqrt',\n",
" 'model__n_estimators': 10}"
]
},
"execution_count": 142,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import GridSearchCV\n",
"\n",
"optimized_model_type = \"random_forest\"\n",
"\n",
"random_forest_model = class_models[optimized_model_type][\"pipeline\"]\n",
"\n",
"param_grid = {\n",
" \"model__n_estimators\": [10, 50, 100],\n",
" \"model__max_features\": [\"sqrt\", \"log2\"],\n",
" \"model__max_depth\": [5, 7, 10],\n",
" \"model__criterion\": [\"gini\", \"entropy\"],\n",
"}\n",
"\n",
"gs_optomizer = GridSearchCV(\n",
" estimator=random_forest_model, param_grid=param_grid, n_jobs=-1\n",
")\n",
"gs_optomizer.fit(X_train, y_train.values.ravel())\n",
"gs_optomizer.best_params_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Обучение модели с новыми гиперпараметрами"
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {},
"outputs": [],
"source": [
"optimized_model = ensemble.RandomForestClassifier(\n",
" random_state=random_state,\n",
" criterion=\"gini\",\n",
" max_depth=5,\n",
" max_features=\"log2\",\n",
" n_estimators=10,\n",
")\n",
"\n",
"result = {}\n",
"\n",
"result[\"pipeline\"] = Pipeline([(\"pipeline\", pipeline_end), (\"model\", optimized_model)]).fit(X_train, y_train.values.ravel())\n",
"result[\"train_preds\"] = result[\"pipeline\"].predict(X_train)\n",
"result[\"probs\"] = result[\"pipeline\"].predict_proba(X_test)[:, 1]\n",
"result[\"preds\"] = np.where(result[\"probs\"] > 0.5, 1, 0)\n",
"\n",
"result[\"Precision_train\"] = metrics.precision_score(y_train, result[\"train_preds\"])\n",
"result[\"Precision_test\"] = metrics.precision_score(y_test, result[\"preds\"])\n",
"result[\"Recall_train\"] = metrics.recall_score(y_train, result[\"train_preds\"])\n",
"result[\"Recall_test\"] = metrics.recall_score(y_test, result[\"preds\"])\n",
"result[\"Accuracy_train\"] = metrics.accuracy_score(y_train, result[\"train_preds\"])\n",
"result[\"Accuracy_test\"] = metrics.accuracy_score(y_test, result[\"preds\"])\n",
"result[\"ROC_AUC_test\"] = metrics.roc_auc_score(y_test, result[\"probs\"])\n",
"result[\"F1_train\"] = metrics.f1_score(y_train, result[\"train_preds\"])\n",
"result[\"F1_test\"] = metrics.f1_score(y_test, result[\"preds\"])\n",
"result[\"MCC_test\"] = metrics.matthews_corrcoef(y_test, result[\"preds\"])\n",
"result[\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(y_test, result[\"preds\"])\n",
"result[\"Confusion_matrix\"] = metrics.confusion_matrix(y_test, result[\"preds\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование данных для оценки старой и новой версии модели"
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {},
"outputs": [],
"source": [
"optimized_metrics = pd.DataFrame(columns=list(result.keys()))\n",
"optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n",
" data=class_models[optimized_model_type]\n",
")\n",
"optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n",
" data=result\n",
")\n",
"optimized_metrics.insert(loc=0, column=\"Name\", value=[\"Old\", \"New\"])\n",
"optimized_metrics = optimized_metrics.set_index(\"Name\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Оценка параметров старой и новой модели"
]
},
{
"cell_type": "code",
"execution_count": 145,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Precision_train | \n",
" Precision_test | \n",
" Recall_train | \n",
" Recall_test | \n",
" Accuracy_train | \n",
" Accuracy_test | \n",
" F1_train | \n",
" F1_test | \n",
"
\n",
" \n",
" Name | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Old | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" New | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 145,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"optimized_metrics[\n",
" [\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" \"Accuracy_train\",\n",
" \"Accuracy_test\",\n",
" \"F1_train\",\n",
" \"F1_test\",\n",
" ]\n",
"].style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Accuracy_test | \n",
" F1_test | \n",
" ROC_AUC_test | \n",
" Cohen_kappa_test | \n",
" MCC_test | \n",
"
\n",
" \n",
" Name | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Old | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" New | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 146,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"optimized_metrics[\n",
" [\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" \"ROC_AUC_test\",\n",
" \"Cohen_kappa_test\",\n",
" \"MCC_test\",\n",
" ]\n",
"].style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\n",
" \"ROC_AUC_test\",\n",
" \"MCC_test\",\n",
" \"Cohen_kappa_test\",\n",
" ],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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JSotLdXf/vY3DR8+XPXq1dOkSZPOOresrEyhoaGW/Nz4+HhLxgFswc3KQK1BrgHngVxjBQz+ExYWpsTERKWkpOj+++9Xenq63nrrLUk/tFc8+eSTSkpKUuvWrSVJR44cUf/+/RUXF6f4+Hjddttt+s9//uMes7KyUmPGjFFcXJwaNmyo8ePHy/zJEvVPWzVKS0s1YcIEJScnKywsTK1atdJLL72k//znP7ruuuskSQ0aNJBhGBo0aJAkyeVyKSsrS6mpqYqIiFCHDh302muvefycv/3tb7r00ksVERGh6667zmOe52vChAm69NJLVb9+fbVo0UKTJ09WeXn5WectWLBAycnJql+/vvr376+CggKP44sWLVLbtm0VHh6uNm3a6IUXXqjxXOAntGoAtQa59vPINZBrFGBwkIiICJWVlbm/XrdunXbv3q21a9dq9erVKi8vV0ZGhqKjo/XRRx9p06ZNioqKUu/evd3fN2vWLC1dulSLFy/Wxo0blZeXpzfffPOcP/fuu+/Wn//8Z82ZM0fZ2dlasGCBoqKilJycrNdff12StHv3bh07dkzPPvusJCkrK0vLly/X/Pnz9cUXX2j06NEaOHCgNmzYIOl0oPbr10+33HKLduzYoXvuuUcTJ06s8d9JdHS0li5dqi+//FLPPvusFi5cqGeeecbjnH379unVV1/V22+/rTVr1uizzz7TAw884D7+8ssva8qUKXryySeVnZ2t6dOna/LkyVq2bFmN5wMAOH/k2tnINYAWRDiAaZpat26d3nvvPT344IPu/ZGRkVq0aJG7ReP//u//5HK5tGjRIhmGIUlasmSJ4uLitH79evXq1UuzZ8/WpEmT1K9fP0nS/Pnz9d5771X7s/fs2aNXX31Va9euVXp6uiSpRYsW7uNn2jqaNGmiuLg4SaevLE6fPl3vv/++unXr5v6ejRs3asGCBerZs6fmzZunli1batasWZKk1q1b69///reeeuqpGv3dPPLII+4/N2/eXGPHjtXKlSs1fvx49/6SkhItX75cF110kSTpueee00033aRZs2YpMTFRjz76qGbNmuX+O0lNTdWXX36pBQsWKDMzs0bzgR+YsuYqX+29UAjUOuRa9cg1kGsUYPCj1atXKyoqSuXl5XK5XPrd736nxx57zH28ffv2Hv3xO3fu1L59+xQdHe0xTklJifbv36+C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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"_, ax = plt.subplots(1, 2, figsize=(10, 4), sharex=False, sharey=False\n",
")\n",
"\n",
"for index in range(0, len(optimized_metrics)):\n",
" c_matrix = optimized_metrics.iloc[index][\"Confusion_matrix\"]\n",
" disp = ConfusionMatrixDisplay(\n",
" confusion_matrix=c_matrix, display_labels=[\"Less\", \"More\"]\n",
" ).plot(ax=ax.flat[index])\n",
"\n",
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.3)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Регрессионная модель"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin',\n",
" 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome'],\n",
" dtype='object')\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 6 | \n",
" 148 | \n",
" 72 | \n",
" 35 | \n",
" 0 | \n",
" 33.6 | \n",
" 0.627 | \n",
" 50 | \n",
" 1 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 85 | \n",
" 66 | \n",
" 29 | \n",
" 0 | \n",
" 26.6 | \n",
" 0.351 | \n",
" 31 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 8 | \n",
" 183 | \n",
" 64 | \n",
" 0 | \n",
" 0 | \n",
" 23.3 | \n",
" 0.672 | \n",
" 32 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" 1 | \n",
" 89 | \n",
" 66 | \n",
" 23 | \n",
" 94 | \n",
" 28.1 | \n",
" 0.167 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 0 | \n",
" 137 | \n",
" 40 | \n",
" 35 | \n",
" 168 | \n",
" 43.1 | \n",
" 2.288 | \n",
" 33 | \n",
" 1 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 763 | \n",
" 10 | \n",
" 101 | \n",
" 76 | \n",
" 48 | \n",
" 180 | \n",
" 32.9 | \n",
" 0.171 | \n",
" 63 | \n",
" 0 | \n",
"
\n",
" \n",
" 764 | \n",
" 2 | \n",
" 122 | \n",
" 70 | \n",
" 27 | \n",
" 0 | \n",
" 36.8 | \n",
" 0.340 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 765 | \n",
" 5 | \n",
" 121 | \n",
" 72 | \n",
" 23 | \n",
" 112 | \n",
" 26.2 | \n",
" 0.245 | \n",
" 30 | \n",
" 0 | \n",
"
\n",
" \n",
" 766 | \n",
" 1 | \n",
" 126 | \n",
" 60 | \n",
" 0 | \n",
" 0 | \n",
" 30.1 | \n",
" 0.349 | \n",
" 47 | \n",
" 1 | \n",
"
\n",
" \n",
" 767 | \n",
" 1 | \n",
" 93 | \n",
" 70 | \n",
" 31 | \n",
" 0 | \n",
" 30.4 | \n",
" 0.315 | \n",
" 23 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
768 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"0 6 148 72 35 0 33.6 \n",
"1 1 85 66 29 0 26.6 \n",
"2 8 183 64 0 0 23.3 \n",
"3 1 89 66 23 94 28.1 \n",
"4 0 137 40 35 168 43.1 \n",
".. ... ... ... ... ... ... \n",
"763 10 101 76 48 180 32.9 \n",
"764 2 122 70 27 0 36.8 \n",
"765 5 121 72 23 112 26.2 \n",
"766 1 126 60 0 0 30.1 \n",
"767 1 93 70 31 0 30.4 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"0 0.627 50 1 \n",
"1 0.351 31 0 \n",
"2 0.672 32 1 \n",
"3 0.167 21 0 \n",
"4 2.288 33 1 \n",
".. ... ... ... \n",
"763 0.171 63 0 \n",
"764 0.340 27 0 \n",
"765 0.245 30 0 \n",
"766 0.349 47 1 \n",
"767 0.315 23 0 \n",
"\n",
"[768 rows x 9 columns]"
]
},
"execution_count": 148,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn import set_config\n",
"\n",
"random_state=9\n",
"set_config(transform_output=\"pandas\")\n",
"df = pd.read_csv(\".//scv//diabetes.csv\")\n",
"print(df.columns)\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Разделение набора данных на обучающую и тестовые выборки"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'X_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
"
\n",
" \n",
" \n",
" \n",
" 60 | \n",
" 2 | \n",
" 84 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0.0 | \n",
" 0.304 | \n",
" 21 | \n",
"
\n",
" \n",
" 618 | \n",
" 9 | \n",
" 112 | \n",
" 82 | \n",
" 24 | \n",
" 0 | \n",
" 28.2 | \n",
" 1.282 | \n",
" 50 | \n",
"
\n",
" \n",
" 346 | \n",
" 1 | \n",
" 139 | \n",
" 46 | \n",
" 19 | \n",
" 83 | \n",
" 28.7 | \n",
" 0.654 | \n",
" 22 | \n",
"
\n",
" \n",
" 294 | \n",
" 0 | \n",
" 161 | \n",
" 50 | \n",
" 0 | \n",
" 0 | \n",
" 21.9 | \n",
" 0.254 | \n",
" 65 | \n",
"
\n",
" \n",
" 231 | \n",
" 6 | \n",
" 134 | \n",
" 80 | \n",
" 37 | \n",
" 370 | \n",
" 46.2 | \n",
" 0.238 | \n",
" 46 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 71 | \n",
" 5 | \n",
" 139 | \n",
" 64 | \n",
" 35 | \n",
" 140 | \n",
" 28.6 | \n",
" 0.411 | \n",
" 26 | \n",
"
\n",
" \n",
" 106 | \n",
" 1 | \n",
" 96 | \n",
" 122 | \n",
" 0 | \n",
" 0 | \n",
" 22.4 | \n",
" 0.207 | \n",
" 27 | \n",
"
\n",
" \n",
" 270 | \n",
" 10 | \n",
" 101 | \n",
" 86 | \n",
" 37 | \n",
" 0 | \n",
" 45.6 | \n",
" 1.136 | \n",
" 38 | \n",
"
\n",
" \n",
" 435 | \n",
" 0 | \n",
" 141 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 42.4 | \n",
" 0.205 | \n",
" 29 | \n",
"
\n",
" \n",
" 102 | \n",
" 0 | \n",
" 125 | \n",
" 96 | \n",
" 0 | \n",
" 0 | \n",
" 22.5 | \n",
" 0.262 | \n",
" 21 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 8 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"60 2 84 0 0 0 0.0 \n",
"618 9 112 82 24 0 28.2 \n",
"346 1 139 46 19 83 28.7 \n",
"294 0 161 50 0 0 21.9 \n",
"231 6 134 80 37 370 46.2 \n",
".. ... ... ... ... ... ... \n",
"71 5 139 64 35 140 28.6 \n",
"106 1 96 122 0 0 22.4 \n",
"270 10 101 86 37 0 45.6 \n",
"435 0 141 0 0 0 42.4 \n",
"102 0 125 96 0 0 22.5 \n",
"\n",
" DiabetesPedigreeFunction Age \n",
"60 0.304 21 \n",
"618 1.282 50 \n",
"346 0.654 22 \n",
"294 0.254 65 \n",
"231 0.238 46 \n",
".. ... ... \n",
"71 0.411 26 \n",
"106 0.207 27 \n",
"270 1.136 38 \n",
"435 0.205 29 \n",
"102 0.262 21 \n",
"\n",
"[614 rows x 8 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 60 | \n",
" 0 | \n",
"
\n",
" \n",
" 618 | \n",
" 1 | \n",
"
\n",
" \n",
" 346 | \n",
" 0 | \n",
"
\n",
" \n",
" 294 | \n",
" 0 | \n",
"
\n",
" \n",
" 231 | \n",
" 1 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 71 | \n",
" 0 | \n",
"
\n",
" \n",
" 106 | \n",
" 0 | \n",
"
\n",
" \n",
" 270 | \n",
" 1 | \n",
"
\n",
" \n",
" 435 | \n",
" 1 | \n",
"
\n",
" \n",
" 102 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"60 0\n",
"618 1\n",
"346 0\n",
"294 0\n",
"231 1\n",
".. ...\n",
"71 0\n",
"106 0\n",
"270 1\n",
"435 1\n",
"102 0\n",
"\n",
"[614 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'X_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
"
\n",
" \n",
" \n",
" \n",
" 668 | \n",
" 6 | \n",
" 98 | \n",
" 58 | \n",
" 33 | \n",
" 190 | \n",
" 34.0 | \n",
" 0.430 | \n",
" 43 | \n",
"
\n",
" \n",
" 324 | \n",
" 2 | \n",
" 112 | \n",
" 75 | \n",
" 32 | \n",
" 0 | \n",
" 35.7 | \n",
" 0.148 | \n",
" 21 | \n",
"
\n",
" \n",
" 624 | \n",
" 2 | \n",
" 108 | \n",
" 64 | \n",
" 0 | \n",
" 0 | \n",
" 30.8 | \n",
" 0.158 | \n",
" 21 | \n",
"
\n",
" \n",
" 690 | \n",
" 8 | \n",
" 107 | \n",
" 80 | \n",
" 0 | \n",
" 0 | \n",
" 24.6 | \n",
" 0.856 | \n",
" 34 | \n",
"
\n",
" \n",
" 473 | \n",
" 7 | \n",
" 136 | \n",
" 90 | \n",
" 0 | \n",
" 0 | \n",
" 29.9 | \n",
" 0.210 | \n",
" 50 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 355 | \n",
" 9 | \n",
" 165 | \n",
" 88 | \n",
" 0 | \n",
" 0 | \n",
" 30.4 | \n",
" 0.302 | \n",
" 49 | \n",
"
\n",
" \n",
" 534 | \n",
" 1 | \n",
" 77 | \n",
" 56 | \n",
" 30 | \n",
" 56 | \n",
" 33.3 | \n",
" 1.251 | \n",
" 24 | \n",
"
\n",
" \n",
" 344 | \n",
" 8 | \n",
" 95 | \n",
" 72 | \n",
" 0 | \n",
" 0 | \n",
" 36.8 | \n",
" 0.485 | \n",
" 57 | \n",
"
\n",
" \n",
" 296 | \n",
" 2 | \n",
" 146 | \n",
" 70 | \n",
" 38 | \n",
" 360 | \n",
" 28.0 | \n",
" 0.337 | \n",
" 29 | \n",
"
\n",
" \n",
" 462 | \n",
" 8 | \n",
" 74 | \n",
" 70 | \n",
" 40 | \n",
" 49 | \n",
" 35.3 | \n",
" 0.705 | \n",
" 39 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 8 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"668 6 98 58 33 190 34.0 \n",
"324 2 112 75 32 0 35.7 \n",
"624 2 108 64 0 0 30.8 \n",
"690 8 107 80 0 0 24.6 \n",
"473 7 136 90 0 0 29.9 \n",
".. ... ... ... ... ... ... \n",
"355 9 165 88 0 0 30.4 \n",
"534 1 77 56 30 56 33.3 \n",
"344 8 95 72 0 0 36.8 \n",
"296 2 146 70 38 360 28.0 \n",
"462 8 74 70 40 49 35.3 \n",
"\n",
" DiabetesPedigreeFunction Age \n",
"668 0.430 43 \n",
"324 0.148 21 \n",
"624 0.158 21 \n",
"690 0.856 34 \n",
"473 0.210 50 \n",
".. ... ... \n",
"355 0.302 49 \n",
"534 1.251 24 \n",
"344 0.485 57 \n",
"296 0.337 29 \n",
"462 0.705 39 \n",
"\n",
"[154 rows x 8 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 668 | \n",
" 0 | \n",
"
\n",
" \n",
" 324 | \n",
" 0 | \n",
"
\n",
" \n",
" 624 | \n",
" 0 | \n",
"
\n",
" \n",
" 690 | \n",
" 0 | \n",
"
\n",
" \n",
" 473 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 355 | \n",
" 1 | \n",
"
\n",
" \n",
" 534 | \n",
" 0 | \n",
"
\n",
" \n",
" 344 | \n",
" 0 | \n",
"
\n",
" \n",
" 296 | \n",
" 1 | \n",
"
\n",
" \n",
" 462 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"668 0\n",
"324 0\n",
"624 0\n",
"690 0\n",
"473 0\n",
".. ...\n",
"355 1\n",
"534 0\n",
"344 0\n",
"296 1\n",
"462 0\n",
"\n",
"[154 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from typing import Tuple\n",
"import pandas as pd\n",
"from pandas import DataFrame\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"def split_into_train_test(\n",
" df_input: DataFrame,\n",
" target_colname: str = \"above_average_close\",\n",
" frac_train: float = 0.8,\n",
" random_state: int = None,\n",
") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame]:\n",
" \n",
" if not (0 < frac_train < 1):\n",
" raise ValueError(\"Fraction must be between 0 and 1.\")\n",
" \n",
" # Проверка наличия целевого признака\n",
" if target_colname not in df_input.columns:\n",
" raise ValueError(f\"{target_colname} is not a column in the DataFrame.\")\n",
" \n",
" # Разделяем данные на признаки и целевую переменную\n",
" X = df_input.drop(columns=[target_colname]) # Признаки\n",
" y = df_input[[target_colname]] # Целевая переменная\n",
"\n",
" # Разделяем данные на обучающую и тестовую выборки\n",
" X_train, X_test, y_train, y_test = train_test_split(\n",
" X, y,\n",
" test_size=(1.0 - frac_train),\n",
" random_state=random_state\n",
" )\n",
" \n",
" return X_train, X_test, y_train, y_test\n",
"\n",
"# Применение функции для разделения данных\n",
"X_train, X_test, y_train, y_test = split_into_train_test(\n",
" df, \n",
" target_colname=\"Outcome\", \n",
" frac_train=0.8, \n",
" random_state=42 # Убедитесь, что вы задали нужное значение random_state\n",
")\n",
"\n",
"# Для отображения результатов\n",
"display(\"X_train\", X_train)\n",
"display(\"y_train\", y_train)\n",
"\n",
"display(\"X_test\", X_test)\n",
"display(\"y_test\", y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Определение перечня алгоритмов решения задачи аппроксимации (регрессии)"
]
},
{
"cell_type": "code",
"execution_count": 168,
"metadata": {},
"outputs": [],
"source": [
"\n",
"\n",
"from sklearn.pipeline import make_pipeline\n",
"from sklearn.preprocessing import PolynomialFeatures\n",
"from sklearn import linear_model, tree, neighbors, ensemble, neural_network\n",
"\n",
"random_state = 9\n",
"\n",
"models = {\n",
" \"linear\": {\"model\": linear_model.LinearRegression(n_jobs=-1)},\n",
" \"linear_poly\": {\n",
" \"model\": make_pipeline(\n",
" PolynomialFeatures(degree=2),\n",
" linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
" )\n",
" },\n",
" \"linear_interact\": {\n",
" \"model\": make_pipeline(\n",
" PolynomialFeatures(interaction_only=True),\n",
" linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
" )\n",
" },\n",
" \"ridge\": {\"model\": linear_model.RidgeCV()},\n",
" \"decision_tree\": {\n",
" \"model\": tree.DecisionTreeRegressor(max_depth=7, random_state=random_state)\n",
" },\n",
" \"knn\": {\"model\": neighbors.KNeighborsRegressor(n_neighbors=7, n_jobs=-1)},\n",
" \"random_forest\": {\n",
" \"model\": ensemble.RandomForestRegressor(\n",
" max_depth=7, random_state=random_state, n_jobs=-1\n",
" )\n",
" },\n",
" \"mlp\": {\n",
" \"model\": neural_network.MLPRegressor(\n",
" activation=\"tanh\",\n",
" hidden_layer_sizes=(3,),\n",
" max_iter=500,\n",
" early_stopping=True,\n",
" random_state=random_state,\n",
" )\n",
" },\n",
"}\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: linear\n",
"Model: linear_poly\n",
"Model: linear_interact\n",
"Model: ridge\n",
"Model: decision_tree\n",
"Model: knn\n",
"Model: random_forest\n",
"Model: mlp\n"
]
}
],
"source": [
"import math\n",
"from pandas import DataFrame\n",
"from sklearn import metrics\n",
"\n",
"for model_name in models.keys():\n",
" print(f\"Model: {model_name}\")\n",
"\n",
" fitted_model = models[model_name][\"model\"].fit(\n",
" X_train.values, y_train.values.ravel()\n",
" )\n",
" y_train_pred = fitted_model.predict(X_train.values)\n",
" y_test_pred = fitted_model.predict(X_test.values)\n",
" models[model_name][\"fitted\"] = fitted_model\n",
" models[model_name][\"train_preds\"] = y_train_pred\n",
" models[model_name][\"preds\"] = y_test_pred\n",
" models[model_name][\"RMSE_train\"] = math.sqrt(\n",
" metrics.mean_squared_error(y_train, y_train_pred)\n",
" )\n",
" models[model_name][\"RMSE_test\"] = math.sqrt(\n",
" metrics.mean_squared_error(y_test, y_test_pred)\n",
" )\n",
" models[model_name][\"RMAE_test\"] = math.sqrt(\n",
" metrics.mean_absolute_error(y_test, y_test_pred)\n",
" )\n",
" models[model_name][\"R2_test\"] = metrics.r2_score(y_test, y_test_pred)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод результатов оценки"
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" RMSE_train | \n",
" RMSE_test | \n",
" RMAE_test | \n",
" R2_test | \n",
"
\n",
" \n",
" \n",
" \n",
" random_forest | \n",
" 0.240052 | \n",
" 0.405871 | \n",
" 0.559210 | \n",
" 0.282505 | \n",
"
\n",
" \n",
" linear | \n",
" 0.396793 | \n",
" 0.413576 | \n",
" 0.590024 | \n",
" 0.255003 | \n",
"
\n",
" \n",
" ridge | \n",
" 0.396822 | \n",
" 0.414236 | \n",
" 0.590431 | \n",
" 0.252623 | \n",
"
\n",
" \n",
" linear_poly | \n",
" 0.370076 | \n",
" 0.422852 | \n",
" 0.584147 | \n",
" 0.221209 | \n",
"
\n",
" \n",
" linear_interact | \n",
" 0.380128 | \n",
" 0.426815 | \n",
" 0.593532 | \n",
" 0.206543 | \n",
"
\n",
" \n",
" decision_tree | \n",
" 0.249880 | \n",
" 0.445708 | \n",
" 0.520376 | \n",
" 0.134743 | \n",
"
\n",
" \n",
" knn | \n",
" 0.373319 | \n",
" 0.450285 | \n",
" 0.592157 | \n",
" 0.116883 | \n",
"
\n",
" \n",
" mlp | \n",
" 0.623529 | \n",
" 0.544323 | \n",
" 0.658689 | \n",
" -0.290498 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 170,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"reg_metrics = pd.DataFrame.from_dict(models, \"index\")[\n",
" [\"RMSE_train\", \"RMSE_test\", \"RMAE_test\", \"R2_test\"]\n",
"]\n",
"reg_metrics.sort_values(by=\"RMSE_test\").style.background_gradient(\n",
" cmap=\"viridis\", low=1, high=0.3, subset=[\"RMSE_train\", \"RMSE_test\"]\n",
").background_gradient(cmap=\"plasma\", low=0.3, high=1, subset=[\"RMAE_test\", \"R2_test\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Вывод реального и \"спрогнозированного\" результата для обучающей и тестовой выборок\n",
"\n",
"Получение лучшей модели\n"
]
},
{
"cell_type": "code",
"execution_count": 171,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'random_forest'"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"best_model = str(reg_metrics.sort_values(by=\"RMSE_test\").iloc[0].name)\n",
"\n",
"display(best_model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод для обучающей выборки"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
" DiabetPred | \n",
"
\n",
" \n",
" \n",
" \n",
" 60 | \n",
" 2 | \n",
" 84 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0.0 | \n",
" 0.304 | \n",
" 21 | \n",
" 0 | \n",
" 0.001849 | \n",
"
\n",
" \n",
" 618 | \n",
" 9 | \n",
" 112 | \n",
" 82 | \n",
" 24 | \n",
" 0 | \n",
" 28.2 | \n",
" 1.282 | \n",
" 50 | \n",
" 1 | \n",
" 0.758997 | \n",
"
\n",
" \n",
" 346 | \n",
" 1 | \n",
" 139 | \n",
" 46 | \n",
" 19 | \n",
" 83 | \n",
" 28.7 | \n",
" 0.654 | \n",
" 22 | \n",
" 0 | \n",
" 0.149231 | \n",
"
\n",
" \n",
" 294 | \n",
" 0 | \n",
" 161 | \n",
" 50 | \n",
" 0 | \n",
" 0 | \n",
" 21.9 | \n",
" 0.254 | \n",
" 65 | \n",
" 0 | \n",
" 0.239564 | \n",
"
\n",
" \n",
" 231 | \n",
" 6 | \n",
" 134 | \n",
" 80 | \n",
" 37 | \n",
" 370 | \n",
" 46.2 | \n",
" 0.238 | \n",
" 46 | \n",
" 1 | \n",
" 0.773890 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"60 2 84 0 0 0 0.0 \n",
"618 9 112 82 24 0 28.2 \n",
"346 1 139 46 19 83 28.7 \n",
"294 0 161 50 0 0 21.9 \n",
"231 6 134 80 37 370 46.2 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome DiabetPred \n",
"60 0.304 21 0 0.001849 \n",
"618 1.282 50 1 0.758997 \n",
"346 0.654 22 0 0.149231 \n",
"294 0.254 65 0 0.239564 \n",
"231 0.238 46 1 0.773890 "
]
},
"execution_count": 173,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.concat(\n",
" [\n",
" X_train,\n",
" y_train,\n",
" pd.Series(\n",
" models[best_model][\"train_preds\"],\n",
" index=y_train.index,\n",
" name=\"DiabetPred\",\n",
" ),\n",
" ],\n",
" axis=1,\n",
").head(5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод для тестовой выборки"
]
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
" DiabetPred | \n",
"
\n",
" \n",
" \n",
" \n",
" 668 | \n",
" 6 | \n",
" 98 | \n",
" 58 | \n",
" 33 | \n",
" 190 | \n",
" 34.0 | \n",
" 0.430 | \n",
" 43 | \n",
" 0 | \n",
" 0.516537 | \n",
"
\n",
" \n",
" 324 | \n",
" 2 | \n",
" 112 | \n",
" 75 | \n",
" 32 | \n",
" 0 | \n",
" 35.7 | \n",
" 0.148 | \n",
" 21 | \n",
" 0 | \n",
" 0.205507 | \n",
"
\n",
" \n",
" 624 | \n",
" 2 | \n",
" 108 | \n",
" 64 | \n",
" 0 | \n",
" 0 | \n",
" 30.8 | \n",
" 0.158 | \n",
" 21 | \n",
" 0 | \n",
" 0.047710 | \n",
"
\n",
" \n",
" 690 | \n",
" 8 | \n",
" 107 | \n",
" 80 | \n",
" 0 | \n",
" 0 | \n",
" 24.6 | \n",
" 0.856 | \n",
" 34 | \n",
" 0 | \n",
" 0.128867 | \n",
"
\n",
" \n",
" 473 | \n",
" 7 | \n",
" 136 | \n",
" 90 | \n",
" 0 | \n",
" 0 | \n",
" 29.9 | \n",
" 0.210 | \n",
" 50 | \n",
" 0 | \n",
" 0.438512 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"668 6 98 58 33 190 34.0 \n",
"324 2 112 75 32 0 35.7 \n",
"624 2 108 64 0 0 30.8 \n",
"690 8 107 80 0 0 24.6 \n",
"473 7 136 90 0 0 29.9 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome DiabetPred \n",
"668 0.430 43 0 0.516537 \n",
"324 0.148 21 0 0.205507 \n",
"624 0.158 21 0 0.047710 \n",
"690 0.856 34 0 0.128867 \n",
"473 0.210 50 0 0.438512 "
]
},
"execution_count": 174,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.concat(\n",
" [\n",
" X_test,\n",
" y_test,\n",
" pd.Series(\n",
" models[best_model][\"preds\"],\n",
" index=y_test.index,\n",
" name=\"DiabetPred\",\n",
" ),\n",
" ],\n",
" axis=1,\n",
").head(5)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.12.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}