diff --git a/lab4.ipynb b/lab4.ipynb new file mode 100644 index 0000000..7ce733c --- /dev/null +++ b/lab4.ipynb @@ -0,0 +1,3512 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Лабораторная работа 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Бизнес цели:\n", + "1. Оптимизация ценовой стратегии: анализ факторов, влияющих на стоимость недвижимости, чтобы помочь продавцам устанавливать конкурентоспособные цены и увеличивать прибыль.\n", + "2. Улучшение инвестиционных решений: предоставление аналитики для инвесторов, чтобы они могли определить наиболее выгодные районы и типы недвижимости для вложений." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Загрузка набора данных" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Среднее значение поля 'цена': 540088.1417665294\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongrade...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15date_numericabove_average_price
id
7129300520221900.031.00118056501.00037...0195509817847.5112-122.25713405650163560
6414100192538000.032.25257072422.00037...400195119919812547.7210-122.31916907639164130
5631500400180000.021.00770100001.00036...0193309802847.7379-122.23327208062164910
2487200875604000.043.00196050001.00057...910196509813647.5208-122.39313605000164131
1954400510510000.032.00168080801.00038...0198709807447.6168-122.04518007503164840
..................................................................
263000018360000.032.50153011313.00038...0200909810347.6993-122.34615301509162110
6600060120400000.042.50231058132.00038...0201409814647.5107-122.36218307200164890
1523300141402101.020.75102013502.00037...0200909814447.5944-122.29910202007162440
291310100400000.032.50160023882.00038...0200409802747.5345-122.06914101287164510
1523300157325000.020.75102010762.00037...0200809814447.5941-122.29910201357163580
\n", + "

