2319 lines
296 KiB
Plaintext
2319 lines
296 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Анализ сведений:\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": 1,
|
||
"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(\"./datasets/TIT/Tesla.csv\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Краткая информация о DataFrame:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"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": 2,
|
||
"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": 3,
|
||
"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": 3,
|
||
"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": 4,
|
||
"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": 5,
|
||
"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": 6,
|
||
"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": 6,
|
||
"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": 7,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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",
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\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.9993556294223384\n",
|
||
"\tstd_dev: 0.00034873604184410125\n",
|
||
"\n",
|
||
"Модель: Linear Regression\n",
|
||
"\tmean_score: 1.0\n",
|
||
"\tstd_dev: 0.0\n",
|
||
"\n",
|
||
"Модель: Gradient Boosting\n",
|
||
"\tmean_score: 0.9997676704442847\n",
|
||
"\tstd_dev: 0.00014272056772109988\n",
|
||
"\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": 8,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Модель: Random Forest\n",
|
||
"\tMAE_train: 1.737808064516108\n",
|
||
"\tMAE_test: 4.536231250000004\n",
|
||
"\tMSE_train: 7.968324435967565\n",
|
||
"\tMSE_test: 64.3667731418771\n",
|
||
"\tR2_train: 0.9999611450515958\n",
|
||
"\tR2_test: 0.999637708660288\n",
|
||
"\tSTD_train: 2.8004451242481854\n",
|
||
"\tSTD_test: 7.985799705940578\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.15613772760447098\n",
|
||
"\tMAE_test: 2.98104593330686\n",
|
||
"\tMSE_train: 0.07499640211231653\n",
|
||
"\tMSE_test: 39.1989771515018\n",
|
||
"\tR2_train: 0.9999996343043813\n",
|
||
"\tR2_test: 0.999779366756257\n",
|
||
"\tSTD_train: 0.2738547098596563\n",
|
||
"\tSTD_test: 6.221528272339557\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": 9,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Fitting 3 folds for each of 36 candidates, totalling 108 fits\n",
|
||
"Лучшие параметры: {'max_depth': 30, 'min_samples_split': 2, 'n_estimators': 200}\n",
|
||
"Лучший результат (MSE): 197.5517526562716\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": 10,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Fitting 3 folds for each of 36 candidates, totalling 108 fits\n",
|
||
"Старые параметры: {'max_depth': None, 'min_samples_split': 5, 'n_estimators': 200}\n",
|
||
"Лучший результат (MSE) на старых параметрах: 187.1331184415387\n",
|
||
"\n",
|
||
"Новые параметры: {'max_depth': 5, 'min_samples_split': 10, 'n_estimators': 50}\n",
|
||
"Лучший результат (MSE) на новых параметрах: 1153.4586525767654\n",
|
||
"Среднеквадратическая ошибка (MSE) на тестовых данных: 163.563379529321\n",
|
||
"Корень среднеквадратичной ошибки (RMSE) на тестовых данных: 12.789189948128888\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAHWCAYAAACBjZMqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gUVffA8e/2bDa76ZUEQugIKkURBAVFmgVFRRQL9p+9i4oiVlSwIK9dX8FeULG+KooIKgLSRHoPgfTspm+yZX5/TBJZ0kOS3STn8zw8mp07s2f7nLn3nqtRFEVBCCGEEEIIIUSz0vo7ACGEEEIIIYRojyTZEkIIIYQQQogWIMmWEEIIIYQQQrQASbaEEEIIIYQQogVIsiWEEEIIIYQQLUCSLSGEEEIIIYRoAZJsCSGEEEIIIUQLkGRLCCGEEEIIIVqAJFtCCCGEEEII0QIk2RJCCCGEEC3um2++YcOGDVV/L168mM2bN/svICFagSRbQnQAu3fv5vrrryclJYWgoCBsNhsnn3wy8+bNo7S01N/hCSGE6AA2bdrEbbfdxs6dO/nzzz/5v//7PwoLC/0dlhAtSqMoiuLvIIQQLefbb7/lwgsvxGQycfnll9OvXz/Ky8v57bff+Oyzz5g2bRqvv/66v8MUQgjRzmVnZzNs2DB27doFwKRJk/jss8/8HJUQLUuSLSHasb1793LssceSmJjI0qVLiY+P99m+a9cuvv32W2677TY/RSiEEKIjKSsr459//iE4OJg+ffr4OxwhWpwMIxSiHXvmmWcoKirirbfeqpZoAXTv3t0n0dJoNNx88828//779OrVi6CgIAYNGsTy5ct99tu/fz833ngjvXr1wmw2ExkZyYUXXsi+fft82i1YsACNRlP1Lzg4mP79+/Pmm2/6tJs2bRohISHV4lu0aBEajYZly5b53L5q1SrGjRtHaGgowcHBnHrqqfz+++8+bWbNmoVGoyEnJ8fn9r/++guNRsOCBQt87j85Odmn3YEDBzCbzWg0mmqP63//+x8jRozAYrFgtVo588wzGzTvoPL5WL58Oddffz2RkZHYbDYuv/xy7HZ7tfYNuZ+///6badOmVQ0RjYuL46qrriI3N7fGGJKTk31ek8p/hz/HycnJnHXWWXU+ln379qHRaJg7d261bf369WPkyJFVfy9btgyNRsOiRYtqPd6Rr8HDDz+MVqvl559/9ml33XXXYTQa2bhxY53xaTQaZs2a5XPbnDlz0Gg0PrHVtX9t/w6P8/Dn4fnnn6dLly6YzWZOPfVU/vnnn2rH3bZtGxdccAEREREEBQUxePBgvvrqqxpjmDZtWo33P23atGpt//e//3HqqaditVqx2WyccMIJfPDBB1XbR44cWe1xP/HEE2i1Wp92K1as4MILL6Rz586YTCaSkpK44447qg03njVrFn379iUkJASbzcZJJ53E4sWLfdo09FiN+fyPHDmSfv36VWs7d+7cap/V+t7Hle/LyuNv3boVs9nM5Zdf7tPut99+Q6fTMX369FqPBQ17ThoT/5dffsmZZ55JQkICJpOJbt268dhjj+HxeHz2rem9Xvld05Tvrsa+Hke+r9asWVP1Xq0pTpPJxKBBg+jTp0+jPpNCtFV6fwcghGg5X3/9NSkpKQwbNqzB+/z66698/PHH3HrrrZhMJl5++WXGjRvH6tWrq04S1qxZwx9//MGUKVNITExk3759vPLKK4wcOZItW7YQHBzsc8znn3+eqKgoCgoK+O9//8u1115LcnIyo0ePbvRjWrp0KePHj2fQoEFVJ+Rvv/02p512GitWrODEE09s9DFrMnPmTJxOZ7Xb3333Xa644grGjh3L008/TUlJCa+88grDhw9n/fr11ZK2mtx8882EhYUxa9Ystm/fziuvvML+/furTv4acz9Llixhz549XHnllcTFxbF582Zef/11Nm/ezJ9//lnthAdgxIgRXHfddYB6gvnkk082/YlqIQ8++CBff/01V199NZs2bcJqtfLDDz/wxhtv8Nhjj3Hcccc16ngOh4PZs2c3ap8zzjij2on3s88+W2Ni/M4771BYWMhNN92E0+lk3rx5nHbaaWzatInY2FgANm/ezMknn0ynTp247777sFgsfPLJJ5x77rl89tlnnHfeedWOazKZfC5OXHPNNdXaLFiwgKuuuopjjjmG+++/n7CwMNavX8/333/PJZdcUuNje/vtt3nwwQd59tlnfdp8+umnlJSUcMMNNxAZGcnq1auZP38+aWlpfPrpp1XtiouLOe+880hOTqa0tJQFCxZw/vnns3LlyqrPYEOPFSj69OnDY489xj333MMFF1zAOeecQ3FxMdOmTaN37948+uijde7fkOekMRYsWEBISAh33nknISEhLF26lJkzZ1JQUMCcOXMafbzm+O5qiPqS0kpN+UwK0SYpQoh2KT8/XwGUiRMnNngfQAGUv/76q+q2/fv3K0FBQcp5551XdVtJSUm1fVeuXKkAyjvvvFN129tvv60Ayt69e6tu27FjhwIozzzzTNVtV1xxhWKxWKod89NPP1UA5ZdfflEURVG8Xq/So0cPZezYsYrX6/WJp2vXrsoZZ5xRddvDDz+sAEp2drbPMdesWaMAyttvv+1z/126dKn6+59//lG0Wq0yfvx4n/gLCwuVsLAw5dprr/U5ZkZGhhIaGlrt9iNVPh+DBg1SysvLq25/5plnFED58ssvG30/Nb0WH374oQIoy5cvr7atU6dOypVXXln19y+//OLzHCuKonTp0kU588wz63wse/fuVQBlzpw51bYdc8wxyqmnnlrtPj799NNaj3fka6AoirJp0ybFaDQq11xzjWK325VOnTopgwcPVlwuV52xKYr6Xn744Yer/r733nuVmJgYZdCgQT6x1bX/TTfdVO32M8880yfOyufBbDYraWlpVbevWrVKAZQ77rij6rbTTz9d6d+/v+J0Oqtu83q9yrBhw5QePXpUu69LLrlECQkJ8bnNYrEoV1xxRdXfDodDsVqtypAhQ5TS0lKftod/Rk499dSqx/3tt98qer1eueuuu6rdZ03vp9mzZysajUbZv39/tW2VsrKyFECZO3duo4/V0M9/5eM45phjqrWdM2dOte+a+t7HNb33PR6PMnz4cCU2NlbJyclRbrrpJkWv1ytr1qyp9Ti1qek5aUz8NT1/119/vRIcHOzzHtJoNMrMmTN92h353duY75TGvh6Hf56+++47BVDGjRunHHmKebSfSSHaKhlGKEQ7VVBQAIDVam3UfkOHDmXQoEFVf3fu3JmJEyfyww8/VA1fMZvNVdtdLhe5ubl0796dsLAw1q1bV+2YdrudnJwc9uzZw/PPP49Op+PUU0+t1i4nJ8fn35FVqjZs2MDOnTu55JJLyM3NrWpXXFzM6aefzvLly/F6vT775OXl+RwzPz+/3ufg/vvvZ+DAgVx44YU+ty9ZsgSHw8HFF1/sc0ydTseQIUP45Zdf6j02qEPhDAZD1d833HADer2e7777rtH3c/hr4XQ6ycnJ4aSTTgKo8bUoLy/HZDLVG6PL5SInJ4fc3Fzcbnet7UpKSqq9bkcOc6pUWFhITk4ODoej3vsHdTjiI488wptvvsnYsWPJyclh4cKF6PWNG5Rx8OBB5s+fz0MPPVTj8KjmcO6559KpU6eqv0888USGDBlS9Zrm5eWxdOlSJk+eXPU8VD6/Y8eOZefOnRw8eNDnmE6nk6CgoDrvd8mSJRQWFnLfffdVa1tTr+bq1auZPHky559/fo29I4e/n4qLi8nJyWHYsGEoisL69et92la+R3bv3s1TTz2FVqvl5JNPbtKxoP7PfyWPx1OtbUlJSY1tG/o+rqTValmwYAFFRUWMHz+el19+mfvvv5/BgwfXu+/h91fbc9KY+A9//irfMyNGjKCkpIRt27ZVbYuJiSEtLa3OuJry3dXQ16OSoijcf//9nH/++QwZMqTOtq3xmRQiUMgwQiHaKZvNBtDosro9evSodlvPnj0pKSkhOzubuLg4SktLmT17Nm+//TYHDx5EOazOTk3JzMCBA6v+32Qy8Z///KfasJri4mKio6PrjG3nzp0AXHHFFbW2yc/PJzw8vOrvXr161XnMI/322298/fXX/Pzzz6SmptZ4/6eddlqN+1Y+5/U58jkOCQkhPj6+an5FY+4nLy+PRx55hI8++oisrCyfdjW9Fvn5+Q06ufnxxx+rXg+dTsexxx7LU089xZgxY3zaPfzwwzz88MPV9q8cOne4q666qur/Q0JCOPvss3n++edrbFvpnnvu4aOPPmL16tU8+eST9O3bt97Yj/Twww+TkJDA9ddfX+e8saNR2+fmk08+AdRiNIqi8NBDD/HQQw/VeIysrCyfhC0nJ4fQ0NA673f37t0ANc4DOtLBgwc588wzKS4uJjc3t8ZkLDU1lZkzZ/LVV19VGy555Pvp559/Zvz48YD6nly0aFFVot/YYzXk819p27ZtDW7b0Pfx4bp168asWbO455576NevX62vV03qe04aE//mzZt58MEHWbp0adXFs0qHP3/Dhg1j0aJFTJ48mYEDB6LRaCgqKvJp39jvrsa8HpXef/99Nm/ezCeffOIzD7AmrfGZFCJQSLIlRDtls9lISEiocZL+0brlllt4++23uf322xk6dCihoaFoNBqmTJlSrWcJ4L333iM2Nhan08nSpUu56aabCAoK8pnoHxQUxNdff+2z34oVK3zmSVQee86cORx//PE1xnZkIvHZZ5/5nEjs2LGDm266qdbHNn36dMaOHctpp53mU0Tj8Pt/9913iYuLq7ZvY3tcatOY+5k8eTJ//PEH99xzD8cffzwhISF4vV7GjRtXYy9feXl5jcc80pAhQ3j88ccBOHToEE8//TTnnXcemzdv9pnbcd1111XrAbz22mtrPObMmTMZMWIELpeLtWvX8uijj+JwOKp6f2qyZ8+eqhPFTZs21Rv3kbZu3cqCBQt47733fHoTW1vla3H33XczduzYGtt0797d5+99+/bVmMQ11a5duxg4cCDPP/88l112GQsXLvS5cOHxeDjjjDPIy8tj+vTp9O7dG4vFwsGDB5k2bVq199MJJ5zAkiVLsNvtvPfee1x11VUkJSUxePDgRh+rIZ//SsnJybzxxhs+t3366ac1LmFR1/u4Lj/++GPVPrm5uQ36zEDdz0lj4nc4HJx66qnYbDYeffRRunXrRlBQEOvWrWP69Ok+z98zzzzDhAkTGDduXK1xNfa7qzGvB6g95g899BBXX301PXv2rDUOCJzPpBCtRZItIdqxs846i9dff52VK1cydOjQBu1TeWJ7uB07dhAcHFx1pXPRokVcccUVPPvss1VtnE5nrcPDTj755KoT9LPOOovNmzcze/Zsn2RLp9NVK5hx5PG6desGqIlkQ4trnHLKKURFRVX9HRYWVmvbxYsXs3LlyhqH3x1+/zExMU0q7lFp586djBo1qurvoqIi0tPTmTBhQqPux2638/PPP/PII48wc+ZMn+PXZMuWLQANKrccFRXlc9/du3fn5JNPZvny5T7JVo8eParFaLFYajxm//79q9qOHz+e1NRUFi5cWOvwLq/Xy7Rp07DZbNx+++08+eSTXHDBBUyaNKne+Cvdf//9HH/88Vx00UUN3qcpavvcVD5XKSkpABgMhga9d7Kzs0lNTeXiiy+us13le+Wff/6plqwdKT4+nu+++47Y2Fi+/PJL7rrrLiZMmFD1ud60aRM7duxg4cKFPoVBlixZUuPxIiMjqx7L+eefT69evZgzZw4ff/xxo4/VkM9/JYvFUq3thg0bamxb1/u4c+fONe7z6quvsmTJEp544glmz57N9ddfz5dffllj2yPV9Zw0Jv5ly5aRm5vL559/zimnnFJ1+969e6vdZ/fu3dm8eTObNm0iLy8PUJPFw4eJNva7qzGvB8DLL79MVlZWtaqINWmtz6QQgULmbAnRjt17771YLBauueYaMjMzq23fvXs38+bN87ntyGTjwIEDfPnll4wZMwadTgeoP8TKEUv0zZ8/v9a5OkcqLS2lrKyssQ+HQYMG0a1bN+bOnVttmAyoJ6hN5fF4eOCBB7jkkktq7TUbO3YsNpuNJ598EpfL1eT7f/311332f+WVV3C73VXDjxp6P5Wvx5GvxQsvvFDj/X700UcYjUaGDx/eoDgPV3llvPI+m4PX60Wr1dY4nA3gueee448//uD111/nscceY9iwYdxwww3VyvnXZuXKlXz55Zc89dRTtd5Hc1m8eLHPnKvVq1ezatWqqtc0JiaGkSNH8tprr5Genl5t/yPfO5XV+iZOnFjn/Y4ZMwar1crs2bOrVc888n3Rs2fPqiGb8+fPx+v1+iz9UNP7SVGUat8RNXE6nRQXF1d9ro/mWC2pvvfx3r17ueeeezj//PN54IEHmDt3Ll999RXvvPNOo+/ryOekMWp6/srLy3n55ZdrbG8wGBg4cCCjR49m9OjR1YbbNtd3V00KCwt54oknuOOOO+rtAWzNz6QQgUJ6toRox7p168YHH3zARRddRJ8+fbj88svp168f5eXl/PHHH3z66afV1uzp168fY8eO9Sn9DvDII49UtTnrrLN49913CQ0NpW/fvqxcuZKffvqJyMjIGuNYvHgxUVFRVcMIV6xYwe23397ox6PVannzzTcZP348xxxzDFdeeSWdOnXi4MGD/PLLL9hstmpDXxoqLS0No9FY55A2m83GK6+8wmWXXcbAgQOZMmUK0dHRpKam8u2333LyySfzn//8p977Ki8v5/TTT2fy5Mls376dl19+meHDh3POOec06n5sNhunnHIKzzzzDC6Xi06dOvHjjz9Wu/q9c+dOHn74YT788EPuu+++Bs0ty87O5vvvvwcgPT2dp59+mtDQUJ8eucbasGEDISEhuN1u1q5dyzvvvMPEiRNrPPHdunUrDz30ENOmTePss88G1FLYxx9/PDfeeGPVXKi6/Pjjj5xxxhlH1QvZUN27d2f48OHccMMNlJWV8cILLxAZGcm9995b1eall15i+PDh9O/fn2uvvZaUlBQyMzNZuXIlaWlpVWuHvfTSSzz44INER0eze/fuqnlZAG63mz179rBkyRLOOOMMbDYbzz//PNdccw0nnHACl1xyCeHh4WzcuJGSkhIWLlxYY7xxcXHMmTOHa665hksv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nu+jILq4KDgoRBv0xW1cEZMquHvRQ4SqdJjSvOuB9+mjYPGUM7hm+Bo49DZk3t3mMS0WMJqiMJogM9O31/ZKhzB5VzgbF5HwO/JjK9hOp5OEKDPBqjKMknRoS58ted2VcVVIEAVZwmTIbrejVHonmuhySSgzpuB2S5BKG44SGI1GZs6cWe9C6vGT2aysrHon5TVoNE33S1u7di1z585lyZIlTJkyhcWLF3te++KLL5g+fTqvvvoqw4cPJyQkhJdffpn//vuv1hh33HEHl112GRs3buS+++7jsssuY/To0c3ef/To0Tz3xONEaMootwTz99rNPP/887W26d69Oz/88IPn8X///cd1111Xa5uQkBA2bdqE2+1m165d3HDDDcTFxTF27Nha2xmNRm6//fZ6W+McP3k/kYsuuohTTjmFPXv2cPfdd/Pdd98xceJEz+tffvllrYn68bUz2dnZXHDBBdx5550899xzREREsHr1am6++WZsNhtBQUHcdNNNfPfdd3Tp0qXeiI3RaGTw4MH1KrlFRx+LCI4ePZq5c+d6Hn/77bd1zifA/v37mTdvHlu2bCE3t3YT9lNOOYVZs2Zx4403ct1116FQKDCbzXUc5eOJiopi+/bt9b7W2LlpLjXfgf379GzauIUnn7+P08acy6mnCgsXzfn8ZTIlJXoXl156Bw89dDuhobUbojf2+TfFyy+/zJtvvskbb7zhqc277777sNurF4pkTU/xq6qqGDduHOPGjeOzzz4jOjqaI0eOMG7cOJRyA+nRhWQp9QBERkYybtw4Fi1axMcff8wff/zBe++95xmrph7wp59+qpPVo1J5rxE8NP+3V0NZWVmt76y/aZWzNX/+fM//lyxZwksvvSSqELZTdu/MZ2yIUG8SmZjcxNYibUYqp7QqguiQUirbGg0RqUO8Op/7xr+OMzgGmNjk9m0hMlqFwRRKWFAFhsI2Os5yLe//MQmnszdz5x7yjoHVDB8ezLb5a4QHptzGN24mx8opLHTp4pseWzUcrsrgrd+mcLAimYt8eqTWY7fbUciEdDmlxruTBgC5XAI4ACdWq8trzpbNViMc4WDr1i2MGCGsFu/duxe9Xu+ZjA4aNIi9e/fSrVu3BseyWCysW7eO66+/vsFt+vXrx59//lkrle9Err/+eu644w7OPfdc+vTpw3fffcellwqCFWvWrGHEiBHcddddnu3rK2qPiIggIiKCHj16sGTJEr755htGjx7d7P21Wi1p6d2ICcrHYNay82DdxRulUlnrfJzoHIBQE1WzTUZGBmeffTZbtmypM+EbNGgQu3btavT81kdISAghISFkZmby999/s3jx4lrOVnJycq0x5fJjU7qNGzficrl49dVXPRGeE2vXNBoNf/zxB4WFhVRWVnrex/F2f/nll8TExDQa0dRqtbXsiImpvz58xowZ3HLLLXTr1q3e83nvvfeyaNEibr75Zq644opa77U+Bg4cyNy5c3G760aDGzs3PXv2JCcnh5ycHE90a9euXej1enr16uXZruY7YDJVEh0zhC++epdly5Z5nK1mff4SCT16DCAraxfx8WnEx3unoT0Iv5eLL77YswjgcrnYt28fvboJqZUyuaAmeOJiw7///ktGRgYymYw9e/ZQWlrKCy+84DkXGzYINV9SmbBAI+FYj6rbb7+dCy+8kAEDBtCjR49a4/bq1QuVSsWRI0cYNWpUm97bv//+63FEy8vL2bdvXy3nubm/PTgWiW1pdM2biI03OjkysvjyXxVrsyKRqHwrlS0iUFIVBYCjsizAlnQ++sYd4vXr7+eKgV/4/FhBQVBiFByNiuK2RV1MJhNOp3ADHDgwqs22HU9ycjI51fod7irvNDaWHHiH+bdPYmyfr4mP920z9CLpIO5d9Bafrb7Ep8dpCzabFaVcmHDUqiNRRYG0iSiXVC1s1wgSCehCdhOq2Y7b5Z1WAwA2qw2FzI5crmDatPv477//2LhxI5MnT+bUU09l6NChADz55JMsWrSImTNnsnPnTnbv3s0XX3zB448/Dggr1k8++SQAp59+OgUFBRQUFGA2m7FarRgMQprRI488wvr167nrrrvYtm0be/bsYe7cuZSUHPv91NSdpKam8vLLL3PnnXd6BGgyMjLYsGEDv/32G/v27eOJJ55g/fr1td7Tu+++y86dO8nOzubTTz9l+fLlnklUc/avQVXd7FUha1uzWYvFgtlsZuPGjaxevZo+ffrU2WbGjBn8888/TJkyhS1btrB//36+//77RgUS5s+fz9atWzl8+DA//PADixcvbtFksVu3btjtdt566y2ysrL45JNPakUhjic2NpZu3brVcQYnTpxIVFQUF198MatWreLQoUOsWLGCe++9t15nqTEOHDjAihUrPN+jE3G73UyaNIlBgwbx8MMP061btyYjpaNHj8ZoNLJzZ8saz48dO5a+ffsyceJENm3axLp165g0aRKjRo1iyJAhnu0cDgcFBQXk5xexYsVS9u/fXcfBaM7nf+ON09i27R9mzJjW7M+/OWRkZLB8+XL++ecfdu/eze23305hYSFVtiCOlCajVAmLNkeOHOH+++9n7969LF68mLfeeoupU6cCQmRNqVR6vic//PADzzzzDABSmbD/8Y7CqFGjmDlzJi+99FIde0JCQpg+fTrTpk1j4cKFHDx4kE2bNvHWW2+xcOHCFr23WbNm8eeff7Jjxw4mT55MVFRUHdXL5px7EBw3lUrVpOCKL/GaQIZI+yS/xMjEt6yMHj2Cvx4XfWt/sOrIeH7bPJ59Ob6NCJyMBMkEBSyH1LdKhDWUVUXQlUPYKg1tGid78++c1TuEnbm96dXLu85LYmIiudV+vbX8EN7QDkyQ/MbkkT+y7uDXxMUVe2HEhklPFyw2GttQB+VjHDYLkhMbGgNoU+DCvY330VJFCds1QWqEDYUUDA4ToGuryQBI7AaSInLRBqmZMWMG1157LUePHuWMM87go48+8mw3btw4li1bxqxZs3jxxRdRKBT06NGDW265BYBXXnmFl19+GaDe6MzUqVNZsGABmZmZ/P777zz66KMMHToUjUbDsGHDmDBhQr323X777SxZsoR77rmHzz//nNtvv53Nmzdz9dVXI5FImDBhAnfddRe//PKLZ5+ffvqJp556isrKSpKTk3n00Uc9Bf7N2b8GTZAKzEKasLuF/c1qMBgMaDQaJBIJsbGxXHrppdx///0ewYAa+vXrx8qVK3nsscc444wzcLvddO3atY763fGsXbuWRx99lLKyMuLi4pg4cWItQYmm6N+/P6+99hovvvgijzzyCCNHjmT27Nm16tuaIigoiP/973/MmDGDyy67jMrKShITExkzZkyjka76qKqqYubMmQ2Kqb3wwgvs37/fo1LXHCIjI7n00kv57LPPGq3XORGJRML333/PPffcw8iRI5FKpYwfP5633nqr1nY7d+4kPj4eqVRKXGwMU++9t1a0rbmf/2lDEvl5ySfMfPHNZn/+zeHxxx8nKyuLcePGERQUxG233cZFF11CTo6BoopYMmIFJepJkyZhNpsZOnQoMpmMqVOncttttwFCOuiCBQt49NFHmTNnDoMGDeKVV17hoosuAokKh6tuf75p06Y1aNMzzzxDdHQ0s2fPJisrC51Ox6BBg3j00Udb9N5eeOEFpk6dyv79+xkwYAA//vhjrYWu5p57wBMRrqk9DQQSdyuuMsf30poxYwYPPvggUVHHVu7qy0vuyFRUVBAWFobBYGjxBSbQvP7669x///1cc801tXLjRXzHxIl7+PzzHkRFLaW4+JJAm9OpmDN5HPee8zt/5t/LmAfebHqHNrLtrcH0i9zEh1tP59YXWy8bu2/ReWTKf+HRr57k+aUNp1i1ljN7v82Kx+5B70hBN6ntikuW7weirtrChHdVLF7dtpX/pvjkk9VMu6sH8eHZbMsehETqv0Uhi8XiEQdoqNAeoCjvCDGqIuwuKYroQT6xxVq0GZXMSbkzivCYNK+MqS/IZemSD5n62OsYDBWtHufpp5+u9e/xLF26lKVLl7JgwYJWjx8IXA4rUsN23IAztD9yhW9VN0V8w7Zt2zj77LM5ePBgLZEOb+F2uXCXbUIqAXtwTxSqlqcBluVmEaEpo6QqnKgU76rRnojJBIK/Yad3bwfnnnsuAwYMqNVjrLlUVBhRmLLRKCw4tJnI1b6f/65YsYLRo0dTXl7eYC+tllBSUkL37t3ZsGFDo/WmDdHYPaIlvkGrIluvv/665/9xcXF88sknnscSiaTTOVsdmX9WhyKVvIrF4r08YZHG6d1bAWzEam1nTVo7OE6nkzC1ENmSB/knamgLTeO79ZvIqWxjLx5TPoRCsdE3EbkyiyBioZXmg9sFbZXFr+6z5VB4N+WxPvr3C6Hk/erCZVsRqANXxNwQDpsbVGBzqPHVlNzuVKGSmbCavehsuqqbErcucOOhsUmsWq2uJZrVYZAq2VsQgtUup1umXXS2Oij9+vXjxRdf5NChQ/Tt29fr49ttFpTVUW25smkBmPpwV0fD5VJHE1u2HYW0irCgXCx2OQpF2xSolUo5tko5GgU47Xbkvmu56DOys7N59913W+VoeZNWOVuHDnm3wFvEd4wIX8PihYtYuvty4PZAm3NScMMkBXNeGkKQSorTeR8yWd0wvEjLMRgMhGsFp0cV6p8G3XnhN3DZG98ydKiMWW0YJwhBLMXg8M2k1CbT4HJJUEjtYCkGTWzrB3O7kdpKQQZ667neM7IBklNSKF4L0aFg0R9CHdf+nC2JW5A3drp9NyF3uhTVx3I1sWULcHunb9fxvXxOZPz48YwfP94rx/EvEirN3QGwWCoIYIaRSBuZPHmyz8a2mMwoAYdTiqKVi1g1tU/+cLYkthIyYispqgCZrG3CdQqFApNTeM/OVjYUDjRDhgypVYcXKFr8zfnggw+47rrrPFKgH3zwAZmZmXTr1o1XX33V6waKtI1QRQVymROlpgMuSXRQ4myrKXgX5t/mqlUYLtI2ysvLiQgWVJWGjPB9xAWguDgFuJcjR3o0uW2DuN1EBwnOVnyXKu8YdgLRsfDpmutYvOFq2hzGsBtQVtfGGR392m5cE+h0OgoMgpJYed7uJrYODPqqIA6XpFLl8J3IkFsirH1KJd5rbCyX2Zk84UL279jitTE7C1IpSCTC5Ndi8XIzaZFOg80qXAttztarkKq1wr5KubnV9YHNxe0UBHacyJFIJKxYsaJVKYQAMpmMQoOOfQUZGG3+ae905pln4na7vZJC2J5oUWTrs88+44EHHuCcc87hwQcf5MCBA7zxxhtMnz4dl8vFrFmzSE9Pb7LpsYj/CNcIhf3SIN8qiokcQ6YV+kvEhUF+fj6xsW2IMoh40Ov1hFdnw8o19RdZe5sdOxKBN6iq+KjJbRvEVoZKLkzqhoxsXRpKU6SlSbnhvUVERmYx4bU2/tbNQnNhfVUYkTEN92byFhKJhJKqVCCbbeuOEu+bkqg2YbJqqLKEER9s891BpMLtWCb13sRfJq1Ou1WIzkR96LR6gpQWcAKIar0idXE7hYiOw9l6PTmlOgisoJAJbRjkct9FyF0OB0jBjXeu3Wa7EpcrDJXVt7W7nZ0WfXveffdd5s6dy3XXXcfGjRsZNmwYc+fO5dZbbwUgISGBt956S3S22hExIXoAtFEJgTXkJMKlikMKxIeHsGxXKY30ZBRpAeXl5cyYC8P6p/Lu5QP8cszTuq7lhQVXsj0nGbv9BhStqeswCXLsRQZIyPRNP8KMDMGJq6z0QpqiVYjC5evjSU72vbMFUFTRFchGnx+Y3nSNrTa7XC7c1emDGo3vUoIl1alGCi86W9Lq/ji1FBRFPIQFVRKlLaXU3AFrzkT8gsRd7Wy5W+9syWRKXG4EkQ2rCbncd983t8sJUrA7vROJkstd2Gxgs/k2Itde8VYkskVphLt37/bo1A8ePBipVMqwYcM8r48cObLBbt4i/sfpdBIbVg5AdEpgiwNPJqTaeABCNZVk7RMbG3uL4mI9m7J/Zsk/H2J2+SeyFREThUphIyqkytMLqKXU9L7KKdMSE9O0BHhr6NMnDHCjkUuwVRQ2uX1juKNHop5cyZnPrqBLF99E4k7EYBMmHzKbb2XmT6TGeTaZTA1uY7PZCNeaCFFXolZLGtyurciUweSUJVFgiPHaDd5gUVBUAci834i5M+CqXm+WIUb+ROqn5rvhbkunJIkEu0uGwyXBXOXD6DjH1YVJvbMwpFZZiQzOIUx9cpZE2GzC59XW2vsWfXusVmstnXqVSlVLpUij0eB0ihet9sLhw6XEhQkTr5TMjCa2FvEa8hBMNjVBSgvl+W2b+IocIy/PDFxBcTEo/RNwITgqDgogOsRAdmkpcXEtT9EzSNJ44IN3Mdl0PHZxkg+shL5947h33E28OWkB9k3XwJmtb/NQXg5WezBF9mAyMvyz4m9BOE6Q1L+NwGUyGTqdjqIiYVEkKCgIiaS2Q1VZaSRBl40EcDgysVh88+VzSaQUGnQAGI1VKBRtb4OZU5yM260kVl6FxiKmAZ2I3QkWGzhddizi+RGph8MlkeRIYgkLsxHchu/I3rwU7A4tOl0VQaE++q65XeBw4gDcuL3yndaojESrDDiRYLG0P/EiX+JyuSguLiYoKAi5vG3X4xbtnZiYyIEDB4iPF1buP/30U8//Afbu3UtaWlqbDBLxHnt35tJFYwQgNMY3kzyRepBIKDFGkRKRi63Cv5PHzoy+qJz7xr+O3hyCTHaLX44ZFhMFBaBVmykryoXevVs8xraDUj5eeScAC3y05pGUlEhe+QIAJOa2qcXm59f8r5TkZP+oPpa4M5jz2z3sLUniPL8c8Rg1DnSNw3UiVcZKtJIy3G6QaINA4pvoltsNJSUuwIlcDipV21P/iotdCAksNoxGP61QdCCMhioq5CXYnTIUVW13bkU6HwWFDkCOxWbHZGl9dKek1ILdrqayUvjXJ7gcYC7B7YZKlwSztfW99WqoMJRjlFcIDd3Ls3x2/WuvSKVSUlJS6izCtZQWXV1GjRrFzz//zBlnnAHAxRdfXOv1Dz74gBEjRrTJIBHvoZRl8cVaFUkxoZwu936zP5GG0VuiSSEXmdUQaFM6DY7KYl6//llKKiMB/zhbETEhWO1KVAobhqLsVo2xdavgcMvlpahUvukPptFoqHSGAhW4jEfaNJb60EssuH07H688i7i4c7xjYBNYQgYw9b1H0GpzeMcvRzyGRCIhPj6emJgY7PXIGy+d/zSXRH9BuSWI8Cs2+dSWV548C4cxj9sf+YAew0a2aSyrycadk46iN+mYt7CC9PS29dzpjOxav5X03DswWaUoL9oq9toSqYXD4eTcc+2AmsWLi0lPb31kZ+bM9fz7b0/S09fxyy89vWfkcehLjcx6bB9aVRXjbg2if/+WLw6eyNLvNnGR7DGkUmDsalD7Rwm4vaBUKpFK2977sEXO1ocfftjo6/PmzavTYVkkcOSVmpn0tpWxY/uz/CRbjQg0m0rG8efWUew8LKpAegtHVSUABkso/rrcR0RKKKiMIjEij/KC1qWESgr+ZkxvK/tKIgHfNWN2qZOAXcjtheBytjpnP1n+MzeMXMmfO78mJqbSu0Y2QEaGsBhkNgdOEU4mk9Wbl2/M34w67DA2S5LP728vnLORmGAbyws2ola3zdEtPbiLFdMGU1wRhSRtj3hvrocBw/ogXXIYtQTyynJISO0VaJNE2hH5h3fx+NkjOFIazcABu1GrWx/9HJy0heuufJHsMh1qddsWUhqipFzN3O8vB0q5eWaxV37zCmUcxqIqYsJKsNvKUOjELKnW4MVW9RASEtI6tS4Rn1BQIEg4t6bORKRtbLffxv2fvs6a3d7vaH/SYhNEDIxW/ymHyWRgqdYqkNqzWzXGZclz+ePRsxnea7P3DKuHI8WP4XDKBAU6S+trBV1VRwEwuVV+u5737BFGZHAJvRIPYTK2r+aZdoOQim3C94qulXahJtpSfrjNYxXlCMIspUYd4eG6No/XGZEqtZRXCdOg0iPbAmyNSHuj7MhGbhlt4O5zslBr2pZm2jXFzgUDf2Jomu9E5A4dMlf/L5+EBO9cr7p2jabAIMwhy6vnlCItx6vOlkj7Yu3qCKSSV7FYfLOKItIw/fppgfVYrbt83sTwZEHuEm4kVXb/yjQfdcbz7XooqTA3vfGJuN1EBgkqhk6l76JaADGxkFdefYOtlptvDdJqRUCX0j/1WgAZGbHkvBXN9hf6oXC0rebM65iEaNv+o75fOCmqEFRjD+xse31VWUEeACWVoW1W0urM3PjZFSTfcyVbs4Oa3ljkpKKiYBcApea2q7LGpncDIDG82GdzghTtb1w0+Ey6Jz5FSIh3pN8TEuIoMAjXQEPBUa+MeTIiOludmNGxK7EtepAru60ItCknHROuCSE2bCipkQ9SViaKZHgDtVSIbFnd/nW21lqv5PI3YNPhVkyArcWo5HZcLgmayPimt28DaWkycsuqUzxa62y57CjdQp2hwTbeS5Y1TXRMNPl64f/lR3f57bjNISa4ujF8cLLPj1VmEr4jUquxzWOZy4Xopt4k1us2xh8b3iS37Cs2bXYE2hSRdkbOPkEQo8TU9t9+Zv8+AMTrCsg94hsZ9diKD/n+/pXcPn5lmwUdaoiKiqJAL1xD9AVtj7ifrIjOVicmTGlAJnWhCNIG2pSTDmXJXxS8C19Phby8vECb0ymIDF0BQLde/l2lLy3tA9zLwYOtiExVOz2FBg2jx/hW7SwzU8N3Gy5l7p+3QFAr+3lZBEU+u0OOjR5etK5xpFIpZSbBmTUU7vXbcZvCarXy6k83cdu895HEj/P58WxSoX9csLztKmLBSmEVusopOhGNERoqOLaHDvm2/5FIx8NSKnw3csvaLjQRnZyGzSFBKnVTVbKlzePVh8skzDXsMu9lUUilUub+dT7jXviVvw76/hrYWRGdrU5MZJBww1aE+C8dSKQajZDjHBcGeXn5TWws0hw01ZEtVYh/1ZA2b+4DvEF+bpcW71ujDJhTZuKss3zbiLlvXx2v/PQgd338Iaagoa0bxCx8VwsrYklI9G/9bWmVkEK3a2P7aZ6Zl5fH2v3n8+Hft5HYa5jvD6gRrtXh6rarmEYEC6vQCq1YZ9EYZ/Vbz4sTHmJg2N+BNkWknREiE1LALVIv9JeSSCk2CtfU8jzf1Ac6jMJ1wybr6tVxD5Ql8Pv2cWw/6Nt7WGdGdLY6MdEh5QCExPg+/UXkBNRCOlBsmIzNm/yj6NaZcbvdvPKjnXNfAlfqBL8e+4pB32BdqOLNqz5u8b7Got0A5JQKfQp9Sc+e8YCwEpuT08qaAKvg6BTo40hNVXnJsuZRVCk4s8YSvV+P2xgHDx4FBAcoOdn3iq6acGGRJjK47ZEtibW6VlCua/NYnZlTMvby0AUvMyJ5Q6BNEWlnRGmFEgCJ1jsp4OU2IR3PVOyb6L3KJVz/S4zDvTquTmcF4OhRMUreWsQufp0Um81OXJhwoYhLa/mKvEgbUUfjckmQy5wU5dTfLFWk+ZhMJvYcfYE9RxM4UDSMuEz/HVsbFoZSbic8yNTiffV5+wgFSs1pPlf2S0pKBLIJC0rgyK4jdO/er8VjWCPHE3qDhRB1Jc+/usLrNjaGqboWT02pX4/bGPt35jDxtE/JKY0jImKsz4+nSTyV6XNfZm9+PCNnuttUd7E5P5n/ZW9BlurdVe7OhixYWASJCdYH1hCRdkd8mCAWFBrbyrTsEygxpWEwmdi7W8oYr4x4HC4nUcHCtVMT6d3sjz4ZuZyWMI3B/VzAm14d+2RBdLY6Kfv3FZOhE9JHUrtnBNiakxCpgjJTOFHBZZjK2s/ksaNSXl4OjAf6YDb7V90xKEJY1YwKNuJwOJDLm3/ZXL7/dNb8OJKDxdHc5isDqwkKCuL0nu+w6vF3MVnigJanrxYWgs2hotQooWtX/6aMOBSC4lWYsv0IylQe3cendz1NdkkyEknbmkU3h9Q+A3n15zMA0OuNhIe3Xtzi0Q9ncfToUq64Yhl3eMvATkhIrNDsuWZxUkQEwOl00f+R9SSG6/l4sXeSwJ7/6yWW/zmGzMyV3PWqV4b04LYUIZO6cLqkxKd5t93PWSP2c0+XDzDa1YjOVusQ0wg7KQd2Z6OUC/1q1DrfqqCJ1E+ZScjzllj0gTWkE1BeXs7kkb8zeeR8okP967yGxwkKf1EhxhYrS67eEc/8lTexs9A/Cx6q8BUAaNxF4Gp5yke+xz8rID7ev/35zOruzPntHpasu8Cvx22MEKnQE6fS6R0Z5aZISQkGyoADHDhQ3KaxqqqENNDoaLH3ZWMkZghh8phQPabK8gBbI9JeOHiwFJM1hv0FmfQfnOqVMZNThSbDpaXebzNgLK6utzXE0qOnd9uMaCOF6HiwwgJOUUimNYjOViclSH2Yxf+oWLEvFmT+rb0QETA6BWdL5aoKsCUdH71ez4vXzGb+7TcRpfWvuqMutrqOJsRASXHLxAYOHXIK+0a2okdXKwiKSMPuAAkuj9hFS9DlPsXCOyYyPOM3vzdDV8X3Z+qiOcz78xa/HrcxNG6htkIV3vY+O81BKoXzR/TlvAEZOK0H2jRWYmgRkcElJCWJzlZjDByWgsUuKJwWHdkaYGtE2gubNwuLHVJpKSEh3vkNde8uOFmVlTqvjHc8+RWpXP3WFzz4+VOkp3t3gV0X0wV7zdqdVSyLaA1iGmEnJbfEwk3vWBk/fiBnBtqYk5R9pnNY8fMpbMuODbQpHZ7CAj2navUAhET6N71NFxuJ66Ag2WsoOgS9m1kL5XZxasxfyHsHQax/eh3FJyRztFxKWrQLTLmgbZk4TqpyGd3P2MSyLd8THu5fp6dnTx0ATqcOmw2Ube/r22ZULmHCJdF6p2ajOXw0qYTYEPi7cDNwdusGcTnZ9twopFI3Xzl+9qp9nY3IKClHKqWkRDjR5+2A3mcG2iSRdkCM9Cfm3TqCw8Y+wGqvjHlKbxPLpp+PWmHE7V7htV5YAHuzNXz179XATt6P966zFRGZTGF+AkkReVSVFqINSvLq+CcDYmSrk1JYKDS0jI0VJ/qBIk97Ow989hordw71Wcf4k4WivHIUcmFpLSQy3K/HTkiUYbAI0WFjaXbzd7QU8sIlb/Lbw+NIS/PPupbNNpKc0hHCg9Y0NjYLkTuHPNirE4Hm0KNHNNGhufRN3kb+0fYRDQ6uPgcSrf/qXivtQhTNXN76BqIOsx6pVLjmxKcmeMWuzky5VYg4VBXvC7AlIu0FqWEDN59p4PyBWV4bs0/fBM4f+DOje63yemPjPXsE2XeZrJjgYO8u7qWmxlBoEFRZ9fliK5vWIDpbnZR/VkUhlbyGxXJ6oE05aRkwIAxYj8u1E4Oh7X1zTmYqSoVaKZtDgVTh/Xz3xlCpYEtRJN+uh3J9C2T8qwRnJ18fT2b3MB9ZV5vMzCByy6pXHVvqbLndyB3CBMCt9v8iTVxcLDtfTGXbC/0Jdq7z+/FPxG63ExMs1D7klvb123ELDUJ9xIHtrW/eXV4oROQqzCGkdxUX3JritX8mkXTPVfy8ve3Na0U6By6jcP20yLzQY6ua6ORUrHYlUqmbPZt3em1cgIGJ33HJkFEM7P6hV8cFiIuLo0Av3MNKj7Z+EehkRnS2OinnJf+FbdF0LumyKtCmnLScdaac7ilj6RZ7D/nialCbMBuEwvXyKh34OeICsGj/2Vz+BmSVND9C5TQKN6Wc0mT69fNPNK5vXx05ZULqoFWf27KdHZXIEYqfK+ytTF9rA3K5nGKj8NnqC/b4/fgnkp+fT3Kk4HzGdu3ut+OWmYVaOYnV2Oox8rMF5cSSyghiYsRGpE3xv013cbTsS9Zv9M+iiEj7x1LmAqDC7sU+IxIpeXohQpR3oG01mSfS3f0x3037HxPP9H6/OI1GQ2GFIBJUWSw6W61BdLY6KaHKCmRSF8og/9SKiNRD8Wr2zK5g2XREZ6uNRIdWrwIqA5OOWVFxOjCVfS3IMqrIF2zOLSth2DD/THgzMxNYuXsw7yy/iwLXGS3buVpQw2AKRa4KTG8+g1VIoTOWHAzI8Y8nK+soN32wgNvmvU9Muv8au9mkwnclWNb6xsYui+BslRmlKNtD8Vs7JzZWSFHOz/f/Qo5I+0QrEcSNiqv6eHXcCofwXUuK+M+r48rsQjTbrfaNsNHHq8dxzgu/8eve9qMW25HoUM7WCy+8gEQi4b777vM8Z7FYuPvuu4mMjCQ4OJjLL7/cU69Uw5EjRzj//PMJCgoiJiaGBx98EIejc3fCjtIKaWuqMP8qiokch0Y49/HhcPSofxX0OhsuiyD37pD6N4Wwhq1bxwCvc+hg8yXATaWCkp3BXkR4uH8utYmJify8pSdTFrzDhoJxLdu5ul6rQB8XMAW7kqpuAOzb2oJ0TR+xfXsZv20bz0crbyAizn8RD7daSFvSqVufehwszwagyiEu8jSHId2P8OKEh5g0aGmgTRFpJ9Q0NA7xUkPjGqwyYQHcUZHt1XHldiES7lJ18+q4NWQbEli+/Ry2HxQj5a2hwzhb69ev5/3336dfv9pKYNOmTePHH3/k66+/ZuXKleTl5XHZZZd5Xnc6nZx//vnYbDb++ecfFi5cyIIFC3jyySf9/Rb8SkyokHYVFpcYYEtOYjSCIlCoBjavtwbYmI7N+mwl574Em11XBuT49497C9tCJTcP+rbZ+zirb6YWaZSPrKqLVqtFLhecph07WjZZd1sFh7bAEEd6utrrtjWHUlMaAPbK1qfQeYs9ewQbgoLK/Zq5qtZVtxrQtt7ZslUKTpbZGZjFiY5Gj3QjD13wMlcOXhFoU0TaAS6ni6QIYdE+oZt3xXEcSmFeILUc9d6gbjdhSuF6ZbAO9t64xxEZKfRtFZN0WkeHcLaMRiMTJ07kww8/JDz8WO2DwWDgo48+4rXXXuOss85i8ODBzJ8/n3/++Yd///0XgN9//51du3bx6aefMmDAAM4991yeeeYZ3nnnHWy2ztmczWSyEhcm1BokdPHNKodIM5CHYLYJk9aKIu8qD51srN9+Or9u/Yw/tl8RkOPLVWoUcgfBiuY7AS6jsDJa6fSfuAJAaKgeXVA5przNLWpsrA+5DOUkK5e+/h0ZGaE+tLBhbFLh+h4sa1nzaF/gKD3Edad/wum9/SvWoU4YygOfvcIrP01t9RiH9NG8s1zKzjJRibA5RCWnAxAfVorb5QqwNSKBJudgFhqlBYBeg5vZ6qOZVDp6oK9Sc/So9+TT3dYyVAphPhvjI/XRPpkF3DhqKhOGvO2T8Ts7HcLZuvvuuzn//PMZO3Zsrec3btyI3W6v9XyPHj1ISUlh7dq1AKxdu5a+ffvWkkAfN24cFRUV7NxZvxqM1WqloqKi1l9HYveuAqJDhYleSqb/JItFTkAiodQkRDXcJn1gbenglJSkA9dSWBggZTVPapep2bu88Nst3PTBR/y55TZfWVUvaal7KXg3mhdHXQDm5q+e5ueD3amkvEpCSkqMDy1sGKlW+L1EaALvbGVot/LJnZOYerb31b0aI63PQF77+QF+3DSRykpLq8Z45dPLmbLAyccrnvOydZ2TLr17AqBS2NEXeVe4QKTjsWG7g6Abq+h2/wbCo7y78LTVchvht5m5/YN3vTamsUQIN5VURtKjl2+u3aNHHOXj2+Zw29CPfTJ+Z6fdO1tffPEFmzZtYvbs2XVeKygoQKlUotPpaj0fGxtLQUGBZ5sTe03VPK7Z5kRmz55NWFiY5y85uWWNQQNN9t5DyKQunC4pcm1gJk0iAgarcP7ljsCnRXVkTknZzw0jF9AnJTsgx1eFCp9jRFDzP8ffNvVj/sqbUOj8+xscckouR8uF4u4a+fnmkJ9fIz6ST7yXm2I2F0l4d9789V4+XXN1QI5/PPFhWwAIivZvlC89PRQoA/Zz4EBxq8YoKxPyHsPC2v0tvl2Qmh7s6SNUkLUlsMaIBJydOysw24LIq2h+jW5z6dtXaCdhs0V7rf9meXVNeL4+lvR03yxIBkcJLSmCFHZwNH/RUUSgXV+Jc3JymDp1Kp999hlqtf9qCB555BEMBoPnLyenFc1BA0hwUDaf/6Pi7/2xIG19rxaRtmORCBGRYLl4cWoLN5y2ggW338jQ5NUBOX5otFD7GBlsbLa4Tnm5FoAuXfyrBpecnExOafWDFvTaii14kEV3Xsvg9JUBa4Ye3W0A933yJu//cS9OZ0BM8BCuEiSOU3r4NxVPJpMwfmhPzh+YicvauihLECVEBpcQHRXgk9hBiI6Gouq2A1XFgW87IBJY9u83AxAS4v2spsGDa66tYeTmemf83fnduGrOlzy15HafLZRFxXXBXF154zYXNr6xSB3atbO1ceNGioqKGDRoEHK5HLlczsqVK5kzZw5yuZzY2FhsNht6vb7WfoWFhcTFCUXGcXFxddQJax7XbHMiKpWK0NDQWn8diZxSBxPfsfLGxkGBNuWkJ096Lq/+fD8bD/QKtCkdFrvdTrhWuPmpQ73XYLIlRCUKilTRoXrKy5qR4laVw+UD/8eIzDX06KH1sXW1SUxMIqdUBYC7BZGtbkHLuP70xaTEPIZGo/GVeY3Sq1ck4ALkFBcHRuYfwOFwEB0kfOdC4/z/251/YznLpoO5cHOr9p933VRK3o9mVPcdXrascyKVQlV1rZZVL6YRnuxc0PsN5t2q44Fr3vD62DExQXw77QK2zu7Hrg1bvTLm1n0qvv7vKn7cMoCgIN+I4kTHxFOgF+6D5fn1Z4WJNEy7drbGjBnD9u3b2bJli+dvyJAhTJw40fN/hULBn3/+6dln7969HDlyhOHDhwMwfPhwtm/fTlFRkWeb5cuXExoaSq9enXMCXJMe2ZAzKeI/bIm3Mf2zV1m5ezSVlYGXs+6I6PV6j7MVHBGY73Tv6tVIpdxBWVF2k9vb8lfy0a1P8uI1Mxg40H9qhACxsSnklE0DwFrefGdLahWukU5V4BaXkpLiiA7dRb+UzWTtC5zsVWFhIYkRgsMaFNXb78evsAsTJlPZoVbtHx4kKBlqdJFes6mzY5EI58plPBJgS0QCTaJsOzefaWBoZuvSeJtiQOpW+qVsp+Dgfq+Md+CAkDmjbYOCaVMkJcVTWCHcy8rycn12nM6KPNAGNEZISAh9+tRuKKfVaomMjPQ8f/PNN3P//fcTERFBaGgo99xzD8OHD+fUU08F4JxzzqFXr15cf/31vPTSSxQUFPD4449z9913o1Kp/P6e/MG/q+OQSV/DYvFfbxiR+uneXYNUugGXaxv5+cGEhHg/B7yzU15eTri2CgBtuH8dlxoiooNYfUBDQZmZpMSiJrcvPbKLeCCnNJnxvf3rvHTtmsiyUh0A1vJcmpWA7XKgcOkBkGgCp2CnVqtZ98xA0qIcZKk/Aa4LiB3ZWdkMDxNyZozutOadQy9SaOhKZuQm9m2Tck5Ld3a7idDqAdDFijW7zeWnI5OY+MJWho/uyxl3B9oakUASJBGyF+Rh6T4ZP98QTXp0LlXF3nHsx/b+jOIhf2PS9AAu9MqYJxIREUGBXphTluZmI+pct4x2HdlqDq+//joXXHABl19+OSNHjiQuLo5vvz3WC0cmk7Fs2TJkMhnDhw/nuuuuY9KkScyaNSuAVvuWS7r8jm3hA5yfGpj6FpFj9OnlZPiAq+iRcDP5YoOKViE4W0Juu/a41g/+5sFf+nPlm1BQ3nTNVvnRLAByy+LQ6fzYpAmhsXFOqVAn5qw83LydLEVIcONwSjG7zvSdcc2g3CI0VK4s8s6qb2s4tHM/Uqkbq11JZLz/HfxysxDBlVhaLqzjslWhVgp9/WKSxT6LzWXT7gvIK/+Crdt6BNoUkQATKhOuQU6lb6LapWYhiirxUu3T8JCFfDftf1x0qu/qDSUSCcWVwmKxuQUZEyIC7TqyVR8rVqyo9VitVvPOO+/wzjvvNLhPamoqP//8s48taz/oVAakUjcqbceqNeuU6Lew+oFDHC2DVaKz1Sr05WWEawXFh7iUwHWvt9kuAoaRldX0BFjlygIZOJQH/NoQFyA4OJh9haG8s/wuUvsmckFzdrII382iiliCtN7r/9IajI5gwIxFnx0wG7bulfHZ3z8TF3GI+Tf4f03SgvA9D5brW7yvzViCGrDa5aR2EVPJm0tysiAmVVYWmHpFkfaB2+UiPky4xku0vumRGBIrCNd0S1jllfHUlAMgD/GtcvYn/53DV/9OofdwKWf69Eidjw7nbIk0TWSwEAVQhwdGvlnkONTCZxAbBnlHvdgx/iTCWJ6PrHq+K9MELrK1f/9NQAwHDyxsclu1Mx8UEBIbGBXKEksQUxa8w9VXZzXP2TILdZ75+nhSUwObXl1q6gYUk73bybAA2bDngIRft55LUlKAxBI0QjQtTNXyGgxntQJlSaWDhMTACMp0RPpk2nj52ulEhe4Gzgu0OSIBIi/7MInV/RS7D/RuQ+MaNJFCxFntKvHKeFqpUNMsCfJtX9U8UzwHD56NO3abT4/TGenwaYQidYkNFfKNIxJSAmyJCOpoXC4Jchls3yj+3FpDid7I+Bfh1X+HgMzf1TPHeOO6GdgWKhka8kuT22qrc/4VYV18bVa9REUJN9/Dh13N2t5hEuwt0MfRtatv1KyaS7k5TfiPOXDtEmq6fcTE2ANyfFWYIMgS1YqC98rSbADKqiQ+UybrjGR21zH9/FeZfMbPOCzel/wW6Rjs3yooeBZXRBKb4JtMCnWE4BSFKbzwPbNXEqQU6kudyv5tH68RoqOFiFxR02XLIicgRrY6GeXlJuLCBAWdpG5dA2yNCFIF5eZwIrVl2A36QFvTIdm9V8Nv2z6jSKbhgQDaIZFJUcgdyF1N3CCdNkKVgqNgVw72g2V1SUx0UZirJ8y9H6zhoGpcla5Acz1dJl1NkMrA4iWb/GRlA6iFCU64uhkS+z6iR9he+p7+CdqUWKCn34+vSTiF+z96lQOFsZw+s2X7FhqULPlditmtxTdJUJ2TjJ5JGP/VEqyuoiRnK3EZZwTaJJEAkH/oEMTBUX0MvooLy0L6Up6noUTf9jmasSSfYKDCHEJGT9+mDfftXkpP1VR6dzcCH/n0WJ0N0dnqZOzeeZQRwUL+bny66Gy1B8otMURqy5DZRen31nDkiBy4lry8wEoyW9EBoJE0UbMlkXDJm68TFRRKxOAhvjesHnr3tvP48KGc1Xs/5H0C6Y2r+uXng92pxGCykJAQ2DofdbgQ1Ymsvo4FgmuH/slFA5/lmyMzoeV6gG0muVd/Xv9lDAAmk52gIEWz9/3kx168utBJaOjfPOgrAzshKalycn9OpHvCPvIO7BSdrZOU37f35+ZHquiSvIodD/vmGNGZZxMxSliQO3KHgeTk1itHlx3NIxjIL4+l2xjfXrtHDS9m4jlzsDpk4J6H3wuSOzBiXlMnI2efoIJmcyiQaQInJiByDJNLWB/TyqoCbEnHJMhZwA0jFzCq19qA2uGQC9GhEGUTn6NUwU8bxzN/5U307BWY9guDBqnJKa1W8zM13RPl6FFn9f8KAt6fLySxF2/8MpWP/r4FdwD6GrtcLuLDhFSirn1T/W8AkJERAZQCe8nKalldR36+kPqo0Tib2FLkeLRayNML3/2SnOzAGiMSMLKznZhtQTgVvmtGHxsXjESiB2Dz5rb18io6LMz58vXhxMf7tk4/NEZIf1TJneBouVLqyYzobHUyQsNy+PwfJX8fiBVXHdoJToVwA9epzAG2pGPSXbeHBbffyJ1nfhBQO2RBgrOl0zR+kzEYKnC5hALoQYMC0xcsKSmJnJosPFPTMr3pZXfzyZ0T6Jv8L1FRgbG5htQ+/Zj26RvM/eMe9Hr/H7+oqIjkCCEK3WdoYBrfy+VSzhnSnQsG9sBpaZlIh72yhKiQYsJCLT6yrvNilgifu8a9L8CWiASK/HxBlTI+3reLFSqVUPi0fbu+TeOsy+7DlW9+xcs/X+3z3rExCelUVk9jXKYCnx6rsyE6W52Mw8UOJr5jY+62wNSKiNSlMvR8XvnpAf7dfwpms+hwtRQlwqTR6g5sk26NTlg1jNA27mwd2bSMySOX0DtpB927+251tDGSk5PJKRXEEWyGpp2tHiE/cd3pX5CW+BwymczX5jVKWlocVEsZHzjg/2jw0SNZxOmE/8tD0vx+/Brm31TBj9PBVLCxRfvd2P81it+L4c7R3za9sUgt5CHCAqXMJvYROll56uJbmHerjhsv/c+nx3lxwnNsnd2PYP1vbRpn674wlqy7kjVZvq8tjY2No8AgNHouOiy2smkJorPVySgsFJrkxcbGBtgSkRrkXSbx4Oev8PeuC8TGxq0gSC44qA5pYJ2tIadXK8QFF+J0Nrzq6c7+lvm338T1p39EoMTgEhMTyS17BgBjURONjd1uZPbqVBZ14FOPQ0JCiAnbRf/UTWTtbWZTZi+Ss383ABa7DFSBi/JV2IR+T+by7Bbtp5UL0RmnXOyz2GKChIi0wtG21C6RjsuwxCPcfKaBXl19Oz1Oi82nX8p2lNa2OfaHDwtpwzqd7xdy4+PjKNAL18TCI9k+P15nQnS2Ohn/rk5AJn0di+XUQJsiUk1ysgSVagvwn+hstYJgpRDZcisC12MLoHu/rqzcDb9vd1FeVtrgdu6qPACKqgLnHIaEhJBvECJUKkcTNVsOI3KsAMiCE31tWrNY+eTZbHl+MD2j/d+MPnev0A8vtywloKnYhRXdANi7pWX7hVT35pKoA7s40RHZZbqShLuv4c5PJwTaFJFA4HYTEyzIqOsS+vj0UFUuwWkJom29tq44dS6XDjmD04as84ZZjaJSqSiqCAFAn5/t8+N1JkRnq5NxdfdfsS28n/HJgRUTEDlGcqKT8aNupXfSBPLy8gJtTocjVC2s2MkDLPii0EZz8VthXDUHSkobliUPcgu5+AZbYO012IX8fa28DByNrHpWNzSuNKtxSkb4w7Qmqay23VSW5fdjW8uF7ICiyhi/H/t4yk3VQiWWlqmY6jRCawJVaOCjlB2NrNxTyNcvZt/+sYE2RSQAFOYeIbi6lWNE0iCfHsulFn7fkZqGF+6aw/lJX/DttNWcNcg/qa8lVYKzZTWIc5mWIEq/dzLC1XqkUjeqYHFVs91gPMDSGzZQYYYFYmSrRbhcLsI0awAYMEwXUFscDlCpbgFcFBSU0aNH/dtFa4XPOKVnYBujKrQS3vz1XuQhKu6+spFib4tgb74+mbCwwCoR1mBCB+ixV/hf7v/nzb1Z/r9fSE4rIJCup0UiOEvBMn2L9osKEVLgohIa760mUpfMTCHv12QS758nI/u27iQWKKmMIDLSt4stGf0jwAIpUf+2aZzg6rRhTXgXb5jVJF9tGsvXa6fQZYAzAE0xOi5iZKuTER0ipJAERSYE2BIRDxpBWCFUA8X5ge0V1dGorKwkQivof0fEJQXUFqkUiopeQCJ5hUNZ+vo3clrRqYX+KT0GBTaykJjo5r5P3uSlZVNAEdzgdu7qyFaBIY4uXTT+Mq9Rys1CCl1eltLvx96bHcVv28ZT6B7m92Mfj7u6EXVYdVpgs3DaCFELabcZfcS63ZbSu3cEs69+mE/ueAZTuf/rBUUCS0GW0C7jaHmszzOIY9IFpdOYYGvrB3GYCVEKNVvqcP80Xy+yJfLnzrHsyBKvLy1BdLY6EW63m5gQIb0pMjElwNaIeJCHYLYLuQn7tukCa0sHQ6/XM+1TuOF9OcrYwE5+pVL47v5LsS1UElr+Z/0bmYV6H7MNYpL8c/NriC5dhEa4ZWWNKyJaDILyX4E+jm7dQnxuV3OotAv9rZTONkxEWoleL5yDLl387+gdj6o6yhgVrG/+Tjbh+u9yQVh0YHqEdWQyM7Vcd/qnTBjxA8WHWqYCKdLxMZUI9a0FFb4XxolOHQhATIibCn3r6rZMZcJCmcWmQhed4TXbGiM2Vlj8LC4W3YeWIKYRdiIKC43E6YR6kZTMbgG2RsSDREKZKZrEsBwklsCmlnU0ysrK+d+eRaw/7GSOLZ6wAAde3BKQy5zYjfXn2burcpAAuWXB6AYEdrLbo4eWEE0F6RFHcBr0yMK61rvdEdXt9Jl0ExplAcuuOORnK+tHESqk8ERqG66N8wVut5trTlmNzVHMwF6n+PXYJ6KKH8S0Ba9xoDCWH59q3j5VZjvzf5eiVri44oLA1px1ROLiJGwoSyAp4ih5B/eT6tuyHZF2hsMoLDyVWXyflaANT6XQEExRRQRFa/Yz5vyWO3gluUdJAfL1cXQ7yz8p4H17VJDquIfuXQ3AIr8cszMgOludiL07jjBKLfSliUmpf2IlEhgqHTFADmpMgTalQ1FQYACux2wWIkuBptJaLadtrT+1q8SRxLWzl6GQSXj9/MAq+/XqFcH0867kyct+x7Hrdhj+Xr3b5eeDw6mg0lxFXFz7qNkKixXSoGNC2lY83lJKSkp4/qr3iQkrZUu879W9GiO5Zz/e+PUcwIXN5kKpbPoHsPJfFfcsdAJ7ufkDse6opchkkKcXnFSDmPJ90vHqr9dzzztzGD3yL3yuRymRknb/RiyWTJ59dgNjzm/5EEXZWdXOVgRD/HTtHjm8gktHvI3dKQH3woAqtnYk2sH0RcRb5B4UlLuMliAkyoZrNET8j10m5DeHVcuYizSPgqNlTB45n4sHf0Nwde1WIKlyChNYpbt+hbitu038seN8ftk6ni5dVP40rQ5pacnklP0OgNzasPx7dnbNd7Kg3ThbcRm9ef2X+3hn+T0YG+8h7VWOHjlITJjg4KX39k/BeUNkZkYCpcA+srObF+E7fFg4WXK5HYk4CWoVxUahVs5ZWRBgS0T8TWmpGrMtiMh4nV+OF1JdY79vX+t6ZJVXy68XVoSiVPon7VkXlwmAQuYGW7lfjtkZECNbnYgwXQ6frlQSERHFeYE2RqQWkupmmdEhFqxWKypVYCfiHQVjcR7zb59CpTkYifTyQJuDFaHXV5C0AWdrqzApVihKUSii/WZXfSQlJZFTHRhyGg8ja2C7/tbb+PQuG899P5yQkFF+s68xUnr05/5PTwGCue2Qhb591X45bmnuNgAsdilh0YEVOFGrFYwZ0JUgqQGH+R+g6TSj4rxiokJCsLr1Prevs6KNFlK9o7T7A2yJiL+pqBAyFzIz/ZOvHhlpprgYDh9uRC22Ef7eO4IP/vsKs/sQl3rZtoaIjU+h7CBEBIOzqgCZSmwx0RzEyFYn4nCJm+vn2vho95BAmyJyAs7o83h52XRW7RlFQYG4YtpcTOV6APTm0MAaUo1bKax6h6rqD7eElP3M5JHzyUza7U+z6rclJIRyqxBRdVU23IOld9hPTDztS9JSXm830ZCIiHAkEuF3smuX/1ZPKwuFz63MomkX6TELbzXxwwNQlbehWdv3lH9O8XsxfHDTMz62rPMSmSQIymglhQG2RMSvuN18O3UQ827Vce4Ym18OeeOoZWx7oS/X9PyoVftv3h/DknVXsrPYP+IYAPHx8RQYhOMd3ium2jYX0dnqRNRM4ttLKpDIMZRdLuGhxS/z+/YryRd7bTUbe5UQQaqwaUisVAAAVq5JREFUtA9nq/dgISIZGVK/LPRZcV8z//abGN5jix+tapgi4xMAKNwGcFTV3cDlROHSAyAN8r0CV3ORSCQkRu6nf+pG8rL9d0MvyxUEhsqs7UPWuMImRPRM5c0TLpHYBcfUaG9cgVKkYVThQr1zsKxlzaRFOjZVhjzO7Wfh5jMNdOue5pdjJsY66Ju8g+TQhtO8GyM/X1gQio5uXWSsNeh0Ogr0wqJjYfZBvx23oyM6W52I/1anIpe9gdkcWBUtkbokJEBw8A7gb3JzRWer2diECY/R2j6crbReqfy9C/474Kj39UiNIOFrVwY2hbAGdYiUCnO1nLupnhu6tQgJLpwuUIcm+9e4JvhpxgS2PD+EU9OX+O2YpmLhcz1U0Mdvx2yMmhXkPZubV6+oqk4fNLtEZ6u1VCjPJuHuazj1mdsDbYqIHyk+vBmAMiOEhvtnwVoTKfSOjA1tnRDQjaOf5bJTzuD0oQe8aVajSCQSSozCPaWy5KjfjtvREZ2tTsSkvj9iX3QfZycGVkVLpC5hoS6uuehB+qdeRlGR6Gw1F5lTiMZU2duHsxWaOISznoMb37PjdJ6wmugwEx4kOIeayMAqEdaQmOgip7TaiTLVk0pY3dC4yBCOQtW+dK5NbsFhsBn811w2RKYHoIr2kR1Qbq62o5ktI4JkwnYOafvol9YRqajqSr5+MUXFt+J2B16UR8Q/7N4oOCz5FbF+S6eOTRda9CSGty5l9Ya+3/PNfas5ta9/W8qUmoTri9MozmWai+hsdSIiNHoAVKG6gNohUg/mAj48/1fWz4L8PHE1qLnER/4LQGyyPcCWCCgUkcD1uFy3odfra79YHTkyWmScNa59qIF26aLg3T/u4olvngJtet0NLIKzVWBIJSKifaTO1WCTCoXXLlOe34750rJrGP/iLxx0+KvcvHEs1YIsWmnz6tYiQ4TPUxXohnQdmD59hO+d251AebmotnayUHJYuM7klvmv/qnP0L4AxIYWtbyxsctBqEpo+h4a293bpjXK9zvOYszzf/DZ+iv9etyOjOhsdSKiQ/QABEe1j1V1keNQR+N2S1DIwVDkv5X6jo7CLazYKUPaR88gk0kBLEIieZ3ioqJarzmN2QDkljkZPqJ9NJTt0UPLu8vv5tlvn8Smqtt7z2Gscbbi6NKlfU3QDTZh1bc01z9RGrfbze4jvfht23jC0wb45ZhN4VYJtRFhqvr7up1IZLDg8Kd1b0h7UqQpunRRcf95r7J4yh3kbf890OaI+AmJWYgulZoj/XbMsJg0LHahh2TBoU0t2tdiKEQqAYdTQnhcDx9ZWD/lrkT+2jmGHVntIwOgIyA6W50El8tNXHV/mJiU1ABbI1IHqQK9RVilztkvfj7N5av1aq59Bwxh5wbaFAAiI2HtzFOxLQymIut/tV6ryN8JQG6ZoNjUHujZMwqwAlLy6gkQVZXrcbkk5JfH0q2bzs/WNY6ZFACCZf5RBisvL8ftFpop9+0b7pdjNoUyTJjMRGn1zdpeqxBWutVh4oJbawkNhXP6/so1w7+kLHtboM0R8RNBkmIAqlz+c7aQSCgyCv2xyo9ub9GuRYeFDJlCQxyJSUleN60xEhKENMvSUv/09uoMiH22Ogk5R/TEhwkr7Wk9/RtSFmkeeksM4ZoylE5ToE3pMPy16SaMxgguKB1Ne2hoEBQkREDkMiflBbXz1UuO7CMcKDR2RyZrH5GF1NRk1IoDZMQ5KT9gIS1taK3XD8incerkKajkh/j71uZFT/xFcJTg+ESFNK+hb1s5nHWQRy/+lZzSVLp1neiXYzaFInYA933yOllFMfzwVNPbL90SipoyulxZN4op0jwkEiioECbcppLWqcSJdDyUCM3dnSr/plMfKM7EYKzgX4ObYRc0f7/8rAOkAPn6SAbE+dfmvj2qiDxzChmpZcDnfj12R0V0tjoJ+3ceIlUu1LXoYlMCbI1IfViIBfYQLLcE2pQOQ1XV2cAwjMaiJrf1F+UmIaXRXF47x37Z7tH89PllVNpctI+putDY+PTu17P8kR+wVPQEdtV6PS/PhcOpwOGsbHctI2JTU6EE4sKKsdlA6eNF1Oxde3juqiepsgShjrnetwdrJsk9+vDmr+cCLux2NwpFw4X7ZjPc/E4pYGTDjf6rc+uMlJqEui2puf1cd0R8y1VvvY3bkc5jj23063GnfPU2u3ePYuTIFUxtwX7ledkQAYUVYcjl/p3Kn36qg3P6voPTBbg+AWn7WFxsz4hphJ2EvCyhD0uZMQxkqgBbI1IfbrWQWhalteBw1C8dLnIMi8XChYM2cvHgpaTFtx8HtcbZclTVjrhs2h3EnzvHckjffiTUQ0NDKbP8AYDCVleNMCurJspaQExM+6gzqyGpRz9e+/leXvv5fnJyfC+Q4q4S0niKqoKRyQPf0BigR49ooATYS25u44pjhYU11xQVycntIw2yo2J0CpEtDa2T5BbpeFgsUVjsGjJ7+vc6GB/vAqCgoGUOi80gpBEWG/2v1Bsen4nTBTIpYC32+/E7ImJkq5MQEZXLp6uUhIWHc2GgjRGpF6UuBawQp7NRWFhIYqJYV9EY5eXlzJk0m9SoXPZFrQXaR8S20iY4WzJH7bS77GxBCj4qqv04hgBSbQqwB5nLCPYKUBy7OY9UTOazu2XMWjoMler8wBlZD9FJPXjgs/uBVEbvKqJrV99OgtxVeyEMrDKFT4/TErRaNaP6RBGmqsJhXg+NJNMeziokOlRBmdFGRET7ilJ2NFJ7CY5rXFhWgC0R8QcGgwW3W7i+DBzo3x6J6enCNLy0NKhF+y3dOo5FP4zGqTzEZB/Y1RjxCUmUbITYMLBX5qPQiNebphAjW52Eg0Vw/Vwbnx4Y2vTGIgFBEnsWLy17kOXbzyM/X+xP0RTl5XoiqoUBQqKiAmvMcZjdgrOiltSONFzU7VtuHPUxXVOrAmFWg4RGZlBeVb1qekJj477hP3HtiK9IT/0wAJY1jlQqRaEQIgt79vi+nsxdJZwbq6x9SeB/coeV7+8H49HG+yfacpZTNDeWdc+c4/e0os5GWk/hOxCh9m//IpHAoM9dw28Py3lrcjRdu+r8euxRfQ6y7YW+fHX7vS3ab9O+VL5ZdwVHrV18ZFnDxMTEUKAXFBB3bTro9+N3RMQrciehsFCQLY2NbV8TBZFjaLuNY8bicYCLW3N+Ykh7UHxox+QfLaWXxghAaFT7SYtK6iqo40WFHDr2pKOKB89eCCxk6qpVgTGsAaTSMeSUZhOu3Q5VORDWS3jBbkTuFqJwspD2ed1Ijc0mWOaivKAC8HH/G5MQzTDh/8lLY1TYNEAlprJDjW5nLCuEWCivEhsatxVdfG84CCEqB7jsIG0/0U4R72PI3cw5fZ2kxFQglfo3hbhL13D6Vu4gvzwWt1sQaGkOJSVCEWtiov9TnpVKJYUVQl1j2dFsvx+/IyJGtjoJ/61OQyF7A4tFnMG3V6KjITx8N7CUw4fFPOemKMwt9Pw/qB016o5Oj+HvXbC38LibXJVQD1VhDiEts32lVHTtqiSntLqOzHRc3VZ1Q2OjBXRR/pUObi5fTr2Tzc+fwthen/j8WFqJGoBDhf18fqyWUGgQnMxdm5yNbmc3CoItenP7aKjdkVGH9SX+7msJuvE+HK72Ub8n4jtMJXsBMNj8/9vJHChcb2LDisg90vzGxlPOncrlQ0/ntGF6H1nWOCXVtWKmsqMBOX5HQ3S2Ogm3Dfoe26L7ODN+faBNEWkAmdTFbdc9y+D0y9HrjwTanHZPRbFw4zGYQpC0Eyl1AGJGctZz8NxPx27M9gqhtiOnNJn+/SMCZVm99OwZTG6Z4EzZK45ztsxCKmu+Ph61uncgTGsSi1Soj3Ma64p7eBO32018WDkA2uh0nx6rpZSZqp13c+OplBKrINhSadP62qROj1IVTYH+M5yul8jPL2x6B5EOzdH9lQAUGTP9fuzoxDQsNhVSqZv923Y0bye3i+kjl7Nk6hoG9ArMYoDeIkTQ3aJiZ7MQna1OQkSQcCPWhLWviZ7IcdgreeHUz9nwLJQU+nby2BmICN4PgNkVYENOwO2OBSaRmzvS85w+T7hJ5paVMHRo+0l5BMjMjOa7DecyY/ELFEiONYd2m4XIVoG+K1HtqCbueFxKoVhdYvXthLeiooJr3prL+Bd/IbL7aJ8eq6WYEb5PWll5o9vpggS5d4dMvK23laSkmsUdBTt3is5Wp8cspKsXVPT0/7ElEoqMgsOklTRTdt5airz6KxqZ2MtHhjXOL/tGc9Zzf/LxPxMCcvyOhliz1UmICRVuxKEx7TMdSARQhOJwK5BL7JhKxchWUzjMhaADq7t9dak3GKKBhVRV7cHldCKVyagq3kM0oLdbCA5uX2lHKSnJ/LZNxm/bLmHcNKgRprfq81EDBYY4uvVtn3U+lY5uwD9UlUb69DiHD+eyN38ke/MVfNTOesK7VcICWqiy8chWrE6o6YqMb1/NqTsiCgXcMHIu4/utxH6wOzAo0CaJ+JAIlZBF4VAGpv2F3h5EChZPOmNTlB7NIRIorlAQlxAYld4qWRJ/7zqLTMemgBy/oyEugXUCHA4XcWHCxSI2LS2wxog0jERCqUkQIijN7R9gY9o/+4uDmPA2rCg5I9Cm1CI9PZTDb6ZgX9SbigIhomU3CBNdE+0vspyUlAQIkdQDB6ye5436ClwuCfn6SNLS2mtkKxUAncq3fbZ27CgGFICDdtbbGWWocM2I0jYe2VK4BOU8ibp9fpYdjVO6beCa4V+iNm4LtCkiPiY2RFA9VYUHph2LyS3cNxwVjYvg1LB3i5D1ka/vErD+iImJQmhNrxf7ujYHMbLVCTh4oJiMEEFwIb1njwBbI9IYlfZYYsklSNq+ejG1R1Zv7Mkfa99BkhbPDYE25jgSEpRYpS5kUhflBQfRJfbHpi+BcCiztL8V8NDQUJSKPHrEb8V9dBe4rwGJhF2SxznrhodRKXbw34Pt81YQmZQCRogNLcXpBF+V7hXu38UjF/3DvsJkZLLrfXOQVqKIHch9n7xOVlEMPzzZ8Hb/HYlk0+581AN8rNp4klBuFSbACmfzRQtEOiZKuaBEGp0aGCXS3MqBbLPZ2LCvC2c3Y/vyvMMQCQUGHf0CVM/cr5eNW0bfTZfEYuCrgNjQkWifd1iRFpG1O4vuUjdOlxRteEKgzRFpBKciHoBwjQ2n04msPQk/tDOOHEkCriAvb3ugTalFRARsq4gmKeIoxTm5pA+Gx5beizE/HUmYnQcCbeAJSCQSUpNXsvWZycIT9nNBqSM314HTJcdkrSAuLjB5/02RlJEBmyFel09BgdOzmuptlJU7ef7qd1m59zSgfTlbSd178eav5wEuHA5oqIXWHXN+w2oN44UX/vWrfZ0VM0LqaoisLMCWiPiSqiobGfcfRK2wsnFzYPqq/ZpzD1d+9BWRkZt4pBnb2wxHIRJKqsJ8bltDDB8m4cHUd4UHTivIxAhXY4hphJ2AwuxsAIorI0AqTt7bM7IQoWImXmenuFiUf2+MbuGHuGjw9/RKyW16Yz8ik0GJURAtMBQLin6b9yXz586xqMIDk9LRFGldcymtrH5QLf++b5/whERSRERE+0t/BIhN68erP9/Os0sfZ/euxtPo2kJU0BYAJNr2d/3s3j0SKAb2kpdnbHA7uz0E0BIXJ6oRegO3RvgtRwaJzlZnZsuWQkCKxS6le4/AXL8zM4MAqKxsnvMktQoKgAZrqM9saorohExsjuoHFlGRsClEZ6sTEBGdy6JVSv7NDdwqh0jzUIUJka04nZn8/PwAW9O+mTj0d76//xLGZv4RaFPqUF4l3OSsBiHXv7xckIHv2rV9iXnUkJSURE7NnLG6J9glkRP5/O4r6ZaYjVTaPm8FCk04D395N6/89CC79/hO+EErEc5JaFz7u4aGhQVzes9kLh7cC5flQL3b2G1OooJNyGV20tPbp9hJR2Pw6cJ5jA8rArc7wNaI+Irt24ULo1xeiEwWGHGjvn11ANhssc36qn285ioue/0b1uSO8K1hjRAXn0Bh9SXZWHI4YHZ0FNrnHVakRRwoknHDeza+OjQ00KaINIEi4Qxe/PEhlm2+grw80dlqjBCVGQCZpv1FXfQWwdlymcvBlMv953zBNcMX06tX+5zoJiamklNavQpqzgWXk/6RvzFhxBLSu3weWOOaQKPRA3DwoMlnxwiRClEzpa6rz47RWiQSCZ/d5WTp/VB5dF2925TnHaVwbhxVH2tJT9P518BOSq/BQu2bSu4Ca2mArRHxFb3DFvH7w3JeuvmigNkwpH8Q217oS+n7KeQcbjrjZeO+TL7bcBkmVeB6AoaGhlJoEPozblt3MGB2dBREZ6sTUFAg9MuJa28yWiJ10HU/k4e/eJEfNl7BwYPiDbwxdEFVAKhD25+6Wmi0sBoaFXwIS8EGnr7sHR65aDYDBvhWory1xMSkklM6EQBreQ5YS5DgwuUCdXW0tb2SHp/HoLT/MJf7rjdduKo6IhnUPmvX9FY1AKbS+ic1+dlCK4kyYzgxse3v99IRSUhOp8gADieY9dmBNkfER0gNOzi7r5MBaQ2n6Pqa6Pg4MmL3ExFczt7NO5vc3mAQUoVTUwNXJyWRSCiqFNLp9QViK5umEJ2tTsD6fzJQyN7E0g6V0ERqo1ZDYuIO4Btyc8WarYZwOp2EVztbIZHtrw5KERnMXzvhaKWMwkOC/HtOaXK7jWx16xZLbpngCJpLcsAiRFWLKyEmtn2L6sy7/WE2Pncqlw6e65Px9Xo9ieFC5+x1OzU4nU6fHKctFBkyAdi50VHv66V5R4V/jaGoVGKhujcICgplwOM3obrhSbJKdYE2R8RHSCzVzcCVAVx0kkg4Wi60eMg/2ESUyO1m+kVXc8XQ0xh2SmDTW0urBTpsFQUBtaMjIDpbnYB7hi3Btmgqp8WIzeXaPW4X9936Aad0uYIq4/5AW9NuMRgMhGsFAYeIuPbnDBSpRzHmefh8cwKluVkA5JbFEtI+fS2Sk5PJKdMA4DTmglm4Oebr09FoMgNpWpM4FUIaqdvs5Rt61RH+WvIK143rRmSIHoD5703jghEJ/LXkFahqP6u1ZWYha8Ft1tf7emWJ4DyXV7XTL2AHRC6XUFD+Li73THbsEEUyOivOSmEaXGbtE1A78iuEiLRN30SvLXsFT52/jq+n/kPPHuF+sKxhKmzC9aZGsEOkYUTp905AlFYPgDZcTB9p97idTM94i+nPwA3fi0WlDVFeXk5CsDC5Tg+QQlRjOJ2pwCT2748liLUAuNT1ixe0B5KSkvjvQDQzFr/AyAszOddUgBQo0GcSH9/OrxsawdFQOLwYCa46gu3bDM6S2Thr6rGnVz5R3VPJ9iC2bx9Dedl+0KZ477itxIIOgCBp/YqMaqmwOm+wiuun3kIiAZWqBIslkV27fCfOIhJYItRCLajR2TOgdkiDhTTG1Jj/Gt3OXnkEBWAwQXxSYGtM/zp0Ft+suRVNdCWBq3jrGIhX5k5ATKiw6hYWmxRgS0SaRKrAiiBUYK8UQ+8NYSgrRFNdRqMKDuzqXX3k5qYBCzl8+AIUdmGiq45ov5fTsLAwDpXIeGnZDH7ZNpKq6khIgSGWrl0DJx/cHCx0A8BV5b2aVKepEKXM1ug2SpkNp6nQa8dsCy6lEN0LU+rrfT1WJ6QeSdTiNcWbXDD4V76452p68lmgTRHxEQk6YREnMjlwYhMALpWQRiirTmtsiAPb9wKQrw8iKiqwC2V2TSJ/7zqLHYeSA2pHR6D9zg5EmoXF4iQuTLhYJHZrf0paInUpNgppcRWFp7FixYp2WSMSaMr1Bia8Dc/+Fg+K9ucMdEuxUfhuDGXvjCEY4fcnDwvszboxJBIJOp2QlnnwoJUqgxGnS0q+PpTExPYtrKMIFc5rpNbmNQXuzZs3e3U7X6MIESZikdr6I1sus/AdtEva32+lI5OZdISrT/2KdE37aqwu4h0sRj3hWiFq2a3f/9u77/AoyrWP49/NZnfTO2mkEEggIB2k+YIgSDmKVMVyFDtKUMrBwlFBEA8esWBB7KIcUSxgQUURAUFABQJSIyAQAuk9m7477x9DAgHSkGRmk/tzXblIZp9sfmF2snPPPOUyTbMYPSMBsNgzamx3aI/avTklt73mS3aEh6tXRPPyXDXN4Qik2HJwfx44hc/pPxaR7dppnEbUZuXKlfyZqF5R93MrZ9CgQbRq1YqVK1dqnExfDv5p5+Oti3nn5yfAoL8/UyERwQR4ZmByLifITS1i8m2Xa5yqZoGBJbRvuZ/WlrXsLZuKZWIJ81beTEiIvmcjDD19ESnYO5WsrL9XbSmKwi+//MIrr7xSp/YZGTWf+DQW58AuTP1gEU9/8fAFHz+c7ceHv0CGPbKRkzVtpc4tAPCxyMyxTVHCHwmk5wWQY/UmtlMrTbPk050/EiPZfbjmtbNKstXJcDKs2q8J2LmDjXsGTWbmPx7TOoru6e8sRtTL8QR1nEhxqQWLhz6nnRaqlStXMn78eJIy1ZnPQnzUf0+ePMn48eOl4DrLX38pwGQyMq7ROsoFtYn2Jcuqdu264dWnGPKftZzM0W6Bybpo1y6LD+67isU33E7JqZ+x2Z0pLsshKChI62g1ColSp2MP8k4l4eCF7+zUpqSkhGXLltGz5+X86/Z7uKnD/jp9n9bddCq0bBvLy99P5eudEyi/wISED782j3++ZuWbPXc3frgmzNlLvesb6CETZDRFv+1zI/D+dEKm7MTZWdvTYVvgdXSZdYy4d5bVeAffqUTt2pxTrH2x1buXC2/evYTHrlkF5Q23DmJTIMWWg0s/od5STs3zV0f0Cl2y2WxMnToVRVFIzlG7DQb7FAPq1XaAadOmSZfC02z5yYzq8QW9YvQ5w2bLlhbS89Sr3mk57Vi3bwixHfR9saNjRzNJWeobdVGmOoOis3MG7u7uWsaqlYt3JM9/ezuPfPxfDh6o3yQZqampzJ49j5CQm/j4hc28NsrGtrkHGN7FXqfv79at28VEvuRiYwOANOAg6enF5z1eUGAB3PDzk+48l5J3iDo5iq97PpQXaZxGXGoHD6q9EkwW7dbYqtC9e8VEUB6cOJFXbTtXg3qXtVDRvtgKDI2m6PTQV5u15rFmzZ2ui60FCxZw+eWX4+npSWBgIKNHjyYhIaFKm+LiYuLi4vD398fDw4Nx48aRmlp1UHNiYiLXXHMNbm5uBAYG8tBDD1F+ocuDDsg/8CQfbDLxe7KH1lFEDTZt2kRS0l3A46TkqCdLwd7WyscV5TFOnLiTTZs2aZRQX8JMe/hixhjmjFqodZQL8vCAjHz1zlaL07Ntd+/eQsNEtQsLC+PE6d5Q4yMfYXnc9UQG62MCiBo5OTN71b288O2/SDhUVqdv+fXXeIYMeZ7Q0NU89dT9ZGevpG1wLL2jd1FSZuavkpF1eh6j0fh3kl8y/v4+9G0byuiel1FedP6SEa5OxTgbywgNNWuQrukaPCwQa7F6mqQUJmmcRlxqR4+q78U+PtoXW0FBnhhOF1LxO6u/qPTcd/cy9sXPSbD2bqxo1QoMCiIlR/08IymhxrbNna6LrY0bNxIXF8e2bdtYu3YtZWVlDB06FKv1zEnq9OnT+frrr/n000/ZuHEjp06dYuzYsZWP22w2rrnmGkpLS9myZQvvv/8+S5cuZfbs2Vr8SpdcQqozE18v46uT2h94onrJycmADXiKrYfH8MxXj/D57zcCrsDjwFOA7XQ7YbSpb36F5fpcN8hggMwCHwBemfgAgy/7kehoF21D1SIsLIwTWWcmw7ip32e0jvlCu0D14Ompvh6OHy+ptk1ZWTmff/45AwYM4J7r/8FNrfczvpcH0AIPjxKKQm/noPkplFEnaD3qycYJfokYDAaWT4FV08F68rfzHt/z9ADKPjBzWbgslH4pdeoczMls9S5oftpBjdOIS21Sv8f54VEjj922SOsoAHzz8Fiy3/Qh9/CGattsP9SFVdvHYglo3XjBquHs7ExaXmcA/vhNlrKpia7X2VqzZk2Vr5cuXUpgYCA7duxgwIAB5Obm8s4777B8+XKuuuoqAN577z3at2/Ptm3b6NOnDz/88AP79+/nxx9/JCgoiK5du/LUU0/xyCOP8OSTT2I2n38lsKSkhJKSM2/qeXnV39LVWsVdPL2Pu2juQkJCCPe/mQDPZErLJ/PJr2WAiW6t7gfGAHeTkf8OISHrNU6qD2bU/t8ldn0WWwA2kzrNdrBPKuN6fYTFMkTjRDULDw8nKWsKanEP1mLwCdD35BhPPglGI7RumUqY2zbSj+9hw4Z8+vfvz3/+Y8RqhagoK6++epJjRw8wOHY8c4fDoPsA3mVgl+3c+9QNDLjSgslkoeJ3x1pMmd0Fk9P5XfIqlNldMFn0MWYLIKfYBbBizTxSZbutrBwfd/U9qkWYvmeWdDQuLi6kFTgTVV5OdsphvKK1TiQupUDjUbp1svNjvj7uYHu6FuDjnov1SPULqhcW+gAQE6OP3kxpBerSLAUZJzVOom+6LrbOlZurzrrn56d239mxYwdlZWUMGXLmJCc2NpaIiAi2bt1Knz592Lp1K506dapSjAwbNoz777+fffv2XbBP/oIFC5g7d24D/zaXxu9b2mIyvkxJib7HizR3/btH8ufz4GJ6B3jnnEdfAKC4DEzdZTYxADejeve61KB9v/TzWBOhJAOT+5kxHE7GMsg6Pb7MEqCLhXCrsCYS6ZmJq+lMv/osK/RsbVRz6zEz4GtJ5P03M5g3/mmu7XaQl9bAjDt8sZifoqS0L5kFfuRYfbnzym944K6XaX162IOCEUPEONpcPZU2AcC5w1ndIzCNSYCS6mcbNOns/yQtrx203Mme30vpMfrM9py0TCr++oe1lvVuLpnTx/mLP97AsZPuPDXPg8gOZ40h1dnrQ9Sfp1G9SOHip48qOqtIPZIN1a3vZytm5sj+HDnlTbeurzdisuplF6rLTditDtAlXUMOU2zZ7XamTZvGFVdcQceOHQFISUnBbDbj4+NTpW1QUBApKSmVbc6961PxdUWbc82aNYsZM2ZUfp2Xl0d4uD7fxB7q/wkjH/iJDw8/DNysdRxRDWN5NkZTzW1cTEB5NqDf9Zoai7vpdCFj1lmxZU2Er9uBvZjrznp/njRoGaxZpn7h5AIjE/RzInY6s5e9mHfuPbM53B8e9l8Ba1boLzOANZEpkdFMffrMOK2pw2Hq8GxgCgBFpS5s+bMTgzv+DoBi8sUQMwlDzGRwr+VvtnuEvn7fWmQVnr4LWVR1Rsa0pJP4A9lWb0J1vmaawzjrOP/8/oqNb8HZnW30eMyIevFzVUfSlJu7aJxEVaCod9K9TBeebKIk5y+euX4/RaVgjdZHr4T8cvU92rlclkeoicMUW3Fxcezdu5fNmzc3+M+yWCxYLJYG/zmXQoCH+sbr4afvwflC1EeAt3ryHHOZzo7DkgywV9/1DFAfL8nQz0mYI2YGbIWpGKl5QgxXczHhfbqjOFkxxE7F0Oqf4OzWSAkbVxE+ALgaqhZbpflql6PMAlfa6HxmSYfhoMeMqLvSwjz83NWxoF7BnTVOowpvp56Stwr89YKPZ5/aTzCQnANROlmWYsupQXw6/y6cvHIZNV/rNPql6wkyKkyZMoXVq1ezfv16wsLCKrcHBwdTWlpKTk5OlfapqakEBwdXtjl3dsKKryvaOLIgL3X9D7+W+rzzJsTF8DSrY7Z8g+QiQnMVHx9fp3Z5Ll0xXLMXou9tsoUWgN2sdp/3MudU2e5pPgpAXkkmBln+Q4g6OfzHHgDyijzp2K2NxmlUHoFqdwlv5wvPE3Bkr3qspxf46+dY9wxn44GBHDguFx1qoutiS1EUpkyZwqpVq/jpp5+IiqravapHjx6YTCbWrVtXuS0hIYHExET69u0LQN++fdmzZw9paWmVbdauXYuXlxcdOnRonF+kgeTnlRLsrf5eYdH6+GMhxN+lKApPrbITtxTMwX20jiM0kpFR/Xiqqu2ymsUagyZP9Uq2v3vVBXaLctQpyQtK9T0bphB6cuL0MkInMkMwm/UxQYZ3iDpEpoX7hWddPfGnOttoSk7HRstUm8hItfdJfr7cVa+JrrsRxsXFsXz5cr788ks8PT0rx1h5e3vj6uqKt7c3d911FzNmzMDPzw8vLy8eeOAB+vbtS58+6kna0KFD6dChA7feeivPPvssKSkpPP7448TFxTlMV8HqJOw7Tk+LOrYlom07jdOISyExMZEIv+5ax9BUYWEhX+/4L1DCI+ZOWsepwmazUZe35bq2E9ULCAiAOtRbATrpTtPQjAGdeeD9lzmW3oKvHz+zPaXAlfjNkO/cggHaxWtS5Dhv+pJPZJIeEEBybgCXaR3mNP/w7vyxNpLEzHA6H88lIrLqmGVDidorK6dEP2OZu3R04t6r7iMi8BQoXzaLC18XQ9d3tpYsWUJubi4DBw4kJCSk8mPFihWVbV588UWuvfZaxo0bx4ABAwgODmblypWVjxuNRlavXo3RaKRv377885//5LbbbmPevHla/EqX1IlDhwHIK/LAaNHvFNmi7t59912tI2guMzMbmA48hrOzvq6W1bVrW13biepdaKbYv9PO0YXGtOPVHx5gdfz12Gxntv936RhuXWLl5bXPaBeuiZHjvOn7amcvAu9P565l+jluvANb0fXfOxj53Cbid50/4YSrom4rVHwaOVn1enT34o273uCxkV9Deb7WcXRL13e2FEWptY2LiwuLFy9m8eLF1baJjIzk22+/vZTRdCHr5AmIhNQ8f7y0DiMuiW+++YbbZxyjVatWWkfRzMkTGYzqsZ1sqy9+vv05f95u7dS9a1vd2onqGY11u2dQ13aOLjbWH0gD0snKakeLFurbd2YmgBseHuevGSkujhznTV+S2vsW/wBbzQ0bmcWSRnGxP3v35jJqVNXHvMxqF2Lb6fGbehAc1pq8X8DLFayZR3APbh4Xv+pL18WWqJlvUApLfzbh5uNGjNZhRM0sAepUwTXMcFVU6kJqbkeeeeYZXn9dH2toaCH9xAm+mDGGcpsRZ5eaZ6NrbNK1TWglMNCf3tEmQn0UbEX7gfYAlBcV4Wwsw99fPxclHJ0c501fRoZ6Mf+sOdd0wdMzj+JiOPRnwXmPzfrk3wR7lNF9cNEFvlMbHh4eHMoz4OWqkHb8AFFSbF2QrrsRipolpJq4440yvkvtrXUUURv3CHVNluE7qn4M+RkGfc/TO3fQbmYCJzJf4N133yOp4rJbM5STrp7lZFl9ddf/u1ufqymupf4rLlPb6UZFoV8TJxe1nZ44au4GYjQa+egBJ1ZOh/ykbZXb37h5KmUfmBnRcVsN3y3qwyGPc1EvS+8azw+PGrl7vL66gj59/UvkvOVNH+8Pz3ts++E+fLF9DC1a6WstzrTcrgDs+T1Z2yA6Jne2HFjFhCFNYQr7ZqGGRVRvnw6f/ggege9y4EApCxcu5KWXXmrkgPpQmJ0J/pBT6EWg1mHOYfSK4geP13ls5nbgfuA14B3gLmAysISnn+vJCC8dvRm6R/CdaRGPP3QfilKRsxQwA0swGN5m/sJFjNDbekEVFyhKarjFYAloVuscZRdZiKIQa8aRym0+Luo00S5ePhqlanqqO87nj2/D7hPj+WpHKrOf6aOv41zUS6egbHyj7OwK1dfyIm7uBrzd8vBwSq+yvbwcysvV7oMdOvhqEa1a6QVqnuIcKbaqI8WWA9uxtSNm55cpLm4eV3abspYtIf7bHzj2WwKtx8Cbb77JrFmzmmUhXVqQC0BesYfGSS5s+/5JxB+bhJfXc+TlvXN66zt4ecWSl/cW2/fDiHGaRqzCZrNx77T5JCU9DjwFPAHMBx4H3gJCmDT9aY6Ovlt/459quEDRHKXnxwI72fN7CV2vU7f5uqvHi1eAvk4aHd35x3knrnluOeAPhOjuOBd1Zy8twNfNDoB/RBeN01SluAYB4OdSdYKMkvxkpg6/ghOZwVx22TdaRKtW5eyIRWk1N2zGpBuhA3ti8DJK3n+Qy/33ah1F/F35RzBsGE5U4cdMGtuB4uJiXnjhBa1TacJerF6pzy/R57QvNhvMmwdZWdNZv349y5cvZ/369WRlTWfePKrMFKcHmzZtIinpdqoWWpz+9wlgHidOTGTTpk0aJRR1lWkNAcBeqA6UV+wKfu7ZAPiFNL8LMw3p3OP8zTfnYDS2BkIIC/tZd8e5qLu/9qrnTAXFFoJa6mvZHFd/dRBZsHdKle05J35l0a1Heem2rfj5+WiQrHpWm1psme3ZGifRL7mz5cACPHIA8AzQW2crUW+ebSD6Hjj8Jo8Ns/HWqvUsXjyahx9+uNkNwg4P+gMAd9/zBwjrwZNPVnxmZODAgVUee+KJRg5TB8nJyYCRqoVWhYqvjafbCT0rQj2pcXNST2pKC/OwOJcDEBoVrlmupujc43zgQPj113TeX2piSOsfmdn9UbBtAKPMAuloju4/SLQTnMgMp71FX/uva79W8CeE+f5ZZXte6kFaApmFFsJ0NpZ5Z+ZVXPnU7ZRZchm9QOs0+iR3thxYkLd6mzkgPFLjJOKS6Pw0ismHcI8E7r3qAIWFN7Jo0SKtUzU6Z7v6unZ2c9U4SdMQEhICzOX8QqvCfGDu6XZCz2wmdcyG9+kpoA2laoFcWAItI0I1y9VcLFjQApNzIU/f8DYeBVvh+HKtI4mLkHPqGADJufq7kBnUqjsAgV4K+TlnxqseP6ge61lF+ruDbfIN5+eDV3IwsZXWUXRLii0HlZFeSJCX2j82sl20xmnEJeESgKHzUwDMv/5x/Dym8PLLb5OTk6Ntrka28bAPk9+DU8Z+WkdpEvr3709YWBiGaq6GGgwGwsPD6d+/fyMnE/Vl8lRPDn3dcgDISz8KQGYB+Pj4aJSq+WjRAsaMK2TRmmkAlO7+Dyh2bUOJeivPOwlAulU/61VV8PCPpKhU/Tz12M7K7RlJVgCSsztqEatGrVurF0YLCz01TqJfUmw5qD/3/oXpdPeRkFayylaTEXMfdq9O+Htm8dT418jPv41XXnlF61SNavXWa1jy43z2Zw7TOkqTYDQaK2e2PLfgqvh60aJF+pscQ5zHyb8jU5a+wryVjwKQlVfG/zbD2v0uODnJ23ljeO65EN5afwd5RZ6Yiw7BqW+1jiTqKTdXIS23BTml+ruzhcHAz392YXX8Faz/6UxXehdFvctlVXw0Cla9zpeZmDR4Eo+PniIXH6ohf50d1Mkj6tS/Gfm+GJwtGqcRl4yTM06Xq8XVpMFvEBM8nhdeeJf8/HyNgzWeU6euBB4jK0u6tV0qY8eO5bPPPqNly5ZVtoeFhfHZZ58xduxYjZKJ+giJjmHx2ims3nk9Nht88GUMty4pZNqHn2kdrdkICYGBV5fw+rr7ACjdVV33XKFX/119B0GT0/jq2ESto1zQrW+/zsjnNrN595kug95mdZxmRVdiPenWvQWv3/kmj1/3LeWF6bV/QzMkxZaDyk1RF71Ny9PfgSf+pqArsbf7FzNWfsqhlMvJybmbJUuWaJ2q0fRpvY8BsRuJDC3VOkqTMnbsWI4dO1ZlBsWjR49KoeVAYmP9gVTgALm5dk6dKgFcMZtrWfxZXFKvvNKSbw5nU1oO5txfIX2r1pFEPWRnuwPQurU+L1QHBBQBcOxYeeU2f3d1nKbZO0iTTDUJCAwl8/T14OzkA9qG0SkpthyUb3AK7210ZnemTCLQFDn1eI6rJo4FDMBUFi58k8LCQq1jNYrXJs5n4xMDiQ06qnWUJsdoVGdWu+mmmxg4cKB0HXQwISGB9GoTzNjLO6GU/EVuZgHOxjI8PUu0jtashIUZmPnEdSzbrH5d+sd/tA0k6qW42ARAbKw+13IMDVW74qWnntl279svMfqFVRgDu2uUqnpGo5EMqzq5edrxgxqn0ScpthzU/mQzd75Zzk+ZfbSOIhrIddfB9Ok2OrQZS2H+Ed566y2tIzW4srIy/DzUdbb8ZHY8IaowmUwsn+LE59MgL3ELN8a+TNkHZmYO/1DraM3ONddcw1eHYvhhj5H3NsvC245CKStk99OdWDvLyNDB+pr2vcL1vTaS85Y3z4+ZDUB5Oez460q+3DGaqPZtNE53YcnZ3QDYvzOzlpbNkxRbDio1Vb3kERSkv1vK4tIwGOCFqZ+xY+4WHhsFzz77LMXFxVrHalBZmdn4uOUCEBQepnEaIfQnp1jt+lSQeQQ3o3qsKM7Sw6GxOTk5EdPjbYY9k84DT4/CarVqHUnUQU7yPtqFKPSNthPRKkrrOBcUEOKDt1seQZ5q4XLsWCHqWok2OnbU5zlfVpEPAKV5KTU3bKak2HJQ8b92wmJ6hdLSTlpHEQ3J6IqLwcq/rgFXm5X33ntP60QNKunYSZyNNgD8gnQ4U5QQGkvLaw/A7m2FeJrVu8BYvDRM1HzdfXc/wIuysqHMnv2l1nFEHWQm7QbgVK4Ri4s+xzoGtVKX8wnzTUFRwFYQz7ThUYztdSW+vvo81vNK1QXXjWUZtbRsnqTYclBPDXuf4qUP0M13v9ZRRENqORIlZDgWZ3jxn1cwb95KysrKtE7VYNKS1IUbi0stmF3lar0Q58osPN29tigLbxe12DK5+2qYqPmKjXWmd++/CPJOISjlK8p3z9M6kqjFge2JAKTk6bM7HkBs984ABHpnkHIynbK0Lbx46zHm3/B7teslaq1IUf8GuRmyNU6iT1JsOahAT/UF7dlCf6uJi0vIYMDQYxFldhMju39Lt6A+LFu2TOtUDcbDfAyAvBKD2o9SCFFFkaJe2XYhGz8PdZplrxYyK61W3ngjkl5ttvHwNSso/+O/UJandSRRA+vpWSdO5URrnKR6AaGRFJ6ejLcwM57CTHWpn7wydw1T1Wx/wSAGPLWReV/EaR1Fl6TYckCKAoFeal/e4FattA0jGp5XO/JDpgGw6NYVzJ+7mvLy8pq/x0GVWU8BUFguf5qEuJCKdXa8LVn4e6hddqIv89cyUrPWpYuZE7ZYDpyMxcVYiO3PN7SOJGpgKleLrZxSHR8zBgNp+erkHdlJe0g5qo7NzCnR7zhmt8AINh0cQEJSa62j6JKc0TigkydyCPBU32QjY9tpnEY0Br8Bj5NTEkzbkENc37kFH3+8QutIDSIp15XJ78FXh+R1LcSFGD3Uk8QQrxTczAoAnv6tNEwklrwewcJvHgKgcOd/wSZrBOqVt0k9dypx0veY4JxSdVp6a0YChZnq0IHknMu0jFSjNm3UvMXFPtoG0SkpthzQkX2HcHJSKLcZCQiN1DqOaAwmL2ydnsVuNxDo7cG//70Bu92udapLbvPOCJb8OJ8v99yudRQhdMnJvyNxS1/lP1/+i2Wb4Zt48A1spXWsZq1PHze2Z1zOqewQPI2ZKMeWax1JVCM734u03BY4eep7aZH4pP58E38F329ohZdZXdC43KTf7sKdO7py3+B7mT36bhRb0x1XfrGk2HJAKceOAZCW54/BSRYlbS78e9zCgj92MPPD5zlx4n4++2yl1pEuuYQEf+AxUlNl/TghLiSkTTSvrY3joy33cNuSEq59bjt+/jruEtVMvLs0gtfWqZ/n/z4HlKZ3MawpuGXxawRNTqM8cIjWUWr04Z4HuPa5zXz2y0D83dQx+iYvfU77DtCpczCv3v4WT4xZQ0HmMa3j6I4UWw4oLy0JgPR8mYGqWTE4MenhbpjNxUAMs2cvR1EUrVNdUn7GJAbEbqR1iKzVIcSFtG3rC1QcH2acnFwxmUxaRhJAz57eGNvdQF4ReNkTUU5+q3UkcQ67XaGsLBCATp30ff7UqpUzAFlZrpVj9L2D9Dtmy93Di4x8dVKrzJP7NE6jP1JsOSCf4FTe2+jMvhx9rhEhGk5AAHz4YRldW7dncu9VfP3VF1pHuqSu7/wVG58YyIQeX2sdRQhdatkyiN7RIdzUrw9B3imYzflaRxKn3T/1UV75wcjitd58t7VE6zjiHElJuUAxAN276/cuEUDbturSJ+Ulroxf9CmjXviCwLY9NE5Vs6widVKPzKTDGifRH2etA4j625fswtw3y5k0qQ83ax1GNLrxY8wMs2bjaYJnvprOyOtG63btjfpyMxUCoJi9NU4ihD65urqy7H4DMcG/AiGs2jEQWK9xKgEQHBzM6sTP2LbtOsJ+/IYT12udSJytPPlrDi68jR2Jbvj6WrWOU6M+HbLIecubkjILQZPT2HnMztLO+s58Mqsb7YO3cSA+mx4jtU6jL3JnywGlpKhdSIKDZY2tZslogcseA+CeXidZ81XTGbvl5aK+mRhdpNgSojo5xZbKz0vsZg2TiHNNm9YbcCIpaSirV+/SOo44S37KHtqFQpsQ/Z/6tu8ai7dbHoHe6VhMxRgM6fj6emodq0Y5p2citBVmaBtEh/T/ihPn2f1bN1xML1Naqt9pQEXD8uz+MH+mtcHfs5yMdS81mbFb3i4FAFi89D0trxBaSsvvUPl5Ybl+FzptjiZMCCEo6CCXt96NcWsc5CVoHUmcVpKtLg5cYNP/xbwWLSMpKlWHiiy86XJuGXSbxolql1/mA4DZlqVtEB2SYssBPTvyHYqWPkhnH/kj3mw5ObPb+QUAbu71Cz9/tVTbPJeIj5tabHn6tdA4iRD6lVl4ZtrqEvR9tbs5+s9/XHls9NOMuGwLp356Qus44rS0o+o4uuTcrtoGqQuDgaQsdTKPB4btZfrw3zQOVLtSozo1vYcxW+Mk+iPFlgMK9FKvGngH6XudCNGwxtx3Hat2jsToZMd173/Bwe9u2e12fN3VmTbbdgrUOI0QOmRNhKyduLuWV24K9C+ArJ3qhzVRw3Ciwh13RPL6xgkABOStgiKZXVUPXJRcADKLYjROUjdW5czkN4X4aBekjv4qvYr+837msc+maR1Fd2SCDAdTUlJOsHc6AFmFhdhsNoxGWWurOXJ2BmvMXApLfqRXVALbv1hIzzEPax3rouXn5eLjpq5NExQui3ULUYU1kbJV7TA5FTOu85nN49quhDXquM0yuwumMQngHqFRSAFgMMDwW3vyy5/9uKLtFpI3zidk+Ktax9IvayKU1DDOxxJwSV7TAW7qz3DycIzx7lbFD1DvEqXk+Ov+fM87tBWbE3rg4iK9rs4lxZaDeHF+ImlJv/FH/CN8MzUPgDdemsr/ls6na7fFBIb1Yvrj8gbb3NxybzfmTJhOSZEXq/a35s8xWie6eDnZmTy6FAJ9jMydIHdthaiiJAOTU3GNTUxOxepJqxRbmnvwwbbcPOAWrmi7Bc+Ud6BsAZiky+d5rInwdTuw1/DadnKBkX//IkLI6QvVXsH6Pj4qzvfaG49zRai67fjxUq7tF6rr872YGPX1XVKi7zXMtCDFliOwJhIXGYO5dSkMOLP559kKkAZcT6nNDNZD8ibbzBgMEH1tHI/PKCfA8xQ/f7GCAQMu0EXiEl0ZbEhHjhbz+rr5eHpamWuUGdaEEI7LYIBrJnXn4CkDsaHF5MU/j1evJ7WOpT8lGTUXWqA+frEXEU7fNVNsNjLzA3B2stO+tU3tdgv6e288+3zvLP/6xx7+Bej5fK9zJ0/uH3IPwd4nKC3+HLOLTN5TQYotB2ArTMVsLK2xjdlYiq0wFaPODj7R8G4bV84NSgwuplIoBNZcoNElujLYkBISioHHKCpK1jqKELpjs9moSweiurYTDe+WW3rzzD2tmRV6BPv+F6DHv0EuJDWes+6aGYAOYepm/4Jbz7xP6uy90ZHP92JiWrDo1rcxO0Ny0j5ContpHUk3ZIIMBxAfH39J24kmpiRDLbRqUnFlUMfy01MYELuRDuF7tI4ihO7I+4DjMRgMdBm1kK2HYP7nrTmemKl1JMeVsQ0yt0P+ESjNBsVe+/fU566ZTjjyce5kdCazQC0rslMOapxGX+TOlgPIyKjbH4K6thNCj3xLf2fjE/PYcrg7MFTrOELoirwPOKYR147G99Zvyc0dwa6i9fz4o4xHvSjb46p8qWDAYPIGsy/0egNCrlYfyNoBiZ+C2Q/K8jQI+vc4+nGeXexCCIVkJv2ldRRdkTtbDiAgoG4LvNa1nRB6ZCtWp+XNL/HQOIkQ+iPvA47JYDDwz3/6APDTT51JSSnQNpCeKAr2k9/Wqemh5GhOZIZRUKyOAzKgQFkOWI+yY+dO+vVLpV27HOZO3Qj7/wu7HoF9T9fpuW0228X+Bpecox/nJzO7AXBoj1XjJPoid7YcQLdu3WBtHduJZqepjOVwKlfXFCksl2JLiHPJ+4Djev75Xrz7zp+M6f478W98wog5X2odSXv2MpR1V+GUvrlOzSe8+ibxx/oBFkzGUnzdf8LXfQR+HrD/5KPkFt4ABPEDvfFiGn7uWbQKOMqVHTbV+tzx8fH0HHr53/t9LhFHP85zTs9EaCjW5503rUix5QDquq6CntdfEA0nPj6ennVtp5M3lAsxo17xLbZLsSXEuYxuQZTazDUOni+1mTG7BTViKlEXFouRSRP/4L/97sDsXEbe0U14RfXXOpZmFAV+Wm/CuiGGq6O342qpZVwV4OszlqgoXwwGE+CGk5MZo7kD+U5OREY7UVg4D0XxJqXcjVe3+KEoLYny9mFdHYotPXXJc/TzvUK7DwAup9cHEyoptoRwcI7ex7uCq5Pa7aDU4KVxEiF0yD0C89hD/PTdJyxcuJDUtLTKh4KDgpg5cyZXjbhBN7Oqiaqeem4kH84czR0DPuXA57PpPXO91pEaV3khHHieo8oEbouLYvNmEwGe/6VVwB38PPsqXM3l1X5rUSnMX/g6fYdMqNeP3P7Dm1CHtz29dslzROUmfwC8TDnaBtEZKbYcgSVAnZ60tkX/LPIHozkKCAio0xtKSUmAOoOTQZ9DNUP81VkIW7bST/95IXTFPYKrxs/kyjHT2bRpE8nJyYSEhNC/f3/dXukWKg8PC3+UDQM+5fLgjVhTDuAe3F7rWA1PUeD4Ctj1MBSeIDd9GZs3xwN2MvKXo5jfovO/p+JpuRl4DXjnrG++C5hMifI5fxwZX+8f7ZBd8hz8fO+kYTD9540jsyifa57ROo1+SLHlCNwj1HUgapqeVG8L84lG063P1RSvcsbFVNOVQQsLXlhCH/+vCQqJhO7Pg9HSiClr5+acA4B3C29tgwihc0ajkYEDB2odQ9TTEwtv5Ov/rGBk97UcWT2Dznd/p3WkhpX5O9ZN03Av3AJAYgY88/Eh4Bbati3g0Udv4aabtjNx4lE++eQjDIZ3UZQz365+HcoNN/zzoi4mOGTXWwc/3wuIaM3mhMtwdj6idRRdkWLLUbhH6PbgEtoyekXxwPo1bNv4MQbD2+e8WYGiPEhecTQelgcJKtgFh6AsZSumQZ+CR2vNcp/rw988WbU1j+smd9E6ihBCXHJ+fu4cd+8ArKWd+Xvshck4uTXBqeALT5Kz8VF8sv+HO2AtdmPB1y14/pvjDBw8nB9+iGPIkCEYDAYAVqxoz4QJXZk6tSVJSUmVTxMWFsaiRV0ZO/Yi7wC6R7D4+CHSkn5jV3zceV1vu3R9lcCwXkzX27mVA5/vtWunXiwtLw9AUZTKfdzcGRTl7FMzcSF5eXl4e3uTm5uLl5eMJxH6tHLlSqZOnVrlzSo8PJxFixYxePBgpk6dStqu91l2vwl/zzKK7Z64XPk+hI/RMPUZnp5PUVCQy7p1E7nqqk5axxFCiEsuOyuLY28E0C1S4bjz1UQOuUBfq4u9c2FNhJIMbDYb8fHxZGRkEBAQQLdu3dQ7Q3/njkgdn3v37lx+fn0OD/R/CYD3f76Nxz+7gn6DE5kz52Y6dOhQ7Y+w2WwN1j22IZ9bUPn6yMgo4O3Zz+PvkU7bEaP5vwGD/v5rT6fqUxtIsVUHUmwJR1HbG8qqVav41/0l/O++l+nXdisAxZEP4tJnIRjNWsUGwGDIBzz56ackBg0K0zSLEEI0CGsiZSvbYDJW3+27zO6CaUxC/U5OrYmUrWqHyan6sT4X9bx1fm4z17z+P9b+MgqLyc7SSbfzytp+dLnKlblzR9OiRYv6/UzhOBrytadj9akNpBuhEE1IbWM5xowZQ8+eqQwdonBnj748dO0LuBx/mZPH99Hy5h8bL+g58vOsXNl+B1kFfkRGNJ0/xkIIUUVJRo2FFqCetJZk1O/EtCSjxpPdi37eOj93KdmnTIAZk2Ur+3xu5afdQ7BY9DU2WDSAhnztNRFSbAnRzISHB7H/4I38+99eXPd8e9679xHuXjIdlsXzxRddsVgav4910l/H2fD4IABKW5Y0+s8XQghHVtdF67Ozs1HIqtdzG7Kz8a1Du2H9lnJjXDgzZvSRsTrNSF1fe3Vt1xRJsSVEM2QwGFiw4Br23HycPiN9OHz8GtgN/fs/xjcfDqZFm/7gZGq0PGlJybQH8oo88XLRtjujEEI0lLqecCZ8Oo5vEgby2ldx2Gx2QrySeHjoaygKKIqCoiiYTCdwckrBZrOz4y9/5o2t/Xl/fXMIy7cEsmzzmwD4eeTy6sS3zmqhACeARAB+2u/DjqOPsvPp2p979G3/oOfQHnX47URTEh8fT886tFu3bh1XT+hZ/0K8IcciNhIptoRoxjp1iiThr3Duuusrli07RPqx/2DauICM7W0JGPUjuDXO2Kns1GRwhWyrFzIqUgjRVNX1xLSd5zHeP7KFI0feA8An0sTobuuqbZ+eXbe/nMO7wIFTBpZtHgWAqzmJm/pNrLZ9fjHsOHo18Gitz52RUYcFH0WTU9f9/uisCObMmcptw9fg7N+VFjFX0b7bQGLatsXJqZr1P88aD2aEM8dOBpVrqDnCeDAptoRo5pycnHjvvev417/28urjSzBwhAAlgcz/dSK/01u06tyrYa4qnXW1Kv/oOugAxWUmbOm/O8zVKiGEqI+6nph+uq8VXm2vZsSI7zCZnPH3yGfp3qk4G50wGo0YjU60DCslOMiOs8lEePcC4I1an/eY2w3cOus+3P7PhqKAs+LB5qIXqywZEhamUDF09vrul5ETcLROmQMC9LnQrmhYAQEBavFTq1gGd/iM+3sfAg6B8inpG/zY+L9IjmQGk0tLilsM4sqhHenVKxaz2dxkxoM1q9kIFy9ezMKFC0lJSaFLly688sor9OrVq9bvk9kIRXNRWlrKq89MZ6BxDd2j/gKg3G7E2clW7ffobuYsIYTQqe0/vEnPjEm1twt4g55D763z89rSf8e4tvbzGdvVv2FscXmdn7ehn1s4vrq+Pr43bMFcuo1WhmW4lf1FC5dcnM7pUXjZw3vZf/Iy4Bh3Dn2K24f8TP+Wh2vPoMFrrz61QTX37ZqeFStWMGPGDObMmcPOnTvp0qULw4YNI+2sRe6EaO7MZjMzZi/mSJvlvPHTDQA1Flpw1lWl+qjP1SohhGgiunXrdknbVajrmlEXs7ZUQz63cHx13e/DhlkYNHE6UbftJOiuHMrHWNkXvo3VmS+ycv9E1if051hWxVQsregf9XudCi1Qu+fqWbMptl544QXuuece7rjjDjp06MDrr7+Om5sb7777rtbRhNCd62/szYTn3uXVTbfVqb3NVnNBdrHt6/u8QgihZ0a3IEptNU8CVGozY3QLqt8TWwIos7vU2KTM7qJ2z66vhnxu4fgu8vVhdnPjsv69ufaBaYydv5RBc3/GWhhKRobCRx+dIrjHSLacCKlTBL2PF2wWY7ZKS0vZsWMHs2bNqtzm5OTEkCFD2Lp163ntS0pKKCk5M/10Xl5eo+QUQk98fNzpM+YKyPig1rZ/Lbue4jJXAA6ltOKm15YA0KbNrSy5cTchXmWUl/ths3kC4GIqIia49gzx8fH0HCrdUoQQTYR7BOaxh/jpu09YuHAhqWf1rgkOCmLmzJlcNeKG+nefdo9Qu13XML7WdLHjYBvyuYXju8SvD39/AzfeGAo8zfYfIqEO3W71Pl6wWRRbGRnqCyAoqOqVoqCgIA4ePHhe+wULFjB37tzGiieEbtX1alFM8PHKz+12M6WlrQA4cOAgIe75tA0EONVgP18IIRyGewRXjZ/JlWOms2nTJpKTkwkJCaF///5/ryueewS4R6iztl3qi1QN+dzC8TXQ66Nbt26Vsw7W2k7HmkWxVV+zZs1ixowZlV/n5eURHh6uYSIhtFHXWYY+PnIHJj91fZUyT1deeGE7ALGxH5PLXnYqJaSnm8nLMwEGyrJ2cHNM7V149X61SgghLpbRaGTgwIFaxxBCt5rKeMFmUWwFBARgNBpJTU2tsj01NZXg4PP7MlksFiwWS2PFE0K36npV6fr77q9hJqDB522xpf8Oa2svtvR+tUoIIYQQDeT0eLBaZy7W+XjBZlFsmc1mevTowbp16xg9ejQAdruddevWMWXKFG3DCaFjDXVVqalcrRJCCCFEA2ki4wWbRbEFMGPGDCZOnEjPnj3p1asXixYtwmq1cscdd2gdTQj9aqirSk3kapUQQgghGlATGC/YbIqtCRMmkJ6ezuzZs0lJSaFr166sWbPmvEkzhBBnaairSk3kapUQQgghRE0MiqIoWofQu/qsEi2EEEIIIYRouupTGzSbRY2FEEIIIYQQojFJsSWEEEIIIYQQDUCKLSGEEEIIIYRoAFJsCSGEEEIIIUQDkGJLCCGEEEIIIRqAFFtCCCGEEEII0QCk2BJCCCGEEEKIBiDFlhBCCCGEEEI0ACm2hBBCCCGEEKIBSLElhBBCCCGEEA3AWesAjkBRFADy8vI0TiKEEEIIIYTQUkVNUFEj1ESKrTrIz88HIDw8XOMkQgghhBBCCD3Iz8/H29u7xjYGpS4lWTNnt9s5deoUnp6eGAwGreOQl5dHeHg4J06cwMvLS+s44iLIPmwaZD82DbIfHZ/sw6ZB9qPjay77UFEU8vPzCQ0Nxcmp5lFZcmerDpycnAgLC9M6xnm8vLya9Au5OZB92DTIfmwaZD86PtmHTYPsR8fXHPZhbXe0KsgEGUIIIYQQQgjRAKTYEkIIIYQQQogGIMWWA7JYLMyZMweLxaJ1FHGRZB82DbIfmwbZj45P9mHTIPvR8ck+PJ9MkCGEEEIIIYQQDUDubAkhhBBCCCFEA5BiSwghhBBCCCEagBRbQgghhBBCCNEApNgSQgghhBBCiAYgxZaDWbx4Ma1atcLFxYXevXvz22+/aR1J1MOTTz6JwWCo8hEbG6t1LFGLn3/+mZEjRxIaGorBYOCLL76o8riiKMyePZuQkBBcXV0ZMmQIhw4d0iasuKDa9uHtt99+3rE5fPhwbcKKC1qwYAGXX345np6eBAYGMnr0aBISEqq0KS4uJi4uDn9/fzw8PBg3bhypqakaJRYXUpf9OHDgwPOOx/vuu0+jxOJClixZQufOnSsXL+7bty/fffdd5eNyLJ4hxZYDWbFiBTNmzGDOnDns3LmTLl26MGzYMNLS0rSOJurhsssuIzk5ufJj8+bNWkcStbBarXTp0oXFixdf8PFnn32Wl19+mddff51ff/0Vd3d3hg0bRnFxcSMnFdWpbR8CDB8+vMqx+dFHHzViQlGbjRs3EhcXx7Zt21i7di1lZWUMHToUq9Va2Wb69Ol8/fXXfPrpp2zcuJFTp04xduxYDVOLc9VlPwLcc889VY7HZ599VqPE4kLCwsJ45pln2LFjB9u3b+eqq65i1KhR7Nu3D5BjsQpFOIxevXopcXFxlV/bbDYlNDRUWbBggYapRH3MmTNH6dKli9YxxN8AKKtWrar82m63K8HBwcrChQsrt+Xk5CgWi0X56KOPNEgoanPuPlQURZk4caIyatQoTfKIi5OWlqYAysaNGxVFUY87k8mkfPrpp5VtDhw4oADK1q1btYopanHuflQURbnyyiuVqVOnahdKXBRfX1/l7bfflmPxHHJny0GUlpayY8cOhgwZUrnNycmJIUOGsHXrVg2Tifo6dOgQoaGhtG7dmltuuYXExEStI4m/4ejRo6SkpFQ5Nr29vendu7ccmw5mw4YNBAYG0q5dO+6//34yMzO1jiRqkJubC4Cfnx8AO3bsoKysrMqxGBsbS0REhByLOnbufqzw4YcfEhAQQMeOHZk1axaFhYVaxBN1YLPZ+Pjjj7FarfTt21eOxXM4ax1A1E1GRgY2m42goKAq24OCgjh48KBGqUR99e7dm6VLl9KuXTuSk5OZO3cu/fv3Z+/evXh6emodT1yElJQUgAsemxWPCf0bPnw4Y8eOJSoqiiNHjvDvf/+bESNGsHXrVoxGo9bxxDnsdjvTpk3jiiuuoGPHjoB6LJrNZnx8fKq0lWNRvy60HwFuvvlmIiMjCQ0N5Y8//uCRRx4hISGBlStXaphWnGvPnj307duX4uJiPDw8WLVqFR06dGDXrl1yLJ5Fii0hGtGIESMqP+/cuTO9e/cmMjKSTz75hLvuukvDZEI0bzfeeGPl5506daJz5860adOGDRs2MHjwYA2TiQuJi4tj7969MubVwVW3H++9997Kzzt16kRISAiDBw/myJEjtGnTprFjimq0a9eOXbt2kZuby2effcbEiRPZuHGj1rF0R7oROoiAgACMRuN5M7mkpqYSHBysUSrxd/n4+NC2bVsOHz6sdRRxkSqOPzk2m5bWrVsTEBAgx6YOTZkyhdWrV7N+/XrCwsIqtwcHB1NaWkpOTk6V9nIs6lN1+/FCevfuDSDHo86YzWaio6Pp0aMHCxYsoEuXLrz00ktyLJ5Dii0HYTab6dGjB+vWravcZrfbWbduHX379tUwmfg7CgoKOHLkCCEhIVpHERcpKiqK4ODgKsdmXl4ev/76qxybDiwpKYnMzEw5NnVEURSmTJnCqlWr+Omnn4iKiqryeI8ePTCZTFWOxYSEBBITE+VY1JHa9uOF7Nq1C0COR52z2+2UlJTIsXgO6UboQGbMmMHEiRPp2bMnvXr1YtGiRVitVu644w6to4k6mjlzJiNHjiQyMpJTp04xZ84cjEYjN910k9bRRA0KCgqqXFE9evQou3btws/Pj4iICKZNm8b8+fOJiYkhKiqKJ554gtDQUEaPHq1daFFFTfvQz8+PuXPnMm7cOIKDgzly5AgPP/ww0dHRDBs2TMPU4mxxcXEsX76cL7/8Ek9Pz8qxH97e3ri6uuLt7c1dd93FjBkz8PPzw8vLiwceeIC+ffvSp08fjdOLCrXtxyNHjrB8+XL+8Y9/4O/vzx9//MH06dMZMGAAnTt31ji9qDBr1ixGjBhBREQE+fn5LF++nA0bNvD999/LsXguradDFPXzyiuvKBEREYrZbFZ69eqlbNu2TetIoh4mTJighISEKGazWWnZsqUyYcIE5fDhw1rHErVYv369Apz3MXHiREVR1Onfn3jiCSUoKEixWCzK4MGDlYSEBG1Diypq2oeFhYXK0KFDlRYtWigmk0mJjIxU7rnnHiUlJUXr2OIsF9p/gPLee+9VtikqKlImT56s+Pr6Km5ubsqYMWOU5ORk7UKL89S2HxMTE5UBAwYofn5+isViUaKjo5WHHnpIyc3N1Ta4qOLOO+9UIiMjFbPZrLRo0UIZPHiw8sMPP1Q+LsfiGQZFUZTGLO6EEEIIIYQQojmQMVtCCCGEEEII0QCk2BJCCCGEEEKIBiDFlhBCCCGEEEI0ACm2hBBCCCGEEKIBSLElhBBCCCGEEA1Aii0hhBBCCCGEaABSbAkhhBBCCCFEA5BiSwghRLNSVlamdQQhhBDNhBRbQgghmrRdu3YxceJE2rZti6+vL15eXuTm5modSwghRDMgxZYQQgiHdOLECe68805CQ0Mxm81ERkYydepUMjMzK9ts2LCB//u//yM4OJiPP/6Y33//ncOHD+Pt7a1hciGEEM2FQVEUResQQgghRH389ddf9O3bl7Zt2zJ//nyioqLYt28fDz30EKWlpWzbtg1fX1/atm3LI488wt133611ZCGEEM2Q3NkSQgjhcOLi4jCbzfzwww9ceeWVREREMGLECH788UdOnjzJY489xsGDBzl+/DiHDx8mMjISFxcX+vTpw+bNmwHIyMjAYDBUfowePbrGn7l582b69++Pq6sr4eHhPPjgg1it1srHW7VqxaJFiyq/fvzxxwkLC+PYsWNs2LChys869wNg6dKl+Pj4XPBn79q1C4PBwLFjx/7Of5sQQohGJsWWEEIIh5KVlcX333/P5MmTcXV1rfJYcHAwt9xyCytWrCAtLY2ysjKWLVvGkiVLiI+Pp2vXrgwfPpzk5GT8/f1JTk4mOTmZG264ocafeeTIEYYPH864ceP4448/WLFiBZs3b2bKlCkXbP/888/zxhtvsHbtWlq1akW/fv0qf9bnn38OUPl1cnLypfmPEUIIoTtSbAkhhHAohw4dQlEU2rdvf8HH27dvT3Z2NqmpqQAsXLiQf/zjH7Rv357XXnuN0NBQFi9ejMFgIDg4mODg4POKtnMtWLCAW265hWnTphETE0O/fv14+eWX+eCDDyguLq7S9u2332bevHmsWbOmMqPZbK78WX5+fgCVXwcHB//d/xIhhBA6JcWWEEIIh1TXIcdXXHFF5edOTk7069eP/fv3n9du9erVeHh44OPjQ6dOnVi8eHHlY7t372bp0qV4eHhUfgwbNgy73c7Ro0cr23355ZdMmjSJ0NBQOnbsWO/fKTc3Fw8PD7y8vIiJiWHmzJkyVb0QQjgwKbaEEEI4lOjoaAwGAwcOHLjg4wcOHMDX15d27dpV+xwV46TONmjQIHbt2sW2bduIi4vjwQcfZN26dQAUFBQwadIkdu3aVfmxe/duDh06RJs2bSqf45dffmHFihUYDAaefPLJev9unp6e7Nq1ix07dvDcc8/x9ttv89JLL9X7eYQQQuiDFFtCCCEcir+/P1dffTWvvfYaRUVFVR5LSUnhww8/ZMKECbRp0wZnZ2d++eWXysftdjtbtmyhQ4cO5z2vu7s70dHRxMbGct999xEVFUV8fDwA3bt3Z//+/URHR5/3YTabK5/j0UcfZfz48SxdupQXX3yR33//vV6/m5OTE9HR0cTExDBq1Ciuvvpqdu3aVa/nEEIIoR9SbAkhhHA4r776KiUlJQwbNoyff/6ZEydOsGbNGq6++mpatmzJ008/jYeHB/fccw8PPfQQ3377LQcOHGDy5MmcOnWKyZMnn/ecJSUlpKSkkJSUxPLlyzl27BidOnUC4JFHHmHLli1MmTKFXbt2cejQIb788svzJsioGI/Vq1cvpk2bxh133EFpaWm9frfi4mKKiorYsWMHmzdvvqjuiEIIIfRBii0hhBAOJyYmhu3bt9O6dWtuuOEG2rRpw7333sugQYPYunVrZdHz3HPPMXr0aCZOnEjXrl3ZvXs333//PSEhIec955o1awgJCSEqKoonnniCZ555hmHDhgHQuXNnNm7cyJ9//kn//v3p1q0bs2fPJjQ0tNqMc+fOxW6316s7YW5uLq6urri7u3PttdcyZswYZsyYUb//HCGEELohixoLIYQQQgghRAOQO1tCCCGEEEII0QCk2BJCCCGEEEKIBiDFlhBCCCGEEEI0ACm2hBBCCCGEEKIBSLElhBBCCCGEEA1Aii0hhBBCCCGEaABSbAkhhBBCCCFEA5BiSwghhBBCCCEagBRbQgghhBBCCNEApNgSQgghhBBCiAYgxZYQQgghhBBCNID/B0Sqa6AYmhJ+AAAAAElFTkSuQmCC",
|
||
"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": 11,
|
||
"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": 12,
|
||
"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": 12,
|
||
"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": 13,
|
||
"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": 14,
|
||
"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+aY0UcAAJCOMzqhcrpPwQqVJNWqVeuuyuYS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0cZTrp1D7Ofnp7CwMId9w4cP14gRI1Kce/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/T2229LkkqWLKlq1aqpV69eev7551WiRMH+M7N8+XKVLOncL27OJDcA5OXn56eQkBBtSzV32kfZsmUVFhbm0BcXF6fx48fnOTc7O1u7du3SmDFj7H0+Pj6KiorSjh07TI2rIFxL/Dt27NDw4cMd+qKjo+2J4vzEx8drwoQJefr//pwBAChu/vjjDxIlADxLp06dtGjRImVlZWnt2rUaOHCgSpYs6fBLwWXZ2dny8/Mz5X0rVKhgyjgArszf31+HDx9Wdna2qeMahiGLxeLQd6Vqkt9//105OTkKDg526A8ODtYPP/xgalwF4VriT01Nzff81NTUK77PmDFjHJIrp06dUvXq1ZWcnGzaD4/4n8ufYlKxU3B4xgWPZ1yweL4F73L1pJm/F5AoAWAKq9WqkJAQSVL//v21YsUKrVq1SmPGjLFPl7n11ls1d+5cWa1WHT58WCkpKXr22We1fv16+fj4qG3btnr11VcVHh4uScrJydHIkSP11ltvydfXV08++aT+Plvw71NvsrKyFBsbq3fffVfHjx9XWFiYxowZozvvvFORkZGSpPLly0uSYmJitHjxYtlsNk2dOlVvvPGGUlNTVbt2bY0bN04PPvig/X3Wrl2roUOHKiUlRa1atVJMTIzLz2jUqFFasWKFfv31V4WEhKhnz56KjY3NUxEzf/58TZ48WX/88YfuueceLViwwOEXnIULF2rGjBk6fPiwwsPDNXjwYA0YMMDleABX+Pv7y9/f391h4B9caepSUFAQP6AXoMDAQJ5vAeMZFzyeccHi+RY8Hx/zlmBlMVcABaJUqVIOnz5v3LhRBw4c0IYNG7R69WpduHBB0dHRCggI0NatW7V9+3aVLVtWnTp1sl83Y8YMLV68WG+99Za2bdumkydPasWKFVd93169eum9997T7NmztX//fs2fP99e3v/RRx9Jkg4cOKBjx47p1VdflXSpVP2dd95RQkKCvv/+ew0bNkyPPfaYNm/eLElKSUnR/fffr65duyopKUl9+/a9pvUQAgICtHjxYu3bt0+vvvqqFixYoFdeecXhnIMHD+r999/Xf//7X61bt07ffPONQxJkyZIlio2N1Ysvvqj9+/drypQpGjdunH3qE1BcVaxYUb6+vkpLS3PoT0tLsydpPdm1xB8SElJk7xcAgKKMihIApjIMQxs3btQnn3yiZ555xt5fpkwZLVy40D7l5v/+7/9ks9m0cOFCe+n9okWLVK5cOW3atEl33XWXZs2apTFjxuj++++XJCUkJOiTTz654nv/+OOPev/997VhwwZFRUVJkmrWrGk/frkcr1KlSvY1SrKysjRlyhR9+umnat26tf2abdu2af78+Wrfvr3mzZunm266STNmzJAk1alTR99++62mTp3q0rN54YUX7H8ODw/XiBEjtHTpUj333HP2/vPnz+udd95RlSpVJEmvvfaaunTpohkzZigkJERxcXGaMWOG/ZnUqFFD+/bt0/z586+pygUoKvz8/NSsWTNt3LjRvkCyzWbTxo0bNWjQIPcG54Rrib9169bauHGjhg4dau/bsGGD/d8qAABQMEiUADDF6tWrVbZsWV24cEE2m02PPvqow4KMDRs2dFiXZM+ePTp48KACAgIcxjl//rx+/vlnnT59WseOHVPLli3tx0qUKKHmzZvnmX5zWVJSknx9fdW+fXun4z548KDOnj2rjh07OvRnZ2erSZMmkqT9+/c7xCHpmn5RWbZsmWbPnq2ff/5ZGRkZunjxYp4SzGrVqtmTJJffx2az6cCBAwoICNDPP/+sJ598Uv369bOfc/HiRdYegFcYPny4YmJi1Lx5c7Vo0UKzZs1SZmamevfu7e7QnPJP8ffq1UtVqlRRfHy8JGnIkCFq3769ZsyYoS5dumjp0qVKTEzUG2+84fR7Wq1WxcXFXXHtF1wfnm/B4xkXPJ5xweL5FryCeMYkSgCYIjIyUvPmzZOfn59CQ0Pz7HZTpkwZh9cZGRlq1qyZlixZkmesG2+88ZpiKFWqlMvXZGRkSJLWrFnjkKCQrryo5LXYsWOHevbsqQkTJig6OlpBQUFaunSpvUrFlVgXLFiQJ3Hj6+trWqyAp+rRo4dOnDih2NhYpaamKiIiQuvWrcuz4Kmn+qf4k5OTHeZX33bbbXr33Xf1wgsv6Pnnn9fNN9+slStXqkGDBk6/p9VqzXcXIZiD51vweMYFj2dcsHi+Ba8gnjGJEgCmKFOmjGrVquX0+U2bNtWyZctUqVKlKy5sVblyZX355Zdq166dpEuVE7t27VLTpk3zPb9hw4ay2WzavHmzferNX12uaMnJybH31a9fX1arVcnJyVesRKlXr55WrVrl0Ldz585/vsm/+OKLL1S9enWNHTvW3vfLL7/kOS85OVm//fabQkND7e/j4+OjOnXqKDg4WKGhoTp06JB69uzp0vsDxcWgQYOKxFSbK7la/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": 15,
|
||
"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": [
|
||
"c:\\Users\\HomePC\\Desktop\\MII_Lab1\\.venv\\Lib\\site-packages\\numpy\\ma\\core.py:2881: RuntimeWarning: invalid value encountered in cast\n",
|
||
" _data = np.array(data, dtype=dtype, copy=copy,\n"
|
||
]
|
||
}
|
||
],
|
||
"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": 16,
|
||
"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.6"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 2
|
||
}
|