1084 lines
123 KiB
Plaintext
1084 lines
123 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Бизнес цели:\n",
|
||
"1. Оптимизация ценовой стратегии: анализ факторов, влияющих на стоимость недвижимости, чтобы помочь продавцам устанавливать конкурентоспособные цены и увеличивать прибыль.\n",
|
||
"2. Улучшение инвестиционных решений: предоставление аналитики для инвесторов, чтобы они могли определить наиболее выгодные районы и типы недвижимости для вложений."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Цели технического проекта:\n",
|
||
"1. Создание модели машинного обучения для прогнозирования стоимости недвижимости на основе таких характеристик, как площадь дома, количество спален и ванных комнат, расположение, возраст дома, наличие бассейна и других факторов.\n",
|
||
"2. Разработка системы, которая анализирует волатильность цен (показатель изменчивости цены актива за определённый период времени) на недвижимость в разных районах, учитывая исторические данные о продажах, сезонные колебания и демографические изменения, чтобы выявить наиболее стабильные и перспективные зоны для инвестиций."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 68,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" id date price bedrooms bathrooms \\\n",
|
||
"0 7129300520 20141013T000000 221900.0 3 1.00 \n",
|
||
"1 6414100192 20141209T000000 538000.0 3 2.25 \n",
|
||
"2 5631500400 20150225T000000 180000.0 2 1.00 \n",
|
||
"3 2487200875 20141209T000000 604000.0 4 3.00 \n",
|
||
"4 1954400510 20150218T000000 510000.0 3 2.00 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"21608 263000018 20140521T000000 360000.0 3 2.50 \n",
|
||
"21609 6600060120 20150223T000000 400000.0 4 2.50 \n",
|
||
"21610 1523300141 20140623T000000 402101.0 2 0.75 \n",
|
||
"21611 291310100 20150116T000000 400000.0 3 2.50 \n",
|
||
"21612 1523300157 20141015T000000 325000.0 2 0.75 \n",
|
||
"\n",
|
||
" sqft_living sqft_lot floors waterfront view ... grade \\\n",
|
||
"0 1180 5650 1.0 0 0 ... 7 \n",
|
||
"1 2570 7242 2.0 0 0 ... 7 \n",
|
||
"2 770 10000 1.0 0 0 ... 6 \n",
|
||
"3 1960 5000 1.0 0 0 ... 7 \n",
|
||
"4 1680 8080 1.0 0 0 ... 8 \n",
|
||
"... ... ... ... ... ... ... ... \n",
|
||
"21608 1530 1131 3.0 0 0 ... 8 \n",
|
||
"21609 2310 5813 2.0 0 0 ... 8 \n",
|
||
"21610 1020 1350 2.0 0 0 ... 7 \n",
|
||
"21611 1600 2388 2.0 0 0 ... 8 \n",
|
||
"21612 1020 1076 2.0 0 0 ... 7 \n",
|
||
"\n",
|
||
" sqft_above sqft_basement yr_built yr_renovated zipcode lat \\\n",
|
||
"0 1180 0 1955 0 98178 47.5112 \n",
|
||
"1 2170 400 1951 1991 98125 47.7210 \n",
|
||
"2 770 0 1933 0 98028 47.7379 \n",
|
||
"3 1050 910 1965 0 98136 47.5208 \n",
|
||
"4 1680 0 1987 0 98074 47.6168 \n",
|
||
"... ... ... ... ... ... ... \n",
|
||
"21608 1530 0 2009 0 98103 47.6993 \n",
|
||
"21609 2310 0 2014 0 98146 47.5107 \n",
|
||
"21610 1020 0 2009 0 98144 47.5944 \n",
|
||
"21611 1600 0 2004 0 98027 47.5345 \n",
|
||
"21612 1020 0 2008 0 98144 47.5941 \n",
|
||
"\n",
|
||
" long sqft_living15 sqft_lot15 \n",
|
||
"0 -122.257 1340 5650 \n",
|
||
"1 -122.319 1690 7639 \n",
|
||
"2 -122.233 2720 8062 \n",
|
||
"3 -122.393 1360 5000 \n",
|
||
"4 -122.045 1800 7503 \n",
|
||
"... ... ... ... \n",
|
||
"21608 -122.346 1530 1509 \n",
|
||
"21609 -122.362 1830 7200 \n",
|
||
"21610 -122.299 1020 2007 \n",
|
||
"21611 -122.069 1410 1287 \n",
|
||
"21612 -122.299 1020 1357 \n",
|
||
"\n",
|
||
"[21613 rows x 21 columns]\n",
|
||
"0 16356\n",
|
||
"1 16413\n",
|
||
"2 16491\n",
|
||
"3 16413\n",
|
||
"4 16484\n",
|
||
" ... \n",
|
||
"21608 16211\n",
|
||
"21609 16489\n",
|
||
"21610 16244\n",
|
||
"21611 16451\n",
|
||
"21612 16358\n",
|
||
"Name: date_numeric, Length: 21613, dtype: int64\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"from imblearn.under_sampling import RandomUnderSampler\n",
|
||
"\n",
|
||
"df = pd.read_csv(\"data/kc_house_data.csv\")\n",
|
||
"print(df)\n",
|
||
"\n",
|
||
"# Преобразование даты продажи в числовой формат (кол-во дней с 01.01.1970)\n",
|
||
"df['date'] = pd.to_datetime(df['date'])\n",
|
||
"df['date_numeric'] = (df['date'] - pd.Timestamp('1970-01-01')).dt.days\n",
|
||
"print(df['date_numeric'])\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 69,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>bathrooms_0.5</th>\n",
|
||
" <th>bathrooms_0.75</th>\n",
|
||
" <th>bathrooms_1.0</th>\n",
|
||
" <th>bathrooms_1.25</th>\n",
|
||
" <th>bathrooms_1.5</th>\n",
|
||
" <th>bathrooms_1.75</th>\n",
|
||
" <th>bathrooms_2.0</th>\n",
|
||
" <th>bathrooms_2.25</th>\n",
|
||
" <th>bathrooms_2.5</th>\n",
|
||
" <th>bathrooms_2.75</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>bedrooms_3</th>\n",
|
||
" <th>bedrooms_4</th>\n",
|
||
" <th>bedrooms_5</th>\n",
|
||
" <th>bedrooms_6</th>\n",
|
||
" <th>bedrooms_7</th>\n",
|
||
" <th>bedrooms_8</th>\n",
|
||
" <th>bedrooms_9</th>\n",
|
||
" <th>bedrooms_10</th>\n",
|
||
" <th>bedrooms_11</th>\n",
|
||
" <th>bedrooms_33</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>21608</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>21609</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>21610</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>21611</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>21612</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>21613 rows × 41 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" bathrooms_0.5 bathrooms_0.75 bathrooms_1.0 bathrooms_1.25 \\\n",
|
||
"0 0.0 0.0 1.0 0.0 \n",
|
||
"1 0.0 0.0 0.0 0.0 \n",
|
||
"2 0.0 0.0 1.0 0.0 \n",
|
||
"3 0.0 0.0 0.0 0.0 \n",
|
||
"4 0.0 0.0 0.0 0.0 \n",
|
||
"... ... ... ... ... \n",
|
||
"21608 0.0 0.0 0.0 0.0 \n",
|
||
"21609 0.0 0.0 0.0 0.0 \n",
|
||
"21610 0.0 1.0 0.0 0.0 \n",
|
||
"21611 0.0 0.0 0.0 0.0 \n",
|
||
"21612 0.0 1.0 0.0 0.0 \n",
|
||
"\n",
|
||
" bathrooms_1.5 bathrooms_1.75 bathrooms_2.0 bathrooms_2.25 \\\n",
|
||
"0 0.0 0.0 0.0 0.0 \n",
|
||
"1 0.0 0.0 0.0 1.0 \n",
|
||
"2 0.0 0.0 0.0 0.0 \n",
|
||
"3 0.0 0.0 0.0 0.0 \n",
|
||
"4 0.0 0.0 1.0 0.0 \n",
|
||
"... ... ... ... ... \n",
|
||
"21608 0.0 0.0 0.0 0.0 \n",
|
||
"21609 0.0 0.0 0.0 0.0 \n",
|
||
"21610 0.0 0.0 0.0 0.0 \n",
|
||
"21611 0.0 0.0 0.0 0.0 \n",
|
||
"21612 0.0 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
" bathrooms_2.5 bathrooms_2.75 ... bedrooms_3 bedrooms_4 bedrooms_5 \\\n",
|
||
"0 0.0 0.0 ... 1.0 0.0 0.0 \n",
|
||
"1 0.0 0.0 ... 1.0 0.0 0.0 \n",
|
||
"2 0.0 0.0 ... 0.0 0.0 0.0 \n",
|
||
"3 0.0 0.0 ... 0.0 1.0 0.0 \n",
|
||
"4 0.0 0.0 ... 1.0 0.0 0.0 \n",
|
||
"... ... ... ... ... ... ... \n",
|
||
"21608 1.0 0.0 ... 1.0 0.0 0.0 \n",
|
||
"21609 1.0 0.0 ... 0.0 1.0 0.0 \n",
|
||
"21610 0.0 0.0 ... 0.0 0.0 0.0 \n",
|
||
"21611 1.0 0.0 ... 1.0 0.0 0.0 \n",
|
||
"21612 0.0 0.0 ... 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
" bedrooms_6 bedrooms_7 bedrooms_8 bedrooms_9 bedrooms_10 \\\n",
|
||
"0 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"1 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"2 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"3 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"4 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"21608 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"21609 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"21610 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"21611 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"21612 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
" bedrooms_11 bedrooms_33 \n",
|
||
"0 0.0 0.0 \n",
|
||
"1 0.0 0.0 \n",
|
||
"2 0.0 0.0 \n",
|
||
"3 0.0 0.0 \n",
|
||
"4 0.0 0.0 \n",
|
||
"... ... ... \n",
|
||
"21608 0.0 0.0 \n",
|
||
"21609 0.0 0.0 \n",
|
||
"21610 0.0 0.0 \n",
|
||
"21611 0.0 0.0 \n",
|
||
"21612 0.0 0.0 \n",
|
||
"\n",
|
||
"[21613 rows x 41 columns]"
|
||
]
|
||
},
|
||
"execution_count": 69,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.preprocessing import OneHotEncoder\n",
|
||
"\n",
|
||
"encoder = OneHotEncoder(sparse_output=False, drop=\"first\")\n",
|
||
"\n",
|
||
"encoded_values = encoder.fit_transform(df[[\"bathrooms\", \"bedrooms\"]])\n",
|
||
"\n",
|
||
"encoded_columns = encoder.get_feature_names_out([\"bathrooms\", \"bedrooms\"])\n",
|
||
"\n",
|
||
"encoded_values_df = pd.DataFrame(encoded_values, columns=encoded_columns)\n",
|
||
"\n",
|
||
"encoded_values_df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 70,
|
||
"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', 'date_numeric',\n",
|
||
" 'price_binned'],\n",
|
||
" dtype='object')\n",
|
||
"Обучающая выборка: (12967, 23)\n",
|
||
"price\n",
|
||
"550000.0 105\n",
|
||
"350000.0 104\n",
|
||
"450000.0 99\n",
|
||
"400000.0 96\n",
|
||
"325000.0 94\n",
|
||
" ... \n",
|
||
"887250.0 1\n",
|
||
"123000.0 1\n",
|
||
"638700.0 1\n",
|
||
"502500.0 1\n",
|
||
"793000.0 1\n",
|
||
"Name: count, Length: 2982, dtype: int64\n",
|
||
"Валидационная выборка: (4322, 23)\n",
|
||
"price\n",
|
||
"350000.0 39\n",
|
||
"450000.0 37\n",
|
||
"425000.0 34\n",
|
||
"325000.0 33\n",
|
||
"575000.0 33\n",
|
||
" ..\n",
|
||
"500007.0 1\n",
|
||
"129888.0 1\n",
|
||
"546800.0 1\n",
|
||
"378750.0 1\n",
|
||
"436500.0 1\n",
|
||
"Name: count, Length: 1526, dtype: int64\n",
|
||
"Тестовая выборка: (4323, 23)\n",
|
||
"price\n",
|
||
"450000.0 36\n",
|
||
"375000.0 36\n",
|
||
"300000.0 34\n",
|
||
"500000.0 31\n",
|
||
"425000.0 30\n",
|
||
" ..\n",
|
||
"196700.0 1\n",
|
||
"482975.0 1\n",
|
||
"2238890.0 1\n",
|
||
"694000.0 1\n",
|
||
"1770000.0 1\n",
|
||
"Name: count, Length: 1565, dtype: int64\n",
|
||
"Обучающая выборка по категориям: price_binned\n",
|
||
"High 4377\n",
|
||
"Low 4335\n",
|
||
"Medium 4255\n",
|
||
"Name: count, dtype: int64\n",
|
||
"Валидационная выборка по категориям: price_binned\n",
|
||
"High 1459\n",
|
||
"Low 1445\n",
|
||
"Medium 1418\n",
|
||
"Name: count, dtype: int64\n",
|
||
"Тестовая выборка по категориям: price_binned\n",
|
||
"High 1460\n",
|
||
"Low 1445\n",
|
||
"Medium 1418\n",
|
||
"Name: count, dtype: int64\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Функция для разбиение на выборки\n",
|
||
"def split_stratified_into_train_val_test(\n",
|
||
" df_input,\n",
|
||
" stratify_colname=\"y\",\n",
|
||
" frac_train=0.6,\n",
|
||
" frac_val=0.2,\n",
|
||
" frac_test=0.2,\n",
|
||
" random_state=None,\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",
|
||
"\n",
|
||
" X = df_input\n",
|
||
" y = df_input[[stratify_colname]]\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",
|
||
"\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",
|
||
"\n",
|
||
" assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n",
|
||
"\n",
|
||
" return df_train, df_val, df_test\n",
|
||
"\n",
|
||
"# Определение бинов для цены\n",
|
||
"bins = [\n",
|
||
" df[\"price\"].min(),\n",
|
||
" df[\"price\"].quantile(0.33),\n",
|
||
" df[\"price\"].quantile(0.66),\n",
|
||
" df[\"price\"].max(),\n",
|
||
"]\n",
|
||
"labels = [\"Low\", \"Medium\", \"High\"]\n",
|
||
"df[\"price_binned\"] = pd.cut(df[\"price\"], bins=bins, labels=labels)\n",
|
||
"df = df.dropna()\n",
|
||
"\n",
|
||
"# Стратифицированное (для сохранения пропорций)\n",
|
||
"# разбиение на обучающую, валидационную и тестовую выборки\n",
|
||
"df_train, df_val, df_test = split_stratified_into_train_val_test(\n",
|
||
" df, stratify_colname=\"price_binned\", frac_train=0.60, frac_val=0.20, frac_test=0.20\n",
|
||
")\n",
|
||
"\n",
|
||
"print(df_train.columns)\n",
|
||
"\n",
|
||
"print(\"Обучающая выборка: \", df_train.shape)\n",
|
||
"print(df_train[\"price\"].value_counts())\n",
|
||
"\n",
|
||
"print(\"Валидационная выборка: \", df_val.shape)\n",
|
||
"print(df_val[\"price\"].value_counts())\n",
|
||
"\n",
|
||
"print(\"Тестовая выборка: \", df_test.shape)\n",
|
||
"print(df_test[\"price\"].value_counts())\n",
|
||
"\n",
|
||
"print(\"Обучающая выборка по категориям: \", df_train[\"price_binned\"].value_counts())\n",
|
||
"print(\"Валидационная выборка по категориям: \", df_val[\"price_binned\"].value_counts())\n",
|
||
"print(\"Тестовая выборка по категориям: \", df_test[\"price_binned\"].value_counts())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 71,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Обучающая выборка после undersampling: (12765, 23)\n",
|
||
"price_binned\n",
|
||
"Low 4255\n",
|
||
"Medium 4255\n",
|
||
"High 4255\n",
|
||
"Name: count, dtype: int64\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"rus = RandomUnderSampler(random_state=42)\n",
|
||
"X_resampled, y_resampled = rus.fit_resample(df_train, df_train[\"price_binned\"])\n",
|
||
"\n",
|
||
"# Создание датафрейма для результирующей выборки\n",
|
||
"df_train_rus = pd.DataFrame(X_resampled)\n",
|
||
"\n",
|
||
"# Добавление целевой переменной в новый датафрейм\n",
|
||
"df_train_rus[\"price_binned\"] = y_resampled\n",
|
||
"\n",
|
||
"print(\"Обучающая выборка после undersampling: \", df_train_rus.shape)\n",
|
||
"print(df_train_rus[\"price_binned\"].value_counts())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 72,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" id date price bedrooms bathrooms sqft_living \\\n",
|
||
"921 4046500320 2015-01-20 342000.0 3 1.75 1660 \n",
|
||
"16637 6802200190 2015-01-21 222500.0 3 2.00 1450 \n",
|
||
"20955 8138870530 2014-05-05 419190.0 2 2.50 1590 \n",
|
||
"14806 4370700065 2015-05-04 907500.0 3 2.25 2850 \n",
|
||
"20000 2767601311 2014-10-24 445000.0 3 2.50 1260 \n",
|
||
"... ... ... ... ... ... ... \n",
|
||
"2640 4045800030 2015-05-11 739000.0 3 2.25 2220 \n",
|
||
"16590 8635750950 2014-06-07 568500.0 4 2.50 2460 \n",
|
||
"20011 9396700028 2014-07-22 358000.0 2 2.50 1278 \n",
|
||
"9296 625049310 2015-03-11 587750.0 2 1.00 890 \n",
|
||
"15823 5088500170 2014-10-27 435000.0 3 2.50 2530 \n",
|
||
"\n",
|
||
" sqft_lot floors waterfront view ... zipcode lat long \\\n",
|
||
"921 16275 2.0 0 0 ... 98014 47.6903 -121.915 \n",
|
||
"16637 9044 2.0 0 0 ... 98022 47.1955 -121.987 \n",
|
||
"20955 1426 2.0 0 0 ... 98029 47.5441 -122.013 \n",
|
||
"14806 6281 2.0 0 2 ... 98115 47.6911 -122.326 \n",
|
||
"20000 1102 3.0 0 0 ... 98107 47.6750 -122.387 \n",
|
||
"... ... ... ... ... ... ... ... ... \n",
|
||
"2640 10530 1.0 0 0 ... 98052 47.6383 -122.098 \n",
|
||
"16590 4200 2.0 0 0 ... 98074 47.6041 -122.020 \n",
|
||
"20011 987 2.0 0 0 ... 98136 47.5532 -122.381 \n",
|
||
"9296 4730 1.0 0 0 ... 98103 47.6876 -122.341 \n",
|
||
"15823 16102 2.0 0 0 ... 98038 47.3710 -122.055 \n",
|
||
"\n",
|
||
" sqft_living15 sqft_lot15 date_numeric price_binned_Low \\\n",
|
||
"921 1520 16275 16455 True \n",
|
||
"16637 1450 9044 16456 True \n",
|
||
"20955 1590 1426 16195 False \n",
|
||
"14806 1680 7006 16559 False \n",
|
||
"20000 1320 2500 16367 False \n",
|
||
"... ... ... ... ... \n",
|
||
"2640 2500 10014 16566 False \n",
|
||
"16590 2460 4200 16228 False \n",
|
||
"20011 1220 1287 16273 True \n",
|
||
"9296 1330 5904 16505 False \n",
|
||
"15823 2370 14957 16370 False \n",
|
||
"\n",
|
||
" price_binned_Medium price_binned_High Area_binned \n",
|
||
"921 False False 1 \n",
|
||
"16637 False False 1 \n",
|
||
"20955 True False 1 \n",
|
||
"14806 False True 3 \n",
|
||
"20000 True False 0 \n",
|
||
"... ... ... ... \n",
|
||
"2640 False True 2 \n",
|
||
"16590 False True 2 \n",
|
||
"20011 False False 0 \n",
|
||
"9296 False True 0 \n",
|
||
"15823 True False 2 \n",
|
||
"\n",
|
||
"[12967 rows x 26 columns]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Преобразование категориального столбца price_binned в дамми-переменные\n",
|
||
"# Добавляем новые столбцы (Low, Medium, High) и выставляем 1 или 0 в зависмоитси от цены\n",
|
||
"df_train = pd.get_dummies(df_train, columns=[\"price_binned\"])\n",
|
||
"\n",
|
||
"# Binning площади в 4 категории на основе квартилей\n",
|
||
"# Новый столбец с со значением 0, если оно подходит первому квартилю (категории значений) и тд\n",
|
||
"df_train[\"Area_binned\"] = pd.qcut(df_train[\"sqft_living\"], q=4, labels=False)\n",
|
||
"\n",
|
||
"# Вывод обновленного датафрейма\n",
|
||
"print(df_train)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 73,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" id date price bedrooms bathrooms sqft_living \\\n",
|
||
"921 4046500320 2015-01-20 -0.540558 3 1.75 -0.461829 \n",
|
||
"16637 6802200190 2015-01-21 -0.863431 3 2.00 -0.693145 \n",
|
||
"20955 8138870530 2014-05-05 -0.332001 2 2.50 -0.538934 \n",
|
||
"14806 4370700065 2015-05-04 0.987347 3 2.25 0.848963 \n",
|
||
"20000 2767601311 2014-10-24 -0.262266 3 2.50 -0.902431 \n",
|
||
"... ... ... ... ... ... ... \n",
|
||
"2640 4045800030 2015-05-11 0.532083 3 2.25 0.155014 \n",
|
||
"16590 8635750950 2014-06-07 0.071415 4 2.50 0.419376 \n",
|
||
"20011 9396700028 2014-07-22 -0.497328 2 2.50 -0.882604 \n",
|
||
"9296 625049310 2015-03-11 0.123426 2 1.00 -1.309988 \n",
|
||
"15823 5088500170 2014-10-27 -0.289284 3 2.50 0.496481 \n",
|
||
"\n",
|
||
" sqft_lot floors waterfront view ... lat long \\\n",
|
||
"921 0.051429 0.942938 -0.087265 0 ... 47.6903 -121.915 \n",
|
||
"16637 -0.157341 0.942938 -0.087265 0 ... 47.1955 -121.987 \n",
|
||
"20955 -0.377285 0.942938 -0.087265 0 ... 47.5441 -122.013 \n",
|
||
"14806 -0.237113 0.942938 -0.087265 2 ... 47.6911 -122.326 \n",
|
||
"20000 -0.386639 2.802570 -0.087265 0 ... 47.6750 -122.387 \n",
|
||
"... ... ... ... ... ... ... ... \n",
|
||
"2640 -0.114438 -0.916694 -0.087265 0 ... 47.6383 -122.098 \n",
|
||
"16590 -0.297195 0.942938 -0.087265 0 ... 47.6041 -122.020 \n",
|
||
"20011 -0.389959 0.942938 -0.087265 0 ... 47.5532 -122.381 \n",
|
||
"9296 -0.281893 -0.916694 -0.087265 0 ... 47.6876 -122.341 \n",
|
||
"15823 0.046434 0.942938 -0.087265 0 ... 47.3710 -122.055 \n",
|
||
"\n",
|
||
" sqft_living15 sqft_lot15 date_numeric price_binned_Low \\\n",
|
||
"921 1520 16275 16455 True \n",
|
||
"16637 1450 9044 16456 True \n",
|
||
"20955 1590 1426 16195 False \n",
|
||
"14806 1680 7006 16559 False \n",
|
||
"20000 1320 2500 16367 False \n",
|
||
"... ... ... ... ... \n",
|
||
"2640 2500 10014 16566 False \n",
|
||
"16590 2460 4200 16228 False \n",
|
||
"20011 1220 1287 16273 True \n",
|
||
"9296 1330 5904 16505 False \n",
|
||
"15823 2370 14957 16370 False \n",
|
||
"\n",
|
||
" price_binned_Medium price_binned_High Area_binned Volatility \n",
|
||
"921 False False 1 -0.513258 \n",
|
||
"16637 False False 1 -0.535804 \n",
|
||
"20955 True False 1 -0.161650 \n",
|
||
"14806 False True 3 1.086076 \n",
|
||
"20000 True False 0 -0.515792 \n",
|
||
"... ... ... ... ... \n",
|
||
"2640 False True 2 0.269452 \n",
|
||
"16590 False True 2 0.716571 \n",
|
||
"20011 False False 0 -0.492645 \n",
|
||
"9296 False True 0 -1.028095 \n",
|
||
"15823 True False 2 0.450047 \n",
|
||
"\n",
|
||
"[12967 rows x 27 columns]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.preprocessing import StandardScaler\n",
|
||
"\n",
|
||
"# Нормализация значений для указанных столбцов\n",
|
||
"# чтобы значения разных столбов в среднем были 0, а стандартное отклонение - 1\n",
|
||
"scaler = StandardScaler()\n",
|
||
"df_train[[\"price\", \"sqft_living\", \"sqft_lot\", \"floors\", \"waterfront\"]] = (\n",
|
||
" scaler.fit_transform(\n",
|
||
" df_train[[\"price\", \"sqft_living\", \"sqft_lot\", \"floors\", \"waterfront\"]]\n",
|
||
" )\n",
|
||
")\n",
|
||
"\n",
|
||
"# Расчет волатильности (разница между площадью дома и площадью участка)\n",
|
||
"df_train[\"Volatility\"] = (\n",
|
||
" df_train[\"sqft_living\"] - df_train[\"sqft_lot\"]\n",
|
||
") \n",
|
||
"\n",
|
||
"# Вывод обновленного датафрейма\n",
|
||
"print(df_train)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 74,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\featuretools\\entityset\\entityset.py:1733: UserWarning: index id not found in dataframe, creating new integer column\n",
|
||
" warnings.warn(\n",
|
||
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n",
|
||
" pd.to_datetime(\n",
|
||
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\featuretools\\synthesis\\deep_feature_synthesis.py:169: UserWarning: Only one dataframe in entityset, changing max_depth to 1 since deeper features cannot be created\n",
|
||
" warnings.warn(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"[<Feature: price>, <Feature: bedrooms>, <Feature: bathrooms>, <Feature: sqft_living>, <Feature: sqft_lot>, <Feature: floors>, <Feature: waterfront>, <Feature: view>, <Feature: condition>, <Feature: grade>, <Feature: sqft_above>, <Feature: sqft_basement>, <Feature: yr_built>, <Feature: yr_renovated>, <Feature: zipcode>, <Feature: lat>, <Feature: long>, <Feature: sqft_living15>, <Feature: sqft_lot15>, <Feature: date_numeric>, <Feature: price_binned>, <Feature: DAY(date)>, <Feature: MONTH(date)>, <Feature: WEEKDAY(date)>, <Feature: YEAR(date)>]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import featuretools as ft\n",
|
||
"\n",
|
||
"# Убеждаемся, что столбец 'date' в формате datetime\n",
|
||
"df[\"date\"] = pd.to_datetime(df[\"date\"])\n",
|
||
"\n",
|
||
"# Установка индекса на столбец 'id' (предполагается, что 'id' уникален)\n",
|
||
"df.set_index(\"id\", inplace=True)\n",
|
||
"\n",
|
||
"# Создание EntitySet для объединения разных датасетов для удобного использования\n",
|
||
"es = ft.EntitySet(id=\"house_sales\")\n",
|
||
"es = es.add_dataframe(\n",
|
||
" dataframe_name=\"house_data\",\n",
|
||
" dataframe=df,\n",
|
||
" index=\"id\", # уникальный идентификатор\n",
|
||
")\n",
|
||
"\n",
|
||
"# Генерация признаков\n",
|
||
"feature_matrix, feature_defs = ft.dfs(entityset=es, target_dataframe_name=\"house_data\")\n",
|
||
"\n",
|
||
"# Показать определение признаков\n",
|
||
"print(feature_defs)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 75,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"id int64\n",
|
||
"bedrooms int64\n",
|
||
"bathrooms float64\n",
|
||
"sqft_living float64\n",
|
||
"sqft_lot float64\n",
|
||
"floors float64\n",
|
||
"waterfront float64\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",
|
||
"date_numeric int64\n",
|
||
"price_binned_Low bool\n",
|
||
"price_binned_Medium bool\n",
|
||
"price_binned_High bool\n",
|
||
"Area_binned int64\n",
|
||
"Volatility float64\n",
|
||
"dtype: object\n",
|
||
"MAE: 539145.7717358439\n",
|
||
"MSE: 430064692545.0895\n",
|
||
"RMSE: 655793.1781782191\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.linear_model import LinearRegression\n",
|
||
"from sklearn.metrics import mean_absolute_error, mean_squared_error\n",
|
||
"\n",
|
||
"# Копирование датафрейма для регрессионного анализа\n",
|
||
"df_train_regression = df_train.copy()\n",
|
||
"\n",
|
||
"# Определение признаков и целевой переменной\n",
|
||
"X_train = df_train_regression.drop(\n",
|
||
" [\"price\", \"date\"], axis=1\n",
|
||
")\n",
|
||
"y_train = df_train_regression[\"price\"] # Целевая переменная\n",
|
||
"X_test = df_test.drop(\n",
|
||
" [\"price\", \"date\"], axis=1\n",
|
||
")\n",
|
||
"y_test = df_test[\"price\"] # Целевая переменная\n",
|
||
"\n",
|
||
"# Преобразование категориальных признаков в дамми-переменные\n",
|
||
"# (создание столбцов значений со значениями 0 или 1, если это булевой столбец)\n",
|
||
"X_train_encoded = pd.get_dummies(X_train, drop_first=True)\n",
|
||
"X_test_encoded = pd.get_dummies(X_test, drop_first=True)\n",
|
||
"\n",
|
||
"# Устранение различий в количестве столбцов между обучающей и тестовой выборками\n",
|
||
"X_test_encoded = X_test_encoded.reindex(columns=X_train_encoded.columns, fill_value=0)\n",
|
||
"\n",
|
||
"# Проверка типов данных\n",
|
||
"print(X_train_encoded.dtypes)\n",
|
||
"\n",
|
||
"# Обучение модели линейной регрессии (поиск зависимостей между признаками)\n",
|
||
"model = LinearRegression()\n",
|
||
"model.fit(X_train_encoded, y_train)\n",
|
||
"\n",
|
||
"# Предсказание цены на тестовой выборке\n",
|
||
"y_pred = model.predict(X_test_encoded)\n",
|
||
"\n",
|
||
"# Оценка качества модели\n",
|
||
"mae = mean_absolute_error(y_test, y_pred)\n",
|
||
"mse = mean_squared_error(y_test, y_pred)\n",
|
||
"rmse = mse**0.5 # Корень из MSE для RMSE\n",
|
||
"\n",
|
||
"print(\"MAE:\", mae)\n",
|
||
"print(\"MSE:\", mse)\n",
|
||
"print(\"RMSE:\", rmse)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 76,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Время, затраченное на обучение модели: 0.08102583885192871.\n",
|
||
"Время, затраченное на предсказание: 0.003012418746948242\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Оценка скорости вычисления\n",
|
||
"import time\n",
|
||
"\n",
|
||
"start_time = time.time()\n",
|
||
"model.fit(X_train_encoded, y_train)\n",
|
||
"training_time = time.time() - start_time\n",
|
||
"\n",
|
||
"start_time = time.time()\n",
|
||
"predictions = model.predict(X_test_encoded)\n",
|
||
"prediction_time = time.time() - start_time\n",
|
||
"\n",
|
||
"print(\n",
|
||
" f\"Время, затраченное на обучение модели: {training_time}.\\nВремя, затраченное на предсказание: {prediction_time}\"\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 77,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Оценка корреляции\n",
|
||
"import seaborn as sns\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"corr_matrix = df_train_regression.corr()\n",
|
||
"sns.heatmap(corr_matrix, annot=False)\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
|
||
}
|