21613 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " price bedrooms bathrooms sqft_living sqft_lot floors \\\n", + "id \n", + "7129300520 221900.0 3 1.00 1180 5650 1.0 \n", + "6414100192 538000.0 3 2.25 2570 7242 2.0 \n", + "5631500400 180000.0 2 1.00 770 10000 1.0 \n", + "2487200875 604000.0 4 3.00 1960 5000 1.0 \n", + "1954400510 510000.0 3 2.00 1680 8080 1.0 \n", + "... ... ... ... ... ... ... \n", + "263000018 360000.0 3 2.50 1530 1131 3.0 \n", + "6600060120 400000.0 4 2.50 2310 5813 2.0 \n", + "1523300141 402101.0 2 0.75 1020 1350 2.0 \n", + "291310100 400000.0 3 2.50 1600 2388 2.0 \n", + "1523300157 325000.0 2 0.75 1020 1076 2.0 \n", + "\n", + " waterfront view condition grade ... sqft_basement yr_built \\\n", + "id ... \n", + "7129300520 0 0 3 7 ... 0 1955 \n", + "6414100192 0 0 3 7 ... 400 1951 \n", + "5631500400 0 0 3 6 ... 0 1933 \n", + "2487200875 0 0 5 7 ... 910 1965 \n", + "1954400510 0 0 3 8 ... 0 1987 \n", + "... ... ... ... ... ... ... ... \n", + "263000018 0 0 3 8 ... 0 2009 \n", + "6600060120 0 0 3 8 ... 0 2014 \n", + "1523300141 0 0 3 7 ... 0 2009 \n", + "291310100 0 0 3 8 ... 0 2004 \n", + "1523300157 0 0 3 7 ... 0 2008 \n", + "\n", + " yr_renovated zipcode lat long sqft_living15 \\\n", + "id \n", + "7129300520 0 98178 47.5112 -122.257 1340 \n", + "6414100192 1991 98125 47.7210 -122.319 1690 \n", + "5631500400 0 98028 47.7379 -122.233 2720 \n", + "2487200875 0 98136 47.5208 -122.393 1360 \n", + "1954400510 0 98074 47.6168 -122.045 1800 \n", + "... ... ... ... ... ... \n", + "263000018 0 98103 47.6993 -122.346 1530 \n", + "6600060120 0 98146 47.5107 -122.362 1830 \n", + "1523300141 0 98144 47.5944 -122.299 1020 \n", + "291310100 0 98027 47.5345 -122.069 1410 \n", + "1523300157 0 98144 47.5941 -122.299 1020 \n", + "\n", + " sqft_lot15 date_numeric above_average_price \n", + "id \n", + "7129300520 5650 16356 0 \n", + "6414100192 7639 16413 0 \n", + "5631500400 8062 16491 0 \n", + "2487200875 5000 16413 1 \n", + "1954400510 7503 16484 0 \n", + "... ... ... ... \n", + "263000018 1509 16211 0 \n", + "6600060120 7200 16489 0 \n", + "1523300141 2007 16244 0 \n", + "291310100 1287 16451 0 \n", + "1523300157 1357 16358 0 \n", + "\n", + "[21613 rows x 21 columns]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "from sklearn import set_config\n", + "\n", + "set_config(transform_output=\"pandas\")\n", + "\n", + "random_state = 42\n", + "\n", + "df = pd.read_csv(\"data/kc_house_data.csv\", index_col=\"id\")\n", + "\n", + "df[\"date\"] = pd.to_datetime(df[\"date\"])\n", + "df[\"date_numeric\"] = (df[\"date\"] - pd.Timestamp(\"1970-01-01\")).dt.days\n", + "df = df.drop(columns=[\"date\"])\n", + "\n", + "average_price = df['price'].mean()\n", + "\n", + "print(f\"Среднее значение поля 'цена': {average_price}\")\n", + "\n", + "average_price = df[\"price\"].mean()\n", + "df['above_average_price'] = (df['price'] > average_price).astype(int)\n", + "\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Разделение набора данных на обучающую и тестовые выборки (80/20) для задачи классификации" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'X_train'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongrade...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15date_numericabove_average_price
id
5205000020360000.042.50261073332.00038...0198809800347.2721-122.29322809033165340
4221270290544900.032.50199049362.00038...0200409807547.5911-122.01822504815163951
3438501327352500.022.50157023992.00037...390200909810647.5488-122.36415902306165590
2726079098560000.032.5028402164932.00039...0199109801447.7020-121.8922820175111163311
5072200040403000.032.001960131001.00258...310195709816647.4419-122.340196010518161920
..................................................................
5104531120775000.052.753750120772.004310...0200509803847.3525-122.00231207255165171
2685600090345000.031.50103069691.00046...0192109810847.5492-122.30014206000163920
9528104985611000.021.00127051001.00037...170190009811547.6771-122.32816703900163781
3450300430317500.041.50173077001.00047...720196309805947.4996-122.16316508066164400
3956900480779000.031.75199056001.00138...660194109819947.6500-122.41526306780163161
\n", + "

17290 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " price bedrooms bathrooms sqft_living sqft_lot floors \\\n", + "id \n", + "5205000020 360000.0 4 2.50 2610 7333 2.0 \n", + "4221270290 544900.0 3 2.50 1990 4936 2.0 \n", + "3438501327 352500.0 2 2.50 1570 2399 2.0 \n", + "2726079098 560000.0 3 2.50 2840 216493 2.0 \n", + "5072200040 403000.0 3 2.00 1960 13100 1.0 \n", + "... ... ... ... ... ... ... \n", + "5104531120 775000.0 5 2.75 3750 12077 2.0 \n", + "2685600090 345000.0 3 1.50 1030 6969 1.0 \n", + "9528104985 611000.0 2 1.00 1270 5100 1.0 \n", + "3450300430 317500.0 4 1.50 1730 7700 1.0 \n", + "3956900480 779000.0 3 1.75 1990 5600 1.0 \n", + "\n", + " waterfront view condition grade ... sqft_basement yr_built \\\n", + "id ... \n", + "5205000020 0 0 3 8 ... 0 1988 \n", + "4221270290 0 0 3 8 ... 0 2004 \n", + "3438501327 0 0 3 7 ... 390 2009 \n", + "2726079098 0 0 3 9 ... 0 1991 \n", + "5072200040 0 2 5 8 ... 310 1957 \n", + "... ... ... ... ... ... ... ... \n", + "5104531120 0 4 3 10 ... 0 2005 \n", + "2685600090 0 0 4 6 ... 0 1921 \n", + "9528104985 0 0 3 7 ... 170 1900 \n", + "3450300430 0 0 4 7 ... 720 1963 \n", + "3956900480 0 1 3 8 ... 660 1941 \n", + "\n", + " yr_renovated zipcode lat long sqft_living15 \\\n", + "id \n", + "5205000020 0 98003 47.2721 -122.293 2280 \n", + "4221270290 0 98075 47.5911 -122.018 2250 \n", + "3438501327 0 98106 47.5488 -122.364 1590 \n", + "2726079098 0 98014 47.7020 -121.892 2820 \n", + "5072200040 0 98166 47.4419 -122.340 1960 \n", + "... ... ... ... ... ... \n", + "5104531120 0 98038 47.3525 -122.002 3120 \n", + "2685600090 0 98108 47.5492 -122.300 1420 \n", + "9528104985 0 98115 47.6771 -122.328 1670 \n", + "3450300430 0 98059 47.4996 -122.163 1650 \n", + "3956900480 0 98199 47.6500 -122.415 2630 \n", + "\n", + " sqft_lot15 date_numeric above_average_price \n", + "id \n", + "5205000020 9033 16534 0 \n", + "4221270290 4815 16395 1 \n", + "3438501327 2306 16559 0 \n", + "2726079098 175111 16331 1 \n", + "5072200040 10518 16192 0 \n", + "... ... ... ... \n", + "5104531120 7255 16517 1 \n", + "2685600090 6000 16392 0 \n", + "9528104985 3900 16378 1 \n", + "3450300430 8066 16440 0 \n", + "3956900480 6780 16316 1 \n", + "\n", + "[17290 rows x 21 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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
above_average_price
id
52050000200
42212702901
34385013270
27260790981
50722000400
......
51045311201
26856000900
95281049851
34503004300
39569004801
\n", + "

17290 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " above_average_price\n", + "id \n", + "5205000020 0\n", + "4221270290 1\n", + "3438501327 0\n", + "2726079098 1\n", + "5072200040 0\n", + "... ...\n", + "5104531120 1\n", + "2685600090 0\n", + "9528104985 1\n", + "3450300430 0\n", + "3956900480 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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongrade...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15date_numericabove_average_price
id
9421500010442500.042.25197079021.00038...660196009812547.7249-122.29818608021164710
3204800200665000.042.753320105742.00058...1100196009805647.5376-122.18027208330164431
3320000212397500.032.2513509802.00038...300200709814447.5998-122.31213501245163490
9206950100343000.032.50127025092.00038...0200409810647.5357-122.36514202206162380
3121069038355000.032.502620788431.00347...1310196409809247.2584-122.0932330130244165200
..................................................................
7889601165268000.032.50170022502.00037...0201409816847.4914-122.33415204500163080
7278700070660000.032.50240064741.00238...840196409817747.7728-122.386234010856164371
1823059030159000.031.00132065341.00037...0195209805547.4806-122.22321407405163000
3448900420620000.042.50250082822.00039...0201309805647.5127-122.16925008046163351
626059335527000.042.252330194362.00038...0198709801147.7663-122.215191010055163170
\n", + "

4323 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " price bedrooms bathrooms sqft_living sqft_lot floors \\\n", + "id \n", + "9421500010 442500.0 4 2.25 1970 7902 1.0 \n", + "3204800200 665000.0 4 2.75 3320 10574 2.0 \n", + "3320000212 397500.0 3 2.25 1350 980 2.0 \n", + "9206950100 343000.0 3 2.50 1270 2509 2.0 \n", + "3121069038 355000.0 3 2.50 2620 78843 1.0 \n", + "... ... ... ... ... ... ... \n", + "7889601165 268000.0 3 2.50 1700 2250 2.0 \n", + "7278700070 660000.0 3 2.50 2400 6474 1.0 \n", + "1823059030 159000.0 3 1.00 1320 6534 1.0 \n", + "3448900420 620000.0 4 2.50 2500 8282 2.0 \n", + "626059335 527000.0 4 2.25 2330 19436 2.0 \n", + "\n", + " waterfront view condition grade ... sqft_basement yr_built \\\n", + "id ... \n", + "9421500010 0 0 3 8 ... 660 1960 \n", + "3204800200 0 0 5 8 ... 1100 1960 \n", + "3320000212 0 0 3 8 ... 300 2007 \n", + "9206950100 0 0 3 8 ... 0 2004 \n", + "3121069038 0 3 4 7 ... 1310 1964 \n", + "... ... ... ... ... ... ... ... \n", + "7889601165 0 0 3 7 ... 0 2014 \n", + "7278700070 0 2 3 8 ... 840 1964 \n", + "1823059030 0 0 3 7 ... 0 1952 \n", + "3448900420 0 0 3 9 ... 0 2013 \n", + "626059335 0 0 3 8 ... 0 1987 \n", + "\n", + " yr_renovated zipcode lat long sqft_living15 \\\n", + "id \n", + "9421500010 0 98125 47.7249 -122.298 1860 \n", + "3204800200 0 98056 47.5376 -122.180 2720 \n", + "3320000212 0 98144 47.5998 -122.312 1350 \n", + "9206950100 0 98106 47.5357 -122.365 1420 \n", + "3121069038 0 98092 47.2584 -122.093 2330 \n", + "... ... ... ... ... ... \n", + "7889601165 0 98168 47.4914 -122.334 1520 \n", + "7278700070 0 98177 47.7728 -122.386 2340 \n", + "1823059030 0 98055 47.4806 -122.223 2140 \n", + "3448900420 0 98056 47.5127 -122.169 2500 \n", + "626059335 0 98011 47.7663 -122.215 1910 \n", + "\n", + " sqft_lot15 date_numeric above_average_price \n", + "id \n", + "9421500010 8021 16471 0 \n", + "3204800200 8330 16443 1 \n", + "3320000212 1245 16349 0 \n", + "9206950100 2206 16238 0 \n", + "3121069038 130244 16520 0 \n", + "... ... ... ... \n", + "7889601165 4500 16308 0 \n", + "7278700070 10856 16437 1 \n", + "1823059030 7405 16300 0 \n", + "3448900420 8046 16335 1 \n", + "626059335 10055 16317 0 \n", + "\n", + "[4323 rows x 21 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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
above_average_price
id
94215000100
32048002001
33200002120
92069501000
31210690380
......
78896011650
72787000701
18230590300
34489004201
6260593350
\n", + "

4323 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " above_average_price\n", + "id \n", + "9421500010 0\n", + "3204800200 1\n", + "3320000212 0\n", + "9206950100 0\n", + "3121069038 0\n", + "... ...\n", + "7889601165 0\n", + "7278700070 1\n", + "1823059030 0\n", + "3448900420 1\n", + "626059335 0\n", + "\n", + "[4323 rows x 1 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from typing import Tuple\n", + "import pandas as pd\n", + "from pandas import DataFrame\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "def split_stratified_into_train_val_test(\n", + " df_input,\n", + " stratify_colname=\"y\",\n", + " frac_train=0.6,\n", + " frac_val=0.15,\n", + " frac_test=0.25,\n", + " random_state=None,\n", + ") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame, DataFrame, DataFrame]:\n", + " if frac_train + frac_val + frac_test != 1.0:\n", + " raise ValueError(\n", + " \"fractions %f, %f, %f do not add up to 1.0\"\n", + " % (frac_train, frac_val, frac_test)\n", + " )\n", + " if stratify_colname not in df_input.columns:\n", + " raise ValueError(\"%s is not a column in the dataframe\" % (stratify_colname))\n", + " X = df_input \n", + " y = df_input[\n", + " [stratify_colname]\n", + " ] \n", + " \n", + " df_train, df_temp, y_train, y_temp = train_test_split(\n", + " X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n", + " )\n", + " 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", + " \n", + " relative_frac_test = frac_test / (frac_val + frac_test)\n", + " df_val, df_test, y_val, y_test = train_test_split(\n", + " df_temp,\n", + " y_temp,\n", + " stratify=y_temp,\n", + " test_size=relative_frac_test,\n", + " random_state=random_state,\n", + " )\n", + " assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n", + " return df_train, df_val, df_test, y_train, y_val, y_test\n", + "\n", + "X_train, X_val, X_test, y_train, y_val, y_test = split_stratified_into_train_val_test(\n", + " df,\n", + " stratify_colname=\"above_average_price\",\n", + " frac_train=0.80,\n", + " frac_val=0,\n", + " frac_test=0.20,\n", + " random_state=random_state,\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": [ + "#### Формирование конвейера для классификации данных\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": 29, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.impute import SimpleImputer\n", + "\n", + "# Список числовых колонок\n", + "num_columns = [\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", + " \"date_numeric\"\n", + "]\n", + "columns_to_drop = [\"date\"]\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", + "drop_columns = ColumnTransformer(\n", + " transformers=[\n", + " (\"drop_columns\", \"drop\", columns_to_drop),\n", + " ],\n", + " remainder=\"passthrough\",\n", + ")\n", + "\n", + "# Предобработка только для числовых данных\n", + "features_preprocessing = ColumnTransformer(\n", + " transformers=[\n", + " (\"preprocessing_num\", preprocessing_num, num_columns),\n", + " ],\n", + " remainder=\"passthrough\",\n", + ")\n", + "\n", + "# Итоговый конвейер\n", + "pipeline_end = Pipeline(\n", + " [\n", + " (\"features_preprocessing\", features_preprocessing),\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Демонстрация работы конвейера для предобработки данных при классификации" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
preprocessing_num__pricepreprocessing_num__bedroomspreprocessing_num__bathroomspreprocessing_num__sqft_livingpreprocessing_num__sqft_lotpreprocessing_num__floorspreprocessing_num__waterfrontpreprocessing_num__viewpreprocessing_num__conditionpreprocessing_num__grade...preprocessing_num__sqft_basementpreprocessing_num__yr_builtpreprocessing_num__yr_renovatedpreprocessing_num__zipcodepreprocessing_num__latpreprocessing_num__longpreprocessing_num__sqft_living15preprocessing_num__sqft_lot15preprocessing_num__date_numericremainder__above_average_price
id
5205000020-0.4928970.6975000.4979600.582210-0.1818720.939548-0.087375-0.307461-0.6302650.293371...-0.6608700.576070-0.208897-1.397782-2.073883-0.5614870.427608-0.1303751.4320620
42212702900.014419-0.4060660.497960-0.097029-0.2393180.939548-0.087375-0.307461-0.6302650.293371...-0.6608701.122105-0.208897-0.0546500.2276821.4033760.383811-0.2894640.2035731
3438501327-0.513475-1.5096330.497960-0.557159-0.3001200.939548-0.087375-0.307461-0.630265-0.560854...0.2214521.292741-0.2088970.523643-0.077510-1.068778-0.579724-0.3840961.6530130
27260790980.055850-0.4060660.4979600.8341864.8308310.939548-0.087375-0.307461-0.6302651.147596...-0.6608700.678452-0.208897-1.1925811.0278192.3036411.2159546.133562-0.3620621
5072200040-0.374916-0.406066-0.153502-0.129896-0.043661-0.918592-0.0873752.2869742.4346450.293371...0.040463-0.481872-0.2088971.642920-0.848786-0.897299-0.039561-0.074365-1.5905510
..................................................................
51045311200.6457521.8010660.8236911.831134-0.0681780.939548-0.0873754.881408-0.6302652.001820...-0.6608701.156232-0.208897-0.744871-1.4938021.5176961.653925-0.1974351.2818151
2685600090-0.534053-0.406066-0.804965-1.148755-0.190596-0.918592-0.087375-0.3074610.902190-1.415078...-0.660870-1.710451-0.2088970.560953-0.074624-0.611501-0.827907-0.2447700.1770590
95281049850.195780-1.509633-1.456427-0.885823-0.235388-0.918592-0.087375-0.307461-0.630265-0.560854...-0.276268-2.427121-0.2088970.6915350.848167-0.811560-0.462932-0.3239750.0533261
3450300430-0.6095050.697500-0.804965-0.381872-0.173076-0.918592-0.087375-0.3074610.902190-0.560854...0.968033-0.277109-0.208897-0.353124-0.4324850.367358-0.492130-0.1668470.6012850
39569004800.656727-0.406066-0.479234-0.097029-0.223405-0.918592-0.0873750.989756-0.6302650.293371...0.832291-1.027907-0.2088972.2585230.652642-1.4331710.938573-0.215351-0.4946331
\n", + "

17290 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " preprocessing_num__price preprocessing_num__bedrooms \\\n", + "id \n", + "5205000020 -0.492897 0.697500 \n", + "4221270290 0.014419 -0.406066 \n", + "3438501327 -0.513475 -1.509633 \n", + "2726079098 0.055850 -0.406066 \n", + "5072200040 -0.374916 -0.406066 \n", + "... ... ... \n", + "5104531120 0.645752 1.801066 \n", + "2685600090 -0.534053 -0.406066 \n", + "9528104985 0.195780 -1.509633 \n", + "3450300430 -0.609505 0.697500 \n", + "3956900480 0.656727 -0.406066 \n", + "\n", + " preprocessing_num__bathrooms preprocessing_num__sqft_living \\\n", + "id \n", + "5205000020 0.497960 0.582210 \n", + "4221270290 0.497960 -0.097029 \n", + "3438501327 0.497960 -0.557159 \n", + "2726079098 0.497960 0.834186 \n", + "5072200040 -0.153502 -0.129896 \n", + "... ... ... \n", + "5104531120 0.823691 1.831134 \n", + "2685600090 -0.804965 -1.148755 \n", + "9528104985 -1.456427 -0.885823 \n", + "3450300430 -0.804965 -0.381872 \n", + "3956900480 -0.479234 -0.097029 \n", + "\n", + " preprocessing_num__sqft_lot preprocessing_num__floors \\\n", + "id \n", + "5205000020 -0.181872 0.939548 \n", + "4221270290 -0.239318 0.939548 \n", + "3438501327 -0.300120 0.939548 \n", + "2726079098 4.830831 0.939548 \n", + "5072200040 -0.043661 -0.918592 \n", + "... ... ... \n", + "5104531120 -0.068178 0.939548 \n", + "2685600090 -0.190596 -0.918592 \n", + "9528104985 -0.235388 -0.918592 \n", + "3450300430 -0.173076 -0.918592 \n", + "3956900480 -0.223405 -0.918592 \n", + "\n", + " preprocessing_num__waterfront preprocessing_num__view \\\n", + "id \n", + "5205000020 -0.087375 -0.307461 \n", + "4221270290 -0.087375 -0.307461 \n", + "3438501327 -0.087375 -0.307461 \n", + "2726079098 -0.087375 -0.307461 \n", + "5072200040 -0.087375 2.286974 \n", + "... ... ... \n", + "5104531120 -0.087375 4.881408 \n", + "2685600090 -0.087375 -0.307461 \n", + "9528104985 -0.087375 -0.307461 \n", + "3450300430 -0.087375 -0.307461 \n", + "3956900480 -0.087375 0.989756 \n", + "\n", + " preprocessing_num__condition preprocessing_num__grade ... \\\n", + "id ... \n", + "5205000020 -0.630265 0.293371 ... \n", + "4221270290 -0.630265 0.293371 ... \n", + "3438501327 -0.630265 -0.560854 ... \n", + "2726079098 -0.630265 1.147596 ... \n", + "5072200040 2.434645 0.293371 ... \n", + "... ... ... ... \n", + "5104531120 -0.630265 2.001820 ... \n", + "2685600090 0.902190 -1.415078 ... \n", + "9528104985 -0.630265 -0.560854 ... \n", + "3450300430 0.902190 -0.560854 ... \n", + "3956900480 -0.630265 0.293371 ... \n", + "\n", + " preprocessing_num__sqft_basement preprocessing_num__yr_built \\\n", + "id \n", + "5205000020 -0.660870 0.576070 \n", + "4221270290 -0.660870 1.122105 \n", + "3438501327 0.221452 1.292741 \n", + "2726079098 -0.660870 0.678452 \n", + "5072200040 0.040463 -0.481872 \n", + "... ... ... \n", + "5104531120 -0.660870 1.156232 \n", + "2685600090 -0.660870 -1.710451 \n", + "9528104985 -0.276268 -2.427121 \n", + "3450300430 0.968033 -0.277109 \n", + "3956900480 0.832291 -1.027907 \n", + "\n", + " preprocessing_num__yr_renovated preprocessing_num__zipcode \\\n", + "id \n", + "5205000020 -0.208897 -1.397782 \n", + "4221270290 -0.208897 -0.054650 \n", + "3438501327 -0.208897 0.523643 \n", + "2726079098 -0.208897 -1.192581 \n", + "5072200040 -0.208897 1.642920 \n", + "... ... ... \n", + "5104531120 -0.208897 -0.744871 \n", + "2685600090 -0.208897 0.560953 \n", + "9528104985 -0.208897 0.691535 \n", + "3450300430 -0.208897 -0.353124 \n", + "3956900480 -0.208897 2.258523 \n", + "\n", + " preprocessing_num__lat preprocessing_num__long \\\n", + "id \n", + "5205000020 -2.073883 -0.561487 \n", + "4221270290 0.227682 1.403376 \n", + "3438501327 -0.077510 -1.068778 \n", + "2726079098 1.027819 2.303641 \n", + "5072200040 -0.848786 -0.897299 \n", + "... ... ... \n", + "5104531120 -1.493802 1.517696 \n", + "2685600090 -0.074624 -0.611501 \n", + "9528104985 0.848167 -0.811560 \n", + "3450300430 -0.432485 0.367358 \n", + "3956900480 0.652642 -1.433171 \n", + "\n", + " preprocessing_num__sqft_living15 preprocessing_num__sqft_lot15 \\\n", + "id \n", + "5205000020 0.427608 -0.130375 \n", + "4221270290 0.383811 -0.289464 \n", + "3438501327 -0.579724 -0.384096 \n", + "2726079098 1.215954 6.133562 \n", + "5072200040 -0.039561 -0.074365 \n", + "... ... ... \n", + "5104531120 1.653925 -0.197435 \n", + "2685600090 -0.827907 -0.244770 \n", + "9528104985 -0.462932 -0.323975 \n", + "3450300430 -0.492130 -0.166847 \n", + "3956900480 0.938573 -0.215351 \n", + "\n", + " preprocessing_num__date_numeric remainder__above_average_price \n", + "id \n", + "5205000020 1.432062 0 \n", + "4221270290 0.203573 1 \n", + "3438501327 1.653013 0 \n", + "2726079098 -0.362062 1 \n", + "5072200040 -1.590551 0 \n", + "... ... ... \n", + "5104531120 1.281815 1 \n", + "2685600090 0.177059 0 \n", + "9528104985 0.053326 1 \n", + "3450300430 0.601285 0 \n", + "3956900480 -0.494633 1 \n", + "\n", + "[17290 rows x 21 columns]" + ] + }, + "execution_count": 30, + "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": null, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn import ensemble, linear_model, naive_bayes, neighbors, neural_network, tree\n", + "\n", + "# Сами классификационные модели\n", + "class_models = {\n", + " # от 0 до 1, принадлежит ли объект к классу\n", + " \"logistic\": {\"model\": linear_model.LogisticRegression()},\n", + " # Логическая, но с регуляризацией (модель не так точно запоминает данные)\n", + " \"ridge\": {\n", + " \"model\": linear_model.LogisticRegression(penalty=\"l2\", class_weight=\"balanced\")\n", + " },\n", + " # Деления данных на условия с помощью построения дерева\n", + " \"decision_tree\": {\n", + " \"model\": tree.DecisionTreeClassifier(max_depth=7, random_state=random_state)\n", + " },\n", + " # Определяет ближайших объектов и находит и класс\n", + " \"knn\": {\"model\": neighbors.KNeighborsClassifier(n_neighbors=7)},\n", + " # Вероятности для классификации\n", + " \"naive_bayes\": {\"model\": naive_bayes.GaussianNB()},\n", + " # Постепенно улучшает предсказания с помощью слабых моделей\n", + " \"gradient_boosting\": {\n", + " \"model\": ensemble.GradientBoostingClassifier(n_estimators=210)\n", + " },\n", + " \"random_forest\": {\n", + " \"model\": ensemble.RandomForestClassifier(\n", + " max_depth=11, class_weight=\"balanced\", random_state=random_state\n", + " )\n", + " },\n", + " \"mlp\": {\n", + " \"model\": neural_network.MLPClassifier(\n", + " hidden_layer_sizes=(7,),\n", + " max_iter=500,\n", + " early_stopping=True,\n", + " random_state=random_state,\n", + " )\n", + " },\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Обучение моделей на обучающем наборе данных и оценка на тестовом" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: logistic\n", + "Model: ridge\n", + "Model: decision_tree\n", + "Model: knn\n", + "Model: naive_bayes\n", + "Model: gradient_boosting\n", + "Model: random_forest\n", + "Model: mlp\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from sklearn import metrics\n", + "\n", + "for model_name in class_models.keys():\n", + " print(f\"Model: {model_name}\")\n", + " model = class_models[model_name][\"model\"]\n", + "\n", + " model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\n", + " model_pipeline = model_pipeline.fit(X_train, y_train.values.ravel())\n", + "\n", + " y_train_predict = model_pipeline.predict(X_train)\n", + " y_test_probs = model_pipeline.predict_proba(X_test)[:, 1]\n", + " y_test_predict = np.where(y_test_probs > 0.5, 1, 0)\n", + "\n", + " class_models[model_name][\"pipeline\"] = model_pipeline\n", + " class_models[model_name][\"probs\"] = y_test_probs\n", + " class_models[model_name][\"preds\"] = y_test_predict\n", + "\n", + " class_models[model_name][\"Precision_train\"] = metrics.precision_score(\n", + " y_train, y_train_predict\n", + " )\n", + " class_models[model_name][\"Precision_test\"] = metrics.precision_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Recall_train\"] = metrics.recall_score(\n", + " y_train, y_train_predict\n", + " )\n", + " class_models[model_name][\"Recall_test\"] = metrics.recall_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Accuracy_train\"] = metrics.accuracy_score(\n", + " y_train, y_train_predict\n", + " )\n", + " class_models[model_name][\"Accuracy_test\"] = metrics.accuracy_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"ROC_AUC_test\"] = metrics.roc_auc_score(\n", + " y_test, y_test_probs\n", + " )\n", + " class_models[model_name][\"F1_train\"] = metrics.f1_score(y_train, y_train_predict)\n", + " class_models[model_name][\"F1_test\"] = metrics.f1_score(y_test, y_test_predict)\n", + " class_models[model_name][\"MCC_test\"] = metrics.matthews_corrcoef(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Confusion_matrix\"] = metrics.confusion_matrix(\n", + " y_test, y_test_predict\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Сводная таблица оценок качества для использованных моделей классификации" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Матрица неточностей" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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mROToxrO0dERgYGBFa7ftm1bbN68GV5eXiWu0BTz9fXFzz//jM6dOwMougpz8uRJtG3bttT6LVq0gE6nw8GDBxEaGlqivPjqmFarlfYFBQVBpVLhypUrZV7Vatq0qXQDa7Hjx4+Xf5L/cPToUQQEBODtt9+W9l2+fLlEvStXruDGjRvw8/OTjmNlZYXGjRvD29sbfn5+uHjxIoYMGWLU8YmISH4Ymw1jbCZz4oIMpGfIkCHw8PBAv379cPjwYaSkpCA2Nhavv/46rl27BgB44403sGDBAmzfvh3nz5/Hq6++avA5CPXq1UNERARGjhyJ7du3S21u2bIFABAQEACFQoEdO3bg5s2byMnJgbOzM6ZMmYJJkyZh/fr1SE5OxqlTp/Dxxx9LN1KOHTsWFy5cwNSpU5GYmIiNGzciOjraqPN94okncOXKFWzatAnJyclYtmxZqTew2tnZISIiAmfOnMHhw4fx+uuvY+DAgfDx8QEAzJkzB1FRUVi2bBn+/PNP/P7771i3bh0WL15sVH+IiIgextjM2ExVyNw3PVHl+edNn8aUp6amiuHDhwsPDw+hUqlEgwYNxOjRo0VWVpYQougmzzfeeEOo1Wrh6uoqJk+eLIYPH17mTZ9CCPHgwQMxadIk4evrK5RKpQgMDBRr166VyufOnSt8fHyEQqEQERERQoiiG1WXLl0qGjduLGxtbYWnp6cICwsTBw8elN73ww8/iMDAQKFSqUSnTp3E2rVrjb7pc+rUqaJWrVrCyclJvPjii2LJkiXCxcVFKp81a5Zo1aqVWLFihfDz8xN2dnbihRdeEJmZmXrtbtiwQbRu3VoolUrh5uYmOnfuLLZt2yaE4E2fRERUhLG5dIzNZCkUQpRxpx4REREREZGMcFodERERERERmBwREREREREBYHJEREREREQEgMkRERERERERACZHREREREREAJgcERERERERAWByREREREREBIDJEREREREREQAmR0RERERERACYHBEREREREQFgckRERERERASAyREREREREREAJkdEREREREQAmBwREREREREBYHJERuratSu6du1q9j40b97crH0gIiKqbAqFArNnz5ZeR0dHQ6FQ4NKlS2brkyGxsbFQKBTYunWrubtilEuXLkGhUCA6OtrcXSELwOSIiIiIiAAAubm5mD17NmJjY83dFZPbuHEj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cRkREVFNJ+fYzGl1RGReQhRthsoBXL16VW+5UJVKVWr13r17S/9u2bIl2rdvj4CAAGzZsgX29vam6TMREVFNJuPYzJEjIjIrhVaUuwFFD6L851bWF/DDXF1d0ahRIyQlJcHHxwcajQZ3797Vq5Oeni7Ng/bx8SmxQk7x69LmShMREdU0co7NTI6IyLxEBbbHkJOTg+TkZPj6+iI4OBi2trbYv3+/VJ6YmIgrV64gJCQEABASEoLff/8dGRkZUp2YmBio1WoEBQU9XmeIiIiqAxnHZk6rIyKzMvWKOFOmTEGfPn0QEBCAGzduYNasWbC2tsagQYPg4uKCUaNGYfLkyXB3d4darcZrr72GkJAQPP300wCAnj17IigoCMOGDcPChQuRlpaGd955B+PHj6/wFTEiIqLqTM6xmckREZmXTgBaA1+yRj5o7tq1axg0aBBu374NT09PdOzYEcePH4enpycAYMmSJbCyssLzzz+P/Px8hIWFYcWKFdL7ra2tsWPHDowbNw4hISFwdHREREQE5s6d+0inR0REVO3IODYzOSIiszL11alNmzYZLLezs8Py5cuxfPnyMusEBARg165dRh2XiIioppBzbGZyRETmJVDOijhV1hMiIiICZB2bmRwRkXlpy7mz09CwPhEREZmejGMzkyMiMitTD90TERHR45FzbGZyRETmVcEHzREREVEVkXFsZnJEROal0wEKneFyIiIiqjoyjs1MjojIvHQAFOWUExERUdWRcWxmckREZiXnec1ERESWSM6xmckREZmXVgeDl6C0NfjyFBERkSWScWxmckRE5iXjmz6JiIgskoxjM5MjIjKzcr6Aa/KT5oiIiCySfGMzkyMiMi+tDhDyXBGHiIjIIsk4NjM5IiLzEuV8ARsqIyIiItOTcWxmckRE5iXjec1EREQWScaxmckREZmXjIfuiYiILJKMYzOTIyIyL4Fyrk5VWU+IiIgIkHVsZnJEROYl46F7IiIiiyTj2MzkiIjMS6sFhLbscp2BMiIiIjI9GcdmJkdEZF4yvjpFRERkkWQcm5kcEZF56QQMTl7W1dwvYCIiIosk49jM5IiIzErotBAGhu4NlREREZHpyTk2MzkiIvMS5VydqsFD90RERBZJxrGZyRERmZdOByjk+RRuIiIiiyTj2MzkiIjMSmi1EAp5Dt0TERFZIjnHZiZHRGRe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iFHHJyIi+WFsNoyxmcyJCzKQniFDhsDDwwP9+vXD4cOHkZKSgtjYWLz++uu4du0aAOCNN97AggULsH37dpw/fx6vvvqqwecg1KtXDxERERg5ciS2b98utbllyxYAQEBAABQKBXbs2IGbN28iJycHzs7OmDJlCiZNmoT169cjOTkZp06dwscffyzdSDl27FhcuHABU6dORWJiIjZu3Ijo6GijzveJJ57AlStXsGnTJiQnJ2PZsmWl3sBqZ2eHiIgInDlzBocPH8brr7+OgQMHwsfHBwAwZ84cREVFYdmyZfjzzz/x+++/Y926dVi8eLFR/SEiInoYYzNjM1Uhc9/0RJXnnzd9GlOempoqhg8fLjw8PIRKpRINGjQQo0ePFllZWUKIops833jjDaFWq4Wrq6uYPHmyGD58eJk3fQohxIMHD8SkSZOEr6+vUCqVIjAwUKxdu1Yqnzt3rvDx8REKhUJEREQIIYpuVF26dKlo3LixsLW1FZ6eniIsLEwcPHhQet8PP/wgAgMDhUqlEp06dRJr1641+qbPqVOnilq1agknJyfx4osviiVLlggXFxepfNasWaJVq1ZixYoVws/PT9jZ2YkXXnhBZGZm6rW7YcMG0bp1a6FUKoWbm5vo3Lmz2LZtmxCCN30SEVERxubSMTaTpVAIUcadekRERERERDLCaXVERERERERgckRERERERASAyREREREREREAJkdEREREREQAmBwREREREREBYHJEREREREQEgMkRERERERERACZHREREREREAJgcERERERERAWByREREREREBIDJEREREREREQAmR0RERERERACYHBEREREREQFgckRERERERASAyRE9JoVCgdmzZ5u7G2X68ssv0aRJE9ja2sLV1dXc3SEiIqpRLl26BIVCgejoaHN3hcgkmBxRjXX+/HlERkaiYcOGWLNmDT799FNzd6mEGzduYPbs2YiPjzd3V4iIiIhkz8bcHSCqLLGxsdDpdPjoo48QGBho7u6U6saNG5gzZw7q1auH1q1bm7s7RERERLLGkaMa5v79++bugsXIyMgAAJNOp8vNzTVZW0RERERkWZgcVWOzZ8+GQqHAuXPnMHjwYLi5uaFjx4747bffEBkZiQYNGsDOzg4+Pj4YOXIkbt++tPiQngAAU1NJREFUXer7k5KSEBkZCVdXV7i4uGDEiBEl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DAwbNgyenp4YMGAA9u/fj8zMTCQlJWHixIm4dOkSAOD111/H/PnzsXXrVpw9exb/+Mc/jD4HoUmTJoiOjsbo0aOxdetW/Ta//fZbAEBQUBBkMhm2b9+Oa9euobi4GC4uLpgyZQomTZqENWvWICMjAydOnMDSpUv1F1KOHTsW586dw9SpU5GWlob169dj9erVJu1v8+bNkZWVhQ0bNiAjIwNLlix56AWs9vb2iI6OxqlTp7B//35MnDgRQ4YMga+vLwBgzpw5iI+Px5IlS/DHH3/g119/RUJCAj799FOTxkNERHQ/ZjOzmeqR2Bc9Ud2596JPU9pzcnKEkSNHCp6enoJSqRSaNm0qvPrqq0JhYaEgCJUXeb7++uuCSqUSXF1dhcmTJwsjR46s9qJPQRCEO3fuCJMmTRL8/PwEhUIhhISECKtWrdK3z507V/D19RVkMpkQHR0tCELlhaqLFy8WWrZsKdjZ2QleXl5CVFSUsHfvXv37tm3bJoSEhAhKpVLo1q2bsGrVKpMv+pw6darg4eEhODs7C3//+9+FRYsWCWq1Wt8+a9YsoV27dsLy5csFf39/wd7eXnjxxReF/Px8g+2uW7dOaN++vaBQKAQ3Nzehe/fuwubNmwVB4EWfRERUidn8cMxmshQyQajmSj0iIiIiIiIJ4Wl1REREREREYHFEREREREQEgMURERERERERABZHREREREREAFgcERERERERAWBxREREREREBIDFEREREREREQAWR0RERERERABYHBEREREREQFgcURERERERASAxREREREREREA4P8BuJA38nbYB/wAAAAASUVORK5CYII=", + "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": [ + "Точность, полнота, верность (аккуратность), F-мера" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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", + "
 Precision_trainPrecision_testRecall_trainRecall_testAccuracy_trainAccuracy_testF1_trainF1_test
logistic1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
ridge1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
decision_tree1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
naive_bayes1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
random_forest1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
gradient_boosting1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
mlp0.9990540.9981060.9998420.9981060.9995950.9986120.9994480.998106
knn0.9820810.9776640.9775850.9671720.9852520.9798750.9798280.972390
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n", + " [\n", + " \"Precision_train\",\n", + " \"Precision_test\",\n", + " \"Recall_train\",\n", + " \"Recall_test\",\n", + " \"Accuracy_train\",\n", + " \"Accuracy_test\",\n", + " \"F1_train\",\n", + " \"F1_test\",\n", + " ]\n", + "]\n", + "class_metrics.sort_values(\n", + " by=\"Accuracy_test\", ascending=False\n", + ").style.background_gradient(\n", + " cmap=\"plasma\",\n", + " low=0.3,\n", + " high=1,\n", + " subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n", + ").background_gradient(\n", + " cmap=\"viridis\",\n", + " low=1,\n", + " high=0.3,\n", + " subset=[\n", + " \"Precision_train\",\n", + " \"Precision_test\",\n", + " \"Recall_train\",\n", + " \"Recall_test\",\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ROC-кривая, каппа Коэна, коэффициент корреляции Мэтьюса" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Accuracy_testF1_testROC_AUC_testCohen_kappa_testMCC_test
logistic1.0000001.0000001.0000001.0000001.000000
ridge1.0000001.0000001.0000001.0000001.000000
decision_tree1.0000001.0000001.0000001.0000001.000000
naive_bayes1.0000001.0000001.0000001.0000001.000000
random_forest1.0000001.0000001.0000001.0000001.000000
gradient_boosting1.0000001.0000001.0000001.0000001.000000
mlp0.9986120.9981060.9993680.9970110.997011
knn0.9798750.9723900.9966360.9565580.956592
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "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": 36, + "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": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Error items count: 0'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricePredictedbedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewcondition...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15date_numericabove_average_price
id
\n", + "

0 rows × 22 columns

\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [price, Predicted, 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, date_numeric, above_average_price]\n", + "Index: []\n", + "\n", + "[0 rows x 22 columns]" + ] + }, + "execution_count": 37, + "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", + "# Cравнение реальных значений (y_test[\"above_average_price\"]) с предсказанными значениями (y_pred)\n", + "# на тестовых данных\n", + "error_index = y_test[y_test[\"above_average_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": "markdown", + "metadata": {}, + "source": [ + "#### Пример использования обученной модели (конвейера) для предсказания" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongrade...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15date_numericabove_average_price
626059335527000.04.02.252330.019436.02.00.00.03.08.0...0.01987.00.098011.047.7663-122.2151910.010055.016317.00.0
\n", + "

1 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " price bedrooms bathrooms sqft_living sqft_lot floors \\\n", + "626059335 527000.0 4.0 2.25 2330.0 19436.0 2.0 \n", + "\n", + " waterfront view condition grade ... sqft_basement yr_built \\\n", + "626059335 0.0 0.0 3.0 8.0 ... 0.0 1987.0 \n", + "\n", + " yr_renovated zipcode lat long sqft_living15 sqft_lot15 \\\n", + "626059335 0.0 98011.0 47.7663 -122.215 1910.0 10055.0 \n", + "\n", + " date_numeric above_average_price \n", + "626059335 16317.0 0.0 \n", + "\n", + "[1 rows x 21 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
preprocessing_num__pricepreprocessing_num__bedroomspreprocessing_num__bathroomspreprocessing_num__sqft_livingpreprocessing_num__sqft_lotpreprocessing_num__floorspreprocessing_num__waterfrontpreprocessing_num__viewpreprocessing_num__conditionpreprocessing_num__grade...preprocessing_num__sqft_basementpreprocessing_num__yr_builtpreprocessing_num__yr_renovatedpreprocessing_num__zipcodepreprocessing_num__latpreprocessing_num__longpreprocessing_num__sqft_living15preprocessing_num__sqft_lot15preprocessing_num__date_numericremainder__above_average_price
626059335-0.0346930.69750.1722290.2754570.1081870.939548-0.087375-0.307461-0.6302650.293371...-0.660870.541943-0.208897-1.2485451.491739-0.00418-0.112556-0.091828-0.4857950.0
\n", + "

1 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " preprocessing_num__price preprocessing_num__bedrooms \\\n", + "626059335 -0.034693 0.6975 \n", + "\n", + " preprocessing_num__bathrooms preprocessing_num__sqft_living \\\n", + "626059335 0.172229 0.275457 \n", + "\n", + " preprocessing_num__sqft_lot preprocessing_num__floors \\\n", + "626059335 0.108187 0.939548 \n", + "\n", + " preprocessing_num__waterfront preprocessing_num__view \\\n", + "626059335 -0.087375 -0.307461 \n", + "\n", + " preprocessing_num__condition preprocessing_num__grade ... \\\n", + "626059335 -0.630265 0.293371 ... \n", + "\n", + " preprocessing_num__sqft_basement preprocessing_num__yr_built \\\n", + "626059335 -0.66087 0.541943 \n", + "\n", + " preprocessing_num__yr_renovated preprocessing_num__zipcode \\\n", + "626059335 -0.208897 -1.248545 \n", + "\n", + " preprocessing_num__lat preprocessing_num__long \\\n", + "626059335 1.491739 -0.00418 \n", + "\n", + " preprocessing_num__sqft_living15 preprocessing_num__sqft_lot15 \\\n", + "626059335 -0.112556 -0.091828 \n", + "\n", + " preprocessing_num__date_numeric remainder__above_average_price \n", + "626059335 -0.485795 0.0 \n", + "\n", + "[1 rows x 21 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'predicted: 0 (proba: [0.99455988 0.00544012])'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'real: 0'" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = class_models[best_model][\"pipeline\"]\n", + "\n", + "example_id = 626059335\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": 42, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\numpy\\ma\\core.py:2881: RuntimeWarning: invalid value encountered in cast\n", + " _data = np.array(data, dtype=dtype, copy=copy,\n" + ] + }, + { + "data": { + "text/plain": [ + "{'model__criterion': 'gini',\n", + " 'model__max_depth': 2,\n", + " 'model__max_features': 'sqrt',\n", + " 'model__n_estimators': 10}" + ] + }, + "execution_count": 42, + "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, 20, 30, 40, 50, 100, 150, 200, 250, 500],\n", + " \"model__max_features\": [\"sqrt\", \"log2\", 2],\n", + " \"model__max_depth\": [2, 3, 4, 5, 6, 7, 8, 9 ,10],\n", + " \"model__criterion\": [\"gini\", \"entropy\", \"log_loss\"],\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": 43, + "metadata": {}, + "outputs": [], + "source": [ + "optimized_model = ensemble.RandomForestClassifier(\n", + " random_state=random_state,\n", + " criterion=\"gini\",\n", + " max_depth=7,\n", + " max_features=\"sqrt\",\n", + " n_estimators=30,\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": 44, + "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": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Precision_trainPrecision_testRecall_trainRecall_testAccuracy_trainAccuracy_testF1_trainF1_test
Name        
Old1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
New1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "optimized_metrics[\n", + " [\n", + " \"Precision_train\",\n", + " \"Precision_test\",\n", + " \"Recall_train\",\n", + " \"Recall_test\",\n", + " \"Accuracy_train\",\n", + " \"Accuracy_test\",\n", + " \"F1_train\",\n", + " \"F1_test\",\n", + " ]\n", + "].style.background_gradient(\n", + " cmap=\"plasma\",\n", + " low=0.3,\n", + " high=1,\n", + " subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n", + ").background_gradient(\n", + " cmap=\"viridis\",\n", + " low=1,\n", + " high=0.3,\n", + " subset=[\n", + " \"Precision_train\",\n", + " \"Precision_test\",\n", + " \"Recall_train\",\n", + " \"Recall_test\",\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Accuracy_testF1_testROC_AUC_testCohen_kappa_testMCC_test
Name     
Old1.0000001.0000001.0000001.0000001.000000
New1.0000001.0000001.0000001.0000001.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "optimized_metrics[\n", + " [\n", + " \"Accuracy_test\",\n", + " \"F1_test\",\n", + " \"ROC_AUC_test\",\n", + " \"Cohen_kappa_test\",\n", + " \"MCC_test\",\n", + " ]\n", + "].style.background_gradient(\n", + " cmap=\"plasma\",\n", + " low=0.3,\n", + " high=1,\n", + " subset=[\n", + " \"ROC_AUC_test\",\n", + " \"MCC_test\",\n", + " \"Cohen_kappa_test\",\n", + " ],\n", + ").background_gradient(\n", + " cmap=\"viridis\",\n", + " low=1,\n", + " high=0.3,\n", + " subset=[\n", + " \"Accuracy_test\",\n", + " \"F1_test\",\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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E5NvsDaqtLRUBQUFKigokCRt375dBQUF2rlzp0pLSzVmzBh99tln+v7777V06VLdcMMNatOmjTIzMyVJ7du3V69evTR06FB9/vnnWrlypUaMGKGbb77ZlRW33nqrQkNDNWTIEK1fv16vvfaannnmGY0aNers/77OArkGAHXIR7km+Ve2eVyk/etf/9Jdd92l1atXuz5bvXq17rnnHv373//2dDgAwJn46KWfq1evVufOnV0vcx41apQ6d+6sCRMmKDg4WGvXrtX111+vCy64QEOGDFHXrl31ySefuLWZzJ07V+3atdNVV12la665Rt27d9fLL7/s2h8dHa0PPvhA27dvV9euXXXfffdpwoQJdfr4fYlcA4A65cOXWftTttmczt9+y0DDhg1ls/3yF1FWVqaqqiqFhBx/7siJP0dGRurgwYMeTcAflJSUKDo6Wj9910r2qLN6awECWGZiJ19PARZT5axUnv6n4uJit5uZPXHi907S048pKCLc6zk5jh7TrpEPezWnQEKukWs4PXINJyPX6p6hpztOmTKllqcBAKjRWbZ01DgOXMg1APARcs0QQ0XawIEDa3seAADUGXINAGBlZ/0ya0k6duyYKioq3D4LxOVGAPAZrjjWKXINAGoZuWaIx43oZWVlGjFihOLi4hQZGamGDRu6bQAAE/nwKVjnCnINAOoQuWaIx0Xa2LFj9dFHH2nq1KkKCwvT9OnTNWnSJCUmJmrOnDm1MUcAAGoNuQYAsBqP2x3fffddzZkzR5dffrkGDRqkyy67TG3atFFycrLmzp2r/v3718Y8AeDcdJaPGa5xHNSIXAOAOkSuGeLxStrBgwfVqlUrScf79E88mrh79+5avny5ubMDgHOczWnehpqRawBQd8g1Yzwu0lq1aqXt27dLktq1a6fXX39d0vErkTExMaZODgCA2kauAQCsxuMibdCgQfr6668lSffff79eeOEFhYeHa+TIkRozZozpEwSAcxo3WNc6cg0A6hC5ZojH96SNHDnS9ef09HRt3LhRa9asUZs2bdShQwdTJwcAQG0j1wAAVuPVe9IkKTk5WcnJyWbMBQAAnyPXAAC+ZqhIe/bZZw0PePfdd5/1ZAAA7mwy5+bowH4GlufINQDwDXLNGENF2tNPP21oMJvNFtBh9scLUhViq+fracBiNs/p4uspwGIcR49Jw/7n62ngDMi148g11IRcw8nItbpnqEg78dQrAEAd430ytYJcAwAfIdcM8fqeNABALTLrCVYB/hQsAICfINcM8fgR/AAAAACA2sNKGgBYGVccAQCBhFwzhCINACzM5jTpKVgBHmYAAP9ArhlDuyMAAAAAWMhZFWmffPKJBgwYoLS0NP3444+SpP/7v//TihUrTJ0cAJzznCZuOC1yDQDqCLlmiMdF2ptvvqnMzExFREToq6++Unl5uSSpuLhYjz/+uOkTBIBzGmFW68g1AKhD5JohHhdpf//73zVt2jS98sorqlfvlxdgduvWTV9++aWpkwMAoLaRawAAq/H4wSGbNm1Sjx49Tvk8Ojpahw4dMmNOAICfcYN17SPXAKDukGvGeLySlpCQoC1btpzy+YoVK9SqVStTJgUA+JnTZt6GGpFrAFCHyDVDPC7Shg4dqnvuuUerVq2SzWbT7t27NXfuXI0ePVrDhw+vjTkCAFBryDUAgNV43O54//33y+Fw6KqrrtKRI0fUo0cPhYWFafTo0brrrrtqY44AcO7ipZ+1jlwDgDpErhnicZFms9n04IMPasyYMdqyZYtKS0uVkpKiBg0a1Mb8AACoVeQaAMBqPC7STggNDVVKSoqZcwEAnIQbrOsOuQYAtY9cM8bjIu2KK66QzXb6G/U++ugjryYEAPgV2kJqHbkGAHWIXDPE4yKtU6dObl9XVlaqoKBA33zzjQYOHGjWvAAAqBPkGgDAajwu0p5++ukaP584caJKS0u9nhAA4FdMagsJ9CuO3iDXAKAOkWuGePwI/tMZMGCAZsyYYdZwAADpl7YQMzZ4hFwDgFpArhliWpGWn5+v8PBws4YDAMCnyDUAgK943O7Yr18/t6+dTqf27Nmj1atX6+GHHzZtYgAAcYN1HSDXAKAOkWuGeFykRUdHu30dFBSktm3b6tFHH1VGRoZpEwMA8KjiukCuAUDdIdeM8ahIq66u1qBBg5SamqqGDRvW1pwAAKgT5BoAwIo8uictODhYGRkZOnToUC1NBwCAukOuAQCsyOMHh1x44YXatm1bbcwFAIA6R64BAKzG4yLt73//u0aPHq2FCxdqz549KikpcdsAACbiUcW1jlwDgDpErhli+J60Rx99VPfdd5+uueYaSdL1118vm83m2u90OmWz2VRdXW3+LAHgHMUN1rWHXAOAukeuGWO4SJs0aZLuvPNOffzxx7U5HwAA6gS5BgCwKsNFmtN5vFzt2bNnrU0GAFCDAL9a6CvkGgD4CLn2mzx6BP+v20AAAHWAl37WKnINAOoYuWaIR0XaBRdc8JuBdvDgQa8mBABAXSHXAABW5FGRNmnSJEVHR9fWXAAAJ+EG69pFrgFA3SLXjPGoSLv55psVFxdXW3MBAJyMtpBaRa4BQB0j1wwx/J40+vYBAIGEXAMAWJXHT3cEANQd2kJqD7kGAHWPXDPGcJHmcDhqcx4AgJrQFlJryDUA8AFyzRDD7Y4AAAAAgNrn0YNDAAB1jCuOAIBAQq4ZwkoaAAAAAFgIK2kAYGHcYA0ACCTkmjEUaQBgZbSFAAACCblmCO2OAAAAAGAhrKQBgJVxxREAEEjINUMo0gDAwujdBwAEEnLNGNodAQAAAMBCWEkDACujLQQAEEjINUMo0gDAwmgLAQAEEnLNGNodAQAAAMBCWEkDACujLQQAEEjINUNYSQMAnGL58uW67rrrlJiYKJvNpgULFrjtdzqdmjBhgpo2baqIiAilp6dr8+bNbsccPHhQ/fv3l91uV0xMjIYMGaLS0lK3Y9auXavLLrtM4eHhSkpK0uTJk2v71AAA5yh/yjaKNACwMqeJmwfKysrUsWNHvfDCCzXunzx5sp599llNmzZNq1atUmRkpDIzM3Xs2DHXMf3799f69euVm5urhQsXavny5Ro2bJhrf0lJiTIyMpScnKw1a9boX//6lyZOnKiXX37Zs8kCAPyHj3JN8q9so90RACzM9vNmxjie6N27t3r37l3jPqfTqSlTpuihhx7SDTfcIEmaM2eO4uPjtWDBAt18883asGGDFi9erC+++EIXXXSRJOm5557TNddco3//+99KTEzU3LlzVVFRoRkzZig0NFS/+93vVFBQoKeeesot8AAAgcNXuSb5V7axkgYA55CSkhK3rby83OMxtm/frsLCQqWnp7s+i46O1iWXXKL8/HxJUn5+vmJiYlwhJknp6ekKCgrSqlWrXMf06NFDoaGhrmMyMzO1adMm/fTTT2d7igCAc4gZuSZZL9so0gDAykxuC0lKSlJ0dLRry8nJ8XhKhYWFkqT4+Hi3z+Pj4137CgsLFRcX57Y/JCREsbGxbsfUNMavfwYAIMBYMNck62Ub7Y4AYGFmv09m165dstvtrs/DwsK8HxwAAIPINWNYSQOAc4jdbnfbzibMEhISJElFRUVunxcVFbn2JSQkaO/evW77q6qqdPDgQbdjahrj1z8DAIAzMSPXJOtlG0UaAFiZD5+CdTotW7ZUQkKCli5d6vqspKREq1atUlpamiQpLS1Nhw4d0po1a1zHfPTRR3I4HLrkkktcxyxfvlyVlZWuY3Jzc9W2bVs1bNjQvAkDAKzDgrkmWS/bKNIAwOp8EGSlpaUqKChQQUGBpOM3VBcUFGjnzp2y2Wy699579fe//13vvPOO1q1bp9tvv12JiYnq27evJKl9+/bq1auXhg4dqs8//1wrV67UiBEjdPPNNysxMVGSdOuttyo0NFRDhgzR+vXr9dprr+mZZ57RqFGjzvIvCgDgF3xUoPlTtnFPGgDgFKtXr9YVV1zh+vpEuAwcOFCzZs3S2LFjVVZWpmHDhunQoUPq3r27Fi9erPDwcNf3zJ07VyNGjNBVV12loKAg3XjjjXr22Wdd+6Ojo/XBBx8oOztbXbt2VePGjTVhwgQevw8AqBX+lG02p9Np8mJh4CkpKVF0dLQu1w0KsdXz9XRgMZvndPH1FGAxjqPHtGvYoyouLna7mdkTJ37vXDjscQWHhv/2N/yG6opj+ublB7yaEwIHuYYzIddwMnKt7rGSBgBWZlbfPZfjAABWQK4ZQpEGj1yXtV9/Gr5XsU2qtO3bCL34UDNtKqjv62nBJOEbD6vhe0UK//6oQg5Vavc9rVTWNca1P/7l72VfcdDte8pS7do9po3r63p7jqnx/B8VsblUqnKqIilCB25M1NGUqFN+XtDhKrV4aIPq/VSprVM7yBHJryQAdYtcC2zkGvwV/3JgWM/rf9KwR3brufuba+OX9fXHofv0j3nbNOSytio+QLtMIAgqd6iiRX2V9GisxGe31XhMWQe7iu5Idn3trGdz25/41FZVJoTph/vPlzM0SDFL9irxqa36/t+/U3WM+7+T+Fd3qCIpQvV+qhRqZvb7ZAD8glwLfOSa9ZBrxvj06Y5ZWVmy2Wy68847T9mXnZ0tm82mrKysup8YatRv2H4tnherD16L1c7N4Xp2XHOVH7Up85aDv/3N8AtHOkbrwJ8SVXZRzGmPcYbYVB1Tz7X9+iph0OEqhRaV6+C1CapoUV+VCeHaf1MzBVU4FPrDUbdxopfuU9CRav10TXxtnQ5Q58g1/0KuBT5yDf7K54/gT0pK0vz583X06C//0I8dO6Z58+apRYsWZz2u0+lUVVWVGVOEpJB6Dp3f4Yi+/OSXpX2n06avPolSStcjPpwZ6lrExlK1zF6r5LHr1WTWTgUd/uV/Z44GwapoGib7igOylVdL1U5Ff7xfVfYQlbf8pX0o9Mejil2wR0XDzpNsNfwQ/MKi75PB6ZFr/oFcwwnkWh0j1wzxeZHWpUsXJSUl6a233nJ99tZbb6lFixbq3Lmz67Py8nLdfffdiouLU3h4uLp3764vvvjCtT8vL082m03vv/++unbtqrCwMK1YsUIOh0M5OTlq2bKlIiIi1LFjR73xxht1eo6BwB5breAQ6dA+9w7Zn/aHqGET/qPhXFHWwa6iYcn68f7ztf8vzRSxsVTNntwiOX7+TWmz6cdx5ytsx1G1Hva12gz5Sg0X79Xu0W1cVyZtlQ4lvPi99t/cTFWNQ314Nv7hRFuIGRvqBrnmH8g1SOSaL5Brxvi8SJOkwYMHa+bMma6vZ8yYoUGDBrkdM3bsWL355puaPXu2vvzyS7Vp00aZmZk6eNC9JeH+++/XE088oQ0bNqhDhw7KycnRnDlzNG3aNK1fv14jR47UgAEDtGzZstPOp7y8XCUlJW4bAKn00liVdYlRRVKEyrrGaPeo1grfdkQRGw4fP8DpVJPZu1RtD9EPD16gXRPbqbRLtJo+vVXBh4735zd6fbcqEsN1uFsjH54JULvINcA/kGuwKksUaQMGDNCKFSu0Y8cO7dixQytXrtSAAQNc+8vKyjR16lT961//Uu/evZWSkqJXXnlFERERevXVV93GevTRR3X11VerdevWioyM1OOPP64ZM2YoMzNTrVq1UlZWlgYMGKCXXnrptPPJyclRdHS0a0tKSqq1c/cXJQeDVV0lxZx0dbFh4yr9tI/nz5yrquLCVBUVonpF5ZKkiG8PK7KgWIXZLXXsggYqP6++9mW1kDM0SPZPDkiS6m84rAaf/6Q2WV+qTdaXavbEZklSq+y1in1rt8/OxbJoC/FL5Jr1kWuoCblWB8g1QyzxW6hJkybq06ePZs2aJafTqT59+qhx48au/Vu3blVlZaW6devm+qxevXq6+OKLtWHDBrexLrroIteft2zZoiNHjujqq692O6aiosKt5eRk48ePd72BXDr+8r1zPdCqKoO0eW19de5+WPmLoyVJNptTnbqX6p1ZXDk6V4UcrFBwaZXr6VZBFQ5JkvPkfnybXL9M99zVSrZKh2tX+LYjip++Qz88eIEq48PqYNZ+xqwgCvAwsxpyzfrINdSEXKsD5JohlijSpOOtISNGjJAkvfDCC2c9TmRkpOvPpaWlkqRFixapWbNmbseFhZ3+fzRhYWFn3H+ueuvlxho9ZZe++7q+Nn11/FHF4fUd+mB+rK+nBpPYjlW7rh5KUr195QrdcUSOyBBVNwhWo7f3qPT3DVUVHaJ6e8vV+LUfVRkXpiOpdknS0TYN5IgMVsLLO3Sgb4Kc9YIUnbdf9fZVqKzT8WNODqzgn2/QrkgM530yCCjkmvWRa4GPXIO/ssy/nF69eqmiokI2m02ZmZlu+1q3bq3Q0FCtXLlSycnJkqTKykp98cUXuvfee087ZkpKisLCwrRz50717NmzNqd/Tlj2TkNFN6rW7WMK1bBJlbatj9CD/Vvq0H7eJRMowrcfUfOcza6vm8z7UZJU0j1We7NaKHTXUTVdcVDBR6pV1bCejlwYpQM3JspZ73jntCMqRD+ObqNGb+w+Pk61UxXNIrT73laqaMHLYc8G75PxX+Sa9ZFrgY9csx5yzRjLFGnBwcGuFo/g4GC3fZGRkRo+fLjGjBmj2NhYtWjRQpMnT9aRI0c0ZMiQ044ZFRWl0aNHa+TIkXI4HOrevbuKi4u1cuVK2e12DRw4sFbPKRC9M7Ox3pnZ+LcPhF862j5Km+d0Oe3+3WPP/80xyltFGjrO6M8859EW4rfINf9ArgU2cs2CyDVDLFOkSZLdbj/tvieeeEIOh0O33XabDh8+rIsuukhLlixRw4YNzzjmY489piZNmignJ0fbtm1TTEyMunTpogceeMDs6QMA4IZcAwCcDZvT6QzwOtR7JSUlio6O1uW6QSE2WiDgjqtlOJnj6DHtGvaoiouLz/gf6Wdy4vdOp9v+oeDQcK/nVF1xTAX/96BXc0LgINdwJuQaTkau1T1LPIIfAAAAAHCcpdodAQAnoXcfABBIyDVDKNIAwMJ4ChYAIJCQa8bQ7ggAAAAAFsJKGgBYGW0hAIBAQq4ZQpEGABZGWwgAIJCQa8bQ7ggAAAAAFsJKGgBYGW0hAIBAQq4ZQpEGABZGWwgAIJCQa8bQ7ggAAAAAFsJKGgBYGW0hAIBAQq4ZQpEGABYX6C0dAIBzC7n222h3BAAAAAALYSUNAKzM6Ty+mTEOAAC+Rq4ZwkoaAAAAAFgIK2kAYGE8qhgAEEjINWMo0gDAyngKFgAgkJBrhtDuCAAAAAAWwkoaAFiYzXF8M2McAAB8jVwzhiINAKyMthAAQCAh1wyh3REAAAAALISVNACwMJ6CBQAIJOSaMRRpAGBlvPQTABBIyDVDaHcEAAAAAAthJQ0ALIy2EABAICHXjGElDQAAAAAshJU0ALAyHlUMAAgk5JohFGkAYGG0hQAAAgm5ZgztjgAAAABgIaykAYCV8ahiAEAgIdcMoUgDAAujLQQAEEjINWNodwQAAAAAC2ElDQCsjKdgAQACCblmCEUaAFgYbSEAgEBCrhlDuyMAAAAAWAgraQBgZQ7n8c2McQAA8DVyzRCKNACwMnr3AQCBhFwzhHZHAAAAALAQVtIAwMJsMukGa++HAADAa+SaMaykAQAAAICFsJIGAFbmdB7fzBgHAABfI9cMoUgDAAvjfTIAgEBCrhlDuyMAAAAAWAgraQBgZTyqGAAQSMg1QyjSAMDCbE6nbCb03ZsxBgAA3iLXjKHdEQAAAAAshJU0ALAyx8+bGeMAAOBr5JohFGkAYGG0hQAAAgm5ZgztjgCAU0ycOFE2m81ta9eunWv/sWPHlJ2drUaNGqlBgwa68cYbVVRU5DbGzp071adPH9WvX19xcXEaM2aMqqqq6vpUAADwu1xjJQ0ArMyHT8H63e9+pw8//ND1dUjIL5ExcuRILVq0SP/9738VHR2tESNGqF+/flq5cqUkqbq6Wn369FFCQoI+/fRT7dmzR7fffrvq1aunxx9/3OvTAQD4KXLNEIo0AECNQkJClJCQcMrnxcXFevXVVzVv3jxdeeWVkqSZM2eqffv2+uyzz3TppZfqgw8+0LfffqsPP/xQ8fHx6tSpkx577DGNGzdOEydOVGhoaF2fDgDgHOdPuUa7IwBYmdNp3iappKTEbSsvLz/tj968ebMSExPVqlUr9e/fXzt37pQkrVmzRpWVlUpPT3cd265dO7Vo0UL5+fmSpPz8fKWmpio+Pt51TGZmpkpKSrR+/fra+JsCAPgDcs0QijQAsDCb07xNkpKSkhQdHe3acnJyavy5l1xyiWbNmqXFixdr6tSp2r59uy677DIdPnxYhYWFCg0NVUxMjNv3xMfHq7CwUJJUWFjoFmQn9p/YBwA4N5FrxtDuCADnkF27dslut7u+DgsLq/G43r17u/7coUMHXXLJJUpOTtbrr7+uiIiIWp8nAABGBGqusZIGAFZmcluI3W53204XZieLiYnRBRdcoC1btighIUEVFRU6dOiQ2zFFRUWuXv+EhIRTnop14uua7gcAAJwjyDVDKNIAwMJsDvM2b5SWlmrr1q1q2rSpunbtqnr16mnp0qWu/Zs2bdLOnTuVlpYmSUpLS9O6deu0d+9e1zG5ubmy2+1KSUnxbjIAAL9FrhlDuyMA4BSjR4/Wddddp+TkZO3evVuPPPKIgoODdcsttyg6OlpDhgzRqFGjFBsbK7vdrrvuuktpaWm69NJLJUkZGRlKSUnRbbfdpsmTJ6uwsFAPPfSQsrOzDV/lBADALP6WaxRpAGBlv2rp8HocD/zwww+65ZZbdODAATVp0kTdu3fXZ599piZNmkiSnn76aQUFBenGG29UeXm5MjMz9eKLL7q+Pzg4WAsXLtTw4cOVlpamyMhIDRw4UI8++qj35wIA8F/kmiEUaQBgZT566ef8+fPPuD88PFwvvPCCXnjhhdMek5ycrPfee8+zHwwACGzkmiEUaQY4f67Uq1Rpzj8qBBTH0WO+ngIsxnH0+DtanGZcKQRqAbmGMyHXcDJyre5RpBlw+PBhSdIKcUUYNRj2P1/PABZ1+PBhRUdHezWGzemUzYRQNGMMBA5yDWdEruE0yLW6Q5FmQGJionbt2qWoqCjZbDZfT8enSkpKlJSUdMo7KQD+bfzC6XTq8OHDSkxMNGMwn/TuI7CRa7/gdxdOh38bvyDX6h5FmgFBQUFq3ry5r6dhKSfeRQGcjH8bx3l7pRGoTeTaqfjdhdPh38Zx5FrdokgDACtzSvLyXTCucQAA8DVyzRBeZg0AAAAAFsJKGjwSFhamRx55hJfR4hT826gd3GAN1C5+d+F0+LdRO8g1Y2xOnqUJAJZTUlKi6OhoXdnpfoUEe/8fCFXV5fqo4AkVFxdzbwUAoM6Ra56h3REAAAAALIR2RwCwMh5VDAAIJOSaIRRpAGBlDklmvMbKjCdpAQDgLXLNENodAQAAAMBCWEkDAAvjKVgAgEBCrhnDSto5LCsrS3379vX1NGAhWVlZstlsuvPOO0/Zl52dLZvNpqysrLqf2LnsRO++GRsQ4Mg1nIxcsyByzRCKNABukpKSNH/+fB09etT12bFjxzRv3jy1aNHirMd1Op2qqqoyY4oAABhGrsEfUaShRt9884169+6tBg0aKD4+Xrfddpv279/v2v/GG28oNTVVERERatSokdLT01VWViZJysvL08UXX6zIyEjFxMSoW7du2rFjh69OBR7q0qWLkpKS9NZbb7k+e+utt9SiRQt17tzZ9Vl5ebnuvvtuxcXFKTw8XN27d9cXX3zh2p+Xlyebzab3339fXbt2VVhYmFasWCGHw6GcnBy1bNlSERER6tixo9544406PUe/whVHwBTk2rmLXLMYcs0QijSc4tChQ7ryyivVuXNnrV69WosXL1ZRUZFuuukmSdKePXt0yy23aPDgwdqwYYPy8vLUr18/1xWlvn37qmfPnlq7dq3y8/M1bNgw2WxmPMYHdWXw4MGaOXOm6+sZM2Zo0KBBbseMHTtWb775pmbPnq0vv/xSbdq0UWZmpg4ePOh23P33368nnnhCGzZsUIcOHZSTk6M5c+Zo2rRpWr9+vUaOHKkBAwZo2bJldXJuAM495BrINfgbHhyCUzz//PPq3LmzHn/8cddnM2bMUFJSkr777juVlpaqqqpK/fr1U3JysiQpNTVVknTw4EEVFxfr2muvVevWrSVJ7du3r/uTgFcGDBig8ePHu64Ur1y5UvPnz1deXp4kqaysTFOnTtWsWbPUu3dvSdIrr7yi3NxcvfrqqxozZoxrrEcffVRXX321pONXKR9//HF9+OGHSktLkyS1atVKK1as0EsvvaSePXvW4Vn6Cd4nA3iNXAO5ZiHkmiEUaTjF119/rY8//lgNGjQ4Zd/WrVuVkZGhq666SqmpqcrMzFRGRob+9Kc/qWHDhoqNjVVWVpYyMzN19dVXKz09XTfddJOaNm3qgzPB2WrSpIn69OmjWbNmyel0qk+fPmrcuLFr/9atW1VZWalu3bq5PqtXr54uvvhibdiwwW2siy66yPXnLVu26MiRI65wO6GiosKt5QS/wvtkAK+RayDXLIRcM4QiDacoLS3Vddddp3/+85+n7GvatKmCg4OVm5urTz/9VB988IGee+45Pfjgg1q1apVatmypmTNn6u6779bixYv12muv6aGHHlJubq4uvfRSH5wNztbgwYM1YsQISdILL7xw1uNERka6/lxaWipJWrRokZo1a+Z2XFhY2Fn/DAA4E3INErkG/8I9aThFly5dtH79ep133nlq06aN23biF5PNZlO3bt00adIkffXVVwoNDdXbb7/tGqNz584aP368Pv30U1144YWaN2+er04HZ6lXr16qqKhQZWWlMjMz3fa1bt1aoaGhWrlypeuzyspKffHFF0pJSTntmCkpKQoLC9POnTtP+beVlJRUa+fiz068T8aMDThXkWuQyDWrINeMYSXtHFdcXKyCggK3z4YNG6ZXXnlFt9xyi8aOHavY2Fht2bJF8+fP1/Tp07V69WotXbpUGRkZiouL06pVq7Rv3z61b99e27dv18svv6zrr79eiYmJ2rRpkzZv3qzbb7/dNyeIsxYcHOxq8QgODnbbFxkZqeHDh2vMmDGKjY1VixYtNHnyZB05ckRDhgw57ZhRUVEaPXq0Ro4cKYfDoe7du6u4uFgrV66U3W7XwIEDa/Wc/BK9+4BHyDWcDrlmEeSaIRRp57i8vLxTeqaHDBmilStXaty4ccrIyFB5ebmSk5PVq1cvBQUFyW63a/ny5ZoyZYpKSkqUnJysJ598Ur1791ZRUZE2btyo2bNn68CBA2ratKmys7P117/+1UdnCG/Y7fbT7nviiSfkcDh022236fDhw7rooou0ZMkSNWzY8IxjPvbYY2rSpIlycnK0bds2xcTEqEuXLnrggQfMnj6AcxC5hjMh1+AvbE5ngJehAOCHSkpKFB0drfTW9yok2Pv7Gqqqy/Xh1ikqLi4+43+kAABQG8g1z7CSBgBWRlsIACCQkGuG8OAQAAAAALAQVtIAwNJMuuKowL7iCADwF+SaERRpAGBltIUAAAIJuWYI7Y4AAAAAYCGspAGAlTmcMqWlwxHYVxwBAH6CXDOElTQAAAAAsBCKNAS8rKws9e3b1/X15ZdfrnvvvbfO55GXlyebzaZDhw6d9hibzaYFCxYYHnPixInq1KmTV/P6/vvvZbPZVFBQ4NU4qCVOh3kbgIBArp0ZuWZx5JohFGnwiaysLNlsNtlsNoWGhqpNmzZ69NFHVVVVVes/+6233tJjjz1m6FgjAQTUqhM3WJuxAag15BpgELlmCPekwWd69eqlmTNnqry8XO+9956ys7NVr149jR8//pRjKyoqFBoaasrPjY2NNWUcAAB+jVwDYBZW0uAzYWFhSkhIUHJysoYPH6709HS98847kn5p5fjHP/6hxMREtW3bVpK0a9cu3XTTTYqJiVFsbKxuuOEGff/9964xq6urNWrUKMXExKhRo0YaO3asnCddaTm5LaS8vFzjxo1TUlKSwsLC1KZNG7366qv6/vvvdcUVV0iSGjZsKJvNpqysLEmSw+FQTk6OWrZsqYiICHXs2FFvvPGG28957733dMEFFygiIkJXXHGF2zyNGjdunC644ALVr19frVq10sMPP6zKyspTjnvppZeUlJSk+vXr66abblJxcbHb/unTp6t9+/YKDw9Xu3bt9OKLL3o8F/iIw2neBqBWkWu/jVwDuWYMK2mwjIiICB04cMD19dKlS2W325WbmytJqqysVGZmptLS0vTJJ58oJCREf//739WrVy+tXbtWoaGhevLJJzVr1izNmDFD7du315NPPqm3335bV1555Wl/7u233678/Hw9++yz6tixo7Zv3679+/crKSlJb775pm688UZt2rRJdrtdERERkqScnBz95z//0bRp03T++edr+fLlGjBggJo0aaKePXtq165d6tevn7KzszVs2DCtXr1a9913n8d/J1FRUZo1a5YSExO1bt06DR06VFFRURo7dqzrmC1btuj111/Xu+++q5KSEg0ZMkR/+9vfNHfuXEnS3LlzNWHCBD3//PPq3LmzvvrqKw0dOlSRkZEaOHCgx3NCHeN9MoDfItdORa6BXDOGIg0+53Q6tXTpUi1ZskR33XWX6/PIyEhNnz7d1Q7yn//8Rw6HQ9OnT5fNZpMkzZw5UzExMcrLy1NGRoamTJmi8ePHq1+/fpKkadOmacmSJaf92d99951ef/115ebmKj09XZLUqlUr1/4TLSRxcXGKiYmRdPwK5eOPP64PP/xQaWlpru9ZsWKFXnrpJfXs2VNTp05V69at9eSTT0qS2rZtq3Xr1umf//ynR383Dz30kOvP5513nkaPHq358+e7hdmxY8c0Z84cNWvWTJL03HPPqU+fPnryySeVkJCgRx55RE8++aTr76Rly5b69ttv9dJLLxFmAFALyLXTI9cAYyjS4DMLFy5UgwYNVFlZKYfDoVtvvVUTJ0507U9NTXXr1//666+1ZcsWRUVFuY1z7Ngxbd26VcXFxdqzZ48uueQS176QkBBddNFFp7SGnFBQUKDg4GD17NnT8Ly3bNmiI0eO6Oqrr3b7vKKiQp07d5YkbdiwwW0eklzB54nXXntNzz77rLZu3arS0lJVVVXJbre7HdOiRQtXkJ34OQ6HQ5s2bVJU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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "_, ax = plt.subplots(1, 2, figsize=(10, 4), sharex=False, sharey=False\n", + ")\n", + "\n", + "for index in range(0, len(optimized_metrics)):\n", + " c_matrix = optimized_metrics.iloc[index][\"Confusion_matrix\"]\n", + " disp = ConfusionMatrixDisplay(\n", + " confusion_matrix=c_matrix, display_labels=[\"Less\", \"More\"]\n", + " ).plot(ax=ax.flat[index])\n", + "\n", + "plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.3)\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}