diff --git a/laboratory_4/lab4.ipynb b/laboratory_4/lab4.ipynb
new file mode 100644
index 0000000..5584a37
--- /dev/null
+++ b/laboratory_4/lab4.ipynb
@@ -0,0 +1,5712 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Начинаем работу... \n",
+ "\n",
+ "Датасет: Продажи домов в округе Кинг "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 144,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Index(['id', 'date', 'price', 'bedrooms', 'bathrooms', 'sqft_living',\n",
+ " 'sqft_lot', 'floors', 'waterfront', 'view', 'condition', 'grade',\n",
+ " 'sqft_above', 'sqft_basement', 'yr_built', 'yr_renovated', 'zipcode',\n",
+ " 'lat', 'long', 'sqft_living15', 'sqft_lot15'],\n",
+ " dtype='object')\n"
+ ]
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "from sklearn import set_config\n",
+ "\n",
+ "# Установим параметры для вывода\n",
+ "set_config(transform_output=\"pandas\")\n",
+ "\n",
+ "random_state = 42\n",
+ "\n",
+ "# Подключим датафрейм и выгрузим данные\n",
+ "df = pd.read_csv(\".//static//csv//kc_house_data.csv\")\n",
+ "print(df.columns)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 145,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " date | \n",
+ " price | \n",
+ " bedrooms | \n",
+ " bathrooms | \n",
+ " sqft_living | \n",
+ " sqft_lot | \n",
+ " floors | \n",
+ " waterfront | \n",
+ " view | \n",
+ " ... | \n",
+ " grade | \n",
+ " sqft_above | \n",
+ " sqft_basement | \n",
+ " yr_built | \n",
+ " yr_renovated | \n",
+ " zipcode | \n",
+ " lat | \n",
+ " long | \n",
+ " sqft_living15 | \n",
+ " sqft_lot15 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 7129300520 | \n",
+ " 20141013T000000 | \n",
+ " 221900.0 | \n",
+ " 3 | \n",
+ " 1.00 | \n",
+ " 1180 | \n",
+ " 5650 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 7 | \n",
+ " 1180 | \n",
+ " 0 | \n",
+ " 1955 | \n",
+ " 0 | \n",
+ " 98178 | \n",
+ " 47.5112 | \n",
+ " -122.257 | \n",
+ " 1340 | \n",
+ " 5650 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 6414100192 | \n",
+ " 20141209T000000 | \n",
+ " 538000.0 | \n",
+ " 3 | \n",
+ " 2.25 | \n",
+ " 2570 | \n",
+ " 7242 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 7 | \n",
+ " 2170 | \n",
+ " 400 | \n",
+ " 1951 | \n",
+ " 1991 | \n",
+ " 98125 | \n",
+ " 47.7210 | \n",
+ " -122.319 | \n",
+ " 1690 | \n",
+ " 7639 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 5631500400 | \n",
+ " 20150225T000000 | \n",
+ " 180000.0 | \n",
+ " 2 | \n",
+ " 1.00 | \n",
+ " 770 | \n",
+ " 10000 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 6 | \n",
+ " 770 | \n",
+ " 0 | \n",
+ " 1933 | \n",
+ " 0 | \n",
+ " 98028 | \n",
+ " 47.7379 | \n",
+ " -122.233 | \n",
+ " 2720 | \n",
+ " 8062 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 2487200875 | \n",
+ " 20141209T000000 | \n",
+ " 604000.0 | \n",
+ " 4 | \n",
+ " 3.00 | \n",
+ " 1960 | \n",
+ " 5000 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 7 | \n",
+ " 1050 | \n",
+ " 910 | \n",
+ " 1965 | \n",
+ " 0 | \n",
+ " 98136 | \n",
+ " 47.5208 | \n",
+ " -122.393 | \n",
+ " 1360 | \n",
+ " 5000 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 1954400510 | \n",
+ " 20150218T000000 | \n",
+ " 510000.0 | \n",
+ " 3 | \n",
+ " 2.00 | \n",
+ " 1680 | \n",
+ " 8080 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 8 | \n",
+ " 1680 | \n",
+ " 0 | \n",
+ " 1987 | \n",
+ " 0 | \n",
+ " 98074 | \n",
+ " 47.6168 | \n",
+ " -122.045 | \n",
+ " 1800 | \n",
+ " 7503 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 21 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id date price bedrooms bathrooms sqft_living \\\n",
+ "0 7129300520 20141013T000000 221900.0 3 1.00 1180 \n",
+ "1 6414100192 20141209T000000 538000.0 3 2.25 2570 \n",
+ "2 5631500400 20150225T000000 180000.0 2 1.00 770 \n",
+ "3 2487200875 20141209T000000 604000.0 4 3.00 1960 \n",
+ "4 1954400510 20150218T000000 510000.0 3 2.00 1680 \n",
+ "\n",
+ " sqft_lot floors waterfront view ... grade sqft_above sqft_basement \\\n",
+ "0 5650 1.0 0 0 ... 7 1180 0 \n",
+ "1 7242 2.0 0 0 ... 7 2170 400 \n",
+ "2 10000 1.0 0 0 ... 6 770 0 \n",
+ "3 5000 1.0 0 0 ... 7 1050 910 \n",
+ "4 8080 1.0 0 0 ... 8 1680 0 \n",
+ "\n",
+ " yr_built yr_renovated zipcode lat long sqft_living15 \\\n",
+ "0 1955 0 98178 47.5112 -122.257 1340 \n",
+ "1 1951 1991 98125 47.7210 -122.319 1690 \n",
+ "2 1933 0 98028 47.7379 -122.233 2720 \n",
+ "3 1965 0 98136 47.5208 -122.393 1360 \n",
+ "4 1987 0 98074 47.6168 -122.045 1800 \n",
+ "\n",
+ " sqft_lot15 \n",
+ "0 5650 \n",
+ "1 7639 \n",
+ "2 8062 \n",
+ "3 5000 \n",
+ "4 7503 \n",
+ "\n",
+ "[5 rows x 21 columns]"
+ ]
+ },
+ "execution_count": 145,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 146,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " price | \n",
+ " bedrooms | \n",
+ " bathrooms | \n",
+ " sqft_living | \n",
+ " sqft_lot | \n",
+ " floors | \n",
+ " waterfront | \n",
+ " view | \n",
+ " condition | \n",
+ " grade | \n",
+ " sqft_above | \n",
+ " sqft_basement | \n",
+ " yr_built | \n",
+ " yr_renovated | \n",
+ " zipcode | \n",
+ " lat | \n",
+ " long | \n",
+ " sqft_living15 | \n",
+ " sqft_lot15 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " count | \n",
+ " 2.161300e+04 | \n",
+ " 2.161300e+04 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 2.161300e+04 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ " 21613.000000 | \n",
+ "
\n",
+ " \n",
+ " mean | \n",
+ " 4.580302e+09 | \n",
+ " 5.400881e+05 | \n",
+ " 3.370842 | \n",
+ " 2.114757 | \n",
+ " 2079.899736 | \n",
+ " 1.510697e+04 | \n",
+ " 1.494309 | \n",
+ " 0.007542 | \n",
+ " 0.234303 | \n",
+ " 3.409430 | \n",
+ " 7.656873 | \n",
+ " 1788.390691 | \n",
+ " 291.509045 | \n",
+ " 1971.005136 | \n",
+ " 84.402258 | \n",
+ " 98077.939805 | \n",
+ " 47.560053 | \n",
+ " -122.213896 | \n",
+ " 1986.552492 | \n",
+ " 12768.455652 | \n",
+ "
\n",
+ " \n",
+ " std | \n",
+ " 2.876566e+09 | \n",
+ " 3.671272e+05 | \n",
+ " 0.930062 | \n",
+ " 0.770163 | \n",
+ " 918.440897 | \n",
+ " 4.142051e+04 | \n",
+ " 0.539989 | \n",
+ " 0.086517 | \n",
+ " 0.766318 | \n",
+ " 0.650743 | \n",
+ " 1.175459 | \n",
+ " 828.090978 | \n",
+ " 442.575043 | \n",
+ " 29.373411 | \n",
+ " 401.679240 | \n",
+ " 53.505026 | \n",
+ " 0.138564 | \n",
+ " 0.140828 | \n",
+ " 685.391304 | \n",
+ " 27304.179631 | \n",
+ "
\n",
+ " \n",
+ " min | \n",
+ " 1.000102e+06 | \n",
+ " 7.500000e+04 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 290.000000 | \n",
+ " 5.200000e+02 | \n",
+ " 1.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 290.000000 | \n",
+ " 0.000000 | \n",
+ " 1900.000000 | \n",
+ " 0.000000 | \n",
+ " 98001.000000 | \n",
+ " 47.155900 | \n",
+ " -122.519000 | \n",
+ " 399.000000 | \n",
+ " 651.000000 | \n",
+ "
\n",
+ " \n",
+ " 25% | \n",
+ " 2.123049e+09 | \n",
+ " 3.219500e+05 | \n",
+ " 3.000000 | \n",
+ " 1.750000 | \n",
+ " 1427.000000 | \n",
+ " 5.040000e+03 | \n",
+ " 1.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 3.000000 | \n",
+ " 7.000000 | \n",
+ " 1190.000000 | \n",
+ " 0.000000 | \n",
+ " 1951.000000 | \n",
+ " 0.000000 | \n",
+ " 98033.000000 | \n",
+ " 47.471000 | \n",
+ " -122.328000 | \n",
+ " 1490.000000 | \n",
+ " 5100.000000 | \n",
+ "
\n",
+ " \n",
+ " 50% | \n",
+ " 3.904930e+09 | \n",
+ " 4.500000e+05 | \n",
+ " 3.000000 | \n",
+ " 2.250000 | \n",
+ " 1910.000000 | \n",
+ " 7.618000e+03 | \n",
+ " 1.500000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 3.000000 | \n",
+ " 7.000000 | \n",
+ " 1560.000000 | \n",
+ " 0.000000 | \n",
+ " 1975.000000 | \n",
+ " 0.000000 | \n",
+ " 98065.000000 | \n",
+ " 47.571800 | \n",
+ " -122.230000 | \n",
+ " 1840.000000 | \n",
+ " 7620.000000 | \n",
+ "
\n",
+ " \n",
+ " 75% | \n",
+ " 7.308900e+09 | \n",
+ " 6.450000e+05 | \n",
+ " 4.000000 | \n",
+ " 2.500000 | \n",
+ " 2550.000000 | \n",
+ " 1.068800e+04 | \n",
+ " 2.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 4.000000 | \n",
+ " 8.000000 | \n",
+ " 2210.000000 | \n",
+ " 560.000000 | \n",
+ " 1997.000000 | \n",
+ " 0.000000 | \n",
+ " 98118.000000 | \n",
+ " 47.678000 | \n",
+ " -122.125000 | \n",
+ " 2360.000000 | \n",
+ " 10083.000000 | \n",
+ "
\n",
+ " \n",
+ " max | \n",
+ " 9.900000e+09 | \n",
+ " 7.700000e+06 | \n",
+ " 33.000000 | \n",
+ " 8.000000 | \n",
+ " 13540.000000 | \n",
+ " 1.651359e+06 | \n",
+ " 3.500000 | \n",
+ " 1.000000 | \n",
+ " 4.000000 | \n",
+ " 5.000000 | \n",
+ " 13.000000 | \n",
+ " 9410.000000 | \n",
+ " 4820.000000 | \n",
+ " 2015.000000 | \n",
+ " 2015.000000 | \n",
+ " 98199.000000 | \n",
+ " 47.777600 | \n",
+ " -121.315000 | \n",
+ " 6210.000000 | \n",
+ " 871200.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id price bedrooms bathrooms sqft_living \\\n",
+ "count 2.161300e+04 2.161300e+04 21613.000000 21613.000000 21613.000000 \n",
+ "mean 4.580302e+09 5.400881e+05 3.370842 2.114757 2079.899736 \n",
+ "std 2.876566e+09 3.671272e+05 0.930062 0.770163 918.440897 \n",
+ "min 1.000102e+06 7.500000e+04 0.000000 0.000000 290.000000 \n",
+ "25% 2.123049e+09 3.219500e+05 3.000000 1.750000 1427.000000 \n",
+ "50% 3.904930e+09 4.500000e+05 3.000000 2.250000 1910.000000 \n",
+ "75% 7.308900e+09 6.450000e+05 4.000000 2.500000 2550.000000 \n",
+ "max 9.900000e+09 7.700000e+06 33.000000 8.000000 13540.000000 \n",
+ "\n",
+ " sqft_lot floors waterfront view condition \\\n",
+ "count 2.161300e+04 21613.000000 21613.000000 21613.000000 21613.000000 \n",
+ "mean 1.510697e+04 1.494309 0.007542 0.234303 3.409430 \n",
+ "std 4.142051e+04 0.539989 0.086517 0.766318 0.650743 \n",
+ "min 5.200000e+02 1.000000 0.000000 0.000000 1.000000 \n",
+ "25% 5.040000e+03 1.000000 0.000000 0.000000 3.000000 \n",
+ "50% 7.618000e+03 1.500000 0.000000 0.000000 3.000000 \n",
+ "75% 1.068800e+04 2.000000 0.000000 0.000000 4.000000 \n",
+ "max 1.651359e+06 3.500000 1.000000 4.000000 5.000000 \n",
+ "\n",
+ " grade sqft_above sqft_basement yr_built yr_renovated \\\n",
+ "count 21613.000000 21613.000000 21613.000000 21613.000000 21613.000000 \n",
+ "mean 7.656873 1788.390691 291.509045 1971.005136 84.402258 \n",
+ "std 1.175459 828.090978 442.575043 29.373411 401.679240 \n",
+ "min 1.000000 290.000000 0.000000 1900.000000 0.000000 \n",
+ "25% 7.000000 1190.000000 0.000000 1951.000000 0.000000 \n",
+ "50% 7.000000 1560.000000 0.000000 1975.000000 0.000000 \n",
+ "75% 8.000000 2210.000000 560.000000 1997.000000 0.000000 \n",
+ "max 13.000000 9410.000000 4820.000000 2015.000000 2015.000000 \n",
+ "\n",
+ " zipcode lat long sqft_living15 sqft_lot15 \n",
+ "count 21613.000000 21613.000000 21613.000000 21613.000000 21613.000000 \n",
+ "mean 98077.939805 47.560053 -122.213896 1986.552492 12768.455652 \n",
+ "std 53.505026 0.138564 0.140828 685.391304 27304.179631 \n",
+ "min 98001.000000 47.155900 -122.519000 399.000000 651.000000 \n",
+ "25% 98033.000000 47.471000 -122.328000 1490.000000 5100.000000 \n",
+ "50% 98065.000000 47.571800 -122.230000 1840.000000 7620.000000 \n",
+ "75% 98118.000000 47.678000 -122.125000 2360.000000 10083.000000 \n",
+ "max 98199.000000 47.777600 -121.315000 6210.000000 871200.000000 "
+ ]
+ },
+ "execution_count": 146,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.describe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 147,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "id 0\n",
+ "date 0\n",
+ "price 0\n",
+ "bedrooms 0\n",
+ "bathrooms 0\n",
+ "sqft_living 0\n",
+ "sqft_lot 0\n",
+ "floors 0\n",
+ "waterfront 0\n",
+ "view 0\n",
+ "condition 0\n",
+ "grade 0\n",
+ "sqft_above 0\n",
+ "sqft_basement 0\n",
+ "yr_built 0\n",
+ "yr_renovated 0\n",
+ "zipcode 0\n",
+ "lat 0\n",
+ "long 0\n",
+ "sqft_living15 0\n",
+ "sqft_lot15 0\n",
+ "dtype: int64\n",
+ "id False\n",
+ "date False\n",
+ "price False\n",
+ "bedrooms False\n",
+ "bathrooms False\n",
+ "sqft_living False\n",
+ "sqft_lot False\n",
+ "floors False\n",
+ "waterfront False\n",
+ "view False\n",
+ "condition False\n",
+ "grade False\n",
+ "sqft_above False\n",
+ "sqft_basement False\n",
+ "yr_built False\n",
+ "yr_renovated False\n",
+ "zipcode False\n",
+ "lat False\n",
+ "long False\n",
+ "sqft_living15 False\n",
+ "sqft_lot15 False\n",
+ "dtype: bool\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Процент пропущенных значений признаков\n",
+ "for i in df.columns:\n",
+ " null_rate = df[i].isnull().sum() / len(df) * 100\n",
+ " if null_rate > 0:\n",
+ " print(f'{i} Процент пустых значений: %{null_rate:.2f}')\n",
+ "\n",
+ "print(df.isnull().sum())\n",
+ "\n",
+ "print(df.isnull().any())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 148,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "id int64\n",
+ "date object\n",
+ "price float64\n",
+ "bedrooms int64\n",
+ "bathrooms float64\n",
+ "sqft_living int64\n",
+ "sqft_lot int64\n",
+ "floors float64\n",
+ "waterfront int64\n",
+ "view int64\n",
+ "condition int64\n",
+ "grade int64\n",
+ "sqft_above int64\n",
+ "sqft_basement int64\n",
+ "yr_built int64\n",
+ "yr_renovated int64\n",
+ "zipcode int64\n",
+ "lat float64\n",
+ "long float64\n",
+ "sqft_living15 int64\n",
+ "sqft_lot15 int64\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 148,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Проверка типов столбцов\n",
+ "df.dtypes"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Выбор бизнес-целей \n",
+ "Для датасета недвижимости предлагаются две бизнес-цели:\n",
+ "\n",
+ "*Задача регрессии* – предсказание цены дома (price). Это может помочь риэлторам и аналитикам определить справедливую рыночную стоимость недвижимости. \n",
+ "\n",
+ "*Задача классификации* – определение вероятности того, что цена дома будет выше/ниже медианы рынка. Классифицировать дома по ценовым категориям (например, низкая, средняя, высокая цена). Это может помочь определить, какие дома популярны у покупателей.\n",
+ "\n",
+ "## Определение достижимого уровня качества модели \n",
+ "Для регрессии и классификации мы выберем метрики: \n",
+ "\n",
+ "Для регрессии будем использовать метрики MAE (средняя абсолютная ошибка) и R^2 (коэффициент детерминации), стремясь к MAE ниже 10% от средней цены. А классификация будте ориентироваться на метрики accuracy и F1-score при целевом значении accuracy около 80%.\n",
+ "\n",
+ "## Ориентир для каждой задачи\n",
+ "Для регрессии ориентиром будет медианная цена (price.median()), так как это стабильное значение. Для классификации ориентируемся на среднюю вероятность предсказания класса выше медианы.\n",
+ "\n",
+ "## Анализ алгоритмов машинного обучения \n",
+ "Рассмотрим для задачи регрессии:\n",
+ "\n",
+ "*Линейная регрессия:* подходит для простых линейных зависимостей. \n",
+ "*Дерево решений:* учитывает нелинейные зависимости, может учесть сложные закономерности. \n",
+ "*Случайный лес:* ансамблевый метод, обобщающий данные и эффективно обрабатывающий выбросы. \n",
+ "\n",
+ "Для задачи классификации: \n",
+ "\n",
+ "*Логистическая регрессия:* простая модель, подходящая для бинарной классификации. \n",
+ "*Метод опорных векторов (SVM):* работает хорошо на данных с четкими разделениями. \n",
+ "*Градиентный бустинг:* подходит для сложных и высокоразмерных данных, обеспечивает высокую точность. \n",
+ "\n",
+ "## Выбор моделей \n",
+ "Выбираем по три модели для каждой задачи:\n",
+ "\n",
+ "*Регрессия:* Линейная регрессия, Дерево решений, Случайный лес. \n",
+ "*Классификация:* Логистическая регрессия, Метод опорных векторов (SVM), Градиентный бустинг. \n",
+ "\n",
+ "\n",
+ "## Построение конвейера и визуализации \n",
+ "Теперь напишем код для загрузки данных, анализа и подготовки моделей с визуализацией результатов.\n",
+ "\n",
+ "\n",
+ "# Начнём с задачи классификации\n",
+ "\n",
+ "Целевой признак --> above_median_price\n",
+ "\n",
+ "Формируем выборки. Разделяем набор данных на обучающую и тестовые выборки (80/20) для задачи классификации"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 149,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'X_train'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " date | \n",
+ " price | \n",
+ " bedrooms | \n",
+ " bathrooms | \n",
+ " sqft_living | \n",
+ " sqft_lot | \n",
+ " floors | \n",
+ " waterfront | \n",
+ " view | \n",
+ " ... | \n",
+ " sqft_basement | \n",
+ " yr_built | \n",
+ " yr_renovated | \n",
+ " zipcode | \n",
+ " lat | \n",
+ " long | \n",
+ " sqft_living15 | \n",
+ " sqft_lot15 | \n",
+ " above_median_price | \n",
+ " price_category | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 20962 | \n",
+ " 1278000210 | \n",
+ " 20150311T000000 | \n",
+ " 110000.0 | \n",
+ " 2 | \n",
+ " 1.00 | \n",
+ " 828 | \n",
+ " 4524 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1968 | \n",
+ " 2007 | \n",
+ " 98001 | \n",
+ " 47.2655 | \n",
+ " -122.244 | \n",
+ " 828 | \n",
+ " 5402 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 12284 | \n",
+ " 2193300390 | \n",
+ " 20140923T000000 | \n",
+ " 624000.0 | \n",
+ " 4 | \n",
+ " 3.25 | \n",
+ " 2810 | \n",
+ " 11250 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 1130 | \n",
+ " 1980 | \n",
+ " 0 | \n",
+ " 98052 | \n",
+ " 47.6920 | \n",
+ " -122.099 | \n",
+ " 2110 | \n",
+ " 11250 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 7343 | \n",
+ " 4289900005 | \n",
+ " 20141230T000000 | \n",
+ " 1535000.0 | \n",
+ " 4 | \n",
+ " 3.25 | \n",
+ " 2850 | \n",
+ " 4100 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 3 | \n",
+ " ... | \n",
+ " 1030 | \n",
+ " 1908 | \n",
+ " 2003 | \n",
+ " 98122 | \n",
+ " 47.6147 | \n",
+ " -122.285 | \n",
+ " 2130 | \n",
+ " 4200 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 14247 | \n",
+ " 316000145 | \n",
+ " 20150325T000000 | \n",
+ " 235000.0 | \n",
+ " 4 | \n",
+ " 1.00 | \n",
+ " 1360 | \n",
+ " 7132 | \n",
+ " 1.5 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1941 | \n",
+ " 0 | \n",
+ " 98168 | \n",
+ " 47.5054 | \n",
+ " -122.301 | \n",
+ " 1280 | \n",
+ " 7175 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 16670 | \n",
+ " 629400480 | \n",
+ " 20140619T000000 | \n",
+ " 775000.0 | \n",
+ " 4 | \n",
+ " 2.75 | \n",
+ " 3010 | \n",
+ " 15992 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1996 | \n",
+ " 0 | \n",
+ " 98075 | \n",
+ " 47.5895 | \n",
+ " -121.994 | \n",
+ " 3330 | \n",
+ " 12333 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 88 | \n",
+ " 1332700270 | \n",
+ " 20140519T000000 | \n",
+ " 215000.0 | \n",
+ " 2 | \n",
+ " 2.25 | \n",
+ " 1610 | \n",
+ " 2040 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1979 | \n",
+ " 0 | \n",
+ " 98056 | \n",
+ " 47.5180 | \n",
+ " -122.194 | \n",
+ " 1950 | \n",
+ " 2025 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 15031 | \n",
+ " 7129303070 | \n",
+ " 20140820T000000 | \n",
+ " 735000.0 | \n",
+ " 4 | \n",
+ " 2.75 | \n",
+ " 3040 | \n",
+ " 2415 | \n",
+ " 2.0 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1966 | \n",
+ " 0 | \n",
+ " 98118 | \n",
+ " 47.5188 | \n",
+ " -122.256 | \n",
+ " 2620 | \n",
+ " 2433 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 5234 | \n",
+ " 2432000130 | \n",
+ " 20150414T000000 | \n",
+ " 675000.0 | \n",
+ " 3 | \n",
+ " 1.75 | \n",
+ " 1660 | \n",
+ " 9549 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1956 | \n",
+ " 0 | \n",
+ " 98033 | \n",
+ " 47.6503 | \n",
+ " -122.198 | \n",
+ " 2090 | \n",
+ " 9549 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 19980 | \n",
+ " 774100475 | \n",
+ " 20140627T000000 | \n",
+ " 415000.0 | \n",
+ " 3 | \n",
+ " 2.75 | \n",
+ " 2600 | \n",
+ " 64626 | \n",
+ " 1.5 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2009 | \n",
+ " 0 | \n",
+ " 98014 | \n",
+ " 47.7185 | \n",
+ " -121.405 | \n",
+ " 1740 | \n",
+ " 64626 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3671 | \n",
+ " 8847400115 | \n",
+ " 20140723T000000 | \n",
+ " 590000.0 | \n",
+ " 3 | \n",
+ " 2.00 | \n",
+ " 2420 | \n",
+ " 208652 | \n",
+ " 1.5 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2005 | \n",
+ " 0 | \n",
+ " 98010 | \n",
+ " 47.3666 | \n",
+ " -121.978 | \n",
+ " 3180 | \n",
+ " 212137 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
17290 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id date price bedrooms bathrooms \\\n",
+ "20962 1278000210 20150311T000000 110000.0 2 1.00 \n",
+ "12284 2193300390 20140923T000000 624000.0 4 3.25 \n",
+ "7343 4289900005 20141230T000000 1535000.0 4 3.25 \n",
+ "14247 316000145 20150325T000000 235000.0 4 1.00 \n",
+ "16670 629400480 20140619T000000 775000.0 4 2.75 \n",
+ "... ... ... ... ... ... \n",
+ "88 1332700270 20140519T000000 215000.0 2 2.25 \n",
+ "15031 7129303070 20140820T000000 735000.0 4 2.75 \n",
+ "5234 2432000130 20150414T000000 675000.0 3 1.75 \n",
+ "19980 774100475 20140627T000000 415000.0 3 2.75 \n",
+ "3671 8847400115 20140723T000000 590000.0 3 2.00 \n",
+ "\n",
+ " sqft_living sqft_lot floors waterfront view ... sqft_basement \\\n",
+ "20962 828 4524 1.0 0 0 ... 0 \n",
+ "12284 2810 11250 1.0 0 0 ... 1130 \n",
+ "7343 2850 4100 2.0 0 3 ... 1030 \n",
+ "14247 1360 7132 1.5 0 0 ... 0 \n",
+ "16670 3010 15992 2.0 0 0 ... 0 \n",
+ "... ... ... ... ... ... ... ... \n",
+ "88 1610 2040 2.0 0 0 ... 0 \n",
+ "15031 3040 2415 2.0 1 4 ... 0 \n",
+ "5234 1660 9549 1.0 0 0 ... 0 \n",
+ "19980 2600 64626 1.5 0 0 ... 0 \n",
+ "3671 2420 208652 1.5 0 0 ... 0 \n",
+ "\n",
+ " yr_built yr_renovated zipcode lat long sqft_living15 \\\n",
+ "20962 1968 2007 98001 47.2655 -122.244 828 \n",
+ "12284 1980 0 98052 47.6920 -122.099 2110 \n",
+ "7343 1908 2003 98122 47.6147 -122.285 2130 \n",
+ "14247 1941 0 98168 47.5054 -122.301 1280 \n",
+ "16670 1996 0 98075 47.5895 -121.994 3330 \n",
+ "... ... ... ... ... ... ... \n",
+ "88 1979 0 98056 47.5180 -122.194 1950 \n",
+ "15031 1966 0 98118 47.5188 -122.256 2620 \n",
+ "5234 1956 0 98033 47.6503 -122.198 2090 \n",
+ "19980 2009 0 98014 47.7185 -121.405 1740 \n",
+ "3671 2005 0 98010 47.3666 -121.978 3180 \n",
+ "\n",
+ " sqft_lot15 above_median_price price_category \n",
+ "20962 5402 0 0 \n",
+ "12284 11250 1 1 \n",
+ "7343 4200 1 2 \n",
+ "14247 7175 0 0 \n",
+ "16670 12333 1 2 \n",
+ "... ... ... ... \n",
+ "88 2025 0 0 \n",
+ "15031 2433 1 2 \n",
+ "5234 9549 1 1 \n",
+ "19980 64626 0 1 \n",
+ "3671 212137 1 1 \n",
+ "\n",
+ "[17290 rows x 23 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'y_train'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " above_median_price | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 20962 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 12284 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 7343 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 14247 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 16670 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 88 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 15031 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 5234 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 19980 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 3671 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
17290 rows × 1 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " above_median_price\n",
+ "20962 0\n",
+ "12284 1\n",
+ "7343 1\n",
+ "14247 0\n",
+ "16670 1\n",
+ "... ...\n",
+ "88 0\n",
+ "15031 1\n",
+ "5234 1\n",
+ "19980 0\n",
+ "3671 1\n",
+ "\n",
+ "[17290 rows x 1 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'X_test'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " date | \n",
+ " price | \n",
+ " bedrooms | \n",
+ " bathrooms | \n",
+ " sqft_living | \n",
+ " sqft_lot | \n",
+ " floors | \n",
+ " waterfront | \n",
+ " view | \n",
+ " ... | \n",
+ " sqft_basement | \n",
+ " yr_built | \n",
+ " yr_renovated | \n",
+ " zipcode | \n",
+ " lat | \n",
+ " long | \n",
+ " sqft_living15 | \n",
+ " sqft_lot15 | \n",
+ " above_median_price | \n",
+ " price_category | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 11592 | \n",
+ " 2028701000 | \n",
+ " 20140529T000000 | \n",
+ " 635200.0 | \n",
+ " 4 | \n",
+ " 1.75 | \n",
+ " 1640 | \n",
+ " 4240 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 720 | \n",
+ " 1921 | \n",
+ " 0 | \n",
+ " 98117 | \n",
+ " 47.6766 | \n",
+ " -122.368 | \n",
+ " 1300 | \n",
+ " 4240 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 8984 | \n",
+ " 9406500530 | \n",
+ " 20140912T000000 | \n",
+ " 249000.0 | \n",
+ " 2 | \n",
+ " 2.00 | \n",
+ " 1090 | \n",
+ " 1357 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1990 | \n",
+ " 0 | \n",
+ " 98028 | \n",
+ " 47.7526 | \n",
+ " -122.244 | \n",
+ " 1078 | \n",
+ " 1318 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 8280 | \n",
+ " 8097000330 | \n",
+ " 20140721T000000 | \n",
+ " 359950.0 | \n",
+ " 3 | \n",
+ " 2.75 | \n",
+ " 2540 | \n",
+ " 8604 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1991 | \n",
+ " 0 | \n",
+ " 98092 | \n",
+ " 47.3209 | \n",
+ " -122.185 | \n",
+ " 2260 | \n",
+ " 7438 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 792 | \n",
+ " 8081020370 | \n",
+ " 20140709T000000 | \n",
+ " 1355000.0 | \n",
+ " 4 | \n",
+ " 3.50 | \n",
+ " 3550 | \n",
+ " 11000 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " ... | \n",
+ " 1290 | \n",
+ " 1999 | \n",
+ " 0 | \n",
+ " 98006 | \n",
+ " 47.5506 | \n",
+ " -122.134 | \n",
+ " 4100 | \n",
+ " 10012 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 10371 | \n",
+ " 7518507580 | \n",
+ " 20150502T000000 | \n",
+ " 581000.0 | \n",
+ " 2 | \n",
+ " 1.00 | \n",
+ " 1170 | \n",
+ " 4080 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1909 | \n",
+ " 0 | \n",
+ " 98117 | \n",
+ " 47.6784 | \n",
+ " -122.386 | \n",
+ " 1560 | \n",
+ " 4586 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 16733 | \n",
+ " 7212650950 | \n",
+ " 20140708T000000 | \n",
+ " 336000.0 | \n",
+ " 4 | \n",
+ " 2.50 | \n",
+ " 2530 | \n",
+ " 8169 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1993 | \n",
+ " 0 | \n",
+ " 98003 | \n",
+ " 47.2634 | \n",
+ " -122.312 | \n",
+ " 2220 | \n",
+ " 8013 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 13151 | \n",
+ " 4365200620 | \n",
+ " 20150312T000000 | \n",
+ " 394000.0 | \n",
+ " 3 | \n",
+ " 1.00 | \n",
+ " 1450 | \n",
+ " 7930 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 300 | \n",
+ " 1923 | \n",
+ " 0 | \n",
+ " 98126 | \n",
+ " 47.5212 | \n",
+ " -122.371 | \n",
+ " 1040 | \n",
+ " 7740 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 11667 | \n",
+ " 4083304355 | \n",
+ " 20150318T000000 | \n",
+ " 675000.0 | \n",
+ " 4 | \n",
+ " 1.75 | \n",
+ " 1530 | \n",
+ " 3615 | \n",
+ " 1.5 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1913 | \n",
+ " 0 | \n",
+ " 98103 | \n",
+ " 47.6529 | \n",
+ " -122.334 | \n",
+ " 1650 | \n",
+ " 4200 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3683 | \n",
+ " 2891100820 | \n",
+ " 20140825T000000 | \n",
+ " 213500.0 | \n",
+ " 3 | \n",
+ " 1.00 | \n",
+ " 1220 | \n",
+ " 6000 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1968 | \n",
+ " 0 | \n",
+ " 98002 | \n",
+ " 47.3245 | \n",
+ " -122.209 | \n",
+ " 1420 | \n",
+ " 6000 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 12059 | \n",
+ " 952000640 | \n",
+ " 20141027T000000 | \n",
+ " 715000.0 | \n",
+ " 3 | \n",
+ " 1.50 | \n",
+ " 1670 | \n",
+ " 5060 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1925 | \n",
+ " 0 | \n",
+ " 98126 | \n",
+ " 47.5671 | \n",
+ " -122.379 | \n",
+ " 1670 | \n",
+ " 5118 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
4323 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id date price bedrooms bathrooms \\\n",
+ "11592 2028701000 20140529T000000 635200.0 4 1.75 \n",
+ "8984 9406500530 20140912T000000 249000.0 2 2.00 \n",
+ "8280 8097000330 20140721T000000 359950.0 3 2.75 \n",
+ "792 8081020370 20140709T000000 1355000.0 4 3.50 \n",
+ "10371 7518507580 20150502T000000 581000.0 2 1.00 \n",
+ "... ... ... ... ... ... \n",
+ "16733 7212650950 20140708T000000 336000.0 4 2.50 \n",
+ "13151 4365200620 20150312T000000 394000.0 3 1.00 \n",
+ "11667 4083304355 20150318T000000 675000.0 4 1.75 \n",
+ "3683 2891100820 20140825T000000 213500.0 3 1.00 \n",
+ "12059 952000640 20141027T000000 715000.0 3 1.50 \n",
+ "\n",
+ " sqft_living sqft_lot floors waterfront view ... sqft_basement \\\n",
+ "11592 1640 4240 1.0 0 0 ... 720 \n",
+ "8984 1090 1357 2.0 0 0 ... 0 \n",
+ "8280 2540 8604 2.0 0 0 ... 0 \n",
+ "792 3550 11000 1.0 0 2 ... 1290 \n",
+ "10371 1170 4080 1.0 0 0 ... 0 \n",
+ "... ... ... ... ... ... ... ... \n",
+ "16733 2530 8169 2.0 0 0 ... 0 \n",
+ "13151 1450 7930 1.0 0 0 ... 300 \n",
+ "11667 1530 3615 1.5 0 0 ... 0 \n",
+ "3683 1220 6000 1.0 0 0 ... 0 \n",
+ "12059 1670 5060 2.0 0 2 ... 0 \n",
+ "\n",
+ " yr_built yr_renovated zipcode lat long sqft_living15 \\\n",
+ "11592 1921 0 98117 47.6766 -122.368 1300 \n",
+ "8984 1990 0 98028 47.7526 -122.244 1078 \n",
+ "8280 1991 0 98092 47.3209 -122.185 2260 \n",
+ "792 1999 0 98006 47.5506 -122.134 4100 \n",
+ "10371 1909 0 98117 47.6784 -122.386 1560 \n",
+ "... ... ... ... ... ... ... \n",
+ "16733 1993 0 98003 47.2634 -122.312 2220 \n",
+ "13151 1923 0 98126 47.5212 -122.371 1040 \n",
+ "11667 1913 0 98103 47.6529 -122.334 1650 \n",
+ "3683 1968 0 98002 47.3245 -122.209 1420 \n",
+ "12059 1925 0 98126 47.5671 -122.379 1670 \n",
+ "\n",
+ " sqft_lot15 above_median_price price_category \n",
+ "11592 4240 1 1 \n",
+ "8984 1318 0 0 \n",
+ "8280 7438 0 1 \n",
+ "792 10012 1 2 \n",
+ "10371 4586 1 1 \n",
+ "... ... ... ... \n",
+ "16733 8013 0 1 \n",
+ "13151 7740 0 1 \n",
+ "11667 4200 1 1 \n",
+ "3683 6000 0 0 \n",
+ "12059 5118 1 2 \n",
+ "\n",
+ "[4323 rows x 23 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'y_test'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " above_median_price | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 11592 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 8984 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 8280 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 792 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 10371 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 16733 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 13151 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 11667 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3683 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 12059 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
4323 rows × 1 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " above_median_price\n",
+ "11592 1\n",
+ "8984 0\n",
+ "8280 0\n",
+ "792 1\n",
+ "10371 1\n",
+ "... ...\n",
+ "16733 0\n",
+ "13151 0\n",
+ "11667 1\n",
+ "3683 0\n",
+ "12059 1\n",
+ "\n",
+ "[4323 rows x 1 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "id int64\n",
+ "date object\n",
+ "price float64\n",
+ "bedrooms int64\n",
+ "bathrooms float64\n",
+ "sqft_living int64\n",
+ "sqft_lot int64\n",
+ "floors float64\n",
+ "waterfront int64\n",
+ "view int64\n",
+ "condition int64\n",
+ "grade int64\n",
+ "sqft_above int64\n",
+ "sqft_basement int64\n",
+ "yr_built int64\n",
+ "yr_renovated int64\n",
+ "zipcode int64\n",
+ "lat float64\n",
+ "long float64\n",
+ "sqft_living15 int64\n",
+ "sqft_lot15 int64\n",
+ "above_median_price int64\n",
+ "price_category category\n",
+ "dtype: object\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAIjCAYAAAD1OgEdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB1RklEQVR4nO3deXwTdf7H8ffk7F2gpS3lFpBLQCmK9UBEFBFdXVldFRVBRVdQgfVY1huvxRMPvFYFXeGn4K2oiCh4oSJaBURERItACwV6t0mbzO+PNmlDy1Xapklez8cjD5qZycwnacR58/3OZwzTNE0BAAAAABqVJdgFAAAAAEA4ImwBAAAAQBMgbAEAAABAEyBsAQAAAEATIGwBAAAAQBMgbAEAAABAEyBsAQAAAEATIGwBAAAAQBMgbAEAAABAEyBsAQAAAEATIGwBaJHmzJkjwzD8j6ioKB166KGaNGmScnNzg10eAADAPtmCXQAA7M306dPVtWtXlZeX6/PPP9eTTz6p9957T6tXr1ZMTEywywMAANgjwhaAFm3kyJEaNGiQJOmyyy5TUlKSHnroIb311ls6//zzg1wdAADAnjGNEEBIGTZsmCRp48aNkqSdO3fquuuuU79+/RQXF6eEhASNHDlSP/zwQ53XlpeX6/bbb9ehhx6qqKgotWvXTmeffbY2bNggSfr9998Dpi7u/hg6dKh/X0uXLpVhGHrllVf073//W2lpaYqNjdVf/vIXbdq0qc6xv/76a5166qlKTExUTEyMTjjhBH3xxRf1vsehQ4fWe/zbb7+9zrYvvfSSMjIyFB0drTZt2ui8886r9/h7e2+1eb1ezZw5U3379lVUVJRSU1N1xRVXaNeuXQHbdenSRaeffnqd40yaNKnOPuur/f7776/zmUqSy+XSbbfdpu7du8vpdKpjx4664YYb5HK56v2sahs6dKgOO+ywOssfeOABGYah33//PWB5fn6+Jk+erI4dO8rpdKp79+6aMWOGvF6vfxvf5/bAAw/U2e9hhx1Wp/76GIahSZMm1Vl++umnq0uXLnVqPeaYY5SUlKTo6GhlZGTo1Vdf3ecxpAN//++//76OP/54xcbGKj4+XqNGjdKaNWvq3XeXLl3q/e7MmTPHv83u3zG73a4uXbro+uuvl9vt9m/nmyJcux6v16v+/fvX2ecFF1ygpKQkrV+/fq+vX7BggSwWi55++mn/sksuuaTO57tp0yZFR0fXeb3v/U2ePLnOex8xYoQMw6jzfd+2bZsuvfRSpaamKioqSgMGDNALL7xQ5/Ver1ePPPKI+vXrp6ioKLVt21annnqqvv32W0na6985tf8b8f2ds7/fBwAtAyNbAEKKLxglJSVJkn777Te9+eabOuecc9S1a1fl5ubq6aef1gknnKCffvpJ6enpkiSPx6PTTz9dS5Ys0Xnnnadrr71WRUVFWrx4sVavXq1u3br5j3H++efrtNNOCzjutGnT6q3n7rvvlmEYuvHGG7Vt2zbNnDlTw4cPV1ZWlqKjoyVJH3/8sUaOHKmMjAzddtttslgsmj17toYNG6bPPvtMRx11VJ39dujQQffee68kqbi4WP/4xz/qPfYtt9yic889V5dddpm2b9+uxx57TEOGDNH333+vVq1a1XnNhAkTdPzxx0uSXn/9db3xxhsB66+44grNmTNH48aN0zXXXKONGzfq8ccf1/fff68vvvhCdru93s/hQOTn5/vfW21er1d/+ctf9Pnnn2vChAnq3bu3Vq1apYcffli//PKL3nzzzYM+tk9paalOOOEEbd68WVdccYU6deqkL7/8UtOmTdPWrVs1c+bMRjvWgXjkkUf0l7/8RWPGjJHb7dbLL7+sc845R++++65GjRrVaMf53//+p7Fjx2rEiBGaMWOGSktL9eSTT+q4447T999/XyekSNLhhx+uf/7zn5Kq/rHj1ltvrXffvu+Yy+XSokWL9MADDygqKkp33nnnXutZtWpVneXPP/+8hg0bplGjRunrr79W69at62zzzTffaOzYsZoyZYquuOKKvb7vW2+9VeXl5fWui4qK0ty5c3X//ff7v+d//vmnlixZoqioqIBty8rKNHToUP3666+aNGmSunbtqgULFuiSSy5Rfn6+rr32Wv+2l156qebMmaORI0fqsssuU2VlpT777DN99dVXGjRokP73v//5t/3ss8/0zDPP6OGHH1ZycrIkKTU1da/vCUALZwJACzR79mxTkvnRRx+Z27dvNzdt2mS+/PLLZlJSkhkdHW3++eefpmmaZnl5uenxeAJeu3HjRtPpdJrTp0/3L3v++edNSeZDDz1U51her9f/Oknm/fffX2ebvn37mieccIL/+SeffGJKMtu3b28WFhb6l8+fP9+UZD7yyCP+fffo0cMcMWKE/zimaZqlpaVm165dzZNPPrnOsY455hjzsMMO8z/fvn27Kcm87bbb/Mt+//1302q1mnfffXfAa1etWmXabLY6y9evX29KMl944QX/sttuu82s/b+Bzz77zJRkzp07N+C1H3zwQZ3lnTt3NkeNGlWn9okTJ5q7/69l99pvuOEGMyUlxczIyAj4TP/3v/+ZFovF/OyzzwJe/9RTT5mSzC+++KLO8Wo74YQTzL59+9ZZfv/995uSzI0bN/qX3XnnnWZsbKz5yy+/BGz7r3/9y7RarWZ2drZpmgf2ndgTSebEiRPrLB81apTZuXPngGWlpaUBz91ut3nYYYeZw4YN2+dx9vf9FxUVma1atTIvv/zygO1ycnLMxMTEOstN0zTT09PN008/3f98xYoVpiRz9uzZ/mW+z6r2Mt9rTzvtNP9z33/bvnrKy8vNTp06mSNHjqz39bm5uWaXLl3ME0880XS73QGvz87ONtPS0sy//OUvdf4eGDt2bMDnu3r1atNisfiPU/v70LlzZ/Pkk082k5OTzVdffdW//M477zSPOeaYOt/3mTNnmpLMl156yb/M7XabmZmZZlxcnP/vhI8//tiUZF5zzTV1PtPafx/s6bOpzfd3zoIFC+qsA9ByMY0QQIs2fPhwtW3bVh07dtR5552nuLg4vfHGG2rfvr0kyel0ymKp+qvM4/Fox44diouLU8+ePfXdd9/59/Paa68pOTlZV199dZ1j7D7t7UBcfPHFio+P9z//29/+pnbt2um9996TJGVlZWn9+vW64IILtGPHDuXl5SkvL08lJSU66aST9OmnnwZMW5Oqpjvu/i/pu3v99dfl9Xp17rnn+veZl5entLQ09ejRQ5988knA9r5pXE6nc4/7XLBggRITE3XyyScH7DMjI0NxcXF19llRURGwXV5e3h5HDXw2b96sxx57TLfccovi4uLqHL93797q1atXwD59U0d3P/7BWLBggY4//ni1bt064FjDhw+Xx+PRp59+GrB9aWlpnffq8Xj2+3jl5eV1Xl9RUVFnO99oqCTt2rVLBQUFOv744wO+y3vj8XjqHKe0tDRgm8WLFys/P1/nn39+wHZWq1WDBw+u93Pen++kT3FxsfLy8rR582Y988wzysnJ0UknnbTH7WfNmqUdO3botttuq3d9SkqKFi5cqK+//lpXXXVVwHHOOOMMJScna968ef6/B/Zk2rRpGjhwoM4555x61zscDo0ZM0azZ8/2L/ON8u7uvffeU1paWsB1o3a7Xddcc42Ki4u1bNkySVV/7xiGUe97a+jfO0VFRcrLy1N+fn6DXg+geTGNEECLNmvWLB166KGy2WxKTU1Vz549A06qfNdDPPHEE9q4cWPACbBvqqFUNf2wZ8+estka96+9Hj16BDw3DEPdu3f3Xw/iu9Zk7Nixe9xHQUFBwPSovLy8Ovvd3fr162Wa5h632326n+/EbPeAs/s+CwoKlJKSUu/6bdu2BTz/8MMP1bZt273WubvbbrtN6enpuuKKK+pce7J+/XqtXbt2j/vc/fgHY/369frxxx/3+1i33XZbvSfM+zvF67nnntNzzz1XZ3nnzp0Dnr/77ru66667lJWVFXCd2v6emP/888/7/J34vpO+ELu7hISEgOcej0f5+flKTEzcrxquvvrqgH/UGDdunKZMmVLvtgUFBbrnnns0derUvX6WhYWFKisr07PPPuu/HnP8+PH64Ycf1K5du30G388//1zvvPOOlixZouzs7D1uN27cOGVkZGjr1q365ZdftHXrVp177rm66667Arb7448/1KNHjzoBr3fv3v71UtXfO+np6WrTps1e6zsQ48eP9/8cFxenM844Qw8//DDTDYEWirAFoEU76qij/N0I63PPPffolltu0fjx43XnnXeqTZs2slgsmjx5cp0Ro2Dw1XD//ffr8MMPr3eb2gHI7XZr69atOvnkk/e5X8Mw9P7778tqte51n5KUk5MjSUpLS9vrPlNSUjR37tx61+9+Ej948OA6J6GPP/643nrrrXpfv3btWs2ZM0cvvfRSvdd+eb1e9evXTw899FC9r+/YseMeaz9QXq9XJ598sm644YZ61x966KEBzydMmFBnROTyyy/f7+OdeeaZdZpk3Hzzzf7fi1R1vc5f/vIXDRkyRE888YTatWsnu92u2bNna968eft1nC5duui///1vwLIFCxbomWee8T/3fSf/97//1ft92P0fJLKzs+X1euu9jqs+119/vU455RR5PB6tWbNG06dPl2maASNGPjNmzJDFYtH111+vHTt21Ls/j8ejq666SpmZmfr73//uvx5q9erVevvtt3XRRRfp1ltv3et1djfeeKNGjBihYcOGBTTg2N2AAQM0YMAAvfjii1q7dq1Gjx5dJ3wG26233qrjjz9eFRUVWrlypaZPn678/Hz/aDqAloWwBSCkvfrqqzrxxBPrjBrk5+f7LzCXpG7duunrr79WRUVFozR58KndJU2STNPUr7/+qv79+/uPK1WNFgwfPnyf+/vhhx9UUVGx14Dp269pmuratWudYFCfn376SYZhqGfPnnvd50cffaRjjz02YDrbniQnJ9d5T3trYjFt2jQdfvjh+vvf/77H4//www866aSTDmpq5/7o1q2biouL9+t3IlWNYO6+bWxs7H4fr0OHDnVeP3PmzICw9dprrykqKkqLFi0KmO5ZX0jZk9jY2DrHycrKCnju+06mpKTs1/v3dc3b13fSp0+fPv79jhgxQi6XS//+97919913+xvWSNKWLVv0yCOP6N5771V8fPwew9YTTzyhH3/8UStXrtSAAQO0evVq/fe//9Wzzz6rM844Q3fddZcmT56scePGacCAAXVe/+abb2r58uX7PRVz/Pjxevjhh5WTk6N33nmn3m06d+6sH3/8UV6vN2B06+eff/avl6o+60WLFmnnzp2NNrrVr18//+c7cuRIZWdn64UXXlBlZWWjj9wDOHhcswUgpFmtVpmmGbBswYIF2rx5c8Cy0aNHKy8vT48//nidfez++gPx4osvqqioyP/81Vdf1datWzVy5EhJUkZGhrp166YHHnhAxcXFdV6/ffv2OrVbrdZ626rXdvbZZ8tqteqOO+6oU79pmgEnrpWVlXrttdd01FFH7XUa4bnnniuPx1Nv17jKysqDukZk+fLleuutt/Sf//xnj0Hq3HPP1ebNm+uMzEhV3d9KSkoafPz6jrV8+XItWrSozrr8/HxVVlY22rH2l9VqlWEYAVPifv/990btwihVBaCEhATdc8899V43Vt93slWrVjrhhBMadLyysjJJCmj/Lkl33HGHUlNTdeWVV+7xtbm5ubrllls0adIkf5A65phjAv78xz/+oQEDBuiqq66q89+Cx+PRv//9b11wwQV7HFne3QUXXKDNmzcrJSVlj639TzvtNOXk5OiVV17xL6usrNRjjz2muLg4/2c1evRomaapO+64o84+Dubvndp8ga+p/4ECQMPwTyAAQtrpp5+u6dOna9y4cTrmmGO0atUqzZ07V4ccckjAdhdffLFefPFFTZ06Vd98842OP/54lZSU6KOPPtJVV12lM888s0HHb9OmjY477jiNGzdOubm5mjlzprp37+6fYmaxWPTss89q5MiR6tu3r8aNG6f27dtr8+bN+uSTT5SQkKB33nlHJSUlmjVrlh599FEdeuihWrp0qf8YvpD2448/avny5crMzFS3bt101113adq0afr999911llnKT4+Xhs3btQbb7yhCRMm6LrrrtNHH32kW265RT/++OMe/5Xe54QTTtAVV1yhe++9V1lZWTrllFNkt9u1fv16LViwQI888oj+9re/Nehz+vDDD3XyySfvdSTloosu0vz583XllVfqk08+0bHHHiuPx6Off/5Z8+fP16JFi/Y5ulJcXKwPPvggYNm6deskScuWLZPdblf79u11/fXX6+2339bpp5+uSy65RBkZGSopKdGqVav06quv6vfffw8YGW0Oo0aN0kMPPaRTTz1VF1xwgbZt26ZZs2ape/fu+vHHHxvtOAkJCXryySd10UUXaeDAgTrvvPPUtm1bZWdna+HChTr22GP1+OOPKzc3V48++qgWLFigIUOG6LXXXvPvw3efu+XLl2vgwIH+kVzfMpvN5p9G+Nhjj+mII46oMw3xww8/1Ny5c+VwOPZY63XXXaeYmBhNnz59j9tYrVY98cQTyszM1OzZswOuafrzzz/lcDgOaIpd69attXXrVn/4rc+ECRP09NNP65JLLtHKlSvVpUsXvfrqq/riiy80c+ZMf9OcE088URdddJEeffRRrV+/Xqeeeqq8Xq8+++wznXjiifXef21fsrKyFBcXp8rKSq1cuVIvvviizjzzzHqnEwNoAYLUBREA9srXAnnFihV73a68vNz85z//abZr186Mjo42jz32WHP58uXmCSecUKctd2lpqXnTTTeZXbt2Ne12u5mWlmb+7W9/Mzds2GCaZsNav//f//2fOW3aNDMlJcWMjo42R40aZf7xxx91Xv/999+bZ599tpmUlGQ6nU6zc+fO5rnnnmsuWbIk4Nj7eowdOzZgv6+99pp53HHHmbGxsWZsbKzZq1cvc+LEiea6detM0zTNq6++2hwyZIj5wQcf1Klp99bvPs8884yZkZFhRkdHm/Hx8Wa/fv3MG264wdyyZYt/mwNt/W4Yhrly5cqA5fX9jtxutzljxgyzb9++ptPpNFu3bm1mZGSYd9xxh1lQUFDneLvvb1+fX+224kVFRea0adPM7t27mw6Hw0xOTjaPOeYY84EHHjDdbrdpms3f+v25554ze/ToYTqdTrNXr17m7Nmz9/h7qu/972/re9Os+g6PGDHCTExMNKOiosxu3bqZl1xyifntt9/61+/Pd9LX1n/377DFYjE7dOhgjh071n+rBtOs+W/78MMPD2h/vnvr+KVLl5qSzHnz5gXUvaf26JdffrmZnJxs7tixwzTNqtbvksxrr712n6/f0/d5b+tzc3PNcePGmcnJyabD4TD79etXp229aZpmZWWlef/995u9evUyHQ6H2bZtW3PkyJF1/nvY23szzbq/D5vNZnbu3Nm85pprzF27du2xdgDBZZhmI41jA0AEWbp0qU488UQtWLCgwaM9tf3+++/q2rWrNm7cuMdGBLfffrt+//33vV7gjz3r0qWLbr/9dl1yySXBLiUk+L7jeztNuOSSS/yfKwCgLq7ZAgAAAIAmwDVbANACxMXFacyYMXttYNG/f/+Abm44MCeccIL/ZtjYt9TUVI0ZM2av2xxzzDHNfm0bAIQSphECQAM09jRCAAAQfghbAAAAANAEuGYLAAAAAJoAYQsAAAAAmgANMvaD1+vVli1bFB8fzx3aAQAAgAhmmqaKioqUnp4ui2XvY1eErf2wZcsWdezYMdhlAAAAAGghNm3apA4dOux1G8LWfoiPj5dU9YEmJCQEuRoAAAAAwVJYWKiOHTv6M8LeELb2g2/qYEJCAmELAAAAwH5dXkSDDAAAAABoAoQtAAAAAGgChC0AAAAAaAKELQAAAABoAoQtAAAAAGgChC0AAAAAaAKELQAAAABoAoQtAAAAAGgChC0AAAAAaAKELQAAAABoAoQtAAAAAGgChC0AAAAAaAKELQAAAABoAoQtAAAAAGgChC0AAAAAaAKELQAAAABoAoQtAAAAAGgChC3U4a70auUfu2SaZrBLAQAAAEIWYQt13P7OGo1+8kvN/3ZTsEsBAAAAQhZhCwHyil169ds/JUlvZW0JcjUAAABA6CJsIcDL32TL7fFKkr7euFMFpRVBrggAAAAITbZgF4DmlZ2drby8vHrXVXpNPf/ZNkmS1ZA8XlNzPvxGx3eKVnJysjp16tScpQIAAAAhjbAVQbKzs9Wrd2+VlZbWuz6m13Fqe+a/5CnZpcKflinhyLN01/NvKe+d+xUdE6Of164lcAEAAAD7ibAVQfLy8lRWWqoxN96v1E7d6qxfmmvTDpd0WLsEpR4ySktzpVZ9h+jkPin6vxnXKy8vj7AFAAAA7CfCVgRK7dRNHXr0DVi2rbBcO7I3yWJIx/TvrhiHVV/v3KiyCo+sKd2DVCkAAAAQumiQAUlS1p/5kqTuKXGKc9pkMQx1TY6VJG0t42sCAAAAHCjOoiFXhUe/5BZLkg7v2Mq//JC2VWFrSylfEwAAAOBAMY0Q2lVaIY/XVJzTprSEKP/yTm1iZLUYKvVI9uTOQawQAAAACD0MWUClFZWSpBiHVYZh+JfbrRZ1ahMjSYruflRQagMAAABCFWELKnN7JEnRDmuddYdUX7cV02Nws9YEAAAAhDrCFlRWUR227HXDVpfqsOVod6jKK73NWhcAAAAQyghb2OvIVpzTJqfFlGFYtLnI09ylAQAAACGLsAX/yFZMPSNbkhRvNyVJfxZWNFtNAAAAQKgjbEGlexnZkmqHrcpmqwkAAAAIdYQt1Ewj3MPIVkJ12NpE2AIAAAD2G2ELNQ0y9jCylcDIFgAAAHDACFvY58iWbxphTrFHrkqaZAAAAAD7g7AV4So8XlV6q8LUnka2oiySt7xYXlPamFfSnOUBAAAAIYuwFeF8o1pWw5DDWv/XwTAk945NkqT1ucXNVhsAAAAQyghbEa729VqGYexxu4q8bEnS+m2ELQAAAGB/ELYi3L6u1/KpqB7Z2kDYAgAAAPYLYSvC7asToU/NyFZRk9cEAAAAhAPCVoTb75GtvKqRrY15JarweJu8LgAAACDUEbYiXOl+jmx5irYrymaowmPqjx2lzVEaAAAAENKCHrY2b96sCy+8UElJSYqOjla/fv307bff+tebpqlbb71V7dq1U3R0tIYPH67169cH7GPnzp0aM2aMEhIS1KpVK1166aUqLg68tujHH3/U8ccfr6ioKHXs2FH33Xdfs7y/lm5/R7YkqX28TZL0K1MJAQAAgH0KatjatWuXjj32WNntdr3//vv66aef9OCDD6p169b+be677z49+uijeuqpp/T1118rNjZWI0aMUHl5uX+bMWPGaM2aNVq8eLHeffddffrpp5owYYJ/fWFhoU455RR17txZK1eu1P3336/bb79dzzzzTLO+35bId81WzD5GtiSpY0JV2KL9OwAAALBvtmAefMaMGerYsaNmz57tX9a1a1f/z6ZpaubMmbr55pt15plnSpJefPFFpaam6s0339R5552ntWvX6oMPPtCKFSs0aNAgSdJjjz2m0047TQ888IDS09M1d+5cud1uPf/883I4HOrbt6+ysrL00EMPBYSySOQf2dqPsNXBF7boSAgAAADsU1BHtt5++20NGjRI55xzjlJSUnTEEUfov//9r3/9xo0blZOTo+HDh/uXJSYmavDgwVq+fLkkafny5WrVqpU/aEnS8OHDZbFY9PXXX/u3GTJkiBwOh3+bESNGaN26ddq1a1edulwulwoLCwMe4crfjXA/phF2TCRsAQAAAPsrqGHrt99+05NPPqkePXpo0aJF+sc//qFrrrlGL7zwgiQpJydHkpSamhrwutTUVP+6nJwcpaSkBKy32Wxq06ZNwDb17aP2MWq79957lZiY6H907NixEd5ty3RAI1vV12z9tr1YHq/ZpHUBAAAAoS6oYcvr9WrgwIG65557dMQRR2jChAm6/PLL9dRTTwWzLE2bNk0FBQX+x6ZNm4JaT1Op9Hrlrm7jvj8jWymxVjlsFrkqvfpzFx0JAQAAgL0Jathq166d+vTpE7Csd+/eys6uuoFuWlqaJCk3Nzdgm9zcXP+6tLQ0bdu2LWB9ZWWldu7cGbBNffuofYzanE6nEhISAh7hyDeqZTEkp23fXwWrxVC3tnGSaJIBAAAA7EtQw9axxx6rdevWBSz75Zdf1LlzZ0lVzTLS0tK0ZMkS//rCwkJ9/fXXyszMlCRlZmYqPz9fK1eu9G/z8ccfy+v1avDgwf5tPv30U1VUVPi3Wbx4sXr27BnQ+TDS+K7XirJbZRjGfr2mR0pV2PqF9u8AAADAXgU1bE2ZMkVfffWV7rnnHv3666+aN2+ennnmGU2cOFGSZBiGJk+erLvuuktvv/22Vq1apYsvvljp6ek666yzJFWNhJ166qm6/PLL9c033+iLL77QpEmTdN555yk9PV2SdMEFF8jhcOjSSy/VmjVr9Morr+iRRx7R1KlTg/XWW4QDuV7Lp0tyrCRp086yJqkJAAAACBdBbf1+5JFH6o033tC0adM0ffp0de3aVTNnztSYMWP829xwww0qKSnRhAkTlJ+fr+OOO04ffPCBoqKi/NvMnTtXkyZN0kknnSSLxaLRo0fr0Ucf9a9PTEzUhx9+qIkTJyojI0PJycm69dZbaft+AJ0Ifdq3qvrct+QTtgAAAIC9CWrYkqTTTz9dp59++h7XG4ah6dOna/r06Xvcpk2bNpo3b95ej9O/f3999tlnDa4zHPlGtmIOIGylt4qWRNgCAAAA9iWo0wgRXP6RrQOYRlg7bJkm7d8BAACAPSFsRTD/NVsHMrKVWBW2StweFZZXNkldAAAAQDggbEWwhoxsRTusah1jl8RUQgAAAGBvCFsRrLQB3QilmqmEWwsIWwAAAMCeELYimG9kK8Z+YH1S2lVPJdycX97oNQEAAADhgrAVwRpyny2J9u8AAADA/iBsRSiP15Sr0ivpwBpkSLWmERK2AAAAgD0ibEWo8uophIakKPuBfQ3a+du/M40QAAAA2BPCVoTyNceIsltlGMYBvdY3jXAzI1sAAADAHhG2IlRD2r77+KYR5haWy+PlxsYAAABAfQhbEaohNzT2SYmPktViqNJranuRq7FLAwAAAMICYStCHczIltViKC2BqYQAAADA3hC2ItTBjGxJUnr1dVvc2BgAAACoH2ErQh3MyJZUc90W99oCAAAA6kfYilC+ka2YBo5stUuk/TsAAACwN4StCOWqrApbzgO8x5aPr/07I1sAAABA/QhbEarCU9Wy3W5t2FfAP42Qa7YAAACAehG2IlSF1ytJslkO7IbGPkwjBAAAAPaOsBWhKg9yZKt99cjWzhK3yqubbQAAAACoQdiKUBWeqpGthoathGibYqs7GXLdFgAAAFAXYStC1YxsNWwaoWEYateKqYQAAADAnhC2IpBpHvzIlkSTDAAAAGBvCFsRyCvJrP7Z1sCRLYn27wAAAMDeELYiUKW35ueDGdmq6UhI2AIAAAB2R9iKQNWXa8lqMWQxGj6y5ZtGuLWAa7YAAACA3RG2IlBlddiyN/AeWz7p1dMINzOyBQAAANRhC3YBaH4eb1XIsh3gFMK1a9cGPM8vrpQk/bmzRCtXrpRRzyhZcnKyOnXq1MBKAQAAgNBF2IpA/pGt/WyOUbhzuyTpwgsvDFxhtanzdW/K7ZGOOu5EecuL6rw2OiZGP69dS+ACAABAxCFsRaCasLV/I1tlxYWSpFFX3KSe/TMC1r3zpym319C4e19UosMMWJebvUFzZ1yvvLw8whYAAAAiDmErAnkOMGz5JKV3VocefQOWJez8Q3nFbsWldVaHpNjGKhEAAAAIeTTIiECV/mu2Dq5BhiTFOqvyerGr8qD3BQAAAIQTwlYE8o9sWQ7+1x/rqApbJS7PQe8LAAAACCeErQh0oA0y9iaOkS0AAACgXoStCNTQ1u/1iXVaJUklhC0AAAAgAGErAjXFyFaJm7AFAAAA1EbYikAH2vp9b3wNMrhmCwAAAAhE2IpAHm/Vn40attyV8prmPrYGAAAAIgdhKwJVmo3X+j3GbpUhyTSlMjejWwAAAIAPYSsCNfSmxvWxWAzFOGiSAQAAAOyOsBWBau6zdfAjW1KtGxvTJAMAAADwI2xFoMpGvGZLqtWRkCYZAAAAgB9hKwL5rtlqrLAVy42NAQAAgDoIWxHIN42wMRpkSNzYGAAAAKgPYSsCNeZ9tqTa99oibAEAAAA+hK0IVHOfrcYZ2YpzcM0WAAAAsDvCVqQxLPKKa7YAAACApkbYijCGPcr/c2Nfs1VW4ZHHazbKPgEAAIBQR9iKMBZHVdgyJFmNxglb0XarfLfsKuVeWwAAAIAkwlbE8Y1s2a0WGY0UtgzDqNUkg+u2AAAAAImwFXEMu1NS400h9Injui0AAAAgAGErwlhqjWw1plgH7d8BAACA2ghbEaZmGmHjjmz5mmQwsgUAAABUIWxFGKOpRrZ812zRIAMAAACQRNiKOJYmvmaLBhkAAABAFcJWhPGPbFmaaGSLaYQAAACAJMJWxDEcTdUgg2u2AAAAgNoIWxHG0kQNMnzTCF2VXlV6vI26bwAAACAUBTVs3X777TIMI+DRq1cv//ry8nJNnDhRSUlJiouL0+jRo5Wbmxuwj+zsbI0aNUoxMTFKSUnR9ddfr8rKwNGVpUuXauDAgXI6nerevbvmzJnTHG+vRTJsvmu2GvdX77BZZLNUBbgSN9dtAQAAAEEf2erbt6+2bt3qf3z++ef+dVOmTNE777yjBQsWaNmyZdqyZYvOPvts/3qPx6NRo0bJ7Xbryy+/1AsvvKA5c+bo1ltv9W+zceNGjRo1SieeeKKysrI0efJkXXbZZVq0aFGzvs+WwndT48Ye2TIMw3/dFlMJAQAAAMkW9AJsNqWlpdVZXlBQoOeee07z5s3TsGHDJEmzZ89W79699dVXX+noo4/Whx9+qJ9++kkfffSRUlNTdfjhh+vOO+/UjTfeqNtvv10Oh0NPPfWUunbtqgcffFCS1Lt3b33++ed6+OGHNWLEiGZ9ry2BpYmu2ZKqphIWlFXQJAMAAABQCxjZWr9+vdLT03XIIYdozJgxys7OliStXLlSFRUVGj58uH/bXr16qVOnTlq+fLkkafny5erXr59SU1P924wYMUKFhYVas2aNf5va+/Bt49tHfVwulwoLCwMe4aKp7rMlcWNjAAAAoLaghq3Bgwdrzpw5+uCDD/Tkk09q48aNOv7441VUVKScnBw5HA61atUq4DWpqanKycmRJOXk5AQELd9637q9bVNYWKiysrJ667r33nuVmJjof3Ts2LEx3m6L4AtbjX2fLYn27wAAAEBtQZ1GOHLkSP/P/fv31+DBg9W5c2fNnz9f0dHRQatr2rRpmjp1qv95YWFh2AQu302NG/s+W5IU5+CaLQAAAMAn6NMIa2vVqpUOPfRQ/frrr0pLS5Pb7VZ+fn7ANrm5uf5rvNLS0up0J/Q939c2CQkJewx0TqdTCQkJAY9wYTRR63ep9sgW3QgBAACAFhW2iouLtWHDBrVr104ZGRmy2+1asmSJf/26deuUnZ2tzMxMSVJmZqZWrVqlbdu2+bdZvHixEhIS1KdPH/82tffh28a3j0hTM42wCUa2ohjZAgAAAHyCGrauu+46LVu2TL///ru+/PJL/fWvf5XVatX555+vxMREXXrppZo6dao++eQTrVy5UuPGjVNmZqaOPvpoSdIpp5yiPn366KKLLtIPP/ygRYsW6eabb9bEiRPldFZNl7vyyiv122+/6YYbbtDPP/+sJ554QvPnz9eUKVOC+daDxtJErd+lmhsbF7sqZZpmo+8fAAAACCVBvWbrzz//1Pnnn68dO3aobdu2Ou644/TVV1+pbdu2kqSHH35YFotFo0ePlsvl0ogRI/TEE0/4X2+1WvXuu+/qH//4hzIzMxUbG6uxY8dq+vTp/m26du2qhQsXasqUKXrkkUfUoUMHPfvssxHZ9l1qnm6EHq+p8kpvo+8fAAAACCVBDVsvv/zyXtdHRUVp1qxZmjVr1h636dy5s95777297mfo0KH6/vvvG1RjuGnKsGWzWBRtt6qswqPicqYSAgAAILK1qGu20LS8pum/qbHN0vjTCKWaqYS0fwcAAECkI2xFELen5jqqphjZkrixMQAAAOBD2Iog5ZW1w1bTjmwRtgAAABDpCFsRxFUdtqyGKcNoorBF+3cAAABAEmEropR7fGGr6Y7ByBYAAABQhbAVQXwjWzbCFgAAANDkCFsRxD+N0NJ0Nxz2dyOk9TsAAAAiHGErgvimETbHyFZ5pVce7msMAACACEbYiiDNMY3QYbP47+FV5mm64wAAAAAtHWErgtR0I2y6YxiG4R/dKvM04YEAAACAFo6wFUH80wib8Jotqab9O2ELAAAAkYywFUGaY2RLUq2RraY9DgAAANCSEbYiSHkzXLMlSbG+sFXJyBYAAAAiF2Ergria4abGkhTv60jINEIAAABEMMJWBPGPbDXxNVuxTCMEAAAACFuRxFVZdeOr5rtmi5EtAAAARC7CVgRpjpsaS7VubOyRZPAVAwAAQGTiTDiC+LsRNvFvPcZplWFIpgxZYxKb9mAAAABAC0XYiiA13Qib9poti2Eo1lE1umWNT27SYwEAAAAtFWErgjRXN0JJinVaq44Vn9T0BwMAAABaIMJWBHE10322pJrrtqxxhC0AAABEJsJWBKlp/d70x/KFLRsjWwAAAIhQhK0IUjONsGmv2ZJqjWxxzRYAAAAiFGErQpimWatBRtMfj2mEAAAAiHSErQjh9njlrR7QaurW75IUF+WbRtim6Q8GAAAAtECErQhR5vb4f26Oka3YWtMITbPppy0CAAAALQ1hK0KUVVSFLdNTIUszTiO0OKJVWkHYAgAAQOQhbEWI0uqRLW+Fq1mOZ7daZLdUhaydZZ59bA0AAACEH8JWhPBNIzQrypvtmNHWqrC1o8zbbMcEAAAAWgrCVoQo9Yet5hnZkqRoa9WfOxjZAgAAQAQibEUI/zVbzRq2mEYIAACAyEXYihAuX9iqdDfbMX0jWzuZRggAAIAIRNiKEOWVVYHHrGy+ka0oW/U1W6WMbAEAACDyELYiRLl/ZKui2Y5Z0yCDsAUAAIDIQ9iKEK7qkS1vM45sMY0QAAAAkYywFSGCc81W1chWgcsrdyWBCwAAAJGFsBUhyoMQthyWmuPlFjbf/b0AAACAloCwFSFc/gYZzRe2DEOqLN4pibAFAACAyEPYihDBGNmSJE9RniQph7AFAACACEPYihDlFc0/siVJnqIdkqScAsIWAAAAIgthK0IEa2SrspiwBQAAgMhE2IoQriDc1FhiGiEAAAAiF2ErQvhHtiqCM42QBhkAAACINIStCFHuG9nyNHPYqp5GuJVphAAAAIgwhK0IEYybGktSZfXI1rZCl0zTbNZjAwAAAMFE2IoQ/pGt5p5GWLxLhiS3x6udJc17bAAAACCYCFsRwj+y1czTCOWtVGJU1deMqYQAAACIJIStCOEK0siWJLWJrvqa0SQDAAAAkYSwFSFq7rPVvK3fJSkp2iqJ9u8AAACILIStCOEPW56KZj92m+qwlcs0QgAAAEQQwlaEqJlGGIyRLa7ZAgAAQOQhbEUA0zRrTSMMxjVbTCMEAABA5CFsRYAKjylv9S2ughG2kmKqpxEStgAAABBBCFsRoLzS4//ZG4ywxTRCAAAARCDCVgRwVVRdr2VIUhAbZBSVV6rUXdnsxwcAAACCgbAVAXzXa9mtwTl+jN2iOKdNkpTD6BYAAAAiBGErAriqpxE6rEbQakhNcEqiSQYAAAAiB2ErApRXTyMMZthKS4ySxMgWAAAAIkeLCVv/+c9/ZBiGJk+e7F9WXl6uiRMnKikpSXFxcRo9erRyc3MDXpedna1Ro0YpJiZGKSkpuv7661VZGXhd0NKlSzVw4EA5nU51795dc+bMaYZ31HK0jJGt6rDFyBYAAAAiRIsIWytWrNDTTz+t/v37ByyfMmWK3nnnHS1YsEDLli3Tli1bdPbZZ/vXezwejRo1Sm63W19++aVeeOEFzZkzR7feeqt/m40bN2rUqFE68cQTlZWVpcmTJ+uyyy7TokWLmu39BZtvZMtuCV7Yalc9spXLyBYAAAAiRNDDVnFxscaMGaP//ve/at26tX95QUGBnnvuOT300EMaNmyYMjIyNHv2bH355Zf66quvJEkffvihfvrpJ7300ks6/PDDNXLkSN15552aNWuW3O6qFudPPfWUunbtqgcffFC9e/fWpEmT9Le//U0PP/xwUN5vMLSEka206pEt2r8DAAAgUgQ9bE2cOFGjRo3S8OHDA5avXLlSFRUVAct79eqlTp06afny5ZKk5cuXq1+/fkpNTfVvM2LECBUWFmrNmjX+bXbf94gRI/z7qI/L5VJhYWHAI5T5RracQQxbKdVha1uRK2g1AAAAAM3JFsyDv/zyy/ruu++0YsWKOutycnLkcDjUqlWrgOWpqanKycnxb1M7aPnW+9btbZvCwkKVlZUpOjq6zrHvvfde3XHHHQ1+Xy1NsFu/SzXXbG3jmi0AAABEiKCNbG3atEnXXnut5s6dq6ioqGCVUa9p06apoKDA/9i0aVOwSzoorsrgdyP0tX7fXuyS12sGrQ4AAACguQQtbK1cuVLbtm3TwIEDZbPZZLPZtGzZMj366KOy2WxKTU2V2+1Wfn5+wOtyc3OVlpYmSUpLS6vTndD3fF/bJCQk1DuqJUlOp1MJCQkBj1DmG9kKZthKjnPKMKQKj6ldpe6g1QEAAAA0l6CFrZNOOkmrVq1SVlaW/zFo0CCNGTPG/7PdbteSJUv8r1m3bp2ys7OVmZkpScrMzNSqVau0bds2/zaLFy9WQkKC+vTp49+m9j582/j2EQlawn227FaLkmIdkqTcQq7bAgAAQPgL2jVb8fHxOuywwwKWxcbGKikpyb/80ksv1dSpU9WmTRslJCTo6quvVmZmpo4++mhJ0imnnKI+ffrooosu0n333aecnBzdfPPNmjhxopzOqmlrV155pR5//HHdcMMNGj9+vD7++GPNnz9fCxcubN43HEQtoRuhJLWNj1JesVvbisrVR6E9WggAAADsS9C7Ee7Nww8/rNNPP12jR4/WkCFDlJaWptdff92/3mq16t1335XValVmZqYuvPBCXXzxxZo+fbp/m65du2rhwoVavHixBgwYoAcffFDPPvusRowYEYy3FBQtYWRLqrluaxsjWwAAAIgAQe1GuLulS5cGPI+KitKsWbM0a9asPb6mc+fOeu+99/a636FDh+r7779vjBJDUs01W8GtIzW++sbGdCQEAABABGjRI1toHL5phHZLcEe2UnwjW9xrCwAAABGAsBUBXC1kGqHvxsaMbAEAACASELYiQHn1yJYz2NdsxVeNbOUysgUAAIAIQNiKAL4GGfYWMrK1nZEtAAAARADCVgRoKa3fU2tds+X1mkGtBQAAAGhqhK0I0FJavyfHOWUYUqXX1K5Sd1BrAQAAAJoaYSsCtJTW73arRUmxDklSLvfaAgAAQJgjbEUAV2XLGNmSpBTfvbaKuG4LAAAA4Y2wFQFqRrZaQNiqvm5rOyNbAAAACHOErQjQUroRSlJqPPfaAgAAQGQgbEUAVwu5z5ZU05GQaYQAAAAId7aGvrCkpETLli1Tdna23O7AznLXXHPNQReGxuNqId0IJalt9b22tjGNEAAAAGGuQWHr+++/12mnnabS0lKVlJSoTZs2ysvLU0xMjFJSUghbLYjHa8rtqZ5G2ALGMVPjfSNbhC0AAACEtwadfk+ZMkVnnHGGdu3apejoaH311Vf6448/lJGRoQceeKCxa8RB8E0hlFrGyFaqf2SLaYQAAAAIbw0KW1lZWfrnP/8pi8Uiq9Uql8uljh076r777tO///3vxq4RB8E3hVBqGWHL342wyCWv1wxyNQAAAEDTaVDYstvtsliqXpqSkqLs7GxJUmJiojZt2tR41eGglVePbNmthqyW4Iet5DinDEOq9JraWere9wsAAACAENWga7aOOOIIrVixQj169NAJJ5ygW2+9VXl5efrf//6nww47rLFrxEHwtX132qxBrqSK3WpRUqxTecUubSt0KTnOGeySAAAAgCbRoJGte+65R+3atZMk3X333WrdurX+8Y9/aPv27XrmmWcatUAcHN81W1EtoTtGtZR42r8DAAAg/DVoZGvQoEH+n1NSUvTBBx80WkFoXC1tZEuqutfWT1tpkgEAAIDw1qDhjmHDhik/P7+RS0FTKK+ovqFxCxrZSuVeWwAAAIgADToDX7p0aZ0bGaNlclVWjWxFtaCRLaYRAgAAIBI0eLjDMILf2Q775hvZalHXbFWPbOUysgUAAIAw1qBrtiTpr3/9qxwOR73rPv744wYXhMbln0bYAke2thURtgAAABC+Ghy2MjMzFRcX15i1oAn4pxEGcWRr7dq1Ac937ayagvpnXqG+++67el+TnJysTp06NXltAAAAQFNpUNgyDEPXX3+9UlJSGrseNDKXfxph849sFe7cLkm68MILA5Zb45LUYeILyit2KyNjkCSzzmujY2L089q1BC4AAACErAaFLdOse3KMlqmm9btF9YWaplRWXChJGnXFTerZP8O/3GtKb2wyZVhtuurR1xS1Ww7Mzd6guTOuV15eHmELAAAAIatBYeu2225jCmGIqLmpsVVSZVBqSErvrA49+gYsi8n9TaVujxLad1NKfFRQ6gIAAACaUoPDliRt375d69atkyT17NlTbdu2bbzK0Ch8I1vBDFv1iXPaVOr2qMTlkeKDXQ0AAADQ+BrUNaG0tFTjx49Xenq6hgwZoiFDhig9PV2XXnqpSktLG7tGHISWeFNjqSpsSVJxecsJgAAAAEBjatAZ+JQpU7Rs2TK9/fbbys/PV35+vt566y0tW7ZM//znPxu7RhyE8sqW1/pdqhW2XIQtAAAAhKcGTSN87bXX9Oqrr2ro0KH+Zaeddpqio6N17rnn6sknn2ys+nCQXBXBb/1en7ioqq9ekasiyJUAAAAATaPB0whTU1PrLE9JSWEaYQtT7rvPFiNbAAAA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aOrUqbrtttv03XffacCAARoxYoS2bdsW7NLCUklJiQYMGKBZs2YFu5SIsGzZMk2cOFFfffWVFi9erIqKCp1yyikqKSkJdmlhq0OHDvrPf/6jlStX6ttvv9WwYcN05plnas2aNcEuLeytWLFCTz/9tPr37x/sUsJa3759tXXrVv/j888/D3ZJYW3Xrl069thjZbfb9f777+unn37Sgw8+qNatWwe7tLC0YsWKgO/34sWLJUnnnHNOkCsLTzNmzNCTTz6pxx9/XGvXrtWMGTN033336bHHHmvwPmn93sIMHjxYRx55pB5//HFJktfrVceOHXX11VfrX//6V5CrC2+GYeiNN97QWWedFexSIsb27duVkpKiZcuWaciQIcEuJ2K0adNG999/vy699NJglxK2iouLNXDgQD3xxBO66667dPjhh2vmzJnBLivs3H777XrzzTeVlZUV7FIixr/+9S998cUX+uyzz4JdSkSaPHmy3n33Xa1fv16GYQS7nLBz+umnKzU1Vc8995x/2ejRoxUdHa2XXnqpQftkZKsFcbvdWrlypYYPH+5fZrFYNHz4cC1fvjyIlQFNo6CgQFLVyT+ansfj0csvv6ySkhJlZmYGu5ywNnHiRI0aNSrg73M0jfXr1ys9PV2HHHKIxowZo+zs7GCXFNbefvttDRo0SOecc45SUlJ0xBFH6L///W+wy4oIbrdbL730ksaPH0/QaiLHHHOMlixZol9++UWS9MMPP+jzzz/XyJEjG7xPW2MVh4OXl5cnj8ej1NTUgOWpqan6+eefg1QV0DS8Xq8mT56sY489Vocddliwywlrq1atUmZmpsrLyxUXF6c33nhDffr0CXZZYevll1/Wd999pxUrVgS7lLA3ePBgzZkzRz179tTWrVt1xx136Pjjj9fq1asVHx8f7PLC0m+//aYnn3xSU6dO1b///W+tWLFC11xzjRwOh8aOHRvs8sLam2++qfz8fF1yySXBLiVs/etf/1JhYaF69eolq9Uqj8eju+++W2PGjGnwPglbAIJi4sSJWr16NddXNIOePXsqKytLBQUFevXVVzV27FgtW7aMwNUENm3apGuvvVaLFy9WVFRUsMsJe7X/tbl///4aPHiwOnfurPnz5zNNtol4vV4NGjRI99xzjyTpiCOO0OrVq/XUU08RtprYc889p5EjRyo9PT3YpYSt+fPna+7cuZo3b5769u2rrKwsTZ48Wenp6Q3+fhO2WpDk5GRZrVbl5uYGLM/NzVVaWlqQqgIa36RJk/Tuu+/q008/VYcOHYJdTthzOBzq3r27JCkjI0MrVqzQI488oqeffjrIlYWflStXatu2bRo4cKB/mcfj0aeffqrHH39cLpdLVqs1iBWGt1atWunQQw/Vr7/+GuxSwla7du3q/ENN79699dprrwWposjwxx9/6KOPPtLrr78e7FLC2vXXX69//etfOu+88yRJ/fr10x9//KF77723wWGLa7ZaEIfDoYyMDC1ZssS/zOv1asmSJVxfgbBgmqYmTZqkN954Qx9//LG6du0a7JIiktfrlcvlCnYZYemkk07SqlWrlJWV5X8MGjRIY8aMUVZWFkGriRUXF2vDhg1q165dsEsJW8cee2ydW3b88ssv6ty5c5AqigyzZ89WSkqKRo0aFexSwlppaakslsB4ZLVa5fV6G7xPRrZamKlTp2rs2LEaNGiQjjrqKM2cOVMlJSUaN25csEsLS8XFxQH/Arpx40ZlZWWpTZs26tSpUxArC08TJ07UvHnz9NZbbyk+Pl45OTmSpMTEREVHRwe5uvA0bdo0jRw5Up06dVJRUZHmzZunpUuXatGiRcEuLSzFx8fXuQYxNjZWSUlJXJvYBK677jqdccYZ6ty5s7Zs2aLbbrtNVqtV559/frBLC1tTpkzRMccco3vuuUfnnnuuvvnmGz3zzDN65plngl1a2PJ6vZo9e7bGjh0rm41T96Z0xhln6O6771anTp3Ut29fff/993rooYc0fvz4hu/URIvz2GOPmZ06dTIdDod51FFHmV999VWwSwpbn3zyiSmpzmPs2LHBLi0s1fdZSzJnz54d7NLC1vjx483OnTubDofDbNu2rXnSSSeZH374YbDLiignnHCCee211wa7jLD097//3WzXrp3pcDjM9u3bm3//+9/NX3/9Ndhlhb133nnHPOyww0yn02n26tXLfOaZZ4JdUlhbtGiRKclct25dsEsJe4WFhea1115rdurUyYyKijIPOeQQ86abbjJdLleD98l9tgAAAACgCXDNFgAAAAA0AcIWAAAAADQBwhYAAAAANAHCFgAAAAA0AcIWAAAAADQBwhYAAAAANAHCFgAAAAA0AcIWAAAAgLDy6aef6owzzlB6eroMw9Cbb755wPswTVMPPPCADj30UDmdTrVv31533333Ae3DdsBHBQAAAIAWrKSkRAMGDND48eN19tlnN2gf1157rT788EM98MAD6tevn3bu3KmdO3ce0D4M0zTNBh0dAIAQc8kllyg/P7/Ov3AuXbpUJ554onbt2qVWrVoFpTYAQNMwDENvvPGGzjrrLP8yl8ulm266Sf/3f/+n/Px8HXbYYZoxY4aGDh0qSVq7dq369++v1atXq2fPng0+NtMIAQAAAESUSZMmafny5Xr55Zf1448/6pxzztGpp56q9evXS5LeeecdHXLIIXr33XfVtWtXdenSRZdddtkBj2wRtgAA2E1+fr4uu+wytW3bVgkJCRo2bJh++OEH//rbb79dhx9+eMBrli5dKsMwlJ+fL0nasWOHzj//fLVv314xMTHq16+f/u///q8Z3wUAoD7Z2dmaPXu2FixYoOOPP17dunXTddddp+OOO06zZ8+WJP3222/6448/tGDBAr344ouaM2eOVq5cqb/97W8HdCyu2QIAYDfnnHOOoqOj9f777ysxMVFPP/20TjrpJP3yyy9q06bNfu2jvLxcGRkZuvHGG5WQkKCFCxfqoosuUrdu3XTUUUc18TsAAOzJqlWr5PF4dOihhwYsd7lcSkpKkiR5vV65XC69+OKL/u2ee+45ZWRkaN26dfs9tZCwBQBALZ9//rm++eYbbdu2TU6nU5L0wAMP6M0339Srr76qCRMm7Nd+2rdvr+uuu87//Oqrr9aiRYs0f/58whYABFFxcbGsVqtWrlwpq9UasC4uLk6S1K5dO9lstoBA1rt3b0lVI2OELQAAGuCHH35QcXGx/183fcrKyrRhwwb/81WrVvn/pyxJHo8nYHuPx6N77rlH8+fP1+bNm+V2u+VyuRQTE9O0bwAAsFdHHHGEPB6Ptm3bpuOPP77ebY499lhVVlZqw4YN6tatmyTpl19+kSR17tx5v49F2AIAoJbi4mK1a9dOS5curbOudqfCnj176u233/Y///rrr3XhhRf6n99///165JFHNHPmTPXr10+xsbGaPHmy3G53U5YPAFDV3+W//vqr//nGjRuVlZWlNm3a6NBDD9WYMWN08cUX68EHH9QRRxyh7du3a8mSJerfv79GjRql4cOHa+DAgRo/frxmzpwpr9eriRMn6uSTT64z/XBvCFsAANQycOBA5eTkyGazqUuXLnvczuFwqHv37v7nf/75Z8D6L774QmeeeaY/gHm9Xv3yyy/q06dPk9QNAKjx7bff6sQTT/Q/nzp1qiRp7NixmjNnjmbPnq277rpL//znP7V582YlJyfr6KOP1umnny5Jslgseuedd3T11VdryJAhio2N1ciRI/Xggw8eUB2ELQBARCkoKFBWVlbAMt+/fq5atUpHH320MjMzddZZZ+m+++7ToYceqi1btmjhwoX661//qkGDBu3XcXr06KFXX31VX375pVq3bq2HHnpIubm5hC0AaAZDhw7V3m4nbLfbdccdd+iOO+7Y4zbp6el67bXXDqoOwhYAIKIsXbpURxxxRL3rhgwZok8++UTvvfeebrrpJo0bN07bt29XWlqahgwZotTU1P0+zs0336zffvtNI0aMUExMjCZMmKCzzjpLBQUFjfVWAAAtnGHuLfIBABBBunTpojlz5mjo0KHBLgUAEAa4qTEAANX69OkT0GEQAICDwcgWAAAAADQBRrYAAAAAoAkQtgAAAACgCRC2AAAAAKAJELYAAAAAoAkQtgAAAACgCRC2AAAAAKAJELYAAAAAoAkQtgAAAACgCRC2AAAAAKAJ/D+7ECSVstnhpQAAAABJRU5ErkJggg==",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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HixERUU53Vef2u77xhtvCAAEk8lk2/bKK68IrVq1Eg4ePOgQ+8ILLwhKpVI4fvy4IAj//IzfeOONGo8bFRXl8Jr99NNPAgBh5cqVteY4ZcoUoWvXrnUex5kzZwRfX19h2LBhgtlstm1///33BQDCxx9/XOM+zt4L9bF/z/7vf/8TvL29heeee84hpiHvA0EQhOrqagGAkJycbNtmfe/Z//xd/T1ITk4WANR4L135HnL19fy///s/AYDw9NNP1/h5OHu/Osvdyvp6//TTT7ZtFRUVgpeXl5CQkGDb5uxvSE5OjgBA+PTTT2vss+dqvgCExMTEGjGjRo2q8X67Mp+qqiqhT58+wh133FHj/osXLxYAOPxuX/m3ril+l4io6UhmOpzBYMCYMWMQEREBhUKBb775psGPIQgCFixYgJ49e8LPzw+dOnWq8UkPkRRlZmZi/fr1yM7OxvTp05Gdne0wOgEAAQEBtu9LS0tx7tw53HbbbSgvL8f+/fsdYqurq3Hu3DmcPXsWOTk5WLVqFTQaje0T1CudPHkS7733HpKSktC6dWuHfV999RXatWuHp556qsb9apvmtHPnTqxcuRLz5s1zmNJn75FHHsH+/fttU2m++uorBAcH484773SI27FjB86cOYOEhAT4+/vbto8aNQq9e/fG//73PwDA2bNnYTAYMG3aNIcRtLryrI/ZbMa5c+dw7tw5VFVVNeox6rNy5UrcdtttCA0NtT3XuXPnMHToUJjNZhgMBof48vJyh7hz587VmBJpZX2f2E9da4gNGzagqqoKzzzzjMPr+Pjjj6NNmza2n727bNu2DePHj8cDDzxQY3TT1feBlfX18vPzc/n56/o96NChAwDgr7/+qvMxXH09v/rqKygUCuj1+hqP0dj3a3FxMc6dO4fjx4/j9ddfh8ViwR133GHbb/83pLq6Gn///Te6d++OkJAQ7Nq1q87Hbop87fM5f/48iouLcdtttznNxZXXsyl/l4jI/SQzHa6srAw33HADpk2bZpt60FAzZ87Ejz/+iAULFqBv374oLCxEYWGhmzMlanliYmJs3z/00ENQq9WYM2cOpk+fjtjYWABAXl4edDod/u///g8lJSUO9y8uLna4/dtvv6F9+/a22z169MA333xT68mKXq9HREQEnnjiiRpz8o8cOYJevXrB29v1P1cvvPACbrvtNowePRpPPvmk05j27dtj1KhR+Pjjj3HjjTfi448/xpQpU2oUTX/++ScAoFevXjUeo3fv3vjll18AAEePHgWARl/H48z+/fttP0cvLy90794der3eYYrW1Tp06BCMRqPD62XvzJkzDrf1er3TE9Erp0YBwLRp02zft27dGmPGjMFbb73lNNaZ2n72vr6+UKvVtv3ucPLkSYwaNQplZWX4+++/a7xXXX0fWFkLvyuLmbrU9XsQExMDhUKB2bNnIyUlxfa4V17n4+rreeTIEURERCAsLMzl/Opz77332r738vKCTqfDAw88YNt28eJFzJs3D5mZmTh58qTD9UJX/g25UlPk+9133yElJQW5ubmorKy0bXf2d8qV17Mpf5eIyP0kUwSNGDECI0aMqHV/ZWUl5syZg88//xxFRUXo06cP5s+fb7sA8Y8//kBGRgb27t1r+08uMjKyOVInanEefPBBzJkzB1u3bkVsbCyKioowePBgtGnTBi+//DK6desGf39/7Nq1C88//3yNEzGNRoOFCxcCuDxC8u6772LIkCHYtWsXVCqVQ+wff/yBpUuXIisrq9ZGDQ3x448/YsOGDcjJyak3dtq0aZg8eTKeeuopGAwGLFmyBD///PNV5+Au1157re26pr///hvvvvsuHnnkEajVatxyyy1ueQ6LxYK77roL//3vf53u79mzp8PtGTNmYNy4cQ7bHn/8caf3nTt3Lm677TZUV1dj586dePnll1FUVIS1a9e6JXd3Onz4MPr374+33noLjzzyCD755BNMmTKl0Y9XUFAAADXe77Wp7/fghhtugF6vR3JyMrKzs2t9nIa+nu60YMEC3HDDDaiursb27duRkpICb29v24n+U089hczMTDzzzDOIiYlBcHAwFAoFJk6c2Ozrkv3888+45557EBcXh/T0dISHh8PHxweZmZk1mmEAl1/P1q1bo1WrVrU+ZlP+LhGR+0mmCKrPk08+iX379mH58uWIiIjAqlWrcPfdd2PPnj3o0aMH1qxZA7Vaje+++w533303BEHA0KFD8frrr7v1kyciT3Dx4kUAl5sHAJe7P/3999/4+uuvERcXZ4szmUxO7x8aGoqhQ4fabg8ZMgQRERHIzMzE7NmzHWJnz56Nfv36YcKECU4fq1u3bti6dWut7bztCYKAF154Affdd59LRcKIESPg7++PiRMn4tZbb0W3bt1qFEFdu3YFABw4cMBhao91m3W/Wq0GgBpd8K5Gq1atHH6Ot912Gzp16oQff/zRbUVQt27dcOHCBYfnqUuPHj1qxNZ2Yti3b19b7IgRI3D8+HF88sknuHTpkkvPZf+zt/58gctTk0wmk8s5uyI8PBxr165Fx44dsXr1ajz33HMYOXKk7VN9V98HVvv27QPgeqOL+n4PgMsjBzNmzMD+/ftt06YefvhhhxhXX89u3bph3bp1KCwsdNv/cQMGDLB9sDhixAicPHkS8+fPR1JSEry8vPDll19iypQptg9IgMudH12ZLunufL/66iv4+/tj3bp1DlPcMjMzncbv27ev3teyKX+XiMj9JHNNUF2OHz+OzMxM23zdbt264d///jduvfVW2x+8o0eP4s8//8TKlSvx6aefYunSpdi5cycefPBBkbMnajq1fSK/ePFiKBQK28metRiyn75SVVWF9PR0l57HWlTZTzkBLrekXr16NV577bVap8o98MADOHfuHN5///0a+4Qrljlbvnw5jEajy921vL29MXnyZBiNRoepW/ZuvPFGdOjQAR988IFD/t9//z3++OMPWxep9u3bIy4uDh9//HGNLnhX5tlY1k/Lra+HO4wfPx45OTlYt25djX3WroHuYrFY4OXl5fI1HEOHDoWvry/effddh5/hRx99hOLi4lo7eDVGz549bdOQ3nvvPVgsFsycOdO239X3gdWKFSsQHh7uUhHkyu+BVXh4OG6//XYMHToUQ4cOdbg+CXD99XzggQcgCAKSk5NrxLnr/Xrx4kVcunTJ9pxKpbLGY7/33nsuXQfj7nyVSiUUCoXDcx87dszp9cQnTpzAr7/+WqP4vVJz/i4R0dWTxUjQnj17YDabawxFV1ZWom3btgAu/+dcWVmJTz/91Bb30UcfYcCAAThw4IDTeeBEnu6hhx5C7969cd9996Fjx444e/Ysvv/+e/z000+YM2cO+vbtCwAYNGgQQkNDMWXKFDz99NNQKBRYtmxZrScfp0+fRlZWFoDLLYs//PBDeHt7Y/To0Q5xP/74I+666646PzmdPHkyPv30U8yaNQvbtm3DbbfdhrKyMmzYsAEJCQkYO3asw+M9/vjjDfp9feWVV/Cf//wHoaGhTvf7+Phg/vz5ePTRRzF48GBMmjTJ1hr52muvdWix/e677+LWW29F//79MWPGDERGRuLYsWP43//+h9zcXJdzsrpw4QJ++OEHAEBhYSHeffdd+Pj4uHTyb39fqwMHDgAANm/eDB8fH3Tq1An/+c9/8O2332L06NGYOnUqBgwYgLKyMuzZswdffvkljh07VmtDi/rk5uaidevWuHTpEnbu3IlPP/0UY8eOdbmIa9++PWbPno3k5GTcfffduOeee3DgwAGkp6fjpptuqjEK4i4qlQpvvPEGHnvsMTz88MMYOXKky++DHTt2ICkpCT/88AM++OADlwo+V34PXOXq63n77bfjkUcewbvvvotDhw7h7rvvhsViwc8//4zbb7+91mvp6rJ+/Xr89ddftulw2dnZuOeee+Dr6wsAGD16NJYtW4bg4GBcf/31yMnJwYYNG2z/D9fF3fmOGjUKb775Ju6++2489NBDOHPmDNLS0tC9e3cYjUZbXEZGBubNm4fAwEA8/fTTdT5mU/4uEVETEKMlXVMDIKxatcp2e/ny5YJSqRT2798vHDp0yOErPz9fEARBmDt3ruDt7e3wOOXl5QIA4ccff2zO9ImaTUZGhjBy5EghIiJC8Pb2FkJCQoThw4cLa9eurRH766+/CrfccosQEBAgRERECP/973+FdevW1WiNO3jwYId22yEhIUJsbGyNxwQgKBQKYefOnQ7bnbXYLi8vF+bMmSNERkYKPj4+gkqlEh588EHhyJEjgiD803I2ICBAOHnypMN9r2whbG31a22BfaXa9q9YsUKIjo4W/Pz8hLCwMEGr1Qp//fVXjfvv3btXuO+++4SQkBDB399f6NWrl5CUlOT0ueprke3s5/j99987ja/rvs6+7FtIl5aWCrNnzxa6d+8u+Pr6Cu3atRMGDRokLFiwQKiqqhIEoXEtsq1f3t7eQteuXYWnn35aOH/+vCAIrrXItnr//feF3r17Cz4+PkLHjh2F+Ph42+Nc6WpbZNu74447hC5dugilpaW2bfW9D+bPny/cdNNNQnZ2do3Hq61Ftqu/B844ew+58noKgiBcunRJeOONN4TevXsLvr6+Qvv27YURI0bUyKW23K1ceb0FQRDOnz8vPProo0K7du2E1q1bC8OHDxf2799f5++BPVfyRQNaZH/00UdCjx49BD8/P6F3795CZmamoNfrBftTo5tvvlkYN26csH///hqP6ew1cvfvEhE1HYUguGncuwVRKBRYtWqVrVPNwYMH0atXLxgMhloXz/vxxx8xfPhwHD582Lb44u+//45+/frhwIEDTXoxKRFRc7r22mvx0ksvYerUqWKnQkREJArJTIe7cOECDh8+bLttMpmQm5uLsLAw9OzZE1qtFpMnT8bChQsRHR2Ns2fPYuPGjdBoNBg1ahSGDh2K/v37Y9q0aXj77bdhsViQmJiIu+66iwUQEREREZGESKYxwo4dOxAdHY3o6GgAwKxZsxAdHY25c+cCuNzxZfLkyXjuuefQq1cv3Hvvvdi+fbttUUMvLy+sWbMG7dq1Q1xcHEaNGoXrrrsOy5cvF+2YiIiawuDBg9GpUyex0yAiIhKNJKfDERERERER1UYyI0FERERERESuYBFERERERESy4tGNESwWC06dOoWgoCCXF98jIiIiIiLpEQQBpaWliIiIgJdX3WM9ohZBZrMZL730ErKyslBQUICIiAhMnToVOp3OpaLm1KlT6Ny5czNkSkREREREnuDEiRO45ppr6owRtQiaP38+MjIy8MknnyAqKgo7duzAo48+iuDg4HpXZgaAoKAgAJcPtE2bNk2dLhERERERtVAlJSXo3LmzrUaoi6hF0G+//YaxY8di1KhRAC4v4Pf5559j27ZtLt3fOlrUpk0bFkFEREREROTSjDJRGyMMGjQIGzduxMGDBwEAv//+O3755ReMGDHCaXxlZSVKSkocvoiIiIiIiBpC1JGgF154ASUlJejduzeUSiXMZjNSU1Oh1Wqdxs+bNw/JycnNnCUREREREUmJqCNBX3zxBbKzs/HZZ59h165d+OSTT7BgwQJ88sknTuNnz56N4uJi29eJEyeaOWMiIiIiIvJ0CkEQBLGevHPnznjhhReQmJho25aSkoKsrCzs37+/3vuXlJQgODgYxcXFvCaIiIiIiEjGGlIbiDoSVF5eXqOHt1KphMViESkjIiIiIiKSOlGvCRozZgxSU1PRpUsXREVFYffu3XjzzTcxbdo0MdMiIiIiIiIJE3U6XGlpKZKSkrBq1SqcOXMGERERmDRpEubOnQtfX99678/pcEREREREBDSsNhC1CLpaLIKIiIiIiAjwoGuCiIiIiIiImhuLICIiIiIikhUWQUREREREJCssgoiIiIiISFZYBBERERERkayIuk4QERHR1TKbzTAajSgsLERYWBg0Gg2USqXYaRERUQvGIoiIiDyWwWBAeno6CgoKbNtUKhUSEhIQFxcnYmZERNSScTocERF5JIPBAL1eD7VajbS0NKxduxZpaWlQq9XQ6/UwGAxip0hERC0UF0slIiKPYzabodVqoVarkZKSAi+vfz7Ts1gs0Ol0MJlMyMrK4tQ4IiKZ4GKpREQkaUajEQUFBdBqtQ4FEAB4eXlBq9UiPz8fRqNRpAyJiKglYxFEREQep7CwEAAQGRnpdL91uzWOiIjIHosgIiLyOGFhYQAAk8nkdL91uzWOiIjIHosgIiLyOBqNBiqVCtnZ2bBYLA77LBYLsrOzER4eDo1GI1KGRETUkrEIIiIij6NUKpGQkICcnBzodDrk5eWhvLwceXl50Ol0yMnJQXx8PJsiEBGRU+wOR0REHsvZOkHh4eGIj4/nOkFERDLTkNqARRAREXk0s9kMo9GIwsJChIWFQaPRcASIiEiGGlIbeDdTTkRERE1CqVQiOjpa7DSIiMiD8JogIiIiIiKSFRZBREREREQkKyyCiIiIiIhIVlgEERERERGRrLAIIiIiIiIiWWERREREREREssIiiIiIiIiIZIVFEBERERERyQqLICIiIiIikhUWQUREREREJCssgoiIiIiISFZYBBERERERkaywCCIiIiIiIllhEURERERERLLCIoiIiIiIiGSFRRAREREREckKiyAiIiIiIpIVFkFERERERCQrLIKIiIiIiEhWWAQREREREZGssAgiIiIiIiJZYRFERERERESywiKIiIiIiIhkxVvsBIiIyL3MZjOMRiMKCwsRFhYGjUYDpVIpdlpEREQtBosgIiIJMRgMSE9PR0FBgW2bSqVCQkIC4uLiRMyMiIio5eB0OCIiiTAYDNDr9VCr1UhLS8PatWuRlpYGtVoNvV4Pg8EgdopEREQtgkIQBEHsJBqrpKQEwcHBKC4uRps2bcROh4hINGazGVqtFmq1GikpKfDy+uczLovFAp1OB5PJhKysLE6NIyIiSWpIbSDqSNC1114LhUJR4ysxMVHMtIiIPI7RaERBQQG0Wq1DAQQAXl5e0Gq1yM/Ph9FoFClDIiKilkPUa4K2b98Os9lsu713717cddddGDdunIhZERF5nsLCQgBAZGSk0/3W7dY4IiIiORN1JKh9+/ZQqVS2r++++w7dunXD4MGDxUyLiMjjhIWFAQBMJpPT/dbt1jgiIiI5azGNEaqqqpCVlYVp06ZBoVA4jamsrERJSYnDFxERARqNBiqVCtnZ2bBYLA77LBYLsrOzER4eDo1GI1KGRERELUeLKYK++eYbFBUVYerUqbXGzJs3D8HBwbavzp07N1+CREQtmFKpREJCAnJycqDT6ZCXl4fy8nLk5eVBp9MhJycH8fHxbIpARESEFtQdbvjw4fD19cWaNWtqjamsrERlZaXtdklJCTp37szucERE/5+zdYLCw8MRHx/PdYKIiEjSGtIdrkUslvrnn39iw4YN+Prrr+uM8/Pzg5+fXzNlRUTkeeLi4hAbGwuj0YjCwkKEhYVBo9FIegTIbDbL6niJiOjqtYgiKDMzEx06dMCoUaPEToWIyOMplUpER0eLnUazcDbypVKpkJCQwJEvIiKqlejXBFksFmRmZmLKlCnw9m4RNRkREXkAg8EAvV4PtVqNtLQ0rF27FmlpaVCr1dDr9TAYDGKnSERELZTo1wT9+OOPGD58OA4cOICePXs26L4NmfdHRETSYTabodVqoVarkZKS4rBArMVigU6ng8lkQlZWFqfGERHJRENqA9FHgoYNGwZBEBpcABERkXwZjUYUFBRAq9U6FEAA4OXlBa1Wi/z8fBiNRpEyJCKilkz0IoiIiKihCgsLAQCRkZFO91u3W+OIiIjssQgiIiKPExYWBgAwmUxO91u3W+OIiIjssQgiIiKPo9FooFKpkJ2dDYvF4rDPYrEgOzsb4eHh0Gg0ImVIREQtGYsgIiLyOEqlEgkJCcjJyYFOp0NeXh7Ky8uRl5cHnU6HnJwcxMfHsykCERE5JXp3uKvB7nBERPLmbJ2g8PBwxMfHc50gIiKZaUhtwCKIiIg8mtlshtFoRGFhIcLCwqDRaDgCREQkQw2pDbg6KREReTSlUono6Gix0yAiIg/Ca4KIiIiIiEhWWAQREREREZGssAgiIiIiIiJZYRFERERERESywiKIiIiIiIhkhUUQERERERHJCosgIiIiIiKSFRZBREREREQkKyyCiIiIiIhIVlgEERERERGRrLAIIiIiIiIiWWERREREREREssIiiIiIiIiIZIVFEBERERERyQqLICIiIiIikhUWQUREREREJCssgoiIiIiISFZYBBERERERkaywCCIiIiIiIllhEURERERERLLCIoiIiIiIiGSFRRAREREREckKiyAiIiIiIpIVFkFERERERCQr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xM0334y3334bZWVlePTRR8VOrUlcuHDB4dNjk8mE3NxchIWFoUuXLiJm5n6JiYn47LPPsHr1agQFBdnmIQcHByMgIEDk7Nxr9uzZGDFiBLp06YLS0lJ89tln2LRpE9atWyd2ak0iKCioxrVdrVq1Qtu2bSV5zde///1vjBkzBl27dsWpU6eg1+uhVCoxadIksVNzu2effRaDBg3Cq6++ivHjx2Pbtm1YtGgRFi1aJHZqTcZisSAzMxNTpkyBt7d0/wsfM2YMUlNT0aVLF0RFRWH37t148803MW3aNLFTazLW9sG9evXC4cOH8Z///Ae9e/eWxDlGfecTzzzzDFJSUtCjRw9ERkYiKSkJERERuPfee8VLupHqO9bCwkIcP34cp06dAgDbBzkqlcojR77qOqc4evQoVqxYgWHDhqF9+/b466+/8NprryEgIAAjR44UO3W2yG6o9957T+jSpYvg6+sr3HzzzcKWLVvETqnJ/PTTTwKAGl9TpkwROzW3c3acAITMzEyxU3O7adOmCV27dhV8fX2F9u3bC3feeafw448/ip1Ws5Jyi+wJEyYI4eHhgq+vr9CpUydhwoQJLaIVaVNZs2aN0KdPH8HPz0/o3bu3sGjRIrFTalLr1q0TAAgHDhwQO5UmVVJSIsycOVPo0qWL4O/vL6jVamHOnDlCZWWl2Kk1mRUrVghqtVrw9fUVVCqVkJiYKBQVFYmdllvUdz5hsViEpKQkoWPHjoKfn59w5513eux7vL5jzczMdLpfr9eLmndj1XVOcfLkSWHEiBFChw4dBB8fH+Gaa64RHnroIWH//v0iZ32ZQhAkvPwyERERERHRFXhNEBERERERyQqLICIiIiIikhUWQUREREREJCssgoiIiIiISFZYBBERERERkaywCCIiIiIiIllhEURERERERLLCIoiIiIiIiGSFRRAREREREckKiyAiIg8zdepU3HvvvQ7bzp49iz59+mDgwIEoLi4WJzEiIiIPwSKIiMjDnT17FnfccQcCAgLw448/Ijg4WOyUiIiIWjQWQUREHuzcuXO488474efnh/Xr1zsUQMePH8fYsWPRunVrtGnTBuPHj8fp06cd7n/s2DEoFIoaX0VFRQCAl156Cf369bPFV1VVoXv37g4xzkamFAoFvvnmG9vtEydOYPz48QgJCUFYWBjGjh2LY8eOOdzn448/RlRUFPz8/BAeHo4nn3wSAHDttdc6zVGhUGDp0qW257N+tWnTBnfddReOHDlie+zz589j8uTJCA0NRWBgIEaMGIFDhw7V+bMtKirCE088gY4dO8Lf3x99+vTBd999BwBYunRprTnl5uYCAMxmM6ZPn47IyEgEBASgV69eeOedd2o8z6ZNm2o8RkhIiEPMkiVLcN1118Hf3x+9e/dGenq6bZ/1NbQ+r9W1116Lt99+u85jJCKSKxZBREQe6u+//8bQoUPh7e2N9evXO5w4WywWjB07FoWFhdi8eTPWr1+Po0ePYsKECQ6PIQgCAGDDhg3Iz8/HV199Vedzvv/++zUKqfpUV1dj+PDhCAoKws8//4xff/0VrVu3xt13342qqioAQEZGBhITEzFjxgzs2bMH3377Lbp37w4A2L59O/Lz85Gfn49rrrkGb7/9tu22/fFkZmYiPz8fBoMBZ86cwYsvvmjbN3XqVOzYsQPffvstcnJyIAgCRo4cierqaqc5WywWjBgxAr/++iuysrKwb98+vPbaa1AqlbaYNm3a2PLIz8/Htm3bajzGNddcg5UrV2Lfvn2YO3cuXnzxRXzxxRcOcdbX4MCBA8jPz69RuGRnZ2Pu3LlITU3FH3/8gVdffRVJSUn45JNPGvQ6EBHRP7zFToCIiBru/PnzGDp0KPbt24cBAwagTZs2Dvs3btyIPXv2wGQyoXPnzgCATz/9FFFRUdi+fTtuuukmALAVASqVCiqVCmFhYbU+Z2FhIVJSUvD8888jKSnJtj0gIAD5+fm13m/FihWwWCxYsmQJFAoFgMsFS0hICDZt2oRhw4YhJSUFzz33HGbOnGm7nzXH9u3b27YplUoEBwdDpVLVeJ6QkBCoVCoEBAQgKCjINip26NAhfPvtt/j1118xaNAgAJcLi86dO+Obb77BuHHjajzWhg0bsG3bNvzxxx/o2bMnAECtVjvEKBQKhzwqKioc9vv4+CA5Odl2OzIyEjk5Ofjiiy8wfvx423bra9CpUye0atWqxnRGvV6PhQsX4v7777c9zr59+/Dhhx9iypQpNXInIqL6cSSIiMgDGQwGWCwW5Obm4vDhw3j99dcd9v/xxx/o3LmzrQACgOuvvx4hISH4448/bNtKSkoAAK1atar3OV9++WXcfvvtuPXWWx229+nTB1u2bIHJZHJ6v99//x2HDx9GUFAQWrdujdatWyMsLAwVFRU4cuQIzpw5g1OnTuHOO+90+fidmTRpElq3bo3Q0FCUlpZi3rx5AC7/LLy9vTFw4EBbbNu2bdGrVy+Hn4W93NxcXHPNNbYCqLHS0tIwYMAAtG/fHq1bt8aiRYtw/Phxh5iSkhJ4eXkhICCgxv3Lyspw5MgRTJ8+3faza926NVJSUhym+wHAoEGDHGKufB4iIvoHR4KIiDyQWq3Gxo0b0a5dO6Snp+Phhx/GqFGjoNFoGvQ4p06dgpeXl9ORFXuHDh3CkiVLkJubi7/++sth37Rp07Bq1Sqo1WqnxdSFCxcwYMAAZGdn19jXvn17eHm55/O4t956C0OHDkVRURHmzJmDqVOnYs2aNY16LGcFSUMtX74c//73v7Fw4ULExMQgKCgIb7zxBrZu3eoQd+rUKXTs2NHpz+HChQsAgMWLFzsUcQAcpuYBl0fcrrvuOtvtIUOGXPUxEBFJFYsgIiIP1LdvX7Rr1w4AMG7cOHz99deYPHkytm3bBl9fX1x33XU4ceIETpw4YRsN2rdvH4qKinD99dfbHmf79u3o3bs3/P3963y+559/Ho899hi6d+9eowgKCAjAhg0bcPr0aZSWlgIAevToYdvfv39/rFixAh06dKgxbc/q2muvxcaNG3H77bc3/Ifx/6lUKtt1RE899RTuueceVFdX47rrrsOlS5ewdetW23S4v//+GwcOHHD4WdjTaDT466+/cPDgwUaPBlmn3yUkJNi2XTl6A1x+DaKjo50+RseOHREREYGjR49Cq9XW+XydO3e2HT8AeHvzv3giotpwOhwRkQSkpaXhzJkztmtQhg4dir59+0Kr1WLXrl3Ytm0bJk+ejMGDB+PGG29EVVUVli1bhjfffBOPPvponY99+PBhbNq0CXPnzq0zrmPHjujevbvDiTgAaLVatGvXDmPHjsXPP/8Mk8mETZs24emnn7YVVC+99BIWLlyId999F4cOHcKuXbvw3nvvNehnUFRUhIKCAhw4cAAfffQR1Go1fHx80KNHD4wdOxaPP/44fvnlF/z+++94+OGH0alTJ4wdO9bpYw0ePBhxcXF44IEHsH79ephMJnz//ff44YcfXM6nR48e2LFjB9atW4eDBw8iKSkJ27dvt+2/cOEC3n77bXz22Wd1vgbJycmYN28e3n33XRw8eBB79uxBZmYm3nzzTdd/OERE5IBFEBGRBISFhWHx4sWYP38+tm7dCoVCgdWrVyM0NBRxcXEYOnQo1Go1VqxYAQDYs2cPXnrpJSQlJWHWrFl1PnZZWRnmzJlTZ9OEugQGBsJgMKBLly64//77cd1112H69OmoqKiwjQxNmTIFb7/9NtLT0xEVFYXRo0fX28L6So8++ijCw8Nx00034fz58/jyyy9t+zIzMzFgwACMHj0aMTExEAQBa9euhY+PT62P99VXX+Gmm27CpEmTcP311+O///0vzGazy/k88cQTuP/++zFhwgQMHDgQf//9t8Oo0Pr167F48WJ8+OGHePDBB2t9nMceewxLlixBZmYm+vbti8GDB2Pp0qWIjIx0ORciInKkEKy9OYmIiIiIiGSAI0FERERERCQrLIKIiIiIiEhWWAQREREREZGssAgiIiIiIiJZYRFERERERESywiKIiIiIiIhkhUUQERERERHJCosgIiIiIiKSFRZBREREREQkKyyCiIiIiIhIVlgEERERERGRrPw/cdMjxzujrDQAAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "import seaborn as sns\n",
+ "\n",
+ "from typing import Tuple\n",
+ "import pandas as pd\n",
+ "from pandas import DataFrame\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "\n",
+ "# Создание целевого признака\n",
+ "median_price = df['price'].median()\n",
+ "df['above_median_price'] = np.where(df['price'] > median_price, 1, 0)\n",
+ "\n",
+ "# Разделение на признаки и целевую переменную\n",
+ "X = df.drop(columns=['id', 'date', 'price', 'above_median_price'])\n",
+ "y = df['above_median_price']\n",
+ "\n",
+ "# Примерная категоризация\n",
+ "df['price_category'] = pd.cut(df['price'], bins=[0, 300000, 700000, np.inf], labels=[0, 1, 2])\n",
+ "\n",
+ "# Выбор признаков и целевых переменных\n",
+ "X = df.drop(columns=['id', 'date', 'price', 'price_category'])\n",
+ "\n",
+ "\n",
+ "def split_stratified_into_train_val_test(\n",
+ " df_input,\n",
+ " stratify_colname=\"y\",\n",
+ " frac_train=0.6,\n",
+ " frac_val=0.15,\n",
+ " frac_test=0.25,\n",
+ " random_state=None,\n",
+ ") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame, DataFrame, DataFrame]:\n",
+ " \n",
+ " if frac_train + frac_val + frac_test != 1.0:\n",
+ " raise ValueError(\n",
+ " \"fractions %f, %f, %f do not add up to 1.0\"\n",
+ " % (frac_train, frac_val, frac_test)\n",
+ " )\n",
+ " \n",
+ " if stratify_colname not in df_input.columns:\n",
+ " raise ValueError(\"%s is not a column in the dataframe\" % (stratify_colname))\n",
+ " X = df_input # Contains all columns.\n",
+ " y = df_input[\n",
+ " [stratify_colname]\n",
+ " ] # Dataframe of just the column on which to stratify.\n",
+ " \n",
+ " # Split original dataframe into train and temp dataframes.\n",
+ " df_train, df_temp, y_train, y_temp = train_test_split(\n",
+ " X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n",
+ " )\n",
+ "\n",
+ " if frac_val <= 0:\n",
+ " assert len(df_input) == len(df_train) + len(df_temp)\n",
+ " return df_train, pd.DataFrame(), df_temp, y_train, pd.DataFrame(), y_temp\n",
+ " # Split the temp dataframe into val and test dataframes.\n",
+ " relative_frac_test = frac_test / (frac_val + frac_test)\n",
+ "\n",
+ " df_val, df_test, y_val, y_test = train_test_split(\n",
+ " df_temp,\n",
+ " y_temp,\n",
+ " stratify=y_temp,\n",
+ " test_size=relative_frac_test,\n",
+ " random_state=random_state,\n",
+ " )\n",
+ "\n",
+ " assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n",
+ " return df_train, df_val, df_test, y_train, y_val, y_test\n",
+ "\n",
+ "X_train, X_val, X_test, y_train, y_val, y_test = split_stratified_into_train_val_test(\n",
+ " df, stratify_colname=\"above_median_price\", frac_train=0.80, frac_val=0, frac_test=0.20, random_state=42\n",
+ ")\n",
+ "\n",
+ "display(\"X_train\", X_train)\n",
+ "display(\"y_train\", y_train)\n",
+ "\n",
+ "display(\"X_test\", X_test)\n",
+ "display(\"y_test\", y_test)\n",
+ "\n",
+ "\n",
+ "# Проверка преобразования\n",
+ "print(df.dtypes)\n",
+ "\n",
+ "# Визуализация распределения цен\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "sns.histplot(df['price'], bins=50, kde=True)\n",
+ "plt.title('Распределение цен на недвижимость')\n",
+ "plt.xlabel('Цена')\n",
+ "plt.ylabel('Частота')\n",
+ "plt.show()\n",
+ "\n",
+ "# Визуализация зависимости между ценой и количеством спален\n",
+ "plt.figure(figsize=(10, 6))\n",
+ "sns.boxplot(x='bedrooms', y='price', data=df)\n",
+ "plt.title('Зависимость цены от количества спален')\n",
+ "plt.xlabel('Количество спален')\n",
+ "plt.ylabel('Цена')\n",
+ "plt.show()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Построение конвейеров предобработки \n",
+ "Создадим пайплайн для числовых и категориальных данных. \n",
+ "\n",
+ "preprocessing_num -- конвейер для обработки числовых данных: заполнение пропущенных значений и стандартизация\n",
+ "\n",
+ "preprocessing_cat -- конвейер для обработки категориальных данных: заполнение пропущенных данных и унитарное кодирование\n",
+ "\n",
+ "features_preprocessing -- трансформер для предобработки признаков\n",
+ "\n",
+ "features_engineering -- трансформер для конструирования признаков\n",
+ "\n",
+ "drop_columns -- трансформер для удаления колонок\n",
+ "\n",
+ "pipeline_end -- основной конвейер предобработки данных и конструирования признаков"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 150,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "from sklearn.base import BaseEstimator, TransformerMixin\n",
+ "from sklearn.compose import ColumnTransformer\n",
+ "from sklearn.discriminant_analysis import StandardScaler\n",
+ "from sklearn.impute import SimpleImputer\n",
+ "from sklearn.preprocessing import OneHotEncoder\n",
+ "from sklearn.preprocessing import StandardScaler\n",
+ "from sklearn.pipeline import Pipeline\n",
+ "\n",
+ "pipeline_end = StandardScaler()\n",
+ "\n",
+ "\n",
+ "# Построение конвейеров предобработки\n",
+ "\n",
+ "class HouseFeatures(BaseEstimator, TransformerMixin):\n",
+ " def __init__(self):\n",
+ " pass\n",
+ " def fit(self, X, y=None):\n",
+ " return self\n",
+ " def transform(self, X, y=None):\n",
+ " # Создание новых признаков\n",
+ " X = X.copy()\n",
+ " X[\"Living_area_to_Lot_ratio\"] = X[\"sqft_living\"] / X[\"sqft_lot\"]\n",
+ " return X\n",
+ " def get_feature_names_out(self, features_in):\n",
+ " # Добавление имен новых признаков\n",
+ " new_features = [\"Living_area_to_Lot_ratio\"]\n",
+ " return np.append(features_in, new_features, axis=0)\n",
+ "\n",
+ "\n",
+ "# Обработка числовых данных. Числовой конвейр: заполнение пропущенных значений медианой и стандартизация\n",
+ "preprocessing_num_class = Pipeline(steps=[\n",
+ " ('imputer', SimpleImputer(strategy='median')),\n",
+ " ('scaler', StandardScaler())\n",
+ "])\n",
+ "\n",
+ "preprocessing_cat_class = Pipeline(steps=[\n",
+ " ('imputer', SimpleImputer(strategy='most_frequent')),\n",
+ " ('onehot', OneHotEncoder(handle_unknown='ignore'))\n",
+ "])\n",
+ "\n",
+ "columns_to_drop = [\"date\"]\n",
+ "numeric_columns = [\"sqft_living\", \"sqft_lot\", \"above_median_price\"]\n",
+ "cat_columns = []\n",
+ "\n",
+ "features_preprocessing = ColumnTransformer(\n",
+ " verbose_feature_names_out=False,\n",
+ " transformers=[\n",
+ " (\"prepocessing_num\", preprocessing_num_class, numeric_columns),\n",
+ " (\"prepocessing_cat\", preprocessing_cat_class, cat_columns),\n",
+ " ],\n",
+ " remainder=\"passthrough\"\n",
+ ")\n",
+ "\n",
+ "drop_columns = ColumnTransformer(\n",
+ " verbose_feature_names_out=False,\n",
+ " transformers=[\n",
+ " (\"drop_columns\", \"drop\", columns_to_drop),\n",
+ " ],\n",
+ " remainder=\"passthrough\",\n",
+ ")\n",
+ "\n",
+ "features_postprocessing = ColumnTransformer(\n",
+ " verbose_feature_names_out=False,\n",
+ " transformers=[\n",
+ " ('preprocessing_cat', preprocessing_cat_class, [\"price_category\"]),\n",
+ " ],\n",
+ " remainder=\"passthrough\",\n",
+ ")\n",
+ "\n",
+ "pipeline_end = Pipeline(\n",
+ " [\n",
+ " (\"features_preprocessing\", features_preprocessing),\n",
+ " (\"custom_features\", HouseFeatures()),\n",
+ " (\"drop_columns\", drop_columns),\n",
+ " ]\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Демонстрация работы конвейра для предобработки данных при классификации**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 151,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sqft_living | \n",
+ " sqft_lot | \n",
+ " above_median_price | \n",
+ " id | \n",
+ " price | \n",
+ " bedrooms | \n",
+ " bathrooms | \n",
+ " floors | \n",
+ " waterfront | \n",
+ " view | \n",
+ " ... | \n",
+ " sqft_basement | \n",
+ " yr_built | \n",
+ " yr_renovated | \n",
+ " zipcode | \n",
+ " lat | \n",
+ " long | \n",
+ " sqft_living15 | \n",
+ " sqft_lot15 | \n",
+ " price_category | \n",
+ " Living_area_to_Lot_ratio | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 20962 | \n",
+ " -1.360742 | \n",
+ " -0.262132 | \n",
+ " -0.994693 | \n",
+ " 1278000210 | \n",
+ " 110000.0 | \n",
+ " 2 | \n",
+ " 1.00 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1968 | \n",
+ " 2007 | \n",
+ " 98001 | \n",
+ " 47.2655 | \n",
+ " -122.244 | \n",
+ " 828 | \n",
+ " 5402 | \n",
+ " 0 | \n",
+ " 5.191063 | \n",
+ "
\n",
+ " \n",
+ " 12284 | \n",
+ " 0.794390 | \n",
+ " -0.094121 | \n",
+ " 1.005335 | \n",
+ " 2193300390 | \n",
+ " 624000.0 | \n",
+ " 4 | \n",
+ " 3.25 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 1130 | \n",
+ " 1980 | \n",
+ " 0 | \n",
+ " 98052 | \n",
+ " 47.6920 | \n",
+ " -122.099 | \n",
+ " 2110 | \n",
+ " 11250 | \n",
+ " 1 | \n",
+ " -8.440052 | \n",
+ "
\n",
+ " \n",
+ " 7343 | \n",
+ " 0.837884 | \n",
+ " -0.272723 | \n",
+ " 1.005335 | \n",
+ " 4289900005 | \n",
+ " 1535000.0 | \n",
+ " 4 | \n",
+ " 3.25 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 3 | \n",
+ " ... | \n",
+ " 1030 | \n",
+ " 1908 | \n",
+ " 2003 | \n",
+ " 98122 | \n",
+ " 47.6147 | \n",
+ " -122.285 | \n",
+ " 2130 | \n",
+ " 4200 | \n",
+ " 2 | \n",
+ " -3.072292 | \n",
+ "
\n",
+ " \n",
+ " 14247 | \n",
+ " -0.782270 | \n",
+ " -0.196986 | \n",
+ " -0.994693 | \n",
+ " 316000145 | \n",
+ " 235000.0 | \n",
+ " 4 | \n",
+ " 1.00 | \n",
+ " 1.5 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1941 | \n",
+ " 0 | \n",
+ " 98168 | \n",
+ " 47.5054 | \n",
+ " -122.301 | \n",
+ " 1280 | \n",
+ " 7175 | \n",
+ " 0 | \n",
+ " 3.971201 | \n",
+ "
\n",
+ " \n",
+ " 16670 | \n",
+ " 1.011860 | \n",
+ " 0.024330 | \n",
+ " 1.005335 | \n",
+ " 629400480 | \n",
+ " 775000.0 | \n",
+ " 4 | \n",
+ " 2.75 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1996 | \n",
+ " 0 | \n",
+ " 98075 | \n",
+ " 47.5895 | \n",
+ " -121.994 | \n",
+ " 3330 | \n",
+ " 12333 | \n",
+ " 2 | \n",
+ " 41.589045 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 88 | \n",
+ " -0.510432 | \n",
+ " -0.324180 | \n",
+ " -0.994693 | \n",
+ " 1332700270 | \n",
+ " 215000.0 | \n",
+ " 2 | \n",
+ " 2.25 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1979 | \n",
+ " 0 | \n",
+ " 98056 | \n",
+ " 47.5180 | \n",
+ " -122.194 | \n",
+ " 1950 | \n",
+ " 2025 | \n",
+ " 0 | \n",
+ " 1.574534 | \n",
+ "
\n",
+ " \n",
+ " 15031 | \n",
+ " 1.044481 | \n",
+ " -0.314813 | \n",
+ " 1.005335 | \n",
+ " 7129303070 | \n",
+ " 735000.0 | \n",
+ " 4 | \n",
+ " 2.75 | \n",
+ " 2.0 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1966 | \n",
+ " 0 | \n",
+ " 98118 | \n",
+ " 47.5188 | \n",
+ " -122.256 | \n",
+ " 2620 | \n",
+ " 2433 | \n",
+ " 2 | \n",
+ " -3.317784 | \n",
+ "
\n",
+ " \n",
+ " 5234 | \n",
+ " -0.456065 | \n",
+ " -0.136611 | \n",
+ " 1.005335 | \n",
+ " 2432000130 | \n",
+ " 675000.0 | \n",
+ " 3 | \n",
+ " 1.75 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1956 | \n",
+ " 0 | \n",
+ " 98033 | \n",
+ " 47.6503 | \n",
+ " -122.198 | \n",
+ " 2090 | \n",
+ " 9549 | \n",
+ " 1 | \n",
+ " 3.338418 | \n",
+ "
\n",
+ " \n",
+ " 19980 | \n",
+ " 0.566046 | \n",
+ " 1.239169 | \n",
+ " -0.994693 | \n",
+ " 774100475 | \n",
+ " 415000.0 | \n",
+ " 3 | \n",
+ " 2.75 | \n",
+ " 1.5 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2009 | \n",
+ " 0 | \n",
+ " 98014 | \n",
+ " 47.7185 | \n",
+ " -121.405 | \n",
+ " 1740 | \n",
+ " 64626 | \n",
+ " 1 | \n",
+ " 0.456795 | \n",
+ "
\n",
+ " \n",
+ " 3671 | \n",
+ " 0.370323 | \n",
+ " 4.836825 | \n",
+ " 1.005335 | \n",
+ " 8847400115 | \n",
+ " 590000.0 | \n",
+ " 3 | \n",
+ " 2.00 | \n",
+ " 1.5 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2005 | \n",
+ " 0 | \n",
+ " 98010 | \n",
+ " 47.3666 | \n",
+ " -121.978 | \n",
+ " 3180 | \n",
+ " 212137 | \n",
+ " 1 | \n",
+ " 0.076563 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
17290 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sqft_living sqft_lot above_median_price id price \\\n",
+ "20962 -1.360742 -0.262132 -0.994693 1278000210 110000.0 \n",
+ "12284 0.794390 -0.094121 1.005335 2193300390 624000.0 \n",
+ "7343 0.837884 -0.272723 1.005335 4289900005 1535000.0 \n",
+ "14247 -0.782270 -0.196986 -0.994693 316000145 235000.0 \n",
+ "16670 1.011860 0.024330 1.005335 629400480 775000.0 \n",
+ "... ... ... ... ... ... \n",
+ "88 -0.510432 -0.324180 -0.994693 1332700270 215000.0 \n",
+ "15031 1.044481 -0.314813 1.005335 7129303070 735000.0 \n",
+ "5234 -0.456065 -0.136611 1.005335 2432000130 675000.0 \n",
+ "19980 0.566046 1.239169 -0.994693 774100475 415000.0 \n",
+ "3671 0.370323 4.836825 1.005335 8847400115 590000.0 \n",
+ "\n",
+ " bedrooms bathrooms floors waterfront view ... sqft_basement \\\n",
+ "20962 2 1.00 1.0 0 0 ... 0 \n",
+ "12284 4 3.25 1.0 0 0 ... 1130 \n",
+ "7343 4 3.25 2.0 0 3 ... 1030 \n",
+ "14247 4 1.00 1.5 0 0 ... 0 \n",
+ "16670 4 2.75 2.0 0 0 ... 0 \n",
+ "... ... ... ... ... ... ... ... \n",
+ "88 2 2.25 2.0 0 0 ... 0 \n",
+ "15031 4 2.75 2.0 1 4 ... 0 \n",
+ "5234 3 1.75 1.0 0 0 ... 0 \n",
+ "19980 3 2.75 1.5 0 0 ... 0 \n",
+ "3671 3 2.00 1.5 0 0 ... 0 \n",
+ "\n",
+ " yr_built yr_renovated zipcode lat long sqft_living15 \\\n",
+ "20962 1968 2007 98001 47.2655 -122.244 828 \n",
+ "12284 1980 0 98052 47.6920 -122.099 2110 \n",
+ "7343 1908 2003 98122 47.6147 -122.285 2130 \n",
+ "14247 1941 0 98168 47.5054 -122.301 1280 \n",
+ "16670 1996 0 98075 47.5895 -121.994 3330 \n",
+ "... ... ... ... ... ... ... \n",
+ "88 1979 0 98056 47.5180 -122.194 1950 \n",
+ "15031 1966 0 98118 47.5188 -122.256 2620 \n",
+ "5234 1956 0 98033 47.6503 -122.198 2090 \n",
+ "19980 2009 0 98014 47.7185 -121.405 1740 \n",
+ "3671 2005 0 98010 47.3666 -121.978 3180 \n",
+ "\n",
+ " sqft_lot15 price_category Living_area_to_Lot_ratio \n",
+ "20962 5402 0 5.191063 \n",
+ "12284 11250 1 -8.440052 \n",
+ "7343 4200 2 -3.072292 \n",
+ "14247 7175 0 3.971201 \n",
+ "16670 12333 2 41.589045 \n",
+ "... ... ... ... \n",
+ "88 2025 0 1.574534 \n",
+ "15031 2433 2 -3.317784 \n",
+ "5234 9549 1 3.338418 \n",
+ "19980 64626 1 0.456795 \n",
+ "3671 212137 1 0.076563 \n",
+ "\n",
+ "[17290 rows x 23 columns]"
+ ]
+ },
+ "execution_count": 151,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "preprocessing_result = pipeline_end.fit_transform(X_train)\n",
+ "preprocessed_df = pd.DataFrame(\n",
+ " preprocessing_result,\n",
+ " columns=pipeline_end.get_feature_names_out(),\n",
+ ")\n",
+ "\n",
+ "preprocessed_df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Формирование набора моделей для классификации\n",
+ "\n",
+ "logistic -- логистическая регрессия\n",
+ "\n",
+ "ridge -- гребневая регрессия\n",
+ "\n",
+ "decision_tree -- дерево решений\n",
+ "\n",
+ "knn -- k-ближайших соседей\n",
+ "\n",
+ "naive_bayes -- наивный Байесовский классификатор\n",
+ "\n",
+ "gradient_boosting -- метод градиентного бустинга (набор деревьев решений)\n",
+ "\n",
+ "random_forest -- метод случайного леса (набор деревьев решений)\n",
+ "\n",
+ "mlp -- многослойный персептрон (нейронная сеть)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 152,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn import ensemble, linear_model, naive_bayes, neighbors, neural_network, tree, svm\n",
+ "\n",
+ "class_models = {\n",
+ " \"logistic\": {\"model\": linear_model.LogisticRegression(max_iter=150)},\n",
+ " \"ridge\": {\"model\": linear_model.RidgeClassifierCV(cv=5, class_weight=\"balanced\")},\n",
+ " \"ridge\": {\"model\": linear_model.LogisticRegression(max_iter=150, solver='lbfgs', penalty=\"l2\", class_weight=\"balanced\")},\n",
+ " \"decision_tree\": {\n",
+ " \"model\": tree.DecisionTreeClassifier(max_depth=5, min_samples_split=10, random_state=random_state)\n",
+ " },\n",
+ "\n",
+ " \"knn\": {\"model\": neighbors.KNeighborsClassifier(n_neighbors=7)},\n",
+ " \"naive_bayes\": {\"model\": naive_bayes.GaussianNB()},\n",
+ " \"gradient_boosting\": {\n",
+ " \"model\": ensemble.GradientBoostingClassifier(n_estimators=210)\n",
+ " },\n",
+ "\n",
+ " \"random_forest\": {\n",
+ " \"model\": ensemble.RandomForestClassifier(\n",
+ " max_depth=5, class_weight=\"balanced\", random_state=random_state\n",
+ " )\n",
+ " },\n",
+ "\n",
+ " \"mlp\": {\n",
+ " \"model\": neural_network.MLPClassifier(\n",
+ " hidden_layer_sizes=(7,),\n",
+ " max_iter=200,\n",
+ " early_stopping=True,\n",
+ " random_state=random_state,\n",
+ " )\n",
+ " },\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Обучение моделей на обучающем наборе данных и оценка на тестовом**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 153,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Model: logistic\n",
+ "Model: ridge\n",
+ "Model: decision_tree\n",
+ "Model: knn\n",
+ "Model: naive_bayes\n",
+ "Model: gradient_boosting\n",
+ "Model: random_forest\n",
+ "Model: mlp\n"
+ ]
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "from sklearn import metrics\n",
+ "\n",
+ "for model_name in class_models.keys():\n",
+ " print(f\"Model: {model_name}\")\n",
+ " model = class_models[model_name][\"model\"]\n",
+ "\n",
+ " model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\n",
+ " model_pipeline = model_pipeline.fit(X_train, y_train.values.ravel())\n",
+ "\n",
+ " y_train_predict = model_pipeline.predict(X_train)\n",
+ " y_test_probs = model_pipeline.predict_proba(X_test)[:, 1]\n",
+ " y_test_predict = np.where(y_test_probs > 0.5, 1, 0)\n",
+ "\n",
+ " class_models[model_name][\"pipeline\"] = model_pipeline\n",
+ " class_models[model_name][\"probs\"] = y_test_probs\n",
+ " class_models[model_name][\"preds\"] = y_test_predict\n",
+ "\n",
+ " class_models[model_name][\"Precision_train\"] = metrics.precision_score(\n",
+ " y_train, y_train_predict, zero_division=1\n",
+ " )\n",
+ " class_models[model_name][\"Precision_test\"] = metrics.precision_score(\n",
+ " y_test, y_test_predict, zero_division=1\n",
+ " )\n",
+ " class_models[model_name][\"Recall_train\"] = metrics.recall_score(\n",
+ " y_train, y_train_predict\n",
+ " )\n",
+ " class_models[model_name][\"Recall_test\"] = metrics.recall_score(\n",
+ " y_test, y_test_predict\n",
+ " )\n",
+ " class_models[model_name][\"Accuracy_train\"] = metrics.accuracy_score(\n",
+ " y_train, y_train_predict\n",
+ " )\n",
+ " class_models[model_name][\"Accuracy_test\"] = metrics.accuracy_score(\n",
+ " y_test, y_test_predict\n",
+ " )\n",
+ " class_models[model_name][\"ROC_AUC_test\"] = metrics.roc_auc_score(\n",
+ " y_test, y_test_probs\n",
+ " )\n",
+ " class_models[model_name][\"F1_train\"] = metrics.f1_score(y_train, y_train_predict)\n",
+ " class_models[model_name][\"F1_test\"] = metrics.f1_score(y_test, y_test_predict)\n",
+ " class_models[model_name][\"MCC_test\"] = metrics.matthews_corrcoef(\n",
+ " y_test, y_test_predict\n",
+ " )\n",
+ " class_models[model_name][\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(\n",
+ " y_test, y_test_predict\n",
+ " )\n",
+ " class_models[model_name][\"Confusion_matrix\"] = metrics.confusion_matrix(\n",
+ " y_test, y_test_predict\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Сводная таблица оценок качества для использованных моделей классификации¶\n",
+ "Матрица неточностей**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 154,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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0b9/f2M3Q3aCg4MhCALefvvtImUTJkyAIAgIDg5+9g0jIiKjYzYbB7OZKgM7R0Rl5OHhgZ07d+LJkyfSupycHOzYsQP169cv93ZFUUR+fr4hmkhERCQrzGYyNHaOapBLly4hKCgI1tbWcHZ2xptvvon79+9L5d9++y1atWoFS0tL1K5dG/7+/sjOzgYAREZG4vnnn4eVlRXs7e3RqVMn3Lhxw1iHUiW1b98eHh4e+P7776V133//PerXr4927dpJ63Jzc/HOO+/AyckJFhYW6Ny5M/7880+pPDIyEoIgYP/+/fD19YW5uTl+++03aDQahIeHo2HDhrC0tESbNm3w7bffPtNjJCIiw2I2Vy5mMxkaO0c1RHp6Ol566SW0a9cOp0+fxoEDB5CSkoJBgwYBAJKSkjBkyBCMHj0acXFxiIyMxIABA6QrI/3790e3bt1w4cIFREdHY9y4cRAEwchHVfWMHj0amzdvlj5v2rSpyJudZ86cie+++w5bt27F2bNn4eXlhcDAQKSlpWnVmz17NhYvXoy4uDi0bt0a4eHh2LZtG9avX4/Y2FhMnToVw4cPx7Fjx57JsRERkWExm58NZjMZlEjVysiRI8V+/foVWf/BBx+IAQEBWutu3bolAhDj4+PFM2fOiADE69evF/nZBw8eiADEyMjIymp2tVf4vaemporm5ubi9evXxevXr4sWFhbivXv3xH79+okjR44Us7KyRDMzM3H79u3Sz+bl5Ylubm7ikiVLRFEUxaNHj4oAxD179kh1cnJyxFq1aoknT57U2m9ISIg4ZMiQZ3OQRERULsxm42A2U2UwNV63jAzp/PnzOHr0KKytrYuUXb16FQEBAejZsydatWqFwMBABAQE4PXXX4eDgwMcHR0RHByMwMBAvPzyy/D398egQYPg6upqhCOp2urWrYvevXtjy5YtEEURvXv3Rp06daTyq1evQqVSoVOnTtI6MzMzPP/884iLi9PaVocOHaQ/JyQk4PHjx3j55Ze16uTl5WndFkBERNUHs/nZYDaTIbFzVENkZWWhT58++Pjjj4uUubq6wsTEBBERETh58iQOHTqE1atXY+7cuTh16hQaNmyIzZs345133sGBAwewa9cuvP/++4iIiMALL7xghKOp2kaPHo2JEycCANasWVPu7VhZWUl/zsrKAgDs27cP9erV06pnbm5e7n0Q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zKzU76Rx48bIysrS+7sjIiJ61pYuXQpTU1P85z//gY2NDYYOHWrsJhE9c7ytroYxMTFBYGAg9uzZg5s3b0rr4+LicPDgQenzgAEDYGJigrCwsCJXcURRxIMHDwAA7du3R8OGDbFixQqkp6cXqVeStLS0Iuvatm0LAMjNzS32Z1xdXdG2bVts3bpVa1+XLl3CoUOH8Morr5S4v4oo7HD9+/hK4uTkhO7du+Pzzz9HUlJSkfJ79+5Jfx40aBCio6O1vvtC6enpyM/PL1+jiYiIDEwQBGzYsAGvv/46Ro4cWezrKYhqOo4c1UBhYWE4cOAAunTpgv/85z/Iz8/H6tWr0aJFC1y4cAFAwYjGhx9+iDlz5uD69evo378/bGxskJiYiB9++AHjxo3D9OnToVAosG7dOvTp0wdt27bFqFGj4OrqisuXLyM2NrbYf/QDwMKFCxEVFYXevXvD09MTqampWLt2Ldzd3dG5c+cS27506VIEBQXBz88PISEh0lTednZ2CA0NrYyvC76+vgCAd955B4GBgTAxMcHgwYN1/syaNWvQuXNntGrVCmPHjkWjRo2QkpKC6Oho3L59G+fPnwcAzJgxAz/99BNeffVVBAcHw9fXF9nZ2bh48SK+/fZbXL9+XZoilYiIyNgUCgW++uor9O/fH4MGDcIvv/yCl156ydjNInpm2DmqgVq3bo2DBw9i2rRpmD9/Ptzd3REWFoakpCSpcwQAs2fPRtOmTbF8+XKEhYUBADw8PBAQEIC+fftK9QIDA3H06FGEhYXh008/hUajQePGjTF27NgS29C3b19cv34dmzZtwv3791GnTh1069YNYWFhsLOzK/Hn/P39ceDAASxYsADz58+HmZkZunXrho8//rjIxAiGMmDAAEyaNAk7d+7EV199BVEUS+0c+fj44PTp0wgLC8OWLVvw4MEDODk5oV27dpg/f75Ur1atWjh27BgWLVqEb775Btu2bYOtrS2aNm1a6ndBRERkDGZmZvj2228RFBSEfv364ddffzV2k4ieGUHkk3FERERERER85oiIiIiIiAjgbXVUg2VkZODJkyc667i4uDyj1hARERFRVcfb6qjGCg4OxtatW3XW4X/+RERERFSInSOqsf766y/cvXtXZx2+f4iIiIiICrFzREREREREBE7IQEREREREBIATMpSJRqPB3bt3YWNjA0EQ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FkBERBUHY/OLwdhMusTkqJJIS0tD165d8fnnnxeoc3V1hbGxMfbu3YujR49iz549+Prrr/Hhhx/ixIkTqFmzJsLCwjBmzBjs3r0bGzduxEcffYS9e/eiZcuWejgawzZ48GCMHj0aALB48eJn7sfS0lL6OS0tDQCwY8cOVK1aVaudSqV65n0QEZH+MDa/OIzNpCu856iSaNasGaKiolCjRg14enpqbfm/6AqFAq1atcLMmTNx9uxZKJVK/PLLL1IfTZs2xZQpU3D06FE0aNAA69ev19fhGLTOnTsjKysL2dnZCAgI0KqrXbs2lEolIiIipLLs7GycPHkS3t7eRfbp7e0NlUqFGzduFPj/5+7uXm7HQkRE5Yex+cVhbCZd4cxRBZScnIzIyEitsmHDhmH58uXo06cPJk2aBHt7e8TGxmLDhg1YsWIFTp06hf3798Pf3x9OTk44ceIE7t+/j3r16uHq1av47rvv0K1bN7i5uSEmJgaXL1/GwIED9XOABs7Y2Fiahjc2Ntaqs7S0xIgRIzBx4kTY29ujevXqmDt3LtLT0zFkyJAi+7S2tsaECRMQEhICjUaD1q1bIzk5GREREVCr1QgKCirXYyIioufD2KxfjM2kK0yOKqDw8PAC17oOGTIEERERmDx5Mvz9/ZGZmQkPDw907twZRkZGUKvVOHToEBYuXIiUlBR4eHhg3rx56NKlC+7du4eLFy9izZo1ePjwIVxdXTFq1Ci89957ejpCw6dWq4us++yzz6DRaDBgwACkpqaiefPm+P3332FnZ1dsn7Nnz4ajoyNCQ0Nx5coV2NraolmzZpg6daquh09ERDrG2Kx/jM2kCwohhND3IIiIiIiIiPSN9xwRERERERGByREREREREREAJkdEREREREQAmBwREREREREBYHJEREREREQEgMkRERERERERACZHREREREREAJgckY4EBwejR48e0uv27dtj3LhxL3wc4eHhUCgUSEpKKrKNQqHA1q1bS93njBkz0KRJk+ca17Vr16BQKAo8PZ2IiKi8MDYXj7GZCsPkqBILDg6GQqGAQqGAUqmEp6cnZs2ahZycnHLf95YtWzB79uxStS3NlyYREVFlwNhMZNhM9D0AKl+dO3dGWFgYMjMzsXPnTowaNQqmpqaYMmVKgbZZWVlQKpU62a+9vb1O+iEiIqpsGJuJDBdnjio5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bcL06dO16jZu3AhjY2P83//9H4C8afp27drh9u3beO+991C9enUcPXoUU6ZMwd27d8t8DfCjR4/w+uuvo3fv3ujTpw82bdqEESNGQKlUYvDgwQCAlJQUrFixAn369MHQoUORmpqKlStXIiAgAH/++SeaNGkChUKB/v37Y+7cuUhMTIS9vb20j99++w0pKSno378/gLyzgd26dcORI0cwbNgw1KtXD3/99RcWLFiAS5cuYevWrQCAqKgovPHGG2jUqBFmzZoFlUqF2NhYRERElOkYiYhIf86ePYvOnTvD1dUVM2fORG5uLmbNmiUlD//1xx9/YNOmTRg9ejQcHBykP7q/+uordOvWDf369UNWVhY2bNiA//u//8P27dsRGBgovf/dd9/FDz/8gL59++LVV1/FH3/8oVVfnO+//x5BQUEICAjA559/jvT0dCxduhStW7fG2bNnpbEAeUlLQEAAWrRogS+//BL79u3DvHnzULt2bYwYMQKOjo5YunQpRowYgTfffBM9e/YEADRq1KhMn92nn34KhUKByZMnIyEhAQsXLoSfnx8iIyNhbm4OIC/RGzRoEF5++WWEhobi3r17+OqrrxAREYGzZ8/C1tYWALBv3z506dIFtWrVwowZM/DkyRN8/fXXaNWqFc6cOSMd3/Dhw7F582aMHj0a3t7eePjwIY4cOYLo6Gg0a9YMH374IZKTk3Hr1i0sWLAAAGBlZVXscZT0eQF5fxt07doVf/75J0aMGIG6devi119/RVBQUJk+MzIggiq16dOnCwBi8ODBWuVvvvmmqFKlivQ6PT29wHsDAgJErVq1tMratWsn2rVrJ73+9ttvBQDx119/abXz9vYWHTp0kF7Pnj1bWFpaikuXLmm1++CDD4SxsbG4ceNGqY+pXbt2AoCYN2+eVJaZmSmaNGkinJycRFZWlhBCiJycHJGZman13kePHglnZ2etzyMmJkYAEEuXLtVq261bN1GjRg2h0WiEEEJ8//33wsjISBw+fFir3bJlywQAERERIYQQYsGCBQKAuH//fqmPiYiIDEvXrl2FhYWFuH37tlR2+fJlYWJiIv775xMAYWRkJKKiogr08XRszcrKEg0aNNCKj5GRkQKAGDlypFbbvn37CgBi+vTpUllYWJgAIK5evSqEECI1NVXY2tqKoUOHar03Pj5e2NjYaJUHBQUJAGLW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3r0bGzduxEcffYS9e/eiZcuWejgawzZ48GCMHj0aALB48eJn7sfS0lL6OS0tDQCwY8cOVK1aVaudSqV65n0QEZH+MDa/OIzNpCu856iSaNasGaKiolCjRg14enpqbfm/6AqFAq1atcLMmTNx9uxZKJVK/PLLL1IfTZs2xZQpU3D06FE0aNAA69ev19fhGLTOnTsjKysL2dnZCAgI0KqrXbs2lEolIiIipLLs7GycPHkS3t7eRfbp7e0NlUqFGzduFPj/5+7uXm7HQkRE5Yex+cVhbCZd4cxRBZScnIzIyEitsmHDhmH58uXo06cPJk2aBHt7e8TGxmLDhg1YsWIFTp06hf3798Pf3x9OTk44ceIE7t+/j3r16uHq1av47rvv0K1bN7i5uSEmJgaXL1/GwIED9XOABs7Y2Fiahjc2Ntaqs7S0xIgRIzBx4kTY29ujevXqmDt3LtLT0zFkyJAi+7S2tsaECRMQEhICjUaD1q1bIzk5GREREVCr1QgKCirXYyIioufD2KxfjM2kK0yOKqDw8PAC17oOGTIEERERmDx5Mvz9/ZGZmQkPDw907twZRkZGUKvVOHToEBYuXIiUlBR4eHhg3rx56NKlC+7du4eLFy9izZo1ePjwIVxdXTFq1Ci89957ejpCw6dWq4us++yzz6DRaDBgwACkpqaiefPm+P3332FnZ1dsn7Nnz4ajoyNCQ0Nx5coV2NraolmzZpg6daquh09ERDrG2Kx/jM2kCwohhND3IIiIiIiIiPSN9xwRERERERGByREREREREREAJkdEREREREQAmBwREREREREBYHJEREREREQEgMkRERERERERACZHREREREREAJgckY4EBwejR48e0uv27dtj3LhxL3wc4eHhUCgUSEpKKrKNQqHA1q1bS93njBkz0KRJk+ca17Vr16BQKAo8PZ2IiKi8MDYXj7GZCsPkqBILDg6GQqGAQqGAUqmEp6cnZs2ahZycnHLf95YtWzB79uxStS3NlyYREVFlwNhMZNhM9D0AKl+dO3dGWFgYMjMzsXPnTowaNQqmpqaYMmVKgbZZWVlQKpU62a+9vb1O+iEiIqpsGJuJDBdnjio5lUoFFxcXeHh4YMSIEfDz88O2bdsA/Dvd/umnn8LNzQ1eXl4AgJs3b6J3796wtbWFvb09unfvjmvXrkl95ubmYvz48bC1tUWVKlUwadIkCCG09vv01H1mZiYmT54Md3d3qFQqeHp6YuXKlbh27Rpee+01AICdnR0UCgWCg4MBABqNBqGhoahZsybMzc3RuHFjbN68WWs/O3fuRJ06dWBubo7XXntNa5ylNXnyZNSpUwcWFhaoVasWPv74Y2RnZxdo9+2338Ld3R0WFhbo3bs3kpOTtepXrFiBevXqwczMDHXr1sWSJUvKPBYiIqr8GJtLxthM+sLkSGbMzc2RlZUlvd6/fz9iYmKwd+9ebN++HdnZ2QgICIC1tTUOHz6MiIgIWFlZoXPnztL75s2bh9WrV2PVqlU4cuQIEhMT8csvvxS734EDB+LHH3/EokWLEB0djW+//RZWVlZwd3fHzz//DACIiYnB3bt38dVXXwEAQkNDsXbtWixbtgxRUVEICQlB//79cfDgQQB5gaJnz57o2rUrIiMj8e677+KDDz4o82dibW2N1atX4++//8ZXX32F5cuXY8GCBVptYmNjsWnTJvz222/YvXs3zp49i5EjR0r169atw7Rp0/Dpp58iOjoac+bMwccff4w1a9aUeTxERCQvjM0FMTaT3giqtIKCgkT37t2FEEJoNBqxd+9eoVKpxIQJE6R6Z2dnkZmZKb3n+++/F15eXkKj0UhlmZmZwtzcXPz+++9CCCFcXV3F3Llzpfrs7GxRrVo1aV9CCNGuXTsxduxYIYQQMTExAoDYu3dvoeM8cOCAACAePXoklWVkZAgLCwtx9OhRrbZDhgwRffr0EUIIMWXKFOHt7a1VP3ny5AJ9PQ2A+OWXX4qs/+KLL4SPj4/0evr06cLY2FjcunVLKtu1a5cwMjISd+/eFUIIUbt2bbF+/XqtfmbPni18fX2FEEJcvXpVABBnz54tcr9ERFT5MTYXjrGZDAXvOarktm/fDisrK2RnZ0Oj0aBv376YMWOGVN+wYUOta5nPnTuH2NhYWFtba/WTkZGBuLg4JCcn4+7du2jRooVUZ2JigubNmxeYvs8XGRkJY2NjtGvXrtTjjo2NRXp6Ojp16qRVnpWVhaZNmwIAoqOjtcYBAL6+vqXeR76NGzdi0aJFiIuLQ1paGnJycqBWq7XaVK9eHVWrVtXaj0ajQUxMDKytrREXF4chQ4Zg6NChUpucnBzY2NiUeTxERFS5mA00rAAAVR5JREFUMTaXjLGZ9IXJUSX32muvYenSpVAqlXBzc4OJifb/cktLS63XaWlp8PHxwbp16wr05ejo+ExjMDc3L/N70tLSAAA7duzQ+uID8q7V1pVjx46hX79+mDlzJgICAmBjY4MNGzZg3rx5ZR7r8uXLCwQEY2NjnY2ViIgqB8bm4jE2kz4xOarkLC0t4enpWer2zZo1w8aNG+Hk5FTgDE0+V1dXnDhxAm3btgWQdxbm9OnTaNasWaHtGzZsCI1Gg4MHD8LPz69Aff7ZsdzcXKnM29sbKpUKN27cKPKsVr169aQbWPMdP3685IP8j6NHj8LDwwMffvihVHb9+vUC7W7cuIE7d+7Azc1N2o+RkRG8vLzg7OwMNzc3XLlyBf369SvT/omISH4Ym4vH2Ez6xAUZSEu/fv3g4OCA7t274/Dhw7h69SrCw8MxZswY3Lp1CwAwduxYfPbZZ9i6dSsuXryIkSNHFvschBo1aiAoKAiDBw/G1q1bpT43bdoEAPDw8IBCocD27dtx//59pKWlwdraGhMmTEBISAjWrFmDuLg4nDlzBl9//bV0I+Xw4cNx+fJlTJw4ETExMVi/fj1Wr15dpuN96aWXcOPGDWzYsAFxcXFYtGhRoTewmpmZISgoCOfOncPhw4cxZswY9O7dGy4uLgCAmTNnIjQ0FIsWLcKlS5fw119/ISwsDPPnzy/TeIiIiJ7G2MzYTC+Qvm96ovLz35s+y1J/9+5dMXDgQOHg4CBUKpWoVauWGDp0qEhOThZC5N3kOXbsWKFWq4Wtra0YP368GDhwYJE3fQohxJMnT0RISIhwdXUVSqVSeHp6ilWrVkn1s2bNEi4uLkKhUIigoCAhRN6NqgsXLhReXl7C1NRUODo6ioCAAHHw4EHpfb/99pvw9PQUKpVKtGnTRqxatarMN31OnDhRVKlSRVhZWYm3335bLFiwQNjY2Ej106dPF40bNxZLliwRbm5uwszMTLz11lsiMTFRq99169aJJk2aCKVSKezs7ETbtm3Fli1bhBC86ZOIiPIwNheOsZkMhUKIIu7UIyIiIiIikhFeVkdERERERAQmR0RERERERACYHBEREREREQFgckRERERERASAyREREREREREAJkdEREREREQAmBwREREREREBYHJEREREREQEgMkRERERERERACZHREREREREAJgcERERERERAWByREREREREBIDJEREREREREQAmR0RERERERACYHNFzUigUmDFjhr6HUaTvv/8edevWhampKWxtbfU9HCIiokrl2rVrUCgUWL16tb6HQqQTTI6o0rp48SKCg4NRu3ZtLF++HN99952+h1TAnTt3MGPGDERGRup7KERERESyZ6LvARCVl/DwcGg0Gnz11Vfw9PTU93AKdefOHcycORM1atRAkyZN9D0cIiIiIlnjzFEl8/jxY30PwWAkJCQAgE4vp0tPT9dZX0RERERkWJgcVWAzZsyAQqHA33//jb59+8LOzg6tW7fG+fPnERwcjFq1asHMzAwuLi4YPHgwHj58WOj7Y2NjERwcDFtbW9jY2GDQoEEFkoDMzEyEhITA0dER1tbW6NatG27dulXouM6ePYsuXbpArVbDysoKHTt2xPHjx7XarF69GgqFAkeOHMGYMWPg6OgIW1tbvPfee8jKykJSUhIGDhwIOzs72NnZYdKkSRBClPqzqVGjBqZPnw4AcHR0LHBv1JIlS1C/fn2oVCq4ublh1KhRSEpK0uqjffv2aNCgAU6fPo22bdvCwsICU6dOlT6P6dOnw9PTEyqVCu7u7pg0aRIyMzO1+ti7dy9at24NW1tbWFlZwcvLS+ojPDwcL7/8MgBg0KBBUCgUvG6biIheuPy/By5duoT+/fvDxsYGjo6O+PjjjyGEwM2bN9G9e3eo1Wq4uLhg3rx5xfYXHBwMKysrXLlyBQEBAbC0tISbmxtmzZpVplhOpA+8rK4S+L//+z+89NJLmDNnDoQQ2Lt3L65cuYJBgwbBxcUFUVFR+O677xAVFYXjx49DoVBovb93796oWbMmQkNDcebMGaxYsQJOTk74/PPPpTbvvvsufvjhB/Tt2xevvvoq/vjjDwQGBhYYS1RUFNq0aQO1Wo1JkybB1NQU3377Ldq3b4+DBw+iRYsWWu3ff/99uLi4YObMmTh+/Di+++472Nra4ujRo6hevTrmzJmDnTt34osvvkCDBg0wcODAUn0mCxcuxNq1a/HLL79g6dKlsLKyQqNGjQDkBYGZM2fCz88PI0aMQExMDJYuXYqTJ08iIiICpqamUj8PHz5Ely5d8M4776B///5wdnaGRqNBt27dcOTIEQwbNgz16tXDX3/9hQULFuDSpUvYunWr9Fm88cYbaNSoEWbNmgWVSoXY2FhEREQAAOrVq4dZs2Zh2rRpGDZsGNq0aQMAePXVV0t1jERERLr09ttvo169evjss8+wY8cOfPLJJ7C3t8e3336LDh064PPPP8e6deswYcIEvPzyy2jbtm2RfeXm5qJz585o2bIl5s6di927d2P69OnIycnBrFmzXuBREZWRoApr+vTpAoDo06ePVnl6enqBtj/++KMAIA4dOlTg/YMHD9Zq++abb4oqVapIryMjIwUAMXLkSK12ffv2FQDE9OnTpbIePXoIpVIp4uLipLI7d+4Ia2tr0bZtW6ksLCxMABABAQFCo9FI5b6+vkKhUIjhw4dLZTk5OaJatWqiXbt2JXwi2vKP7/79+1JZQkKCUCqVwt/fX+Tm5krl33zzjQAgVq1aJZW1a9dOABDLli3T6vf7778XRkZG4vDhw1rly5YtEwBERESEEEKIBQsWFNj/006ePCkAiLCwsDIdGxERka7kx8thw4ZJZfmxV6FQiM8++0wqf/TokTA3NxdBQUFCCCGuXr1aII4FBQUJAOL999+XyjQajQgMDBRKpbLYuEikb7ysrhIYPny41mtzc3Pp54yMDDx48AAtW7YEAJw5c6bE97dp0wYPHz5ESkoKAGDnzp0AgDFjxmi1GzdunNbr3Nxc7NmzBz169ECtWrWkcldXV/Tt2xdHjhyR+sw3ZMgQrZmsFi1aQAiBIUOGSGXGxsZo3rw5rly5UvgHUAb79u1DVlYWxo0bByOjf//5Dx06FGq1Gjt27NBqr1KpMGjQIK2yn376CfXq1UPdunXx4MEDaevQoQMA4MCBAwD+vdfp119/hUajee6xExERlad3331X+jk/9j4dk21tbeHl5VWqmDx69GjpZ4VCgdGjRyMrKwv79u3T7cCJdIjJUSVQs2ZNrdeJiYkYO3YsnJ2dYW5uDkdHR6lNcnJygfdXr15d67WdnR0A4NGjRwCA69evw8jICLVr19Zq5+XlpfX6/v37SE9PL1AO5F1CptFocPPmzWL3bWNjAwBwd3cvUJ4/nudx/fr1QseuVCpRq1YtqT5f1apVoVQqtcouX76MqKgoODo6am116tQB8O9CEG+//TZatWqFd999F87OznjnnXewadMmJkpERGSQCovJZmZmcHBwKFBeUkw2MjLSOlEKQIqT165de/7BEpUT3nNUCfx3pgjIu4fo6NGjmDhxIpo0aQIrKytoNBp07ty50D/MjY2NC+1XvICbJovad2HlL2I8T3v6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PREZGYnw8HB0794doaGheO2111C7dm0J9sSy1apVC7169cLq1ashCAJ69eqFmjVr6tsvXLgAjUaD9u3b69fZ29vjhRdeQHJyssG22rZtq/9zamoq7t27h+7duxv0KS4uNrgsgIiIqg9m87PBbCYxsTiyEvn5+ejduzf+7//+77G22rVrw9bWFnFxcThy5Ah2796NxYsX44MPPsCxY8dQv359rFq1CqNHj8bOnTuxceNGfPjhh4iLi8OLL74owd5YtmHDhmHUqFEAgCVLllR6O87Ozvo/5+fnAwB27NiBOnXqGPRTqVSV/gwiIpIOs/nZYTaTWHjPkZVo3bo1zp49i3r16iEwMNBgKftFVygUaN++PaZPn47ffvsNSqUSW7du1W+jVatWmDx5Mo4cOYLnn38e69evl2p3LFqPHj1QXFwMjUaD8PBwg7aGDRtCqVTi8OHD+nUajQbHjx9HcHBwudsMDg6GSqVCenr6Y39/fn5+VbYvRERUdZjNzw6zmcTCmaNqKDc3F0lJSQbrRowYgRUrVmDAgAGYOHEiPD09kZqaig0bNuDLL7/EiRMnsGfPHoSFhcHLywvHjh3DzZs30bRpU6SlpeGLL77AK6+8Al9fX6SkpOD8+fMYMmSINDto4WxtbfXT8La2tgZtzs7OGDlyJCZMmABPT0/4+/tjzpw5uHfvHqKiosrdpqurK8aPH4+YmBjodDp06NABubm5OHz4MNRqNSIiIqp0n4iI6Okwm6XFbCaxsDiqhuLj4x+71jUqKgqHDx/Ge++9h7CwMBQVFSEgIAA9evSAjY0N1Go1Dhw4gAULFiAvLw8BAQGYO3cuevbsiaysLJw7dw5r1qzB7du3Ubt2bURHR+Pf//63RHto+dRqdblts2fPhk6nw+DBg3H37l20bdsWu3btgoeHh9Ftzpw5E7Vq1UJsbCwuXrwId3d3tG7dGu+//77YwyciIpExm6XHbCYxKARBEKQeBBERERERkdR4zxERERERERFYHBEREREREQFgcURERERERASAxREREREREREAFkdEREREREQAWBwREREREREBYHFEREREREQEgMURERERERERABZHJJLIyEj07dtX/3WXLl0wduzYZz6O+Ph4KBQK5OTklNtHoVBg27ZtJm9z2rRpaNmy5VON69KlS1AoFEhKSnqq7RAREZmK2Wwcs5mehMWRFYuMjIRCoYBCoYBSqURgYCBmzJiBkpKSKv/sLVu2YObMmSb1NeWgSUREZA2YzUSWzU7qAVDV6tGjB1atWoWioiL89NNPiI6Ohr29PSZPnvxY3+LiYiiVSlE+19PTU5TtEBERWRtmM5Hl4syRlVOpVPDx8UFAQABGjhyJ0NBQ/PDDDwAeTLd/8skn8PX1RVBQEADgypUreO211+Du7g5PT0/06dMHly5d0m9Tq9Vi3LhxcHd3R40aNTBx4kQIgmDwuY9O3RcVFeG9996Dn58fVCoVAgMD8dVXX+HSpUvo2rUrAMDDwwMKhQKRkZEAAJ1Oh9jYWNSvXx+Ojo5o0aIFNm/ebPA5P/30Exo3bgxHR0d07drVYJymeu+999C4cWM4OTmhQYMG+Oijj6DRaB7r99///hd+fn5wcnLCa6+9htzcXIP2L7/8Ek2bNoWDgwOaNGmCpUuXmj0WIiKyfszmijGbSSosjmTG0dERxcXF+q/37NmDlJQUxMXFYfv27dBoNAgPD4erqysOHjyIw4cPw8XFBT169NB/39y5c7F69WqsXLkShw4dQnZ2NrZu3Wr0c4cMGYJvv/0WixYtQnJyMv773//CxcUFfn5++P777wEAKSkpyMjIwMKFCwEAsbGxWLt2LZYvX46zZ88iJiYGgwYNwv79+wGUBkW/fv3Qu3dvJCUl4a233sKkSZPM/pm4urpi9erV+OOPP7Bw4UKsWLEC8+fPN+iTmpqKTZs24ccff8TOnTvx22+/4T//+Y++fd26dZgyZQo++eQTJCcnY9asWfjoo4+wZs0as8dDRETywmx+HLOZJCOQ1YqIiBD69OkjCIIg6HQ6IS4uTlCpVML48eP17d7e3kJRUZH+e77++mshKChI0Ol0+nVFRUWCo6OjsGvXLkEQBKF27drCnDlz9O0ajUaoW7eu/rMEQRA6d+4sjBkzRhAEQUhJSREACHFxcU8c5759+wQAwp07d/TrCgsLBScnJ+HIkSMGfaOiooQBAwYIgiAIkydPFoKDgw3a33vvvce29SgAwtatW8tt//TTT4U2bdrov546dapga2srXL16Vb/u559/FmxsbISMjAxBEAShYcOGwvr16w22M3PmTCEkJEQQBEFIS0sTAAi//fZbuZ9LRETWj9n8ZMxmshS858jKbd++HS4uLtBoNNDpdHjzzTcxbdo0fXuzZs0MrmU+deoUUlNT4erqarCdwsJCXLhwAbm5ucjIyEC7du30bXZ2dmjbtu1j0/dlkpKSYGtri86dO5s87tTUVNy7dw/du3c3WF9cXIxWrVoBAJKTkw3GAQAhISEmf0aZjRs3YtGiRbhw4QLy8/NRUlICtVpt0Mff3x916tQx+BydToeUlBS4urriwoULiIqKwvDhw/V9SkpK4ObmZvZ4iIjIujGbK8ZsJqmwOLJyXbt2xbJly6BUKuHr6ws7O8O/cmdnZ4Ov8/Pz0aZNG6xbt+6xbdWqVatSY3B0dDT7e/Lz8wEAO3bsMDjwAaXXaoslISEBAwcOxPTp0xEeHg43Nzds2LABc+fONXusK1aseCwQbG1tRRsrERFZB2azccxmkhKLIyvn7OyMwMBAk/u3bt0aGzduhJeX12NnaMrUrl0bx44dQ6dOnQCUnoVJTExE69atn9i/WbNm0Ol02L9/P0JDQx9rLzs7ptVq9euCg4OhUqmQnp5e7lmtpk2b6m9gLXP06NGKd/IhR44cQUBAAD744AP9usuXLz/WLz09HdevX4evr6/+c2xsbBAUFARvb2/4+vri4sWLGDhwoFmfT0RE8sNsNo7ZTFLiAxnIwMCBA1GzZk306dMHBw8eRFpaGuLj4zF69GhcvXoVADBmzBjMnj0b27Ztw7lz5/Cf//zH6HsQ6tWrh4iICAwbNgzbtm3Tb3PTpk0AgICAACgUCmzfvh03b95Efn4+XF1dMX78eMTExGDNmjW4cOECTp48icWLF+tvpHz77bdx/vx5TJgwASkpKVi/fj1Wr15t1v42atQI6enp2LBhAy5cuIBFixY98QZWBwcHRERE4NSpUzh48CBGjx6N1157DT4+PgCA6dOnIzY2FosWLcKff/6J33//HatWrcK8efPMGg8REdGjmM3MZnqGpL7piarOwzd9mtOekZEhDBkyRKhZs6agUqmEBg0aCMOHDxdyc3MFQSi9yXPMmDGCWq0W3N3dhXHjxglDhgwp96ZPQRCE+/fvCzExMULt2rUFpVIpBAYGCitXrtS3z5gxQ/Dx8REUCoUQEREhCELpjaoLFiwQgoKCBHt7e6FWrVpCeHi4sH//fv33/fjjj0JgYKCgUqmEjh07CitXrjT7ps8JEyYINWrUEFxcXITXX39dmD9/vuDm5qZvnzp1qtCiRQth6dKlgq+vr+Dg4CC8+uqrQnZ2tsF2161bJ7Rs2VJQKpWCh4eH0KlTJ2HLli2CIPCmTyIiKsVsfjJmM1kKhSCUc6ceERERERGRjPCyOiIiIiIiIrA4IiIiIiIiAsDiiIiIiIiICACLIyIiIiIiIgAsjoiIiIiIiACwOCIiIiIiIgLA4oiIiIiIiAgAiyMiIiIiIiIALI6IiIiIiIgAsDgiIiIiIiICwOKIiIiIiIgIAPD/Dv21vrIiv9IAAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from sklearn.metrics import ConfusionMatrixDisplay\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "_, ax = plt.subplots(int(len(class_models) / 2), 2, figsize=(12, 10), sharex=False, sharey=False)\n",
+ "for index, key in enumerate(class_models.keys()):\n",
+ " c_matrix = class_models[key][\"Confusion_matrix\"]\n",
+ " disp = ConfusionMatrixDisplay(\n",
+ " confusion_matrix=c_matrix, display_labels=[\"Less\", \"More\"]\n",
+ " ).plot(ax=ax.flat[index])\n",
+ " disp.ax_.set_title(key)\n",
+ "\n",
+ "plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.1)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Значение 2173 в желтом квадрате представляет собой количество объектов, относимых к классу \"Less\", которые модель правильно классифицировала. Это свидетельствует о высоком уровне точности в идентификации этого класса. Значение 2150 в жёлтом нижнем правом квадрате указывает на количество правильно классифицированных объектов класса \"More\". Хотя это также является положительным результатом, мы можем заметить, что он местами ниже, чем для класса \"Less\", а местами и выше.\n",
+ "\n",
+ "Точность, полнота, верность (аккуратность), F-мера"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 155,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Precision_train | \n",
+ " Precision_test | \n",
+ " Recall_train | \n",
+ " Recall_test | \n",
+ " Accuracy_train | \n",
+ " Accuracy_test | \n",
+ " F1_train | \n",
+ " F1_test | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " logistic | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 0.999767 | \n",
+ " 1.000000 | \n",
+ " 0.999884 | \n",
+ " 1.000000 | \n",
+ " 0.999884 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " ridge | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 0.999651 | \n",
+ " 1.000000 | \n",
+ " 0.999826 | \n",
+ " 1.000000 | \n",
+ " 0.999826 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " decision_tree | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " gradient_boosting | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " random_forest | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " naive_bayes | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 0.786719 | \n",
+ " 0.793953 | \n",
+ " 0.893927 | \n",
+ " 0.897525 | \n",
+ " 0.880630 | \n",
+ " 0.885144 | \n",
+ "
\n",
+ " \n",
+ " knn | \n",
+ " 0.872486 | \n",
+ " 0.827473 | \n",
+ " 0.857774 | \n",
+ " 0.820930 | \n",
+ " 0.866917 | \n",
+ " 0.825815 | \n",
+ " 0.865068 | \n",
+ " 0.824189 | \n",
+ "
\n",
+ " \n",
+ " mlp | \n",
+ " 0.687500 | \n",
+ " 0.615385 | \n",
+ " 0.002558 | \n",
+ " 0.003721 | \n",
+ " 0.503355 | \n",
+ " 0.503354 | \n",
+ " 0.005098 | \n",
+ " 0.007397 | \n",
+ "
\n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 155,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
+ " [\n",
+ " \"Precision_train\",\n",
+ " \"Precision_test\",\n",
+ " \"Recall_train\",\n",
+ " \"Recall_test\",\n",
+ " \"Accuracy_train\",\n",
+ " \"Accuracy_test\",\n",
+ " \"F1_train\",\n",
+ " \"F1_test\",\n",
+ " ]\n",
+ "]\n",
+ "class_metrics.sort_values(\n",
+ " by=\"Accuracy_test\", ascending=False\n",
+ ").style.background_gradient(\n",
+ " cmap=\"plasma\",\n",
+ " low=0.3,\n",
+ " high=1,\n",
+ " subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n",
+ ").background_gradient(\n",
+ " cmap=\"viridis\",\n",
+ " low=1,\n",
+ " high=0.3,\n",
+ " subset=[\n",
+ " \"Precision_train\",\n",
+ " \"Precision_test\",\n",
+ " \"Recall_train\",\n",
+ " \"Recall_test\",\n",
+ " ],\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Действительно, если модели, включая логистическую регрессию (есть исключения), ридж-регрессию (есть исключения), дерево решений, случайный лес и градиентный бустинг, показывают 100% точность на обучающей выборке, это может свидетельствовать о переобучении. Переобучение (overfitting) происходит, когда модель слишком хорошо подстраивается под обучающие данные, включая шум и случайные вариации, и начинает плохо работать на новых данных (например, на тестовой выборке). \n",
+ "\n",
+ "ROC-кривая, каппа Коэна, коэффициент корреляции Мэтьюса"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 156,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Accuracy_test | \n",
+ " F1_test | \n",
+ " ROC_AUC_test | \n",
+ " Cohen_kappa_test | \n",
+ " MCC_test | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " logistic | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " ridge | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " decision_tree | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " gradient_boosting | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " random_forest | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " naive_bayes | \n",
+ " 0.897525 | \n",
+ " 0.885144 | \n",
+ " 0.999566 | \n",
+ " 0.794820 | \n",
+ " 0.812098 | \n",
+ "
\n",
+ " \n",
+ " knn | \n",
+ " 0.825815 | \n",
+ " 0.824189 | \n",
+ " 0.910823 | \n",
+ " 0.651606 | \n",
+ " 0.651627 | \n",
+ "
\n",
+ " \n",
+ " mlp | \n",
+ " 0.503354 | \n",
+ " 0.007397 | \n",
+ " 0.497071 | \n",
+ " 0.001427 | \n",
+ " 0.012966 | \n",
+ "
\n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 156,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
+ " [\n",
+ " \"Accuracy_test\",\n",
+ " \"F1_test\",\n",
+ " \"ROC_AUC_test\",\n",
+ " \"Cohen_kappa_test\",\n",
+ " \"MCC_test\",\n",
+ " ]\n",
+ "]\n",
+ "class_metrics.sort_values(by=\"ROC_AUC_test\", ascending=False).style.background_gradient(\n",
+ " cmap=\"plasma\",\n",
+ " low=0.3,\n",
+ " high=1,\n",
+ " subset=[\n",
+ " \"ROC_AUC_test\",\n",
+ " \"MCC_test\",\n",
+ " \"Cohen_kappa_test\",\n",
+ " ],\n",
+ ").background_gradient(\n",
+ " cmap=\"viridis\",\n",
+ " low=1,\n",
+ " high=0.3,\n",
+ " subset=[\n",
+ " \"Accuracy_test\",\n",
+ " \"F1_test\",\n",
+ " ],\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 157,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'logistic'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "best_model = str(class_metrics.sort_values(by=\"MCC_test\", ascending=False).iloc[0].name)\n",
+ "\n",
+ "display(best_model)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Вывод данных с ошибкой предсказания для оценки**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 158,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'Error items count: 0'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " Predicted | \n",
+ " date | \n",
+ " price | \n",
+ " bedrooms | \n",
+ " bathrooms | \n",
+ " sqft_living | \n",
+ " sqft_lot | \n",
+ " floors | \n",
+ " waterfront | \n",
+ " ... | \n",
+ " sqft_basement | \n",
+ " yr_built | \n",
+ " yr_renovated | \n",
+ " zipcode | \n",
+ " lat | \n",
+ " long | \n",
+ " sqft_living15 | \n",
+ " sqft_lot15 | \n",
+ " above_median_price | \n",
+ " price_category | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0 rows × 24 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [id, Predicted, date, price, bedrooms, bathrooms, sqft_living, sqft_lot, floors, waterfront, view, condition, grade, sqft_above, sqft_basement, yr_built, yr_renovated, zipcode, lat, long, sqft_living15, sqft_lot15, above_median_price, price_category]\n",
+ "Index: []\n",
+ "\n",
+ "[0 rows x 24 columns]"
+ ]
+ },
+ "execution_count": 158,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "preprocessing_result = pipeline_end.transform(X_test)\n",
+ "preprocessed_df = pd.DataFrame(\n",
+ " preprocessing_result,\n",
+ " columns=pipeline_end.get_feature_names_out(),\n",
+ ")\n",
+ "\n",
+ "y_pred = class_models[best_model][\"preds\"]\n",
+ "\n",
+ "error_index = y_test[y_test[\"above_median_price\"] != y_pred].index.tolist()\n",
+ "display(f\"Error items count: {len(error_index)}\")\n",
+ "\n",
+ "error_predicted = pd.Series(y_pred, index=y_test.index).loc[error_index]\n",
+ "error_df = X_test.loc[error_index].copy()\n",
+ "error_df.insert(loc=1, column=\"Predicted\", value=error_predicted)\n",
+ "error_df.sort_index()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 159,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " date | \n",
+ " price | \n",
+ " bedrooms | \n",
+ " bathrooms | \n",
+ " sqft_living | \n",
+ " sqft_lot | \n",
+ " floors | \n",
+ " waterfront | \n",
+ " view | \n",
+ " ... | \n",
+ " sqft_basement | \n",
+ " yr_built | \n",
+ " yr_renovated | \n",
+ " zipcode | \n",
+ " lat | \n",
+ " long | \n",
+ " sqft_living15 | \n",
+ " sqft_lot15 | \n",
+ " above_median_price | \n",
+ " price_category | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 6863 | \n",
+ " 1124000050 | \n",
+ " 20140729T000000 | \n",
+ " 461000.0 | \n",
+ " 4 | \n",
+ " 1.0 | \n",
+ " 1260 | \n",
+ " 8505 | \n",
+ " 1.5 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1951 | \n",
+ " 0 | \n",
+ " 98177 | \n",
+ " 47.7181 | \n",
+ " -122.371 | \n",
+ " 1480 | \n",
+ " 8100 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id date price bedrooms bathrooms sqft_living \\\n",
+ "6863 1124000050 20140729T000000 461000.0 4 1.0 1260 \n",
+ "\n",
+ " sqft_lot floors waterfront view ... sqft_basement yr_built yr_renovated \\\n",
+ "6863 8505 1.5 0 0 ... 0 1951 0 \n",
+ "\n",
+ " zipcode lat long sqft_living15 sqft_lot15 above_median_price \\\n",
+ "6863 98177 47.7181 -122.371 1480 8100 1 \n",
+ "\n",
+ " price_category \n",
+ "6863 1 \n",
+ "\n",
+ "[1 rows x 23 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sqft_living | \n",
+ " sqft_lot | \n",
+ " above_median_price | \n",
+ " id | \n",
+ " price | \n",
+ " bedrooms | \n",
+ " bathrooms | \n",
+ " floors | \n",
+ " waterfront | \n",
+ " view | \n",
+ " ... | \n",
+ " sqft_basement | \n",
+ " yr_built | \n",
+ " yr_renovated | \n",
+ " zipcode | \n",
+ " lat | \n",
+ " long | \n",
+ " sqft_living15 | \n",
+ " sqft_lot15 | \n",
+ " price_category | \n",
+ " Living_area_to_Lot_ratio | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 6863 | \n",
+ " -0.891006 | \n",
+ " -0.162689 | \n",
+ " 1.005335 | \n",
+ " 1.124000e+09 | \n",
+ " 461000.0 | \n",
+ " 4.0 | \n",
+ " 1.0 | \n",
+ " 1.5 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " ... | \n",
+ " 0.0 | \n",
+ " 1951.0 | \n",
+ " 0.0 | \n",
+ " 98177.0 | \n",
+ " 47.7181 | \n",
+ " -122.371 | \n",
+ " 1480.0 | \n",
+ " 8100.0 | \n",
+ " 1.0 | \n",
+ " 5.476729 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sqft_living sqft_lot above_median_price id price \\\n",
+ "6863 -0.891006 -0.162689 1.005335 1.124000e+09 461000.0 \n",
+ "\n",
+ " bedrooms bathrooms floors waterfront view ... sqft_basement \\\n",
+ "6863 4.0 1.0 1.5 0.0 0.0 ... 0.0 \n",
+ "\n",
+ " yr_built yr_renovated zipcode lat long sqft_living15 \\\n",
+ "6863 1951.0 0.0 98177.0 47.7181 -122.371 1480.0 \n",
+ "\n",
+ " sqft_lot15 price_category Living_area_to_Lot_ratio \n",
+ "6863 8100.0 1.0 5.476729 \n",
+ "\n",
+ "[1 rows x 23 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'predicted: 1 (proba: [0. 1.])'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'real: 1'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model = class_models[best_model][\"pipeline\"]\n",
+ "\n",
+ "example_id = 6863\n",
+ "test = pd.DataFrame(X_test.loc[example_id, :]).T\n",
+ "test_preprocessed = pd.DataFrame(preprocessed_df.loc[example_id, :]).T\n",
+ "display(test)\n",
+ "display(test_preprocessed)\n",
+ "result_proba = model.predict_proba(test)[0]\n",
+ "result = model.predict(test)[0]\n",
+ "real = int(y_test.loc[example_id].values[0])\n",
+ "display(f\"predicted: {result} (proba: {result_proba})\")\n",
+ "display(f\"real: {real}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Подбор гиперпараметров методом поиска по сетке**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 160,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "e:\\MII\\laboratory\\mai\\Lib\\site-packages\\numpy\\ma\\core.py:2881: RuntimeWarning: invalid value encountered in cast\n",
+ " _data = np.array(data, dtype=dtype, copy=copy,\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "{'model__criterion': 'gini',\n",
+ " 'model__max_depth': 5,\n",
+ " 'model__max_features': 'sqrt',\n",
+ " 'model__n_estimators': 10}"
+ ]
+ },
+ "execution_count": 160,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.model_selection import GridSearchCV\n",
+ "\n",
+ "optimized_model_type = \"random_forest\"\n",
+ "\n",
+ "random_forest_model = class_models[optimized_model_type][\"pipeline\"]\n",
+ "\n",
+ "param_grid = {\n",
+ " \"model__n_estimators\": [10, 50, 100],\n",
+ " \"model__max_features\": [\"sqrt\", \"log2\"],\n",
+ " \"model__max_depth\": [5, 7, 10],\n",
+ " \"model__criterion\": [\"gini\", \"entropy\"],\n",
+ "}\n",
+ "\n",
+ "gs_optomizer = GridSearchCV(\n",
+ " estimator=random_forest_model, param_grid=param_grid, n_jobs=-1\n",
+ ")\n",
+ "gs_optomizer.fit(X_train, y_train.values.ravel())\n",
+ "gs_optomizer.best_params_"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Обучение модели с новыми гиперпараметрами"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 161,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "optimized_model = ensemble.RandomForestClassifier(\n",
+ " random_state=random_state,\n",
+ " criterion=\"gini\",\n",
+ " max_depth=5,\n",
+ " max_features=\"log2\",\n",
+ " n_estimators=10,\n",
+ ")\n",
+ "\n",
+ "result = {}\n",
+ "\n",
+ "result[\"pipeline\"] = Pipeline([(\"pipeline\", pipeline_end), (\"model\", optimized_model)]).fit(X_train, y_train.values.ravel())\n",
+ "result[\"train_preds\"] = result[\"pipeline\"].predict(X_train)\n",
+ "result[\"probs\"] = result[\"pipeline\"].predict_proba(X_test)[:, 1]\n",
+ "result[\"preds\"] = np.where(result[\"probs\"] > 0.5, 1, 0)\n",
+ "\n",
+ "result[\"Precision_train\"] = metrics.precision_score(y_train, result[\"train_preds\"])\n",
+ "result[\"Precision_test\"] = metrics.precision_score(y_test, result[\"preds\"])\n",
+ "result[\"Recall_train\"] = metrics.recall_score(y_train, result[\"train_preds\"])\n",
+ "result[\"Recall_test\"] = metrics.recall_score(y_test, result[\"preds\"])\n",
+ "result[\"Accuracy_train\"] = metrics.accuracy_score(y_train, result[\"train_preds\"])\n",
+ "result[\"Accuracy_test\"] = metrics.accuracy_score(y_test, result[\"preds\"])\n",
+ "result[\"ROC_AUC_test\"] = metrics.roc_auc_score(y_test, result[\"probs\"])\n",
+ "result[\"F1_train\"] = metrics.f1_score(y_train, result[\"train_preds\"])\n",
+ "result[\"F1_test\"] = metrics.f1_score(y_test, result[\"preds\"])\n",
+ "result[\"MCC_test\"] = metrics.matthews_corrcoef(y_test, result[\"preds\"])\n",
+ "result[\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(y_test, result[\"preds\"])\n",
+ "result[\"Confusion_matrix\"] = metrics.confusion_matrix(y_test, result[\"preds\"])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Формирование данных для оценки старой и новой версии модели**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 162,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "optimized_metrics = pd.DataFrame(columns=list(result.keys()))\n",
+ "optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n",
+ " data=class_models[optimized_model_type]\n",
+ ")\n",
+ "optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n",
+ " data=result\n",
+ ")\n",
+ "optimized_metrics.insert(loc=0, column=\"Name\", value=[\"Old\", \"New\"])\n",
+ "optimized_metrics = optimized_metrics.set_index(\"Name\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Оценка параметров старой и новой модели**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 163,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Precision_train | \n",
+ " Precision_test | \n",
+ " Recall_train | \n",
+ " Recall_test | \n",
+ " Accuracy_train | \n",
+ " Accuracy_test | \n",
+ " F1_train | \n",
+ " F1_test | \n",
+ "
\n",
+ " \n",
+ " Name | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Old | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " New | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 163,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "optimized_metrics[\n",
+ " [\n",
+ " \"Precision_train\",\n",
+ " \"Precision_test\",\n",
+ " \"Recall_train\",\n",
+ " \"Recall_test\",\n",
+ " \"Accuracy_train\",\n",
+ " \"Accuracy_test\",\n",
+ " \"F1_train\",\n",
+ " \"F1_test\",\n",
+ " ]\n",
+ "].style.background_gradient(\n",
+ " cmap=\"plasma\",\n",
+ " low=0.3,\n",
+ " high=1,\n",
+ " subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n",
+ ").background_gradient(\n",
+ " cmap=\"viridis\",\n",
+ " low=1,\n",
+ " high=0.3,\n",
+ " subset=[\n",
+ " \"Precision_train\",\n",
+ " \"Precision_test\",\n",
+ " \"Recall_train\",\n",
+ " \"Recall_test\",\n",
+ " ],\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Как для обучающей (Precision_train), так и для тестовой (Precision_test) выборки обе модели достигли идеальных значений 1.000000. Это указывает на то, что модели очень точно классифицируют положительные образцы, не пропуская их."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 164,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Accuracy_test | \n",
+ " F1_test | \n",
+ " ROC_AUC_test | \n",
+ " Cohen_kappa_test | \n",
+ " MCC_test | \n",
+ "
\n",
+ " \n",
+ " Name | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Old | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " New | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 164,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "optimized_metrics[\n",
+ " [\n",
+ " \"Accuracy_test\",\n",
+ " \"F1_test\",\n",
+ " \"ROC_AUC_test\",\n",
+ " \"Cohen_kappa_test\",\n",
+ " \"MCC_test\",\n",
+ " ]\n",
+ "].style.background_gradient(\n",
+ " cmap=\"plasma\",\n",
+ " low=0.3,\n",
+ " high=1,\n",
+ " subset=[\n",
+ " \"ROC_AUC_test\",\n",
+ " \"MCC_test\",\n",
+ " \"Cohen_kappa_test\",\n",
+ " ],\n",
+ ").background_gradient(\n",
+ " cmap=\"viridis\",\n",
+ " low=1,\n",
+ " high=0.3,\n",
+ " subset=[\n",
+ " \"Accuracy_test\",\n",
+ " \"F1_test\",\n",
+ " ],\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Оба варианта модели продемонстрировали безупречную точность классификации, достигнув значения 1.000000. Это свидетельствует о том, что модели точно классифицировали все тестовые примеры, не допустив никаких ошибок в предсказаниях."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 165,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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S0s1fvx4RUREqF69epo0aVK592KcXRZSWFioyZMnKy4uTsHBwWrRooVeeuklffvtt+rRo4ckqW7durLZbBoxYoQkyeFwKD09XU2bNlVoaKjatm2r1157ze3nvPvuu7riiisUGhqqHj16uPXTqMmTJ+uKK65QrVq11KxZMz3yyCMqLi4ud95zzz2nuLg41apVS7fddpvy8vLcjr/44otq3bq1QkJC1KpVK/3zn//0uC/wEofTvA1ApSLXLo5cA7lmDDNpsIzQ0FD9+OOPrs9r1qyR3W7XqlWrJEnFxcVKSUlRUlKSPv74Y9WoUUN/+ctf1KtXL23dulVBQUF64okntHDhQs2fP1+tW7fWE088oTfffFPXX3/9eX/usGHDlJmZqdmzZ6tt27bau3evfvjhB8XFxen111/XgAEDlJ2dLbvdrtDQUElSenq6XnnlFc2bN0+XX3651q1bpyFDhqhBgwbq1q2bDhw4oP79+ys1NVVjxozRpk2b9MADD3j8dxIWFqaFCxcqNjZWX375pUaPHq2wsDBNmjTJdc6uXbv06quv6u2331Z+fr5GjRqlP/7xj1q8eLEkafHixZo6daqeffZZtW/fXl988YVGjx6t2rVra/jw4R73CVWM98kAPotcK49cA7lmDIM0eJ3T6dSaNWv0/vvv695773Xtr127tl588UVXOcgrr7wih8OhF198UTabTZK0YMECRUREKCMjQ8nJyXrqqac0ZcoU9e/fX5I0b948vf/+++f92d98841effVVrVq1Sj179pQkNWvWzHW8rIQkKipKERERks7coZwxY4ZWr16tpKQk13fWr1+v5557Tt26ddPcuXPVvHlzPfHEE5Kkli1b6ssvv9Tf/vY3j/5uHn74YdefmzRpogkTJmjp0qVuYXb69Gm9/PLLuuyyyyRJzzzzjPr06aMnnnhCMTExevTRR/XEE0+4/k6aNm2qr7/+Ws899xxhBgCVgFw7P3INMIZBGrxmxYoVqlOnjoqLi+VwODRo0CClpaW5jicmJrrV62/ZskW7du1SWFiYWzunT5/W7t27lZeXp0OHDqlz586uYzVq1FCnTp3KlYaUycrKUmBgoLp162a437t27dKpU6d04403uu0vKipS+/btJUnbt29364ckV/B5YtmyZZo9e7Z2796tgoIClZSUyG63u53TuHFjV5CV/RyHw6Hs7GyFhYVp9+7dGjVqlEaPHu06p6SkROHh4R73B17glEl3HCveBIALI9cujlwDuWYMgzR4TY8ePTR37lwFBQUpNjZWNWq4/3OsXbu22+eCggJ17NjRVe7waw0aNLikPpSVeXiioKBAkvTOO++4hYh05nkEs2RmZmrw4MGaNm2aUlJSFB4erqVLl7ruYnrS1xdeeKFcuAYGBprWV1QiykIAn0GuXRi5BknkmkEM0uA1tWvXVosWLQyf36FDBy1btkxRUVHl7rqVadiwoT799FN17dpV0pk7a5s3b1aHDh3OeX5iYqIcDofWrl3rKgv5tbI7nqWlpa59CQkJCg4O1v79+897p7J169auh8XLfPLJJxe/yF/ZuHGj4uPj9ec//9m1b9++feXO279/vw4ePKjY2FjXzwkICFDLli0VHR2t2NhY7dmzR4MHD/bo5wMAPEOuXRi5BhjH6o7wGYMHD1b9+vV1yy236OOPP9bevXuVkZGh++67T999950k6U9/+pNmzpyp5cuXa8eOHfrjH/94wXfBNGnSRMOHD9fIkSO1fPlyV5uvvvqqJCk+Pl42m00rVqzQkSNHVFBQoLCwME2YMEHjxo3TokWLtHv3bn3++ed65plntGjRIknS3XffrZ07d2rixInKzs7WkiVLtHDhQo+u9/LLL9f+/fu1dOlS7d69W7Nnz9abb75Z7ryQkBANHz5cW7Zs0ccff6z77rtPt912m2JiYiRJ06ZNU3p6umbPnq1vvvlGX375pRYsWKAnn3zSo/7ASxwO8zYAlkKukWvVErlmCIM0+IxatWpp3bp1aty4sfr376/WrVtr1KhROn36tOsO5AMPPKChQ4dq+PDhSkpKUlhYmH7/+99fsN25c+fq1ltv1R//+Ee1atVKo0eP1smTJyVJl112maZNm6YHH3xQ0dHRGjt2rCRp+vTpeuSRR5Senq7WrVurV69eeuedd9S0aVNJZ+rpX3/9dS1fvlxt27bVvHnzNGPGDI+u9+abb9a4ceM0duxYtWvXThs3btQjjzxS7rwWLVqof//+uummm5ScnKw2bdq4LUV855136sUXX9SCBQuUmJiobt26aeHCha6+AgC8g1wj14DzsTnP9+QpAMBr8vPzFR4erp4NRqlGQMVfeFviKNLqIy8pLy/vvGVVAABUFnLNMzyTBgBWxgPWAAB/Qq4ZQrkjAAAAAFgIM2kAYGUOp0x5GYzDv+84AgB8BLlmCIM0ALAwp9Mhp7PiK1iZ0QYAABVFrhlDuSMAAAAAWAgzaQBgZU6nOSUdfv6ANQDAR5BrhjBIAwArc5pUu+/nYQYA8BHkmiGUOwIAAACAhTCTBgBW5nBINhMejvbzB6wBAD6CXDOEQRoAWBllIQAAf0KuGUK5IwAAAABYCDNpAGBhTodDThPKQvz9fTIAAN9ArhnDTBoAAAAAWAgzaQBgZdTuAwD8CblmCIM0ALAyh1OyEWYAAD9BrhlCuSMAAAAAWAgzaQBgZU6nJDPeJ+PfdxwBAD6CXDOEQRoAWJjT4ZTThLIQp5+HGQDAN5BrxlDuCAAAAAAWwiANAKzM6TBvuwRz5sxRkyZNFBISos6dO+t///ufyRcIAKhWyDVDGKQBgIU5HU7TNk8tW7ZM48eP16OPPqrPP/9cbdu2VUpKig4fPlwJVwoAqA7INWMYpAEAzunJJ5/U6NGjdccddyghIUHz5s1TrVq1NH/+fG93DQAAj/lSrjFIAwAr81JZSFFRkTZv3qyePXu69gUEBKhnz57KzMw0+yoBANUFuWYIqzsCgIWVqFgyYQGrEhVLkvLz8932BwcHKzg4uNz5P/zwg0pLSxUdHe22Pzo6Wjt27Kh4hwAA1RK5ZgyDNACwoKCgIMXExGh9zrumtVmnTh3FxcW57Xv00UeVlpZm2s8AAOBcyDXPMEgDAAsKCQnR3r17VVRUZFqbTqdTNpvNbd+57jZKUv369RUYGKjc3Fy3/bm5uYqJiTGtTwCA6oFc8wyDNACwqJCQEIWEhHjlZwcFBaljx45as2aN+vXrJ0lyOBxas2aNxo4d65U+AQB8G7lmHIM0AMA5jR8/XsOHD1enTp109dVX66mnntLJkyd1xx13eLtrAAB4zJdyjUEaAOCc/u///k9HjhzR1KlTlZOTo3bt2mnlypXlHroGAMAX+FKu2ZxOpwnrqwAAAAAAzMB70gAAAADAQhikAQAAAICFMEgDAAAAAAthkAYAAAAAFsIgDQAAAAAshEEaAAAAAFgIgzQAAAAAsBAGaQAAAABgIQzSAAAAAMBCGKQBAAAAgIUwSAMAAAAAC2GQBgAAAAAW8v/4Yp/SZxkVygAAAABJRU5ErkJggg==",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "_, ax = plt.subplots(1, 2, figsize=(10, 4), sharex=False, sharey=False\n",
+ ")\n",
+ "\n",
+ "for index in range(0, len(optimized_metrics)):\n",
+ " c_matrix = optimized_metrics.iloc[index][\"Confusion_matrix\"]\n",
+ " disp = ConfusionMatrixDisplay(\n",
+ " confusion_matrix=c_matrix, display_labels=[\"Less\", \"More\"]\n",
+ " ).plot(ax=ax.flat[index])\n",
+ "\n",
+ "plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.3)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "В желтом квадрате мы видим значение 2173, что обозначает количество правильно классифицированных объектов, отнесенных к классу \"Less\". Это свидетельствует о том, что модель успешно идентифицирует объекты этого класса, минимизируя количество ложных положительных срабатываний.\n",
+ "\n",
+ "В правом нижнем жёлтом квадрате значение 2150 указывает на количество правильно классифицированных объектов, отнесенных к классу \"More\". Это также является показателем высокой точности модели в определении объектов данного класса."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Задача регресии: предсказание цены дома (price).\n",
+ "\n",
+ "Описание: Оценить, какая будет цена дома (price) на основе исторических данных о характеристиках домов, таких как площадь. Целевая переменная: Цена дома (price). (среднее значение)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 166,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Среднее значение поля: 2079.8997362698374\n",
+ " id date price bedrooms bathrooms sqft_living \\\n",
+ "0 7129300520 20141013T000000 221900.0 3 1.00 1180 \n",
+ "1 6414100192 20141209T000000 538000.0 3 2.25 2570 \n",
+ "2 5631500400 20150225T000000 180000.0 2 1.00 770 \n",
+ "3 2487200875 20141209T000000 604000.0 4 3.00 1960 \n",
+ "4 1954400510 20150218T000000 510000.0 3 2.00 1680 \n",
+ "\n",
+ " sqft_lot floors waterfront view ... yr_built yr_renovated zipcode \\\n",
+ "0 5650 1.0 0 0 ... 1955 0 98178 \n",
+ "1 7242 2.0 0 0 ... 1951 1991 98125 \n",
+ "2 10000 1.0 0 0 ... 1933 0 98028 \n",
+ "3 5000 1.0 0 0 ... 1965 0 98136 \n",
+ "4 8080 1.0 0 0 ... 1987 0 98074 \n",
+ "\n",
+ " lat long sqft_living15 sqft_lot15 above_median_price \\\n",
+ "0 47.5112 -122.257 1340 5650 0 \n",
+ "1 47.7210 -122.319 1690 7639 1 \n",
+ "2 47.7379 -122.233 2720 8062 0 \n",
+ "3 47.5208 -122.393 1360 5000 1 \n",
+ "4 47.6168 -122.045 1800 7503 1 \n",
+ "\n",
+ " price_category average_price \n",
+ "0 0 0 \n",
+ "1 1 1 \n",
+ "2 0 0 \n",
+ "3 1 0 \n",
+ "4 1 0 \n",
+ "\n",
+ "[5 rows x 24 columns]\n",
+ "Статистическое описание DataFrame:\n",
+ " id price bedrooms bathrooms sqft_living \\\n",
+ "count 2.161300e+04 2.161300e+04 21613.000000 21613.000000 21613.000000 \n",
+ "mean 4.580302e+09 5.400881e+05 3.370842 2.114757 2079.899736 \n",
+ "std 2.876566e+09 3.671272e+05 0.930062 0.770163 918.440897 \n",
+ "min 1.000102e+06 7.500000e+04 0.000000 0.000000 290.000000 \n",
+ "25% 2.123049e+09 3.219500e+05 3.000000 1.750000 1427.000000 \n",
+ "50% 3.904930e+09 4.500000e+05 3.000000 2.250000 1910.000000 \n",
+ "75% 7.308900e+09 6.450000e+05 4.000000 2.500000 2550.000000 \n",
+ "max 9.900000e+09 7.700000e+06 33.000000 8.000000 13540.000000 \n",
+ "\n",
+ " sqft_lot floors waterfront view condition \\\n",
+ "count 2.161300e+04 21613.000000 21613.000000 21613.000000 21613.000000 \n",
+ "mean 1.510697e+04 1.494309 0.007542 0.234303 3.409430 \n",
+ "std 4.142051e+04 0.539989 0.086517 0.766318 0.650743 \n",
+ "min 5.200000e+02 1.000000 0.000000 0.000000 1.000000 \n",
+ "25% 5.040000e+03 1.000000 0.000000 0.000000 3.000000 \n",
+ "50% 7.618000e+03 1.500000 0.000000 0.000000 3.000000 \n",
+ "75% 1.068800e+04 2.000000 0.000000 0.000000 4.000000 \n",
+ "max 1.651359e+06 3.500000 1.000000 4.000000 5.000000 \n",
+ "\n",
+ " ... sqft_basement yr_built yr_renovated zipcode \\\n",
+ "count ... 21613.000000 21613.000000 21613.000000 21613.000000 \n",
+ "mean ... 291.509045 1971.005136 84.402258 98077.939805 \n",
+ "std ... 442.575043 29.373411 401.679240 53.505026 \n",
+ "min ... 0.000000 1900.000000 0.000000 98001.000000 \n",
+ "25% ... 0.000000 1951.000000 0.000000 98033.000000 \n",
+ "50% ... 0.000000 1975.000000 0.000000 98065.000000 \n",
+ "75% ... 560.000000 1997.000000 0.000000 98118.000000 \n",
+ "max ... 4820.000000 2015.000000 2015.000000 98199.000000 \n",
+ "\n",
+ " lat long sqft_living15 sqft_lot15 \\\n",
+ "count 21613.000000 21613.000000 21613.000000 21613.000000 \n",
+ "mean 47.560053 -122.213896 1986.552492 12768.455652 \n",
+ "std 0.138564 0.140828 685.391304 27304.179631 \n",
+ "min 47.155900 -122.519000 399.000000 651.000000 \n",
+ "25% 47.471000 -122.328000 1490.000000 5100.000000 \n",
+ "50% 47.571800 -122.230000 1840.000000 7620.000000 \n",
+ "75% 47.678000 -122.125000 2360.000000 10083.000000 \n",
+ "max 47.777600 -121.315000 6210.000000 871200.000000 \n",
+ "\n",
+ " above_median_price average_price \n",
+ "count 21613.000000 21613.00000 \n",
+ "mean 0.497340 0.42752 \n",
+ "std 0.500004 0.49473 \n",
+ "min 0.000000 0.00000 \n",
+ "25% 0.000000 0.00000 \n",
+ "50% 0.000000 0.00000 \n",
+ "75% 1.000000 1.00000 \n",
+ "max 1.000000 1.00000 \n",
+ "\n",
+ "[8 rows x 22 columns]\n"
+ ]
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "from sklearn import set_config\n",
+ "\n",
+ "set_config(transform_output=\"pandas\")\n",
+ "\n",
+ "# Опция для настройки генерации случайных чисел (если это нужно для других частей кода)\n",
+ "random_state = 42\n",
+ "\n",
+ "# Вычисление среднего значения поля \"Close\"\n",
+ "average_price = df['sqft_living'].mean()\n",
+ "print(f\"Среднее значение поля: {average_price}\")\n",
+ "\n",
+ "# Создание новой колонки, указывающей, выше или ниже среднего значение цена закрытия\n",
+ "df['average_price'] = (df['sqft_living'] > average_price).astype(int)\n",
+ "\n",
+ "# Удаление последней строки, где нет значения для следующего дня\n",
+ "df.dropna(inplace=True)\n",
+ "\n",
+ "# Вывод DataFrame с новой колонкой\n",
+ "print(df.head())\n",
+ "\n",
+ "# Примерный анализ данных\n",
+ "print(\"Статистическое описание DataFrame:\")\n",
+ "print(df.describe())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 167,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'X_train'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " date | \n",
+ " price | \n",
+ " bedrooms | \n",
+ " bathrooms | \n",
+ " sqft_living | \n",
+ " sqft_lot | \n",
+ " floors | \n",
+ " waterfront | \n",
+ " view | \n",
+ " ... | \n",
+ " sqft_basement | \n",
+ " yr_built | \n",
+ " yr_renovated | \n",
+ " zipcode | \n",
+ " lat | \n",
+ " long | \n",
+ " sqft_living15 | \n",
+ " sqft_lot15 | \n",
+ " above_median_price | \n",
+ " price_category | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 6325 | \n",
+ " 5467910190 | \n",
+ " 20140527T000000 | \n",
+ " 325000.0 | \n",
+ " 3 | \n",
+ " 1.75 | \n",
+ " 1780 | \n",
+ " 13095 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1983 | \n",
+ " 0 | \n",
+ " 98042 | \n",
+ " 47.3670 | \n",
+ " -122.152 | \n",
+ " 2750 | \n",
+ " 13095 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 13473 | \n",
+ " 9331800580 | \n",
+ " 20150310T000000 | \n",
+ " 257000.0 | \n",
+ " 2 | \n",
+ " 1.00 | \n",
+ " 1000 | \n",
+ " 3700 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 200 | \n",
+ " 1929 | \n",
+ " 0 | \n",
+ " 98118 | \n",
+ " 47.5520 | \n",
+ " -122.290 | \n",
+ " 1270 | \n",
+ " 5000 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 17614 | \n",
+ " 2407000405 | \n",
+ " 20150226T000000 | \n",
+ " 228500.0 | \n",
+ " 3 | \n",
+ " 1.00 | \n",
+ " 1080 | \n",
+ " 7486 | \n",
+ " 1.5 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 90 | \n",
+ " 1942 | \n",
+ " 0 | \n",
+ " 98146 | \n",
+ " 47.4838 | \n",
+ " -122.335 | \n",
+ " 1170 | \n",
+ " 7800 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 16970 | \n",
+ " 5466700290 | \n",
+ " 20150108T000000 | \n",
+ " 288000.0 | \n",
+ " 3 | \n",
+ " 2.25 | \n",
+ " 2090 | \n",
+ " 7500 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 810 | \n",
+ " 1977 | \n",
+ " 0 | \n",
+ " 98031 | \n",
+ " 47.3951 | \n",
+ " -122.172 | \n",
+ " 1800 | \n",
+ " 7350 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 20868 | \n",
+ " 3026059361 | \n",
+ " 20150417T000000 | \n",
+ " 479000.0 | \n",
+ " 2 | \n",
+ " 2.50 | \n",
+ " 1741 | \n",
+ " 1439 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 295 | \n",
+ " 2007 | \n",
+ " 0 | \n",
+ " 98034 | \n",
+ " 47.7043 | \n",
+ " -122.209 | \n",
+ " 2090 | \n",
+ " 10454 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 11964 | \n",
+ " 5272200045 | \n",
+ " 20141113T000000 | \n",
+ " 378000.0 | \n",
+ " 3 | \n",
+ " 1.50 | \n",
+ " 1000 | \n",
+ " 6914 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1947 | \n",
+ " 0 | \n",
+ " 98125 | \n",
+ " 47.7144 | \n",
+ " -122.319 | \n",
+ " 1000 | \n",
+ " 6947 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 21575 | \n",
+ " 9578500790 | \n",
+ " 20141111T000000 | \n",
+ " 399950.0 | \n",
+ " 3 | \n",
+ " 2.50 | \n",
+ " 3087 | \n",
+ " 5002 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2014 | \n",
+ " 0 | \n",
+ " 98023 | \n",
+ " 47.2974 | \n",
+ " -122.349 | \n",
+ " 2927 | \n",
+ " 5183 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 5390 | \n",
+ " 7202350480 | \n",
+ " 20140930T000000 | \n",
+ " 575000.0 | \n",
+ " 3 | \n",
+ " 2.50 | \n",
+ " 2120 | \n",
+ " 4780 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2004 | \n",
+ " 0 | \n",
+ " 98053 | \n",
+ " 47.6810 | \n",
+ " -122.032 | \n",
+ " 1690 | \n",
+ " 2650 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 860 | \n",
+ " 1723049033 | \n",
+ " 20140620T000000 | \n",
+ " 245000.0 | \n",
+ " 1 | \n",
+ " 0.75 | \n",
+ " 380 | \n",
+ " 15000 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1963 | \n",
+ " 0 | \n",
+ " 98168 | \n",
+ " 47.4810 | \n",
+ " -122.323 | \n",
+ " 1170 | \n",
+ " 15000 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 15795 | \n",
+ " 6147650280 | \n",
+ " 20150325T000000 | \n",
+ " 315000.0 | \n",
+ " 4 | \n",
+ " 2.50 | \n",
+ " 3130 | \n",
+ " 5999 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2006 | \n",
+ " 0 | \n",
+ " 98042 | \n",
+ " 47.3837 | \n",
+ " -122.099 | \n",
+ " 3020 | \n",
+ " 5997 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
17290 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id date price bedrooms bathrooms \\\n",
+ "6325 5467910190 20140527T000000 325000.0 3 1.75 \n",
+ "13473 9331800580 20150310T000000 257000.0 2 1.00 \n",
+ "17614 2407000405 20150226T000000 228500.0 3 1.00 \n",
+ "16970 5466700290 20150108T000000 288000.0 3 2.25 \n",
+ "20868 3026059361 20150417T000000 479000.0 2 2.50 \n",
+ "... ... ... ... ... ... \n",
+ "11964 5272200045 20141113T000000 378000.0 3 1.50 \n",
+ "21575 9578500790 20141111T000000 399950.0 3 2.50 \n",
+ "5390 7202350480 20140930T000000 575000.0 3 2.50 \n",
+ "860 1723049033 20140620T000000 245000.0 1 0.75 \n",
+ "15795 6147650280 20150325T000000 315000.0 4 2.50 \n",
+ "\n",
+ " sqft_living sqft_lot floors waterfront view ... sqft_basement \\\n",
+ "6325 1780 13095 1.0 0 0 ... 0 \n",
+ "13473 1000 3700 1.0 0 0 ... 200 \n",
+ "17614 1080 7486 1.5 0 0 ... 90 \n",
+ "16970 2090 7500 1.0 0 0 ... 810 \n",
+ "20868 1741 1439 2.0 0 0 ... 295 \n",
+ "... ... ... ... ... ... ... ... \n",
+ "11964 1000 6914 1.0 0 0 ... 0 \n",
+ "21575 3087 5002 2.0 0 0 ... 0 \n",
+ "5390 2120 4780 2.0 0 0 ... 0 \n",
+ "860 380 15000 1.0 0 0 ... 0 \n",
+ "15795 3130 5999 2.0 0 0 ... 0 \n",
+ "\n",
+ " yr_built yr_renovated zipcode lat long sqft_living15 \\\n",
+ "6325 1983 0 98042 47.3670 -122.152 2750 \n",
+ "13473 1929 0 98118 47.5520 -122.290 1270 \n",
+ "17614 1942 0 98146 47.4838 -122.335 1170 \n",
+ "16970 1977 0 98031 47.3951 -122.172 1800 \n",
+ "20868 2007 0 98034 47.7043 -122.209 2090 \n",
+ "... ... ... ... ... ... ... \n",
+ "11964 1947 0 98125 47.7144 -122.319 1000 \n",
+ "21575 2014 0 98023 47.2974 -122.349 2927 \n",
+ "5390 2004 0 98053 47.6810 -122.032 1690 \n",
+ "860 1963 0 98168 47.4810 -122.323 1170 \n",
+ "15795 2006 0 98042 47.3837 -122.099 3020 \n",
+ "\n",
+ " sqft_lot15 above_median_price price_category \n",
+ "6325 13095 0 1 \n",
+ "13473 5000 0 0 \n",
+ "17614 7800 0 0 \n",
+ "16970 7350 0 0 \n",
+ "20868 10454 1 1 \n",
+ "... ... ... ... \n",
+ "11964 6947 0 1 \n",
+ "21575 5183 0 1 \n",
+ "5390 2650 1 1 \n",
+ "860 15000 0 0 \n",
+ "15795 5997 0 1 \n",
+ "\n",
+ "[17290 rows x 23 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'y_train'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " average_price | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 6325 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 13473 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 17614 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 16970 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 20868 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 11964 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 21575 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 5390 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 860 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 15795 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
17290 rows × 1 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " average_price\n",
+ "6325 0\n",
+ "13473 0\n",
+ "17614 0\n",
+ "16970 1\n",
+ "20868 0\n",
+ "... ...\n",
+ "11964 0\n",
+ "21575 1\n",
+ "5390 1\n",
+ "860 0\n",
+ "15795 1\n",
+ "\n",
+ "[17290 rows x 1 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'X_test'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " date | \n",
+ " price | \n",
+ " bedrooms | \n",
+ " bathrooms | \n",
+ " sqft_living | \n",
+ " sqft_lot | \n",
+ " floors | \n",
+ " waterfront | \n",
+ " view | \n",
+ " ... | \n",
+ " sqft_basement | \n",
+ " yr_built | \n",
+ " yr_renovated | \n",
+ " zipcode | \n",
+ " lat | \n",
+ " long | \n",
+ " sqft_living15 | \n",
+ " sqft_lot15 | \n",
+ " above_median_price | \n",
+ " price_category | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 735 | \n",
+ " 2591820310 | \n",
+ " 20141006T000000 | \n",
+ " 365000.0 | \n",
+ " 4 | \n",
+ " 2.25 | \n",
+ " 2070 | \n",
+ " 8893 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1986 | \n",
+ " 0 | \n",
+ " 98058 | \n",
+ " 47.4388 | \n",
+ " -122.162 | \n",
+ " 2390 | \n",
+ " 7700 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2830 | \n",
+ " 7974200820 | \n",
+ " 20140821T000000 | \n",
+ " 865000.0 | \n",
+ " 5 | \n",
+ " 3.00 | \n",
+ " 2900 | \n",
+ " 6730 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 1070 | \n",
+ " 1977 | \n",
+ " 0 | \n",
+ " 98115 | \n",
+ " 47.6784 | \n",
+ " -122.285 | \n",
+ " 2370 | \n",
+ " 6283 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 4106 | \n",
+ " 7701450110 | \n",
+ " 20140815T000000 | \n",
+ " 1038000.0 | \n",
+ " 4 | \n",
+ " 2.50 | \n",
+ " 3770 | \n",
+ " 10893 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1997 | \n",
+ " 0 | \n",
+ " 98006 | \n",
+ " 47.5646 | \n",
+ " -122.129 | \n",
+ " 3710 | \n",
+ " 9685 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 16218 | \n",
+ " 9522300010 | \n",
+ " 20150331T000000 | \n",
+ " 1490000.0 | \n",
+ " 3 | \n",
+ " 3.50 | \n",
+ " 4560 | \n",
+ " 14608 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1990 | \n",
+ " 0 | \n",
+ " 98034 | \n",
+ " 47.6995 | \n",
+ " -122.228 | \n",
+ " 4050 | \n",
+ " 14226 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " 19964 | \n",
+ " 9510861140 | \n",
+ " 20140714T000000 | \n",
+ " 711000.0 | \n",
+ " 3 | \n",
+ " 2.50 | \n",
+ " 2550 | \n",
+ " 5376 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2004 | \n",
+ " 0 | \n",
+ " 98052 | \n",
+ " 47.6647 | \n",
+ " -122.083 | \n",
+ " 2250 | \n",
+ " 4050 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 13674 | \n",
+ " 6163900333 | \n",
+ " 20141110T000000 | \n",
+ " 338000.0 | \n",
+ " 3 | \n",
+ " 1.75 | \n",
+ " 1250 | \n",
+ " 7710 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1947 | \n",
+ " 0 | \n",
+ " 98155 | \n",
+ " 47.7623 | \n",
+ " -122.317 | \n",
+ " 1340 | \n",
+ " 7710 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 20377 | \n",
+ " 3528960020 | \n",
+ " 20140708T000000 | \n",
+ " 673000.0 | \n",
+ " 3 | \n",
+ " 2.75 | \n",
+ " 2830 | \n",
+ " 3496 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2012 | \n",
+ " 0 | \n",
+ " 98029 | \n",
+ " 47.5606 | \n",
+ " -122.011 | \n",
+ " 2160 | \n",
+ " 3501 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 8805 | \n",
+ " 1687000220 | \n",
+ " 20141016T000000 | \n",
+ " 285000.0 | \n",
+ " 4 | \n",
+ " 2.50 | \n",
+ " 2434 | \n",
+ " 4400 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2007 | \n",
+ " 0 | \n",
+ " 98001 | \n",
+ " 47.2874 | \n",
+ " -122.283 | \n",
+ " 2434 | \n",
+ " 4400 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 10168 | \n",
+ " 4141400030 | \n",
+ " 20141201T000000 | \n",
+ " 605000.0 | \n",
+ " 4 | \n",
+ " 1.75 | \n",
+ " 2250 | \n",
+ " 10108 | \n",
+ " 1.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 1967 | \n",
+ " 0 | \n",
+ " 98008 | \n",
+ " 47.5922 | \n",
+ " -122.118 | \n",
+ " 2050 | \n",
+ " 9750 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2522 | \n",
+ " 1822500160 | \n",
+ " 20141212T000000 | \n",
+ " 356500.0 | \n",
+ " 4 | \n",
+ " 2.50 | \n",
+ " 2570 | \n",
+ " 11473 | \n",
+ " 2.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " ... | \n",
+ " 0 | \n",
+ " 2008 | \n",
+ " 0 | \n",
+ " 98003 | \n",
+ " 47.2809 | \n",
+ " -122.296 | \n",
+ " 2430 | \n",
+ " 5997 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
4323 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id date price bedrooms bathrooms \\\n",
+ "735 2591820310 20141006T000000 365000.0 4 2.25 \n",
+ "2830 7974200820 20140821T000000 865000.0 5 3.00 \n",
+ "4106 7701450110 20140815T000000 1038000.0 4 2.50 \n",
+ "16218 9522300010 20150331T000000 1490000.0 3 3.50 \n",
+ "19964 9510861140 20140714T000000 711000.0 3 2.50 \n",
+ "... ... ... ... ... ... \n",
+ "13674 6163900333 20141110T000000 338000.0 3 1.75 \n",
+ "20377 3528960020 20140708T000000 673000.0 3 2.75 \n",
+ "8805 1687000220 20141016T000000 285000.0 4 2.50 \n",
+ "10168 4141400030 20141201T000000 605000.0 4 1.75 \n",
+ "2522 1822500160 20141212T000000 356500.0 4 2.50 \n",
+ "\n",
+ " sqft_living sqft_lot floors waterfront view ... sqft_basement \\\n",
+ "735 2070 8893 2.0 0 0 ... 0 \n",
+ "2830 2900 6730 1.0 0 0 ... 1070 \n",
+ "4106 3770 10893 2.0 0 2 ... 0 \n",
+ "16218 4560 14608 2.0 0 2 ... 0 \n",
+ "19964 2550 5376 2.0 0 0 ... 0 \n",
+ "... ... ... ... ... ... ... ... \n",
+ "13674 1250 7710 1.0 0 0 ... 0 \n",
+ "20377 2830 3496 2.0 0 0 ... 0 \n",
+ "8805 2434 4400 2.0 0 0 ... 0 \n",
+ "10168 2250 10108 1.0 0 0 ... 0 \n",
+ "2522 2570 11473 2.0 0 0 ... 0 \n",
+ "\n",
+ " yr_built yr_renovated zipcode lat long sqft_living15 \\\n",
+ "735 1986 0 98058 47.4388 -122.162 2390 \n",
+ "2830 1977 0 98115 47.6784 -122.285 2370 \n",
+ "4106 1997 0 98006 47.5646 -122.129 3710 \n",
+ "16218 1990 0 98034 47.6995 -122.228 4050 \n",
+ "19964 2004 0 98052 47.6647 -122.083 2250 \n",
+ "... ... ... ... ... ... ... \n",
+ "13674 1947 0 98155 47.7623 -122.317 1340 \n",
+ "20377 2012 0 98029 47.5606 -122.011 2160 \n",
+ "8805 2007 0 98001 47.2874 -122.283 2434 \n",
+ "10168 1967 0 98008 47.5922 -122.118 2050 \n",
+ "2522 2008 0 98003 47.2809 -122.296 2430 \n",
+ "\n",
+ " sqft_lot15 above_median_price price_category \n",
+ "735 7700 0 1 \n",
+ "2830 6283 1 2 \n",
+ "4106 9685 1 2 \n",
+ "16218 14226 1 2 \n",
+ "19964 4050 1 2 \n",
+ "... ... ... ... \n",
+ "13674 7710 0 1 \n",
+ "20377 3501 1 1 \n",
+ "8805 4400 0 0 \n",
+ "10168 9750 1 1 \n",
+ "2522 5997 0 1 \n",
+ "\n",
+ "[4323 rows x 23 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'y_test'"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " average_price | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 735 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 2830 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 4106 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 16218 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 19964 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 13674 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 20377 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 8805 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 10168 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2522 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
4323 rows × 1 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " average_price\n",
+ "735 0\n",
+ "2830 1\n",
+ "4106 1\n",
+ "16218 1\n",
+ "19964 1\n",
+ "... ...\n",
+ "13674 0\n",
+ "20377 1\n",
+ "8805 1\n",
+ "10168 1\n",
+ "2522 1\n",
+ "\n",
+ "[4323 rows x 1 columns]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from typing import Tuple\n",
+ "from pandas import DataFrame\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "def split_into_train_test(\n",
+ " df_input: DataFrame,\n",
+ " target_colname: str = \"average_price\",\n",
+ " frac_train: float = 0.8,\n",
+ " random_state: int = None,\n",
+ ") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame]:\n",
+ " \n",
+ " if not (0 < frac_train < 1):\n",
+ " raise ValueError(\"Fraction must be between 0 and 1.\")\n",
+ " \n",
+ " # Проверка наличия целевого признака\n",
+ " if target_colname not in df_input.columns:\n",
+ " raise ValueError(f\"{target_colname} is not a column in the DataFrame.\")\n",
+ " \n",
+ " # Разделяем данные на признаки и целевую переменную\n",
+ " X = df_input.drop(columns=[target_colname]) # Признаки\n",
+ " y = df_input[[target_colname]] # Целевая переменная\n",
+ "\n",
+ " # Разделяем данные на обучающую и тестовую выборки\n",
+ " X_train, X_test, y_train, y_test = train_test_split(\n",
+ " X, y,\n",
+ " test_size=(1.0 - frac_train),\n",
+ " random_state=random_state\n",
+ " )\n",
+ " \n",
+ " return X_train, X_test, y_train, y_test\n",
+ "\n",
+ "# Применение функции для разделения данных\n",
+ "X_train, X_test, y_train, y_test = split_into_train_test(\n",
+ " df, \n",
+ " target_colname=\"average_price\", \n",
+ " frac_train=0.8, \n",
+ " random_state=42 # Убедитесь, что вы задали нужное значение random_state\n",
+ ")\n",
+ "\n",
+ "# Для отображения результатов\n",
+ "display(\"X_train\", X_train)\n",
+ "display(\"y_train\", y_train)\n",
+ "\n",
+ "display(\"X_test\", X_test)\n",
+ "display(\"y_test\", y_test)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Формирование конвейера для решения задачи регрессии"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 168,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "from sklearn.base import BaseEstimator, TransformerMixin\n",
+ "from sklearn.compose import ColumnTransformer\n",
+ "from sklearn.preprocessing import StandardScaler\n",
+ "from sklearn.impute import SimpleImputer\n",
+ "from sklearn.pipeline import Pipeline\n",
+ "from sklearn.preprocessing import OneHotEncoder\n",
+ "from sklearn.ensemble import RandomForestRegressor # Пример регрессионной модели\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.pipeline import make_pipeline\n",
+ "\n",
+ "class HouseFeatures(BaseEstimator, TransformerMixin):\n",
+ " def __init__(self):\n",
+ " pass\n",
+ " def fit(self, X, y=None):\n",
+ " return self\n",
+ " def transform(self, X, y=None):\n",
+ " # Создание новых признаков\n",
+ " X = X.copy()\n",
+ " X[\"Square\"] = X[\"sqft_living\"] / X[\"sqft_lot\"]\n",
+ " return X\n",
+ " def get_feature_names_out(self, features_in):\n",
+ " # Добавление имен новых признаков\n",
+ " new_features = [\"Square\"]\n",
+ " return np.append(features_in, new_features, axis=0)\n",
+ "\n",
+ "# Указываем столбцы, которые нужно удалить и обрабатывать\n",
+ "columns_to_drop = [\"date\"]\n",
+ "num_columns = [\"bathrooms\", \"floors\", \"waterfront\", \"view\"]\n",
+ "cat_columns = [] \n",
+ "\n",
+ "# Определяем предобработку для численных данных\n",
+ "num_imputer = SimpleImputer(strategy=\"median\")\n",
+ "num_scaler = StandardScaler()\n",
+ "preprocessing_num = Pipeline(\n",
+ " [\n",
+ " (\"imputer\", num_imputer),\n",
+ " (\"scaler\", num_scaler),\n",
+ " ]\n",
+ ")\n",
+ "\n",
+ "# Определяем предобработку для категориальных данных\n",
+ "cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\")\n",
+ "cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n",
+ "preprocessing_cat = Pipeline(\n",
+ " [\n",
+ " (\"imputer\", cat_imputer),\n",
+ " (\"encoder\", cat_encoder),\n",
+ " ]\n",
+ ")\n",
+ "\n",
+ "# Подготовка признаков с использованием ColumnTransformer\n",
+ "features_preprocessing = ColumnTransformer(\n",
+ " verbose_feature_names_out=False,\n",
+ " transformers=[\n",
+ " (\"preprocessing_num\", preprocessing_num, num_columns),\n",
+ " (\"preprocessing_cat\", preprocessing_cat, cat_columns),\n",
+ " ],\n",
+ " remainder=\"passthrough\"\n",
+ ")\n",
+ "\n",
+ "# Удаление нежелательных столбцов\n",
+ "drop_columns = ColumnTransformer(\n",
+ " verbose_feature_names_out=False,\n",
+ " transformers=[\n",
+ " (\"drop_columns\", \"drop\", columns_to_drop),\n",
+ " ],\n",
+ " remainder=\"passthrough\",\n",
+ ")\n",
+ "\n",
+ "# Постобработка признаков\n",
+ "features_postprocessing = ColumnTransformer(\n",
+ " verbose_feature_names_out=False,\n",
+ " transformers=[\n",
+ " (\"preprocessing_cat\", preprocessing_cat, [\"price_category\"]), \n",
+ " ],\n",
+ " remainder=\"passthrough\",\n",
+ ")\n",
+ "\n",
+ "# Создание окончательного конвейера\n",
+ "pipeline = Pipeline(\n",
+ " [\n",
+ " (\"features_preprocessing\", features_preprocessing),\n",
+ " (\"drop_columns\", drop_columns),\n",
+ " (\"custom_features\", HouseFeatures()),\n",
+ " (\"model\", RandomForestRegressor()) # Выбор модели для обучения\n",
+ " ]\n",
+ ")\n",
+ "\n",
+ "# Использование конвейера\n",
+ "def train_pipeline(X, y):\n",
+ " pipeline.fit(X, y)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Формирование набора моделей для регрессии \n",
+ "Определение перечня алгоритмов решения задачи аппроксимации (регрессии)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 169,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.pipeline import make_pipeline\n",
+ "from sklearn.preprocessing import PolynomialFeatures\n",
+ "from sklearn import linear_model, tree, neighbors, ensemble, neural_network\n",
+ "\n",
+ "random_state = 9\n",
+ "\n",
+ "models = {\n",
+ " \"linear\": {\"model\": linear_model.LinearRegression(n_jobs=-1)},\n",
+ " \"linear_poly\": {\n",
+ " \"model\": make_pipeline(\n",
+ " PolynomialFeatures(degree=2),\n",
+ " linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
+ " )\n",
+ " },\n",
+ " \"linear_interact\": {\n",
+ " \"model\": make_pipeline(\n",
+ " PolynomialFeatures(interaction_only=True),\n",
+ " linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
+ " )\n",
+ " },\n",
+ " \"ridge\": {\"model\": linear_model.RidgeCV()},\n",
+ " \"decision_tree\": {\n",
+ " \"model\": tree.DecisionTreeRegressor(max_depth=7, random_state=random_state)\n",
+ " },\n",
+ " \"knn\": {\"model\": neighbors.KNeighborsRegressor(n_neighbors=7, n_jobs=-1)},\n",
+ " \"random_forest\": {\n",
+ " \"model\": ensemble.RandomForestRegressor(\n",
+ " max_depth=7, random_state=random_state, n_jobs=-1\n",
+ " )\n",
+ " },\n",
+ " \"mlp\": {\n",
+ " \"model\": neural_network.MLPRegressor(\n",
+ " activation=\"tanh\",\n",
+ " hidden_layer_sizes=(3,),\n",
+ " max_iter=500,\n",
+ " early_stopping=True,\n",
+ " random_state=random_state,\n",
+ " )\n",
+ " },\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Формирование набора моделей для регрессии"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 170,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Random Forest: Mean Score = 1.0, Standard Deviation = 0.0\n",
+ "Linear Regression: Mean Score = 0.6396438910587428, Standard Deviation = 0.006348300027629372\n",
+ "Gradient Boosting: Mean Score = 0.9999999992943781, Standard Deviation = 6.609300428326041e-14\n",
+ "Support Vector Regression: Mean Score = -0.4335265257004087, Standard Deviation = 0.012071668862264313\n"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.linear_model import LinearRegression\n",
+ "from sklearn.ensemble import GradientBoostingRegressor\n",
+ "from sklearn.svm import SVR\n",
+ "from sklearn.model_selection import cross_val_score\n",
+ "\n",
+ "def train_multiple_models(X, y, models):\n",
+ " results = {}\n",
+ "\n",
+ " # Преобразуем y в одномерный массив numpy только при необходимости\n",
+ " if hasattr(y, 'values'):\n",
+ " y = y.values.ravel() # Если y - DataFrame, преобразуем в numpy array\n",
+ " else:\n",
+ " y = y.ravel() # Если y - numpy array, просто используем ravel()\n",
+ "\n",
+ " for model_name, model in models.items():\n",
+ " # Создаем конвейер для каждой модели\n",
+ " model_pipeline = Pipeline(\n",
+ " [\n",
+ " (\"features_preprocessing\", features_preprocessing),\n",
+ " (\"drop_columns\", drop_columns),\n",
+ " (\"model\", model) # Используем текущую модель\n",
+ " ]\n",
+ " )\n",
+ " \n",
+ " # Обучаем модель и вычисляем кросс-валидацию\n",
+ " scores = cross_val_score(model_pipeline, X, y, cv=5, error_score='raise') # 5-кратная кросс-валидация\n",
+ " results[model_name] = {\n",
+ " \"mean_score\": scores.mean(),\n",
+ " \"std_dev\": scores.std()\n",
+ " }\n",
+ " \n",
+ " return results\n",
+ "\n",
+ "models = {\n",
+ " \"Random Forest\": RandomForestRegressor(),\n",
+ " \"Linear Regression\": LinearRegression(),\n",
+ " \"Gradient Boosting\": GradientBoostingRegressor(),\n",
+ " \"Support Vector Regression\": SVR()\n",
+ "}\n",
+ "\n",
+ "results = train_multiple_models(X_train, y_train, models)\n",
+ "\n",
+ "# Вывод результатов\n",
+ "for model_name, scores in results.items():\n",
+ " print(f\"{model_name}: Mean Score = {scores['mean_score']}, Standard Deviation = {scores['std_dev']}\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 171,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Model: logistic\n",
+ "MSE (train): 0.24060150375939848\n",
+ "MSE (test): 0.23455933379597502\n",
+ "MAE (train): 0.24060150375939848\n",
+ "MAE (test): 0.23455933379597502\n",
+ "R2 (train): 0.015780807725750634\n",
+ "R2 (test): 0.045807954005714024\n",
+ "STD (train): 0.48387852043102103\n",
+ "STD (test): 0.4780359236045559\n",
+ "----------------------------------------\n",
+ "Model: ridge\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "e:\\MII\\laboratory\\mai\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:469: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "MSE (train): 0.11596298438403702\n",
+ "MSE (test): 0.11265325005783021\n",
+ "MAE (train): 0.11596298438403702\n",
+ "MAE (test): 0.11265325005783021\n",
+ "R2 (train): 0.5256347402620505\n",
+ "R2 (test): 0.541724332939628\n",
+ "STD (train): 0.3405113334365492\n",
+ "STD (test): 0.3356321137822519\n",
+ "----------------------------------------\n",
+ "Model: decision_tree\n",
+ "MSE (train): 0.0\n",
+ "MSE (test): 0.0\n",
+ "MAE (train): 0.0\n",
+ "MAE (test): 0.0\n",
+ "R2 (train): 1.0\n",
+ "R2 (test): 1.0\n",
+ "STD (train): 0.0\n",
+ "STD (test): 0.0\n",
+ "----------------------------------------\n",
+ "Model: knn\n",
+ "MSE (train): 0.1949681897050318\n",
+ "MSE (test): 0.27989821882951654\n",
+ "MAE (train): 0.1949681897050318\n",
+ "MAE (test): 0.27989821882951654\n",
+ "R2 (train): 0.20245122664507342\n",
+ "R2 (test): -0.13863153417464114\n",
+ "STD (train): 0.43948973967967464\n",
+ "STD (test): 0.5264647910268833\n",
+ "----------------------------------------\n",
+ "Model: naive_bayes\n",
+ "MSE (train): 0.26928860613071137\n",
+ "MSE (test): 0.2690261392551469\n",
+ "MAE (train): 0.26928860613071137\n",
+ "MAE (test): 0.2690261392551469\n",
+ "R2 (train): -0.10156840366079445\n",
+ "R2 (test): -0.09440369772322943\n",
+ "STD (train): 0.47316941542228536\n",
+ "STD (test): 0.47206502931490235\n",
+ "----------------------------------------\n",
+ "Model: gradient_boosting\n",
+ "MSE (train): 0.0\n",
+ "MSE (test): 0.0\n",
+ "MAE (train): 0.0\n",
+ "MAE (test): 0.0\n",
+ "R2 (train): 1.0\n",
+ "R2 (test): 1.0\n",
+ "STD (train): 0.0\n",
+ "STD (test): 0.0\n",
+ "----------------------------------------\n",
+ "Model: random_forest\n",
+ "MSE (train): 0.0\n",
+ "MSE (test): 0.0\n",
+ "MAE (train): 0.0\n",
+ "MAE (test): 0.0\n",
+ "R2 (train): 1.0\n",
+ "R2 (test): 1.0\n",
+ "STD (train): 0.0\n",
+ "STD (test): 0.0\n",
+ "----------------------------------------\n",
+ "Model: mlp\n",
+ "MSE (train): 0.4253903990746096\n",
+ "MSE (test): 0.4353458246588018\n",
+ "MAE (train): 0.4253903990746096\n",
+ "MAE (test): 0.4353458246588018\n",
+ "R2 (train): -0.7401279228791116\n",
+ "R2 (test): -0.7709954936501442\n",
+ "STD (train): 0.4959884986820156\n",
+ "STD (test): 0.49782384226978177\n",
+ "----------------------------------------\n"
+ ]
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "from sklearn import metrics\n",
+ "from sklearn.pipeline import Pipeline\n",
+ "\n",
+ "# Проверка наличия необходимых переменных\n",
+ "if 'class_models' not in locals():\n",
+ " raise ValueError(\"class_models is not defined\")\n",
+ "if 'X_train' not in locals() or 'X_test' not in locals() or 'y_train' not in locals() or 'y_test' not in locals():\n",
+ " raise ValueError(\"Train/test data is not defined\")\n",
+ "\n",
+ "\n",
+ "y_train = np.ravel(y_train) \n",
+ "y_test = np.ravel(y_test) \n",
+ "\n",
+ "# Инициализация списка для хранения результатов\n",
+ "results = []\n",
+ "\n",
+ "# Проход по моделям и оценка их качества\n",
+ "for model_name in class_models.keys():\n",
+ " print(f\"Model: {model_name}\")\n",
+ " \n",
+ " # Извлечение модели из словаря\n",
+ " model = class_models[model_name][\"model\"]\n",
+ " \n",
+ " # Создание пайплайна\n",
+ " model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\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",
+ " class_models[model_name][\"pipeline\"] = model_pipeline\n",
+ " class_models[model_name][\"preds\"] = y_test_predict\n",
+ "\n",
+ " # Вычисление метрик для регрессии\n",
+ " class_models[model_name][\"MSE_train\"] = metrics.mean_squared_error(y_train, y_train_predict)\n",
+ " class_models[model_name][\"MSE_test\"] = metrics.mean_squared_error(y_test, y_test_predict)\n",
+ " class_models[model_name][\"MAE_train\"] = metrics.mean_absolute_error(y_train, y_train_predict)\n",
+ " class_models[model_name][\"MAE_test\"] = metrics.mean_absolute_error(y_test, y_test_predict)\n",
+ " class_models[model_name][\"R2_train\"] = metrics.r2_score(y_train, y_train_predict)\n",
+ " class_models[model_name][\"R2_test\"] = metrics.r2_score(y_test, y_test_predict)\n",
+ "\n",
+ " # Дополнительные метрики\n",
+ " class_models[model_name][\"STD_train\"] = np.std(y_train - y_train_predict)\n",
+ " class_models[model_name][\"STD_test\"] = np.std(y_test - y_test_predict)\n",
+ "\n",
+ " # Вывод результатов для текущей модели\n",
+ " print(f\"MSE (train): {class_models[model_name]['MSE_train']}\")\n",
+ " print(f\"MSE (test): {class_models[model_name]['MSE_test']}\")\n",
+ " print(f\"MAE (train): {class_models[model_name]['MAE_train']}\")\n",
+ " print(f\"MAE (test): {class_models[model_name]['MAE_test']}\")\n",
+ " print(f\"R2 (train): {class_models[model_name]['R2_train']}\")\n",
+ " print(f\"R2 (test): {class_models[model_name]['R2_test']}\")\n",
+ " print(f\"STD (train): {class_models[model_name]['STD_train']}\")\n",
+ " print(f\"STD (test): {class_models[model_name]['STD_test']}\")\n",
+ " print(\"-\" * 40) # Разделитель для разных моделей"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 172,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.pipeline import make_pipeline\n",
+ "from sklearn.preprocessing import PolynomialFeatures\n",
+ "from sklearn import linear_model, tree, neighbors, ensemble, neural_network\n",
+ "\n",
+ "random_state = 9\n",
+ "\n",
+ "models = {\n",
+ " \"linear\": {\"model\": linear_model.LinearRegression(n_jobs=-1)},\n",
+ " \"linear_poly\": {\n",
+ " \"model\": make_pipeline(\n",
+ " PolynomialFeatures(degree=2),\n",
+ " linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
+ " )\n",
+ " },\n",
+ " \"linear_interact\": {\n",
+ " \"model\": make_pipeline(\n",
+ " PolynomialFeatures(interaction_only=True),\n",
+ " linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
+ " )\n",
+ " },\n",
+ " \"ridge\": {\"model\": linear_model.RidgeCV()},\n",
+ " \"decision_tree\": {\n",
+ " \"model\": tree.DecisionTreeRegressor(max_depth=7, random_state=random_state)\n",
+ " },\n",
+ " \"knn\": {\"model\": neighbors.KNeighborsRegressor(n_neighbors=7, n_jobs=-1)},\n",
+ " \"random_forest\": {\n",
+ " \"model\": ensemble.RandomForestRegressor(\n",
+ " max_depth=7, random_state=random_state, n_jobs=-1\n",
+ " )\n",
+ " },\n",
+ " \"mlp\": {\n",
+ " \"model\": neural_network.MLPRegressor(\n",
+ " activation=\"tanh\",\n",
+ " hidden_layer_sizes=(3,),\n",
+ " max_iter=500,\n",
+ " early_stopping=True,\n",
+ " random_state=random_state,\n",
+ " )\n",
+ " },\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Обучение и оценка моделей с помощью различных алгоритмов"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 173,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Model: logistic\n",
+ "MSE (train): 0.24060150375939848\n",
+ "MSE (test): 0.23455933379597502\n",
+ "MAE (train): 0.24060150375939848\n",
+ "MAE (test): 0.23455933379597502\n",
+ "R2 (train): 0.015780807725750634\n",
+ "R2 (test): 0.045807954005714024\n",
+ "STD (train): 0.48387852043102103\n",
+ "STD (test): 0.4780359236045559\n",
+ "----------------------------------------\n",
+ "Model: ridge\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "e:\\MII\\laboratory\\mai\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:469: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+ "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+ "\n",
+ "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+ " https://scikit-learn.org/stable/modules/preprocessing.html\n",
+ "Please also refer to the documentation for alternative solver options:\n",
+ " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+ " n_iter_i = _check_optimize_result(\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "MSE (train): 0.11596298438403702\n",
+ "MSE (test): 0.11265325005783021\n",
+ "MAE (train): 0.11596298438403702\n",
+ "MAE (test): 0.11265325005783021\n",
+ "R2 (train): 0.5256347402620505\n",
+ "R2 (test): 0.541724332939628\n",
+ "STD (train): 0.3405113334365492\n",
+ "STD (test): 0.3356321137822519\n",
+ "----------------------------------------\n",
+ "Model: decision_tree\n",
+ "MSE (train): 0.0\n",
+ "MSE (test): 0.0\n",
+ "MAE (train): 0.0\n",
+ "MAE (test): 0.0\n",
+ "R2 (train): 1.0\n",
+ "R2 (test): 1.0\n",
+ "STD (train): 0.0\n",
+ "STD (test): 0.0\n",
+ "----------------------------------------\n",
+ "Model: knn\n",
+ "MSE (train): 0.1949681897050318\n",
+ "MSE (test): 0.27989821882951654\n",
+ "MAE (train): 0.1949681897050318\n",
+ "MAE (test): 0.27989821882951654\n",
+ "R2 (train): 0.20245122664507342\n",
+ "R2 (test): -0.13863153417464114\n",
+ "STD (train): 0.43948973967967464\n",
+ "STD (test): 0.5264647910268833\n",
+ "----------------------------------------\n",
+ "Model: naive_bayes\n",
+ "MSE (train): 0.26928860613071137\n",
+ "MSE (test): 0.2690261392551469\n",
+ "MAE (train): 0.26928860613071137\n",
+ "MAE (test): 0.2690261392551469\n",
+ "R2 (train): -0.10156840366079445\n",
+ "R2 (test): -0.09440369772322943\n",
+ "STD (train): 0.47316941542228536\n",
+ "STD (test): 0.47206502931490235\n",
+ "----------------------------------------\n",
+ "Model: gradient_boosting\n",
+ "MSE (train): 0.0\n",
+ "MSE (test): 0.0\n",
+ "MAE (train): 0.0\n",
+ "MAE (test): 0.0\n",
+ "R2 (train): 1.0\n",
+ "R2 (test): 1.0\n",
+ "STD (train): 0.0\n",
+ "STD (test): 0.0\n",
+ "----------------------------------------\n",
+ "Model: random_forest\n",
+ "MSE (train): 0.0\n",
+ "MSE (test): 0.0\n",
+ "MAE (train): 0.0\n",
+ "MAE (test): 0.0\n",
+ "R2 (train): 1.0\n",
+ "R2 (test): 1.0\n",
+ "STD (train): 0.0\n",
+ "STD (test): 0.0\n",
+ "----------------------------------------\n",
+ "Model: mlp\n",
+ "MSE (train): 0.4253903990746096\n",
+ "MSE (test): 0.4353458246588018\n",
+ "MAE (train): 0.4253903990746096\n",
+ "MAE (test): 0.4353458246588018\n",
+ "R2 (train): -0.7401279228791116\n",
+ "R2 (test): -0.7709954936501442\n",
+ "STD (train): 0.4959884986820156\n",
+ "STD (test): 0.49782384226978177\n",
+ "----------------------------------------\n"
+ ]
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "from sklearn import metrics\n",
+ "from sklearn.pipeline import Pipeline\n",
+ "\n",
+ "# Проверка наличия необходимых переменных\n",
+ "if 'class_models' not in locals():\n",
+ " raise ValueError(\"class_models is not defined\")\n",
+ "if 'X_train' not in locals() or 'X_test' not in locals() or 'y_train' not in locals() or 'y_test' not in locals():\n",
+ " raise ValueError(\"Train/test data is not defined\")\n",
+ "\n",
+ "\n",
+ "y_train = np.ravel(y_train) \n",
+ "y_test = np.ravel(y_test) \n",
+ "\n",
+ "# Инициализация списка для хранения результатов\n",
+ "results = []\n",
+ "\n",
+ "# Проход по моделям и оценка их качества\n",
+ "for model_name in class_models.keys():\n",
+ " print(f\"Model: {model_name}\")\n",
+ " \n",
+ " # Извлечение модели из словаря\n",
+ " model = class_models[model_name][\"model\"]\n",
+ " \n",
+ " # Создание пайплайна\n",
+ " model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\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",
+ " class_models[model_name][\"pipeline\"] = model_pipeline\n",
+ " class_models[model_name][\"preds\"] = y_test_predict\n",
+ "\n",
+ " # Вычисление метрик для регрессии\n",
+ " class_models[model_name][\"MSE_train\"] = metrics.mean_squared_error(y_train, y_train_predict)\n",
+ " class_models[model_name][\"MSE_test\"] = metrics.mean_squared_error(y_test, y_test_predict)\n",
+ " class_models[model_name][\"MAE_train\"] = metrics.mean_absolute_error(y_train, y_train_predict)\n",
+ " class_models[model_name][\"MAE_test\"] = metrics.mean_absolute_error(y_test, y_test_predict)\n",
+ " class_models[model_name][\"R2_train\"] = metrics.r2_score(y_train, y_train_predict)\n",
+ " class_models[model_name][\"R2_test\"] = metrics.r2_score(y_test, y_test_predict)\n",
+ "\n",
+ " # Дополнительные метрики\n",
+ " class_models[model_name][\"STD_train\"] = np.std(y_train - y_train_predict)\n",
+ " class_models[model_name][\"STD_test\"] = np.std(y_test - y_test_predict)\n",
+ "\n",
+ " # Вывод результатов для текущей модели\n",
+ " print(f\"MSE (train): {class_models[model_name]['MSE_train']}\")\n",
+ " print(f\"MSE (test): {class_models[model_name]['MSE_test']}\")\n",
+ " print(f\"MAE (train): {class_models[model_name]['MAE_train']}\")\n",
+ " print(f\"MAE (test): {class_models[model_name]['MAE_test']}\")\n",
+ " print(f\"R2 (train): {class_models[model_name]['R2_train']}\")\n",
+ " print(f\"R2 (test): {class_models[model_name]['R2_test']}\")\n",
+ " print(f\"STD (train): {class_models[model_name]['STD_train']}\")\n",
+ " print(f\"STD (test): {class_models[model_name]['STD_test']}\")\n",
+ " print(\"-\" * 40) # Разделитель для разных моделей"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Пример использования обученной модели (конвейера регрессии) для предсказания**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Подбор гиперпараметров методом поиска по сетке**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 174,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Fitting 5 folds for each of 36 candidates, totalling 180 fits\n",
+ "Best parameters: {'max_depth': 10, 'min_samples_split': 10, 'n_estimators': 200}\n",
+ "Best MSE: 0.14752641202600872\n"
+ ]
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "from sklearn.model_selection import train_test_split, GridSearchCV\n",
+ "from sklearn.ensemble import RandomForestRegressor\n",
+ "from sklearn.preprocessing import StandardScaler\n",
+ "\n",
+ "# Convert the date column to a datetime object and extract numeric features\n",
+ "df['date'] = pd.to_datetime(df['date'], errors='coerce') # Coerce invalid dates to NaT\n",
+ "df.dropna(subset=['date'], inplace=True) # Drop rows with invalid dates\n",
+ "df['year'] = df['date'].dt.year\n",
+ "df['month'] = df['date'].dt.month\n",
+ "df['day'] = df['date'].dt.day\n",
+ "\n",
+ "# Prepare predictors and target\n",
+ "X = df[['yr_built', 'year', 'month', 'day', 'price', 'price_category']]\n",
+ "y = df['average_price']\n",
+ "\n",
+ "# Split data into training and testing sets\n",
+ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
+ "\n",
+ "# Define model and parameter grid\n",
+ "model = RandomForestRegressor()\n",
+ "param_grid = {\n",
+ " 'n_estimators': [50, 100, 200],\n",
+ " 'max_depth': [None, 10, 20, 30],\n",
+ " 'min_samples_split': [2, 5, 10]\n",
+ "}\n",
+ "\n",
+ "# Hyperparameter tuning with GridSearchCV\n",
+ "grid_search = GridSearchCV(estimator=model, param_grid=param_grid,\n",
+ " scoring='neg_mean_squared_error', cv=5, n_jobs=-1, verbose=2)\n",
+ "\n",
+ "# Fit the model\n",
+ "grid_search.fit(X_train, y_train)\n",
+ "\n",
+ "# Output the best parameters and score\n",
+ "print(\"Best parameters:\", grid_search.best_params_)\n",
+ "print(\"Best MSE:\", -grid_search.best_score_)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Обучение модели с новыми гиперпараметрами и сравнение новых и старых данных**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 175,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Fitting 5 folds for each of 36 candidates, totalling 180 fits\n",
+ "Старые параметры: {'max_depth': 10, 'min_samples_split': 15, 'n_estimators': 200}\n",
+ "Лучший результат (MSE) на старых параметрах: 0.14727400921908354\n",
+ "\n",
+ "Новые параметры: {'max_depth': 10, 'min_samples_split': 10, 'n_estimators': 200}\n",
+ "Лучший результат (MSE) на новых параметрах: 0.148833681322309\n",
+ "Среднеквадратическая ошибка (MSE) на тестовых данных: 0.14451630134635543\n",
+ "Корень среднеквадратичной ошибки (RMSE) на тестовых данных: 0.3801529972870863\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAHWCAYAAACbsXOkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABusklEQVR4nO3deXwN1//H8fdNyL4hJIImttpC7AQVrSVaRWhrbS1V3awNavmWoN821N7yrdIW1SrVoqqtfjX2ncROVdVWJJaSECQk8/vDL/frSkJu3DQSr+fjcR8yZ86c+cyYZPLJOXPGZBiGIQAAAADAA7HL7QAAAAAAID8guQIAAAAAGyC5AgAAAAAbILkCAAAAABsguQIAAAAAGyC5AgAAAAAbILkCAAAAABsguQIAAAAAGyC5AgAAAAAbILkCAAAAABsguQLysaNHj+q1115TmTJl5OTkJA8PDzVs2FDTpk3T9evXczu8R8batWtlMplkMpn05ZdfZlinYcOGMplMCgwMtChPTk7WtGnTVKNGDXl4eMjLy0tVqlTRq6++qt9++81cb+7cueZ9ZPTZunVrjh4jAACQCuR2AAByxo8//qgXXnhBjo6O6tatmwIDA5WcnKyNGzdqyJAhOnDggGbNmpXbYT5SnJyctGDBAr344osW5cePH9fmzZvl5OSUbpvnnntOP//8szp37qzevXvr5s2b+u2337RixQo1aNBAFStWtKg/duxYlS5dOl075cqVs+3BAACAdEiugHzo2LFj6tSpk/z9/bV69WoVL17cvK5Pnz76448/9OOPP+ZihI+mZ555RsuXL9eFCxfk7e1tLl+wYIF8fHxUvnx5Xbp0yVy+Y8cOrVixQu+9955GjBhh0db06dN1+fLldPt4+umnVbt27Rw7BgAAkDmGBQL50AcffKCrV6/qs88+s0is0pQrV04DBgwwL5tMJvXt21dfffWVKlSoICcnJ9WqVUvr16+32O7EiRN68803VaFCBTk7O6tIkSJ64YUXdPz4cYt6dw9Rc3FxUdWqVfXpp59a1OvRo4fc3NzSxfftt9/KZDJp7dq1FuXbtm1Ty5Yt5enpKRcXF4WEhGjTpk0WdUaPHi2TyaQLFy5YlO/cuVMmk0lz58612H9AQIBFvVOnTsnZ2Vkmkyndcf3888964okn5OrqKnd3d7Vq1UoHDhxIF39m2rZtK0dHRy1evNiifMGCBerQoYPs7e0tyo8ePSrp9pDBu9nb26tIkSJZ3ndWHD9+PNNhhXefC0lq0qRJhnXvPMeS9PHHHyswMFAuLi4W9b799tv7xnT69Gn16tVLfn5+cnR0VOnSpfXGG28oOTn5vkMh74xl79696tGjh3mIrK+vr15++WVdvHjRYn9p189vv/2mDh06yMPDQ0WKFNGAAQN048YNi7pp3zeZSYsv7dytXr1adnZ2GjVqlEW9BQsWyGQy6eOPP77nuWjSpImaNGliUbZjxw7zsd5PkyZN0g07laSJEydm+H/8n//8R1WqVJGjo6P8/PzUp0+fdAn93deAt7e3WrVqpf3791vUy41zda/r4s5j/f7779WqVSvzNVa2bFm9++67SklJSddmYGCgoqOj1aBBAzk7O6t06dKaOXOmRb3k5GSNGjVKtWrVkqenp1xdXfXEE09ozZo1FvXu/H5btmyZxbobN26oUKFCMplMmjhxosW606dP6+WXX5aPj48cHR1VpUoVff755+b1dw5DzuwzevRoSdZd77du3dK7776rsmXLytHRUQEBARoxYoSSkpIs6gUEBJj3Y2dnJ19fX3Xs2FEnT5685/8ZkF/QcwXkQz/88IPKlCmjBg0aZHmbdevWadGiRerfv78cHR31n//8Ry1bttT27dvNv5Dt2LFDmzdvVqdOnVSyZEkdP35cH3/8sZo0aaKDBw/KxcXFos0pU6bI29tbCQkJ+vzzz9W7d28FBASoWbNmVh/T6tWr9fTTT6tWrVqKiIiQnZ2d5syZo6eeekobNmxQ3bp1rW4zI6NGjUr3S4UkzZ8/X927d1doaKjGjx+va9eu6eOPP1ajRo20a9eudElaRlxcXNS2bVt9/fXXeuONNyRJe/bs0YEDB/Tpp59q7969FvX9/f0lSV999ZUaNmyoAgXu/yM7Pj4+XWJpMpmsSsQ6d+6sZ555RpL0008/6euvv860bsWKFfWvf/1LknThwgW99dZbFusXLVqkN998U02aNFG/fv3k6uqqQ4cO6f33379vHGfOnFHdunV1+fJlvfrqq6pYsaJOnz6tb7/9VteuXVPjxo01f/58c/333ntPkszxSDJ/D6xatUp//vmnevbsKV9fX/Ow2AMHDmjr1q3pkpMOHTooICBAkZGR2rp1qz788ENdunRJX3zxxX3jzsxTTz2lN998U5GRkQoLC1PNmjV19uxZ9evXT82aNdPrr79udZtDhw7Ndjz3Mnr0aI0ZM0bNmjXTG2+8ocOHD+vjjz/Wjh07tGnTJhUsWNBcN+0aMAxDR48e1eTJk/XMM8880C/TtjhXJUuWVGRkpEVZRtfz3Llz5ebmpvDwcLm5uWn16tUaNWqUEhISNGHCBIu6ly5d0jPPPKMOHTqoc+fO+uabb/TGG2/IwcFBL7/8siQpISFBn376qXko75UrV/TZZ58pNDRU27dvV/Xq1S3adHJy0pw5cxQWFmYuW7JkSYY/h+Li4lS/fn1zslq0aFH9/PPP6tWrlxISEjRw4EBVqlTJ4vti1qxZOnTokKZMmWIuq1atmkW7WbneX3nlFc2bN0/PP/+8Bg0apG3btikyMlKHDh3S0qVLLdp74okn9Oqrryo1NVX79+/X1KlTdebMGW3YsCHdMQH5jgEgX4mPjzckGW3bts3yNpIMScbOnTvNZSdOnDCcnJyMdu3amcuuXbuWbtstW7YYkowvvvjCXDZnzhxDknHs2DFz2e+//25IMj744ANzWffu3Q1XV9d0bS5evNiQZKxZs8YwDMNITU01ypcvb4SGhhqpqakW8ZQuXdpo3ry5uSwiIsKQZJw/f96izR07dhiSjDlz5ljs39/f37y8f/9+w87Oznj66act4r9y5Yrh5eVl9O7d26LN2NhYw9PTM1353dasWWNIMhYvXmysWLHCMJlMxsmTJw3DMIwhQ4YYZcqUMQzDMEJCQowqVaqYt0tNTTVCQkIMSYaPj4/RuXNnY8aMGcaJEyfS7SPtnGf0cXR0vGd8adL+jyZOnGgumzBhQrr/yzQNGzY0nnzySfPysWPH0p3jzp07G15eXsb169czPB/30q1bN8POzs7YsWNHunV3XgdpQkJCjJCQkAzbyuja/frrrw1Jxvr1681laddPmzZtLOq++eabhiRjz5495jJJRp8+fTKNP6Pvg8TERKNcuXJGlSpVjBs3bhitWrUyPDw8Mvw/vd/x/fTTT4Yko2XLlkZWbud3X19p7v4/PnfunOHg4GC0aNHCSElJMdebPn26Icn4/PPPM43JMAxjxIgRhiTj3Llz5rLcOFdZOVbDyPjaeO211wwXFxfjxo0bFm1KMiZNmmQuS0pKMqpXr24UK1bMSE5ONgzDMG7dumUkJSVZtHfp0iXDx8fHePnll81lad8vnTt3NgoUKGDExsaa1zVt2tTo0qWLIcmYMGGCubxXr15G8eLFjQsXLli036lTJ8PT0zPDY7n759ydsnq9796925BkvPLKKxb1Bg8ebEgyVq9ebS7z9/c3unfvblGvS5cuhouLS4YxAPkNwwKBfCYhIUGS5O7ubtV2wcHBqlWrlnn5scceU9u2bfXLL7+Yh8c4Ozub19+8eVMXL15UuXLl5OXlpZiYmHRtXrp0SRcuXNCff/6pKVOmyN7eXiEhIenqXbhwweJz5coVi/W7d+/WkSNH1KVLF128eNFcLzExUU2bNtX69euVmppqsc3ff/9t0WZ8fPx9z8Hw4cNVs2ZNvfDCCxblq1at0uXLl9W5c2eLNu3t7VWvXr10w33upUWLFipcuLAWLlwowzC0cOFCde7cOcO6JpNJv/zyi/7973+rUKFC+vrrr9WnTx/5+/urY8eOGT5zNWPGDK1atcri8/PPP2cptrS/lGc0sUZGkpOT5ejoeM86V65ckYuLS5bbTJOamqply5apdevWGT5DlpVhcHe689q9ceOGLly4oPr160tShtdunz59LJb79esn6XbPx53S2rp48WK6azAjLi4umjt3rg4dOqTGjRvrxx9/1JQpU/TYY49ZdTyGYWj48OF67rnnVK9evSxvl5KSku777dq1axZ1fv31VyUnJ2vgwIGys/vfrwm9e/eWh4dHuuc1b968qQsXLuj8+fPasmWLli5dqmrVqlk8Vyjl3rm6nzuvjStXrujChQt64okndO3aNYsZOSWpQIECeu2118zLDg4Oeu2113Tu3DlFR0dLuj1k18HBQdLt6/jvv//WrVu3VLt27QyvtZo1a6pKlSrm3qYTJ05ozZo16tGjh0U9wzD03XffqXXr1jIMw+L/MDQ0VPHx8Rm2nxX3u97T/g0PD7eoN2jQIElKd00kJSXpwoULOnfunFatWqXVq1eradOm2YoNyGsYFgjkMx4eHpKULkG5n/Lly6cre/zxx3Xt2jWdP39evr6+un79uiIjIzVnzhydPn1ahmGY62aUvNSsWdP8taOjo6ZPn55u+F5iYqKKFi16z9iOHDkiSerevXumdeLj41WoUCHzcoUKFe7Z5t02btyoH374QVFRUemGM6Xt/6mnnspw27RznhUFCxbUCy+8oAULFqhu3bo6deqUunTpkml9R0dH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u+8y/KPDg/wcvN/1njZ76N3fM5MnT5Ykm10TQH5AzxWQD5UtW1YLFixQx44dValSJXXr1k2BgYFKTk7W5s2btXjx4nQPSwcGBio0NNRiKnZJFkO5nn32Wc2fP1+enp6qXLmytmzZol9//TXTab6XLVsmb29v87DADRs2aODAgVYfj52dnT799FM9/fTTqlKlinr27KkSJUro9OnTWrNmjTw8PNINLcyqv/76Sw4ODukmKriTh4eHPv74Y7300kuqWbOmOnXqpKJFi+rkyZP68ccf1bBhQ02fPt2q/bZt21Zt27a9Z509e/aoS5cuevrpp/XEE0+ocOHCOn36tObNm6czZ85o6tSp6X4x/fnnn9M9hC/dnpL8zl6IO+3du1djxozRX3/9pVatWlk8x5WWcN/5F+eIiAh9+umn6tSpkypWrHjPY/j11181ZcoUzZ8//77PZ93t/fff13//+1+FhITo1VdfVaVKlXT27FktXrxYGzduvGdv5J08PDzUuHFjffDBB7p586ZKlCih//73v5n2Tki3ey7atGmjli1basuWLfryyy/VpUsXBQUFWdQ7efKkVq5caR7q9t5778nf3181atRI1zN248YNde/eXeXLlzdPGz9mzBj98MMP6tmzp/bt25fueZ67xcTEyNvbW2+//XaWjj07ihYtquHDh2vMmDFq2bKl2rRpo8OHD+s///mP6tSpoxdffNGiflxcnPmauXDhgj755BMVKFBAzz77rEW9f/pcZUWDBg1UqFAhde/eXf3795fJZNL8+fMzTd79/Pw0fvx4HT9+XI8//rgWLVqk3bt3a9asWebp6Z999lktWbJE7dq1U6tWrXTs2DHNnDlTlStXzvCPQ2latmyp8+fP3/OPG+PGjdOaNWtUr1499e7dW5UrV9bff/+tmJgY/frrr/r777+zdR7ud70HBQWpe/fumjVrlnko5fbt2zVv3jyFhYXpySeftGjvzz//NF8Tp0+f1vTp0+Xh4cGkFng0/PMTFAL4p/z+++9G7969jYCAAMPBwcFwd3c3GjZsaHz00UcWUwzr/6dJ/vLLL43y5csbjo6ORo0aNcxToae5dOmS0bNnT8Pb29twc3MzQkNDjd9++y3d1Lt3Twvu4OBglCtXzhg1apTFfrM6FXuaXbt2Ge3btzeKFCliODo6Gv7+/kaHDh2MqKgocx1rp2KX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i20AAIZBzxUA4L4OHTqkhg0bWpQ1bNhQR44cUUpKirns4sWL8vDwuGdbQUFBcnV1NS/Xr19f9vb2OnjwoBISEnTmzJkM93Xo0CGLsuDgYPPXBQoUUO3atdPVsdaRI0fUuXNnlSlTRh4eHgoICJAknTx50qp9z5gxQ7Vq1VLRokXl5uamWbNmpWtDknr37q1Zs2YpNTVVn332mXr37m2xfs+ePfrjjz/k7u4uNzc3ubm5qXDhwrpx44bFcMX7CQoKsugRCw4O1tWrV3Xq1CkdPXpUN2/etDjnBQsWVN26ddOdz5IlS8rV1VXly5fXM888o86dO2c5BgB4FDChBQDAZv7880+VLl060/WFChXSiRMnMlxnMplyKqwsa926tfz9/TV79mz5+fkpNTVVgYGBFs8n3c/ChQs1ePBgTZo0ScHBwXJ3d9eECRO0bdu2dHVffPFFRUREaOHChfL19VXVqlUt1l+9elW1atXSV199lW7bokWLWn+AD2jDhg1yd3fXsWPH9Oqrr2ry5Mnphn4CwKOMnisAwH1VqlRJmzZtsijbtGmTHn/8cdnb25vL1q9fryeeeCLTdipWrKg9e/YoMTHRXLZ161alpKSoUqVK8vDwkJ+fX4b7qly5skXZ1q1bzV/funVL0dHRqlSpUraOT7rd63b48GG98847atq0qSpVqqRLly5lWPde+960aZMaNGigN998UzVq1FC5cuUy7WXy8vJSmzZt9Prrr6frtZKkmjVr6siRIypWrJjKlStn8fH09Mzyse3Zs0fXr1+3iN/NzU2lSpVS2bJl5eDgYHHOb968qR07dqQ756VLl1a5cuXUvHlzPffcc1q6dGmWYwCARwHJFQDgvgYNGqSoqCi9++67+v333zVv3jxNnz5dgwcPliRdv35dH330kY4ePaqnn35asbGxio2N1dWrV3Xr1i3zxAhdunRRwYIF1a1bN+3bt08bNmxQ79691b59e5UrV07S7ckixo8fr0WLFunw4cMaNmyYdu/erQEDBljENGPGDC1dulS//fab+vTpo0uXLllMjGGtQoUKqUiRIpo1a5b++OMPrV69WuHh4RnWvde+y5cvr507d+qXX37R77//rpEjR1rMvHe3YcOGacSIEerYsWO6dV27dpW3t7fatm2rDRs26NixY1q7dq369++vv/76K8vHlpycrF69eungwYP66aefFBERob59+8rOzk6urq564403NGTIEK1cuVIHDx5U7969de3aNfXq1cuinXPnzik2Nlbbtm3TDz/8oIoVK2Y5BgB4FDAsEABwXzVr1tQ333yjUaNG6d1331Xx4sU1duxY9ejRQ5K0aNEi9e/fX5JUr169dNu3b99ea9eulbu7u37++WeFh4erTp06cnFxUdu2bTV16lRz3f79+ys+Pl6DBg3SuXPnVLlyZS1fvlzly5e3aHPcuHEaN26cdu/erXLlymn58uXy9vbO9jHa2dlp4cKF6t+/vwIDA1WhQgV9+OGH5inNs7rv1157Tbt27VLHjh1lMpnUuXNnvfnmm/r5558z3G+FChU0bNiwDNe5uLho/fr1Gjp0qNq3b68rV66oRIkSatq06X2fbbtT06ZNVb58eTVu3FhJSUnq3LmzRo8ebXE8qampeumll3TlyhXVrl1bv/zyiwoVKpQuVkny9vZWixYt9MEHH2Q5BgB4FJgMwzByOwgAQN42d+5crV27NsOp2Xfv3q2BAwdq7dq1NtnX8ePHVbp0ae3atcviHVr/hNzcd3b16NFDly9f1rJly3I7FADI9xgWCAB4YM7Ozpk+A1SwYMEMX0oMAEB+w7BAAMAD69ixY4bPDElSlSpVLF5oCwBAfsWwQAAAAACwAYYFAgAAAIANkFwBAAAAgA2QXAEAAACADZBcAQAAAIANkFwBAAAAgA2QXAEAAACADZBcAQAAAIANkFwBAAAAgA38HzvAp7KAVDfrAAAAAElFTkSuQmCC",
+ "text/plain": [
+ "