diff --git a/lab_4/lab_4.ipynb b/lab_4/lab_4.ipynb new file mode 100644 index 0000000..a88831b --- /dev/null +++ b/lab_4/lab_4.ipynb @@ -0,0 +1,1935 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Начало лабораторной работы" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['age', 'sex', 'bmi', 'children', 'smoker', 'region', 'charges'], dtype='object')\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "print(df.columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Бизнес-цели" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Прогнозирование стоимости страховых взносов:\n", + "\n", + "Цель: Разработать модель, которая будет предсказывать стоимость страховых взносов для новых клиентов на основе их характеристик (возраст, пол, ИМТ, количество детей, статус курения, регион проживания).\n", + "\n", + "Применение:\n", + "Клиенты могут получить представление о примерной стоимости страховки до обращения в компанию.\n", + "\n", + "2. Оптимизация тарифной сетки:\n", + "\n", + "Цель: Определить оптимальные коэффициенты для различных факторов, влияющих на стоимость страховки (например, возраст, ИМТ, статус курения), чтобы максимизировать прибыль компании при сохранении конкурентоспособных тарифов.\n", + "\n", + "Применение:\n", + "Страховые компании могут использовать эти коэффициенты для корректировки тарифной сетки и повышения эффективности бизнеса." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Прогнозирование стоимости страховых взносов:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Среднее значение поля 'charges': 13261.369959046897\n", + " age sex bmi children smoker region charges \\\n", + "0 19 female 27.900 0 yes southwest 16884.92400 \n", + "1 18 male 33.770 1 no southeast 1725.55230 \n", + "2 28 male 33.000 3 no southeast 4449.46200 \n", + "3 33 male 22.705 0 no northwest 21984.47061 \n", + "4 32 male 28.880 0 no northwest 3866.85520 \n", + "\n", + " above_average_charges charges_volatility \n", + "0 1 62648.55411 \n", + "1 0 62648.55411 \n", + "2 0 62648.55411 \n", + "3 1 62648.55411 \n", + "4 0 62648.55411 \n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Загружаем набор данных\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "\n", + "# Устанавливаем случайное состояние\n", + "random_state = 42\n", + "\n", + "# Рассчитываем среднее значение стоимости страховых взносов\n", + "average_charges = df['charges'].mean()\n", + "print(f\"Среднее значение поля 'charges': {average_charges}\")\n", + "\n", + "# Создаем новую переменную, указывающую, превышает ли стоимость страховых взносов среднюю\n", + "df['above_average_charges'] = (df['charges'] > average_charges).astype(int)\n", + "\n", + "# Рассчитываем волатильность (разницу между максимальной и минимальной стоимостью страховых взносов)\n", + "df['charges_volatility'] = df['charges'].max() - df['charges'].min()\n", + "\n", + "# Выводим первые строки измененной таблицы для проверки\n", + "print(df.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Оптимизация тарифной сетки:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Средняя стоимость страховых взносов для 'age':\n", + "age\n", + "18 6714.267794\n", + "19 9634.641344\n", + "20 10159.697736\n", + "21 5349.737625\n", + "22 10675.132648\n", + "23 12050.721224\n", + "24 10648.015962\n", + "25 9610.781531\n", + "26 5955.403311\n", + "27 13130.462272\n", + "28 8757.474523\n", + "29 10430.158727\n", + "30 13580.480238\n", + "31 10196.980573\n", + "32 10071.740266\n", + "33 12118.482617\n", + "34 11613.528121\n", + "35 11307.182031\n", + "36 12204.476138\n", + "37 17595.511688\n", + "38 8102.733674\n", + "39 11468.895088\n", + "40 11772.251310\n", + "41 9533.603123\n", + "42 13061.038669\n", + "43 19267.278653\n", + "44 16439.727524\n", + "45 14404.055995\n", + "46 14201.069951\n", + "47 18153.128652\n", + "48 14632.500445\n", + "49 12696.006264\n", + "50 15663.003301\n", + "51 15452.800438\n", + "52 18951.581034\n", + "53 15795.645012\n", + "54 18252.834139\n", + "55 16164.545488\n", + "56 14727.018377\n", + "57 16283.671944\n", + "58 13815.290525\n", + "59 18639.637165\n", + "60 21979.418507\n", + "61 22024.457609\n", + "62 18926.646066\n", + "63 19884.998461\n", + "64 24419.101775\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'sex':\n", + "sex\n", + "female 12486.831977\n", + "male 14013.872721\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'bmi':\n", + "bmi\n", + "15.960 1694.796400\n", + "16.815 4904.000350\n", + "17.195 14455.644050\n", + "17.290 7813.353433\n", + "17.385 2775.192150\n", + " ... \n", + "48.070 9432.925300\n", + "49.060 11381.325400\n", + "50.380 2438.055200\n", + "52.580 44501.398200\n", + "53.130 1163.462700\n", + "Name: charges, Length: 548, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'children':\n", + "children\n", + "0 12317.920881\n", + "1 12722.650521\n", + "2 15268.182723\n", + "3 15304.070620\n", + "4 13550.983876\n", + "5 8706.036629\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'smoker':\n", + "smoker\n", + "no 8417.874411\n", + "yes 32223.139764\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'region':\n", + "region\n", + "northeast 13475.874737\n", + "northwest 12463.129315\n", + "southeast 14748.777706\n", + "southwest 12164.196435\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для комбинации 'age' и 'smoker':\n", + "age smoker\n", + "18 no 3083.404099\n", + " yes 25473.730221\n", + "19 no 3492.047133\n", + " yes 26445.951817\n", + "20 no 3673.112925\n", + " ... \n", + "62 yes 37084.607312\n", + "63 no 14205.335706\n", + " yes 40331.784380\n", + "64 no 15805.350545\n", + " yes 40569.885331\n", + "Name: charges, Length: 94, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для комбинации 'bmi' и 'smoker':\n", + "bmi smoker\n", + "15.960 no 1694.79640\n", + "16.815 no 4904.00035\n", + "17.195 yes 14455.64405\n", + "17.290 no 5305.30260\n", + " yes 12829.45510\n", + " ... \n", + "48.070 no 9432.92530\n", + "49.060 no 11381.32540\n", + "50.380 no 2438.05520\n", + "52.580 yes 44501.39820\n", + "53.130 no 1163.46270\n", + "Name: charges, Length: 701, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для комбинации 'region' и 'smoker':\n", + "region smoker\n", + "northeast no 9225.395851\n", + " yes 29790.212814\n", + "northwest no 8681.948181\n", + " yes 29959.103039\n", + "southeast no 7887.181702\n", + " yes 35262.090761\n", + "southwest no 7956.579615\n", + " yes 32346.494062\n", + "Name: charges, dtype: float64\n", + "\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Загружаем набор данных\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "\n", + "# Устанавливаем случайное состояние\n", + "random_state = 42\n", + "\n", + "# Рассчитываем среднюю стоимость страховых взносов для каждого значения каждого признака\n", + "for column in ['age', 'sex', 'bmi', 'children', 'smoker', 'region']:\n", + " print(f\"Средняя стоимость страховых взносов для '{column}':\")\n", + " print(df.groupby(column)['charges'].mean())\n", + " print()\n", + "\n", + "# Рассчитываем среднюю стоимость страховых взносов для комбинаций признаков\n", + "# для комбинации 'age' и 'smoker'\n", + "print(\"Средняя стоимость страховых взносов для комбинации 'age' и 'smoker':\")\n", + "print(df.groupby(['age', 'smoker'])['charges'].mean())\n", + "print()\n", + "\n", + "# Рассчитываем среднюю стоимость страховых взносов для комбинации 'bmi' и 'smoker'\n", + "print(\"Средняя стоимость страховых взносов для комбинации 'bmi' и 'smoker':\")\n", + "print(df.groupby(['bmi', 'smoker'])['charges'].mean())\n", + "print()\n", + "\n", + "# Рассчитываем среднюю стоимость страховых взносов для комбинации 'region' и 'smoker'\n", + "print(\"Средняя стоимость страховых взносов для комбинации 'region' и 'smoker':\")\n", + "print(df.groupby(['region', 'smoker'])['charges'].mean())\n", + "print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Выбор ориентира для каждой задачи:\n", + "1. Прогнозирование стоимости страховых взносов:\n", + "Ориентир:\n", + "\n", + "R² (коэффициент детерминации): 0.75 - 0.85\n", + "\n", + "MAE (средняя абсолютная ошибка): 2000 - 3000 долларов\n", + "\n", + "RMSE (среднеквадратичная ошибка): 3000 - 5000 долларов\n", + "\n", + "Объяснение:\n", + "\n", + "R²: Значение 0.75 - 0.85 будет означать, что модель объясняет 75-85% вариации стоимости страховых взносов, что является хорошим результатом для задачи регрессии.\n", + "\n", + "MAE: Значение 2000 - 3000 долларов будет означать, что в среднем модель ошибается на 2000 - 3000 долларов при прогнозировании стоимости страховых взносов.\n", + "\n", + "RMSE: Значение 3000 - 5000 долларов будет означать, что среднеквадратичная ошибка модели составляет 3000 - 4000 долларов.\n", + "\n", + "2. Оптимизация тарифной сетки:\n", + "Ориентир:\n", + "\n", + "Увеличение прибыли компании: 5% - 10%\n", + "\n", + "Сохранение конкурентоспособных тарифов:\n", + "\n", + "Средняя стоимость страховых взносов не должна увеличиваться более чем на 5% по сравнению с текущими тарифами.\n", + "\n", + "Доля клиентов, считающих тарифы дорогими, не должна увеличиваться более чем на 2%.\n", + "\n", + "Объяснение:\n", + "\n", + "Увеличение прибыли компании: Цель оптимизации тарифной сетки - максимизировать прибыль компании. Ориентир в 5% - 10% увеличения прибыли является реалистичным и достижимым.\n", + "\n", + "Сохранение конкурентоспособных тарифов: Важно, чтобы оптимизация тарифной сетки не привела к значительному увеличению стоимости страховых взносов для клиентов. Ориентир в 5% увеличения средней стоимости страховых взносов и 2% увеличения доли клиентов, считающих тарифы дорогими, позволяет сохранить конкурентоспособность компании." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MAE: 4160.247974762991\n", + "MSE: 39933194.54805147\n", + "RMSE: 6319.271678607549\n", + "R²: 0.73981661775643\n", + "Ориентиры для прогнозирования стоимости страховых взносов не достигнуты.\n", + "Средняя стоимость страховых взносов для 'age':\n", + "age\n", + "18 6714.267794\n", + "19 9634.641344\n", + "20 10159.697736\n", + "21 5349.737625\n", + "22 10675.132648\n", + "23 12050.721224\n", + "24 10648.015962\n", + "25 9610.781531\n", + "26 5955.403311\n", + "27 13130.462272\n", + "28 8757.474523\n", + "29 10430.158727\n", + "30 13580.480238\n", + "31 10196.980573\n", + "32 10071.740266\n", + "33 12118.482617\n", + "34 11613.528121\n", + "35 11307.182031\n", + "36 12204.476138\n", + "37 17595.511688\n", + "38 8102.733674\n", + "39 11468.895088\n", + "40 11772.251310\n", + "41 9533.603123\n", + "42 13061.038669\n", + "43 19267.278653\n", + "44 16439.727524\n", + "45 14404.055995\n", + "46 14201.069951\n", + "47 18153.128652\n", + "48 14632.500445\n", + "49 12696.006264\n", + "50 15663.003301\n", + "51 15452.800438\n", + "52 18951.581034\n", + "53 15795.645012\n", + "54 18252.834139\n", + "55 16164.545488\n", + "56 14727.018377\n", + "57 16283.671944\n", + "58 13815.290525\n", + "59 18639.637165\n", + "60 21979.418507\n", + "61 22024.457609\n", + "62 18926.646066\n", + "63 19884.998461\n", + "64 24419.101775\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'bmi':\n", + "bmi\n", + "15.960 1694.796400\n", + "16.815 4904.000350\n", + "17.195 14455.644050\n", + "17.290 7813.353433\n", + "17.385 2775.192150\n", + " ... \n", + "48.070 9432.925300\n", + "49.060 11381.325400\n", + "50.380 2438.055200\n", + "52.580 44501.398200\n", + "53.130 1163.462700\n", + "Name: charges, Length: 548, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'children':\n", + "children\n", + "0 12317.920881\n", + "1 12722.650521\n", + "2 15268.182723\n", + "3 15304.070620\n", + "4 13550.983876\n", + "5 8706.036629\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'sex_male':\n", + "sex_male\n", + "False 12486.831977\n", + "True 14013.872721\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'smoker_yes':\n", + "smoker_yes\n", + "False 8417.874411\n", + "True 32223.139764\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'region_northwest':\n", + "region_northwest\n", + "False 13512.808188\n", + "True 12463.129315\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'region_southeast':\n", + "region_southeast\n", + "False 12693.396712\n", + "True 14748.777706\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для 'region_southwest':\n", + "region_southwest\n", + "False 13620.788872\n", + "True 12164.196435\n", + "Name: charges, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для комбинации 'age' и 'smoker_yes':\n", + "age smoker_yes\n", + "18 False 3083.404099\n", + " True 25473.730221\n", + "19 False 3492.047133\n", + " True 26445.951817\n", + "20 False 3673.112925\n", + " ... \n", + "62 True 37084.607312\n", + "63 False 14205.335706\n", + " True 40331.784380\n", + "64 False 15805.350545\n", + " True 40569.885331\n", + "Name: charges, Length: 94, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для комбинации 'bmi' и 'smoker_yes':\n", + "bmi smoker_yes\n", + "15.960 False 1694.79640\n", + "16.815 False 4904.00035\n", + "17.195 True 14455.64405\n", + "17.290 False 5305.30260\n", + " True 12829.45510\n", + " ... \n", + "48.070 False 9432.92530\n", + "49.060 False 11381.32540\n", + "50.380 False 2438.05520\n", + "52.580 True 44501.39820\n", + "53.130 False 1163.46270\n", + "Name: charges, Length: 701, dtype: float64\n", + "\n", + "Средняя стоимость страховых взносов для комбинации 'region_northwest' и 'smoker_yes':\n", + "region_northwest smoker_yes\n", + "False False 8331.120934\n", + " True 32822.144996\n", + "True False 8681.948181\n", + " True 29959.103039\n", + "Name: charges, dtype: float64\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n", + "\n", + "# Загружаем набор данных\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "\n", + "# Преобразуем категориальные переменные в числовые\n", + "df = pd.get_dummies(df, columns=['sex', 'smoker', 'region'], drop_first=True)\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y)\n", + "X = df.drop('charges', axis=1)\n", + "y = df['charges']\n", + "\n", + "# Разделяем данные на обучающую и тестовую выборки\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "\n", + "# Стандартизируем признаки\n", + "scaler = StandardScaler()\n", + "X_train = scaler.fit_transform(X_train)\n", + "X_test = scaler.transform(X_test)\n", + "\n", + "# Обучаем модель линейной регрессии\n", + "model = LinearRegression()\n", + "model.fit(X_train, y_train)\n", + "\n", + "# Делаем предсказания на тестовой выборке\n", + "y_pred = model.predict(X_test)\n", + "\n", + "# Оцениваем качество модели\n", + "mae = mean_absolute_error(y_test, y_pred)\n", + "mse = mean_squared_error(y_test, y_pred)\n", + "rmse = mean_squared_error(y_test, y_pred, squared=False)\n", + "r2 = r2_score(y_test, y_pred)\n", + "\n", + "print(f\"MAE: {mae}\")\n", + "print(f\"MSE: {mse}\")\n", + "print(f\"RMSE: {rmse}\")\n", + "print(f\"R²: {r2}\")\n", + "\n", + "# Проверяем, достигнуты ли ориентиры\n", + "if r2 >= 0.75 and mae <= 3000 and rmse <= 5000:\n", + " print(\"Ориентиры для прогнозирования стоимости страховых взносов достигнуты!\")\n", + "else:\n", + " print(\"Ориентиры для прогнозирования стоимости страховых взносов не достигнуты.\")\n", + "\n", + "# Оптимизация тарифной сетки\n", + "# Убедитесь, что столбцы существуют\n", + "columns_to_group = ['age', 'bmi', 'children', 'sex_male', 'smoker_yes', 'region_northwest', 'region_southeast', 'region_southwest']\n", + "\n", + "# Рассчитываем среднюю стоимость страховых взносов для каждого значения каждого признака\n", + "for column in columns_to_group:\n", + " print(f\"Средняя стоимость страховых взносов для '{column}':\")\n", + " print(df.groupby(column)['charges'].mean())\n", + " print()\n", + "\n", + "# Рассчитываем среднюю стоимость страховых взносов для комбинаций признаков\n", + "# Например, для комбинации 'age' и 'smoker_yes'\n", + "print(\"Средняя стоимость страховых взносов для комбинации 'age' и 'smoker_yes':\")\n", + "print(df.groupby(['age', 'smoker_yes'])['charges'].mean())\n", + "print()\n", + "\n", + "# Рассчитываем среднюю стоимость страховых взносов для комбинации 'bmi' и 'smoker_yes'\n", + "print(\"Средняя стоимость страховых взносов для комбинации 'bmi' и 'smoker_yes':\")\n", + "print(df.groupby(['bmi', 'smoker_yes'])['charges'].mean())\n", + "print()\n", + "\n", + "# Рассчитываем среднюю стоимость страховых взносов для комбинации 'region_northwest' и 'smoker_yes'\n", + "print(\"Средняя стоимость страховых взносов для комбинации 'region_northwest' и 'smoker_yes':\")\n", + "print(df.groupby(['region_northwest', 'smoker_yes'])['charges'].mean())\n", + "print()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Анализ применимости алгоритмов обучения с учителем для решения поставленных задач:\n", + "1. Прогнозирование стоимости страховых взносов:\n", + "Задача: Регрессия\n", + "\n", + "Свойства алгоритмов:\n", + "\n", + "Линейная регрессия:\n", + "Применимость: Хорошо подходит для задач, где зависимость между признаками и целевой переменной линейна.\n", + "Преимущества: Проста в реализации, интерпретируема.\n", + "Недостатки: Может плохо работать, если зависимость нелинейна.\n", + "\n", + "Деревья решений (регрессия):\n", + "Применимость: Подходит для задач с нелинейными зависимостями.\n", + "Преимущества: Может обрабатывать категориальные признаки, не требует масштабирования данных.\n", + "Недостатки: Подвержены переобучению, могут давать нестабильные результаты.\n", + "\n", + "Случайный лес (регрессия):\n", + "Применимость: Хорошо подходит для задач с нелинейными зависимостями и большим количеством признаков.\n", + "Преимущества: Устойчив к переобучению, может обрабатывать категориальные признаки.\n", + "Недостатки: Менее интерпретируем, чем линейная регрессия.\n", + "\n", + "Градиентный бустинг (регрессия):\n", + "Применимость: Подходит для задач с нелинейными зависимостями и сложными взаимосвязями между признаками.\n", + "Преимущества: Может достигать высокой точности, устойчив к переобучению.\n", + "Недостатки: Сложнее в настройке, чем случайный лес, менее интерпретируем.\n", + "\n", + "Нейронные сети (регрессия):\n", + "Применимость: Подходит для задач с очень сложными зависимостями и большим количеством данных.\n", + "Преимущества: Может моделировать очень сложные зависимости.\n", + "Недостатки: Требует большого количества данных, сложнее в настройке и интерпретации.\n", + "\n", + "Вывод:\n", + "\n", + "Линейная регрессия: Может быть хорошим выбором для начала, особенно если зависимость между признаками и целевой переменной линейна.\n", + "\n", + "Деревья решений и случайный лес: Подходят для задач с нелинейными зависимостями.\n", + "\n", + "Градиентный бустинг: Может давать более высокую точность, чем случайный лес, но требует больше времени на настройку.\n", + "\n", + "Нейронные сети: Могут быть излишними для этой задачи, если данных недостаточно много.\n", + "\n", + "2. Оптимизация тарифной сетки:\n", + "Задача: Классификация (группировка клиентов по группам риска)\n", + "\n", + "Свойства алгоритмов:\n", + "\n", + "Логистическая регрессия:\n", + "Применимость: Хорошо подходит для задач бинарной классификации, где зависимость между признаками и целевой переменной линейна.\n", + "Преимущества: Проста в реализации, интерпретируема.\n", + "Недостатки: Может плохо работать, если зависимость нелинейна.\n", + "\n", + "Деревья решений (классификация):\n", + "Применимость: Подходит для задач с нелинейными зависимостями.\n", + "Преимущества: Может обрабатывать категориальные признаки, не требует масштабирования данных.\n", + "Недостатки: Подвержены переобучению, могут давать нестабильные результаты.\n", + "\n", + "Случайный лес (классификация):\n", + "Применимость: Хорошо подходит для задач с нелинейными зависимостями и большим количеством признаков.\n", + "Преимущества: Устойчив к переобучению, может обрабатывать категориальные признаки.\n", + "Недостатки: Менее интерпретируем, чем линейная регрессия.\n", + "\n", + "Градиентный бустинг (классификация):\n", + "Применимость: Подходит для задач с нелинейными зависимостями и сложными взаимосвязями между признаками.\n", + "Преимущества: Может достигать высокой точности, устойчив к переобучению.\n", + "Недостатки: Сложнее в настройке, чем случайный лес, менее интерпретируем.\n", + "\n", + "Нейронные сети (классификация):\n", + "Применимость: Подходит для задач с очень сложными зависимостями и большим количеством данных.\n", + "Преимущества: Может моделировать очень сложные зависимости.\n", + "Недостатки: Требует большого количества данных, сложнее в настройке и интерпретации.\n", + "\n", + "Вывод:\n", + "\n", + "Логистическая регрессия: Может быть хорошим выбором для начала, особенно если зависимость между признаками и целевой переменной линейна.\n", + "\n", + "Деревья решений и случайный лес: Подходят для задач с нелинейными зависимостями.\n", + "\n", + "Градиентный бустинг: Может давать более высокую точность, чем случайный лес, но требует больше времени на настройку.\n", + "\n", + "Нейронные сети: Могут быть излишними для этой задачи, если данных недостаточно много.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Прогнозирование стоимости страховых взносов:\n", + "Выбранные модели:\n", + "\n", + "Линейная регрессия\n", + "\n", + "Случайный лес (регрессия)\n", + "\n", + "Градиентный бустинг (регрессия)\n", + "\n", + "2. Оптимизация тарифной сетки:\n", + "Выбранные модели:\n", + "\n", + "Логистическая регрессия\n", + "\n", + "Случайный лес (классификация)\n", + "\n", + "Градиентный бустинг (классификация)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Результаты для задачи регрессии:\n", + "Model: Linear Regression\n", + "MAE: 4160.247974762991\n", + "MSE: 39933194.54805147\n", + "RMSE: 6319.271678607549\n", + "R²: 0.73981661775643\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n", + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n", + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: Random Forest Regression\n", + "MAE: 1303.0047135437117\n", + "MSE: 7810682.767902057\n", + "RMSE: 2794.759876608732\n", + "R²: 0.9491097598580805\n", + "\n", + "Model: Gradient Boosting Regression\n", + "MAE: 2297.7789526178262\n", + "MSE: 19231434.89568898\n", + "RMSE: 4385.365993356652\n", + "R²: 0.8746982345593103\n", + "\n", + "Результаты для задачи классификации:\n", + "Model: Logistic Regression\n", + "Accuracy: 0.8864864864864865\n", + "\n", + "Model: Random Forest Classification\n", + "Accuracy: 0.9765765765765766\n", + "\n", + "Model: Gradient Boosting Classification\n", + "Accuracy: 0.9225225225225225\n", + "\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.linear_model import LinearRegression, LogisticRegression\n", + "from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier\n", + "from sklearn.ensemble import GradientBoostingRegressor, GradientBoostingClassifier\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score, accuracy_score\n", + "\n", + "# Загружаем набор данных\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "\n", + "# Преобразуем категориальные переменные в числовые\n", + "df = pd.get_dummies(df, columns=['sex', 'smoker', 'region'], drop_first=True)\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи регрессии\n", + "X_reg = df.drop('charges', axis=1)\n", + "y_reg = df['charges']\n", + "\n", + "# Разделяем данные на обучающую и тестовую выборки для задачи регрессии\n", + "X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X_reg, y_reg, test_size=0.2, random_state=42)\n", + "\n", + "# Стандартизируем признаки для задачи регрессии\n", + "scaler_reg = StandardScaler()\n", + "X_train_reg = scaler_reg.fit_transform(X_train_reg)\n", + "X_test_reg = scaler_reg.transform(X_test_reg)\n", + "\n", + "# Список моделей для задачи регрессии\n", + "models_reg = {\n", + " \"Linear Regression\": LinearRegression(),\n", + " \"Random Forest Regression\": RandomForestRegressor(),\n", + " \"Gradient Boosting Regression\": GradientBoostingRegressor()\n", + "}\n", + "\n", + "# Обучаем и оцениваем модели для задачи регрессии\n", + "print(\"Результаты для задачи регрессии:\")\n", + "for name, model in models_reg.items():\n", + " model.fit(X_train_reg, y_train_reg)\n", + " y_pred_reg = model.predict(X_test_reg)\n", + " mae = mean_absolute_error(y_test_reg, y_pred_reg)\n", + " mse = mean_squared_error(y_test_reg, y_pred_reg)\n", + " rmse = mean_squared_error(y_test_reg, y_pred_reg, squared=False)\n", + " r2 = r2_score(y_test_reg, y_pred_reg)\n", + " print(f\"Model: {name}\")\n", + " print(f\"MAE: {mae}\")\n", + " print(f\"MSE: {mse}\")\n", + " print(f\"RMSE: {rmse}\")\n", + " print(f\"R²: {r2}\")\n", + " print()\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи классификации\n", + "X_class = df.drop('charges', axis=1)\n", + "y_class = (df['charges'] > df['charges'].mean()).astype(int)\n", + "\n", + "# Разделяем данные на обучающую и тестовую выборки для задачи классификации\n", + "X_train_class, X_test_class, y_train_class, y_test_class = train_test_split(X_class, y_class, test_size=0.2, random_state=42)\n", + "\n", + "# Стандартизируем признаки для задачи классификации\n", + "scaler_class = StandardScaler()\n", + "X_train_class = scaler_class.fit_transform(X_train_class)\n", + "X_test_class = scaler_class.transform(X_test_class)\n", + "\n", + "# Список моделей для задачи классификации\n", + "models_class = {\n", + " \"Logistic Regression\": LogisticRegression(),\n", + " \"Random Forest Classification\": RandomForestClassifier(),\n", + " \"Gradient Boosting Classification\": GradientBoostingClassifier()\n", + "}\n", + "\n", + "# Обучаем и оцениваем модели для задачи классификации\n", + "print(\"Результаты для задачи классификации:\")\n", + "for name, model in models_class.items():\n", + " model.fit(X_train_class, y_train_class)\n", + " y_pred_class = model.predict(X_test_class)\n", + " accuracy = accuracy_score(y_test_class, y_pred_class)\n", + " print(f\"Model: {name}\")\n", + " print(f\"Accuracy: {accuracy}\")\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Прогнозирование стоимости страховых взносов:\n", + "Конвейер для задачи регрессии:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Результаты для задачи регрессии:\n", + "Model: Linear Regression\n", + "MAE: 4158.694987099099\n", + "MSE: 39908584.112821\n", + "RMSE: 6317.32412599045\n", + "R²: 0.7399769662171334\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: Random Forest Regression\n", + "MAE: 1302.1428312961073\n", + "MSE: 7363635.134840652\n", + "RMSE: 2713.6018747857343\n", + "R²: 0.9520224836336337\n", + "\n", + "Model: Gradient Boosting Regression\n", + "MAE: 2304.718628546955\n", + "MSE: 19256343.733882822\n", + "RMSE: 4388.205069716184\n", + "R²: 0.8745359418641633\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n", + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n", + "\n", + "# Загружаем набор данных\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "\n", + "# Определяем категориальные и числовые столбцы\n", + "categorical_cols = ['sex', 'smoker', 'region']\n", + "numerical_cols = ['age', 'bmi', 'children']\n", + "\n", + "# Создаем преобразователь для категориальных и числовых столбцов\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('cat', OneHotEncoder(), categorical_cols),\n", + " ('num', StandardScaler(), numerical_cols)\n", + " ])\n", + "\n", + "# Список моделей для задачи регрессии\n", + "models_reg = {\n", + " \"Linear Regression\": LinearRegression(),\n", + " \"Random Forest Regression\": RandomForestRegressor(),\n", + " \"Gradient Boosting Regression\": GradientBoostingRegressor()\n", + "}\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи регрессии\n", + "X_reg = df[categorical_cols + numerical_cols]\n", + "y_reg = df['charges']\n", + "\n", + "# Разделяем данные на обучающую и тестовую выборки для задачи регрессии\n", + "X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X_reg, y_reg, test_size=0.2, random_state=42)\n", + "\n", + "# Обучаем и оцениваем модели для задачи регрессии\n", + "print(\"Результаты для задачи регрессии:\")\n", + "for name, model in models_reg.items():\n", + " pipeline = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('model', model)\n", + " ])\n", + " pipeline.fit(X_train_reg, y_train_reg)\n", + " y_pred_reg = pipeline.predict(X_test_reg)\n", + " mae = mean_absolute_error(y_test_reg, y_pred_reg)\n", + " mse = mean_squared_error(y_test_reg, y_pred_reg)\n", + " rmse = mean_squared_error(y_test_reg, y_pred_reg, squared=False)\n", + " r2 = r2_score(y_test_reg, y_pred_reg)\n", + " print(f\"Model: {name}\")\n", + " print(f\"MAE: {mae}\")\n", + " print(f\"MSE: {mse}\")\n", + " print(f\"RMSE: {rmse}\")\n", + " print(f\"R²: {r2}\")\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Оптимизация тарифной сетки:\n", + "Конвейер для задачи классификации:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Результаты для задачи классификации:\n", + "Model: Logistic Regression\n", + "Accuracy: 0.8846846846846846\n", + "\n", + "Model: Random Forest Classification\n", + "Accuracy: 0.9801801801801802\n", + "\n", + "Model: Gradient Boosting Classification\n", + "Accuracy: 0.9243243243243243\n", + "\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.metrics import accuracy_score\n", + "\n", + "# Загружаем набор данных\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "\n", + "# Определяем категориальные и числовые столбцы\n", + "categorical_cols = ['sex', 'smoker', 'region']\n", + "numerical_cols = ['age', 'bmi', 'children']\n", + "\n", + "# Создаем преобразователь для категориальных и числовых столбцов\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('cat', OneHotEncoder(), categorical_cols),\n", + " ('num', StandardScaler(), numerical_cols)\n", + " ])\n", + "\n", + "# Список моделей для задачи классификации\n", + "models_class = {\n", + " \"Logistic Regression\": LogisticRegression(),\n", + " \"Random Forest Classification\": RandomForestClassifier(),\n", + " \"Gradient Boosting Classification\": GradientBoostingClassifier()\n", + "}\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи классификации\n", + "X_class = df[categorical_cols + numerical_cols]\n", + "y_class = (df['charges'] > df['charges'].mean()).astype(int)\n", + "\n", + "# Разделяем данные на обучающую и тестовую выборки для задачи классификации\n", + "X_train_class, X_test_class, y_train_class, y_test_class = train_test_split(X_class, y_class, test_size=0.2, random_state=42)\n", + "\n", + "# Обучаем и оцениваем модели для задачи классификации\n", + "print(\"Результаты для задачи классификации:\")\n", + "for name, model in models_class.items():\n", + " pipeline = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('model', model)\n", + " ])\n", + " pipeline.fit(X_train_class, y_train_class)\n", + " y_pred_class = pipeline.predict(X_test_class)\n", + " accuracy = accuracy_score(y_test_class, y_pred_class)\n", + " print(f\"Model: {name}\")\n", + " print(f\"Accuracy: {accuracy}\")\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Прогнозирование стоимости страховых взносов:\n", + "\n", + "Настройка гиперпараметров для задачи регрессии:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Результаты для задачи регрессии:\n", + "Model: Linear Regression\n", + "Best Parameters: {}\n", + "MAE: 4158.694987099099\n", + "MSE: 39908584.112821\n", + "RMSE: 6317.32412599045\n", + "R²: 0.7399769662171334\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n", + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: Random Forest Regression\n", + "Best Parameters: {'model__max_depth': None, 'model__n_estimators': 200}\n", + "MAE: 1292.4041719905688\n", + "MSE: 7345926.566814439\n", + "RMSE: 2710.3369839956135\n", + "R²: 0.9521378632113484\n", + "\n", + "Model: Gradient Boosting Regression\n", + "Best Parameters: {'model__learning_rate': 0.1, 'model__max_depth': 5, 'model__n_estimators': 200}\n", + "MAE: 1556.4693865098072\n", + "MSE: 9320749.44024657\n", + "RMSE: 3052.990245684806\n", + "R²: 0.9392709713847187\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n", + "\n", + "# Загружаем набор данных\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "\n", + "# Определяем категориальные и числовые столбцы\n", + "categorical_cols = ['sex', 'smoker', 'region']\n", + "numerical_cols = ['age', 'bmi', 'children']\n", + "\n", + "# Создаем преобразователь для категориальных и числовых столбцов\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('cat', OneHotEncoder(), categorical_cols),\n", + " ('num', StandardScaler(), numerical_cols)\n", + " ])\n", + "\n", + "# Список моделей и их гиперпараметров для задачи регрессии\n", + "models_reg = {\n", + " \"Linear Regression\": (LinearRegression(), {}),\n", + " \"Random Forest Regression\": (RandomForestRegressor(), {\n", + " 'model__n_estimators': [100, 200],\n", + " 'model__max_depth': [None, 10, 20]\n", + " }),\n", + " \"Gradient Boosting Regression\": (GradientBoostingRegressor(), {\n", + " 'model__n_estimators': [100, 200],\n", + " 'model__learning_rate': [0.01, 0.1],\n", + " 'model__max_depth': [3, 5]\n", + " })\n", + "}\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи регрессии\n", + "X_reg = df[categorical_cols + numerical_cols]\n", + "y_reg = df['charges']\n", + "\n", + "# Разделяем данные на обучающую и тестовую выборки для задачи регрессии\n", + "X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X_reg, y_reg, test_size=0.2, random_state=42)\n", + "\n", + "# Обучаем и оцениваем модели для задачи регрессии\n", + "print(\"Результаты для задачи регрессии:\")\n", + "for name, (model, params) in models_reg.items():\n", + " pipeline = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('model', model)\n", + " ])\n", + " grid_search = GridSearchCV(pipeline, params, cv=5, scoring='neg_mean_absolute_error')\n", + " grid_search.fit(X_train_reg, y_train_reg)\n", + " best_model = grid_search.best_estimator_\n", + " y_pred_reg = best_model.predict(X_test_reg)\n", + " mae = mean_absolute_error(y_test_reg, y_pred_reg)\n", + " mse = mean_squared_error(y_test_reg, y_pred_reg)\n", + " rmse = mean_squared_error(y_test_reg, y_pred_reg, squared=False)\n", + " r2 = r2_score(y_test_reg, y_pred_reg)\n", + " print(f\"Model: {name}\")\n", + " print(f\"Best Parameters: {grid_search.best_params_}\")\n", + " print(f\"MAE: {mae}\")\n", + " print(f\"MSE: {mse}\")\n", + " print(f\"RMSE: {rmse}\")\n", + " print(f\"R²: {r2}\")\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Оптимизация тарифной сетки:\n", + "\n", + "Настройка гиперпараметров для задачи классификации:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Результаты для задачи классификации:\n", + "Model: Logistic Regression\n", + "Best Parameters: {'model__C': 10, 'model__solver': 'liblinear'}\n", + "Accuracy: 0.8864864864864865\n", + "\n", + "Model: Random Forest Classification\n", + "Best Parameters: {'model__max_depth': None, 'model__n_estimators': 100}\n", + "Accuracy: 0.9783783783783784\n", + "\n", + "Model: Gradient Boosting Classification\n", + "Best Parameters: {'model__learning_rate': 0.1, 'model__max_depth': 5, 'model__n_estimators': 200}\n", + "Accuracy: 0.9621621621621622\n", + "\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.metrics import accuracy_score\n", + "\n", + "# Загружаем набор данных\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "\n", + "# Определяем категориальные и числовые столбцы\n", + "categorical_cols = ['sex', 'smoker', 'region']\n", + "numerical_cols = ['age', 'bmi', 'children']\n", + "\n", + "# Создаем преобразователь для категориальных и числовых столбцов\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('cat', OneHotEncoder(), categorical_cols),\n", + " ('num', StandardScaler(), numerical_cols)\n", + " ])\n", + "\n", + "# Список моделей и их гиперпараметров для задачи классификации\n", + "models_class = {\n", + " \"Logistic Regression\": (LogisticRegression(), {\n", + " 'model__C': [0.1, 1, 10],\n", + " 'model__solver': ['liblinear', 'lbfgs']\n", + " }),\n", + " \"Random Forest Classification\": (RandomForestClassifier(), {\n", + " 'model__n_estimators': [100, 200],\n", + " 'model__max_depth': [None, 10, 20]\n", + " }),\n", + " \"Gradient Boosting Classification\": (GradientBoostingClassifier(), {\n", + " 'model__n_estimators': [100, 200],\n", + " 'model__learning_rate': [0.01, 0.1],\n", + " 'model__max_depth': [3, 5]\n", + " })\n", + "}\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи классификации\n", + "X_class = df[categorical_cols + numerical_cols]\n", + "y_class = (df['charges'] > df['charges'].mean()).astype(int)\n", + "\n", + "# Разделяем данные на обучающую и тестовую выборки для задачи классификации\n", + "X_train_class, X_test_class, y_train_class, y_test_class = train_test_split(X_class, y_class, test_size=0.2, random_state=42)\n", + "\n", + "# Обучаем и оцениваем модели для задачи классификации\n", + "print(\"Результаты для задачи классификации:\")\n", + "for name, (model, params) in models_class.items():\n", + " pipeline = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('model', model)\n", + " ])\n", + " grid_search = GridSearchCV(pipeline, params, cv=5, scoring='accuracy')\n", + " grid_search.fit(X_train_class, y_train_class)\n", + " best_model = grid_search.best_estimator_\n", + " y_pred_class = best_model.predict(X_test_class)\n", + " accuracy = accuracy_score(y_test_class, y_pred_class)\n", + " print(f\"Model: {name}\")\n", + " print(f\"Best Parameters: {grid_search.best_params_}\")\n", + " print(f\"Accuracy: {accuracy}\")\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Прогнозирование стоимости страховых взносов:\n", + "Задача: Регрессия\n", + "\n", + "Выбор метрик:\n", + "\n", + "MAE (Mean Absolute Error): Средняя абсолютная ошибка. Показывает среднее отклонение предсказанных значений от фактических. Эта метрика легко интерпретируется, так как она измеряется в тех же единицах, что и целевая переменная (доллары).\n", + "\n", + "MSE (Mean Squared Error): Среднеквадратичная ошибка. Показывает среднее квадратичное отклонение предсказанных значений от фактических. Эта метрика чувствительна к выбросам, так как ошибки возводятся в квадрат.\n", + "\n", + "RMSE (Root Mean Squared Error): Квадратный корень из среднеквадратичной ошибки. Показывает среднее отклонение предсказанных значений от фактических в тех же единицах, что и целевая переменная. Эта метрика также чувствительна к выбросам, но легче интерпретируется, чем MSE.\n", + "\n", + "R² (R-squared): Коэффициент детерминации. Показывает, какую долю дисперсии целевой переменной объясняет модель. Значение R² близкое к 1 указывает на хорошее качество модели.\n", + "\n", + "Обоснование:\n", + "\n", + "MAE: Хорошо подходит для задач, где важно понимать среднее отклонение предсказаний от фактических значений.\n", + "\n", + "MSE и RMSE: Полезны для задач, где важно минимизировать влияние выбросов, так как они возводят ошибки в квадрат.\n", + "\n", + "R²: Позволяет оценить, насколько хорошо модель объясняет вариацию целевой переменной.\n", + "\n", + "2. Оптимизация тарифной сетки:\n", + "Задача: Классификация\n", + "\n", + "Выбор метрик:\n", + "\n", + "Accuracy: Доля правильных предсказаний среди всех предсказаний. Эта метрика показывает общую точность модели.\n", + "\n", + "Precision: Доля правильных положительных предсказаний среди всех положительных предсказаний. Эта метрика важна, если важно минимизировать количество ложноположительных результатов.\n", + "\n", + "Recall (Sensitivity): Доля правильных положительных предсказаний среди всех фактических положительных случаев. Эта метрика важна, если важно минимизировать количество ложноотрицательных результатов.\n", + "\n", + "F1-score: Гармоническое среднее между precision и recall. Эта метрика показывает баланс между precision и recall.\n", + "\n", + "Обоснование:\n", + "\n", + "Accuracy: Хорошо подходит для задач, где классы сбалансированы.\n", + "\n", + "Precision и Recall: Важны для задач, где важно минимизировать ошибки определенного типа (ложноположительные или ложноотрицательные).\n", + "\n", + "F1-score: Позволяет оценить баланс между precision и recall." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Результаты для задачи регрессии:\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: Linear Regression\n", + "Best Parameters: {}\n", + "MAE: 4158.694987099099\n", + "MSE: 39908584.112821\n", + "RMSE: 6317.32412599045\n", + "R²: 0.7399769662171334\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: Random Forest Regression\n", + "Best Parameters: {'model__max_depth': None, 'model__n_estimators': 100}\n", + "MAE: 1309.2968994795137\n", + "MSE: 7399293.51911523\n", + "RMSE: 2720.164244878465\n", + "R²: 0.9517901526335497\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\midni\\AIM\\AIM-PIbd-32-Bulatova-K-R\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: Gradient Boosting Regression\n", + "Best Parameters: {'model__learning_rate': 0.1, 'model__max_depth': 5, 'model__n_estimators': 200}\n", + "MAE: 1556.235766949439\n", + "MSE: 9320073.834850596\n", + "RMSE: 3052.879597175525\n", + "R²: 0.9392753732688899\n", + "\n", + "Результаты для задачи классификации:\n", + "Model: Logistic Regression\n", + "Best Parameters: {'model__C': 10, 'model__solver': 'liblinear'}\n", + "Accuracy: 0.8864864864864865\n", + "Precision: 1.0\n", + "Recall: 0.6204819277108434\n", + "F1-score: 0.7657992565055762\n", + "\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: Random Forest Classification\n", + "Best Parameters: {'model__max_depth': 20, 'model__n_estimators': 200}\n", + "Accuracy: 0.9801801801801802\n", + "Precision: 0.9874213836477987\n", + "Recall: 0.9457831325301205\n", + "F1-score: 0.9661538461538461\n", + "\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: Gradient Boosting Classification\n", + "Best Parameters: {'model__learning_rate': 0.1, 'model__max_depth': 5, 'model__n_estimators': 200}\n", + "Accuracy: 0.9621621621621622\n", + "Precision: 0.9738562091503268\n", + "Recall: 0.8975903614457831\n", + "F1-score: 0.9341692789968652\n", + "\n" + ] + }, + { + "data": { + "image/png": "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XboIpVIpYmJipHX3798XNjY2omXLlgVi9vHx0YopJCREmJqaalVq/one6LM8UlJSAEDnzHvXrl0AgFGjRmmtz/9W+uJcCw8PD+mbE/DsW0itWrVw8+bN1475Rfnf6rZv3w6NRqPTcx48eIALFy4gKChI61tw/fr10a5dO+k4nzd06FCtx++//z4ePXokvYa6+OSTT3D48GHEx8fj4MGDiI+Pl7L+F6lUKpiYPPvxycvLw6NHj2BtbY1atWrh3LlzOu9TpVKhf//+OrX19fXFp59+iunTpyMgIADm5uZYunSpzvt60a5du+Ds7IxevXpJ68zMzDBy5EikpaXhyJEjWu27deum07fG/Nf8xW9au3btgoODg7S4u7sXeG5h+zA1NZXmUWg0Gjx+/Bi5ublo2rSp1mu9a9culCtXDsOGDdN67ogRI14Z85YtW6DRaNCjRw/8/fff0uLs7IwaNWrg0KFDWu2tra21KgZKpRLNmjWT5Xdn4cKFiIiIQEREBH7++We0adMGgwYN0jpbYdeuXTA1NcXIkSO1njt69GgIIaSzQnT9TMj/Pd25c6es8w18fHxQrVo16XH9+vWhVqul1ykvLw/79+9Hly5dtKps1atXh7+//yv71/czsjAWFhbS/zMzM/H333/j3XffBQCtny87OzucOnUK9+/fL7Sf/ArE3r17kZGR8drxFCUiIgKpqamYMGFCgTkOz5+y+/zxpKen4++//8Z7770HIQTOnz+v937z8vKwb98+dOnSBVWrVpXWu7i44JNPPsHx48cLfM4OGTJEK6b3338feXl5uH37tt77NyZvdEKhVqsBAKmpqTq1v337NkxMTFC9enWt9c7OzrCzsyvwZlauXLlAH+XLl8eTJ09eM+KCPv74Y3h7e2PQoEFwcnJCz5498csvv7w0uciPs1atWgW21alTB3///TfS09O11r94LOXLlwcAvY6lQ4cOsLGxwcaNG7Fu3Tq88847BV7LfBqNBnPnzkWNGjWgUqlQsWJFODg44NKlS0hOTtZ5n2+99ZZekw6/++472Nvb48KFC5g/fz4cHR11fu6Lbt++jRo1akiJUb46depI259XpUoVnfrN/3BPS0vTWu/t7S39ofT19S30uUXtY/Xq1ahfvz7Mzc1RoUIFODg44LffftN6rW/fvg0XF5cCiUxhP0cvunHjBoQQqFGjhlbS4+DggGvXriExMVGrfaVKlQpcd0Gu351mzZrBx8cHPj4+6N27N3777Td4eHhg+PDhyM7OBvDsWF1dXQv8IX3xvdP1M6FVq1bo1q0bpk2bhooVK6Jz585YtWqVwaf2vuozJjExEU+fPi3096yo373n6fsZWZjHjx/j888/h5OTEywsLODg4CD9HD7/8zV79mz8+eefcHNzQ7NmzTB16lStBLJKlSoYNWoUli9fjooVK8LPzw8LFy7U6/PgZWJiYgAA9erVe2m7uLg46cuYtbU1HBwc0KpVqwLHo6uHDx8iIyOjyM9jjUaDO3fuaK2X4/PYGL3xCYWrqyv+/PNPvZ6n6wVmippBLIR47X3k5eVpPbawsMDRo0exf/9+9O3bF5cuXcLHH3+Mdu3aFWhrCEOOJZ9KpUJAQABWr16NrVu3FlmdAJ5d12HUqFFo2bIlfv75Z+zduxcRERGoW7euzpUYQPvbhC7Onz8v/XG7fPmyXs81lK6x1q5dGwAK/Nw6ODhIfyifP1vpVfv4+eefERQUhGrVqmHFihXYs2cPIiIi8MEHH+j1Wr+MRqOBQqGQ+n5xebESJMfPm65MTEzQpk0bPHjwADdu3HitPl71maBQKLBp0yZERkZi+PDhuHfvHgYMGIAmTZoUSAz1UdyvU/7PmiG/Cz169MCyZcukOVT79u3Dnj17AEDr56tHjx64efMmFixYAFdXV8yZMwd169bVukbI999/j0uXLuHLL7/E06dPMXLkSNStWxd379597fj0kZeXh3bt2uG3337D+PHjsW3bNkREREgX8pLr9+VVSvL3403yRicUAPDhhx8iJiYGkZGRr2zr7u4OjUZT4EMnISEBSUlJhZaYX1f58uWRlJRUYH1hJS0TExO0bdsW//nPf3D16lXMnDkTBw8eLFBGzpcfZ1RUVIFt169fR8WKFWFlZWXYARThk08+wfnz55GamoqePXsW2W7Tpk1o06YNVqxYgZ49e8LX1xc+Pj4FXhM5rx6Ynp6O/v37w8PDA0OGDMHs2bNx+vTp1+7P3d0dN27cKPAhc/36dWn76/D394epqSnWrVv32rE9b9OmTahatSq2bNmCvn37ws/PDz4+PsjMzNRq5+7ujgcPHhT4A1jYz9GLqlWrBiEEqlSpIiU9zy/5JXB9yPne5+bmAvhf1cfd3R33798v8M38xfdO38+Ed999FzNnzsSZM2ewbt06XLlyBRs2bJD9ePI5OjrC3Nwc0dHRBbYVtu5FNWvWRK1atbB9+/bXSnyePHmCAwcOYMKECZg2bRq6du2Kdu3aaZX2n+fi4oLPPvsM27ZtQ2xsLCpUqICZM2dqtfH09MTXX3+No0eP4tixY7h37x6WLFmid2wvyh86etkXzMuXL+Ovv/7C999/j/Hjx6Nz587w8fEpdNK2ru+ng4MDLC0ti/w8NjExgZubm45H8c/2xicU48aNg5WVFQYNGoSEhIQC22NiYvDDDz8AeFayB4B58+ZptfnPf/4DAOjYsaNscVWrVg3Jycm4dOmStO7BgwcFziR5/Phxgefmz8ovqpzq4uKChg0bYvXq1Vp/oP/880/s27dPOs7i0KZNG8yYMQM//vgjnJ2di2xnampaINv+9ddfce/ePa11+YlPYcmXvsaPH4+4uDisXr0a//nPf/D2228jMDDwtcvSHTp0QHx8vNbM69zcXCxYsADW1tZSmVRflStXxoABA7B79278+OOPhbbR55tK/red559z6tSpAkl2hw4dkJubi8WLF0vr8vLysGDBglfuIyAgAKamppg2bVqB2IQQePTokc7x5pPrvc/JycG+ffugVCqlIY0OHTogLy+vwOs7d+5cKBQKaf6Brp8JT548KXDcL/6eWlpaynI8zzM1NYWPjw+2bdumNTchOjpa56uDTps2DY8ePcKgQYOkxOt5+/btw86dO4vcP1Dw5/HF1ysvL6/AcIGjoyNcXV2l1yclJaXA/j09PWFiYiLLVWF9fX1hY2OD0NDQAsl0fvyFHY8QQvob8Txdfz5NTU3h6+uL7du3a10GPCEhAeHh4WjRooU09FTWvfGnjVarVg3h4eH4+OOPUadOHfTr1w/16tVDdnY2Tp48KZ3mBwANGjRAYGAgfvrpJyQlJaFVq1b4448/sHr1anTp0gVt2rSRLa6ePXti/Pjx6Nq1K0aOHImMjAwsXrwYNWvW1JrINH36dBw9ehQdO3aEu7s7EhMTsWjRIlSqVAktWrQosv85c+bA398fXl5eGDhwoHTaqK2tbbFeLtbExARff/31K9t9+OGHmD59Ovr374/33nsPly9fxrp16wp8s6lWrRrs7OywZMkS2NjYwMrKCs2bN9d5PkK+gwcPYtGiRZgyZYp0GuuqVavQunVrTJo0CbNnz9arP+DZxKmlS5ciKCgIZ8+exdtvv41NmzbhxIkTmDdvnkET3ebNm4fY2FiMGDECGzZsQKdOneDo6Ii///4bJ06cwI4dO3Sa2wA8e623bNmCrl27omPHjoiNjcWSJUvg4eGh9a20U6dO8Pb2xoQJE3Dr1i14eHhgy5YtOo0bV6tWDd988w0mTpyIW7duoUuXLrCxsUFsbCy2bt2KIUOGYMyYMXq9Bq/73u/evVuqNCQmJiI8PBw3btzAhAkTpA/uTp06oU2bNvjqq69w69YtNGjQAPv27cP27dvxxRdfSN9mdf1MWL16NRYtWoSuXbuiWrVqSE1NxbJly6BWq6WkxMLCAh4eHti4cSNq1qwJe3t71KtX75Vj+q8ydepU7Nu3D97e3hg2bJiUKNWrV0+ny5Z//PHH0mWrz58/j169esHd3R2PHj3Cnj17cODAAYSHhxf6XLVajZYtW2L27NnIycnBW2+9hX379iE2NlarXWpqKipVqoTu3bujQYMGsLa2xv79+3H69Gl8//33AJ79jg4fPhz/+te/ULNmTeTm5mLt2rUwNTVFt27dDHqN8mOdO3cuBg0ahHfeeQeffPIJypcvj4sXLyIjIwOrV69G7dq1Ua1aNYwZMwb37t2DWq3G5s2bC5270KRJEwDAyJEj4efnB1NT0yKrst988w0iIiLQokULfPbZZyhXrhyWLl2KrKys1/rs+ccq4bNKXttff/0lBg8eLN5++22hVCqFjY2N8Pb2FgsWLNC6QE1OTo6YNm2aqFKlijAzMxNubm4vvbDVi148XbGoU5qEeHbBqnr16gmlUilq1aolfv755wKnjx04cEB07txZuLq6CqVSKVxdXUWvXr3EX3/9VWAfL55et3//fuHt7S0sLCyEWq0WnTp1KvLCVi+ellrURWFe9Pxpo0Up6rTR0aNHCxcXF2FhYSG8vb1FZGRkoad7bt++XXh4eEinwb14YavCPN9PSkqKcHd3F40bNy5wOdyQkBBhYmJS4AIzLyrq/U5ISBD9+/cXFStWFEqlUnh6ehZ4H172M/Ayubm5YtWqVeKDDz4Q9vb2oly5cqJixYqibdu2YsmSJVqnvr1sHxqNRsyaNUu4u7sLlUolGjVqJHbu3FnoqcuPHj0Sffv2lS5s1bdvX70ubLV582bRokULYWVlJaysrETt2rVFcHCwiIqKktoU9b4VFk9R731hCjtt1NzcXDRs2FAsXry4wAWrUlNTRUhIiHB1dRVmZmaiRo0aRV7Y6lWfCefOnRO9evUSlStXFiqVSjg6OooPP/xQnDlzRquvkydPiiZNmgilUqnzha1e9OJpk0I8+5xo1KiRUCqVolq1amL58uVi9OjRwtzcvMjX60X5nzWOjo6iXLlywsHBQXTq1Els375dalPYZ83du3dF165dhZ2dnbC1tRX/+te/xP3797WOLysrS4wdO1Y0aNBAurBTgwYNxKJFi6R+bt68KQYMGCCqVasmzM3Nhb29vWjTpo3Yv3//S49f19NG8/33v/8V7733nvS52KxZM7F+/Xpp+9WrV4WPj4+wtrYWFStWFIMHD5ZO133+uHNzc8WIESOEg4ODUCgUOl3Yys/PT1hbWwtLS0vRpk0bcfLkyUJjfvH04/wLvR06dEj8kymE+IfPEiEiMkJdunTBlStXXnsiKlFJe+PnUBAR/dO9eKffGzduYNeuXWjdunXpBET0GlihICIqZS4uLggKCkLVqlVx+/ZtLF68GFlZWTh//jxq1KhR2uER6eSNn5RJRPRP1759e6xfvx7x8fFQqVTw8vLCrFmzmEyQUWGFgoiIiAzGORRERERkMCYUREREZDDOodCBRqPB/fv3YWNjUyyX3yUiouIjhEBqaipcXV0L3AxQTpmZmdIN7AylVCoL3FX1TceEQgf379/ntdqJiIzcnTt3UKlSpWLpOzMzExY2FYBceW7d7uzsjNjYWKNKKphQ6CD/EsxKj0AoTHW/1TaRMYk7/F1ph0BULFJTUlC9iptBl9N/lezsbCA3AyqPQMDQvxN52Yi/uhrZ2dlMKP5p8oc5FKZKJhT0j8UbHNE/XYkMWZczN/jvhFAY5/RGJhRERERyUQAwNHEx0ql6TCiIiIjkojB5thjahxEyzqiJiIjojcIKBRERkVwUChmGPIxzzIMJBRERkVw45EFERET0+lihICIikguHPIiIiMhwMgx5GOnggXFGTURERG8UViiIiIjkwiEPIiIiMhjP8iAiIiJ6faxQEBERyYVDHkRERGSwMjzkwYSCiIhILmW4QmGcaRARERG9UVihICIikguHPIiIiMhgCoUMCQWHPIiIiKiMYoWCiIhILiaKZ4uhfRghJhRERERyKcNzKIwzaiIiInqjsEJBREQklzJ8HQomFERERHLhkAcRERHR62OFgoiISC4c8iAiIiKDcciDiIiIDJZfoTB00dHixYtRv359qNVqqNVqeHl5Yffu3dL21q1bQ6FQaC1Dhw7V6iMuLg4dO3aEpaUlHB0dMXbsWOTm5up96KxQEBERGalKlSrh22+/RY0aNSCEwOrVq9G5c2ecP38edevWBQAMHjwY06dPl55jaWkp/T8vLw8dO3aEs7MzTp48iQcPHqBfv34wMzPDrFmz9IqFCQUREZFcSnjIo1OnTlqPZ86cicWLF+P333+XEgpLS0s4OzsX+vx9+/bh6tWr2L9/P5ycnNCwYUPMmDED48ePx9SpU6FUKnWOhUMeREREcpFxyCMlJUVrycrKeumu8/LysGHDBqSnp8PLy0tav27dOlSsWBH16tXDxIkTkZGRIW2LjIyEp6cnnJycpHV+fn5ISUnBlStX9Dp0ViiIiIjeQG5ublqPp0yZgqlTpxZod/nyZXh5eSEzMxPW1tbYunUrPDw8AACffPIJ3N3d4erqikuXLmH8+PGIiorCli1bAADx8fFayQQA6XF8fLxe8TKhICIiko0MQx7/P3hw584dqNVqaa1KpSq0da1atXDhwgUkJydj06ZNCAwMxJEjR+Dh4YEhQ4ZI7Tw9PeHi4oK2bdsiJiYG1apVMzDOwqImIiIiw8k45JF/5kb+UlRCoVQqUb16dTRp0gShoaFo0KABfvjhh0LbNm/eHAAQHR0NAHB2dkZCQoJWm/zHRc27KAoTCiIion8QjUZT5HyLCxcuAABcXFwAAF5eXrh8+TISExOlNhEREVCr1dKwia445EFERCQXhUKGszx0vw7FxIkT4e/vj8qVKyM1NRXh4eE4fPgw9u7di5iYGISHh6NDhw6oUKECLl26hJCQELRs2RL169cHAPj6+sLDwwN9+/bF7NmzER8fj6+//hrBwcFFVkSKwoSCiIhILiV82mhiYiL69euHBw8ewNbWFvXr18fevXvRrl073LlzB/v378e8efOQnp4ONzc3dOvWDV9//bX0fFNTU+zcuRPDhg2Dl5cXrKysEBgYqHXdCl0xoSAiIjJSK1asKHKbm5sbjhw58so+3N3dsWvXLoNjYUJBREQkF94cjIiIiAxWhm8OxoSCiIhILmW4QmGcaRARERG9UVihICIikguHPIiIiMhgHPIgIiIien2sUBAREclEoVBAUUYrFEwoiIiIZFKWEwoOeRAREZHBWKEgIiKSi+L/F0P7MEJMKIiIiGTCIQ8iIiIiA7BCQUREJJOyXKFgQkFERCQTJhRERERksLKcUHAOBRERERmMFQoiIiK58LRRIiIiMhSHPIiIiIgMwAoFERGRTJ7dvdzQCoU8sZQ0JhREREQyUUCGIQ8jzSg45EFEREQGY4WCiIhIJmV5UiYTCiIiIrmU4dNGOeRBREREBmOFgoiISC4yDHkIDnkQERGVbXLMoTD8LJHSwYSCiIhIJmU5oeAcCiIiIjIYKxRERERyKcNneTChICIikgmHPIiIiIgMwAoFERGRTMpyhYIJBRERkUzKckLBIQ8iIiIyGCsUREREMmGFgoiIiAynkGnR0eLFi1G/fn2o1Wqo1Wp4eXlh9+7d0vbMzEwEBwejQoUKsLa2Rrdu3ZCQkKDVR1xcHDp27AhLS0s4Ojpi7NixyM3N1fvQmVAQEREZqUqVKuHbb7/F2bNncebMGXzwwQfo3Lkzrly5AgAICQnBjh078Ouvv+LIkSO4f/8+AgICpOfn5eWhY8eOyM7OxsmTJ7F69WqEhYVh8uTJeseiEEII2Y7sHyolJQW2trZQeQ6GwlRZ2uEQFYsnp38s7RCIikVKSgqcKtgiOTkZarW62PZha2sL5wE/w0RpaVBfmuwMxK/s89rx2tvbY86cOejevTscHBwQHh6O7t27AwCuX7+OOnXqIDIyEu+++y52796NDz/8EPfv34eTkxMAYMmSJRg/fjwePnwIpVL3v3msUBAREckkfw6FocvryMvLw4YNG5Ceng4vLy+cPXsWOTk58PHxkdrUrl0blStXRmRkJAAgMjISnp6eUjIBAH5+fkhJSZGqHLripEwiIiKZyDkpMyUlRWu9SqWCSqUq0P7y5cvw8vJCZmYmrK2tsXXrVnh4eODChQtQKpWws7PTau/k5IT4+HgAQHx8vFYykb89f5s+WKEgIiJ6A7m5ucHW1lZaQkNDC21Xq1YtXLhwAadOncKwYcMQGBiIq1evlnC0rFAQERHJR8abg925c0drDkVh1QkAUCqVqF69OgCgSZMmOH36NH744Qd8/PHHyM7ORlJSklaVIiEhAc7OzgAAZ2dn/PHHH1r95Z8Fkt9GV6xQEBERyUTOORT5p4LmL0UlFC/SaDTIyspCkyZNYGZmhgMHDkjboqKiEBcXBy8vLwCAl5cXLl++jMTERKlNREQE1Go1PDw89Dp2ViiIiIiM1MSJE+Hv74/KlSsjNTUV4eHhOHz4MPbu3QtbW1sMHDgQo0aNgr29PdRqNUaMGAEvLy+8++67AABfX194eHigb9++mD17NuLj4/H1118jODhY5wQmHxMKKhEDurXAgG7vw83FHgBw/WY85qzYjf0nn43zOVawwfSRXdG6eW1YW6oQfTsR36/cix2HLkh9XNw+DZVdK2j1O+3H7Zi3OqLEjoNILnPD9mH6wv9iaM/WCB3dvbTDIZmU9JUyExMT0a9fPzx48AC2traoX78+9u7di3bt2gEA5s6dCxMTE3Tr1g1ZWVnw8/PDokWLpOebmppi586dGDZsGLy8vGBlZYXAwEBMnz5d77jfqIQiKCgISUlJ2LZtW2mHQjK7n5iEaT9uR8ydh1AoFOjVsTnWfTcErfp8i+s347F4aj/Y2ljgk1FL8Sg5Dd39mmJV6AC06Tcbl/+6K/Uzc8lOrNl2Qnqclp5VGodDZJBzV24jbOsJ1K3xVmmHQjJTQIaEQo9JGCtWrHjpdnNzcyxcuBALFy4sso27uzt27dql8z6LwjkUVCL2HPsTESev4uadh4iJS8Q3i3cgPSMLTetVAQA0q18VyzYewbmrt3H73iN8v3IvklOfomEdN61+0jIykfgoVVoyMrNL43CIXltaRhaGTA7DD1/2gp2NRWmHQyQbo0ko/vzzT/j7+8Pa2hpOTk7o27cv/v77b2n7pk2b4OnpCQsLC1SoUAE+Pj5IT08HABw+fBjNmjWDlZUV7Ozs4O3tjdu3b5fWoZR5JiYKBLRrAksLJU5fjgUA/HHpJrq2awI7tSUUimfbVapyOH72htZzvwj0RUzEv3Hk5/EY0actTE2N5keYCAAwdvZG+HrXQ+vmtUs7FCoGpXlhq9L2Rg15FCUpKQkffPABBg0ahLlz5+Lp06cYP348evTogYMHD+LBgwfo1asXZs+eja5duyI1NRXHjh2DEAK5ubno0qULBg8ejPXr1yM7Oxt//PGH0b5hxsyjmiv2rhwNc2U5pD/NQt+xyxAV++zCKf0nrsTKWQMQe2A2cnLz8DQzG33HLkPs3f8ljUs3HsHF63eQlJKOZvWrYnLwR3CqaIuv520prUMi0svmfWdw8fodHFw9rrRDoeIi42mjxsYoEooff/wRjRo1wqxZs6R1K1euhJubG/766y+kpaUhNzcXAQEBcHd3BwB4enoCAB4/fozk5GR8+OGHqFatGgCgTp06L91fVlYWsrL+Nzb/4tXK6PXcuJ2Alr1Doba2QOe2jbBoal98+OkPiIqNx1dDP4StjQU6fzYfj5PS0aFVfawKHYAOg+fhasx9AMCi8INSX1ei7yM7Jxdzv+yF6Qv/i+wc/e+MR1SS7sY/wcTvN2PLj8NhrjIr7XCIZGcUCcXFixdx6NAhWFtbF9gWExMDX19ftG3bFp6envDz84Ovry+6d++O8uXLw97eHkFBQfDz80O7du3g4+ODHj16wMXFpcj9hYaGYtq0acV5SGVSTm6eVHG4eP0OGnlUxtCerfHDmv0Y8nEreH38Da7ffFax+PPGPXg1qoZB/2qJUd9uKLS/s1duwaycKSq72iP6dmKhbYjeFBevx+Hh41S07vtvaV1engYnz8dg2a9HkXBiHofw/gFK+iyPN4lR/PSmpaWhU6dOuHDhgtZy48YNtGzZEqampoiIiMDu3bvh4eGBBQsWoFatWoiNfTY+v2rVKkRGRuK9997Dxo0bUbNmTfz+++9F7m/ixIlITk6Wljt37pTUoZYpJgoFlMpysDR/djc7jUb7xrd5eQIKk6J/sTxrVkJengYPH6cWa5xEcmj5Ti2cWP8ljv48QVoa1amMf7VviqM/T2Ay8Q/BORRvuMaNG2Pz5s14++23Ua5c4SErFAp4e3vD29sbkydPhru7O7Zu3YpRo0YBABo1aoRGjRph4sSJ8PLyQnh4uHRhjxcVdQMWen2Tgz/C/pNXcCf+CWwszdG9fVO0aFID3UYswl+34hETl4i5E3th0g9b8Tg5HR1b10eb5rXQM2QJAOAdzypoUs8dx8/cQGpGJpp5VsHMkG74ZfdpJKc+LeWjI3o1GytzeFR31VpnaaGEva1VgfVkvBSKZ4uhfRijNy6hSE5OxoULF7TWDRkyBMuWLUOvXr0wbtw42NvbIzo6Ghs2bMDy5ctx5swZHDhwAL6+vnB0dMSpU6fw8OFD1KlTB7Gxsfjpp5/w0UcfwdXVFVFRUbhx4wb69etXOgdYRlUsb43FU/vBqaIaKWmZuBJ9D91GLMLhP64DAHp8sRhThnfG+v98CitLFWLvPMRnU9ci4v8vfJWVnYOAdk0wYXAHKM3K4fb9R1i8/hAWrjv4st0SEVEJeeMSisOHD6NRo0Za6wYOHIgTJ05g/Pjx8PX1RVZWFtzd3dG+fXuYmJhArVbj6NGjmDdvHlJSUuDu7o7vv/8e/v7+SEhIwPXr17F69Wo8evQILi4uCA4OxqefflpKR1g2jfwm/KXbb955iMDxy4vcfinqLnwHfC93WESlaufSL0o7BJLZswqFoXMoZAqmhCmEEOLVzcq2lJQU2NraQuU5GApTZWmHQ1Qsnpz+sbRDICoWKSkpcKpgi+TkZK27d8q9D1tbW1QduQmmKiuD+srLSsfN+d2LNd7iwFlAREREZLA3bsiDiIjIWJXl00aZUBAREcmkLJ/lwSEPIiIiMhgrFERERDIxMVHA5CUX5NOFMPD5pYUJBRERkUw45EFERERkAFYoiIiIZMKzPIiIiMhgZXnIgwkFERGRTMpyhYJzKIiIiMhgrFAQERHJpCxXKJhQEBERyaQsz6HgkAcREREZjBUKIiIimSggw5AHjLNEwYSCiIhIJhzyICIiIjIAKxREREQy4VkeREREZDAOeRAREREZgBUKIiIimXDIg4iIiAxWloc8mFAQERHJpCxXKDiHgoiIiAzGCgUREZFcZBjyMNILZTKhICIikguHPIiIiIgMwAoFERGRTMryWR6sUBAREckkf8jD0EVXoaGheOedd2BjYwNHR0d06dIFUVFRWm1at25doP+hQ4dqtYmLi0PHjh1haWkJR0dHjB07Frm5uXodOysURERERurIkSMIDg7GO++8g9zcXHz55Zfw9fXF1atXYWVlJbUbPHgwpk+fLj22tLSU/p+Xl4eOHTvC2dkZJ0+exIMHD9CvXz+YmZlh1qxZOsfChIKIiEgmJT3ksWfPHq3HYWFhcHR0xNmzZ9GyZUtpvaWlJZydnQvtY9++fbh69Sr2798PJycnNGzYEDNmzMD48eMxdepUKJVKnWLhkAcREZFM5BzySElJ0VqysrJeuf/k5GQAgL29vdb6devWoWLFiqhXrx4mTpyIjIwMaVtkZCQ8PT3h5OQkrfPz80NKSgquXLmi87GzQkFERPQGcnNz03o8ZcoUTJ06tcj2Go0GX3zxBby9vVGvXj1p/SeffAJ3d3e4urri0qVLGD9+PKKiorBlyxYAQHx8vFYyAUB6HB8fr3O8TCiIiIhkIud1KO7cuQO1Wi2tV6lUL31ecHAw/vzzTxw/flxr/ZAhQ6T/e3p6wsXFBW3btkVMTAyqVatmUKzP45AHERGRTPLnUBi6AIBardZaXpZQDB8+HDt37sShQ4dQqVKll8bYvHlzAEB0dDQAwNnZGQkJCVpt8h8XNe+iMEwoiIiIZFLSp40KITB8+HBs3boVBw8eRJUqVV75nAsXLgAAXFxcAABeXl64fPkyEhMTpTYRERFQq9Xw8PDQORYOeRARERmp4OBghIeHY/v27bCxsZHmPNja2sLCwgIxMTEIDw9Hhw4dUKFCBVy6dAkhISFo2bIl6tevDwDw9fWFh4cH+vbti9mzZyM+Ph5ff/01goODXznM8jxWKIiIiGQi55CHLhYvXozk5GS0bt0aLi4u0rJx40YAgFKpxP79++Hr64vatWtj9OjR6NatG3bs2CH1YWpqip07d8LU1BReXl7o06cP+vXrp3XdCl2wQkFERCSTkr45mBDipdvd3Nxw5MiRV/bj7u6OXbt26bzfwrBCQURERAZjhYKIiEgmCshwpUxZIil5TCiIiIhkYqJQwMTAjMLQ55cWDnkQERGRwVihICIikklJ3xzsTcKEgoiISCYlfZbHm4QJBRERkUxMFM8WQ/swRpxDQURERAZjhYKIiEguChmGLIy0QsGEgoiISCZleVImhzyIiIjIYKxQEBERyUTx//8M7cMYMaEgIiKSCc/yICIiIjIAKxREREQy4YWtXuG///2vzh1+9NFHrx0MERGRMSvLZ3nolFB06dJFp84UCgXy8vIMiYeIiIiMkE4JhUajKe44iIiIjF5Zvn25QXMoMjMzYW5uLlcsRERERq0sD3nofZZHXl4eZsyYgbfeegvW1ta4efMmAGDSpElYsWKF7AESEREZi/xJmYYuxkjvhGLmzJkICwvD7NmzoVQqpfX16tXD8uXLZQ2OiIiIjIPeCcWaNWvw008/oXfv3jA1NZXWN2jQANevX5c1OCIiImOSP+Rh6GKM9J5Dce/ePVSvXr3Aeo1Gg5ycHFmCIiIiMkZleVKm3hUKDw8PHDt2rMD6TZs2oVGjRrIERURERMZF7wrF5MmTERgYiHv37kGj0WDLli2IiorCmjVrsHPnzuKIkYiIyCgo/n8xtA9jpHeFonPnztixYwf2798PKysrTJ48GdeuXcOOHTvQrl274oiRiIjIKJTlszxe6zoU77//PiIiIuSOhYiIiIzUa1/Y6syZM7h27RqAZ/MqmjRpIltQRERExqgs375c74Ti7t276NWrF06cOAE7OzsAQFJSEt577z1s2LABlSpVkjtGIiIio1CW7zaq9xyKQYMGIScnB9euXcPjx4/x+PFjXLt2DRqNBoMGDSqOGImIiOgNp3eF4siRIzh58iRq1aolratVqxYWLFiA999/X9bgiIiIjI2RFhgMpndC4ebmVugFrPLy8uDq6ipLUERERMaIQx56mDNnDkaMGIEzZ85I686cOYPPP/8c3333nazBERERGZP8SZmGLsZIpwpF+fLltTKm9PR0NG/eHOXKPXt6bm4uypUrhwEDBqBLly7FEigRERG9uXRKKObNm1fMYRARERm/sjzkoVNCERgYWNxxEBERGb2yfOnt176wFQBkZmYiOztba51arTYoICIiIjI+ek/KTE9Px/Dhw+Ho6AgrKyuUL19eayEiIiqr8m9fbuiiq9DQULzzzjuwsbGBo6MjunTpgqioKK02mZmZCA4ORoUKFWBtbY1u3bohISFBq01cXBw6duwIS0tLODo6YuzYscjNzdXv2PVqDWDcuHE4ePAgFi9eDJVKheXLl2PatGlwdXXFmjVr9O2OiIjoH0OhkGfR1ZEjRxAcHIzff/8dERERyMnJga+vL9LT06U2ISEh2LFjB3799VccOXIE9+/fR0BAgLQ9Ly8PHTt2RHZ2Nk6ePInVq1cjLCwMkydP1u/YhRBCnydUrlwZa9asQevWraFWq3Hu3DlUr14da9euxfr167Fr1y69AjAGKSkpsLW1hcpzMBSmytIOh6hYPDn9Y2mHQFQsUlJS4FTBFsnJycU2LJ//d6LfqkgoLa0N6is7Iw1r+nu9VrwPHz6Eo6Mjjhw5gpYtWyI5ORkODg4IDw9H9+7dAQDXr19HnTp1EBkZiXfffRe7d+/Ghx9+iPv378PJyQkAsGTJEowfPx4PHz6EUqnb3z29KxSPHz9G1apVATybL/H48WMAQIsWLXD06FF9uyMiIvrHKO3blycnJwMA7O3tAQBnz55FTk4OfHx8pDa1a9dG5cqVERkZCQCIjIyEp6enlEwAgJ+fH1JSUnDlyhWd9613QlG1alXExsZKQf3yyy8AgB07dkg3CyMiIiqL5BzySElJ0VqysrJeum+NRoMvvvgC3t7eqFevHgAgPj4eSqWywN9nJycnxMfHS22eTybyt+dv05XeCUX//v1x8eJFAMCECROwcOFCmJubIyQkBGPHjtW3OyIiIiqEm5sbbG1tpSU0NPSl7YODg/Hnn39iw4YNJRShNr1PGw0JCZH+7+Pjg+vXr+Ps2bOoXr066tevL2twRERExkTfszSK6gMA7ty5ozWHQqVSFfmc4cOHY+fOnTh69CgqVaokrXd2dkZ2djaSkpK0qhQJCQlwdnaW2vzxxx9a/eWfBZLfRqe4dW5ZBHd3dwQEBDCZICKiMk/OIQ+1Wq21FJZQCCEwfPhwbN26FQcPHkSVKlW0tjdp0gRmZmY4cOCAtC4qKgpxcXHw8vICAHh5eeHy5ctITEyU2kRERECtVsPDw0PnY9epQjF//nydOxw5cqTObYmIiP5JSvrS28HBwQgPD8f27dthY2MjzXmwtbWFhYUFbG1tMXDgQIwaNQr29vZQq9UYMWIEvLy88O677wIAfH194eHhgb59+2L27NmIj4/H119/jeDg4JdWRV6kU0Ixd+5cnTpTKBRMKIiIiErI4sWLAQCtW7fWWr9q1SoEBQUBePY33MTEBN26dUNWVhb8/PywaNEiqa2pqSl27tyJYcOGwcvLC1ZWVggMDMT06dP1ikXv61CURfnnF8fFP+alxekf69dLd0s7BKJi8TQ9FSPbepbIdSiG/PyHLNeh+KlPs2KNtzgYdC8PIiIi+p+yfLdRgydlEhEREbFCQUREJBOFAjAxsMBgpAUKJhRERERyMZEhoTD0+aWFQx5ERERksNdKKI4dO4Y+ffrAy8sL9+7dAwCsXbsWx48flzU4IiIiY1LaNwcrTXonFJs3b4afnx8sLCxw/vx56WYlycnJmDVrluwBEhERGYv8IQ9DF2Okd0LxzTffYMmSJVi2bBnMzMyk9d7e3jh37pyswREREZFx0HtSZlRUFFq2bFlgva2tLZKSkuSIiYiIyCg9fy8OQ/owRnpXKJydnREdHV1g/fHjx1G1alVZgiIiIjJG+XcbNXQxRnonFIMHD8bnn3+OU6dOQaFQ4P79+1i3bh3GjBmDYcOGFUeMRERERsFEpsUY6T3kMWHCBGg0GrRt2xYZGRlo2bIlVCoVxowZgxEjRhRHjERERPSG0zuhUCgU+OqrrzB27FhER0cjLS0NHh4esLY27GYoRERExq4sz6F47StlKpVKeHh4yBkLERGRUTOB4XMgTGCcGYXeCUWbNm1eetGNgwcPGhQQERERGR+9E4qGDRtqPc7JycGFCxfw559/IjAwUK64iIiIjA6HPPQwd+7cQtdPnToVaWlpBgdERERkrHhzMBn06dMHK1eulKs7IiIiMiKy3b48MjIS5ubmcnVHRERkdBQKGDwps8wMeQQEBGg9FkLgwYMHOHPmDCZNmiRbYERERMaGcyj0YGtrq/XYxMQEtWrVwvTp0+Hr6ytbYERERGQ89Eoo8vLy0L9/f3h6eqJ8+fLFFRMREZFR4qRMHZmamsLX15d3FSUiIiqEQqZ/xkjvszzq1auHmzdvFkcsRERERi2/QmHoYoz0Tii++eYbjBkzBjt37sSDBw+QkpKitRAREVHZo/MciunTp2P06NHo0KEDAOCjjz7SugS3EAIKhQJ5eXnyR0lERGQEyvIcCp0TimnTpmHo0KE4dOhQccZDRERktBQKxUvvd6VrH8ZI54RCCAEAaNWqVbEFQ0RERMZJr9NGjTVrIiIiKgkc8tBRzZo1X5lUPH782KCAiIiIjBWvlKmjadOmFbhSJhEREZFeCUXPnj3h6OhYXLEQEREZNROFwuCbgxn6/NKic0LB+RNEREQvV5bnUOh8Yav8szyIiIiIXqRzhUKj0RRnHERERMZPhkmZRnorD/1vX05ERESFM4ECJgZmBIY+v7QwoSAiIpJJWT5tVO+bgxERERG9iAkFERGRTErj9uVHjx5Fp06d4OrqCoVCgW3btmltDwoKku4xkr+0b99eq83jx4/Ru3dvqNVq2NnZYeDAgUhLS9Pv2PULm4iIiIqSfx0KQxd9pKeno0GDBli4cGGRbdq3b48HDx5Iy/r167W29+7dG1euXEFERAR27tyJo0ePYsiQIXrFwTkURERERszf3x/+/v4vbaNSqeDs7FzotmvXrmHPnj04ffo0mjZtCgBYsGABOnTogO+++w6urq46xcEKBRERkUzyJ2UaugBASkqK1pKVlfXacR0+fBiOjo6oVasWhg0bhkePHknbIiMjYWdnJyUTAODj4wMTExOcOnVK530woSAiIpKJCWQY8vj/00bd3Nxga2srLaGhoa8VU/v27bFmzRocOHAA//73v3HkyBH4+/sjLy8PABAfH1/gthrlypWDvb094uPjdd4PhzyIiIjeQHfu3IFarZYeq1Sq1+qnZ8+e0v89PT1Rv359VKtWDYcPH0bbtm0NjjMfKxREREQykXPIQ61Way2vm1C8qGrVqqhYsSKio6MBAM7OzkhMTNRqk5ubi8ePHxc576IwTCiIiIhkYiLTUpzu3r2LR48ewcXFBQDg5eWFpKQknD17Vmpz8OBBaDQaNG/eXOd+OeRBRERkxNLS0qRqAwDExsbiwoULsLe3h729PaZNm4Zu3brB2dkZMTExGDduHKpXrw4/Pz8AQJ06ddC+fXsMHjwYS5YsQU5ODoYPH46ePXvqfIYHwAoFERGRbF68gNTrLvo4c+YMGjVqhEaNGgEARo0ahUaNGmHy5MkwNTXFpUuX8NFHH6FmzZoYOHAgmjRpgmPHjmkNoaxbtw61a9dG27Zt0aFDB7Ro0QI//fSTXnGwQkFERCQTBQy/Wai+z2/dujWEEEVu37t37yv7sLe3R3h4uJ571saEgoiISCavc6XLwvowRhzyICIiIoOxQkFERCQj46wvGI4JBRERkUyev46EIX0YIw55EBERkcFYoSAiIpLJ65z2WVgfxogJBRERkUzkuNKlsQ4dGGvcRERE9AZhhYKIiEgmHPIgIiIig5XGlTLfFBzyICIiIoOxQkFERCQTDnkQERGRwcryWR5MKIiIiGRSlisUxpoIERER0RuEFQoiIiKZlOWzPJhQEBERyYQ3ByMiIiIyACsUREREMjGBAiYGDloY+vzSwoSCiIhIJhzyICIiIjIAKxREREQyUfz/P0P7MEZMKIiIiGTCIQ8iIiIiA7BCQUREJBOFDGd5cMiDiIiojCvLQx5MKIiIiGRSlhMKzqEgIiIig7FCQUREJBOeNkpEREQGM1E8WwztwxhxyIOIiIgMxgoFERGRTDjkQURERAbjWR5EREREBmCFgoiISCYKGD5kYaQFCiYUREREcuFZHkREREQGYIWCSk3k+WgsCj+IS1F3kPB3ClaFDoR/q/rSduf3Pi/0eZOCP0Jw77YlFSaRTqJv3MGBfacRFxePlOR0DBraBQ0a1ii07YZ1+3Di2EUE/KsN2rRtKq2/E5eA7VuOIO52PBQmCjRsVBMB3dtAZa4sqcMgA5XGWR5Hjx7FnDlzcPbsWTx48ABbt25Fly5dpO1CCEyZMgXLli1DUlISvL29sXjxYtSo8b+fz8ePH2PEiBHYsWMHTExM0K1bN/zwww+wtrbWOY5SrVAEBQVBoVBg6NChBbYFBwdDoVAgKCio5AOjEpGRmY261d9C6OjuhW6/tGOG1jL3y15QKBT4sHWDEo6U6NWysnLwViUH9Ojp89J2F8//hVux92Frq/1BnZyUhh/n/QIHRzuMHt8Hn43ojgf3/8bPq3cXZ9gks/yzPAxd9JGeno4GDRpg4cKFhW6fPXs25s+fjyVLluDUqVOwsrKCn58fMjMzpTa9e/fGlStXEBERgZ07d+Lo0aMYMmSIXnGUeoXCzc0NGzZswNy5c2FhYQEAyMzMRHh4OCpXrvza/QohkJeXh3LlSv0QqQhtvTzQ1sujyO2OFdRaj/ce+xPejavD/a2KxR0akd7q1quKuvWqvrRN0pNUbNp4AJ+N/BeW/LhZa9ufl2NgamqCf/VsB5P/H0Tv2dsXoTPC8DDxCRwcyxdb7CQfBQyfVKnv8/39/eHv71/oNiEE5s2bh6+//hqdO3cGAKxZswZOTk7Ytm0bevbsiWvXrmHPnj04ffo0mjZ9VjFbsGABOnTogO+++w6urq46xVHqcygaN24MNzc3bNmyRVq3ZcsWVK5cGY0aNZLWZWVlYeTIkXB0dIS5uTlatGiB06dPS9sPHz4MhUKB3bt3o0mTJlCpVDh+/Dg0Gg1CQ0NRpUoVWFhYoEGDBti0aVOJHiMZ7uHjFOw/eQWfdHq3tEMhei0ajcCasF1o264ZXFwLJsW5uXkwLWcqJRMAYGb27AtRTPS9EouT/lliY2MRHx8PH5//Vc5sbW3RvHlzREZGAgAiIyNhZ2cnJRMA4OPjAxMTE5w6dUrnfZV6QgEAAwYMwKpVq6THK1euRP/+/bXajBs3Dps3b8bq1atx7tw5VK9eHX5+fnj8+LFWuwkTJuDbb7/FtWvXUL9+fYSGhmLNmjVYsmQJrly5gpCQEPTp0wdHjhwpMp6srCykpKRoLVS6Nu46DWtLc3RoxeEOMk77952CqYkCrT5oXOj2mrUqIyU5Hfv3/YHc3DxkpGfiv1uPAgBSUtJKMlQygAkUMFEYuPx/jeLFv0NZWVl6xxMfHw8AcHJy0lrv5OQkbYuPj4ejo6PW9nLlysHe3l5qo9uxvwH69OmD48eP4/bt27h9+zZOnDiBPn36SNvT09OxePFizJkzB/7+/vDw8MCyZctgYWGBFStWaPU1ffp0tGvXDtWqVYOVlRVmzZqFlStXws/PD1WrVkVQUBD69OmDpUuXFhlPaGgobG1tpcXNza3Yjp10s2Hn7wjwawJzlVlph0Kkt7jb8Th88Cz6BHaAoogBchfXiugb5I+D+09j9Mi5+Gr8IlSoaAsbtWWRz6E3j0KmBXg2JeD5v0WhoaEleSh6eyMmGDg4OKBjx44ICwuDEAIdO3ZExYr/KwnGxMQgJycH3t7e0jozMzM0a9YM165d0+rr+ZJNdHQ0MjIy0K5dO6022dnZWsMpL5o4cSJGjRolPU5JSWFSUYp+vxCD6LhELJ0RVNqhEL2WmOi7SEvNwOQvl0jrNBqBrZsO4/CBs5g261MAQNNmHmjazAMpKelQKc0ABXBw/xlUrGhXSpFTabpz5w7U6v/NJVOpVHr34ezsDABISEiAi4uLtD4hIQENGzaU2iQmJmo9Lzc3F48fP5aer4s3IqEAng17DB8+HACKnKmqCysrK+n/aWnPyoS//fYb3nrrLa12L3tjVCrVa71xVDzCd/6O+rXdULfGW69uTPQGata8LmrVdtdat2j+Jrzzrgfe9fIs0F6tfvY5FnniMszMyqFWHfcCbegNJeOsTLVarZVQvI4qVarA2dkZBw4ckBKIlJQUnDp1CsOGDQMAeHl5ISkpCWfPnkWTJk0AAAcPHoRGo0Hz5s113tcbk1C0b98e2dnZUCgU8PPz09pWrVo1KJVKnDhxAu7uz36xcnJycPr0aXzxxRdF9unh4QGVSoW4uDi0atWqOMOn15CekYXYuw+lx3EPHuHPv+7CTm2JSs72AIDU9EzsOHgBU0d0Lq0wiXSSlZmNhw+fSI8f/Z2Mu3cSYGllAXt7NaysLbTam5qaQK22gtP//6wDwJFD51C12ltQqcxw/dotbNt8BB91bQlLS/MSOw4yTGlchyItLQ3R0dHS49jYWFy4cAH29vaoXLkyvvjiC3zzzTeoUaMGqlSpgkmTJsHV1VW6VkWdOnXQvn17DB48GEuWLEFOTg6GDx+Onj176nyGB/AGJRSmpqbS8IWpqanWNisrKwwbNgxjx46VXqDZs2cjIyMDAwcOLLJPGxsbjBkzBiEhIdBoNGjRogWSk5Nx4sQJqNVqBAYGFusx0ctduB6HbsN/lB5Pmb8NANCjQzPM/7o3AGBbxDlACHRt16Q0QiTSWdzteMyfu1F6vHXTIQBAs3from9QB536uH3rAXbtPIHsrBw4OtmjZ29fNHu3brHES/8cZ86cQZs2baTH+UP2gYGBCAsLw7hx45Ceno4hQ4YgKSkJLVq0wJ49e2Bu/r9Edd26dRg+fDjatm0rXdhq/vz5esWhEEIIeQ5Jf0FBQUhKSsK2bdsK3d6lSxfY2dkhLCwMmZmZGDduHNavX4/U1FQ0bdoUc+fOxTvvvAPg2Wmjbdq0wZMnT2BnZyf1IYTA/PnzsXjxYty8eRN2dnZo3LgxvvzyS7Rs2VKnOFNSUmBra4u4+McGl5+I3lS/Xrpb2iEQFYun6akY2dYTycnJxfYZnv934sCFOFjbGLaPtNQUtG1YuVjjLQ6lmlAYCyYUVBYwoaB/qpJMKA7KlFB8YIQJxRtx2igREREZtzdmDgUREZHRK41rb78hmFAQERHJpDTO8nhTMKEgIiKSyevcLbSwPowR51AQERGRwVihICIikkkZnkLBhIKIiEg2ZTij4JAHERERGYwVCiIiIpnwLA8iIiIyGM/yICIiIjIAKxREREQyKcNzMplQEBERyaYMZxQc8iAiIiKDsUJBREQkE57lQURERAYry2d5MKEgIiKSSRmeQsE5FERERGQ4ViiIiIjkUoZLFEwoiIiIZFKWJ2VyyIOIiIgMxgoFERGRTHiWBxERERmsDE+h4JAHERERGY4VCiIiIrmU4RIFEwoiIiKZ8CwPIiIiIgOwQkFERCQTnuVBREREBivDUyiYUBAREcmmDGcUnENBREREBmOFgoiISCZl+SwPJhRERERykWFSppHmExzyICIiIsOxQkFERCSTMjwnkwkFERGRbMpwRsEhDyIiIjIYEwoiIiKZKGT6p6upU6dCoVBoLbVr15a2Z2ZmIjg4GBUqVIC1tTW6deuGhISE4jh0JhRERERyyb/0tqGLPurWrYsHDx5Iy/Hjx6VtISEh2LFjB3799VccOXIE9+/fR0BAgMxH/QznUBARERmxcuXKwdnZucD65ORkrFixAuHh4fjggw8AAKtWrUKdOnXw+++/491335U1DlYoiIiIZKKQaQGAlJQUrSUrK6vQfd64cQOurq6oWrUqevfujbi4OADA2bNnkZOTAx8fH6lt7dq1UblyZURGRsp85EwoiIiI5CNjRuHm5gZbW1tpCQ0NLbC75s2bIywsDHv27MHixYsRGxuL999/H6mpqYiPj4dSqYSdnZ3Wc5ycnBAfHy/7oXPIg4iISCZyXnr7zp07UKvV0nqVSlWgrb+/v/T/+vXro3nz5nB3d8cvv/wCCwsLg+LQFysUREREbyC1Wq21FJZQvMjOzg41a9ZEdHQ0nJ2dkZ2djaSkJK02CQkJhc65MBQTCiIiIpkoIMNZHgbsPy0tDTExMXBxcUGTJk1gZmaGAwcOSNujoqIQFxcHLy8vg4/1RRzyICIikklJXyhzzJgx6NSpE9zd3XH//n1MmTIFpqam6NWrF2xtbTFw4ECMGjUK9vb2UKvVGDFiBLy8vGQ/wwNgQkFERGS07t69i169euHRo0dwcHBAixYt8Pvvv8PBwQEAMHfuXJiYmKBbt27IysqCn58fFi1aVCyxMKEgIiKSyetcmKqwPnS1YcOGl243NzfHwoULsXDhQsOC0gETCiIiItmU3buDcVImERERGYwVCiIiIpmU9JDHm4QJBRERkUzK7oAHhzyIiIhIBqxQEBERyYRDHkRERGQwOe/lYWyYUBAREcmlDE+i4BwKIiIiMhgrFERERDIpwwUKJhRERERyKcuTMjnkQURERAZjhYKIiEgmPMuDiIiIDFeGJ1FwyIOIiIgMxgoFERGRTMpwgYIJBRERkVx4lgcRERGRAVihICIiko3hZ3kY66AHEwoiIiKZcMiDiIiIyABMKIiIiMhgHPIgIiKSSVke8mBCQUREJJOyfOltDnkQERGRwVihICIikgmHPIiIiMhgZfnS2xzyICIiIoOxQkFERCSXMlyiYEJBREQkE57lQURERGQAViiIiIhkwrM8iIiIyGBleAoFEwoiIiLZlOGMgnMoiIiIyGCsUBAREcmkLJ/lwYSCiIhIJpyUSS8lhAAApKamlHIkRMXnaXpqaYdAVCyepqcB+N9neXFKSTH874QcfZQGJhQ6SE199kFbt8bbpRsIERG9ttTUVNja2hZL30qlEs7OzqhRxU2W/pydnaFUKmXpq6QoREmkbEZOo9Hg/v37sLGxgcJYa1FGJCUlBW5ubrhz5w7UanVph0MkO/6MlywhBFJTU+Hq6goTk+I7FyEzMxPZ2dmy9KVUKmFubi5LXyWFFQodmJiYoFKlSqUdRpmjVqv5YUv/aPwZLznFVZl4nrm5udElAXLiaaNERERkMCYUREREZDAmFPTGUalUmDJlClQqVWmHQlQs+DNO/0SclElEREQGY4WCiIiIDMaEgoiIiAzGhIKIiIgMxoSCiIiIDMaEgopVUFAQunTpUtphEMkuKCgICoUCQ4cOLbAtODgYCoUCQUFBJR8YUSlhQkFE9Jrc3NywYcMGPH36VFqXmZmJ8PBwVK5c+bX7FUIgNzdXjhCJSgwTCio1f/75J/z9/WFtbQ0nJyf07dsXf//9t7R906ZN8PT0hIWFBSpUqAAfHx+kp6cDAA4fPoxmzZrBysoKdnZ28Pb2xu3bt0vrUKiMaty4Mdzc3LBlyxZp3ZYtW1C5cmU0atRIWpeVlYWRI0fC0dER5ubmaNGiBU6fPi1tP3z4MBQKBXbv3o0mTZpApVLh+PHj0Gg0CA0NRZUqVWBhYYEGDRpg06ZNJXqMRLpiQkGlIikpCR988AEaNWqEM2fOYM+ePUhISECPHj0AAA8ePECvXr0wYMAAXLt2DYcPH0ZAQID0za1Lly5o1aoVLl26hMjISAwZMoQ3bqNSMWDAAKxatUp6vHLlSvTv31+rzbhx47B582asXr0a586dQ/Xq1eHn54fHjx9rtZswYQK+/fZbXLt2DfXr10doaCjWrFmDJUuW4MqVKwgJCUGfPn1w5MiREjk2Ir0IomIUGBgoOnfuXGD9jBkzhK+vr9a6O3fuCAAiKipKnD17VgAQt27dKvDcR48eCQDi8OHDxRU20Svl/2wnJiYKlUolbt26JW7duiXMzc3Fw4cPRefOnUVgYKBIS0sTZmZmYt26ddJzs7Ozhaurq5g9e7YQQohDhw4JAGLbtm1Sm8zMTGFpaSlOnjyptd+BAweKXr16lcxBEumBdxulUnHx4kUcOnQI1tbWBbbFxMTA19cXbdu2haenJ/z8/ODr64vu3bujfPnysLe3R1BQEPz8/NCuXTv4+PigR48ecHFxKYUjobLOwcEBHTt2RFhYGIQQ6NixIypWrChtj4mJQU5ODry9vaV1ZmZmaNasGa5du6bVV9OmTaX/R0dHIyMjA+3atdNqk52drTWcQvSmYEJBpSItLQ2dOnXCv//97wLbXFxcYGpqioiICJw8eRL79u3DggUL8NVXX+HUqVOoUqUKVq1ahZEjR2LPnj3YuHEjvv76a0RERODdd98thaOhsm7AgAEYPnw4AGDhwoWv3Y+VlZX0/7S0NADAb7/9hrfeekurHe8BQm8izqGgUtG4cWNcuXIFb7/9NqpXr6615H+oKhQKeHt7Y9q0aTh//jyUSiW2bt0q9dGoUSNMnDgRJ0+eRL169RAeHl5ah0NlXPv27ZGdnY2cnBz4+flpbatWrRqUSiVOnDghrcvJycHp06fh4eFRZJ8eHh5QqVSIi4sr8Dvi5uZWbMdC9LpYoaBil5ycjAsXLmitGzJkCJYtW4ZevXph3LhxsLe3R3R0NDZs2IDly5fjzJkzOHDgAHx9feHo6IhTp07h4cOHqFOnDmJjY/HTTz/ho48+gqurK6KionDjxg3069evdA6QyjxTU1Np+MLU1FRrm5WVFYYNG4axY8fC3t4elStXxuzZs5GRkYGBAwcW2aeNjQ3GjBmDkJAQaDQatGjRAsnJyThx4gTUajUCAwOL9ZiI9MWEgord4cOHC4z5Dhw4ECdOnMD48ePh6+uLrKwsuLu7o3379jAxMYFarcbRo0cxb948pKSkwN3dHd9//z38/f2RkJCA69evY/Xq1Xj06BFcXFwQHByMTz/9tJSOkAhQq9VFbvv222+h0WjQt29fpKamomnTpti7dy/Kly//0j5nzJgBBwcHhIaG4ubNm7Czs0Pjxo3x5Zdfyh0+kcF4+3IiIiIyGOdQEBERkcGYUBAREZHBmFAQERGRwZhQEBERkcGYUBAREZHBmFAQERGRwZhQEBERkcGYUBAZiaCgIHTp0kV63Lp1a3zxxRclHsfhw4ehUCiQlJRUZBuFQoFt27bp3OfUqVPRsGFDg+K6desWFApFgauyElHJYEJBZICgoCAoFAooFAoolUpUr14d06dPR25ubrHve8uWLZgxY4ZObXVJAoiIDMFLbxMZqH379li1ahWysrKwa9cuBAcHw8zMDBMnTizQNjs7G0qlUpb92tvby9IPEZEcWKEgMpBKpYKzszPc3d0xbNgw+Pj44L///S+A/w1TzJw5E66urqhVqxYA4M6dO+jRowfs7Oxgb2+Pzp0749atW1KfeXl5GDVqFOzs7FChQgWMGzcOL14l/8Uhj6ysLIwfPx5ubm5QqVSoXr06VqxYgVu3bqFNmzYAgPLly0OhUCAoKAgAoNFoEBoaiipVqsDCwgINGjTApk2btPaza9cu1KxZExYWFmjTpo1WnLoaP348atasCUtLS1StWhWTJk1CTk5OgXZLly6Fm5sbLC0t0aNHDyQnJ2ttX758OerUqQNzc3PUrl0bixYt0jsWIioeTCiIZGZhYYHs7Gzp8YEDBxAVFYWIiAjs3LlTusW1jY0Njh07hhMnTsDa2lq6BTYAfP/99wgLC8PKlStx/PhxPH78WOvW7YXp168f1q9fj/nz5+PatWtYunQprK2t4ebmhs2bNwMAoqKi8ODBA/zwww8AgNDQUKxZswZLlizBlStXEBISgj59+uDIkSMAniU+AQEB6NSpEy5cuIBBgwZhwoQJer8mNjY2CAsLw9WrV/HDDz9g2bJlmDt3rlab6Oho/PLLL9ixYwf27NmD8+fP47PPPpO2r1u3DpMnT8bMmTNx7do1zJo1C5MmTcLq1av1joeIioEgotcWGBgoOnfuLIQQQqPRiIiICKFSqcSYMWOk7U5OTiIrK0t6ztq1a0WtWrWERqOR1mVlZQkLCwuxd+9eIYQQLi4uYvbs2dL2nJwcUalSJWlfQgjRqlUr8fnnnwshhIiKihIARERERKFxHjp0SAAQT548kdZlZmYKS0tLcfLkSa22AwcOFL169RJCCDFx4kTh4eGhtX38+PEF+noRALF169Yit8+ZM0c0adJEejxlyhRhamoq7t69K63bvXu3MDExEQ8ePBBCCFGtWjURHh6u1c+MGTOEl5eXEEKI2NhYAUCcP3++yP0SUfHhHAoiA+3cuRPW1tbIycmBRqPBJ598gqlTp0rbPT09teZNXLx4EdHR0bCxsdHqJzMzEzExMUhOTsaDBw/QvHlzaVu5cuXQtGnTAsMe+S5cuABTU1O0atVK57ijo6ORkZGBdu3aaa3Pzs6Wbjd/7do1rTgAwMvLS+d95Nu4cSPmz5+PmJgYpKWlITc3t8DtvitXroy33npLaz8ajQZRUVGwsbFBTEwMBg4ciMGDB0ttcnNzYWtrq3c8RCQ/JhREBmrTpg0WL14MpVIJV1dXlCun/WtlZWWl9TgtLQ1NmjTBunXrCvTl4ODwWjFYWFjo/Zy0tDQAwG+//ab1hxx4Ni9ELpGRkejduzemTZsGPz8/2NraYsOGDfj+++/1jnXZsmUFEhxTU1PZYiWi18eEgshAVlZWqF69us7tGzdujI0bN8LR0bHAt/R8Li4uOHXqFFq2bAng2Tfxs2fPonHjxoW29/T0hEajwZEjR+Dj41Nge36FJC8vT1rn4eEBlUqFuLi4IisbderUkSaY5vv9999ffZDPOXnyJNzd3fHVV19J627fvl2gXVxcHO7fvw9XV1dpPyYmJqhVqxacnJzg6uqKmzdvonfv3nrtn4hKBidlEpWw3r17o2LFiujcuTOOHTuG2NhYHD58GCNHjsTdu3cBAJ9//jm+/fZbbNu2DdevX8dnn3320mtIvP322wgMDMSAAQOwbds2qc9ffvkFAODu7g6FQoGdO3fi4cOHSEtLg42NDcaMGYOQkBCsXr0aMTExOHfuHBYsWCBNdBw6dChu3LiBsWPHIioqCuHh4QgLC9PreGvUqIG4uDhs2LABMTExmD9/fqETTM3NzREYGIiLFy/i2LFjGDlyJHr06AFnZ2cAwLRp0xAaGor58+fjr7/+wuXLl7Fq1Sr85z//0SseIioeTCiISpilpSWOHj2KypUrIyAgAHXq1MHAgQORmZkpVSxGjx6Nvn37IjAwEF5eXrCxsUHXrl1f2u/ixYvRvXt3fPbZZ6hduzYGDx6M9PR0AMBbb72FadOmYcKECXBycsLw4cMBADNmzMCkSZMQGhqKOnXqoH379vjtt99QpUoVAM/mNWzevBnbtm1DgwYNsGTJEsyaNUuv4/3oo48QEhKC4cOHo2HDhjh58iQmTZpUoF316tUREBCADh06wNfXF/Xr19c6LXTQoEFYvnw5Vq1aBU9PT7Rq1QphYWFSrERUuhSiqFleRERERDpihYKIiIgMxoSCiIiIDMaEgoiIiAzGhIKIiIgMxoSCiIiIDMaEgoiIiAzGhIKIiIgMxoSCiIiIDMaEgoiIiAzGhIKIiIgMxoSCiIiIDMaEgoiIiAz2fyeITLmaUR3uAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.linear_model import LinearRegression, LogisticRegression\n", + "from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier\n", + "from sklearn.ensemble import GradientBoostingRegressor, GradientBoostingClassifier\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score, accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, ConfusionMatrixDisplay\n", + "\n", + "# Загружаем набор данных\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "\n", + "# Определяем категориальные и числовые столбцы\n", + "categorical_cols = ['sex', 'smoker', 'region']\n", + "numerical_cols = ['age', 'bmi', 'children']\n", + "\n", + "# Создаем преобразователь для категориальных и числовых столбцов\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('cat', OneHotEncoder(), categorical_cols),\n", + " ('num', StandardScaler(), numerical_cols)\n", + " ])\n", + "\n", + "# Список моделей и их гиперпараметров для задачи регрессии\n", + "models_reg = {\n", + " \"Linear Regression\": (LinearRegression(), {}),\n", + " \"Random Forest Regression\": (RandomForestRegressor(), {\n", + " 'model__n_estimators': [100, 200],\n", + " 'model__max_depth': [None, 10, 20]\n", + " }),\n", + " \"Gradient Boosting Regression\": (GradientBoostingRegressor(), {\n", + " 'model__n_estimators': [100, 200],\n", + " 'model__learning_rate': [0.01, 0.1],\n", + " 'model__max_depth': [3, 5]\n", + " })\n", + "}\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи регрессии\n", + "X_reg = df[categorical_cols + numerical_cols]\n", + "y_reg = df['charges']\n", + "\n", + "# Разделяем данные на обучающую и тестовую выборки для задачи регрессии\n", + "X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X_reg, y_reg, test_size=0.2, random_state=42)\n", + "\n", + "# Обучаем и оцениваем модели для задачи регрессии\n", + "print(\"Результаты для задачи регрессии:\")\n", + "for name, (model, params) in models_reg.items():\n", + " pipeline = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('model', model)\n", + " ])\n", + " grid_search = GridSearchCV(pipeline, params, cv=5, scoring='neg_mean_absolute_error')\n", + " grid_search.fit(X_train_reg, y_train_reg)\n", + " best_model = grid_search.best_estimator_\n", + " y_pred_reg = best_model.predict(X_test_reg)\n", + " mae = mean_absolute_error(y_test_reg, y_pred_reg)\n", + " mse = mean_squared_error(y_test_reg, y_pred_reg)\n", + " rmse = mean_squared_error(y_test_reg, y_pred_reg, squared=False)\n", + " r2 = r2_score(y_test_reg, y_pred_reg)\n", + " print(f\"Model: {name}\")\n", + " print(f\"Best Parameters: {grid_search.best_params_}\")\n", + " print(f\"MAE: {mae}\")\n", + " print(f\"MSE: {mse}\")\n", + " print(f\"RMSE: {rmse}\")\n", + " print(f\"R²: {r2}\")\n", + " print()\n", + "\n", + "# Список моделей и их гиперпараметров для задачи классификации\n", + "models_class = {\n", + " \"Logistic Regression\": (LogisticRegression(), {\n", + " 'model__C': [0.1, 1, 10],\n", + " 'model__solver': ['liblinear', 'lbfgs']\n", + " }),\n", + " \"Random Forest Classification\": (RandomForestClassifier(), {\n", + " 'model__n_estimators': [100, 200],\n", + " 'model__max_depth': [None, 10, 20]\n", + " }),\n", + " \"Gradient Boosting Classification\": (GradientBoostingClassifier(), {\n", + " 'model__n_estimators': [100, 200],\n", + " 'model__learning_rate': [0.01, 0.1],\n", + " 'model__max_depth': [3, 5]\n", + " })\n", + "}\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи классификации\n", + "X_class = df[categorical_cols + numerical_cols]\n", + "y_class = (df['charges'] > df['charges'].mean()).astype(int)\n", + "\n", + "# Разделяем данные на обучающую и тестовую выборки для задачи классификации\n", + "X_train_class, X_test_class, y_train_class, y_test_class = train_test_split(X_class, y_class, test_size=0.2, random_state=42)\n", + "\n", + "# Обучаем и оцениваем модели для задачи классификации\n", + "print(\"Результаты для задачи классификации:\")\n", + "for name, (model, params) in models_class.items():\n", + " pipeline = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('model', model)\n", + " ])\n", + " grid_search = GridSearchCV(pipeline, params, cv=5, scoring='accuracy')\n", + " grid_search.fit(X_train_class, y_train_class)\n", + " best_model = grid_search.best_estimator_\n", + " y_pred_class = best_model.predict(X_test_class)\n", + " accuracy = accuracy_score(y_test_class, y_pred_class)\n", + " precision = precision_score(y_test_class, y_pred_class)\n", + " recall = recall_score(y_test_class, y_pred_class)\n", + " f1 = f1_score(y_test_class, y_pred_class)\n", + " print(f\"Model: {name}\")\n", + " print(f\"Best Parameters: {grid_search.best_params_}\")\n", + " print(f\"Accuracy: {accuracy}\")\n", + " print(f\"Precision: {precision}\")\n", + " print(f\"Recall: {recall}\")\n", + " print(f\"F1-score: {f1}\")\n", + " print()\n", + "\n", + " # Визуализация матрицы ошибок\n", + " cm = confusion_matrix(y_test_class, y_pred_class)\n", + " disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=['Less', 'More'])\n", + " disp.plot(cmap=plt.cm.Blues)\n", + " plt.title(f'Confusion Matrix for {name}')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Давайте проанализируем полученные значения метрик и определим, являются ли они нормальными или их можно улучшить.\n", + "\n", + "### Оценка смещения и дисперсии для задачи регрессии:\n", + "\n", + "### Вывод для задачи регрессии:\n", + "\n", + "- **Random Forest Regression** демонстрирует наилучшие результаты по метрикам MAE и R², что указывает на высокую точность и стабильность модели.\n", + "- **Linear Regression** и **Gradient Boosting Regression** также показывают хорошие результаты, но уступают случайному лесу.\n", + "\n", + "### Вывод для задачи классификации:\n", + "\n", + "- **Random Forest Classification** демонстрирует наилучшие результаты по всем метрикам (Accuracy, Precision, Recall, F1-score), что указывает на высокую точность и стабильность модели.\n", + "- **Logistic Regression** и **Gradient Boosting Classification** также показывают хорошие результаты, но уступают случайному лесу.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Для оценки смещения (bias) и дисперсии (variance) моделей можно использовать метод перекрестной проверки (cross-validation). Этот метод позволяет оценить, насколько хорошо модель обобщается на новых данных.\n", + "\n", + "Оценка смещения и дисперсии для задачи регрессии:\n", + "Для задачи регрессии мы будем использовать метрики MAE (Mean Absolute Error) и R² (R-squared) для оценки смещения и дисперсии.\n", + "\n", + "Оценка смещения и дисперсии для задачи классификации:\n", + "Для задачи классификации мы будем использовать метрики Accuracy, Precision, Recall и F1-score для оценки смещения и дисперсии.\n", + "\n", + "Пример кода для оценки смещения и дисперсии:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Оценка смещения и дисперсии для задачи регрессии:\n", + "Model: Linear Regression\n", + "MAE (Cross-Validation): Mean = 4185.5421072063355, Std = 92.43821200753904\n", + "R² (Cross-Validation): Mean = 0.7497293059031158, Std = 0.008805026203658282\n", + "\n", + "Model: Random Forest Regression\n", + "MAE (Cross-Validation): Mean = 956.4848341519103, Std = 88.92646158556248\n", + "R² (Cross-Validation): Mean = 0.9768968000358168, Std = 0.003942950295159459\n", + "\n", + "Model: Gradient Boosting Regression\n", + "MAE (Cross-Validation): Mean = 2189.5694438069927, Std = 96.31677771605824\n", + "R² (Cross-Validation): Mean = 0.8873175260899913, Std = 0.011188839103376261\n", + "\n", + "Оценка смещения и дисперсии для задачи классификации:\n", + "Model: Logistic Regression\n", + "Accuracy (Cross-Validation): Mean = 0.8906956776270857, Std = 0.011756347754179863\n", + "Precision (Cross-Validation): Mean = 0.9965558019216555, Std = 0.0042291925480556145\n", + "Recall (Cross-Validation): Mean = 0.6516534480440919, Std = 0.038303791687037965\n", + "F1-score (Cross-Validation): Mean = 0.7873345301431043, Std = 0.027701698921697982\n", + "\n", + "Model: Random Forest Classification\n", + "Accuracy (Cross-Validation): Mean = 0.9978352359579796, Std = 0.001767524034697101\n", + "Precision (Cross-Validation): Mean = 0.9976878612716764, Std = 0.002831780049460347\n", + "Recall (Cross-Validation): Mean = 0.9953757225433526, Std = 0.004325615476039242\n", + "F1-score (Cross-Validation): Mean = 0.9965250705740019, Std = 0.002837294532624193\n", + "\n", + "Model: Gradient Boosting Classification\n", + "Accuracy (Cross-Validation): Mean = 0.9354219923895014, Std = 0.005560116809131367\n", + "Precision (Cross-Validation): Mean = 0.9873539623899337, Std = 0.011266123317032629\n", + "Recall (Cross-Validation): Mean = 0.803226240086033, Std = 0.017698107137353723\n", + "F1-score (Cross-Validation): Mean = 0.8856692810850337, Std = 0.01067664691021022\n", + "\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.linear_model import LinearRegression, LogisticRegression\n", + "from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier\n", + "from sklearn.ensemble import GradientBoostingRegressor, GradientBoostingClassifier\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "\n", + "# Загружаем набор данных\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "\n", + "# Определяем категориальные и числовые столбцы\n", + "categorical_cols = ['sex', 'smoker', 'region']\n", + "numerical_cols = ['age', 'bmi', 'children']\n", + "\n", + "# Создаем преобразователь для категориальных и числовых столбцов\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('cat', OneHotEncoder(), categorical_cols),\n", + " ('num', StandardScaler(), numerical_cols)\n", + " ])\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи регрессии\n", + "X_reg = df[categorical_cols + numerical_cols]\n", + "y_reg = df['charges']\n", + "\n", + "# Список моделей для задачи регрессии\n", + "models_reg = {\n", + " \"Linear Regression\": LinearRegression(),\n", + " \"Random Forest Regression\": RandomForestRegressor(),\n", + " \"Gradient Boosting Regression\": GradientBoostingRegressor()\n", + "}\n", + "\n", + "# Оценка смещения и дисперсии для задачи регрессии\n", + "print(\"Оценка смещения и дисперсии для задачи регрессии:\")\n", + "for name, model in models_reg.items():\n", + " pipeline = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('model', model)\n", + " ])\n", + " mae_scores = -cross_val_score(pipeline, X_reg, y_reg, cv=5, scoring='neg_mean_absolute_error')\n", + " r2_scores = cross_val_score(pipeline, X_reg, y_reg, cv=5, scoring='r2')\n", + " print(f\"Model: {name}\")\n", + " print(f\"MAE (Cross-Validation): Mean = {mae_scores.mean()}, Std = {mae_scores.std()}\")\n", + " print(f\"R² (Cross-Validation): Mean = {r2_scores.mean()}, Std = {r2_scores.std()}\")\n", + " print()\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи классификации\n", + "X_class = df[categorical_cols + numerical_cols]\n", + "y_class = (df['charges'] > df['charges'].mean()).astype(int)\n", + "\n", + "# Список моделей для задачи классификации\n", + "models_class = {\n", + " \"Logistic Regression\": LogisticRegression(),\n", + " \"Random Forest Classification\": RandomForestClassifier(),\n", + " \"Gradient Boosting Classification\": GradientBoostingClassifier()\n", + "}\n", + "\n", + "# Оценка смещения и дисперсии для задачи классификации\n", + "print(\"Оценка смещения и дисперсии для задачи классификации:\")\n", + "for name, model in models_class.items():\n", + " pipeline = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('model', model)\n", + " ])\n", + " accuracy_scores = cross_val_score(pipeline, X_class, y_class, cv=5, scoring='accuracy')\n", + " precision_scores = cross_val_score(pipeline, X_class, y_class, cv=5, scoring='precision')\n", + " recall_scores = cross_val_score(pipeline, X_class, y_class, cv=5, scoring='recall')\n", + " f1_scores = cross_val_score(pipeline, X_class, y_class, cv=5, scoring='f1')\n", + " print(f\"Model: {name}\")\n", + " print(f\"Accuracy (Cross-Validation): Mean = {accuracy_scores.mean()}, Std = {accuracy_scores.std()}\")\n", + " print(f\"Precision (Cross-Validation): Mean = {precision_scores.mean()}, Std = {precision_scores.std()}\")\n", + " print(f\"Recall (Cross-Validation): Mean = {recall_scores.mean()}, Std = {recall_scores.std()}\")\n", + " print(f\"F1-score (Cross-Validation): Mean = {f1_scores.mean()}, Std = {f1_scores.std()}\")\n", + " print()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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w8XFxThz5oxhGIbx3HPPGRaLxbh27VqedY4cOdKQZHzxxRfWaRcvXjQCAwONGjVqGJmZmYZhGMbx48cNScbSpUtttvnhhx/Osc6+ffsa1atXt74+c+aMIcmYOHFijrLt2rUz6tWrZ/NeZmVlGQ8++KBx33335dnubJLy/LdixQqbtkoyFi5caLN89nZZLJYc73PDhg0NHx8f49y5c9Zp3377reHo6Gj06dPHOm3ixImGJKNnz563ba9hGMbixYsNScb333+fY152X7127Zrh5+dnvPTSS4ZhGMaBAwcMSca2bdts+v2NVq9ebUgyjhw5YhiGYaSkpBhubm7GrFmzct3mvP4lJCTkaJeLi4sxdOjQ227bzZ81wzCM2bNnG5KM9957zzotPT3dCA0NNTw9PY2UlBSbduX2u7hVfeHh4caZM2eMM2fOGN9//73Ru3dvQ5IRFRVlLZffz3xSUpJRpkwZo0uXLjblJk2aZEgy+vbta52W/Xto2bKlzWfs4sWLRoUKFYyBAwfarCMpKckoX768dfqff/5pSDJee+21PLfv448/zvV3fbObP19dunQxXFxcjGPHjlmn/f7770a5cuWMVq1a5diGsLAwIysryzp91KhRhpOTk3H+/Plb1pvd98+cOWP885//NGrWrGmd97e//c3o37+/tX03/j7y2yc++eQTQ5Ixffp0a7lr164ZDz30UI79UX73JVu2bDEkGVu2bDEMwzD27dtnSDI++OCDW24rAPvK3l9t3LjROHPmjPHLL78Yq1evNry9vQ1XV1fjl19+ueXy+dnnnj592nBxcTEiIyNt9on/+te/cnwHZO//8mrn8ePHrdMKeix587HKu+++azg6OtocqxmGYSxcuNCQZHz55ZeGYRhGYmKiIckYNmyYTblevXrleRx2o40bNxqSjM8++yzHvIcfftioVauW9fv24MGDxujRow1JOb73d+/ebfj5+Rkff/xxnnUNGjTIcHd3v2V7DMP2eyZb9u8pPDzcepxqGIYxd+5cQ5KxZMkSm3bn9p7err5Dhw4ZZ86cMU6cOGEsWbLEcHd3N7y9vY3U1FTDMK5/v9x3331GRESETV+5fPmyERgYaDzyyCPWaZ06dTI8PDyM3377zTrtyJEjRpkyZXL0IUmGo6OjsX//fpvpAwYMMPz9/Y2zZ8/aTO/Ro4dRvnx5ax977LHH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uOjee+/NcVxxq+O/vHz44YeyWCw6c+aM3njjDR0/ftwmMMz+rs/tUu5sFy5c0NWrV3XlypVcn5iX11P0bj6uOHPmjM6fP68333xTb775Zq7LZPeBsWPHauPGjWratKlq1qyp8PBw9erVSy1atLCWnT59uvr27auAgACFhISoY8eO6tOnT46/K270888/q0qVKjmeZJzXsdzNxxXS9WOLghxXSNePhWfMmKFRo0Zp586ded5fK799Iq/PuLOzc47tz+/nLjeTJ0/WY489pvvvv19169ZV+/bt1bt3b+ulnyiZCJpKsF69emngwIFKSkpShw4d8nxCRVZWlnx8fPIc6ZG9Qzl//rwefvhhWSwWTZ48WUFBQXJzc9PevXs1duzYHI/9vHFUw41uFyhIsrblxi+CG/3000+3/ALIjY+PjxITE7VhwwZ9/vnn+vzzz7V06VL16dMn15vuFpSDg0Ou23bzzS3zkv3+/fOf/8zzBtdmPsr2xgOEgswzY/03yr42/c8//7zlGdhmzZopKChII0eO1PHjx/McHSJdP+uSlpamGTNmaMaMGTnmL1u2TDExMflqX27Onz+vypUr3/HyBVHQ30XlypWtgVlERIRq1aqlRx99VK+//rqio6Ml5f8zb0Z7s/v1u+++m+u9sW68/9XIkSPVqVMnffLJJ9qwYYNefPFFTZs2TZs3b1ajRo3k4OCg1atXa9euXfrss8+0YcMGPf3005oxY4Z27dqVI4C5U39l33WjXr16acGCBSpXrpyeeOKJHEFSYfmr+5IZM2aoX79++vTTTxUXF6dnn31W06ZN065du247SgJA0WratKmaNGki6frImZYtW6pXr146dOiQPD09tXPnzhwjmo8fP64aNWrcdp9bEHkFJDcfAxX0WDK378CsrCzVq1dPM2fOzLXOG+8r81fceHySm7Jly9qcoGrRooUaN26sf/3rX7neD/VW/vzzT3l4eJhy/HU7d1JHq1atrMc9nTp1Ur169fTkk09qz549cnR0tP7eXnvtNTVs2DDXdXh6et7RE+PyOq546qmn8gy2sgOM2rVr69ChQ1qzZo3Wr1+vDz/8UPPnz9eECROsx4Hdu3fXQw89pI8//lhxcXF67bXX9Oqrr+qjjz7K1z1l88Os44qePXtq3LhxGjhwoCpVqqTw8HAzmpcvf+Vz16pVKx07dsx6XLF4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9fX1aGhoaHO5oqIi+Pv7IyUlBcuWLcPJkydx5MgRzJkzB1999RX279/f6noqlQq2trYwMjLSS31tbGxgYWGhl211RtP4OnDgAIyMjPDEE090W30a3c6x5f7770dZWRlKSkqQmJiI5ORkvPLKK11aZlvnC33oCedF0XP0hHiQPKlrSZ4keVJ7SJ7UMZInSZ6kdxQ9SmRkJCMiIm46HwB37txJkiwuLiYAbt++nYMHD6apqSl9fHx4+PBhnXUOHTrEhx9+mCYmJrz77rsZHR3NqqoqZf4nn3zCgIAAmpub097enmPHjuWFCxeU+QcPHiQA7tmzhwMGDKCxsTEPHjzYZv1I8ueffyYAvv3228q0kpISjh49mlZWVrS2tuZf/vIXFhcXK/Nra2sZHR1NKysr2tjYcM6cOZwwYYLOcQkJCWFUVBRjYmJoa2vLwYMHkySzs7M5bNgwarVa9u7dm88//zx/+uknZb1t27bR29ubJiYmtLGxYWhoqHIsDh48yMDAQJqZmdHKyorBwcH84YcfSJILFy6kr6+vsp36+nouXryYzs7OVKvV9PX15ddff63Mb2/bNNda+z/zzDP09/dXvl+6dInPPfccnZycaGpqSm9vb27ZskVnnZCQEEZHR3P27Nm0tramvb09Fy5cqLNMfn4+H3nkEWo0Gnp5eTElJaVF+2VlZfGxxx5TjtdLL73Eq1evtqjv0qVL2bt3b1pZWXHx4sWsra1lbGwsra2t6ezszI8++qjD+93UN998w8DAQKrVajo4ODAuLo61tbU6+6vPeFi4cCEB6HxuFvPtabP6+nouW7aMbm5uNDExoY+PD7dt26azTlJSEt3d3anRaDh48GBu3LiRAFhZWUmSTExMpJWVFZOSkujl5UWVSsXi4mJev36ds2bNopOTE83MzDhw4ECduj766KM0MTGhlZUVzczM2L9/f+7evZskWVFRwbFjx7JXr140MTEhAL7wwgt88sknaWpqSgBMS0vjiy++SDc3N6rVapqYmFClUum0Q11dHV977TWqVCqamJgobaXRaJS4CwkJYUxMjFKvturduL/Jycn09PSkVqtleHg4z58/T5K/u40OHTpEALx48aIyra14b6vfV1dXMyoqig4ODtRoNOzTpw+XLVtGknR1ddWpq6urq7IfTceWxromJCTQwcGBNjY2nDZtGmtqapRlzp8/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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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NtZuvpCQED399NPasGGDatSoIW9vbz344IP66quvUn0OkipatKjq1atn97hJt16XlSpVUsWKFR0uN3/+fFWtWlU+Pj4qUKCAnnvuOZ04cSLZfIsXL1bFihXl7e2tihUrOhzrkpSQkKCxY8fqoYcekre3twoWLKiXXnpJ//zzzx3vw53GAQDkJA0aNJB0a0eelHo/k5733hUrVqh+/frKlSuXAgICVL16dbv3WkfnaJo7d66qVq1qW6ZSpUr69NNPbben1Jel5TMm8X6dOHFCLVu2lL+/vwIDA/XGG28oPj4+1ccotX4gvZ/B33//vapVqyYfHx998cUXKW7z3XffVb58+TRt2jSHO7bCwsL09NNPp7j87t271a1bNz344IPy9vZWoUKF1KNHD50/f95uvsuXL+vVV1+19S5BQUF68skntX37dts8Bw4c0LPPPqtChQrJ29tbxYoVU4cOHXTp0iW7+5fYF6XWc6Z0jqY7jZe09NLdunXThAkTJMnua6KJHJ2jKT3978aNGxUREaHAwED5+fmpVatWtkAtLTp16qSdO3dq3759tmmnTp3S2rVrUzwy7cyZM3r++edVsGBBeXt7KzQ0VDNnzkw238WLF9WtWzflzp1befLkUXh4uC5evOhwnfv27VObNm2UL18+eXt7q1q1alqyZMkd60/LOADuhK/OIcuaNWuWWrduLU9PT3Xs2FETJ07UL7/8ourVq9vmuXLliurWrau9e/eqR48eqlKlis6dO6clS5bo77//VoECBRQfH6+nn35aUVFR6tChg/r376/Lly9r9erV+u2331SyZMl013bz5k2FhYWpTp06+vjjj22HoM+fP1/Xrl1Tr169lD9/fm3dulXjx4/X33//rfnz59uW3717t+rWrSsPDw+9+OKLCgkJ0aFDh/Tf//5XI0aM0OOPP67g4GDNmjVLrVq1Sva4lCxZUrVq1XJYW+vWrZUnTx699tpr6tixo5o2bSp/f39J0u+//666desqICBAb775pjw8PPTFF1/o8ccf1w8//JDsXFi9e/dWYGCghgwZkupezsQPrS5duqT7sUz06aefqkWLFurcubNu3LihuXPnqm3btlq6dKlt78/vv/+up59+Wg8//LCGDx8uLy8vHTx4UBs3brStZ8qUKXrllVfUpk0b9e/fX//++692796tLVu2pPjh/vXXX2vy5MnaunWrvvzyS0nSY4895nDetIy5mJgYffnll+rYsaN69uypy5cva+rUqQoLC9PWrVtVuXJlBQYGauLEierVq5datWql1q1bS5IefvjhFB+jF154QTNnzlSbNm30+uuva8uWLRo5cqT27t2bLKg5ePCg2rRpo+eff17h4eGaNm2aunXrpqpVq+qhhx5K03PSqVMn9e/fX1euXJG/v79u3ryp+fPnKyIiwuHX5mbMmKHu3burevXqGjlypE6fPq1PP/1UGzdu1I4dO2x7O1etWqVnn31WFSpU0MiRI3X+/Hl1797dYZj50ksv2db7yiuv6MiRI/rss8+0Y8cObdy4McWjze5mHABAdpa4cy1//vy2aSn1M2l9750xY4Z69Oihhx56SAMHDlSePHm0Y8cOrVy5MsX32tWrV6tjx45q2LChRo0aJUnau3evNm7cqP79+6dYf1o/YyQpPj5eYWFhqlmzpj7++GOtWbNGo0ePVsmSJdWrV68Ut5FaP5Cez+D9+/erY8eOeumll9SzZ0+VLVvW4fYOHDigffv2qUePHsqVK1eKdaVm9erVOnz4sLp3765ChQrp999/1+TJk/X777/r559/tgUwL7/8shYsWKC+ffuqQoUKOn/+vDZs2KC9e/eqSpUqunHjhsLCwhQbG6t+/fqpUKFCOnHihJYuXaqLFy8qd+7cybadWs/pSFrGS1p66ZdeekknT57U6tWr9fXXX9/xMUpv/9uvXz/lzZtXkZGROnr0qMaOHau+fftq3rx5aXpO6tWrp2LFimn27NkaPny4JGnevHny9/d3eETT9evX9fjjj+vgwYPq27evSpQoofnz56tbt266ePGi7XVhjNEzzzyjDRs26OWXX1b58uX17bffKjw83OF9rl27tooWLaq3335bfn5++s9//qOWLVtq4cKFyf6+SHQ34wBwyABZ0K+//mokmdWrVxtjjElISDDFihUz/fv3t5tvyJAhRpJZtGhRsnUkJCQYY4yZNm2akWTGjBmT4jzr1q0zksy6devsbj9y5IiRZKZPn26bFh4ebiSZt99+O9n6rl27lmzayJEjjYuLi/nrr79s0+rVq2dy5cplNy1pPcYYM3DgQOPl5WUuXrxom3bmzBnj7u5uIiMjk23HUd0fffSR3fSWLVsaT09Pc+jQIdu0kydPmly5cpl69erZpk2fPt1IMnXq1DE3b95MdVvGGPPII4+Y3Llz33G+ROHh4aZ48eJ2025/7G7cuGEqVqxoGjRoYJv2ySefGEnm7NmzKa77mWeeMQ899FCq20+8f0eOHLGryc/PL9m8xYsXN+Hh4bbf0zLmbt68aWJjY+1u++eff0zBggVNjx49bNPOnj1rJDl8PiMjI03St+idO3caSeaFF16wm++NN94wkszatWvtapZkfvzxR9u0M2fOGC8vL/P6668n29btJJk+ffqYCxcuGE9PT/P1118bY4xZtmyZcXFxMUePHrXVl/hc3LhxwwQFBZmKFSua69ev29a1dOlSI8kMGTLENq1y5cqmcOHCdmN71apVRpLduPjpp5+MJDNr1iy7+lauXJlsev369U39+vVtv6dlHABAdpT4GbdmzRpz9uxZc/z4cTN37lyTP39+4+PjY/7++29jTMr9TFrfey9evGhy5cplatasafe+b4x9P3P7Z37//v1NQEBAqv3F7X1Zej5jEu/X8OHD7db5yCOPmKpVq6a4zaTL394P3M1n8MqVK++4re+++85IMp988skd5zXGcV/qqPecM2dOsj4gd+7cpk+fPimue8eOHUaSmT9/fqo13N4XpdRz3t5rpXW8pLWX7tOnj12flNTtvVV6+99GjRrZ1fTaa68ZNzc3u77FkaS90RtvvGFKlSplu6169eqme/futvqSPhdjx441ksw333xjm3bjxg1Tq1Yt4+/vb2JiYowxxixevNhIMh9++KFtvps3b5q6desmGxcNGzY0lSpVMv/++69tWkJCgnnsscdM6dKlbdNuf62ldRwAd8JX55AlzZo1SwULFtQTTzwh6dYhsO3bt9fcuXPtDnteuHChQkNDHabyiXtwFi5cqAIFCqhfv34pznM3HO0R8/Hxsf189epVnTt3To899piMMdqxY4ekW99l//HHH9WjRw898MADKdbTtWtXxcbG2n19bN68ebp586aee+65dNcbHx+vVatWqWXLlnrwwQdt0wsXLqxOnTppw4YNiomJsVumZ8+ecnNzu+O6Y2Ji7npPXKKkj90///yjS5cuqW7dunaHdCfurfzuu+9SPLFonjx59Pfff+uXX365p3pSkpYx5+bmZju3Q0JCgi5cuKCbN2+qWrVqdvcnPZYvXy5JioiIsJv++uuvS5KWLVtmN71ChQqqW7eu7ffAwECVLVtWhw8fTvM28+bNq6eeesp2noHZs2frsccesx0mn9Svv/6qM2fOqHfv3nbnlmrWrJnKlStnqy86Olo7d+5UeHi43V6xJ598UhUqVLBb5/z585U7d249+eSTOnfunO1f1apV5e/vb/dVxNtl9DgAgKyuUaNGCgwMVHBwsDp06CB/f399++23Klq0qN18t/czaX3vXb16tS5fvqy333472TkFU+uv8uTJo6tXr2r16tVpvi9p/YxJ6uWXX7b7vW7duun6DEwqvZ/BJUqUUFhY2B3Xm9h33UsPlbR/+vfff3Xu3Dk9+uijkpSsh9qyZUuKVwFO/Ez+/vvvde3atbuuJyVpHS9p6aXT42763xdffNGuprp16yo+Pl5//fVXmrfbqVMnHTx4UL/88ovt/5SO8lu+fLkKFSqkjh072qZ5eHjolVde0ZUrV/TDDz/Y5nN3d7d7zbq5uSX7G+fChQtau3at2rVrp8uXL9tew+fPn1dYWJgOHDjg8LQGUsaPA+QcBE3IcuLj4zV37lw98cQTOnLkiA4ePKiDBw+qZs2aOn36tKKiomzzHjp0KMVzxSSdp2zZspaeFNDd3d3h13yOHTumbt26KV++fLZzAtSvX1+SbN9rTmxy7lR3uXLlVL16dbtzU82aNUuPPvroXV197+zZs7p27ZrDw7fLly+vhISEZJdiLVGiRJrWHRAQoMuXL6e7pqSWLl2qRx99VN7e3sqXL5/tq2VJvw/evn171a5dWy+88IIKFiyoDh066D//+Y9d6PTWW2/J399fNWrUUOnSpdWnTx+7r9bdq7SMOUmaOXOmHn74YXl7eyt//vwKDAzUsmXL7vr77X/99ZdcXV2TPfeFChVSnjx5kjU/t4eY0q3gKC3nNkqqU6dOWr16tY4dO6bFixen2CQlbt/R+CpXrpzt9sT/S5cunWy+25c9cOCALl26pKCgIAUGBtr9u3Llis6cOZNi3Rk9DgAgq5swYYJWr16tdevW6Y8//tDhw4eThR+O+pm0vvcmfhUvLZ+JSfXu3VtlypRRkyZNVKxYMfXo0UMrV65MdZm0fsYk8vb2tp0HMdHdfAYm3X56PoPT0z9Juqce6sKFC+rfv78KFiwoHx8fBQYG2raftOf48MMP9dtvvyk4OFg1atTQ0KFD7YK3EiVKKCIiQl9++aUKFCigsLAwTZgwwbLz8qR1vKSll06Pu+l/b++h8ubNK0npGj+PPPKIypUrp9mzZ2vWrFkqVKiQ7Txpt/vrr79UunTpZCe/L1++vO32xP8LFy6c7OuJt9+3gwcPyhijd999N9lrODIyUpJS7KEyehwg5+AcTchy1q5dq+joaM2dO1dz585NdvusWbPUuHFjS7eZ0p63lE4a6eXllezDID4+Xk8++aQuXLigt956S+XKlZOfn59OnDihbt26pfvSvtKto5r69++vv//+W7Gxsfr555/12WefpXs9dyvpXqXUlCtXTjt27NDx48cVHByc7u389NNPatGiherVq6fPP/9chQsXloeHh6ZPn253gkgfHx/9+OOPWrdunZYtW6aVK1dq3rx5atCggVatWiU3NzeVL19e+/fv19KlS7Vy5UotXLhQn3/+uYYMGaJhw4alu7a78c0336hbt25q2bKlBgwYoKCgILm5uWnkyJG2RutupfUovJSORDPGpGt7LVq0kJeXl8LDwxUbG6t27dqla/l7kZCQoKCgoBQvBHD7HxFJZYVxAADOVKNGDVWrVi3VeRz1M/fy3psWQUFB2rlzp77//nutWLFCK1as0PTp09W1a1eHJz++G2k5GvtupPUzOD39kyTt2bPnrmtq166dNm3apAEDBqhy5cry9/dXQkKCnnrqKbves127dqpbt66+/fZbrVq1Sh999JFGjRqlRYsWqUmTJpKk0aNHq1u3bvruu++0atUqvfLKKxo5cqR+/vnnVC8KY5WM6KXvhlU9VKdOnTRx4kTlypVL7du3z7SrKCY+Tm+88UaKR9alttPa2eMA2QNBE7KcWbNmKSgoyHY1iaQWLVqkb7/9VpMmTZKPj49Kliyp3377LdX1lSxZUlu2bFFcXFyKJw5O3FNx+1Ub0nOI7J49e/Tnn39q5syZ6tq1q2367YeGJx62e6e6JalDhw6KiIjQnDlzdP36dXl4eKh9+/ZprimpwMBA+fr6av/+/clu27dvn1xdXe8qJJKk5s2ba86cOfrmm280cODAdC+/cOFCeXt76/vvv7e7BPL06dOTzevq6qqGDRuqYcOGGjNmjD744AMNGjRI69atU6NGjSRJfn5+at++vdq3b68bN26odevWGjFihAYOHJjscO30SsuYW7BggR588EEtWrTIrilN3IuUKD1f3SxevLgSEhJ04MAB2x4uSTp9+rQuXrzo8OtsVvDx8VHL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ufrPf/6jpk2bOrsUAACADJHuoGn79u2aPn265syZI1dXV3Xt2lWffPKJypUrZ5unVatWql69uqWFAgAA3O88PT1VqlQpZ5cBAACQYdL91bnq1avrwIEDmjhxok6cOKGPP/7YLmSSpBIlSqhDhw6WFQkAAJAdvP766/r00085xQAAAMi20n1E0+HDh1W8ePFU5/Hz89P06dPvuigAAIDsaMOGDVq3bp1WrFihhx56SB4eHna3L1q0yEmVAQAAWCPdQdOZM2d06tQp1axZ0276li1b5ObmpmrVqllWHAAAQHaSJ08etWrVytllAAAAZJh0B019+vTRm2++mSxoOnHihEaNGqUtW7ZYVhwAAEB2whHfAAAgu0t30PTHH3+oSpUqyaY/8sgj+uOPPywpCgAAIDs7e/as9u/fL0kqW7asAgMDnVwRAACANdJ9MnAvLy+dPn062fTo6Gi5u6c7twIAAMgxrl69qh49eqhw4cKqV6+e6tWrpyJFiuj555/XtWvXnF0eAADAPUt30NS4cWMNHDhQly5dsk27ePGi3nnnHT355JOWFgcAAJCdRERE6IcfftB///tfXbx4URcvXtR3332nH374Qa+//rqzywMAALhn6T4E6eOPP1a9evVUvHhxPfLII5KknTt3qmDBgvr6668tLxAAACC7WLhwoRYsWKDHH3/cNq1p06by8fFRu3btNHHiROcVBwAAYIF0B01FixbV7t27NWvWLO3atUs+Pj7q3r27OnbsmOwSvQAAAPifa9euqWDBgsmmBwUF8dU5AACQLdzVSZX8/Pz04osvWl0LAABAtlarVi1FRkbqq6++kre3tyTp+vXrGjZsmGrVquXk6gAAAO7dXZ+9+48//tCxY8d048YNu+ktWrS456IAAACyo08//VRhYWEqVqyYQkNDJUm7du2St7e3vv/+eydXBwAAcO/SHTQdPnxYrVq10p49e+Ti4iJjjCTJxcVFkhQfH29thQAAANlExYoVdeDAAc2aNUv79u2TJHXs2FGdO3eWj4+Pk6sDAAC4d+kOmvr3768SJUooKipKJUqU0NatW3X+/Hm9/vrr+vjjjzOiRgAAgGzD19dXPXv2dHYZAAAAGSLdQdPmzZu1du1aFShQQK6urnJ1dVWdOnU0cuRIvfLKK9qxY0dG1AkAAHBfWrJkiZo0aSIPDw8tWbIk1Xk5BQEA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d6+io6N148YN7du3T25ubrbXrCQdP37c7jWbOP4iIiIUFRWl9u3bJzsE9sUXX5R067W0adMm9ezZM1mD6OPjY/uKxJkzZ9S0aVO1a9dOuXPn1sMPP6ytW7dq6dKl6dqbndbnSJJiY2N16tQpnTp1Snv37lW/fv1se2yltI33AQMGaNSoUZo3b57279+vt99+Wzt37lT//v0lpf5ekVhvVFSUTp06le6vGCQqV66cGjVqpBdffFFbt27Vjh079OKLL8rHxyfV97oRI0YoODhYNWvW1FdffaU//vhDBw4c0LRp0/TII4/Yjk5IqlSpUoqLi9P48eN1+PBhff3115o0aZLdPKmNxSFDhui7777TwYMH9fvvv2vp0qUpjtO0GDhwoH755Rf17t1bu3fv1r59+zRx4kSdO3dOefPmVf78+TV58mQdPHhQa9euVUREhN3yQUFB8vHxsZ3UNumRoon8/PzUq1cvDRgwQCtXrtQff/yhnj176tq1a3r++efvunY4B/1Tzu6fpFs7Odzc3Oih6KHS3UN9/vnnthBh7dq12rt3r/bv369NmzYpISHB9hWtyMhISdKcOXPsXrelS5fWvn375O7urmHDhqlv377avHmz3Xjr37+/Zs+eLUmaPHmyevTo4TBgy5Mnj5555hm99957evLJJ9WhQwc1atRIQUFBKlKkiEaOHKldu3al+Hzejv6J/um+7p/SfDYnpCrx5G+3/3v++eeNMXd3ed4aNWqYt99+2zZP0pOXffvtt6ZmzZomICDA+Pn5mUcffdTuhF2bN282Dz/8sO1EeMY4vrzuwoULTeXKlY2np6cpUKCAad26dYr30dHyiduSZLZs2WKMMWblypXmscceMz4+PiYgIMDUqFHDTJ482TZ/4uV5PT09Tbly5cx///tfI8msXLnSGJPyicyMMWbWrFm2evPmzWvq1atnOznh5MmTTeXKlY2fn58JCAgwDRs2NNu3b0/T45Xey/OGhoaagIAAu9o++eQTkydPHhMYGGiuXLlizp8/b5555hnj7+9vgoKCzODBg03Xrl3tTup3+yWYjTHmmWeeMeHh4bbf9+/fb+rUqWM8PT1NmTJlzMqVK5OdbC+tl+ZNytG273SCPCsuzXv7No25dfnhVq1amTx58hgfHx9Trlw58+qrr5qEhATzxx9/mLCwMNslOMuUKWPGjx9vW/bMmTPmySeftJ04O6VLvxpz63Kpffr0McWLFzeenp6maNGipkWLFnbL3P7YDhgwwOTPn9/4+/ub9u3bm08++cT2OoiNjTUdOnSwXfa5SJEipm/fvrYT5fXt29eULFnSeHl5mcDAQNOlSxdz7tw5Y0zyEwD+888/RpJp1arV/2PvvqOjKte3j1+TNmmE0BICREIvAkGaQqiCoCCC/gREkQDSQSmKwlEJKMixgiCKYAE7h6JyBJF+lHLo3dCrELq0AElInvcP3szJkASSsJMJyfezVhbJnr1n3zPzzMzNtZspU6aM8fT0NN7e3sbd3d28++67JjY21hhz4z0ryXh4eDi9Z69du2YaN25sbDabkWSCg4PN//3f/zm9lxISEswDDzzgmKdq1aqma9euTicDb9KkienTp4/j0rze3t6mXLlyplSpUsbT09OEhISYWrVqGX9/f2PM/z4XfvzxR8dnTcrfM/Ma3fw5WqBAAVO3bt1UJ4jNyOV5R40aZUqWLGk8PT1TXZ73Vp8Vxty4bHn58uWNh4fHbS/Pm1LyyUCTHT9+3DzyyCPGbreb0qVLm++++84EBQWZKVOmpPn4k50/f94MHz7cVKhQwXh5eZng4GDTokUL8+OPPzpOwHnze/WDDz4wISEhxsfHx7Rq1cp89dVXTuPrVmPxzTffNFWqVDE+Pj6mcOHCpl27dubAgQPGmKydzNKYG58FDRo0MHa73QQGBppWrVo5bl+8eLGpUqWKsdvtpkaNGmbFihWp3nfTpk0zoaGhxs3NLd3L8169etU8//zzpmjRore8PG/KujZv3mwkmYMHD97yNUDOoX/KX/1TVFSUKVSokNN7efz48aZ06dJm3Lhx9FD0UFnqoZJPIB0SEmI8PT2Nv7+/KVu2rPH29nb0T8n1hYWFOb1vr127Zrp162Z8fX2Nm5ubcXNzMyVKlDBlypRxvJ8SEhLMoEGDjN1ud/RQ5cqVS3Uy8EGDBplz586ZZ5991gQEBBgPDw/j4+Pj6J8ef/xx88Ybbzi+R5Ofi+S+if7pBvqnvNE/2Yy5g7NnIdvExsaqZMmSev/99/P81tlVq1apYcOG2rdvn+PkwgCQ1/z1118KDQ11nHgSgPXonwAgb6F/ujt5uLoA3LB582bt2rVL9erV04ULF/TGG29Iktq1a+fiyqz3448/yt/fXxUqVNC+ffs0aNAgRURE0CQByFOWLVumy5cvq3r16oqJidHLL7+ssLAwNW7c2NWlAXkG/RP9E4C8hf4pbyBoykXee+897d69W15eXqpdu7b++OMPFS1a1NVlWe7SpUt65ZVXdOTIERUtWlQtWrTQ+++/7+qyAMBSCQkJ+sc//qEDBw6oQIECatCggb799ttUV1sBcGfonwAg76B/yhs4dA4AAAAAAACW4KpzAAAAAAAAsARBEwAAAAAAACxB0AQAAAAAAABLEDQBAAAAAADAEgRNAAAAAAAAsARBEwAAAAAAACxB0AQAAAAAAABLEDQBAAAAAADAEgRNAAAAAAAAsARBEwAAAAAAACxB0AQAAAAAAABLEDQBAAAAAADAEgRNAAAAAAAAsARBEwAAAAAAACxB0ATkIJvNplGjRjn+nj59umw2mw4dOnTbZRcuXKiaNWvK29tbNptN58+fz7Y6MyssLEzdunVz2fq7deumsLAwp2mXL19Wz549Vbx4cdlsNg0ePFiHDh2SzWbT9OnTc7zGpk2bqmnTpjm+Xle6k3Fx83sFAIDstH79ejVo0EB+fn6y2WzasmWLq0tycHUPMWrUKNlsNqdp169f18svv6zQ0FC5ubmpffv2klz3/Z1WL5jX3cm4cHXvjryPoAl5RnJok/zj4eGhkiVLqlu3bjp27Jiry7sjZ8+eVceOHeXj46PJkyfr66+/lp+fX7avd//+/erTp4/Kli0rb29vBQQEKCIiQh9++KGuXr2a7eu/E2+99ZamT5+ufv366euvv9azzz6b7ev8888/NWrUqAwFhzllxYoVjvfEN998k+Y8ERERstlsqlatWg5XBwDIDjf3RCl/hg8f7phv0aJFeu6551StWjW5u7vnu/+oJ0tISFCHDh107tw5jR8/Xl9//bVKly6d7es9efKkXnrpJVWuXFm+vr7y8/NT7dq1NWbMmFy1QTEtX3zxhd599109+eSTmjFjhoYMGZLt6zx+/LhGjRqVq0LA5I2YNptNY8aMSXOeZ555RjabTf7+/jlcHeA6Hq4uALDaG2+8oTJlyujatWv673//q+nTp2vlypXasWOHvL29XV1elqxfv16XLl3Sm2++qRYtWuTIOufPn68OHTrIbrera9euqlatmuLj47Vy5UoNGzZMO3fu1NSpU3OkltuZNm2akpKSnKYtW7ZMDzzwgKKiohzTjDG6evWqPD09s6WOP//8U6NHj1bTpk1TNeuLFi3KlnVmlLe3t7777jt16dLFafqhQ4e0evXqu/a9AQBIX3JPlFLKjQrfffedZs6cqVq1aqlEiRI5XV6usX//fh0+fFjTpk1Tz549c2Sd69evV+vWrXX58mV16dJFtWvXliRt2LBB//znP/X777+7vHdI9tprrzkFlNKNPqtkyZIaP3680/SrV6/KwyN7/ot5/PhxjR49WmFhYapZs6bTbWn1gjnJ29tb33//vV577TWn6bGxsfr555/ps5DvEDQhz3nkkUdUp04dSVLPnj1VtGhRvf3225o3b546duzo4uqy5tSpU5KkwMBAy+4zNjY23b2iDh48qKeeekqlS5fWsmXLFBIS4rhtwIAB2rdvn+bPn29ZLXcqreDo1KlTqlq1qtM0m83msi96Ly8vl6w3WevWrTVv3jydOXNGRYsWdUz/7rvvFBwcrAoVKujvv/92YYUAAKul7InS8tZbb2natGny9PTUo48+qh07duRgdda4VT+TUTndZ50/f16PP/643N3dtXnzZlWuXNnp9rFjx2ratGmW1XKnPDw8UoVHp06dSvP5clWflV0bETOqdevWmjt3rrZu3arw8HDH9J9//lnx8fF6+OGHtWzZMhdWCOQsDp1DnteoUSNJN7ZWpbRr1y49+eSTKly4sLy9vVWnTh3Nmzcv1fLnz5/XkCFDFBYWJrvdrlKlSqlr1646c+aMJCk+Pl4jR45U7dq1VbBgQfn5+alRo0Zavny5JfU3bdpUkZGRkqS6devKZrM5HVM9a9Ys1a5dWz4+PipatKi6dOmS6lDBbt26yd/fX/v371fr1q1VoEABPfPMM+mu85133tHly5f1+eefO4VMycqXL69Bgwalu/y5c+f00ksvqXr16vL391dAQIAeeeQRbd26NdW8kyZN0r333itfX18VKlRIderU0Xfffee4/dKlSxo8eLDj+Q8KCtJDDz2kTZs2OT2+5D2Ikg8VO3jwoObPn+/YnfnQoUPpnqNp165d6tixo4oVKyYfHx9VqlRJr776quP2w4cPq3///qpUqZJ8fHxUpEgRdejQwekQuenTp6tDhw6SpGbNmjnWu2LFCklpH0d/6tQpPffccwoODpa3t7fCw8M1Y8YMp3mSa37vvfc0depUlStXTna7XXXr1tX69evTfQ1u1q5dO9ntds2aNctp+nfffaeOHTvK3d091TLXr1/Xm2++6VhnWFiY/vGPfyguLs5pPmOMxowZo1KlSsnX11fNmjXTzp0706zj/PnzGjx4sEJDQ2W321W+fHm9/fbbt90KmZFxAADInBIlStzRf9Az+tm8du1atW7dWoUKFZKfn59q1KihDz/80GmeZcuWqVGjRvLz81NgYKDatWun6Ohop3mSzxX0559/6umnn1ahQoXUsGFDx+3ffPONoycqXLiwnnrqKR09evSWj6Fbt25q0qSJJKlDhw6y2WxO39dW1HWzTz/9VMeOHdMHH3yQKmSSpODg4FR7xqSUmd7zhx9+UO3atVWgQAEFBASoevXqTs99QkKCRo8erQoVKsjb21tFihRRw4YNtXjx4lSPT/pfX7J8+XLt3LkzVb+T1jmajh07pueee04lSpSQ3W5XmTJl1K9fP8XHx0vKWN+4YsUK1a1bV5LUvXt3x3qTe7q0ztEUGxurF1980dFzVKpUSe+9956MMU7z2Ww2DRw4UD/99JOqVasmu92ue++9VwsXLkz3NbhZ/fr1VaZMGaceVpK+/fZbPfzwwypcuHCay3388ce69957ZbfbVaJECQ0YMCDNwyaTe0AfHx/Vq1dPf/zxR5r3FxcXp6ioKJUvX152u12hoaF6+eWXU/VuN8vIOAAygz2akOclhwGFChVyTNu5c6ciIiJUsmRJDR8+XH5+fvrXv/6l9u3ba86cOXr88ccl3TihdKNGjRQdHa0ePXqoVq1aOnPmjObNm6e//vpLRYsW1cWLF/XZZ5+pc+fO6tWrly5duqTPP/9crVq10rp161Lt2ptZr776qipVqqSpU6c6doEvV66cpBvhRvfu3VW3bl2NGzdOJ0+e1IcffqhVq1Zp8+bNTluarl+/rlatWqlhw4Z677335Ovrm+46//3vf6ts2bJq0KBBlmo+cOCAfvrpJ3Xo0EFlypTRyZMn9emnn6pJkyb6888/HbvnT5s2TS+88IKefPJJDRo0SNeuXdO2bdu0du1aPf3005Kkvn37avbs2Ro4cKCqVq2qs2fPauXKlYqOjlatWrVSrbtKlSr6+uuvNWTIEJUqVUovvviiJKlYsWI6ffp0qvm3bdumRo0aydPTU71791ZYWJj279+vf//73xo7dqykG7u3r169Wk899ZRKlSqlQ4cO6ZNPPlHTpk31559/ytfXV40bN9YLL7ygiRMn6h//+IeqVKniqCctV69eVdOmTbVv3z4NHDhQZcqU0axZs9StWzedP38+VZD33Xff6dKlS+rTp49sNpveeecdPfHEEzpw4ECG/pPg6+urdu3a6fvvv1e/fv0kSVu3btXOnTv12Wefadu2bamW6dmzp2bMmKEnn3xSL774otauXatx48YpOjpaP/74o2O+kSNHasyYMWrdurVat26tTZs2qWXLlo4GMtmVK1fUpEkTHTt2TH369NE999yj1atXa8SIEYqJidGECRPSrT+z4wAAIF24cMGxYSxZyr1a71RGPpsXL16sRx99VCEhIRo0aJCKFy+u6Oho/fLLL47vuiVLluiRRx5R2bJlNWrUKF29elWTJk1SRESENm3alCpA6NChgypUqKC33nrLERqMHTtWr7/+ujp27KiePXvq9OnTmjRpkho3bpyqJ0qpT58+KlmypN566y298MILqlu3roKDgy2rKy3z5s2Tj4+PnnzyySw868pw77l48WJ17txZzZs319tvvy1Jio6O1qpVqxzP/ahRozRu3Dj17NlT9erV08WLF7VhwwZt2rRJDz30UKp1FytWTF9//bXGjh2ry5cva9y4cZLS73eOHz+uevXq6fz58+rdu7cqV66sY8eOafbs2bpy5Yq8vLwy1DdWqVJFb7zxhkaOHKnevXs7NiSn16saY/TYY49p+fLleu6551SzZk399ttvGjZsmI4dO5bqkL+VK1dq7ty56t+/vwoUKKCJEyfq//7v/3TkyBEVKVIkQ69L586d9c033+if//ynbDabzpw5o0WLFunrr79OM7QaNWqURo8erRYtWqhfv37avXu3PvnkE61fv16rVq1y9Heff/65+vTpowYNGmjw4ME6cOCAHnvsMRUuXFihoaGO+0tKStJjjz2mlStXqnfv3qpSpYq2b9+u8ePHa8+ePfrpp5/SrT2z4wC4LQPkEV9++aWRZJYsWWJOnz5tjh49ambPnm2KFStm7Ha7OXr0qGPe5s2bm+rVq5tr1645piUlJZkGDRqYChUqOKaNHDnSSDJz585Ntb6kpCRjjDHXr183cXFxTrf9/fffJjg42PTo0cNpuiQTFRWVquaDBw9m6LGtX7/eMS0+Pt4EBQWZatWqmatXrzqm//LLL0aSGTlypGNaZGSkkWSGDx9+y/UYY8yFCxeMJNOuXbvb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SwMAALBEloKmt99+W40bN1alSpXUqFEjSdIff/yhixcvatmyZZYWCAAAkNdUqFBBFSpUUGJiorZv366AgAAVKlTI1WUBAADcsSydo6lq1aratm2bOnbsqFOnTunSpUvq2rWrdu3apWrVqlldIwAAQJ4wePBgff7555Ju7A3epEkT1apVS6GhoVqxYoVriwMAALBAlvZokqQSJUpwLgEAAIBMmD17trp06SJJ+ve//60DBw5o165d+vrrr/Xqq69q1apVLq4QAADgzmRpjybpxqFyXbp0UYMGDXTs2DFJ0tdff62VK1daVhwAAEBecubMGRUvXlyStGDBAnXs2FEVK1ZUjx49tH37dhdXBwAAcOeyFDTNmTNHrVq1ko+PjzZt2qS4uDhJN646x15OAAAAaQsODtaff/6pxMRELVy4UA899JAk6cqVK44LrAAAANzNshQ0jRkzRlOmTNG0adPk6enpmB4REaFNmzZZVhwAAEBe0r17d3Xs2FHVqlWTzWZTixYtJElr165V5cqVXVwdAADAncvSOZp2796txo0bp5pesGBBnT9//k5rAgAAyJNGjRqlatWq6ejRo+rQoYPsdrskyd3dXcOHD3dxdQAAAHcuS0FT8eLFtW/fPoWFhTlNX7lypcqWLWtFXQAAAHnSk08+KUn666+/lJSUJDc3N0VGRrq4KgAAAGtk6dC5Xr16adCgQVq7dq1sNpuOHz+ub7/9Vi+++KL69etndY0AAAB5TtWqVXXo0CFXlwEAAGCpLO3RNHz4cCUlJal58+a6cuWKGjduLLvdrmHDhqlnz55W1wgAAJDnGGNcXQIAAIDlsrRHk81m06uvvqpz585px44d+u9//6vTp0+rYMGCKlOmjNU1AgAAAAAA4C6QqaApLi5OI0aMUJ06dRQREaEFCxaoatWq2rlzpypVqqQPP/xQQ4YMya5aAQAA8ox//OMfKly4sKvLAAAAsFSmDp0bOXKkPv30U7Vo0UKrV69Whw4d1L17d/33v//V+++/rw4dOsjd3T27agUAAMgzRowY4eoSAAAALJepPZpmzZqlr776SrNnz9aiRYuUmJio69eva+vWrXrqqacImQAAALLg6NGj6tGjh6vLAAAAuGOZCpr++usv1a5dW5JUrVo12e12DRkyRDabLVuKAwAAyA/OnTunGTNmuLoMAACAO5apQ+cSExPl5eX1v4U9POTv7295UQAAAHnJvHnzbnn7gQMHcqgSAACA7JWpoMkYo27duslut0uSrl27pr59+8rPz89pvrlz51pXIQAAwF2uffv2stlsMsakOw97iAMAgLwgU4fORUZGKigoSAULFlTBggXVpUsXlShRwvF38g8AAAD+JyQkRHPnzlVSUlKaP5s2bXJ1iQAAAJbI1B5NX375ZXbVAQAAkGfVrl1bGzduVLt27dK8/XZ7OwEAANwtMhU0AQAAIPOGDRum2NjYdG8vX768li9fnoMVAQAAZA+CJgAAgGxWsmRJlSlTJt3b/fz81KRJkxysCAAAIHtk6hxNAAAAyLwKFSro9OnTjr87deqkkydPurAiAACA7EHQBAAAkM1uPv/SggULbnkoHQAAwN2KoAkAAAAAAACWIGgCAADIZjabTTabLdU0AACAvIaTgQMAAGQzY4y6desmu90uSbp27Zr69u0rPz8/p/nmzp3rivIAAAAsQ9AEAACQzSIjI53+7tKli4sqAQAAyF4ETQAAANnsyy+/dHUJAAAAOYJzNAEAAAAAAMASBE0AAAAAAACwBEETAAAAAAAALEHQBAAAAAAAAEsQNAEAAAAAAMASBE0AAAAAAACwBEETAAAAAAAALEHQBAAAAAAAAEsQNAEAAAAAAMASBE0AAAAAAACwBEETAAAAAAAALEHQBAAAAAAAAEsQNAEAAAAAAMASBE0AAAAAAACwBEETAAAAAAAALEHQBAAAAAAAAEsQNAEAAAAAAMASBE0AAAAAAACwBEETAAAAAAAALEHQBAAAAAAAAEsQNAEAAAAAAMASBE0AAAAAAACwBEETAAAAAAAALEHQBAAAAAAAAEsQNAEAAAAAAMASBE0AAAAAAACwBEETAAAAAAAALJErgqbJkycrLCxM3t7euv/++7Vu3boMLffDDz/IZrOpffv22VsgAABALkP/BAAAciOXB00zZ87U0KFDFRUVpU2bNik8PFytWrXSqVOnbrncoUOH9NJLL6lRo0Y5VCkAAEDuQP8EAAByK5cHTR988IF69eql7t27q2rVqpoyZYp8fX31xRdfpLtMYmKinnnmGY0ePVply5bNwWoBAABcj/4JAADkVh6uXHl8fLw2btyoESNGOKa5ubmpRYsWWrNmTbrLvfHGGwoKCtJzzz2nP/7445briIuLU1xcnOPvixcvSpIS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H1O/fn2za9eudJ9/5Dz6p/zVP0VFRZlChQqZWrVqOfqnTp06mccee8zcd999jvnooeihMtpD1a1b95Y9VMq9RSSZe+65x7i5uRlJplKlSub69eumR48epmjRosZmsxmbzWYKFChgOnfu7Oih9u3bl2od5cqVM+3atXN83iT/e+7cOfPss8+aggULGg8PD2O3242Pj4+pV6+eU11Dhw41bm5uxm63Gz8/P+Pr60v/9P/RP+WN/olzNOWAY8eOqXXr1qpbt662bt2qTz75RJ9//rnGjBnjmGfo0KFatWqV5s2bp8WLF+uPP/7Qpk2b0r3POXPmaPz48fr000+1d+9e/fTTT6pevbokae7cuSpVqpTeeOMNxcTEKCYmJs37mD9/vh5//HG1bt1amzdv1tKlS1WvXr0MP65Tp07pxx9/lLu7u9zd3SVJf/zxh7p27apBgwbpzz//1Keffqrp06dr7NixkqTExES1b99evr6+Wrt2raZOnapXX301zfsfPny4Bg0apOjoaLVq1UrffvutRo4cqbFjxyo6OlpvvfWWXn/9dc2YMUOSNHHiRM2bN0//+te/tHv3bn377bcKCwu77fN1s6SkJLVr107nzp3Tf/7zHy1evFgHDhxQp06dnOaLjY3VTz/9pF9++UUTJ07U8ePHdfr0acft165dU+3atTV//nzt2LFDvXv31rPPPqt169Y53c+MGTPk5+entWvX6p133tEbb7yhxYsXO2p54okn5OXlpbVr12rKlCl65ZVXUtXRqlUrFSpUSOvXr9esWbO0ZMkSDRw40Gm+ZcuW6fjx4/r999/1wQcfKCoqSo8++qgKFSqktWvXqm/fvurTp4/++uuvdF/zW8nIOE9+vF5eXlq1apWmTJmi8+fP68EHH9R9992nDRs2aOHChTp58qQ6duwoSYqJiVHnzp3Vo0cPRUdHa8WKFXriiSdkjNFLL72kjh076uGHH3aM9QYNGqSq7dy5c1q4cKEGDBggPz+/VLffagtHgQIFNH36dP3555/68MMPNW3aNI0fP95x+zPPPKNSpUpp/fr12rhxo4YPH+7YOjZgwADFxcXp999/1/bt2/X222+nuVWnUqVKstlskm6M1bQeh81mc7xnpRtbJ1599VUNGTJEPXr0UFJSkgoWLKh33nlHK1as0Ouvv64tW7aoVatWkqTQ0FA9++yzkqRJkybpP//5j2rVqqUff/wxVT2LFy/Whg0bNG/ePD3yyCM6f/68PD09tXHjRnXo0EHvv/++YmNj9d5776l3797y8PDQrl27VK5cOf3+++86cuSIXnrpJUnK8GuUlsuXL+ubb75R+fLlVaRIEUkZG+8ffvih3n//fb333nvatm2bWrVqpccee0x79+6VdOvPivXr10uSvvzyS8XExDj+Tsvy5cu1f/9+LV++XDNmzND06dM1ffp0x+1du3bV8ePHtWLFCs2ZM0dTp07VqVOn0r2/pKQk/fDDD3rmmWdUokSJVLf7+/vLwyPtHZHd3Nw0ceJE7dy5UzNmzNCyZcv08ssvO26/1Vh8/fXX9eeff+rXX39VdHS0PvnkExUtWjTVOkJDQxUTE6OAgABNmDBBMTExqT4XJWnLli1q3ry5qlatqjVr1mjlypVq27atEhMTJd14DYcOHaoNGzZo6dKlcnNz0+OPP66kpCRJcnxGLlmyRDExMZo7d26aj/nll1/WnDlzNGPGDG3atEnly5dXq1atdO7cOaf5Xn31Vb3//vvasGGDPDw81KNHjzTvD7kP/VPe7J8uXbqkmJgY/fLLL/rll1+0ZMkSLV261GnvHHooeqiM9FDnzp3Thg0b9OKLL0pKu4dK7q/mz58vSTp79qzeeOMN/fLLL2rXrp2SkpJUqlQp9evXT59//rnef/99JSQkaMOGDerWrZskadasWY51L1iwQE8//XS63+fdunXThg0b1KhRI917770KDw9XUFCQnnjiCT388MM6ceKErly5ooULF8rNzU01a9ZUsWLF1LhxY/qn/4/+KY/0T5mKpZCuW22lSD5WNGWiPnnyZOPv728SExPNxYsXjaenp5k1a5bj9vPnzxtfX990t8i9//77pmLFik7pb0pppb43b1GrX7++eeaZZzL8GJPPMZCcuuv/p6UvvPCCY57mzZs7ku1kX3/9tQkJCTHG3EhiPTw8TExMjOP29LbITZgwwel+ypUrl2pr1ptvvmnq169vjDHm+eefNw8++GCax7lm5vlatGiRcXd3N0eOHHHcvnPnTiPJkfaGh4c7ngu73e4470KFChXSff6MMaZNmzbmxRdfdPzdpEkT07BhQ6d56tata1555RVjjDG//fab8fDwcErnf/31V6fna+rUqaZQoUJOW5nmz59v3NzcHFsRIyMjTenSpU1iYqJjnkqVKplGjRo5/r5+/brx8/Mz33//fbr1R0ZGGnd3d+Pn5+f4efLJJ40xtx/nyY835RZLY268hi1btnSadvToUSPJ7N6922zcuNFIMocOHUq3ptsdv7527VojycydO/eW8xlz+/MLvPvuu6Z27dqOvwsUKGCmT5+e5rzVq1c3o0aNSvO2lFsx/vvf/6a5tcrf398xzl5++WXHe1aSGTx48G0fS4cOHYwkx5aZIkWKOG05SUhIMKVKlXLao6levXpGklm1apU5fPiwcXd3N9u3bzc+Pj7mX//6lzHGmKpVqxpJZt++fY7PhVGjRpng4GBjzI3XPfl3YzJ3joGU40uSCQkJMRs3bnTMk5HxXqJECTN27Fin+65bt67p37+/MebWnxXGpD0G0toiV7p0aXP9+nXHtA4dOphOnToZY27seSDJsWXWGGP27t1rJKW7Re7kyZNGkvnggw/SeYb+53Zb9mbNmmWKFCni+PtWY7Ft27ame/fuad6W1vH+BQsWdOwlYUzq81Z07tzZRERE3PYxJDt9+rSRZLZv357uOo1xHkeXL182np6e5ttvv3XcHh8fb0qUKGHeeecdp7pSnj9k/vz5RlKOnQsGt0f/dEN+6Z+ioqKMu7u747M+uYeSZGbPnp3uc2gMPRQ91P8kf74nvwe+/vprpx6qSJEijrH18ssvG2NuvG8z2j8NGDDAPPjgg44eKiQkxPTp08fxXZfcP928R1PyuZLmzJlj3N3dzbFjx8yZM2ccPVTz5s1NmzZtjCTz9ttvO3qp5L6J/on+KS/1T+zRlAOio6NVv359R6IuSREREbp8+bL++usvHThwQAkJCU5bwwoWLKhKlSqle58dOnTQ1atXVbZsWfXq1Us//vijrl+/nqm6klPTzChQoIC2bNmiDRs26P3331etWrUcW9skaevWrXrjjTccx+P6+/urV69eiomJ0ZUrV7R7926FhoY6HY+a3lbAOnXqOH6PjY3V/v379dxzzznd95gxY7R//35JN7YgbNmyRZUqVdILL7ygRYsWOZbPzPMVHR2t0NBQhYaGOqZVrVpVgYGBio6Odkzz8/PTli1btHbtWkVGRqpevXpO95mYmKg333xT1atXV+HCheXv76/ffvst1bHSNWrUcPo7JCTEkdon15Iyna9fv36qesPDw522MkVERCgpKUm7d+92TLv33nvl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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.linear_model import LinearRegression, LogisticRegression\n", + "from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier\n", + "from sklearn.ensemble import GradientBoostingRegressor, GradientBoostingClassifier\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "\n", + "# Загружаем набор данных\n", + "df = pd.read_csv(\"..//static//csv//Medical_insurance.csv\")\n", + "\n", + "# Определяем категориальные и числовые столбцы\n", + "categorical_cols = ['sex', 'smoker', 'region']\n", + "numerical_cols = ['age', 'bmi', 'children']\n", + "\n", + "# Создаем преобразователь для категориальных и числовых столбцов\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('cat', OneHotEncoder(), categorical_cols),\n", + " ('num', StandardScaler(), numerical_cols)\n", + " ])\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи регрессии\n", + "X_reg = df[categorical_cols + numerical_cols]\n", + "y_reg = df['charges']\n", + "\n", + "# Список моделей для задачи регрессии\n", + "models_reg = {\n", + " \"Linear Regression\": LinearRegression(),\n", + " \"Random Forest Regression\": RandomForestRegressor(),\n", + " \"Gradient Boosting Regression\": GradientBoostingRegressor()\n", + "}\n", + "\n", + "# Оценка смещения и дисперсии для задачи регрессии\n", + "mae_means = []\n", + "mae_stds = []\n", + "r2_means = []\n", + "r2_stds = []\n", + "\n", + "for name, model in models_reg.items():\n", + " pipeline = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('model', model)\n", + " ])\n", + " mae_scores = -cross_val_score(pipeline, X_reg, y_reg, cv=5, scoring='neg_mean_absolute_error')\n", + " r2_scores = cross_val_score(pipeline, X_reg, y_reg, cv=5, scoring='r2')\n", + " mae_means.append(mae_scores.mean())\n", + " mae_stds.append(mae_scores.std())\n", + " r2_means.append(r2_scores.mean())\n", + " r2_stds.append(r2_scores.std())\n", + "\n", + "# Визуализация результатов для задачи регрессии\n", + "fig, ax = plt.subplots(1, 2, figsize=(12, 6))\n", + "\n", + "ax[0].bar(models_reg.keys(), mae_means, yerr=mae_stds, align='center', alpha=0.5, ecolor='black', capsize=10)\n", + "ax[0].set_ylabel('MAE')\n", + "ax[0].set_title('Mean Absolute Error (MAE) for Regression Models')\n", + "ax[0].yaxis.grid(True)\n", + "\n", + "ax[1].bar(models_reg.keys(), r2_means, yerr=r2_stds, align='center', alpha=0.5, ecolor='black', capsize=10)\n", + "ax[1].set_ylabel('R²')\n", + "ax[1].set_title('R-squared (R²) for Regression Models')\n", + "ax[1].yaxis.grid(True)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "# Разделяем данные на признаки (X) и целевую переменную (y) для задачи классификации\n", + "X_class = df[categorical_cols + numerical_cols]\n", + "y_class = (df['charges'] > df['charges'].mean()).astype(int)\n", + "\n", + "# Список моделей для задачи классификации\n", + "models_class = {\n", + " \"Logistic Regression\": LogisticRegression(),\n", + " \"Random Forest Classification\": RandomForestClassifier(),\n", + " \"Gradient Boosting Classification\": GradientBoostingClassifier()\n", + "}\n", + "\n", + "# Оценка смещения и дисперсии для задачи классификации\n", + "accuracy_means = []\n", + "accuracy_stds = []\n", + "precision_means = []\n", + "precision_stds = []\n", + "recall_means = []\n", + "recall_stds = []\n", + "f1_means = []\n", + "f1_stds = []\n", + "\n", + "for name, model in models_class.items():\n", + " pipeline = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('model', model)\n", + " ])\n", + " accuracy_scores = cross_val_score(pipeline, X_class, y_class, cv=5, scoring='accuracy')\n", + " precision_scores = cross_val_score(pipeline, X_class, y_class, cv=5, scoring='precision')\n", + " recall_scores = cross_val_score(pipeline, X_class, y_class, cv=5, scoring='recall')\n", + " f1_scores = cross_val_score(pipeline, X_class, y_class, cv=5, scoring='f1')\n", + " accuracy_means.append(accuracy_scores.mean())\n", + " accuracy_stds.append(accuracy_scores.std())\n", + " precision_means.append(precision_scores.mean())\n", + " precision_stds.append(precision_scores.std())\n", + " recall_means.append(recall_scores.mean())\n", + " recall_stds.append(recall_scores.std())\n", + " f1_means.append(f1_scores.mean())\n", + " f1_stds.append(f1_scores.std())\n", + "\n", + "# Визуализация результатов для задачи классификации\n", + "fig, ax = plt.subplots(2, 2, figsize=(12, 12))\n", + "\n", + "ax[0, 0].bar(models_class.keys(), accuracy_means, yerr=accuracy_stds, align='center', alpha=0.5, ecolor='black', capsize=10)\n", + "ax[0, 0].set_ylabel('Accuracy')\n", + "ax[0, 0].set_title('Accuracy for Classification Models')\n", + "ax[0, 0].yaxis.grid(True)\n", + "\n", + "ax[0, 1].bar(models_class.keys(), precision_means, yerr=precision_stds, align='center', alpha=0.5, ecolor='black', capsize=10)\n", + "ax[0, 1].set_ylabel('Precision')\n", + "ax[0, 1].set_title('Precision for Classification Models')\n", + "ax[0, 1].yaxis.grid(True)\n", + "\n", + "ax[1, 0].bar(models_class.keys(), recall_means, yerr=recall_stds, align='center', alpha=0.5, ecolor='black', capsize=10)\n", + "ax[1, 0].set_ylabel('Recall')\n", + "ax[1, 0].set_title('Recall for Classification Models')\n", + "ax[1, 0].yaxis.grid(True)\n", + "\n", + "ax[1, 1].bar(models_class.keys(), f1_means, yerr=f1_stds, align='center', alpha=0.5, ecolor='black', capsize=10)\n", + "ax[1, 1].set_ylabel('F1-score')\n", + "ax[1, 1].set_title('F1-score for Classification Models')\n", + "ax[1, 1].yaxis.grid(True)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "aimenv", + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}