AIM-PIbd-31-Masenkin-M-S/lab_4/lab4.ipynb
2024-11-17 18:08:11 +04:00

2332 lines
297 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Датасет: [Tesla Insider Trading](https://www.kaggle.com/datasets/ilyaryabov/tesla-insider-trading).\n",
"\n",
"### Описание датасета:\n",
"Датасет представляет собой выборку операций с ценными бумагами компании Tesla, совершённых инсайдерами, и является частью более крупного проекта \"Insider Trading S&P500 Inside Info\". Данные охватывают транзакции с участием крупных акционеров и должностных лиц компании, включая такие операции, как покупка, продажа и опционы, начиная с 10 ноября 2021 года и до 27 июля 2022 года.\n",
"\n",
"---\n",
"\n",
"### Анализ сведений:\n",
"**Проблемная область:**\n",
"Проблемная область данного датасета касается анализа инсайдерских сделок в публичных компаниях, а также их влияния на ценообразование акций. Инсайдерские транзакции, совершаемые людьми с доступом к непубличной информации (такими как руководители, крупные акционеры или члены совета директоров), могут быть индикаторами будущих изменений стоимости акций. Исследование таких транзакций помогает понять, как информация внутри компании отражается в действиях ключевых участников, и может выявить паттерны поведения, которые влияют на рынки.\n",
"\n",
"**Актуальность:**\n",
"Анализ инсайдерских сделок становится особенно важным в условиях высокой волатильности рынка и неопределенности. Инвесторы, аналитики и компании используют такие данные, чтобы лучше понимать сигналы от крупных акционеров и должностных лиц. Действия инсайдеров, такие как покупки и продажи акций, нередко рассматриваются как индикаторы доверия к компании, что может оказывать значительное влияние на рыночные ожидания и прогнозы.\n",
"\n",
"**Объекты наблюдений:**\n",
"Объектами наблюдений в датасете являются инсайдеры компании Tesla — лица, имеющие значительное влияние на управление и информацию компании. Каждый объект характеризуется различными параметрами, включая должность, тип транзакции, количество акций и общую стоимость сделок.\n",
"\n",
"**Атрибуты объектов:**\n",
"- Insider Trading: ФИО лица, совершившего транзакцию.\n",
"- Relationship: Должность или статус данного лица в компании Tesla.\n",
"- Date: Дата завершения транзакции.\n",
"- Transaction: Тип транзакции.\n",
"- Cost: Цена одной акции на момент совершения транзакции.\n",
"- Shares: Количество акций, участвующих в транзакции.\n",
"- Value ($): Общая стоимость транзакции в долларах США.\n",
"- Shares Total: Общее количество акций, принадлежащих этому лицу после завершения данной транзакции.\n",
"- SEC Form 4: Дата записи транзакции в форме SEC Form 4, обязательной для отчётности о сделках инсайдеров.\n",
"\n",
"---\n",
"\n",
"### Бизнес-цели:\n",
"1. **Для решения задачи регрессии:**\n",
"Предсказать будущую стоимость акций компании Tesla на основе инсайдерских транзакций. Стоимость акций (\"Cost\") зависит от множества факторов, включая объём и тип транзакций, совершаемых инсайдерами. Если выявить зависимости между параметрами транзакций (количество акций, общий объём сделки, должность инсайдера) и стоимостью акций, это может помочь инвесторам принимать обоснованные решения о покупке или продаже.\n",
"2. **Для решения задачи классификации:**\n",
"Классифицировать тип инсайдерской транзакции (продажа акций или исполнение опционов) на основе характеристик сделки. Тип транзакции (\"Transaction\") может быть индикатором доверия инсайдера к текущей рыночной цене или будущей прибыльности компании. Модель, которая предсказывает тип транзакции, может помочь в оценке поведения инсайдеров и выявлении аномалий.\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Выгрузка данных из файла в DataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 379,
"metadata": {},
"outputs": [],
"source": [
"from typing import Any, Tuple\n",
"from math import ceil\n",
"\n",
"import pandas as pd\n",
"from pandas import DataFrame\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"df: DataFrame = pd.read_csv('..//static//csv//TSLA.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Краткая информация о DataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 380,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 156 entries, 0 to 155\n",
"Data columns (total 9 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Insider Trading 156 non-null object \n",
" 1 Relationship 156 non-null object \n",
" 2 Date 156 non-null object \n",
" 3 Transaction 156 non-null object \n",
" 4 Cost 156 non-null float64\n",
" 5 Shares 156 non-null object \n",
" 6 Value ($) 156 non-null object \n",
" 7 Shares Total 156 non-null object \n",
" 8 SEC Form 4 156 non-null object \n",
"dtypes: float64(1), object(8)\n",
"memory usage: 11.1+ KB\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>count</th>\n",
" <th>mean</th>\n",
" <th>std</th>\n",
" <th>min</th>\n",
" <th>25%</th>\n",
" <th>50%</th>\n",
" <th>75%</th>\n",
" <th>max</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Cost</th>\n",
" <td>156.0</td>\n",
" <td>478.785641</td>\n",
" <td>448.922903</td>\n",
" <td>0.0</td>\n",
" <td>50.5225</td>\n",
" <td>240.225</td>\n",
" <td>934.1075</td>\n",
" <td>1171.04</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean std min 25% 50% 75% max\n",
"Cost 156.0 478.785641 448.922903 0.0 50.5225 240.225 934.1075 1171.04"
]
},
"execution_count": 380,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Краткая информация о DataFrame\n",
"df.info()\n",
"\n",
"# Статистическое описание числовых столбцов\n",
"df.describe().transpose()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Предобработка данных:"
]
},
{
"cell_type": "code",
"execution_count": 381,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Выборка данных:\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Insider Trading</th>\n",
" <th>Relationship</th>\n",
" <th>Transaction</th>\n",
" <th>Cost</th>\n",
" <th>Shares</th>\n",
" <th>Value ($)</th>\n",
" <th>Shares Total</th>\n",
" <th>Year</th>\n",
" <th>Month</th>\n",
" <th>Day</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Kirkhorn Zachary</td>\n",
" <td>Chief Financial Officer</td>\n",
" <td>Sale</td>\n",
" <td>196.72</td>\n",
" <td>10455</td>\n",
" <td>2056775</td>\n",
" <td>203073</td>\n",
" <td>2022</td>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Taneja Vaibhav</td>\n",
" <td>Chief Accounting Officer</td>\n",
" <td>Sale</td>\n",
" <td>195.79</td>\n",
" <td>2466</td>\n",
" <td>482718</td>\n",
" <td>100458</td>\n",
" <td>2022</td>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Baglino Andrew D</td>\n",
" <td>SVP Powertrain and Energy Eng.</td>\n",
" <td>Sale</td>\n",
" <td>195.79</td>\n",
" <td>1298</td>\n",
" <td>254232</td>\n",
" <td>65547</td>\n",
" <td>2022</td>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Taneja Vaibhav</td>\n",
" <td>Chief Accounting Officer</td>\n",
" <td>Option Exercise</td>\n",
" <td>0.00</td>\n",
" <td>7138</td>\n",
" <td>0</td>\n",
" <td>102923</td>\n",
" <td>2022</td>\n",
" <td>3</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Baglino Andrew D</td>\n",
" <td>SVP Powertrain and Energy Eng.</td>\n",
" <td>Option Exercise</td>\n",
" <td>0.00</td>\n",
" <td>2586</td>\n",
" <td>0</td>\n",
" <td>66845</td>\n",
" <td>2022</td>\n",
" <td>3</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Kirkhorn Zachary</td>\n",
" <td>Chief Financial Officer</td>\n",
" <td>Option Exercise</td>\n",
" <td>0.00</td>\n",
" <td>16867</td>\n",
" <td>0</td>\n",
" <td>213528</td>\n",
" <td>2022</td>\n",
" <td>3</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Baglino Andrew D</td>\n",
" <td>SVP Powertrain and Energy Eng.</td>\n",
" <td>Option Exercise</td>\n",
" <td>20.91</td>\n",
" <td>10500</td>\n",
" <td>219555</td>\n",
" <td>74759</td>\n",
" <td>2022</td>\n",
" <td>2</td>\n",
" <td>27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Baglino Andrew D</td>\n",
" <td>SVP Powertrain and Energy Eng.</td>\n",
" <td>Sale</td>\n",
" <td>202.00</td>\n",
" <td>10500</td>\n",
" <td>2121000</td>\n",
" <td>64259</td>\n",
" <td>2022</td>\n",
" <td>2</td>\n",
" <td>27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Kirkhorn Zachary</td>\n",
" <td>Chief Financial Officer</td>\n",
" <td>Sale</td>\n",
" <td>193.00</td>\n",
" <td>3750</td>\n",
" <td>723750</td>\n",
" <td>196661</td>\n",
" <td>2022</td>\n",
" <td>2</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Baglino Andrew D</td>\n",
" <td>SVP Powertrain and Energy Eng.</td>\n",
" <td>Option Exercise</td>\n",
" <td>20.91</td>\n",
" <td>10500</td>\n",
" <td>219555</td>\n",
" <td>74759</td>\n",
" <td>2022</td>\n",
" <td>1</td>\n",
" <td>27</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Insider Trading Relationship Transaction Cost \\\n",
"0 Kirkhorn Zachary Chief Financial Officer Sale 196.72 \n",
"1 Taneja Vaibhav Chief Accounting Officer Sale 195.79 \n",
"2 Baglino Andrew D SVP Powertrain and Energy Eng. Sale 195.79 \n",
"3 Taneja Vaibhav Chief Accounting Officer Option Exercise 0.00 \n",
"4 Baglino Andrew D SVP Powertrain and Energy Eng. Option Exercise 0.00 \n",
"5 Kirkhorn Zachary Chief Financial Officer Option Exercise 0.00 \n",
"6 Baglino Andrew D SVP Powertrain and Energy Eng. Option Exercise 20.91 \n",
"7 Baglino Andrew D SVP Powertrain and Energy Eng. Sale 202.00 \n",
"8 Kirkhorn Zachary Chief Financial Officer Sale 193.00 \n",
"9 Baglino Andrew D SVP Powertrain and Energy Eng. Option Exercise 20.91 \n",
"\n",
" Shares Value ($) Shares Total Year Month Day \n",
"0 10455 2056775 203073 2022 3 6 \n",
"1 2466 482718 100458 2022 3 6 \n",
"2 1298 254232 65547 2022 3 6 \n",
"3 7138 0 102923 2022 3 5 \n",
"4 2586 0 66845 2022 3 5 \n",
"5 16867 0 213528 2022 3 5 \n",
"6 10500 219555 74759 2022 2 27 \n",
"7 10500 2121000 64259 2022 2 27 \n",
"8 3750 723750 196661 2022 2 6 \n",
"9 10500 219555 74759 2022 1 27 "
]
},
"execution_count": 381,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Преобразование типов данных\n",
"df['Insider Trading'] = df['Insider Trading'].astype('category') # Преобразование в категорию\n",
"df['Relationship'] = df['Relationship'].astype('category') # Преобразование в категорию\n",
"df['Transaction'] = df['Transaction'].astype('category') # Преобразование в категорию\n",
"df['Cost'] = pd.to_numeric(df['Cost'], errors='coerce') # Преобразование в float\n",
"df['Shares'] = pd.to_numeric(df['Shares'].str.replace(',', ''), errors='coerce') # Преобразование в float с удалением запятых\n",
"df['Value ($)'] = pd.to_numeric(df['Value ($)'].str.replace(',', ''), errors='coerce') # Преобразование в float с удалением запятых\n",
"df['Shares Total'] = pd.to_numeric(df['Shares Total'].str.replace(',', ''), errors='coerce') # Преобразование в float с удалением запятых\n",
"\n",
"df['Date'] = pd.to_datetime(df['Date'], errors='coerce') # Преобразование в datetime\n",
"df['Year'] = df['Date'].dt.year # Год\n",
"df['Month'] = df['Date'].dt.month # Месяц\n",
"df['Day'] = df['Date'].dt.day # День\n",
"df: DataFrame = df.drop(columns=['Date', 'SEC Form 4']) # Удаление столбцов с датами\n",
"\n",
"print('Выборка данных:')\n",
"df.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Бизнес-цель №1 (Задача регрессии).\n",
"\n",
"### Достижимый уровень качества модели:\n",
"**Основные метрики для регрессии:**\n",
"- **Средняя абсолютная ошибка (Mean Absolute Error, MAE)** показывает среднее абсолютное отклонение между предсказанными и фактическими значениями.\n",
"Легко интерпретируется, особенно в финансовых данных, где каждая ошибка в долларах имеет значение.\n",
"- **Среднеквадратичная ошибка (Mean Squared Error, MSE)** показывает, насколько отклоняются прогнозы модели от истинных значений в квадрате. Подходит для оценки общего качества модели.\n",
"- **Коэффициент детерминации (R²)** указывает, какую долю дисперсии зависимой переменной объясняет модель. R² варьируется от 0 до 1 (чем ближе к 1, тем лучше).\n",
"\n",
"---\n",
"\n",
"### Выбор ориентира:\n",
"В качестве базовой модели для оценки качества предсказаний выбрано использование среднего значения целевой переменной (Cost) на обучающей выборке. Это простой и интуитивно понятный метод, который служит минимальным ориентиром для сравнения с более сложными моделями. Базовая модель помогает установить начальный уровень ошибок (MAE, MSE) и показатель качества (R²), которые сложные модели должны улучшить, чтобы оправдать своё использование.\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Разбиение данных:"
]
},
{
"cell_type": "code",
"execution_count": 382,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Baseline MAE: 417.78235887096776\n",
"Baseline MSE: 182476.07973024843\n",
"Baseline R²: -0.027074997920953914\n"
]
}
],
"source": [
"from pandas.core.frame import DataFrame\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n",
"\n",
"\n",
"# Разбить данные на обучающую и тестовую выборки\n",
"def split_into_train_test(\n",
" df_input: DataFrame,\n",
" stratify_colname: str = \"y\", \n",
" frac_train: float = 0.8,\n",
" random_state: int = 42,\n",
") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame]:\n",
"\n",
" if stratify_colname not in df_input.columns:\n",
" raise ValueError(\"%s is not a column in the dataframe\" % (stratify_colname))\n",
" \n",
" if not (0 < frac_train < 1):\n",
" raise ValueError(\"Fraction must be between 0 and 1.\")\n",
" \n",
" X: DataFrame = df_input # Contains all columns.\n",
" y: DataFrame = df_input[\n",
" [stratify_colname]\n",
" ] # Dataframe of just the column on which to stratify.\n",
"\n",
" # Split original dataframe into train and test dataframes.\n",
" X_train, X_test, y_train, y_test = train_test_split(\n",
" X, y,\n",
" test_size=(1.0 - frac_train),\n",
" random_state=random_state\n",
" )\n",
" \n",
" return X_train, X_test, y_train, y_test\n",
"\n",
"\n",
"# Определяем целевой признак и входные признаки\n",
"y_feature: str = 'Cost'\n",
"X_features: list[str] = df.drop(columns=y_feature, axis=1).columns.tolist()\n",
"\n",
"# Разбиваем данные на обучающую и тестовую выборки\n",
"X_df_train, X_df_test, y_df_train, y_df_test = split_into_train_test(\n",
" df, \n",
" stratify_colname=y_feature, \n",
" frac_train=0.8, \n",
" random_state=42 \n",
")\n",
"\n",
"# Вычисляем предсказания базовой модели (среднее значение целевой переменной)\n",
"baseline_predictions: list[float] = [y_df_train.mean()] * len(y_df_test) # type: ignore\n",
"\n",
"# Оцениваем базовую модель\n",
"print('Baseline MAE:', mean_absolute_error(y_df_test, baseline_predictions))\n",
"print('Baseline MSE:', mean_squared_error(y_df_test, baseline_predictions))\n",
"print('Baseline R²:', r2_score(y_df_test, baseline_predictions))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Выбор моделей обучения:\n",
"\n",
"Для обучения были выбраны следующие модели:\n",
"1. **Случайный лес (Random Forest)**: Ансамблевая модель, которая использует множество решающих деревьев. Она хорошо справляется с нелинейными зависимостями и шумом в данных, а также обладает устойчивостью к переобучению.\n",
"2. **Линейная регрессия (Linear Regression)**: Простая модель, предполагающая линейную зависимость между признаками и целевой переменной. Она быстро обучается и предоставляет легкую интерпретацию результатов.\n",
"3. **Градиентный бустинг (Gradient Boosting)**: Мощная модель, создающая ансамбль деревьев, которые корректируют ошибки предыдущих. Эта модель эффективна для сложных наборов данных и обеспечивает высокую точность предсказаний.\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Построение конвейера:"
]
},
{
"cell_type": "code",
"execution_count": 383,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.impute import SimpleImputer\n",
"from sklearn.discriminant_analysis import StandardScaler\n",
"from sklearn.preprocessing import OneHotEncoder\n",
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.pipeline import Pipeline\n",
"\n",
"\n",
"# Числовые столбцы\n",
"num_columns: list[str] = [\n",
" column\n",
" for column in df.columns\n",
" if df[column].dtype not in (\"category\", \"object\")\n",
"]\n",
"\n",
"# Категориальные столбцы\n",
"cat_columns: list[str] = [\n",
" column\n",
" for column in df.columns\n",
" if df[column].dtype in (\"category\", \"object\")\n",
"]\n",
"\n",
"# Заполнение пропущенных значений\n",
"num_imputer = SimpleImputer(strategy=\"median\")\n",
"# Стандартизация\n",
"num_scaler = StandardScaler()\n",
"# Конвейер для обработки числовых данных\n",
"preprocessing_num = Pipeline(\n",
" [\n",
" (\"imputer\", num_imputer),\n",
" (\"scaler\", num_scaler),\n",
" ]\n",
")\n",
"\n",
"# Заполнение пропущенных значений\n",
"cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\")\n",
"# Унитарное кодирование\n",
"cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n",
"# Конвейер для обработки категориальных данных\n",
"preprocessing_cat = Pipeline(\n",
" [\n",
" (\"imputer\", cat_imputer),\n",
" (\"encoder\", cat_encoder),\n",
" ]\n",
")\n",
"\n",
"# Трансформер для предобработки признаков\n",
"features_preprocessing = ColumnTransformer(\n",
" verbose_feature_names_out=False,\n",
" transformers=[\n",
" (\"prepocessing_num\", preprocessing_num, num_columns),\n",
" (\"prepocessing_cat\", preprocessing_cat, cat_columns),\n",
" ],\n",
" remainder=\"passthrough\"\n",
")\n",
"\n",
"# Основной конвейер предобработки данных\n",
"pipeline_end = Pipeline(\n",
" [\n",
" (\"features_preprocessing\", features_preprocessing),\n",
" ]\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Демонстрация работы конвейера:"
]
},
{
"cell_type": "code",
"execution_count": 384,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Cost</th>\n",
" <th>Shares</th>\n",
" <th>Value ($)</th>\n",
" <th>Shares Total</th>\n",
" <th>Year</th>\n",
" <th>Month</th>\n",
" <th>Day</th>\n",
" <th>Insider Trading_DENHOLM ROBYN M</th>\n",
" <th>Insider Trading_Kirkhorn Zachary</th>\n",
" <th>Insider Trading_Musk Elon</th>\n",
" <th>Insider Trading_Musk Kimbal</th>\n",
" <th>Insider Trading_Taneja Vaibhav</th>\n",
" <th>Insider Trading_Wilson-Thompson Kathleen</th>\n",
" <th>Relationship_Chief Accounting Officer</th>\n",
" <th>Relationship_Chief Financial Officer</th>\n",
" <th>Relationship_Director</th>\n",
" <th>Relationship_SVP Powertrain and Energy Eng.</th>\n",
" <th>Transaction_Sale</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>-0.966516</td>\n",
" <td>-0.361759</td>\n",
" <td>-0.450022</td>\n",
" <td>-0.343599</td>\n",
" <td>0.715678</td>\n",
" <td>-0.506108</td>\n",
" <td>-0.400623</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>-1.074894</td>\n",
" <td>1.225216</td>\n",
" <td>-0.414725</td>\n",
" <td>-0.319938</td>\n",
" <td>-1.397276</td>\n",
" <td>0.801338</td>\n",
" <td>0.906673</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>-1.074894</td>\n",
" <td>1.211753</td>\n",
" <td>-0.415027</td>\n",
" <td>-0.320141</td>\n",
" <td>-1.397276</td>\n",
" <td>1.062828</td>\n",
" <td>-0.098939</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.167142</td>\n",
" <td>0.037499</td>\n",
" <td>1.023612</td>\n",
" <td>-0.325853</td>\n",
" <td>-1.397276</td>\n",
" <td>1.062828</td>\n",
" <td>-0.501184</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.217886</td>\n",
" <td>-0.075287</td>\n",
" <td>0.632973</td>\n",
" <td>-0.330205</td>\n",
" <td>-1.397276</td>\n",
" <td>1.062828</td>\n",
" <td>-0.501184</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>0.505872</td>\n",
" <td>-0.361021</td>\n",
" <td>-0.443679</td>\n",
" <td>-0.343698</td>\n",
" <td>0.715678</td>\n",
" <td>-0.767598</td>\n",
" <td>1.308918</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>-1.088674</td>\n",
" <td>-0.357532</td>\n",
" <td>-0.450389</td>\n",
" <td>-0.342863</td>\n",
" <td>0.715678</td>\n",
" <td>0.278360</td>\n",
" <td>-0.903429</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>-0.692146</td>\n",
" <td>-0.355855</td>\n",
" <td>-0.445383</td>\n",
" <td>-0.343220</td>\n",
" <td>0.715678</td>\n",
" <td>0.801338</td>\n",
" <td>1.409480</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>-1.088674</td>\n",
" <td>-0.361181</td>\n",
" <td>-0.450389</td>\n",
" <td>-0.343649</td>\n",
" <td>-1.397276</td>\n",
" <td>1.062828</td>\n",
" <td>-0.903429</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1.091997</td>\n",
" <td>-0.204531</td>\n",
" <td>0.114712</td>\n",
" <td>1.538166</td>\n",
" <td>0.715678</td>\n",
" <td>-1.029087</td>\n",
" <td>1.208357</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Cost Shares Value ($) Shares Total Year Month Day \\\n",
"0 -0.966516 -0.361759 -0.450022 -0.343599 0.715678 -0.506108 -0.400623 \n",
"1 -1.074894 1.225216 -0.414725 -0.319938 -1.397276 0.801338 0.906673 \n",
"2 -1.074894 1.211753 -0.415027 -0.320141 -1.397276 1.062828 -0.098939 \n",
"3 1.167142 0.037499 1.023612 -0.325853 -1.397276 1.062828 -0.501184 \n",
"4 1.217886 -0.075287 0.632973 -0.330205 -1.397276 1.062828 -0.501184 \n",
"5 0.505872 -0.361021 -0.443679 -0.343698 0.715678 -0.767598 1.308918 \n",
"6 -1.088674 -0.357532 -0.450389 -0.342863 0.715678 0.278360 -0.903429 \n",
"7 -0.692146 -0.355855 -0.445383 -0.343220 0.715678 0.801338 1.409480 \n",
"8 -1.088674 -0.361181 -0.450389 -0.343649 -1.397276 1.062828 -0.903429 \n",
"9 1.091997 -0.204531 0.114712 1.538166 0.715678 -1.029087 1.208357 \n",
"\n",
" Insider Trading_DENHOLM ROBYN M Insider Trading_Kirkhorn Zachary \\\n",
"0 0.0 0.0 \n",
"1 0.0 0.0 \n",
"2 0.0 0.0 \n",
"3 0.0 0.0 \n",
"4 0.0 0.0 \n",
"5 0.0 0.0 \n",
"6 0.0 0.0 \n",
"7 0.0 0.0 \n",
"8 0.0 0.0 \n",
"9 0.0 0.0 \n",
"\n",
" Insider Trading_Musk Elon Insider Trading_Musk Kimbal \\\n",
"0 0.0 0.0 \n",
"1 1.0 0.0 \n",
"2 1.0 0.0 \n",
"3 1.0 0.0 \n",
"4 1.0 0.0 \n",
"5 0.0 0.0 \n",
"6 0.0 0.0 \n",
"7 0.0 0.0 \n",
"8 0.0 0.0 \n",
"9 1.0 0.0 \n",
"\n",
" Insider Trading_Taneja Vaibhav Insider Trading_Wilson-Thompson Kathleen \\\n",
"0 1.0 0.0 \n",
"1 0.0 0.0 \n",
"2 0.0 0.0 \n",
"3 0.0 0.0 \n",
"4 0.0 0.0 \n",
"5 0.0 0.0 \n",
"6 1.0 0.0 \n",
"7 0.0 0.0 \n",
"8 1.0 0.0 \n",
"9 0.0 0.0 \n",
"\n",
" Relationship_Chief Accounting Officer \\\n",
"0 1.0 \n",
"1 0.0 \n",
"2 0.0 \n",
"3 0.0 \n",
"4 0.0 \n",
"5 0.0 \n",
"6 1.0 \n",
"7 0.0 \n",
"8 1.0 \n",
"9 0.0 \n",
"\n",
" Relationship_Chief Financial Officer Relationship_Director \\\n",
"0 0.0 0.0 \n",
"1 0.0 0.0 \n",
"2 0.0 0.0 \n",
"3 0.0 0.0 \n",
"4 0.0 0.0 \n",
"5 0.0 0.0 \n",
"6 0.0 0.0 \n",
"7 0.0 0.0 \n",
"8 0.0 0.0 \n",
"9 0.0 0.0 \n",
"\n",
" Relationship_SVP Powertrain and Energy Eng. Transaction_Sale \n",
"0 0.0 0.0 \n",
"1 0.0 0.0 \n",
"2 0.0 0.0 \n",
"3 0.0 1.0 \n",
"4 0.0 1.0 \n",
"5 1.0 1.0 \n",
"6 0.0 0.0 \n",
"7 1.0 1.0 \n",
"8 0.0 0.0 \n",
"9 0.0 1.0 "
]
},
"execution_count": 384,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Применение конвейера\n",
"preprocessing_result = pipeline_end.fit_transform(X_df_train)\n",
"preprocessed_df = pd.DataFrame(\n",
" preprocessing_result,\n",
" columns=pipeline_end.get_feature_names_out(),\n",
")\n",
"\n",
"preprocessed_df.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Обучение моделей:\n",
"\n",
"Оценка результатов обучения:\n",
"1. **Случайный лес (Random Forest)**:\n",
" - Показатели:\n",
" - Средний балл: 0.9993.\n",
" - Стандартное отклонение: 0.00046.\n",
" - Вывод: Очень высокая точность, что свидетельствует о хорошей способности модели к обобщению. Низкое значение стандартного отклонения указывает на стабильность модели.\n",
"2. **Линейная регрессия (Linear Regression)**:\n",
" - Показатели:\n",
" - Средний балл: 1.0.\n",
" - Стандартное отклонение: 0.0.\n",
" - Вывод: Идеальная точность, однако есть вероятность переобучения, так как стандартное отклонение равно 0. Это может указывать на то, что модель идеально подгоняет данные, но может не работать на новых данных.\n",
"3. **Градиентный бустинг (Gradient Boosting)**:\n",
" - Показатели:\n",
" - Средний балл: 0.9998.\n",
" - Стандартное отклонение: 0.00014.\n",
" - Вывод: Отличные результаты с высокой точностью и низкой вариабельностью. Модель также демонстрирует хорошую устойчивость."
]
},
{
"cell_type": "code",
"execution_count": 385,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n",
" warnings.warn(\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
" return fit_method(estimator, *args, **kwargs)\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n",
" warnings.warn(\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:668: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
" y = column_or_1d(y, warn=True) # TODO: Is this still required?\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:668: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
" y = column_or_1d(y, warn=True) # TODO: Is this still required?\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:668: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
" y = column_or_1d(y, warn=True) # TODO: Is this still required?\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Модель: Random Forest\n",
"\tmean_score: 0.9992580181099008\n",
"\tstd_dev: 0.0004834744839371662\n",
"\n",
"Модель: Linear Regression\n",
"\tmean_score: 1.0\n",
"\tstd_dev: 0.0\n",
"\n",
"Модель: Gradient Boosting\n",
"\tmean_score: 0.9997687065029746\n",
"\tstd_dev: 0.00014193622424523165\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n",
" warnings.warn(\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:668: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
" y = column_or_1d(y, warn=True) # TODO: Is this still required?\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:668: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
" y = column_or_1d(y, warn=True) # TODO: Is this still required?\n"
]
}
],
"source": [
"from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor\n",
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.model_selection import cross_val_score\n",
"\n",
"\n",
"# Обучить модели\n",
"def train_models(X: DataFrame, y: DataFrame, \n",
" models: dict[str, Any]) -> dict[str, dict[str, Any]]:\n",
" results: dict[str, dict[str, Any]] = {}\n",
" \n",
" for model_name, model in models.items():\n",
" # Создание конвейера для текущей модели\n",
" model_pipeline = Pipeline(\n",
" [\n",
" (\"features_preprocessing\", features_preprocessing),\n",
" (\"model\", model)\n",
" ]\n",
" )\n",
" \n",
" # Обучаем модель и вычисляем кросс-валидацию\n",
" scores = cross_val_score(model_pipeline, X, y, cv=5) # 5-кратная кросс-валидация\n",
" \n",
" # Вычисление метрик для текущей модели\n",
" metrics_dict: dict[str, Any] = {\n",
" \"mean_score\": scores.mean(),\n",
" \"std_dev\": scores.std()\n",
" }\n",
" \n",
" # Сохранениерезультатов\n",
" results[model_name] = metrics_dict\n",
" \n",
" return results\n",
"\n",
"\n",
"# Выбранные модели для регрессии\n",
"models_regression: dict[str, Any] = {\n",
" \"Random Forest\": RandomForestRegressor(),\n",
" \"Linear Regression\": LinearRegression(),\n",
" \"Gradient Boosting\": GradientBoostingRegressor(),\n",
"}\n",
"\n",
"results: dict[str, Any] = train_models(X_df_train, y_df_train, models_regression)\n",
"\n",
"# Вывод результатов\n",
"for model_name, metrics_dict in results.items():\n",
" print(f\"Модель: {model_name}\")\n",
" for metric_name, value in metrics_dict.items():\n",
" print(f\"\\t{metric_name}: {value}\")\n",
" print()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Проверка на тестовом наборе данных:\n",
"\n",
"Оценка результатов обучения:\n",
"1. Случайный лес (Random Forest):\n",
" - Показатели:\n",
" - MAE (обучение): 1.858\n",
" - MAE (тест): 4.489\n",
" - MSE (обучение): 10.959\n",
" - MSE (тест): 62.649\n",
" - R² (обучение): 0.9999\n",
" - R² (тест): 0.9997\n",
" - STD (обучение): 3.310\n",
" - STD (тест): 7.757\n",
" - Вывод: Случайный лес показывает великолепные значения R2 на обучающей и тестовой выборках, что свидетельствует о сильной способности к обобщению. Однако MAE и MSE на тестовой выборке значительно выше, чем на обучающей, что может указывать на некоторые проблемы с переобучением.\n",
"2. Линейная регрессия (Linear Regression):\n",
" - Показатели:\n",
" - MAE (обучение): 3.069e-13\n",
" - MAE (тест): 2.762e-13\n",
" - MSE (обучение): 1.437e-25\n",
" - MSE (тест): 1.196e-25\n",
" - R² (обучение): 1.0\n",
" - R² (тест): 1.0\n",
" - STD (обучение): 3.730e-13\n",
" - STD (тест): 3.444e-13\n",
" - Вывод: Высокие показатели точности и нулевые ошибки (MAE, MSE) указывают на то, что модель идеально подгоняет данные как на обучающей, так и на тестовой выборках. Однако это также может быть признаком переобучения.\n",
"3. Градиентный бустинг (Gradient Boosting):\n",
" - Показатели:\n",
" - MAE (обучение): 0.156\n",
" - MAE (тест): 3.027\n",
" - MSE (обучение): 0.075\n",
" - MSE (тест): 41.360\n",
" - R² (обучение): 0.9999996\n",
" - R² (тест): 0.9998\n",
" - STD (обучение): 0.274\n",
" - STD (тест): 6.399\n",
" - Вывод: Градиентный бустинг демонстрирует отличные результаты на обучающей выборке, однако MAE и MSE на тестовой выборке довольно высокие, что может указывать на определенное переобучение или необходимость улучшения настройки модели."
]
},
{
"cell_type": "code",
"execution_count": 386,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Модель: Random Forest\n",
"\tMAE_train: 1.955516935483828\n",
"\tMAE_test: 4.46537187499996\n",
"\tMSE_train: 11.287871282983637\n",
"\tMSE_test: 66.47081479843644\n",
"\tR2_train: 0.9999449583585838\n",
"\tR2_test: 0.9996258659651619\n",
"\tSTD_train: 3.351830348079478\n",
"\tSTD_test: 8.067958792345765\n",
"\n",
"Модель: Linear Regression\n",
"\tMAE_train: 3.0690862038154006e-13\n",
"\tMAE_test: 2.761679773755077e-13\n",
"\tMSE_train: 1.4370485712253764e-25\n",
"\tMSE_test: 1.19585889812782e-25\n",
"\tR2_train: 1.0\n",
"\tR2_test: 1.0\n",
"\tSTD_train: 3.7295840825107354e-13\n",
"\tSTD_test: 3.4438670391637766e-13\n",
"\n",
"Модель: Gradient Boosting\n",
"\tMAE_train: 0.15613772760448247\n",
"\tMAE_test: 2.9760510050502877\n",
"\tMSE_train: 0.07499640211231862\n",
"\tMSE_test: 38.91708171007616\n",
"\tR2_train: 0.9999996343043813\n",
"\tR2_test: 0.9997809534176997\n",
"\tSTD_train: 0.2738547098596601\n",
"\tSTD_test: 6.197132274535746\n",
"\n"
]
}
],
"source": [
"import numpy as np\n",
"\n",
"from sklearn import metrics\n",
"\n",
"\n",
"# Оценка качества различных моделей на основе метрик\n",
"def evaluate_models(models: dict[str, Any], \n",
" pipeline_end: Pipeline, \n",
" X_train: DataFrame, y_train, \n",
" X_test: DataFrame, y_test) -> dict[str, dict[str, Any]]:\n",
" results: dict[str, dict[str, Any]] = {}\n",
" \n",
" for model_name, model in models.items():\n",
" # Создание конвейера для текущей модели\n",
" model_pipeline = Pipeline(\n",
" [\n",
" (\"pipeline\", pipeline_end), \n",
" (\"model\", model),\n",
" ]\n",
" )\n",
" \n",
" # Обучение текущей модели\n",
" model_pipeline.fit(X_train, y_train)\n",
"\n",
" # Предсказание для обучающей и тестовой выборки\n",
" y_train_predict = model_pipeline.predict(X_train)\n",
" y_test_predict = model_pipeline.predict(X_test)\n",
"\n",
" # Вычисление метрик для текущей модели\n",
" metrics_dict: dict[str, Any] = {\n",
" \"MAE_train\": metrics.mean_absolute_error(y_train, y_train_predict),\n",
" \"MAE_test\": metrics.mean_absolute_error(y_test, y_test_predict),\n",
" \"MSE_train\": metrics.mean_squared_error(y_train, y_train_predict),\n",
" \"MSE_test\": metrics.mean_squared_error(y_test, y_test_predict),\n",
" \"R2_train\": metrics.r2_score(y_train, y_train_predict),\n",
" \"R2_test\": metrics.r2_score(y_test, y_test_predict),\n",
" \"STD_train\": np.std(y_train - y_train_predict),\n",
" \"STD_test\": np.std(y_test - y_test_predict),\n",
" }\n",
"\n",
" # Сохранение результатов\n",
" results[model_name] = metrics_dict\n",
" \n",
" return results\n",
"\n",
"\n",
"y_train = np.ravel(y_df_train) \n",
"y_test = np.ravel(y_df_test) \n",
"\n",
"results: dict[str, dict[str, Any]] = evaluate_models(models_regression,\n",
" pipeline_end,\n",
" X_df_train, y_train,\n",
" X_df_test, y_test)\n",
"\n",
"# Вывод результатов\n",
"for model_name, metrics_dict in results.items():\n",
" print(f\"Модель: {model_name}\")\n",
" for metric_name, value in metrics_dict.items():\n",
" print(f\"\\t{metric_name}: {value}\")\n",
" print()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Подбор гиперпараметров:"
]
},
{
"cell_type": "code",
"execution_count": 387,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 3 folds for each of 36 candidates, totalling 108 fits\n",
"Лучшие параметры: {'max_depth': 10, 'min_samples_split': 5, 'n_estimators': 50}\n",
"Лучший результат (MSE): 196.9489804872991\n"
]
}
],
"source": [
"from sklearn.model_selection import GridSearchCV\n",
"\n",
"\n",
"# Применение конвейера к данным\n",
"X_train_processing_result = pipeline_end.fit_transform(X_df_train)\n",
"X_test_processing_result = pipeline_end.transform(X_df_test)\n",
"\n",
"# Создание и настройка модели случайного леса\n",
"model = RandomForestRegressor()\n",
"\n",
"# Установка параметров для поиска по сетке\n",
"param_grid: dict[str, list[int | None]] = {\n",
" 'n_estimators': [50, 100, 200], # Количество деревьев\n",
" 'max_depth': [None, 10, 20, 30], # Максимальная глубина дерева\n",
" 'min_samples_split': [2, 5, 10] # Минимальное количество образцов для разбиения узла\n",
"}\n",
"\n",
"# Подбор гиперпараметров с помощью поиска по сетке\n",
"grid_search = GridSearchCV(estimator=model, \n",
" param_grid=param_grid,\n",
" scoring='neg_mean_squared_error', cv=3, n_jobs=-1, verbose=2)\n",
"\n",
"# Обучение модели на тренировочных данных\n",
"grid_search.fit(X_train_processing_result, y_train)\n",
"\n",
"# Результаты подбора гиперпараметров\n",
"print(\"Лучшие параметры:\", grid_search.best_params_)\n",
"# Меняем знак, так как берем отрицательное значение среднеквадратичной ошибки\n",
"print(\"Лучший результат (MSE):\", -grid_search.best_score_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Сравнение наборов гиперпараметров:\n",
"\n",
"Результаты анализа показывают, что параметры из старой сетки обеспечивают значительно лучшее качество модели. Среднеквадратическая ошибка (MSE) на кросс-валидации для старых параметров составила 179.369, что существенно ниже, чем для новых параметров (1290.656). На тестовой выборке модель с новыми параметрами показала MSE 172.574, что сопоставимо с результатами модели со старыми параметрами, однако этот результат является случайным, так как новые параметры продемонстрировали плохую кросс-валидационную ошибку, указывая на недообучение. Таким образом, параметры из старой сетки более предпочтительны, так как они обеспечивают лучшее обобщение и меньшую ошибку."
]
},
{
"cell_type": "code",
"execution_count": 388,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 3 folds for each of 36 candidates, totalling 108 fits\n",
"Старые параметры: {'max_depth': 10, 'min_samples_split': 5, 'n_estimators': 50}\n",
"Лучший результат (MSE) на старых параметрах: 184.14248778487732\n",
"\n",
"Новые параметры: {'max_depth': 5, 'min_samples_split': 10, 'n_estimators': 50}\n",
"Лучший результат (MSE) на новых параметрах: 1283.4356458868208\n",
"Среднеквадратическая ошибка (MSE) на тестовых данных: 159.03284823315155\n",
"Корень среднеквадратичной ошибки (RMSE) на тестовых данных: 12.610822662822262\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAHWCAYAAACBjZMqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hTZfvA8W+SNk2b7j1pgbKHyBDZoMhwIjhBBQf4U1TciggiqCjgAtfrqy84cKLiHigiIAjIlj0KpXsl3SPj/P44NFI6aEvbpO39uS4uTc5zzrmbJum5z/M896NRFEVBCCGEEEIIIUSD0jo7ACGEEEIIIYRoiSTZEkIIIYQQQohGIMmWEEIIIYQQQjQCSbaEEEIIIYQQohFIsiWEEEIIIYQQjUCSLSGEEEIIIYRoBJJsCSGEEEIIIUQjkGRLCCGEEEIIIRqBJFtCCCGEEEII0Qgk2RJCCCGEEI3uu+++Y+fOnY7Hq1atYu/evc4LSIgmIMmWEK3A0aNHufPOO2nXrh0GgwFfX18GDRrEq6++SnFxsbPDE0II0Qrs2bOHGTNmcPjwYf766y/+7//+j/z8fGeHJUSj0iiKojg7CCFE4/n++++59tpr8fDw4JZbbqF79+6UlZWxYcMGvvjiC6ZMmcLbb7/t7DCFEEK0cJmZmQwcOJAjR44AMH78eL744gsnRyVE45JkS4gWLCEhgZ49exIdHc2aNWuIiIiosP3IkSN8//33zJgxw0kRCiGEaE1KS0v5559/8PLyokuXLs4OR4hGJ8MIhWjBFi5cSEFBAe+++26lRAsgPj6+QqKl0Wi45557WLFiBZ06dcJgMNCnTx/WrVtXYb8TJ05w991306lTJzw9PQkKCuLaa6/l+PHjFdotX74cjUbj+Ofl5UWPHj145513KrSbMmUK3t7eleJbuXIlGo2GtWvXVnh+8+bNjBkzBj8/P7y8vBg2bBh//vlnhTZz585Fo9GQlZVV4fm///4bjUbD8uXLK5w/Li6uQruTJ0/i6emJRqOp9HP9+OOPDBkyBKPRiI+PD5dddlmt5h2Uvx7r1q3jzjvvJCgoCF9fX2655RZMJlOl9rU5z+7du5kyZYpjiGh4eDi33XYb2dnZVcYQFxdX4XdS/u/01zguLo7LL7+8xp/l+PHjaDQaFi9eXGlb9+7dGT58uOPx2rVr0Wg0rFy5strjnfk7eOqpp9Bqtfz2228V2k2bNg29Xs+uXbtqjE+j0TB37twKzy1atAiNRlMhtpr2r+7f6XGe/jq8/PLLxMbG4unpybBhw/jnn38qHffAgQNcc801BAYGYjAY6Nu3L998802VMUyZMqXK80+ZMqVS2x9//JFhw4bh4+ODr68v/fr146OPPnJsHz58eKWf+9lnn0Wr1VZot379eq699lratGmDh4cHMTExPPDAA5WGG8+dO5euXbvi7e2Nr68vF154IatWrarQprbHqsvnf/jw4XTv3r1S28WLF1f6rJ7tfVz+viw//v79+/H09OSWW26p0G7Dhg3odDoee+yxao8FtXtN6hL/119/zWWXXUZkZCQeHh60b9+e+fPnY7PZKuxb1Xu9/LumPt9ddf19nPm+2rp1q+O9WlWcHh4e9OnThy5dutTpMylEc+Xm7ACEEI3n22+/pV27dgwcOLDW+/zxxx98+umn3HfffXh4ePDGG28wZswYtmzZ4rhI2Lp1Kxs3buSGG24gOjqa48eP8+abbzJ8+HD27duHl5dXhWO+/PLLBAcHk5eXx//+9z+mTp1KXFwcI0eOrPPPtGbNGsaOHUufPn0cF+TLli3joosuYv369VxwwQV1PmZV5syZQ0lJSaXnP/jgAyZPnszo0aN54YUXKCoq4s0332Tw4MHs2LGjUtJWlXvuuQd/f3/mzp3LwYMHefPNNzlx4oTj4q8u51m9ejXHjh3j1ltvJTw8nL179/L222+zd+9e/vrrr0oXPABDhgxh2rRpgHqB+dxzz9X/hWokTz75JN9++y233347e/bswcfHh59//pn//ve/zJ8/n/POO69OxzObzSxYsKBO+1xyySWVLrxffPHFKhPj999/n/z8fKZPn05JSQmvvvoqF110EXv27CEsLAyAvXv3MmjQIKKionj88ccxGo189tlnjBs3ji+++IKrr7660nE9PDwq3Jy44447KrVZvnw5t912G926dWPmzJn4+/uzY8cOfvrpJyZOnFjlz7Zs2TKefPJJXnzxxQptPv/8c4qKirjrrrsICgpiy5YtLF26lKSkJD7//HNHu8LCQq6++mri4uIoLi5m+fLlTJgwgU2bNjk+g7U9lqvo0qUL8+fP55FHHuGaa67hyiuvpLCwkClTptC5c2fmzZtX4/61eU3qYvny5Xh7e/Pggw/i7e3NmjVr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HDlCYmJis3anp6c3iRyZTKZGKVmrVq1qdK5sNluLDsTChQuZNGkSp512WqPXExMTsVqtfP3111x66aVO56416urqWjxOa+dm3759xMbGNoqkDBgwwHlNNDhbDd8Bm82K3W7nhQWPEhd3LDOhPZ+/WuvH9l0ZpKfv4nv9D87X2/P5t4Xdbue5557jq6++Ijc3F4vFgtls5qLzzhLfr09eGzt2bKPzOW7cOF555RXsdjsKhYJt27bx1FNPsXPnTsrLy51puSUlJYSGhjq/+9dddx2jR4/m1Vdf5YMPPuCaa65pdF2kp6dTW1vrdJIasFgsDBs2rEN/2/GLDUFBQfTt25d9+461YWnvtdeAVqttcn14kk45WwEBx/LKP/vsM6ZOndrhMK6EZygvLyciQEyBikrq42VrTgLkCh74ciFF5QnEjZNzlbft6WVkF/ny8o/34xdg4TY3H8sQLioG+mrqyD3axZRQmZw/d52GydSPp87b4gLrjpGaqkUmc6CVWcBUDD5dcATqsVrBbBbv6Skp7r23V9vF8TX2Yrcep8Moj61g2+121GoNyMDPPxi6ElVVNl0Z1/hpcVRkIpcJWC0m1D4dWz1vCbvNTsMUS6VpOUpQXV3NggULml1IPX4ym5GR0eykvAGttm2Hf8OGDSxdupQVK1Zw11138fnnnzvf++KLL5g3bx6vvPIK48aNQ6/X89JLL7Fp06ZGY9x2221Mnz6dbdu2ce+99zJ9+nQmTZrU7v0nTZrEEw8/TaQ+H5NNzU9r9/Lcc8812qZv376sXLnS+fumTZu45pprGm2j1+vZvn07giCQlpbGddddR0REBGeffXaj7aqrq7n11lubbY1z/OT9RC666CJGjRrF/v37ufPOO/nuu++YOXOm8/0vv/yy0UT9+NqZzMxMLrzwQm6//XaeffZZgoKCWLduHTfeeCMWiwVfX19uuOEGvvvuO5KSktDpmn7nqqurGTFiRLNKbqGhx+4zkyZNYunSpc7fv/322ybnE+DQoUN88MEH7Nixg5ycxn0BR40axcKFC7n++uu55pprUKlU1NXVNXGUjyckJITdu3c3+15r56a9NHwHSnIzOLDnH+588CVOPes8xo4VF1Hb8/lrNHLq6qqZPv0WHn30libXSGuff1u89NJLvP7667z22mvO2rx7770Xq1VclFQo267hrampYfLkyUye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",
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Установка параметров для поиска по сетке для старых значений\n",
"old_param_grid: dict[str, list[int | None]] = {\n",
" 'n_estimators': [50, 100, 200], # Количество деревьев\n",
" 'max_depth': [None, 10, 20, 30], # Максимальная глубина дерева\n",
" 'min_samples_split': [2, 5, 10] # Минимальное количество образцов для разбиения узла\n",
"}\n",
"\n",
"# Подбор гиперпараметров с помощью поиска по сетке для старых параметров\n",
"old_grid_search = GridSearchCV(estimator=model, \n",
" param_grid=old_param_grid,\n",
" scoring='neg_mean_squared_error', cv=3, n_jobs=-1, verbose=2)\n",
"\n",
"# Обучение модели на тренировочных данных\n",
"old_grid_search.fit(X_train_processing_result, y_train)\n",
"\n",
"# Результаты подбора для старых параметров\n",
"old_best_params = old_grid_search.best_params_\n",
"# Меняем знак, так как берем отрицательное значение MSE\n",
"old_best_mse = -old_grid_search.best_score_\n",
"\n",
"\n",
"# Установка параметров для поиска по сетке для новых значений\n",
"new_param_grid: dict[str, list[int]] = {\n",
" 'n_estimators': [50],\n",
" 'max_depth': [5],\n",
" 'min_samples_split': [10]\n",
"}\n",
"\n",
"# Подбор гиперпараметров с помощью поиска по сетке для новых параметров\n",
"new_grid_search = GridSearchCV(estimator=model, \n",
" param_grid=new_param_grid,\n",
" scoring='neg_mean_squared_error', cv=2)\n",
"\n",
"# Обучение модели на тренировочных данных\n",
"new_grid_search.fit(X_train_processing_result, y_train)\n",
"\n",
"# Результаты подбора для новых параметров\n",
"new_best_params = new_grid_search.best_params_\n",
"# Меняем знак, так как берем отрицательное значение MSE\n",
"new_best_mse = -new_grid_search.best_score_\n",
"\n",
"\n",
"# Обучение модели с лучшими параметрами для новых значений\n",
"model_best = RandomForestRegressor(**new_best_params)\n",
"model_best.fit(X_train_processing_result, y_train)\n",
"\n",
"# Прогнозирование на тестовой выборке\n",
"y_pred = model_best.predict(X_test_processing_result)\n",
"\n",
"# Оценка производительности модели\n",
"mse = metrics.mean_squared_error(y_test, y_pred)\n",
"rmse = np.sqrt(mse)\n",
"\n",
"\n",
"# Вывод результатов\n",
"print(\"Старые параметры:\", old_best_params)\n",
"print(\"Лучший результат (MSE) на старых параметрах:\", old_best_mse)\n",
"print(\"\\nНовые параметры:\", new_best_params)\n",
"print(\"Лучший результат (MSE) на новых параметрах:\", new_best_mse)\n",
"print(\"Среднеквадратическая ошибка (MSE) на тестовых данных:\", mse)\n",
"print(\"Корень среднеквадратичной ошибки (RMSE) на тестовых данных:\", rmse)\n",
"\n",
"# Обучение модели с лучшими параметрами для старых значений\n",
"model_old = RandomForestRegressor(**old_best_params)\n",
"model_old.fit(X_train_processing_result, y_train)\n",
"\n",
"# Прогнозирование на тестовой выборке для старых параметров\n",
"y_pred_old = model_old.predict(X_test_processing_result)\n",
"\n",
"# Визуализация ошибок\n",
"plt.figure(figsize=(10, 5))\n",
"plt.plot(y_test, label='Реальные значения', marker='o', linestyle='-', color='black')\n",
"plt.plot(y_pred_old, label='Предсказанные значения (старые параметры)', marker='x', linestyle='--', color='blue')\n",
"plt.plot(y_pred, label='Предсказанные значения (новые параметры)', marker='s', linestyle='--', color='orange')\n",
"plt.xlabel('Объекты')\n",
"plt.ylabel('Значения')\n",
"plt.title('Сравнение реальных и предсказанных значений')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Бизес-цель №2 (Задача классификации).\n",
"\n",
"### Достижимый уровень качества модели:\n",
"**Основные метрики для классификации:**\n",
"- **Accuracy (точность)** показывает долю правильно классифицированных примеров среди всех наблюдений. Легко интерпретируется, но может быть недостаточно информативной для несбалансированных классов.\n",
"- **F1-Score** гармоническое среднее между точностью (precision) и полнотой (recall). Подходит для задач, где важно одновременно учитывать как ложные положительные, так и ложные отрицательные ошибки, особенно при несбалансированных классах.\n",
"- **ROC AUC (Area Under the ROC Curve)** отражает способность модели различать положительные и отрицательные классы на всех уровнях порога вероятности. Значение от 0.5 (случайное угадывание) до 1.0 (идеальная модель). Полезна для оценки модели на несбалансированных данных.\n",
"- **Cohen's Kappa** измеряет степень согласия между предсказаниями модели и истинными метками с учётом случайного угадывания. Значения варьируются от -1 (полное несогласие) до 1 (идеальное согласие). Удобна для оценки на несбалансированных данных.\n",
"- **MCC (Matthews Correlation Coefficient)** метрика корреляции между предсказаниями и истинными классами, учитывающая все типы ошибок (TP, TN, FP, FN). Значение варьируется от -1 (полная несоответствие) до 1 (идеальное совпадение). Отлично подходит для задач с несбалансированными классами.\n",
"- **Confusion Matrix (матрица ошибок)** матрица ошибок отражает распределение предсказаний модели по каждому из классов.\n",
"\n",
"---\n",
"\n",
"### Выбор ориентира:\n",
"В качестве базовой модели для оценки качества предсказаний выбрано использование самой распространённой категории целевой переменной (\"Transaction\") в обучающей выборке. Этот подход, известный как \"most frequent class baseline\", заключается в том, что модель всегда предсказывает наиболее часто встречающийся тип транзакции.\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Разбиение данных:"
]
},
{
"cell_type": "code",
"execution_count": 389,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Самый частый класс: Sale\n",
"Baseline Accuracy: 0.59375\n",
"Baseline F1: 0.4424019607843137\n"
]
}
],
"source": [
"from sklearn.metrics import accuracy_score, f1_score\n",
"\n",
"\n",
"# Определяем целевой признак и входные признаки\n",
"y_feature: str = 'Transaction'\n",
"X_features: list[str] = df.drop(columns=y_feature, axis=1).columns.tolist()\n",
"\n",
"# Разбиваем данные на обучающую и тестовую выборки\n",
"X_df_train, X_df_test, y_df_train, y_df_test = split_into_train_test(\n",
" df, \n",
" stratify_colname=y_feature, \n",
" frac_train=0.8, \n",
" random_state=42 \n",
")\n",
"\n",
"# Определяем самый частый класс\n",
"most_frequent_class = y_df_train.mode().values[0][0]\n",
"print(f\"Самый частый класс: {most_frequent_class}\")\n",
"\n",
"# Вычисляем предсказания базовой модели (все предсказания равны самому частому классу)\n",
"baseline_predictions: list[str] = [most_frequent_class] * len(y_df_test)\n",
"\n",
"# Оцениваем базовую модель\n",
"print('Baseline Accuracy:', accuracy_score(y_df_test, baseline_predictions))\n",
"print('Baseline F1:', f1_score(y_df_test, baseline_predictions, average='weighted'))\n",
"\n",
"# Унитарное кодирование для целевого признака\n",
"y_df_train = y_df_train['Transaction'].map({'Sale': 1, 'Option Exercise': 0})\n",
"y_df_test = y_df_test['Transaction'].map({'Sale': 1, 'Option Exercise': 0})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Выбор моделей обучения:\n",
"\n",
"Для обучения были выбраны следующие модели:\n",
"1. **Случайный лес (Random Forest)**: Ансамблевая модель, которая использует множество решающих деревьев. Она хорошо справляется с нелинейными зависимостями и шумом в данных, а также обладает устойчивостью к переобучению.\n",
"2. **Логистическая регрессия (Logistic Regression)**: Статистический метод для бинарной классификации, который моделирует зависимость между целевой переменной и независимыми признаками, используя логистическую функцию. Она проста в интерпретации и быстра в обучении.\n",
"3. **Метод ближайших соседей (KNN)**: Алгоритм классификации, который предсказывает класс на основе ближайших k обучающих примеров. KNN интуитивно понятен и не требует обучения, но может быть медленным на больших данных и чувствительным к выбору параметров.\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Построение конвейера:\n",
"\n",
"Конвейеры для обработки числовых и категориальных значений, а так же основной конвейер уже были построены ранее при решении задачи регрессии."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Демонстрация работы конвейера:"
]
},
{
"cell_type": "code",
"execution_count": 390,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Cost</th>\n",
" <th>Shares</th>\n",
" <th>Value ($)</th>\n",
" <th>Shares Total</th>\n",
" <th>Year</th>\n",
" <th>Month</th>\n",
" <th>Day</th>\n",
" <th>Insider Trading_DENHOLM ROBYN M</th>\n",
" <th>Insider Trading_Kirkhorn Zachary</th>\n",
" <th>Insider Trading_Musk Elon</th>\n",
" <th>Insider Trading_Musk Kimbal</th>\n",
" <th>Insider Trading_Taneja Vaibhav</th>\n",
" <th>Insider Trading_Wilson-Thompson Kathleen</th>\n",
" <th>Relationship_Chief Accounting Officer</th>\n",
" <th>Relationship_Chief Financial Officer</th>\n",
" <th>Relationship_Director</th>\n",
" <th>Relationship_SVP Powertrain and Energy Eng.</th>\n",
" <th>Transaction_Sale</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>-0.966516</td>\n",
" <td>-0.361759</td>\n",
" <td>-0.450022</td>\n",
" <td>-0.343599</td>\n",
" <td>0.715678</td>\n",
" <td>-0.506108</td>\n",
" <td>-0.400623</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>-1.074894</td>\n",
" <td>1.225216</td>\n",
" <td>-0.414725</td>\n",
" <td>-0.319938</td>\n",
" <td>-1.397276</td>\n",
" <td>0.801338</td>\n",
" <td>0.906673</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>-1.074894</td>\n",
" <td>1.211753</td>\n",
" <td>-0.415027</td>\n",
" <td>-0.320141</td>\n",
" <td>-1.397276</td>\n",
" <td>1.062828</td>\n",
" <td>-0.098939</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.167142</td>\n",
" <td>0.037499</td>\n",
" <td>1.023612</td>\n",
" <td>-0.325853</td>\n",
" <td>-1.397276</td>\n",
" <td>1.062828</td>\n",
" <td>-0.501184</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.217886</td>\n",
" <td>-0.075287</td>\n",
" <td>0.632973</td>\n",
" <td>-0.330205</td>\n",
" <td>-1.397276</td>\n",
" <td>1.062828</td>\n",
" <td>-0.501184</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>0.505872</td>\n",
" <td>-0.361021</td>\n",
" <td>-0.443679</td>\n",
" <td>-0.343698</td>\n",
" <td>0.715678</td>\n",
" <td>-0.767598</td>\n",
" <td>1.308918</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>-1.088674</td>\n",
" <td>-0.357532</td>\n",
" <td>-0.450389</td>\n",
" <td>-0.342863</td>\n",
" <td>0.715678</td>\n",
" <td>0.278360</td>\n",
" <td>-0.903429</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>-0.692146</td>\n",
" <td>-0.355855</td>\n",
" <td>-0.445383</td>\n",
" <td>-0.343220</td>\n",
" <td>0.715678</td>\n",
" <td>0.801338</td>\n",
" <td>1.409480</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>-1.088674</td>\n",
" <td>-0.361181</td>\n",
" <td>-0.450389</td>\n",
" <td>-0.343649</td>\n",
" <td>-1.397276</td>\n",
" <td>1.062828</td>\n",
" <td>-0.903429</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1.091997</td>\n",
" <td>-0.204531</td>\n",
" <td>0.114712</td>\n",
" <td>1.538166</td>\n",
" <td>0.715678</td>\n",
" <td>-1.029087</td>\n",
" <td>1.208357</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Cost Shares Value ($) Shares Total Year Month Day \\\n",
"0 -0.966516 -0.361759 -0.450022 -0.343599 0.715678 -0.506108 -0.400623 \n",
"1 -1.074894 1.225216 -0.414725 -0.319938 -1.397276 0.801338 0.906673 \n",
"2 -1.074894 1.211753 -0.415027 -0.320141 -1.397276 1.062828 -0.098939 \n",
"3 1.167142 0.037499 1.023612 -0.325853 -1.397276 1.062828 -0.501184 \n",
"4 1.217886 -0.075287 0.632973 -0.330205 -1.397276 1.062828 -0.501184 \n",
"5 0.505872 -0.361021 -0.443679 -0.343698 0.715678 -0.767598 1.308918 \n",
"6 -1.088674 -0.357532 -0.450389 -0.342863 0.715678 0.278360 -0.903429 \n",
"7 -0.692146 -0.355855 -0.445383 -0.343220 0.715678 0.801338 1.409480 \n",
"8 -1.088674 -0.361181 -0.450389 -0.343649 -1.397276 1.062828 -0.903429 \n",
"9 1.091997 -0.204531 0.114712 1.538166 0.715678 -1.029087 1.208357 \n",
"\n",
" Insider Trading_DENHOLM ROBYN M Insider Trading_Kirkhorn Zachary \\\n",
"0 0.0 0.0 \n",
"1 0.0 0.0 \n",
"2 0.0 0.0 \n",
"3 0.0 0.0 \n",
"4 0.0 0.0 \n",
"5 0.0 0.0 \n",
"6 0.0 0.0 \n",
"7 0.0 0.0 \n",
"8 0.0 0.0 \n",
"9 0.0 0.0 \n",
"\n",
" Insider Trading_Musk Elon Insider Trading_Musk Kimbal \\\n",
"0 0.0 0.0 \n",
"1 1.0 0.0 \n",
"2 1.0 0.0 \n",
"3 1.0 0.0 \n",
"4 1.0 0.0 \n",
"5 0.0 0.0 \n",
"6 0.0 0.0 \n",
"7 0.0 0.0 \n",
"8 0.0 0.0 \n",
"9 1.0 0.0 \n",
"\n",
" Insider Trading_Taneja Vaibhav Insider Trading_Wilson-Thompson Kathleen \\\n",
"0 1.0 0.0 \n",
"1 0.0 0.0 \n",
"2 0.0 0.0 \n",
"3 0.0 0.0 \n",
"4 0.0 0.0 \n",
"5 0.0 0.0 \n",
"6 1.0 0.0 \n",
"7 0.0 0.0 \n",
"8 1.0 0.0 \n",
"9 0.0 0.0 \n",
"\n",
" Relationship_Chief Accounting Officer \\\n",
"0 1.0 \n",
"1 0.0 \n",
"2 0.0 \n",
"3 0.0 \n",
"4 0.0 \n",
"5 0.0 \n",
"6 1.0 \n",
"7 0.0 \n",
"8 1.0 \n",
"9 0.0 \n",
"\n",
" Relationship_Chief Financial Officer Relationship_Director \\\n",
"0 0.0 0.0 \n",
"1 0.0 0.0 \n",
"2 0.0 0.0 \n",
"3 0.0 0.0 \n",
"4 0.0 0.0 \n",
"5 0.0 0.0 \n",
"6 0.0 0.0 \n",
"7 0.0 0.0 \n",
"8 0.0 0.0 \n",
"9 0.0 0.0 \n",
"\n",
" Relationship_SVP Powertrain and Energy Eng. Transaction_Sale \n",
"0 0.0 0.0 \n",
"1 0.0 0.0 \n",
"2 0.0 0.0 \n",
"3 0.0 1.0 \n",
"4 0.0 1.0 \n",
"5 1.0 1.0 \n",
"6 0.0 0.0 \n",
"7 1.0 1.0 \n",
"8 0.0 0.0 \n",
"9 0.0 1.0 "
]
},
"execution_count": 390,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Применение конвейера\n",
"preprocessing_result = pipeline_end.fit_transform(X_df_train)\n",
"preprocessed_df = pd.DataFrame(\n",
" preprocessing_result,\n",
" columns=pipeline_end.get_feature_names_out(),\n",
")\n",
"\n",
"preprocessed_df.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Проверка моделей:\n",
"\n",
"Оценка результатов обучения:\n",
"1. **Случайный лес (Random Forest)**:\n",
" - Показатели:\n",
" - Precision (обучение): 1.0\n",
" - Precision (тест): 1.0\n",
" - Recall (обучение): 1.0\n",
" - Recall (тест): 1.0\n",
" - Accuracy (обучение): 1.0\n",
" - Accuracy (тест): 1.0\n",
" - F1 Score (обучение): 1.0\n",
" - F1 Score (тест): 1.0\n",
" - ROC AUC (тест): 1.0\n",
" - Cohen Kappa (тест): 1.0\n",
" - MCC (тест): 1.0\n",
" - Confusion Matrix (тест):\n",
" ```\n",
" [[13, 0],\n",
" [ 0, 19]]\n",
" ```\n",
" - Вывод: Случайный лес идеально справляется с задачей на обеих выборках. Однако столь высокие значения метрик на обучении и тесте могут указывать на переобучение модели.\n",
"2. **Логистическая регрессия (Logistic Regression)**:\n",
" - Показатели:\n",
" - Precision (обучение): 1.0\n",
" - Precision (тест): 1.0\n",
" - Recall (обучение): 1.0\n",
" - Recall (тест): 1.0\n",
" - Accuracy (обучение): 1.0\n",
" - Accuracy (тест): 1.0\n",
" - F1 Score (обучение): 1.0\n",
" - F1 Score (тест): 1.0\n",
" - ROC AUC (тест): 1.0\n",
" - Cohen Kappa (тест): 1.0\n",
" - MCC (тест): 1.0\n",
" - Confusion Matrix (тест):\n",
" ```\n",
" [[13, 0],\n",
" [ 0, 19]]\n",
" ```\n",
" - Вывод: Логистическая регрессия также показывает идеальные результаты. Это может быть связано с линейной разделимостью данных.\n",
"3. **Метод ближайших соседей (KNN)**:\n",
" - Показатели:\n",
" - Precision (обучение): 1.0\n",
" - Precision (тест): 1.0\n",
" - Recall (обучение): 0.95\n",
" - Recall (тест): 0.947\n",
" - Accuracy (обучение): 0.968\n",
" - Accuracy (тест): 0.969\n",
" - F1 Score (обучение): 0.974\n",
" - F1 Score (тест): 0.973\n",
" - ROC AUC (тест): 0.974\n",
" - Cohen Kappa (тест): 0.936\n",
" - MCC (тест): 0.938\n",
" - Confusion Matrix (тест):\n",
" ```\n",
" [[13, 0],\n",
" [ 1, 18]]\n",
" ```\n",
" - Вывод: Метод ближайших соседей показывает хорошие результаты, с небольшим снижением полноты на тестовой выборке. Это связано с особенностями алгоритма, который может быть чувствителен к выбросам и распределению данных.\n"
]
},
{
"cell_type": "code",
"execution_count": 391,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Модель: RandomForestClassifier\n",
"\tPrecision_train: 1.0\n",
"\tPrecision_test: 1.0\n",
"\tRecall_train: 1.0\n",
"\tRecall_test: 1.0\n",
"\tAccuracy_train: 1.0\n",
"\tAccuracy_test: 1.0\n",
"\tF1_train: 1.0\n",
"\tF1_test: 1.0\n",
"\tROC_AUC_test: 1.0\n",
"\tCohen_kappa_test: 1.0\n",
"\tMCC_test: 1.0\n",
"\tConfusion_matrix: [[13 0]\n",
" [ 0 19]]\n",
"\n",
"Модель: LogisticRegression\n",
"\tPrecision_train: 1.0\n",
"\tPrecision_test: 1.0\n",
"\tRecall_train: 1.0\n",
"\tRecall_test: 1.0\n",
"\tAccuracy_train: 1.0\n",
"\tAccuracy_test: 1.0\n",
"\tF1_train: 1.0\n",
"\tF1_test: 1.0\n",
"\tROC_AUC_test: 1.0\n",
"\tCohen_kappa_test: 1.0\n",
"\tMCC_test: 1.0\n",
"\tConfusion_matrix: [[13 0]\n",
" [ 0 19]]\n",
"\n",
"Модель: KNN\n",
"\tPrecision_train: 1.0\n",
"\tPrecision_test: 1.0\n",
"\tRecall_train: 0.95\n",
"\tRecall_test: 0.9473684210526315\n",
"\tAccuracy_train: 0.967741935483871\n",
"\tAccuracy_test: 0.96875\n",
"\tF1_train: 0.9743589743589743\n",
"\tF1_test: 0.972972972972973\n",
"\tROC_AUC_test: 0.9736842105263157\n",
"\tCohen_kappa_test: 0.9359999999999999\n",
"\tMCC_test: 0.9379228369755696\n",
"\tConfusion_matrix: [[13 0]\n",
" [ 1 18]]\n",
"\n"
]
}
],
"source": [
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn import metrics\n",
"\n",
"\n",
"# Оценка качества различных моделей на основе метрик\n",
"def evaluate_models(models: dict[str, Any], \n",
" pipeline_end: Pipeline, \n",
" X_train: DataFrame, y_train, \n",
" X_test: DataFrame, y_test) -> dict[str, dict[str, Any]]:\n",
" results: dict[str, dict[str, Any]] = {}\n",
" \n",
" for model_name, model in models.items():\n",
" # Создание конвейера для текущей модели\n",
" model_pipeline = Pipeline(\n",
" [\n",
" (\"pipeline\", pipeline_end), \n",
" (\"model\", model),\n",
" ]\n",
" )\n",
" \n",
" # Обучение модели\n",
" model_pipeline.fit(X_train, y_train)\n",
" \n",
" # Предсказание для обучающей и тестовой выборки\n",
" y_train_predict = model_pipeline.predict(X_train)\n",
" y_test_predict = model_pipeline.predict(X_test)\n",
" \n",
" # Вычисление метрик для текущей модели\n",
" metrics_dict: dict[str, Any] = {\n",
" \"Precision_train\": metrics.precision_score(y_train, y_train_predict),\n",
" \"Precision_test\": metrics.precision_score(y_test, y_test_predict),\n",
" \"Recall_train\": metrics.recall_score(y_train, y_train_predict),\n",
" \"Recall_test\": metrics.recall_score(y_test, y_test_predict),\n",
" \"Accuracy_train\": metrics.accuracy_score(y_train, y_train_predict),\n",
" \"Accuracy_test\": metrics.accuracy_score(y_test, y_test_predict),\n",
" \"F1_train\": metrics.f1_score(y_train, y_train_predict),\n",
" \"F1_test\": metrics.f1_score(y_test, y_test_predict),\n",
" \"ROC_AUC_test\": metrics.roc_auc_score(y_test, y_test_predict),\n",
" \"Cohen_kappa_test\": metrics.cohen_kappa_score(y_test, y_test_predict),\n",
" \"MCC_test\": metrics.matthews_corrcoef(y_test, y_test_predict),\n",
" \"Confusion_matrix\": metrics.confusion_matrix(y_test, y_test_predict),\n",
" }\n",
" \n",
" # Сохранение результатов\n",
" results[model_name] = metrics_dict\n",
" \n",
" return results\n",
"\n",
"\n",
"# Выбранные модели для классификации\n",
"models_classification: dict[str, Any] = {\n",
" \"RandomForestClassifier\": RandomForestClassifier(random_state=42),\n",
" \"LogisticRegression\": LogisticRegression(max_iter=1000),\n",
" \"KNN\": KNeighborsClassifier(),\n",
"}\n",
"\n",
"results: dict[str, dict[str, Any]] = evaluate_models(models_classification,\n",
" pipeline_end,\n",
" X_df_train, y_df_train,\n",
" X_df_test, y_df_test)\n",
"\n",
"# Вывод результатов\n",
"for model_name, metrics_dict in results.items():\n",
" print(f\"Модель: {model_name}\")\n",
" for metric_name, value in metrics_dict.items():\n",
" print(f\"\\t{metric_name}: {value}\")\n",
" print()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Матрица ошибок:"
]
},
{
"cell_type": "code",
"execution_count": 392,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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wABJUokSJey5ltxmamuUXLx4Ua+++qo9g4oWLaqOHTvq7Nmz6b7Xm69z/tte37597dcbpUuX1tixY2W1Ot7G9Ny5c3ruuecUEBCgoKAgderUSTt27Eix3ld6uWO1WvXee+/p3nvvlZeXlwoVKqQXX3xRFy5ccHitbdu2KTIyUgUKFJC3t7dKlCihLl26OJzz9ddfq3r16vL391dAQIAqV66s999/3348rTVK5s2bp+rVq8vb21sFChTQs88+m2LqdfJ7OH78uFq2bCk/Pz8FBwerf//+SkxMTPdzBuAcRpQAOUTyRUm+fPkkSTExMfr444/Vrl07devWTZcvX9Ynn3yiyMhI/fLLLymmfXz55Ze6fPmyXnzxRVksFo0bN05PPvmkDh48aP9H+4oVK9S6dWtVrFhRUVFROnfunJ5//nkVLVrUoS3DMPT4449rzZo1euGFF1S1alUtX75cAwYM0PHjxzVp0iSH8zds2KDFixfr5ZdfliRFRUWpefPmev311zV16lT17NlTFy5c0Lhx49SlSxf99NNPKd7/zRdYefPmVWBgoKSkC7mRI0eqcePG6tGjh/bu3atp06bp119/1aZNmxyKEufOnVOzZs30zDPP6Nlnn1WhQoVktVr1+OOPa+PGjerevbsqVKigP/74Q5MmTdLff/+thQsXSpJ2796t5s2bq0qVKho1apQ8PT21f/9+bdq0SZJUoUIFjRo1SsOGDVP37t3tF30PPfSQ9u3bp7/++ktdunSRv7+/U3/nN1u5cqUOHjyo559/XiEhIdq9e7f+7//+T7t379bWrVtlsVgkSS+99JLmz5+vXr16qWLFijp37pw2btyoPXv2qFq1aoqLi1NkZKRu3LihV155RSEhITp+/LiWLFmiixcv2j/X/3ryyScVFBSkV1991T5c2s/PL82+fv755+rUqZMiIyM1duxYXb16VdOmTVOdOnW0fft2h8WBExISFBkZqTp16mj8+PF3bIQPMo5bEAJ3zu7du1W3bl0FBATo9ddfV968eTVjxgw1aNBA69atU82aNSVJx48fV8OGDWWxWDR48GD5+vrq448/dmq0x0cffaTevXvrqaeeUp8+fXT9+nXt3LlTP//8s9q3b68nn3xSf//9t7766itNmjRJBQoUkCQFBwen2l5sbKzq1q2rPXv2qEuXLqpWrZrOnj2rxYsX69ix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QzabI8MjStatW6fNmzerXLly9n3lypXThx9+qLp167q0cwAA4NYu6IzuV0P5yM++z5RsduVCb1yMAQCQeWSzKTI8oiQsLEzx8fEp9icmJio0NNQlnQIAAM7zko+MVK5uyGYAAICMy3Ch5N1339Urr7yibdu22fdt27ZNffr00fjx413aOQAAcGulVUV7td2+mKtkUjYnLxjnqi0D1q9frxYtWig0NFQWi0ULFy507JphaNiwYSpcuLC8vb3VuHFj7du375btTpkyRcWLF5eXl5dq1qypX375JUP9AgAgS5HNpnCqUJIvXz7lz59f+fPn1/PPP6/o6GjVrFlTnp6e8vT0VM2aNfX777+rS5cuZvcXAABIWmsssm9/6ldd1iX9rvWSpODg4FyXzVeuXFFERISmTJmS6vFx48bpgw8+0PTp0/Xzzz/L19dXkZGRun79epptzp07V/369dPw4cP1+++/KyIiQpGRkfr333/NehsAAOQauTmbnVqj5L333jO5GwAAICPKKiLFPqsS9Ze26/3335e3t7frXzQL50E3a9ZMzZo1S70pw9B7772nN998U0888YQk6bPPPlOhQoW0cOFCPfPMM6k+b+LEierWrZuef/55SdL06dO1dOlSffrppxo0aFDGOggAQFYgm03hVKGkU6dOZvcDAABkQKileIp9CUa8/tJ2tW/fXgEBAa5/URMuxmJiYhx2J49WzYhDhw7p1KlTaty4sX1fYGCgatasqS1btqR6MRYXF6fffvtNgwcPtu9zc3NT48aNtWXLlgy9PgAAWYZsNkWG1yj5r+vXrysmJsZhAwAAWSsnZXNYWJgCAwPtW1RUVIbbOHXqlCSpUKFCDvsLFSpkP3azs2fPKjExMUPPAQDgbkA238btga9cuaKBAwfqm2++0blz51IcT0xMdEnHAACAcxKNBO3THzqto5Kk8PBwx+OuymYTvrU6evSow+iXjH5jBQDAXY1sNkWGR5S8/vrr+umnnzRt2jR5enrq448/1siRIxUaGqrPPvvMjD4CAIB07NMfuqB/7euWfPjhh+Zkswkr6wcEBDhst3MxFhISIkk6ffq0w/7Tp0/bj92sQIECcnd3z9BzAADIdshmU2S4UPL9999r6tSpat26tfLkyaO6devqzTff1Ntvv605c+aY0UcAAJCOMzqhcrpPwQqVJNWqVeuuyuYSJUooJCREq1evtu+LiYnRzz//rFq1aqX6HA8PD1WvXt3hOVarVatXr07zOQAAwDk5PZszXCg5f/68SpYsKSmp0nT+/HlJUp06dbR+/XrX9g4AANxSguLkIz/744sXL0pyfTZbDNduGREbG6vo6GhFR0dLSlokLjo6WkeOHJHFYlHfvn01ZswYLV68WH/88Yc6duyo0NBQtWzZ0t5Go0aNNHnyZPvjfv366aOPPtLs2bO1Z88e9ejRQ1euXLGvtA8AQHZHNpsjw2uUlCxZUocOHVKxYsVUvnx5ffPNN6pRo4a+//57BQUFmdBFAACQHm/56ZquyF9BkqQFCxaoYcOGuSqbt23bpoYNG9of9+vXT1LSnflmzZql119/XVeuXFH37t118eJF1alTR8uWLZOXl5f9OQcOHNDZs2ftj9u2baszZ85o2LBhOnXqlKpWraply5alWEQOAACklJuz2WIYRobqRpMmTZK7u7t69+6tVatWqUWLFjIMQ/Hx8Zo4caL69OljVl+RzcXExCgwMFC1Fr6iPL5334I/yB08Hzmc1V0AMuwf429ZZFGoimutFsnLy8ul2Zz8+73Y2DFy8/a69ROcYL12XUcGvqlLly6ZcytjSCKbkTuQzcjJEox4rdUil+cd2WyuDI8oefXVV+1/bty4sf766y/99ttvKl26tKpUqeLSzgEAgFsLt5SVlHQxJkm//vqr/v77b7IZAADgNmS4UHKz8PDwFLchBAAAWadYsWKqVKlSVncDAAAgR3KqUPLBBx843WDv3r1vuzMAAMA5R4x9KfZZlShJmj59usP8X1dls0UZX+gtvbYAAEDmkM3mcKpQMmnSJKcas1gsFEogz5ZHlMeSN6u7AdyW5Seis7oLgFNK1TicYp/VkHRMmjJlitzckm5sRzZDIpuRs5HNyMliLluVr2xW9wIZ5VSh5NChQ2b3AwAAZMCBX4qn2Jd0MXZQf/zxhzmLsBmWpM1VbQEAgMwhm02R6TVKAADAXcKwba5qCwAAZA7ZbAq3rO4AAAAAAABAdsGIEgAA4By+tQIAIHshm01BoQQAADjFYrhwZX0uxgAAyDSy2RxMvQEAAAAAALC5rULJhg0b9Oyzz6pWrVo6fvy4JOnzzz/Xxo0bXdo5AADgnA1br6l7/38lSSdOnJBkQjYbLt4AAEDmkM2myHCh5Ntvv1VkZKS8vb21fft23bhxQ5J06dIlvf322y7vIAAASN+3S2LVrN0JeXsm3daPbAYAALh9GS6UjBkzRtOnT9dHH32kvHnz2vfXrl1bv//+u0s7BwAAbu3t989r6thgvf9WsMN+l2cz31oBAJC9kM2myPBirnv37lW9evVS7A8MDNTFixdd0ScAAJABe/fHq14t7xT7XZ3NLBgHAED2QjabI8MjSkJCQrR///4U+zdu3KiSJUu6pFMAAMB5IQXdtf9QfIr9ZDMAAEDGZbhQ0q1bN/Xp00c///yzLBaLTpw4oTlz5qh///7q0aOHGX0EAADp6NohQK8OPattO65Lkk6dOmVONhsW124AACBzyGZTZHjqzaBBg2S1WtWoUSNdvXpV9erVk6enp/r3769XXnnFjD4CAIB0DHwln6xWqWWnk5KkZs2akc0AAAC3KcOFEovFoiFDhmjAgAHav3+/YmNjVbFiRfn5+ZnRPwAAcAsWi0Vv9M2v7s8FqlClQ1q9erUeeOAB12ezKxd6Yx40AACZRzabIsOFkmQeHh6qWLGiK/sCAAAywcMjachs9erVTfkCgwXjAADIXshmc2S4UNKwYUNZLGnPXfrpp58y1SEAAJAxjVofl8UiJSQmXeE0b95cefL8L+LJZgAAAOdluFBStWpVh8fx8fGKjo7Wrl271KlTJ1f1CwAAOCniXg9JUly8oQ1br6t8+fL6888/XZ/NDO8FACB7IZtNkeFCyaRJk1LdP2LECMXGxma6QwAAIGMmjgqWJMVctmrarBiNHz9eAQEBZDMAAMBtyPDtgdPy7LPP6tNPP3VVcwAAIJNcns3G/+ZCZ3bjWysAAFyAbDbFbS/merMtW7bIy8vLVc0BAIBMcnk2M7wXAIDshWw2RYYLJU8++aTDY8MwdPLkSW3btk1Dhw51WccAAIBzWnc5KUlKSEi6wunQoYPOnDlDNgMAANyGDBdKAgMDHR67ubmpXLlyGjVqlB555BGXdQwAADgnMCBpJm18fFKhJCgoSPfee6/rs5lvrQAAyF7IZlNkqFCSmJio559/XpUrV1a+fPnM6hMAAHBSYqKhzm0DVLmCh9zdLfpyQaymTJmigIAAl7+WfQ6zi9oCAACZQzabI0OLubq7u+uRRx7RxYsXTeoOAADICHd3i5q2O6GLMdas7goAAECukOG73lSqVEkHDx40oy8AAOA2VCrnoYP/xGd1NwAAAHKFDBdKxowZo/79+2vJkiU6efKkYmJiHDYAAHBnjRqYX6+POqtla65IEtkMAACQCU6vUTJq1Ci99tprevTRRyVJjz/+uCwWi/24YRiyWCxKTEx0fS8BAEAKoyeeV7+XgtT82aS73rR/6bQkKTw8XJIJ2cyCcQAAZC9ksymcLpSMHDlSL730ktasWWNmfwAAgJNGTTivFzsGaPX8IpKkq9esav7sSX3//ffy9fV1+euxYBwAANkL2WwOpwslhpH0qdWvX9+0zgAAAOfZoln1H/KWJMVcTlrQtU6dOqbc9QYAAOBukKHbA/93qg0AAMh6Ft3hbObbJgAAshey2eUyVCgpW7bsLYsl58+fz1SHAACA88rX+UfJ0Zw8wiQ8PNwhr8lmAAAA52WoUDJy5EgFBgaa1RcAAJBBI/rnV0BA0k3srl8z1HPQGUVFRcnb29v1L8aCcQAAZC9ksykyVCh55plnVLBgQbP6AgAAMqhtSz8VLJAU5zGXreo56Izat29vyholLBgHAED2Qjabw83ZE1mfBACA7IVoBgAAcL0M3/UGAABkD3c8mhneCwBA9kI2m8LpQonVajWzHwAAIIMSTpS+o6/H8F4AALIXstkcTk+9AQAAAAAAyO0ytJgrAAC4izG8FwCA7IVsNgUjSgAAAAAAAGwYUQIAAJzDt1YAAGQvZLMpGFECAACckrxgnKu2jChevLgsFkuK7eWXX071/FmzZqU418vLywWfAgAA2QfZbA5GlAAAgGzv119/VWJiov3xrl271KRJE7Vp0ybN5wQEBGjv3r32xxaLxdQ+AgBwN8nN2UyhBAAAOMeE4b0xMTEOuz09PeXp6Zni9ODgYIfH77zzjkqVKqX69eun+RIWi0UhISGZ7ysAANkV2WwKpt4AAIAsExYWpsDAQPsWFRV1y+fExcXpiy++UJcuXdL9Jio2Nlbh4eEKCwvTE088od27d7uy6wAA5EpkMyNKAACAs0z41uro0aMKCAiw707tG6ubLVy4UBcvXlTnzp3TPKdcuXL69NNPVaVKFV26dEnjx4/XQw89pN27d6to0aKZ7T0AANkD2WwKCiUAAMApt7PQW3ptSUlzlf97MeaMTz75RM2aNVNoaGia59SqVUu1atWyP37ooYdUoUIFzZgxQ6NHj76tPgMAkN2QzeagUAIAAHKMf/75R6tWrdKCBQsy9Ly8efPqvvvu0/79+03qGQAAd6fcmM2sUQIAAJxjuHi7DTNnzlTBggX12GOPZeh5iYmJ+uOPP1S4cOHbe2EAALIjstkUjCgBAABOMWN4b0ZYrVbNnDlTnTp1Up48jpcwHTt2VJEiRewLzo0aNUoPPvigSpcurYsXL+rdd9/VP//8o65du7qi+wAAZAtkszkolAAAgBxh1apVOnLkiLp06ZLi2JEjR+Tm9r+BshcuXFC3bt106tQp5cuXT9WrV9fmzZtVsWLFO9llAABytdyazRRKAACAc0xYWT8jHnnkERlG6k9cu3atw+NJkyZp0qRJt9ExAAByELLZFKxRAgAAAAAAYMOIEgAA4Jws/tYKAADchGw2BYUSAADgFIttc1VbAAAgc8hmczD1BgAAAAAAwIYRJQAAwDkM7wUAIHshm03BiBIAAAAAAAAbRpQAAACnWIykzVVtAQCAzCGbzUGhBAAAOIfhvQAAZC9ksymYegMAAAAAAGDDiBIAAOA8vm0CACB7IZtdjkIJAABwCvOgAQDIXshmczD1BgAAAAAAwIYRJQAAwDksGAcAQPZCNpuCESUAAAAAAAA2jCgBAABOYR40AADZC9lsDgolAADAOQzvBQAgeyGbTcHUGwAAAAAAABtGlAAAAKcwvBcAgOyFbDYHI0oAAAAAAABsGFECAACcwzxoAACyF7LZFBRKAACAc7gYAwAgeyGbTcHUGwAAAAAAABtGlAAAAKewYBwAANkL2WwOCiUAAMA5DO8FACB7IZtNwdQbAAAAAAAAG0aUAAAAp1gMQxbDNV83uaodAADuZmSzORhRAgAAAAAAYMOIEgAA4BzmQQMAkL2QzaagUAIAAJzCyvoAAGQvZLM5mHoDAAAAAABgw4gSAADgHIb3AgCQvZDNpmBECQAAAAAAgE2uL5SMGDFCVatWzepuZJkGDRqob9++Wd0NuECLzmc1++c/9f3BnXp/yT6Vq3o1q7sEpOqPrb4a1rGE2t13ryJDq2rzj4EOxy+cyaPxfYup3X336vGSVfRG+5I6ftAji3qLjEieB+2q7W5FNuceZDNyCrI59yKbzZHlhZKjR4+qS5cuCg0NlYeHh8LDw9WnTx+dO3cuw21ZLBYtXLjQYV///v21evVqF/U2bcWLF5fFYkmxvfPOO6a/dnoWLFig0aNHZ2kfkHn1H7+g7sNPaM7EEL0cWVYH//TSW18eVOA98VndNSCF61fdVPLea+r19rEUxwxDGtmlhE7+46ERMw9qyoq9KlQ0ToPaltb1q1keSbC5OZvvvffepAOGizeTkc0wE9mMnIRszsVyWDbnFFn6k3/w4EHdf//92rdvn7766ivt379f06dP1+rVq1WrVi2dP38+06/h5+ene+65xwW9vbVRo0bp5MmTDtsrr7xi2uvFxcXd8pz8+fPL39/ftD7gzniy+1kt+zK/VszNryP7vPTBwKK6cc2iyHaZ/38EcLUHHr6szgNPqXazSymOHT/oqT2/+eqVd46pXNVrCit9Q6+8c0w3rlu05rugO99ZpJBaNr/33ntZ3a3bRjbDLGQzchKyGciYLC2UvPzyy/Lw8NCKFStUv359FStWTM2aNdOqVat0/PhxDRkyxH5u8eLFNXr0aLVr106+vr4qUqSIpkyZ4nBcklq1aiWLxWJ/fPPUG6vVqlGjRqlo0aLy9PRU1apVtWzZMvvxw4cPy2KxaMGCBWrYsKF8fHwUERGhLVu23PL9+Pv7KyQkxGHz9fWVlHShFhoa6jBS5rHHHlPDhg1ltVolSRs3blTdunXl7e2tsLAw9e7dW1euXEnxGXTs2FEBAQHq3r27JGnTpk1q0KCBfHx8lC9fPkVGRurChQuSUg7vnTp1qsqUKSMvLy8VKlRITz31lMNnExUVpRIlSsjb21sRERGaP3/+Ld83zJUnr1VlqlzV7xv+d1FtGBZt3+CvitUZ4oucJT7OIkny8LTa97m5SXk9DO3+1S+ruoX/SC2bmzRpIsm84b1kM9mc05DNyE3I5pyNqTfmyLJCyfnz57V8+XL17NlT3t7eDsdCQkLUoUMHzZ07V4bxv7+td999VxEREdq+fbsGDRqkPn36aOXKlZKkX3/9VZI0c+ZMnTx50v74Zu+//74mTJig8ePHa+fOnYqMjNTjjz+uffv2OZw3ZMgQ9e/fX9HR0SpbtqzatWunhISE236/Q4YMUfHixdW1a1dJ0pQpU7R582bNnj1bbm5uOnDggJo2barWrVtr586dmjt3rjZu3KhevXo5tDN+/Hj7ZzB06FBFR0erUaNGqlixorZs2aKNGzeqRYsWSkxMTNGHbdu2qXfv3ho1apT27t2rZcuWqV69evbjUVFR+uyzzzR9+nTt3r1br776qp599lmtW7cu1fd048YNxcTEOGxwvYD8iXLPI10843iTqgtn8yhf8O3/TAJZIaz0dRUsEqdPowrr8kV3xcdZNHdyQZ096aHzp7kRW1ZLL5vNRDaTzTkN2YzchGwGUsqyn/x9+/bJMAxVqFAh1eMVKlTQhQsXdObMGRUsWFCSVLt2bQ0aNEiSVLZsWW3atEmTJk1SkyZNFBwcLEkKCgpSSEhImq87fvx4DRw4UM8884wkaezYsVqzZo3ee+89hxEq/fv312OPPSZJGjlypO69917t379f5cuXT7PtgQMH6s0333TY9+OPP6pu3bpyd3fXF198oapVq2rQoEH64IMP9PHHH6tYsWKSki6EOnToYP+GqUyZMvrggw9Uv359TZs2TV5eXpKkhx9+WK+99pq9/fbt2+v+++/X1KlT7fvsc8lvcuTIEfn6+qp58+by9/dXeHi47rvvPklJF1Zvv/22Vq1apVq1akmSSpYsqY0bN2rGjBmqX79+ivaioqI0cuTIND8PALhZnrzSsE8OaWK/YnqqYmW5uRu6r+5lPfBwjAy+xchyt8pms25BSDaTzQCyDtmcw5mUzXe7LC8RGhn4vy/5IuG/jzMybzomJkYnTpxQ7dq1HfbXrl1bO3bscNhXpUoV+58LFy4sSfr333/TvRgbMGCAOnfu7LCvSJEi9j+XLFlS48eP14svvqi2bduqffv29mM7duzQzp07NWfOHPs+wzBktVp16NAh+0Xr/fff79B+dHS02rRpk97btmvSpInCw8NVsmRJNW3aVE2bNlWrVq3k4+Oj/fv36+rVq/bh1cni4uLsF2w3Gzx4sPr162d/HBMTo7CwMKf6AufFnHdXYoIUdNM3VPkKJOjCmSz/XxjIsDJVrmnaqr26EuOm+HiLgu5JVO/HyqhsFYarZxfpZbOrh+WSzWRzTkQ2I7chm3M2psy4Xpb9Ji9durQsFov27NmjVq1apTi+Z88e5cuXzz5S5E7Lmzev/c8WS9K8veT5ymkpUKCASpcune4569evl7u7uw4fPqyEhATlyZP0VxAbG6sXX3xRvXv3TvGc5G+2JNnnVSfLyNBof39//f7771q7dq1WrFihYcOGacSIEfr1118VGxsrSVq6dKnDBaQkeXp6ptqep6dnmsfgOgnxbtq300f31bmsLcuSbuVmsRiqWidWi2fdmYWKATP4BiT9Tj1+0EP7dvio04BTWdwj3CqbsxrZ/D9kc9Yim5Fbkc1Akixbo+See+5RkyZNNHXqVF27ds3h2KlTpzRnzhy1bdvWfiEkSVu3bnU4b+vWrQ7Dg/PmzZvq/N9kAQEBCg0N1aZNmxz2b9q0SRUrVszM23HK3LlztWDBAq1du1ZHjhxxuDVgtWrV9Oeff6p06dIpNg+PtO9hXqVKlQzd/jhPnjxq3Lixxo0bp507d+rw4cP66aefVLFiRXl6eurIkSMpXp9vorLegv8roGbtz6txm/MKK31dr7xzTF4+Vq34On9Wdw1I4doVNx3Y5a0Du5L+sXjqqIcO7PLWv8eS/pG7/vtA7djsp5P/eGjzsgANfqa0ajW9pOoNLmdlt6H0s1lS0j0kXbmJbJbI5pyKbEZOQjbnYiZkM7J46s3kyZP10EMPKTIyUmPGjFGJEiW0e/duDRgwQEWKFNFbb73lcP6mTZs0btw4tWzZUitXrtS8efO0dOlS+/HixYtr9erVql27tjw9PZUvX74UrzlgwAANHz5cpUqVUtWqVTVz5kxFR0c7DKu9XZcvX9apU45VVx8fHwUEBOjYsWPq0aOHxo4dqzp16mjmzJlq3ry5mjVrpgcffFADBw7Ugw8+qF69eqlr167y9fXVn3/+qZUrV2ry5MlpvubgwYNVuXJl9ezZUy+99JI8PDy0Zs0atWnTRgUKFHA4d8mSJTp48KDq1aunfPny6YcffpDValW5cuXk7++v/v3769VXX5XValWdOnV06dIlbdq0SQEBAerUqVOmPx/cvnWL8ynwnkR1HHBK+YITdHC3t4Z0KKGLZ/Pe+snAHfb3Dh+9/tT/vsGfMSLpm/AmT59X//eO6PzpvJoxooguns2j/AUT1LjNebXvezqruoubpJbNv/zyiyTXroj/33bIZrI5JyKbkZOQzbmXWdl8t8vSQkmZMmW0bds2DR8+XE8//bTOnz+vkJAQtWzZUsOHD1f+/I4V+ddee03btm3TyJEjFRAQoIkTJyoyMtJ+fMKECerXr58++ugjFSlSRIcPH07xmr1799alS5f02muv6d9//1XFihW1ePFilSlTJtPvZ9iwYRo2bJjDvhdffFHTpk1T586dVaNGDftK+ZGRkerRo4eeffZZRUdHq0qVKlq3bp2GDBmiunXryjAMlSpVSm3btk33NcuWLasVK1bojTfeUI0aNeTt7a2aNWuqXbt2Kc4NCgrSggULNGLECF2/fl1lypTRV199ZV9gbvTo0QoODlZUVJQOHjyooKAgVatWTW+88UamPxtk3uKZBbR4ZoFbnwhksYiHYrX8RHSax1t2PauWXc/euQ4hQ1LL5uRF1c1CNpPNORXZjJyCbAYyxmJkZDXVLFS8eHH17dvXvvI8sp+YmBgFBgaqgZ5QHgvfpiBnSu8iAsjuYi5bla/sQV26dEkBAQGua9f2+/3+1mOUJ6+XS9pMiL+ubd++6fK+whHZjNyAbEZORjbnTFm2RgkAAICzRowYIYvF4rCld7cbSZo3b57Kly8vLy8vVa5cWT/88MMd6i0AALlfbs5mCiUAAMApFqtrt4y69957dfLkSfu2cePGNM/dvHmz2rVrpxdeeEHbt29Xy5Yt1bJlS+3atSsTnwAAANkL2WyOHHOj99TWGwEAAHeQYdtc1ZaShg7/V3q3t82TJ49CQkKcav79999X06ZNNWDAAElJa30kL8I6ffr02+83AADZCdlsCkaUAACALBMWFqbAwED7FhUVlea5+/btU2hoqEqWLKkOHTroyJEjaZ67ZcsWNW7c2GFfZGSktmzZ4rK+AwCQG5HNOWhECQAAyFpm3ILw6NGjDgvGpfWNVc2aNTVr1iyVK1dOJ0+e1MiRI1W3bl3t2rVL/v7+Kc4/deqUChUq5LCvUKFCKW4VDABATkY2m4NCCQAAyDIBAQFOrazfrFkz+5+rVKmimjVrKjw8XN98841eeOEFM7sIAMBdhWymUAIAAJxlGEmbq9rKhKCgIJUtW1b79+9P9XhISIhOnz7tsO/06dNOz6MGACBHIJtNwRolAADAKcnDe121ZUZsbKwOHDigwoULp3q8Vq1aWr16tcO+lStXqlatWpl7YQAAshGy2RwUSgAAQLbXv39/rVu3TocPH9bmzZvVqlUrubu7q127dpKkjh07avDgwfbz+/Tpo2XLlmnChAn666+/NGLECG3btk29evXKqrcAAECukpuzmak3AADAOSbcgtBZx44dU7t27XTu3DkFBwerTp062rp1q4KDgyVJR44ckZvb/77/eeihh/Tll1/qzTff1BtvvKEyZcpo4cKFqlSpkoveAAAA2QDZbAoKJQAAwClmrKzvrK+//jrd42vXrk2xr02bNmrTpk3GXggAgByEbDYHU28AAAAAAABsGFECAACck41W1gcAACKbTcKIEgAAAAAAABtGlAAAAKdk5TxoAACQEtlsDgolAADAOVm4sj4AAEgF2WwKpt4AAAAAAADYMKIEAAA4heG9AABkL2SzORhRAgAAAAAAYMOIEgAA4ByrkbS5qi0AAJA5ZLMpKJQAAADnsGAcAADZC9lsCqbeAAAAAAAA2DCiBAAAOMUiFy4Y55pmAAC4q5HN5qBQAgAAnGMYSZur2gIAAJlDNpuCqTcAAAAAAAA2jCgBAABOsRguHN7Ll1YAAGQa2WwORpQAAAAAAADYMKIEAAA4h1sQAgCQvZDNpqBQAgAAnGIxDFlctNCbq9oBAOBuRjabg6k3AAAAAAAANowoAQAAzrHaNle1BQAAModsNgUjSgAAAAAAAGwYUQIAAJzCPGgAALIXstkcFEoAAIBzWFkfAIDshWw2BVNvAAAAAAAAbBhRAgAAnGMYSZur2gIAAJlDNpuCQgkAAHCKxUjaXNUWAADIHLLZHEy9AQAAAAAAsGFECQAAcA7DewEAyF7IZlMwogQAAAAAAMCGESUAAMApFmvS5qq2AABA5pDN5qBQAgAAnMPwXgAAshey2RRMvQEAAAAAALBhRAkAAHCOYdtc1RYAAMgcstkUjCgBAAAAAACwYUQJAABwisUwZHHR/GVXtQMAwN2MbDYHhRIAAOAcFowDACB7IZtNwdQbAAAAAAAAG0aUAAAA5xiSrC5sCwAAZA7ZbAoKJQAAwCnMgwYAIHshm83B1BsAAAAAAAAbRpQAAADnGHLhgnGuaQYAgLsa2WwKRpQAAAAAAADYMKIEAAA4h1sQAgCQvZDNpmBECQAAcI7VxVsGREVF6YEHHpC/v78KFiyoli1bau/evek+Z9asWbJYLA6bl5dXxl4YAIDsjGw2BYUSAACQ7a1bt04vv/yytm7dqpUrVyo+Pl6PPPKIrly5ku7zAgICdPLkSfv2zz//3KEeAwCQu+XmbGbqDQAAcEpW3oJw2bJlDo9nzZqlggUL6rffflO9evXSfh2LRSEhIbfVRwAAsjuy2RyMKAEAAFkmJibGYbtx44ZTz7t06ZIkKX/+/OmeFxsbq/DwcIWFhemJJ57Q7t27M91nAAByM7KZQgkAAHBW8oJxrtokhYWFKTAw0L5FRUXdshtWq1V9+/ZV7dq1ValSpTTPK1eunD799FMtWrRIX3zxhaxWqx566CEdO3bMZR8JAABZimw2BVNvAACAc0xYWf/o0aMKCAiw7/b09LzlU19++WXt2rVLGzduTPe8WrVqqVatWvbHDz30kCpUqKAZM2Zo9OjRt9lxAACyEbLZFBRKAABAlgkICHC4GLuVXr16acmSJVq/fr2KFi2aodfKmzev7rvvPu3fvz+j3QQA4K5BNjP1BgAAOMuE4b3Ov7ShXr166bvvvtNPP/2kEiVKZLj7iYmJ+uOPP1S4cOEMPxcAgGyJbDYFI0oAAIBzrJIsLmwrA15++WV9+eWXWrRokfz9/XXq1ClJUmBgoLy9vSVJHTt2VJEiRexzqUeNGqUHH3xQpUuX1sWLF/Xuu+/qn3/+UdeuXV30JgAAyGJksykolAAAgGxv2rRpkqQGDRo47J85c6Y6d+4sSTpy5Ijc3P43WPbChQvq1q2bTp06pXz58ql69eravHmzKlaseKe6DQBArpWbs5lCCQAAcIrFMGRx0YJxGW3HcOL8tWvXOjyeNGmSJk2alKHXAQAgJyGbzcEaJQAAAAAAADaMKAEAAM4x4RaEAAAgE8hmU1AoAQAAzrEaksVFF1FWLsYAAMg0stkUTL0BAAAAAACwYUQJAABwDsN7AQDIXshmUzCiBAAAAAAAwIYRJQAAwEku/NZKfGsFAEDmkc1moFACAACcw/BeAACyF7LZFEy9AQAAAAAAsGFECQAAcI7VkMuG5XILQgAAMo9sNgUjSgAAAAAAAGwYUQIAAJxjWJM2V7UFAAAyh2w2BYUSAADgHBaMAwAgeyGbTcHUGwAAAAAAABtGlAAAAOewYBwAANkL2WwKCiUAAMA5DO8FACB7IZtNQaEELmPY/sdKULzLiprAnRZzmUWskHPFxCb9/Bpc6MCGbEZuQDYjJyObcyYKJXCZy5cvS5I26ocs7glw+/KVzeoeAJl3+fJlBQYGur5hQy781so1zSB9ZDNyA7IZuQHZnLNQKIHLhIaG6ujRo/L395fFYsnq7uQ6MTExCgsL09GjRxUQEJDV3QEyjJ9h8xmGocuXLys0NDSru4Jsgmw2F7/XkBvwc2wusjlnolACl3Fzc1PRokWzuhu5XkBAACGGHI2fYXOZ8m1VMuZB5zhk853B7zXkBvwcm4dsznkolAAAAOdYrZJctFaAlTUHAADINLLZFG5Z3QEAAAAAAIDsghElQA7h6emp4cOHy9PTM6u7AtwWfoZzAYb3Ag74vYbcgJ/jHI5sNoXF4D5FAAAgHTExMQoMDFTj4BeUx83DJW0mWOO06swnunTpEnPiAQDIILLZXIwoAQAAzuFbKwAAshey2RQUSgAAgHOshiQXXURZuRgDACDTyGZTsJgrAAAAAACADYUSIIeaNWuWgoKCsrobyOFGjBihqlWrZnU3skyDBg3Ut2/frO5GjmEYVpduQG5DNsMVyGayOSPIZnNQKAGyyJkzZ9SjRw8VK1ZMnp6eCgkJUWRkpDZt2pTVXUM2cvToUXXp0kWhoaHy8PBQeHi4+vTpo3PnzmW4LYvFooULFzrs69+/v1avXu2i3qatePHislgsKbZ33nnH9NdOz4IFCzR69Ogs7UOOYhhJw3JdsTEPGtkQ2QxnkM3mIpsziGw2BWuUAFmkdevWiouL0+zZs1WyZEmdPn1aq1evvq2QRe508OBB1apVS2XLltVXX32lEiVKaPfu3RowYIB+/PFHbd26Vfnz58/Ua/j5+cnPz89FPU7fqFGj1K1bN4d9/v7+pr1eXFycPDzSXwU+s58fgNyFbMatkM2ZQzYjp2BECZAFLl68qA0bNmjs2LFq2LChwsPDVaNGDQ0ePFiPP/64JGnixImqXLmyfH19FRYWpp49eyo2NjbddhctWqRq1arJy8tLJUuW1MiRI5WQkHAn3hJM8PLLL8vDw0MrVqxQ/fr1VaxYMTVr1kyrVq3S8ePHNWTIEPu5xYsX1+jRo9WuXTv5+vqqSJEimjJlisNxSWrVqpUsFov98c3De61Wq0aNGqWiRYvK09NTVatW1bJly+zHDx8+LIvFogULFqhhw4by8fFRRESEtmzZcsv34+/vr5CQEIfN19dXUtKFWmhoqMM/Rh577DE1bNhQVmvSMNCNGzeqbt268vb2VlhYmHr37q0rV66k+Aw6duyogIAAde/eXZK0adMmNWjQQD4+PsqXL58iIyN14cIFSSmH906dOlVlypSRl5eXChUqpKeeesrhs4mKilKJEiXk7e2tiIgIzZ8//5bvO1dJXlnfVRuQjZDNcAbZTDZnO2SzKSiUAFkg+ZuChQsX6saNG6me4+bmpg8++EC7d+/W7Nmz9dNPP+n1119Ps80NGzaoY8eO6tOnj/7880/NmDFDs2bN0ltvvWXW24CJzp8/r+XLl6tnz57y9vZ2OBYSEqIOHTpo7ty5Mv4TaO+++64iIiK0fft2DRo0SH369NHKlSslSb/++qskaebMmTp58qT98c3ef/99TZgwQePHj9fOnTsVGRmpxx9/XPv27XM4b8iQIerfv7+io6NVtmxZtWvXLlMX/kOGDFHx4sXVtWtXSdKUKVO0efNmzZ49W25ubjpw4ICaNm2q1q1ba+fOnZo7d642btyoXr16ObQzfvx4+2cwdOhQRUdHq1GjRqpYsaK2bNmijRs3qkWLFkpMTEzRh23btql3794aNWqU9u7dq2XLlqlevXr241FRUfrss880ffp07d69W6+++qqeffZZrVu37rbfN4Dsg2zGrZDNZDPuIgaALDF//nwjX758hpeXl/HQQw8ZgwcPNnbs2JHm+fPmzTPuuece++OZM2cagYGB9seNGjUy3n77bYfnfP7550bhwoVd3neYb+vWrYYk47vvvkv1+MSJEw1JxunTpw3DMIzw8HCjadOmDue0bdvWaNasmf1xau0NHz7ciIiIsD8ODQ013nrrLYdzHnjgAaNnz56GYRjGoUOHDEnGxx9/bD++e/duQ5KxZ8+eNN9PeHi44eHhYfj6+jps69evt59z4MABw9/f3xg4cKDh7e1tzJkzx37shRdeMLp37+7Q5oYNGww3Nzfj2rVr9tdo2bKlwznt2rUzateunWa/6tevb/Tp08cwDMP49ttvjYCAACMmJibFedevXzd8fHyMzZs3O+x/4YUXjHbt2qXZfm5x6dIlQ5LRyL+DERnwvEu2Rv4dDEnGpUuXsvrtAXZkM9JDNpPN2QnZbC7WKAGySOvWrfXYY49pw4YN2rp1q3788UeNGzdOH3/8sTp37qxVq1YpKipKf/31l2JiYpSQkKDr16/r6tWr8vHxSdHejh07tGnTJodvqRITE9N9DrI/IwNDIGvVqpXi8Xvvvef082NiYnTixAnVrl3bYX/t2rW1Y8cOh31VqlSx/7lw4cKSpH///Vfly5dPs/0BAwaoc+fODvuKFCli/3PJkiU1fvx4vfjii2rbtq3at29vP7Zjxw7t3LlTc+bMse8zDENWq1WHDh1ShQoVJEn333+/Q/vR0dFq06ZNem/brkmTJgoPD1fJkiXVtGlTNW3aVK1atZKPj4/279+vq1evqkmTJg7PiYuL03333edU+7lC0jW9C9sCsheyGc4gm5OQzdkE2WwKCiVAFvLy8lKTJk3UpEkTDR06VF27dtXw4cPVoEEDNW/eXD169NBbb72l/Pnza+PGjXrhhRcUFxeX6oVVbGysRo4cqSeffDLV10HOUrp0aVksFu3Zs0etWrVKcXzPnj3Kly+fgoODs6B3Ut68ee1/tlgskmSfr5yWAgUKqHTp0umes379erm7u+vw4cNKSEhQnjxJMRUbG6sXX3xRvXv3TvGcYsWK2f+cPK862c1Do9Pj7++v33//XWvXrtWKFSs0bNgwjRgxQr/++qt9DYKlS5c6XEBKkqenp9OvASD7I5uRFrKZbMbdgzVKgGykYsWKunLlin777TdZrVZNmDBBDz74oMqWLasTJ06k+9xq1app7969Kl26dIrNzY3/1XOae+65R02aNNHUqVN17do1h2OnTp3SnDlz1LZtW/uFkCRt3brV4bytW7fav82Rki6gUpv/mywgIEChoaEpboO5adMmVaxYMTNvxylz587VggULtHbtWh05csTh1oDVqlXTn3/+merPd3qr51epUiVDt1jMkyePGjdurHHjxmnnzp06fPiwfvrpJ1WsWFGenp46cuRIitcPCwvL1PvOSQyr1aUbkBOQzUhGNpPN2RHZbA5GlABZ4Ny5c2rTpo26dOmiKlWqyN/fX9u2bdO4ceP0xBNPqHTp0oqPj9eHH36oFi1aaNOmTZo+fXq6bQ4bNkzNmzdXsWLF9NRTT8nNzU07duzQrl27NGbMmDv0zuBKkydP1kMPPaTIyEiNGTPG4RaERYoUSbEY4KZNmzRu3Di1bNlSK1eu1Lx587R06VL78eLFi2v16tWqXbu2PD09lS9fvhSvOWDAAA0fPlylSpVS1apVNXPmTEVHRzsMq71dly9f1qlTpxz2+fj4KCAgQMeOHVOPHj00duxY1alTRzNnzlTz5s3VrFkzPfjggxo4cKAefPBB9erVS127dpWvr6/+/PNPrVy5UpMnT07zNQcPHqzKlSurZ8+eeumll+Th4aE1a9aoTZs2KlCggMO5S5Ys0cGDB1WvXj3ly5dPP/zwg6xWq8qVKyd/f3/1799fr776qqxWq+rUqaNLly5p06ZNCggIUKdOnTL9+QDIWmQznEE2k824O1DKBrKAn5+fatasqUmTJqlevXqqVKmShg4dqm7dumny5MmKiIjQxIkTNXbsWFWqVElz5sxRVFRUum1GRkZqyZIlWrFihR544AE9+OCDmjRpksLDw+/Qu4KrlSlTRtu2bVPJkiX19NNPq1SpUurevbsaNmyoLVu2KH/+/A7nv/baa9q2bZvuu+8+jRkzRhMnTlRkZKT9+IQJE7Ry5UqFhYWlOXe3d+/e6tevn1577TVVrlxZy5Yt0+LFi1WmTJlMv59hw4apcOHCDtvrr78uwzDUuXNn1ahRw75SfmRkpHr06KFnn31WsbGxqlKlitatW6e///5bdevW1X333adhw4YpNDQ03dcsW7asVqxYoR07dqhGjRqqVauWFi1aZB82/F9BQUFasGCBHn74YVWoUEHTp0/XV199pXvvvVeSNHr0aA0dOlRRUVGqUKGCmjZtqqVLl6pEiRKZ/mxyDG5BiFyMbIYzyGayOdshm01hMTKyGhEAIFsqXry4+vbtq759+2Z1V5ALxcTEKDAwUA97Pq08lrSHU2dEghGnn258o0uXLikgIMAlbQJAdkI2w0xks7kYUQIAAAAAAGDDGiUAAMA5hiHJRQu9MaAVAIDMI5tNQaEEAHKBw4cPZ3UXcBcwrIYMi2suopj5CyC3I5txJ5DN5mDqDQAAAAAAgA0jSgAAgHMMq1w3vNdF7QAAcDcjm03BiBIAAJBjTJkyRcWLF5eXl5dq1qypX375Jd3z582bp/Lly8vLy0uVK1fWDz/8cId6CgDA3SE3ZjOFEgAA4BTDarh0y6i5c+eqX79+Gj58uH7//XdFREQoMjJS//77b6rnb968We3atdMLL7yg7du3q2XLlmrZsqV27dqV2Y8CAIBsgWw2h8VgxRYAAJCOmJgYBQYGqoGeUB5LXpe0mWDEa60W6dKlSwoICHDqOTVr1tQDDzygyZMnS5KsVqvCwsL0yiuvaNCgQSnOb9u2ra5cuaIlS5bY9z344IOqWrWqpk+f7pL3AQBAViCbzcWIEgA5SufOndWyZUv74wYNGqhv3753vB9r166VxWLRxYsX0zzHYrFo4cKFTrc5YsQIVa1aNVP9Onz4sCwWi6KjozPVDpCaBMUrwXDRpnhJSRd6/91u3LiR6mvHxcXpt99+U+PGje373Nzc1LhxY23ZsiXV52zZssXhfEmKjIxM83wAt4dsTh/ZDDORzeZgMVcAmda5c2fNnj1bkpQ3b14VK1ZMHTt21BtvvKE8ecz9NbNgwQLlzetcFX3t2rVq2LChLly4oKCgIFP7BeQmHh4eCgkJ0cZTrp1D7Ofnp7CwMId9w4cP14gRI1Kce/bsWSUmJqpQoUIO+wsVKqS//vor1fZPnTqV6vmnTp3KXMeBHIBsBnI3stlcFEoAuETTpk01c+ZM3bhxQz/88INefvll5c2bV4MHD05xblxcnDw8PFzyuvnz53dJOwDS5uXlpUOHDikuLs6l7RqGIYvF4rDP09PTpa8B3M3IZiD3IpvNxdQbAC7h6empkJAQhYeHq0ePHmrcuLEWL14s6X9Dct966y2FhoaqXLlykqSjR4/q6aefVlBQkPLnz68nnnhChw8ftreZmJiofv36KSgoSPfcc49ef/113bys0s3De2/cuKGBAwcqLCxMnp6eKl26tD755BMdPnxYDRs2lCTly5dPFotFnTt3lpQ0lzIqKkolSpSQt7e3IiIiNH/+fIfX+eGHH1S2bFl5e3urYcOGDv101sCBA1W2bFn5+PioZMmSGjp0qOLj41OcN2PGDIWFhcnHx0dPP/20Ll265HD8448/VoUKFeTl5aXy5ctr6tSpGe4LkFFeXl4KCAhw6RYYGJhiX1oXYwUKFJC7u7tOnz7tsP/06dMKCQlJ9TkhISEZOh/IbcjmWyObkZORzeahUALAFN7e3g4V7tWrV2vv3r1auXKllixZovj4eEVGRsrf318bNmzQpk2b5Ofnp6ZNm9qfN2HCBM2aNUuffvqpNm7cqPPnz+u7775L93U7duyor776Sh988IH27NmjGTNm2IcQfvvtt5KkvXv36uTJk3r//fclSVFRUfrss880ffp07d69W6+++qqeffZZrVu3TlLSReOTTz6pFi1aKDo6Wl27dk11capb8ff316xZs/Tnn3/q/fff10cffaRJkyY5nLN//3598803+v7777Vs2TJt375dPXv2tB+fM2eOhg0bprfeekt79uzR22+/raFDh9qHVwO5lYeHh6pXr67Vq1fb91mtVq1evVq1atVK9Tm1atVyOF+SVq5cmeb5QG5HNqdENgO3L1dnswEAmdSpUyfjiSeeMAzDMKxWq7Fy5UrD09PT6N+/v/14oUKFjBs3btif8/nnnxvlypUzrFarfd+NGzcMb29vY/ny5YZhGEbhwoWNcePG2Y/Hx8cbRYsWtb+WYRhG/fr1jT59+hiGYRh79+41JBkrV65MtZ9r1qwxJBkXLlyw77t+/brh4+NjbN682eHcF154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AAAuc2ox1786evSoatWqlaffZrPpwoULpgQFAADwV507d1bnzp3zPWYYhmbNmqUXXnhB9957r6RLH+wEBwdr5cqVevjhhwszVAAAUMS5XFFSv359bd26NU//hx9+qCZNmpgSFAAA8ECGxdwmKT093aFlZWW5HNbhw4eVmpqqqKgoe19QUJBatmypHTt2mHb7AADAO7hcURIbG6uYmBgdPXpUNptNy5cv14EDB/TOO+9o9erVBREjAADwAIZxqZk1liSFhYU59MfFxWn8+PEujZWamipJCg4OdugPDg62HwMAAHCWy4mSe++9V//97381ceJElSlTRrGxsWratKn++9//qmPHjgURIwAAKKZSUlIUGBhof221Wt0YDQAAwDUkSiSpbdu22rBhg9mxAAAAT2bmtr654wQGBjokSq5FSEiIJCktLU2VK1e296elpSkiIuK6xgYAAN7nmhIlkpSYmKj9+/dLurRuSbNmzUwLCgAAeKC/rC1iylgmqVGjhkJCQrRx40Z7YiQ9PV1ffvml+vfvb9r7AAAA7+ByouTXX3/VI488ou3bt6tcuXKSpFOnTum2227T0qVLVbVqVbNjBAAAXi4jI0MHDx60vz58+LCSkpJUoUIFVatWTUOHDtXkyZN18803q0aNGho3bpxCQ0PVvXt39wUNAACKJJd3venbt68uXLig/fv36+TJkzp58qT2798vm82mvn37FkSMAADAA1gMc5srEhMT1aRJE/sOe8OHD1eTJk0UGxsrSXruuef0zDPP6KmnntKtt96qjIwMrVu3Tv7+/mY/BgAAUMy5XFGyefNmffHFF6pTp469r06dOnrttdfUtm1bU4MDAACQpA4dOsi4ypY7FotFEydO1MSJEwsxKgAAUBy5nCgJCwvThQsX8vTn5OQoNDTUlKAAAIAHKoDFXAEAADyNy1NvXn75ZT3zzDNKTEy09yUmJmrIkCGaPn26qcEBAAAPcnkxV7MaAACAB3KqoqR8+fKyWP73A01mZqZatmypEiUuXX7x4kWVKFFCffr0YdE0AAAAAABQZDmVKJk1a1YBhwEAADweU28AAIAXcCpREhMTU9BxAAAAAAAAuJ3Li7n+1fnz55Wdne3QFxgYeF0BAQAAD0VFCQAA8AIuL+aamZmpQYMGqVKlSipTpozKly/v0AAAQDFlmNwAAAA8kMuJkueee06f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kPr27asyZcpo37592rBhg+bMmXPF9xwzZowaNmyoAQMG6Omnn5afn58+//xzPfTQQ6pYsaLDuatXr9ahQ4fUrl07lS9fXmvXrpXNZlOdOnUUEBCgESNGaNiwYbLZbLr99tt1+vRpbd++XYGBgYqJibnu54Nr821ied3d6A53hwE4rfFtGfrkt6QrHq9Q6aJGzEopvIBgGjO39WWtEwAA4Kncuj3wzTffrMTERNWsWVP/+te/dNNNN+mpp55SZGSkduzYoQoVKjic/+yzzyoxMVFNmjTR5MmTNXPmTEVHR9uPz5gxQxs2bFBYWNgV19UYPHiwhg8frmeffVYNGzbUunXrtGrVKt18883XfT+xsbGqXLmyQ3vuuedkGIaeeOIJtWjRwr6LTXR0tPr376/HHntMGRkZatSokTZv3qwff/xRbdu2VZMmTRQbG6vQ0NCrvmft2rW1fv167dmzRy1atFDr1q31n//8xz6l56/KlSun5cuX64477lC9evWUkJCg9957z77466RJkzRu3DjFx8erXr166tSpk9asWaMaNWpc97MBABQD7HoDAAC8gMVwZTVVNwoPD9fQoUPtu8LA86SnpysoKEh33tBbJXyuPF0I8GRr9zo/lQ3wNOlnbCpf+5BOnz6twMBA88bN/fe9+QOTVaKkOWsjXbxwXokfvWB6rHB0+e+O5wwAKK4K4nud23e9AQAARYPFdqmZNRYAAIAncuvUGwAAAAAAAE9SZCpKjhw54u4QAADwbmauLVIkJv4CAABvVGQSJQAAwL3Y9QYAAHgDpt4AAAAAAADkoqIEAAA4xzAuNbPGAgAA8EAkSgAAgFOYegMAALwBU28AAAAAAAByUVECAACcw643AADAC1BRAgAAAAAAkIuKEgAA4BTWKAEAAN6ARAkAAHAOu94AAAAvwNQbAAAAAACAXFSUAAAApzD1BgAAeAMqSgAAAAAAAHJRUQIAAJzD9sAAAMALUFECAACccnnqjVntWr300kuyWCwaOnSoafcGAABwGYkSAABQZHz99deaP3++GjVq5O5QAABAMUWiBAAAOMdmmNtclJGRoZ49e2rBggUqX758AdwgAAAAiRIAAOBG6enpDi0rK+uK5w4cOFBdunRRVFRUIUYIAAC8DYkSAADgHMPkJiksLExBQUH2Fh8fn+9bL126VLt3777icQAAALOw6w0A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SRLp0tf33r17tWTJEnufYRiy2Ww6fPiw6tWrJ0lq3ry5w/hJSUl66KGHrnbbdh07dlT16tVVs2ZNderUSZ06ddJ9992n0qVL6+DBgzp79qw6duzocE12draaNGni1PjFAmuUAAAAL0CiBHAjf39/dezYUR07dtS4cePUt29fxcXFqUOHDrrnnnvUv39/vfjii6pQoYK2bdumJ598UtnZ2fkmPTIyMjRhwgTdf//9+b4PipZatWrJYrFo//79uu+++/Ic379/v8qXL68bb7zRDdHJoTLEYrFIkn0tkSupWLGiatWqddVztmzZIl9fXx05ckQXL15UiRKXvk1lZGTo3//+twYPHpznmmrVqtn/fHnNk8v+Pm3pagICArR7925t2rRJ69evV2xsrMaPH6+vv/7avj7QmjVrHJI7kmS1Wp1+j6LOsNlkWMyZMmMYTL0BAACeiTVKAA9Sv359ZWZmateuXbLZbJoxY4ZatWql2rVr/+P0maZNm+rAgQOqVatWnubjw//qRc0NN9ygjh076vXXX9e5c+ccjqWmpmrJkiXq0aOHPUkhSTt37nQ4b+fOnfZKC+lSciO/tTkuCwwMVGhoaJ4tqrdv36769etfz+04ZdmyZVq+fLk2bdqk5ORkh217mzZtqn379uX79X21nW0aNWrk0vbHJUqUUFRUlKZNm6a9e/fqyJEj+uyzz1S/fn1ZrVYlJyfnef+wsLDrum8AAAB4FipKADf4448/9NBDD6lPnz5q1KiRAgIClJiYqGnTpunee+9VrVq1dOHCBb322mvq2rWrtm/froSEhKuOGRsbq3vuuUfVqlXTgw8+KB8fH+3Zs0ffffedJk+eXEh3BjPNmTNHt912m6KjozV58mSH7YGrVKmSZ6He7du3a9q0aerevbs2bNigDz74QGvWrLEfDw8P18aNG9WmTRtZrVaVL18+z3uOHDlScXFxuummmxQREaFFixYpKSnJYcrLtTpz5oxSU1Md+kqXLq3AwED9+uuv6t+/v6ZOnarbb79dixYt0j333KPOnTurVatWGjVqlFq1aqVBgwapb9++KlOmjPbt26cNGzZozpw5V3zPMWPGqGHDhhowYICefvpp+fn56fPPP9dDDz2kihUrOpy7evVqHTp0SO3atVP58uW1du1a2Ww21alTRwEBARoxYoSGDRsmm82m22+/XadPn9b27dsVGBiomJiY634+RQJTbwAAgBfgY2bADcqWLauWLVvqlVdeUbt27dSgQQONGzdO/fr105w5c9S4cWPNnDlTU6dOVYMGDbRkyRLFx8dfdczo6GitXr1a69ev16233qpWrVrplVdeUfXq1QvprmC2m2++WYmJiapZs6b+9a9/6aabbtJTTz2lyMhI7dixQxUqVHA4/9lnn1ViYqKaNGmiyZMna+bMmYqOjrYfnzFjhjZs2KCwsLArrqsxePBgDR8+XM8++6waNmyodevWadWqVbr55puv+35iY2NVuXJlh/bcc8/JMAw98cQTatGihX0Xm+joaPXv31+PPfaYMjIy1KhRI23evFk//vij2rZtqyZNmig2NlahoaFXfc/atWtr/fr12rNnj1q0aKHWrVvrP//5j31Kz1+VK1dOy5cv1x133KF69eopISFB7733nm655RZJ0qRJkzRu3DjFx8erXr166tSpk9asWaMaNWpc97MBAACA52DXGwAoBsLDwzV06FANHTrU3aGgGLq8mvwd1n+ZuuvNZ1nvsxtLAWPXGwBAcceuNwAAwH0MQ5JJi7DyOQ0AAPBQTL0BAAAAAADIRUUJABQDR44ccXcI8AKGzZBhMacShJm/AADAU5EoAQAAzjFsMm/qjUnjAAAAmIypNwAAAAAAALlIlAAAAKcYNsPUdi3mzp2r8PBw+fv7q2XLlvrqq69MvsuC5Wr8H3zwgerWrSt/f381bNhQa9euLaRIAQDwXiRKAABAkbBs2TINHz5ccXFx2r17txo3bqzo6GgdP37c3aE5xdX4v/jiCz3yyCN68skn9c0336h79+7q3r27vvvuu0KOHAAA72IxWE0NQBHyxBNP6NSpU1q5cqUkqUOHDoqIiNCsWbMKNY5NmzYpMjJSf/75p8qVK5fvORaLRStWrFD37t2dGnP8+PFauXKlkpKSrjmuI0eOqEaNGvrmm28UERFxzeMAf5Wenq6goCDdrrtVQiVNGfOiLmib1iolJUWBgYH2fqvVKqvVmu81LVu21K233qo5c+ZIkmw2m8LCwvTMM89o9OjRpsRVkFyNv0ePHsrMzNTq1avtfa1atVJERIQSEhLyfY+srCxlZWXZX58+fVrVqlXL85wBACgu0tPTFRYWplOnTikoKMiUMVnMFcB1e+KJJ/T2229LkkqWLKlq1aqpV69eev7551Wi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9uzp0vsDxcWgQYOKxFSbK7la/Js2bcrT99BDD+mhhx4q4KgAAMBfsZgrALfo2bOnKlasqHvvvVdbt27V4cOHtWnTJg0ePFi//vqrpEtl5y+99JJWrlypH374QQMGDNCpU6euOGZ4eLhiYmLUp08frVy50j7m+++/L0mqXr26LBaLVq9erRMnTigjI0MBAQEaMWKEhg0bprfffls///yzdu/erddee82+QOrTTz+tn376SSNHjtSBAwf07rvvavHixS7d780336zk5GQtXbpUP//8s2bPnp3vwrT+/v6KiYnRnj17tHXrVg0ePFj/+te/7Is3TpgwQfHx8Zo9e7Z+/PFHffvtt1q0aJFmzpzpUjwAAAAA8keiBIBblC5dWlu2bFG1atV0//33q169enryySd1/vx5e4XJs88+q8cff1wxMTFq3bq1AgICdN9991113Hnz5unBBx/UgAEDVLduXfXr10+ZmZmSpCpVqmjChAkaPXq0goOD7Z/qTpo0SePGjVN8fLzq1aunTp06ac2aNapRo4akS+uGfPTRR1q5cqUaN26shIQETZkyxaX77datm4YNG6ZBgwYpIiJCX3zxhcaNG5fnvFq1aun+++/X3XffrbvuukuNGjXS66+/bj/et29fLVy4UIsWLVLDhg3Vvn17LV682B4rAAAAgOtjMa60KiIAAAAAAICXoaIEAAAAAAAgF4kSAACAImzu3LkKDw+Xv7+/WrZsqa+++uqq53/wwQeqW7eu/P391bBhQ61du7aQIi2aXHm+CxYsUNu2bVW+fHmVL19eUVFR//j3Ade/hi9bunSpLBaLunfvXrABFgOuPuNTp05p4MCBqly5sqxWq2rXrs2/FVfh6vOdNWuW6tSpo1KlSiksLEzDhg3T+fPnCynaomXLli3q2rWrQkNDZbFYtHLlyn+8ZtOmTWratKmsVqtq1arl8tqCEokSAACAImvZsmUaPny44uLitHv3bjVu3FjR0dE6fvx4vud/8cUXeuSRR/Tkk0/qm2++Uffu3dW9e3d99913hRx50eDq8920aZMeeeQRff7559qxY4fCwsJ011136ejRo4UcedHh6jO+7MiRIxoxYoTatm1bSJEWXa4+4+zsbHXs2FFHjhzRhx9+qAMHDmjBggWqUqVKIUdeNLj6fN99912NHj1acXFx2r9/v958800tW7ZMzz//fCFHXjRkZmaqcePGmjt3rlPnHz58WF26dFFkZKSSkpI0dOhQ9e3bV5988olL78saJQAAAEVUy5Ytdeutt2rOnDmSJJvNprCwMD3zzDMaPXp0nvN79OihzMxMrV692t7XqlUrRUREKCEhodDiLipcfb5/l5OTo/Lly2vOnDnq1atXQYdbJF3LM87JyVG7du3Up08fbd26VadOnXLqU2Zv5eozTkhI0Msvv6wffvhBJUuWLOxwixxXn++gQYO0f/9+bdy40d737LPP6ssvv9S2bdsKLe6iyGKxaMWKFVetIhs1apTWrFnj8AHAww8/rFOnTmndunVOvxcVJQAAAEVQdna2du3apaioKHufj4+PoqKitGPHjnyv2bFjh8P5khQdHX3F873ZtTzfvzt79qwuXLigChUqFFSYRdq1PuOJEyeqUqVKevLJJwsjzCLtWp7xqlWr1Lp1aw0cOFDBwcFq0KCBpkyZopycnMIKu8i4lud72223adeuXfbpOYcOHdLatWt19913F0rMxZ1Z3+dKmBkUAAAACsfvv/+unJwcBQcHO/QHBwfrhx9+yPea1NTUfM9PTU0tsDiLqmt5vn83atQohYaG5vmhHZdcyzPetm2b3nzzTSUlJRVChEXftTzjQ4cO6bPPPlPPnj21du1aHTx4UAMGDNCFCxcUFxdXGGEXGdfyfB999FH9/vvvuv3222UYhi5evKinn36aqTcmudL3ufT0dJ07d06lSpVyahwqSgAAAACTvfTSS1q6dKlWrFghf39/d4dTLJw5c0aPP/64FixYoIoVK7o7nGLLZrOpUqVKeuONN9SsWTP16NFDY8eOZXqeSTZt2qQpU6bo9ddf1+7du7V8+XKtWbNGkyZNcndo+AsqSgAAAIqgihUrytfXV2lpaQ79aWlpCgkJyfeakJAQl873ZtfyfC+bPn26XnrpJX366adq1KhRQYZZpLn6jH/++WcdOXJEXbt2tffZbDZJUokSJXTgwAHddNNNBRt0EXMtX8eVK1dWyZIl5evra++rV6+eUlNTlZ2dLT8/vwKNuSi5luc7btw4Pf744+rbt68kqWHDhsrMzNRTTz2lsWPHyseHWobrcaXvc4GBgU5Xk0hUlAAAABRJfn5+atasmcOCgDabTRs3blTr1q3zvaZ169YO50vShg0brni+N7uW5ytJ06ZN06RJk7Ru3To1b968MEItslx9xnXr1tW3336rpKQke+vWrZt9d4uwsLDCDL9IuJav4zZt2ujgwYP2JJQk/fjjj6pcuTJJkr+5lud79uzZPMmQy0kp9lm5fqZ9nzMAAABQJC1dutSwWq3G4sWLjX379hlPPfWUUa5cOSM1NdUwDMN4/PHHjdGjR9vP3759u1GiRAlj+vTpxv79+424uDijZMmSxrfffuuuW/Borj7fl156yfDz8zM+/PBD49ixY/Z25swZd92Cx3P1Gf9dTEyMce+99xZStEWTq884OTnZCAgIMAYNGmQcOHDAWL16tVGpUiVj8uTJ7roFj+bq842LizMCAgKM9957zzh06JCxfv1646abbjL+9a9/uesWPNqZM2eMb775xvjmm28MScbMmTONb775xvjll18MwzCM0aNHG48//rj9/EOHDhmlS5c2Ro4caezfv9+YO3eu4evra6xbt86l92XqDQAAQBHVo0cPnThxQrGxsUpNTVVERITWrVtnX8guOTnZ4ZPL2267Te+++65eeOEFPf/887r55pu1cuVKNWjQwF234NFcfb7z5s1Tdna2HnzwQYdx4uLiNH78+MIMvchw9RnDda4+47CwMH3yyScaNmyYGjVqpCpVqmjIkCEaNWqUu27Bo7n6fF944QVZLBa98MILOnr0qG688UZ17dpVL774ortuwaMlJiYqMjLS/nr48OGSpJiYGC1evFjHjh1TcnKy/XiNGjW0Zs0aDRs2TK+++qqqVq2qhQsXKjo62qX3tRgG9T0AAAAAAAASa5QAAAAAAADYkSgBAAAAAADIRaIEAAAAAAAgF4kSAAAAAACAXCRKAAAAAAAAcpEoAQAAAAAAyEWiBAAAAAAAIBeJEgAAAAAAgFwkSgAAAAAAAHKRKAEAAAAAAMhFogQAAAAAACDX/wdnqHrqXgUqmQAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 1200x1000 with 7 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import ConfusionMatrixDisplay\n",
"\n",
"_, ax = plt.subplots(ceil(len(models_classification) / 2), 2, figsize=(12, 10), sharex=False, sharey=False)\n",
"\n",
"for index, key in enumerate(models_classification.keys()):\n",
" c_matrix = results[key][\"Confusion_matrix\"]\n",
" disp = ConfusionMatrixDisplay(\n",
" confusion_matrix=c_matrix, display_labels=[\"Sale\", \"Option Exercise\"]\n",
" ).plot(ax=ax.flat[index])\n",
" disp.ax_.set_title(key)\n",
"\n",
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.1)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Подбор гиперпараметров:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Лучшие параметры: {'model__criterion': 'gini', 'model__max_depth': 5, 'model__max_features': 'sqrt', 'model__n_estimators': 10}\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\numpy\\ma\\core.py:2881: RuntimeWarning: invalid value encountered in cast\n",
" _data = np.array(data, dtype=dtype, copy=copy,\n"
]
}
],
"source": [
"# Создание конвейера\n",
"pipeline = Pipeline([\n",
" (\"processing\", pipeline_end),\n",
" (\"model\", RandomForestClassifier(random_state=42))\n",
"])\n",
"\n",
"# Установка параметров для поиска по сетке\n",
"param_grid: dict[str, Any] = {\n",
" \"model__n_estimators\": [10, 50, 100],\n",
" \"model__max_features\": [\"sqrt\", \"log2\"],\n",
" \"model__max_depth\": [5, 7, 10],\n",
" \"model__criterion\": [\"gini\", \"entropy\"],\n",
"}\n",
"\n",
"# Подбор гиперпараметров с помощью поиска по сетке\n",
"grid_search = GridSearchCV(estimator=pipeline, \n",
" param_grid=param_grid,\n",
" n_jobs=-1)\n",
"\n",
"# Обучение модели на тренировочных данных\n",
"grid_search.fit(X_df_train, y_df_train)\n",
"\n",
"# Результаты подбора гиперпараметров\n",
"print(\"Лучшие параметры:\", grid_search.best_params_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Сравнение наборов гиперпараметров:\n",
"\n",
"Результаты анализа показывают, что как стоковая модель, так и оптимизированная модель демонстрируют идентичные показатели качества, включая абсолютные значения всех ключевых метрик (Precision, Recall, Accuracy, F1-Score и другие), равные 1.0 на обеих выборках (обучающей и тестовой). Это указывает на то, что обе модели идеально справляются с задачей классификации."
]
},
{
"cell_type": "code",
"execution_count": 401,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Стоковая модель:\n",
"\tPrecision_train: 1.0\n",
"\tPrecision_test: 1.0\n",
"\tRecall_train: 1.0\n",
"\tRecall_test: 1.0\n",
"\tAccuracy_train: 1.0\n",
"\tAccuracy_test: 1.0\n",
"\tF1_train: 1.0\n",
"\tF1_test: 1.0\n",
"\tROC_AUC_test: 1.0\n",
"\tCohen_kappa_test: 1.0\n",
"\tMCC_test: 1.0\n",
"\tConfusion_matrix: [[13 0]\n",
" [ 0 19]]\n",
"\n",
"Оптимизированная модель:\n",
"\tPrecision_train: 1.0\n",
"\tPrecision_test: 1.0\n",
"\tRecall_train: 1.0\n",
"\tRecall_test: 1.0\n",
"\tAccuracy_train: 1.0\n",
"\tAccuracy_test: 1.0\n",
"\tF1_train: 1.0\n",
"\tF1_test: 1.0\n",
"\tROC_AUC_test: 1.0\n",
"\tCohen_kappa_test: 1.0\n",
"\tMCC_test: 1.0\n",
"\tConfusion_matrix: [[13 0]\n",
" [ 0 19]]\n"
]
}
],
"source": [
"# Обучение модели со старыми гипермараметрами\n",
"pipeline.fit(X_df_train, y_df_train)\n",
"\n",
"# Предсказание для обучающей и тестовой выборки\n",
"y_train_predict = pipeline.predict(X_df_train)\n",
"y_test_predict = pipeline.predict(X_df_test)\n",
" \n",
"# Вычисление метрик для модели со старыми гипермараметрами\n",
"base_model_metrics: dict[str, Any] = {\n",
" \"Precision_train\": metrics.precision_score(y_df_train, y_train_predict),\n",
" \"Precision_test\": metrics.precision_score(y_df_test, y_test_predict),\n",
" \"Recall_train\": metrics.recall_score(y_df_train, y_train_predict),\n",
" \"Recall_test\": metrics.recall_score(y_df_test, y_test_predict),\n",
" \"Accuracy_train\": metrics.accuracy_score(y_df_train, y_train_predict),\n",
" \"Accuracy_test\": metrics.accuracy_score(y_df_test, y_test_predict),\n",
" \"F1_train\": metrics.f1_score(y_df_train, y_train_predict),\n",
" \"F1_test\": metrics.f1_score(y_df_test, y_test_predict),\n",
" \"ROC_AUC_test\": metrics.roc_auc_score(y_df_test, y_test_predict),\n",
" \"Cohen_kappa_test\": metrics.cohen_kappa_score(y_df_test, y_test_predict),\n",
" \"MCC_test\": metrics.matthews_corrcoef(y_df_test, y_test_predict),\n",
" \"Confusion_matrix\": metrics.confusion_matrix(y_df_test, y_test_predict),\n",
"}\n",
"\n",
"# Модель с новыми гипермараметрами\n",
"optimized_model = RandomForestClassifier(\n",
" random_state=42,\n",
" criterion=\"gini\",\n",
" max_depth=5,\n",
" max_features=\"sqrt\",\n",
" n_estimators=10,\n",
")\n",
"\n",
"# Создание конвейера для модели с новыми гипермараметрами\n",
"optimized_model_pipeline = Pipeline(\n",
" [\n",
" (\"pipeline\", pipeline_end), \n",
" (\"model\", optimized_model),\n",
" ]\n",
")\n",
" \n",
"# Обучение модели с новыми гипермараметрами\n",
"optimized_model_pipeline.fit(X_df_train, y_df_train)\n",
" \n",
"# Предсказание для обучающей и тестовой выборки\n",
"y_train_predict = optimized_model_pipeline.predict(X_df_train)\n",
"y_test_predict = optimized_model_pipeline.predict(X_df_test)\n",
" \n",
"# Вычисление метрик для модели с новыми гипермараметрами\n",
"optimized_model_metrics: dict[str, Any] = {\n",
" \"Precision_train\": metrics.precision_score(y_df_train, y_train_predict),\n",
" \"Precision_test\": metrics.precision_score(y_df_test, y_test_predict),\n",
" \"Recall_train\": metrics.recall_score(y_df_train, y_train_predict),\n",
" \"Recall_test\": metrics.recall_score(y_df_test, y_test_predict),\n",
" \"Accuracy_train\": metrics.accuracy_score(y_df_train, y_train_predict),\n",
" \"Accuracy_test\": metrics.accuracy_score(y_df_test, y_test_predict),\n",
" \"F1_train\": metrics.f1_score(y_df_train, y_train_predict),\n",
" \"F1_test\": metrics.f1_score(y_df_test, y_test_predict),\n",
" \"ROC_AUC_test\": metrics.roc_auc_score(y_df_test, y_test_predict),\n",
" \"Cohen_kappa_test\": metrics.cohen_kappa_score(y_df_test, y_test_predict),\n",
" \"MCC_test\": metrics.matthews_corrcoef(y_df_test, y_test_predict),\n",
" \"Confusion_matrix\": metrics.confusion_matrix(y_df_test, y_test_predict),\n",
"}\n",
"\n",
"# Вывод информации\n",
"print('Стоковая модель:')\n",
"for metric_name, value in base_model_metrics.items():\n",
" print(f\"\\t{metric_name}: {value}\")\n",
"\n",
"print('\\nОптимизированная модель:')\n",
"for metric_name, value in optimized_model_metrics.items():\n",
" print(f\"\\t{metric_name}: {value}\")"
]
}
],
"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
}