937 lines
158 KiB
Plaintext
937 lines
158 KiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Выбранные темы: прогнозирование стоимости страховки, данные о населении, цены на автомобили."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Выделим вспомогательные функции"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 67,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"import pandas as pd\n",
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"from sklearn.model_selection import train_test_split\n",
|
|||
|
"from sklearn.preprocessing import LabelEncoder\n",
|
|||
|
"from imblearn.over_sampling import RandomOverSampler\n",
|
|||
|
"from imblearn.under_sampling import RandomUnderSampler\n",
|
|||
|
"import seaborn as sns\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"\n",
|
|||
|
"label_encoder = LabelEncoder()\n",
|
|||
|
"\n",
|
|||
|
"# Функция для применения oversampling\n",
|
|||
|
"def apply_oversampling(X, y):\n",
|
|||
|
" oversampler = RandomOverSampler(random_state=42)\n",
|
|||
|
" X_resampled, y_resampled = oversampler.fit_resample(X, y)\n",
|
|||
|
" return X_resampled, y_resampled\n",
|
|||
|
"\n",
|
|||
|
"# Функция для применения undersampling\n",
|
|||
|
"def apply_undersampling(X, y):\n",
|
|||
|
" undersampler = RandomUnderSampler(random_state=42)\n",
|
|||
|
" X_resampled, y_resampled = undersampler.fit_resample(X, y)\n",
|
|||
|
" return X_resampled, y_resampled\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",
|
|||
|
"):\n",
|
|||
|
" \"\"\"\n",
|
|||
|
" Splits a Pandas dataframe into three subsets (train, val, and test)\n",
|
|||
|
" following fractional ratios provided by the user, where each subset is\n",
|
|||
|
" stratified by the values in a specific column (that is, each subset has\n",
|
|||
|
" the same relative frequency of the values in the column). It performs this\n",
|
|||
|
" splitting by running train_test_split() twice.\n",
|
|||
|
"\n",
|
|||
|
" Parameters\n",
|
|||
|
" ----------\n",
|
|||
|
" df_input : Pandas dataframe\n",
|
|||
|
" Input dataframe to be split.\n",
|
|||
|
" stratify_colname : str\n",
|
|||
|
" The name of the column that will be used for stratification. Usually\n",
|
|||
|
" this column would be for the label.\n",
|
|||
|
" frac_train : float\n",
|
|||
|
" frac_val : float\n",
|
|||
|
" frac_test : float\n",
|
|||
|
" The ratios with which the dataframe will be split into train, val, and\n",
|
|||
|
" test data. The values should be expressed as float fractions and should\n",
|
|||
|
" sum to 1.0.\n",
|
|||
|
" random_state : int, None, or RandomStateInstance\n",
|
|||
|
" Value to be passed to train_test_split().\n",
|
|||
|
"\n",
|
|||
|
" Returns\n",
|
|||
|
" -------\n",
|
|||
|
" df_train, df_val, df_test :\n",
|
|||
|
" Dataframes containing the three splits.\n",
|
|||
|
" \"\"\"\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 # Contains all columns.\n",
|
|||
|
" y = df_input[\n",
|
|||
|
" [stratify_colname]\n",
|
|||
|
" ] # Dataframe of just the column on which to stratify.\n",
|
|||
|
"\n",
|
|||
|
" # Split original dataframe into train and temp dataframes.\n",
|
|||
|
" df_train, df_temp, y_train, y_temp = train_test_split(\n",
|
|||
|
" X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" # Split the temp dataframe into val and test dataframes.\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"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Анализ наборов данных"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"1) Прогнозирование стоимости страховки"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Проблемная область: Медицинское страхование.\n",
|
|||
|
"\n",
|
|||
|
"Описание: Набор данных содержит информацию о клиентах медицинского страхования, включая возраст, пол, индекс массы тела (ИМТ), количество детей, курение, регион и стоимость страхового взноса.\n",
|
|||
|
"\n",
|
|||
|
"Связи между объектами: Нет явных связей, кроме того, что все объекты относятся к клиентам медицинского страхования.\n",
|
|||
|
"\n",
|
|||
|
"Бизнес-цель: Оптимизация тарифов страховых взносов.\n",
|
|||
|
"\n",
|
|||
|
"Эффект для бизнеса: Снижение рисков и повышение прибыльности за счет более точного определения стоимости страхования для разных групп клиентов.\n",
|
|||
|
"\n",
|
|||
|
"Цель технического проекта: Разработка модели машинного обучения для прогнозирования стоимости страхового взноса на основе характеристик клиента.\n",
|
|||
|
"\n",
|
|||
|
"Входные признаки: Возраст, пол, ИМТ, количество детей, курение, регион.\n",
|
|||
|
"\n",
|
|||
|
"Целевой признак: Стоимость страхового взноса."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Данный график позволят увидеть изменения стоимости страховки от возраста."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 68,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"<class 'pandas.core.frame.DataFrame'>\n",
|
|||
|
"RangeIndex: 2772 entries, 0 to 2771\n",
|
|||
|
"Data columns (total 7 columns):\n",
|
|||
|
" # Column Non-Null Count Dtype \n",
|
|||
|
"--- ------ -------------- ----- \n",
|
|||
|
" 0 age 2772 non-null int64 \n",
|
|||
|
" 1 sex 2772 non-null object \n",
|
|||
|
" 2 bmi 2772 non-null float64\n",
|
|||
|
" 3 children 2772 non-null int64 \n",
|
|||
|
" 4 smoker 2772 non-null object \n",
|
|||
|
" 5 region 2772 non-null object \n",
|
|||
|
" 6 charges 2772 non-null float64\n",
|
|||
|
"dtypes: float64(2), int64(2), object(3)\n",
|
|||
|
"memory usage: 151.7+ KB\n",
|
|||
|
"age 0\n",
|
|||
|
"sex 0\n",
|
|||
|
"bmi 0\n",
|
|||
|
"children 0\n",
|
|||
|
"smoker 0\n",
|
|||
|
"region 0\n",
|
|||
|
"charges 0\n",
|
|||
|
"dtype: int64\n",
|
|||
|
" age bmi children charges\n",
|
|||
|
"count 2772.000000 2772.000000 2772.000000 2772.000000\n",
|
|||
|
"mean 39.109668 30.701349 1.101732 13261.369959\n",
|
|||
|
"std 14.081459 6.129449 1.214806 12151.768945\n",
|
|||
|
"min 18.000000 15.960000 0.000000 1121.873900\n",
|
|||
|
"25% 26.000000 26.220000 0.000000 4687.797000\n",
|
|||
|
"50% 39.000000 30.447500 1.000000 9333.014350\n",
|
|||
|
"75% 51.000000 34.770000 2.000000 16577.779500\n",
|
|||
|
"max 64.000000 53.130000 5.000000 63770.428010\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"df1 = pd.read_csv(\"../data/Medical_insurance.csv\")\n",
|
|||
|
"df1.info()\n",
|
|||
|
"print(df1.isnull().sum())\n",
|
|||
|
"print(df1.describe())\n",
|
|||
|
"\n",
|
|||
|
"plt.scatter(df1[\"charges\"], df1[\"age\"])\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Зашумленность: Возможны ошибки в данных, например, некорректные значения ИМТ.\n",
|
|||
|
"\n",
|
|||
|
"Смещение: Может быть смещение в данных, например, если выборка нерепрезентативна по полу или региону.\n",
|
|||
|
"\n",
|
|||
|
"Актуальность: Данные должны быть актуальными, чтобы модель давала точные прогнозы.\n",
|
|||
|
"\n",
|
|||
|
"Выбросы: Выбросы в данных, например, очень высокие значения стоимости страхового взноса.\n",
|
|||
|
"\n",
|
|||
|
"Просачивание данных: Не должно быть просачивания данных, например, если стоимость страхового взноса используется в качестве признака."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Примеры решения обнаруженных проблем:\n",
|
|||
|
"\n",
|
|||
|
"Зашумленность: Очистка данных, удаление или исправление ошибочных значений.\n",
|
|||
|
"\n",
|
|||
|
"Смещение: Балансировка данных, использование техники выборки.\n",
|
|||
|
"\n",
|
|||
|
"Актуальность: Использование актуальных данных.\n",
|
|||
|
"\n",
|
|||
|
"Выбросы: Удаление выбросов или использование техники обработки выбросов.\n",
|
|||
|
"\n",
|
|||
|
"Просачивание данных: Удаление целевого признака из обучающих данных."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Оценка:\n",
|
|||
|
"\n",
|
|||
|
"Информативность: Высокая, так как данные содержат много релевантных признаков для прогнозирования стоимости страхового взноса.\n",
|
|||
|
"\n",
|
|||
|
"Степень покрытия: Высокая, так как данные содержат информацию о большом количестве клиентов.\n",
|
|||
|
"\n",
|
|||
|
"Соответствие реальным данным: Высокое, так как данные взяты из реальной базы данных медицинского страхования.\n",
|
|||
|
"\n",
|
|||
|
"Согласованность меток: Высокая, так как данные имеют четко определенные метки."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Чтобы устранить проблемы прощенных строк, необходимо удалить строки с пропущенными значениями."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Разбиение набора данных на обучающую, контрольную и тестовую выборки\n",
|
|||
|
"\n",
|
|||
|
"Также потребуется приращение данных, если выборки несбалансированы по какому-либо признаку"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 69,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Обучающая выборка: (1663, 4)\n",
|
|||
|
"Charges_Grouped\n",
|
|||
|
"0 386\n",
|
|||
|
"4 277\n",
|
|||
|
"1 271\n",
|
|||
|
"2 251\n",
|
|||
|
"3 244\n",
|
|||
|
"5 234\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"Обучающая выборка после oversampling: (2316, 4)\n",
|
|||
|
"Charges_Grouped\n",
|
|||
|
"3 386\n",
|
|||
|
"5 386\n",
|
|||
|
"0 386\n",
|
|||
|
"1 386\n",
|
|||
|
"4 386\n",
|
|||
|
"2 386\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"Контрольная выборка: (554, 4)\n",
|
|||
|
"Charges_Grouped\n",
|
|||
|
"0 129\n",
|
|||
|
"4 92\n",
|
|||
|
"1 90\n",
|
|||
|
"2 84\n",
|
|||
|
"3 81\n",
|
|||
|
"5 78\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"Тестовая выборка: (555, 4)\n",
|
|||
|
"Charges_Grouped\n",
|
|||
|
"0 129\n",
|
|||
|
"4 93\n",
|
|||
|
"1 91\n",
|
|||
|
"2 83\n",
|
|||
|
"3 81\n",
|
|||
|
"5 78\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"data = df1[[\"age\", \"charges\", \"children\"]].copy()\n",
|
|||
|
"data[\"Charges_Grouped\"] = pd.cut(data[\"age\"], bins=6, labels=False)\n",
|
|||
|
"\n",
|
|||
|
"interval_counts = data[\"Charges_Grouped\"].value_counts().sort_index()\n",
|
|||
|
"\n",
|
|||
|
"min_samples_per_interval = 10\n",
|
|||
|
"for interval, count in interval_counts.items():\n",
|
|||
|
" if count < min_samples_per_interval:\n",
|
|||
|
" data.loc[data[\"Charges_Grouped\"] == interval, \"Charges_Grouped\"] = -1\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"df_insurance_train, df_insurance_val, df_insurance_test = split_stratified_into_train_val_test(\n",
|
|||
|
" data, stratify_colname=\"Charges_Grouped\", frac_train=0.60, frac_val=0.20, frac_test=0.20)\n",
|
|||
|
"\n",
|
|||
|
"print(\"Обучающая выборка: \", df_insurance_train.shape)\n",
|
|||
|
"print(df_insurance_train[\"Charges_Grouped\"].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"X_resampled, y_resampled = apply_oversampling(df_insurance_train, df_insurance_train[\"Charges_Grouped\"])\n",
|
|||
|
"df_insurance_train_adasyn = pd.DataFrame(X_resampled)\n",
|
|||
|
"\n",
|
|||
|
"print(\"Обучающая выборка после oversampling: \", df_insurance_train_adasyn.shape)\n",
|
|||
|
"print(df_insurance_train_adasyn[\"Charges_Grouped\"].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"print(\"Контрольная выборка: \", df_insurance_val.shape)\n",
|
|||
|
"print(df_insurance_val[\"Charges_Grouped\"].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"print(\"Тестовая выборка: \", df_insurance_test.shape)\n",
|
|||
|
"print(df_insurance_test[\"Charges_Grouped\"].value_counts())"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Данные хорошо подходят для построения модели прогнозирования стоимости страхового взноса. Возможны проблемы с зашумленностью и смещением данных."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"2. Цены на автомобили"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Проблемная область: Автомобильная индустрия.\n",
|
|||
|
"\n",
|
|||
|
"Описание: Набор данных содержит информацию о характеристиках автомобилей, таких как марка, модель, год выпуска, пробег, тип топлива, тип трансмиссии и цена продажи. Нет явных связей, кроме того, что все объекты относятся к автомобилям.\n",
|
|||
|
"\n",
|
|||
|
"Бизнес-цель: Оптимизация ценообразования на вторичном рынке автомобилей.\n",
|
|||
|
"\n",
|
|||
|
"Эффект для бизнеса: Увеличение продаж и прибыли за счет более точной оценки рыночной стоимости автомобилей.\n",
|
|||
|
"\n",
|
|||
|
"Цель технического проекта: Разработка модели машинного обучения для прогнозирования рыночной стоимости автомобиля на основе его характеристик.\n",
|
|||
|
"\n",
|
|||
|
"Входные признаки: Марка, модель, год выпуска, пробег, тип топлива, тип трансмиссии.\n",
|
|||
|
"\n",
|
|||
|
"Целевой признак: Цена продажи."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 70,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"<class 'pandas.core.frame.DataFrame'>\n",
|
|||
|
"RangeIndex: 19237 entries, 0 to 19236\n",
|
|||
|
"Data columns (total 18 columns):\n",
|
|||
|
" # Column Non-Null Count Dtype \n",
|
|||
|
"--- ------ -------------- ----- \n",
|
|||
|
" 0 ID 19237 non-null int64 \n",
|
|||
|
" 1 Price 19237 non-null int64 \n",
|
|||
|
" 2 Levy 19237 non-null object \n",
|
|||
|
" 3 Manufacturer 19237 non-null object \n",
|
|||
|
" 4 Model 19237 non-null object \n",
|
|||
|
" 5 Prod. year 19237 non-null int64 \n",
|
|||
|
" 6 Category 19237 non-null object \n",
|
|||
|
" 7 Leather interior 19237 non-null object \n",
|
|||
|
" 8 Fuel type 19237 non-null object \n",
|
|||
|
" 9 Engine volume 19237 non-null object \n",
|
|||
|
" 10 Mileage 19237 non-null object \n",
|
|||
|
" 11 Cylinders 19237 non-null float64\n",
|
|||
|
" 12 Gear box type 19237 non-null object \n",
|
|||
|
" 13 Drive wheels 19237 non-null object \n",
|
|||
|
" 14 Doors 19237 non-null object \n",
|
|||
|
" 15 Wheel 19237 non-null object \n",
|
|||
|
" 16 Color 19237 non-null object \n",
|
|||
|
" 17 Airbags 19237 non-null int64 \n",
|
|||
|
"dtypes: float64(1), int64(4), object(13)\n",
|
|||
|
"memory usage: 2.6+ MB\n",
|
|||
|
"ID 0\n",
|
|||
|
"Price 0\n",
|
|||
|
"Levy 0\n",
|
|||
|
"Manufacturer 0\n",
|
|||
|
"Model 0\n",
|
|||
|
"Prod. year 0\n",
|
|||
|
"Category 0\n",
|
|||
|
"Leather interior 0\n",
|
|||
|
"Fuel type 0\n",
|
|||
|
"Engine volume 0\n",
|
|||
|
"Mileage 0\n",
|
|||
|
"Cylinders 0\n",
|
|||
|
"Gear box type 0\n",
|
|||
|
"Drive wheels 0\n",
|
|||
|
"Doors 0\n",
|
|||
|
"Wheel 0\n",
|
|||
|
"Color 0\n",
|
|||
|
"Airbags 0\n",
|
|||
|
"dtype: int64\n",
|
|||
|
" ID Price Prod. year Cylinders Airbags\n",
|
|||
|
"count 1.923700e+04 1.923700e+04 19237.000000 19237.000000 19237.000000\n",
|
|||
|
"mean 4.557654e+07 1.855593e+04 2010.912824 4.582991 6.582627\n",
|
|||
|
"std 9.365914e+05 1.905813e+05 5.668673 1.199933 4.320168\n",
|
|||
|
"min 2.074688e+07 1.000000e+00 1939.000000 1.000000 0.000000\n",
|
|||
|
"25% 4.569837e+07 5.331000e+03 2009.000000 4.000000 4.000000\n",
|
|||
|
"50% 4.577231e+07 1.317200e+04 2012.000000 4.000000 6.000000\n",
|
|||
|
"75% 4.580204e+07 2.207500e+04 2015.000000 4.000000 12.000000\n",
|
|||
|
"max 4.581665e+07 2.630750e+07 2020.000000 16.000000 16.000000\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"df2 = pd.read_csv(\"../data/car_price_prediction.csv\")\n",
|
|||
|
"df2.info()\n",
|
|||
|
"print(df2.isnull().sum())\n",
|
|||
|
"print(df2.describe())\n",
|
|||
|
"\n",
|
|||
|
"mean_price_per_year = df2.groupby('Prod. year')['Price'].mean()\n",
|
|||
|
"plt.figure(figsize=(8, 6))\n",
|
|||
|
"mean_price_per_year.plot(kind='line', marker='o', color='blue')\n",
|
|||
|
"plt.title('Зависимость средней цены от года выпуска автомобиля')\n",
|
|||
|
"plt.xlabel('Год выпуска')\n",
|
|||
|
"plt.ylabel('Средняя цена ($)')\n",
|
|||
|
"plt.grid(True)\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Зашумленность: Возможны ошибки в данных, например, некорректные значения пробега.\n",
|
|||
|
"\n",
|
|||
|
"Смещение: Может быть смещение в данных, например, если выборка нерепрезентативна по марке или модели автомобиля.\n",
|
|||
|
"\n",
|
|||
|
"Актуальность: Данные должны быть актуальными, чтобы модель давала точные прогнозы.\n",
|
|||
|
"\n",
|
|||
|
"Выбросы: Возможны выбросы в данных, например, очень высокие или низкие значения цены продажи.\n",
|
|||
|
"\n",
|
|||
|
"Просачивание данных: Не должно быть просачивания данных, например, если цена продажи используется в качестве признака.\n",
|
|||
|
"\n",
|
|||
|
"Решение этих проблем:\n",
|
|||
|
"\n",
|
|||
|
"Зашумленность: Очистка данных, удаление или исправление ошибочных значений.\n",
|
|||
|
"\n",
|
|||
|
"Смещение: Балансировка данных, использование техники выборки.\n",
|
|||
|
"\n",
|
|||
|
"Актуальность: Использование актуальных данных.\n",
|
|||
|
"\n",
|
|||
|
"Выбросы: Удаление выбросов или использование техники обработки выбросов.\n",
|
|||
|
"\n",
|
|||
|
"Просачивание данных: Удаление целевого признака из обучающих данных."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Оценка:\n",
|
|||
|
"\n",
|
|||
|
"Информативность: Высокая, так как данные содержат много релевантных признаков для прогнозирования стоимости страхового взноса.\n",
|
|||
|
"\n",
|
|||
|
"Степень покрытия: Высокая, так как данные содержат информацию о большом количестве клиентов.\n",
|
|||
|
"\n",
|
|||
|
"Соответствие реальным данным: Высокое, так как данные взяты из реальной базы данных медицинского страхования.\n",
|
|||
|
"\n",
|
|||
|
"Согласованность меток: Высокая, так как данные имеют четко определенные метки."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Разбиение набора данных на обучающую, контрольную и тестовую выборки\n",
|
|||
|
"\n",
|
|||
|
"Также потребуется приращение данных, если выборки несбалансированы по какому-либо признаку"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 72,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Обучающая выборка: (11541, 4)\n",
|
|||
|
"Price_Grouped\n",
|
|||
|
" 0 7371\n",
|
|||
|
" 1 2761\n",
|
|||
|
" 2 935\n",
|
|||
|
" 3 272\n",
|
|||
|
" 4 96\n",
|
|||
|
" 5 50\n",
|
|||
|
" 6 22\n",
|
|||
|
" 7 13\n",
|
|||
|
"-1 9\n",
|
|||
|
" 8 8\n",
|
|||
|
" 9 4\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"Обучающая выборка после oversampling: (81081, 4)\n",
|
|||
|
"Price_Grouped\n",
|
|||
|
" 0 7371\n",
|
|||
|
" 1 7371\n",
|
|||
|
" 2 7371\n",
|
|||
|
" 5 7371\n",
|
|||
|
" 3 7371\n",
|
|||
|
" 4 7371\n",
|
|||
|
" 7 7371\n",
|
|||
|
" 6 7371\n",
|
|||
|
" 8 7371\n",
|
|||
|
"-1 7371\n",
|
|||
|
" 9 7371\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"Контрольная выборка: (3847, 4)\n",
|
|||
|
"Price_Grouped\n",
|
|||
|
" 0 2457\n",
|
|||
|
" 1 920\n",
|
|||
|
" 2 311\n",
|
|||
|
" 3 91\n",
|
|||
|
" 4 32\n",
|
|||
|
" 5 17\n",
|
|||
|
" 6 8\n",
|
|||
|
" 7 4\n",
|
|||
|
" 8 3\n",
|
|||
|
"-1 3\n",
|
|||
|
" 9 1\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"Тестовая выборка: (3848, 4)\n",
|
|||
|
"Price_Grouped\n",
|
|||
|
" 0 2458\n",
|
|||
|
" 1 921\n",
|
|||
|
" 2 312\n",
|
|||
|
" 3 90\n",
|
|||
|
" 4 32\n",
|
|||
|
" 5 17\n",
|
|||
|
" 6 7\n",
|
|||
|
" 7 4\n",
|
|||
|
" 8 3\n",
|
|||
|
"-1 3\n",
|
|||
|
" 9 1\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"df2 = df2[df2['Price'] <= 10000000]\n",
|
|||
|
"\n",
|
|||
|
"data = df2[[\"Price\", \"Prod. year\", \"Airbags\"]].copy()\n",
|
|||
|
"data[\"Price_Grouped\"] = pd.cut(data[\"Price\"], bins=50, labels=False)\n",
|
|||
|
"\n",
|
|||
|
"interval_counts = data[\"Price_Grouped\"].value_counts().sort_index()\n",
|
|||
|
"\n",
|
|||
|
"min_samples_per_interval = 5\n",
|
|||
|
"for interval, count in interval_counts.items():\n",
|
|||
|
" if count < min_samples_per_interval:\n",
|
|||
|
" data.loc[data[\"Price_Grouped\"] == interval, \"Price_Grouped\"] = -1\n",
|
|||
|
"\n",
|
|||
|
"df_price_train, df_price_val, df_price_test = split_stratified_into_train_val_test(\n",
|
|||
|
" data, stratify_colname=\"Price_Grouped\", frac_train=0.60, frac_val=0.20, frac_test=0.20)\n",
|
|||
|
"\n",
|
|||
|
"print(\"Обучающая выборка: \", df_price_train.shape)\n",
|
|||
|
"print(df_price_train[\"Price_Grouped\"].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"X_resampled, y_resampled = apply_oversampling(df_price_train, df_price_train[\"Price_Grouped\"])\n",
|
|||
|
"df_price_train_adasyn = pd.DataFrame(X_resampled)\n",
|
|||
|
"\n",
|
|||
|
"print(\"Обучающая выборка после oversampling: \", df_price_train_adasyn.shape)\n",
|
|||
|
"print(df_price_train_adasyn[\"Price_Grouped\"].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"print(\"Контрольная выборка: \", df_price_val.shape)\n",
|
|||
|
"print(df_price_val[\"Price_Grouped\"].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"print(\"Тестовая выборка: \", df_price_test.shape)\n",
|
|||
|
"print(df_price_test[\"Price_Grouped\"].value_counts())"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Данные хорошо подходят для построения модели прогнозирования цены продажи автомобиля. Возможны проблемы с зашумленностью и смещением данных."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"3. Цены на кофе"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Проблемная область: Финансы и инвестиции.\n",
|
|||
|
"\n",
|
|||
|
"Описание: Набор данных содержит исторические данные о ценах на акции Starbucks (тикер: SBUX) с 1992 по 2021 год. Данные включают информацию о ценах открытия, закрытия, максимальных и минимальных ценах, объеме торгов и скорректированных ценах закрытия.\n",
|
|||
|
"\n",
|
|||
|
"Связи между объектами: Данные представлены временным рядом, где каждая строка соответствует одному торговому дню. Между объектами существует временная зависимость, так как цены на акции зависят от предыдущих значений.\n",
|
|||
|
"\n",
|
|||
|
"Бизнес-цель: Прогнозирование будущих цен на акции Starbucks.\n",
|
|||
|
"\n",
|
|||
|
"Эффект для бизнеса:\n",
|
|||
|
"\n",
|
|||
|
"Для инвесторов: Повышение точности прогнозов позволяет инвесторам принимать более обоснованные решения о покупке и продаже акций, что может привести к увеличению прибыли.\n",
|
|||
|
"\n",
|
|||
|
"Для компании Starbucks: Понимание динамики цен на акции может помочь в разработке стратегий привлечения инвестиций и повышения рыночной стоимости компании."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Цель технического проекта: Разработка модели машинного обучения для прогнозирования цены закрытия акций Starbucks на следующий день.\n",
|
|||
|
"\n",
|
|||
|
"Входные признаки:\n",
|
|||
|
"\n",
|
|||
|
"Open (цена открытия)\n",
|
|||
|
"\n",
|
|||
|
"High (максимальная цена)\n",
|
|||
|
"\n",
|
|||
|
"Low (минимальная цена)\n",
|
|||
|
"\n",
|
|||
|
"Close (цена закрытия)\n",
|
|||
|
"\n",
|
|||
|
"Volume (объем торгов)\n",
|
|||
|
"\n",
|
|||
|
"Adj Close (скорректированная цена закрытия)\n",
|
|||
|
"\n",
|
|||
|
"Целевой признак: Close (цена закрытия на следующий день)."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 76,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"<class 'pandas.core.frame.DataFrame'>\n",
|
|||
|
"RangeIndex: 8036 entries, 0 to 8035\n",
|
|||
|
"Data columns (total 7 columns):\n",
|
|||
|
" # Column Non-Null Count Dtype \n",
|
|||
|
"--- ------ -------------- ----- \n",
|
|||
|
" 0 Date 8036 non-null object \n",
|
|||
|
" 1 Open 8036 non-null float64\n",
|
|||
|
" 2 High 8036 non-null float64\n",
|
|||
|
" 3 Low 8036 non-null float64\n",
|
|||
|
" 4 Close 8036 non-null float64\n",
|
|||
|
" 5 Adj Close 8036 non-null float64\n",
|
|||
|
" 6 Volume 8036 non-null int64 \n",
|
|||
|
"dtypes: float64(5), int64(1), object(1)\n",
|
|||
|
"memory usage: 439.6+ KB\n",
|
|||
|
"Date 0\n",
|
|||
|
"Open 0\n",
|
|||
|
"High 0\n",
|
|||
|
"Low 0\n",
|
|||
|
"Close 0\n",
|
|||
|
"Adj Close 0\n",
|
|||
|
"Volume 0\n",
|
|||
|
"dtype: int64\n",
|
|||
|
" Open High Low Close Adj Close \\\n",
|
|||
|
"count 8036.000000 8036.000000 8036.000000 8036.000000 8036.000000 \n",
|
|||
|
"mean 30.054280 30.351487 29.751322 30.058857 26.674025 \n",
|
|||
|
"std 33.615577 33.906613 33.314569 33.615911 31.728090 \n",
|
|||
|
"min 0.328125 0.347656 0.320313 0.335938 0.260703 \n",
|
|||
|
"25% 4.392031 4.531250 4.304922 4.399610 3.414300 \n",
|
|||
|
"50% 13.325000 13.493750 13.150000 13.330000 10.352452 \n",
|
|||
|
"75% 55.250000 55.722501 54.852499 55.267499 47.464829 \n",
|
|||
|
"max 126.080002 126.320000 124.809998 126.059998 118.010414 \n",
|
|||
|
"\n",
|
|||
|
" Volume \n",
|
|||
|
"count 8.036000e+03 \n",
|
|||
|
"mean 1.470459e+07 \n",
|
|||
|
"std 1.340021e+07 \n",
|
|||
|
"min 1.504000e+06 \n",
|
|||
|
"25% 7.817750e+06 \n",
|
|||
|
"50% 1.169815e+07 \n",
|
|||
|
"75% 1.778795e+07 \n",
|
|||
|
"max 5.855088e+08 \n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"df3 = pd.read_csv(\"../data/Starbucks Dataset.csv\")\n",
|
|||
|
"df3.info()\n",
|
|||
|
"print(df3.isnull().sum())\n",
|
|||
|
"print(df3.describe())\n",
|
|||
|
"\n",
|
|||
|
"plt.plot(df3[\"Date\"], df3[\"High\"])\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Зашумленность: Возможны случайные колебания цен, которые могут быть вызваны внешними факторами.\n",
|
|||
|
"\n",
|
|||
|
"Смещение: Нет явного смещения, так как данные представляют собой временной ряд.\n",
|
|||
|
"\n",
|
|||
|
"Актуальность: Данные актуальны до 2021 года, но для более точного прогнозирования могут потребоваться более свежие данные.\n",
|
|||
|
"\n",
|
|||
|
"Выбросы: Возможны выбросы в данных, например, резкие скачки цен, вызванные внешними событиями (кризисы, слияния и поглощения).\n",
|
|||
|
"\n",
|
|||
|
"Просачивание данных: Не должно быть просачивания данных, так как целевой признак (цена закрытия на следующий день) не должен использоваться в качестве признака."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Примеры их решений:\n",
|
|||
|
"\n",
|
|||
|
"Зашумленность: Использование методов сглаживания временных рядов, таких как скользящее среднее или экспоненциальное сглаживание.\n",
|
|||
|
"\n",
|
|||
|
"Выбросы: Удаление выбросов или использование техники обработки выбросов, такой как Winsorization.\n",
|
|||
|
"\n",
|
|||
|
"Актуальность: Обновление данных до последней доступной даты."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Оценка набора данных:\n",
|
|||
|
"\n",
|
|||
|
"Информативность: Высокая, так как данные содержат много релевантных признаков для прогнозирования цен на акции.\n",
|
|||
|
"\n",
|
|||
|
"Степень покрытия: Высокая, так как данные охватывают длительный период времени (1992-2021).\n",
|
|||
|
"\n",
|
|||
|
"Соответствие реальным данным: Высокое, так как данные взяты из реальной торговой платформы.\n",
|
|||
|
"\n",
|
|||
|
"Согласованность меток: Высокая, так как данные имеют четко определенные метки."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Выборки сбалансированы, так как данные представляют собой временной ряд, и каждая строка соответствует одному торговому дню.\n",
|
|||
|
"Данные представлены в виде временного ряда, поэтому не требуется исмпользовать методы приращения данных."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Для временных рядов методы oversampling и undersampling обычно не применяются, так как они могут нарушить временную структуру данных."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 78,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Обучающая выборка: (4821, 4)\n",
|
|||
|
"Volume_Grouped\n",
|
|||
|
" 0 2802\n",
|
|||
|
" 1 1460\n",
|
|||
|
" 2 369\n",
|
|||
|
" 3 111\n",
|
|||
|
" 4 40\n",
|
|||
|
" 5 18\n",
|
|||
|
"-1 10\n",
|
|||
|
" 6 7\n",
|
|||
|
" 7 4\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"Контрольная выборка: (1607, 4)\n",
|
|||
|
"Volume_Grouped\n",
|
|||
|
" 0 934\n",
|
|||
|
" 1 487\n",
|
|||
|
" 2 123\n",
|
|||
|
" 3 37\n",
|
|||
|
" 4 13\n",
|
|||
|
" 5 6\n",
|
|||
|
"-1 4\n",
|
|||
|
" 6 2\n",
|
|||
|
" 7 1\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"Тестовая выборка: (1608, 4)\n",
|
|||
|
"Volume_Grouped\n",
|
|||
|
" 0 934\n",
|
|||
|
" 1 487\n",
|
|||
|
" 2 124\n",
|
|||
|
" 3 37\n",
|
|||
|
" 4 14\n",
|
|||
|
" 5 6\n",
|
|||
|
"-1 3\n",
|
|||
|
" 6 2\n",
|
|||
|
" 7 1\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"data = df3[[\"Volume\", \"High\", \"Low\"]].copy()\n",
|
|||
|
"data[\"Volume_Grouped\"] = pd.cut(data[\"Volume\"], bins=50, labels=False)\n",
|
|||
|
"\n",
|
|||
|
"interval_counts = data[\"Volume_Grouped\"].value_counts().sort_index()\n",
|
|||
|
"\n",
|
|||
|
"min_samples_per_interval = 5\n",
|
|||
|
"for interval, count in interval_counts.items():\n",
|
|||
|
" if count < min_samples_per_interval:\n",
|
|||
|
" data.loc[data[\"Volume_Grouped\"] == interval, \"Volume_Grouped\"] = -1\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"df_coffee_train, df_coffee_val, df_coffee_test = split_stratified_into_train_val_test(\n",
|
|||
|
" data, stratify_colname=\"Volume_Grouped\", frac_train=0.60, frac_val=0.20, frac_test=0.20)\n",
|
|||
|
"\n",
|
|||
|
"print(\"Обучающая выборка: \", df_coffee_train.shape)\n",
|
|||
|
"print(df_coffee_train[\"Volume_Grouped\"].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"print(\"Контрольная выборка: \", df_coffee_val.shape)\n",
|
|||
|
"print(df_coffee_val[\"Volume_Grouped\"].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"print(\"Тестовая выборка: \", df_coffee_test.shape)\n",
|
|||
|
"print(df_coffee_test[\"Volume_Grouped\"].value_counts())"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Вывод:\n",
|
|||
|
"\n",
|
|||
|
"Данные хорошо подходят для построения модели прогнозирования цен на акции Starbucks.\n",
|
|||
|
"\n",
|
|||
|
"Возможны проблемы с зашумленностью и выбросами в данных.\n",
|
|||
|
"\n",
|
|||
|
"Для улучшения качества модели можно использовать методы сглаживания временных рядов и обработки выбросов."
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"metadata": {
|
|||
|
"kernelspec": {
|
|||
|
"display_name": "aimvenv",
|
|||
|
"language": "python",
|
|||
|
"name": "python3"
|
|||
|
},
|
|||
|
"language_info": {
|
|||
|
"codemirror_mode": {
|
|||
|
"name": "ipython",
|
|||
|
"version": 3
|
|||
|
},
|
|||
|
"file_extension": ".py",
|
|||
|
"mimetype": "text/x-python",
|
|||
|
"name": "python",
|
|||
|
"nbconvert_exporter": "python",
|
|||
|
"pygments_lexer": "ipython3",
|
|||
|
"version": "3.12.6"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 2
|
|||
|
}
|