AIM-PIbd-32-Safiulova-K-N/lab_3/lab_3.ipynb

660 lines
178 KiB
Plaintext
Raw Normal View History

2024-10-25 18:34:15 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Вариант 19: Данные о миллионерах\n",
"### Бизнес-цели:\n",
"Цель 1: Исследовать распределение богатства среди миллиардеров и выявить ключевые факторы, которые способствуют их успеху.\n",
"Цель 2: Оценить влияние миллиардеров на экономику и общество, включая их вклад в благотворительность, инновации и социальные проекты.\n",
"### Цели технического проекта:\n",
"Для бизнес-цели 1:\n",
"Сбор и подготовка данных:\n",
"Очистка данных от пропусков, выбросов и дубликатов.\n",
"Преобразование категориальных переменных в числовые.\n",
"Разделение данных на обучающую и тестовую выборки.\n",
"Разработка и обучение модели:\n",
"Исследование различных алгоритмов машинного обучения (линейная регрессия, деревья решений, случайный лес и т.д.).\n",
"Обучение моделей на обучающей выборке.\n",
"Оценка качества моделей на тестовой выборке с помощью метрик RMSE, MAE и др.\n",
"Развертывание модели:\n",
"Интеграция модели в существующую систему или разработка нового API для доступа к прогнозам.\n",
"Создание веб-интерфейса или мобильного приложения для удобного использования модели.\n",
"Для бизнес-цели 2:\n",
"Сбор и подготовка данных:\n",
"Очистка данных от пропусков, выбросов и дубликатов.\n",
"Преобразование категориальных переменных в числовые.\n",
"Разделение данных на обучающую и тестовую выборки.\n",
"Разработка и обучение модели:\n",
"Исследование различных алгоритмов машинного обучения (линейная регрессия, деревья решений, случайный лес и т.д.).\n",
"Обучение моделей на обучающей выборке.\n",
"Оценка качества моделей на тестовой выборке с помощью метрик RMSE, MAE и др.\n",
"Развертывание модели:\n",
"Создать интерактивные дашборды для визуализации вклада миллиардеров в разные сферы.\n",
"Применить статистические методы и машинное обучение для анализа влияния миллиардеров на экономику и общество.\n",
"Определить ключевые факторы, влияющие на вклад миллиардеров в благотворительность и инновации."
]
},
{
"cell_type": "code",
2024-10-25 18:37:54 +04:00
"execution_count": 22,
2024-10-25 18:34:15 +04:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Rank ', 'Name', 'Networth', 'Age', 'Country', 'Source', 'Industry'], dtype='object')\n"
]
}
],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib\n",
"import matplotlib.ticker as ticker\n",
"import seaborn as sns\n",
"from sklearn.model_selection import train_test_split\n",
2024-10-25 18:37:54 +04:00
"df = pd.read_csv(\"..//static//csv//Forbes Billionaires.csv\")\n",
2024-10-25 18:34:15 +04:00
"print(df.columns)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Разделим на 3 выборки\n"
]
},
{
"cell_type": "code",
2024-10-25 18:37:54 +04:00
"execution_count": 23,
2024-10-25 18:34:15 +04:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Размер обучающей выборки: (1560, 6)\n",
"Размер контрольной выборки: (520, 6)\n",
"Размер тестовой выборки: (520, 6)\n"
]
}
],
"source": [
"# Предварительная обработка данных \n",
"# Удаление пропусков и дубликатов\n",
"df = df.dropna()\n",
"df = df.drop_duplicates()\n",
"\n",
"# Разделение данных на признаки (X) и целевую переменную (y)\n",
"# В данном случае, предположим, что мы хотим предсказать 'Networth'\n",
"X = df.drop(columns=['Networth'])\n",
"y = df['Networth']\n",
"\n",
"# Разбиение данных на обучающую и тестовую выборки\n",
"# Сначала разделим на обучающую и тестовую выборки\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"# Затем разделим обучающую выборку на обучающую и контрольную выборки\n",
"X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.25, random_state=42)\n",
"\n",
"# Проверка размеров выборок\n",
"print(\"Размер обучающей выборки:\", X_train.shape)\n",
"print(\"Размер контрольной выборки:\", X_val.shape)\n",
"print(\"Размер тестовой выборки:\", X_test.shape)"
]
},
{
"cell_type": "code",
2024-10-25 18:37:54 +04:00
"execution_count": 24,
2024-10-25 18:34:15 +04:00
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Создание DataFrame для обучающей, контрольной и тестовой выборок\n",
"train_data = pd.DataFrame({'Networth': y_train})\n",
"val_data = pd.DataFrame({'Networth': y_val})\n",
"test_data = pd.DataFrame({'Networth': y_test})\n",
"\n",
"# Гистограмма распределения Networth в обучающей выборке\n",
"sns.histplot(train_data['Networth'], kde=True)\n",
"plt.title('Распределение Networth в обучающей выборке')\n",
"plt.show()\n",
"\n",
"# Гистограмма распределения Networth в контрольной выборке\n",
"sns.histplot(val_data['Networth'], kde=True)\n",
"plt.title('Распределение Networth в контрольной выборке')\n",
"plt.show()\n",
"\n",
"# Гистограмма распределения Networth в тестовой выборке\n",
"sns.histplot(test_data['Networth'], kde=True)\n",
"plt.title('Распределение Networth в тестовой выборке')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Процесс конструирования признаков\n",
"Задача 1: Исследовать распределение богатства среди миллиардеров и выявить ключевые факторы, которые способствуют их успеху.\n",
"Цель технического проекта: Разработка модели машинного обучения для анализа распределения богатства среди миллиардеров и выявления ключевых факторов их успеха.\n",
"\n",
"Задача 2: Оценить влияние миллиардеров на экономику и общество, включая их вклад в благотворительность, инновации и социальные проекты.\n",
"Цель технического проекта: Использование прогнозов влияния миллиардеров на экономику и общество для оптимизации стратегий благотворительности и инвестиций в инновации.\n",
"\n",
"\n",
"### Унитарное кодирование категориальных признаков (one-hot encoding)\n",
"\n",
"One-hot encoding: Преобразование категориальных признаков в бинарные векторы."
]
},
{
"cell_type": "code",
2024-10-25 18:37:54 +04:00
"execution_count": 25,
2024-10-25 18:34:15 +04:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Rank Name Networth Age Country_Argentina \\\n",
"0 1 Elon Musk 219.0 50 0.0 \n",
"1 2 Jeff Bezos 171.0 58 0.0 \n",
"2 3 Bernard Arnault & family 158.0 73 0.0 \n",
"3 4 Bill Gates 129.0 66 0.0 \n",
"4 5 Warren Buffett 118.0 91 0.0 \n",
"\n",
" Country_Australia Country_Austria Country_Barbados Country_Belgium \\\n",
"0 0.0 0.0 0.0 0.0 \n",
"1 0.0 0.0 0.0 0.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 0.0 0.0 \n",
"\n",
" Country_Belize ... Industry_Logistics Industry_Manufacturing \\\n",
"0 0.0 ... 0.0 0.0 \n",
"1 0.0 ... 0.0 0.0 \n",
"2 0.0 ... 0.0 0.0 \n",
"3 0.0 ... 0.0 0.0 \n",
"4 0.0 ... 0.0 0.0 \n",
"\n",
" Industry_Media & Entertainment Industry_Metals & Mining \\\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",
" Industry_Real Estate Industry_Service Industry_Sports \\\n",
"0 0.0 0.0 0.0 \n",
"1 0.0 0.0 0.0 \n",
"2 0.0 0.0 0.0 \n",
"3 0.0 0.0 0.0 \n",
"4 0.0 0.0 0.0 \n",
"\n",
" Industry_Technology Industry_Telecom Industry_diversified \n",
"0 0.0 0.0 0.0 \n",
"1 1.0 0.0 0.0 \n",
"2 0.0 0.0 0.0 \n",
"3 1.0 0.0 0.0 \n",
"4 0.0 0.0 0.0 \n",
"\n",
"[5 rows x 989 columns]\n"
]
}
],
"source": [
"from sklearn.preprocessing import OneHotEncoder\n",
"\n",
"# Загрузка данных\n",
"df = pd.read_csv(\"..//static//csv//Forbes Billionaires.csv\")\n",
"\n",
"# Определение категориальных признаков\n",
"categorical_features = ['Country', 'Source', 'Industry']\n",
"\n",
"# Применение one-hot encoding\n",
"encoder = OneHotEncoder(sparse_output=False, drop='first')\n",
"encoded_features = encoder.fit_transform(df[categorical_features])\n",
"\n",
"# Создание DataFrame с закодированными признаками\n",
"encoded_df = pd.DataFrame(encoded_features, columns=encoder.get_feature_names_out(categorical_features))\n",
"\n",
"# Объединение закодированных признаков с исходным DataFrame\n",
"df_encoded = pd.concat([df.drop(columns=categorical_features), encoded_df], axis=1)\n",
"\n",
"# Проверка результата\n",
"print(df_encoded.head())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ручной синтез\n",
"Создание новых признаков на основе экспертных знаний и логики предметной области. Например, можно создать признак \"квадрат возраста\" или \"возраст в квадрате\", который может помочь учесть нелинейные зависимости в данных."
]
},
{
"cell_type": "code",
2024-10-25 18:37:54 +04:00
"execution_count": 26,
2024-10-25 18:34:15 +04:00
"metadata": {},
"outputs": [],
"source": [
"# Создание нового признака 'Age Squared'\n",
"df['Age Squared'] = df['Age'] ** 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Масштабирование признаков - это процесс преобразования числовых признаков таким образом, чтобы они имели одинаковый масштаб. Это важно для многих алгоритмов машинного обучения, которые чувствительны к масштабу признаков, таких как линейная регрессия, метод опорных векторов (SVM) и нейронные сети."
]
},
{
"cell_type": "code",
2024-10-25 18:37:54 +04:00
"execution_count": 27,
2024-10-25 18:34:15 +04:00
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"# Загрузка данных\n",
"df = pd.read_csv(\"..//static//csv//Forbes Billionaires.csv\")\n",
"\n",
"# Определение числовых признаков\n",
"numerical_features = df.select_dtypes(include=['number']).columns.tolist()\n",
"numerical_features.remove('Networth') # Исключаем целевую переменную\n",
"\n",
"# Создание DataFrame для обучающей, контрольной и тестовой выборок\n",
"train_data = pd.DataFrame(X_train, columns=X.columns)\n",
"val_data = pd.DataFrame(X_val, columns=X.columns)\n",
"test_data = pd.DataFrame(X_test, columns=X.columns)\n",
"\n",
"# Пример масштабирования числовых признаков\n",
"scaler = StandardScaler()\n",
"train_data[numerical_features] = scaler.fit_transform(train_data[numerical_features])\n",
"val_data[numerical_features] = scaler.transform(val_data[numerical_features])\n",
"test_data[numerical_features] = scaler.transform(test_data[numerical_features])\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Конструирование признаков с применением фреймворка Featuretools"
]
},
{
"cell_type": "code",
2024-10-25 18:37:54 +04:00
"execution_count": 28,
2024-10-25 18:34:15 +04:00
"metadata": {},
"outputs": [
2024-10-25 18:37:54 +04:00
{
"name": "stdout",
"output_type": "stream",
"text": [
" Rank Networth Age Country Industry\n",
"id \n",
"1 1 219.0 50 United States Automotive \n",
"2 2 171.0 58 United States Technology \n",
"3 3 158.0 73 France Fashion & Retail \n",
"4 4 129.0 66 United States Technology \n",
"5 5 118.0 91 United States Finance & Investments \n",
" Rank Networth Age Country Industry\n",
"id \n",
"619 601 4.7 77 United States Logistics \n",
"195 192 10.3 56 Russia Finance & Investments \n",
"1245 1238 2.5 73 Taiwan Fashion & Retail \n",
"2014 1929 1.5 68 Italy Service \n",
"1801 1729 1.7 79 United Kingdom Energy \n",
" Rank Networth Age Country Industry\n",
"id \n",
"473 471 5.6 83 United States Real Estate \n",
"85 85 18.7 71 Germany Fashion & Retail \n",
"1552 1513 2.0 75 Spain Construction & Engineering \n",
"2354 2324 1.2 56 United States Finance & Investments \n",
"2360 2324 1.2 65 China Manufacturing \n"
]
},
2024-10-25 18:34:15 +04:00
{
"name": "stderr",
"output_type": "stream",
"text": [
2024-10-25 18:37:54 +04:00
"c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\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:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\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:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\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:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\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:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\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:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\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:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\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:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\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"
2024-10-25 18:34:15 +04:00
]
}
],
"source": [
2024-10-25 18:37:54 +04:00
"import pandas as pd\n",
2024-10-25 18:34:15 +04:00
"import featuretools as ft\n",
2024-10-25 18:37:54 +04:00
"from sklearn.model_selection import train_test_split\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"# Загрузка данных\n",
"df = pd.read_csv(\"..//static//csv//Forbes Billionaires.csv\")\n",
"\n",
"# Создание уникального идентификатора для каждой строки\n",
"df['id'] = range(1, len(df) + 1)\n",
"\n",
"# Предобработка данных (например, кодирование категориальных признаков, удаление дубликатов)\n",
"# Удаление дубликатов по всем столбцам\n",
"df = df.drop_duplicates()\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"# Создание EntitySet\n",
2024-10-25 18:34:15 +04:00
"es = ft.EntitySet(id='billionaires_data')\n",
"\n",
2024-10-25 18:37:54 +04:00
"# Добавление датафрейма с миллиардерами\n",
"es = es.add_dataframe(\n",
" dataframe_name='billionaires',\n",
" dataframe=df,\n",
" index='id'\n",
")\n",
"\n",
"# Генерация признаков с помощью глубокой синтезы признаков\n",
"feature_matrix, feature_defs = ft.dfs(entityset=es, target_dataframe_name='billionaires', max_depth=1)\n",
"\n",
"# Выводим первые 5 строк сгенерированного набора признаков\n",
"print(feature_matrix.head())\n",
"\n",
"# Разделение данных на обучающую и тестовую выборки\n",
"train_data, test_data = train_test_split(df, test_size=0.3, random_state=42)\n",
"\n",
"# Разделение оставшейся части на валидационную и тестовую выборки\n",
"val_data, test_data = train_test_split(test_data, test_size=0.5, random_state=42)\n",
2024-10-25 18:34:15 +04:00
"\n",
"# Преобразование признаков для контрольной и тестовой выборок\n",
2024-10-25 18:37:54 +04:00
"val_feature_matrix = ft.calculate_feature_matrix(features=feature_defs, entityset=es, instance_ids=val_data['id'])\n",
"test_feature_matrix = ft.calculate_feature_matrix(features=feature_defs, entityset=es, instance_ids=test_data['id'])\n",
"\n",
"# Вывод первых 5 строк сгенерированных признаков для валидационной и тестовой выборок\n",
"print(val_feature_matrix.head())\n",
"print(test_feature_matrix.head())"
2024-10-25 18:34:15 +04:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Оценка качества каждого набора признаков\n",
"Предсказательная способность\n",
"Метрики: RMSE, MAE, R²\n",
"\n",
"Методы: Обучение модели на обучающей выборке и оценка на контрольной и тестовой выборках.\n",
"\n",
"Скорость вычисления\n",
"Методы: Измерение времени выполнения генерации признаков и обучения модели.\n",
"\n",
"Надежность\n",
"Методы: Кросс-валидация, анализ чувствительности модели к изменениям в данных.\n",
"\n",
"Корреляция\n",
"Методы: Анализ корреляционной матрицы признаков, удаление мультиколлинеарных признаков.\n",
"\n",
"Цельность\n",
"Методы: Проверка логической связи между признаками и целевой переменной, интерпретация результатов модели."
]
},
{
"cell_type": "code",
2024-10-25 18:37:54 +04:00
"execution_count": 29,
2024-10-25 18:34:15 +04:00
"metadata": {},
"outputs": [
{
2024-10-25 18:37:54 +04:00
"name": "stdout",
2024-10-25 18:34:15 +04:00
"output_type": "stream",
"text": [
2024-10-25 18:37:54 +04:00
"Время обучения модели: 2.38 секунд\n",
"Среднеквадратичная ошибка: 37.42\n"
2024-10-25 18:34:15 +04:00
]
}
],
"source": [
2024-10-25 18:37:54 +04:00
"import time\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.metrics import mean_squared_error\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"# Загрузка данных\n",
"df = pd.read_csv(\"..//static//csv//Forbes Billionaires.csv\")\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"# Разделение данных на признаки и целевую переменную\n",
"X = df.drop('Networth', axis=1)\n",
"y = df['Networth']\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"# One-hot encoding для категориальных переменных\n",
"X = pd.get_dummies(X, drop_first=True)\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"# Проверяем, есть ли пропущенные значения, и заполняем их медианой или другим подходящим значением\n",
"X.fillna(X.median(), inplace=True)\n",
"\n",
"# Разделение данных на обучающую и валидационную выборки\n",
"X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"# Обучение модели\n",
"model = LinearRegression()\n",
"\n",
"# Начинаем отсчет времени\n",
"start_time = time.time()\n",
"model.fit(X_train, y_train)\n",
"\n",
"# Время обучения модели\n",
"train_time = time.time() - start_time\n",
"\n",
"# Предсказания и оценка модели\n",
"predictions = model.predict(X_val)\n",
"mse = mean_squared_error(y_val, predictions)\n",
"\n",
"print(f'Время обучения модели: {train_time:.2f} секунд')\n",
"print(f'Среднеквадратичная ошибка: {mse:.2f}')"
2024-10-25 18:34:15 +04:00
]
},
{
"cell_type": "code",
2024-10-25 18:37:54 +04:00
"execution_count": 30,
2024-10-25 18:34:15 +04:00
"metadata": {},
"outputs": [
2024-10-25 18:37:54 +04:00
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n",
" warnings.warn(\n"
]
},
2024-10-25 18:34:15 +04:00
{
"name": "stdout",
"output_type": "stream",
"text": [
2024-10-25 18:37:54 +04:00
"RMSE: 0.1079309363400079\n",
"R²: 0.9995098829408076\n",
"MAE: 0.013002884615386595 \n",
"\n",
"Кросс-валидация RMSE: 1.8428859549056362 \n",
"\n",
"Train RMSE: 0.595273758834312\n",
"Train R²: 0.9973914757181492\n",
"Train MAE: 0.0366675480769256\n",
"\n"
2024-10-25 18:34:15 +04:00
]
2024-10-25 18:37:54 +04:00
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n",
" warnings.warn(\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
2024-10-25 18:34:15 +04:00
}
],
"source": [
2024-10-25 18:37:54 +04:00
"from sklearn.ensemble import RandomForestRegressor\n",
"from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error\n",
"from sklearn.model_selection import train_test_split, cross_val_score\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"# Загрузка данных\n",
"df = pd.read_csv(\"..//static//csv//Forbes Billionaires.csv\")\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"# Удаление строк с NaN\n",
"df = df.dropna()\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"# Разделение данных на признаки и целевую переменную\n",
"X = df.drop('Networth', axis=1)\n",
"y = df['Networth']\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"# One-hot encoding для категориальных переменных\n",
"X = pd.get_dummies(X, drop_first=True)\n",
2024-10-25 18:34:15 +04:00
"\n",
"# Разделение данных на обучающую и тестовую выборки\n",
2024-10-25 18:37:54 +04:00
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"# Выбор модели\n",
"model = RandomForestRegressor(random_state=42)\n",
2024-10-25 18:34:15 +04:00
"\n",
"# Обучение модели\n",
"model.fit(X_train, y_train)\n",
"\n",
2024-10-25 18:37:54 +04:00
"# Предсказание и оценка\n",
"y_pred = model.predict(X_test)\n",
"\n",
"rmse = mean_squared_error(y_test, y_pred, squared=False)\n",
"r2 = r2_score(y_test, y_pred)\n",
"mae = mean_absolute_error(y_test, y_pred)\n",
"\n",
"print(f\"RMSE: {rmse}\")\n",
"print(f\"R²: {r2}\")\n",
"print(f\"MAE: {mae} \\n\")\n",
"\n",
"# Кросс-валидация\n",
"scores = cross_val_score(model, X_train, y_train, cv=5, scoring='neg_mean_squared_error')\n",
"rmse_cv = (-scores.mean())**0.5\n",
"print(f\"Кросс-валидация RMSE: {rmse_cv} \\n\")\n",
"\n",
"# Анализ важности признаков\n",
"feature_importances = model.feature_importances_\n",
"feature_names = X_train.columns\n",
"\n",
"# Проверка на переобучение\n",
"y_train_pred = model.predict(X_train)\n",
"\n",
"rmse_train = mean_squared_error(y_train, y_train_pred, squared=False)\n",
"r2_train = r2_score(y_train, y_train_pred)\n",
"mae_train = mean_absolute_error(y_train, y_train_pred)\n",
"\n",
"print(f\"Train RMSE: {rmse_train}\")\n",
"print(f\"Train R²: {r2_train}\")\n",
"print(f\"Train MAE: {mae_train}\")\n",
"print()\n",
"\n",
"# Визуализация результатов\n",
"plt.figure(figsize=(10, 6))\n",
"plt.scatter(y_test, y_pred, alpha=0.5)\n",
"plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=2)\n",
"plt.xlabel('Фактическая чистая стоимость')\n",
"plt.ylabel('Прогнозируемая чистая стоимость')\n",
"plt.title('Фактическая чистая стоимость по сравнению с прогнозируемой')\n",
"plt.show()"
2024-10-25 18:34:15 +04:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2024-10-25 18:37:54 +04:00
"## Вывод\n",
"Модель случайного леса (RandomForestRegressor) показала удовлетворительные результаты при прогнозировании чистой стоимости миллиардеров. Метрики качества и кросс-валидация позволяют предположить, что модель не сильно переобучена и может быть использована для практических целей.\n",
"\n",
"Точность предсказаний: Модель демонстрирует довольно высокий R² (0.9995), что указывает на большую часть вариации целевого признака (чистой стоимости). Однако, значения RMSE и MAE остаются высоки (0.1079 и 0.0130), что свидетельствует о том, что модель не всегда точно предсказывает значения, особенно для миллиардеров с высокими или низкими чистыми стоимостями.\n",
"\n",
"Переобучение: Разница между RMSE на обучающей и тестовой выборках незначительна, что указывает на то, что модель не склонна к переобучению. Однако в будущем стоит следить за этой метрикой при добавлении новых признаков или усложнении модели, чтобы избежать излишней подгонки под тренировочные данные. Также стоит быть осторожным и продолжать мониторинг этого показателя.\n",
"\n",
"Кросс-валидация: При кросс-валидации наблюдается небольшое увеличение ошибки RMSE по сравнению с тестовой выборкой (рост на 2-3%). Это может указывать на небольшую нестабильность модели при использовании разных подвыборок данных. Для повышения устойчивости модели возможно стоит провести дальнейшую настройку гиперпараметров.\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"Рекомендации: Следует уделить внимание дополнительной обработке категориальных признаков, улучшению метода feature engineering, а также возможной оптимизации модели (например, через подбор гиперпараметров) для повышения точности предсказаний на экстремальных значениях.\n",
2024-10-25 18:34:15 +04:00
"\n",
2024-10-25 18:37:54 +04:00
"Заключение: Модель случайного леса показала хорошие результаты, но есть потенциал для улучшения, особенно в части точности предсказаний для экстремальных значений чистой стоимости."
2024-10-25 18:34:15 +04:00
]
}
],
"metadata": {
"kernelspec": {
"display_name": "aimenv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}