diff --git a/lab_4/lab_4.ipynb b/lab_4/lab_4.ipynb new file mode 100644 index 0000000..0d521a6 --- /dev/null +++ b/lab_4/lab_4.ipynb @@ -0,0 +1,3713 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Вариант 19: Данные о миллионерах" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "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", + "df = pd.read_csv(\"..//static//csv//Forbes Billionaires.csv\")\n", + "print(df.columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Бизнес-цели\n", + "\n", + "### Задача классификации\n", + "Классифицировать людей по уровню состояния.\n", + "\n", + "Цель:\n", + "\n", + "Разработать модель машинного обучения, которая будет классифицировать миллиардеров по состоянию, выше или ниже среднего.\n", + "\n", + "В обучении модели машинного обучения для классификации миллиардеров по уровню богатства, помимо чистого состояния, используются и другие столбцы данных:\n", + "- Возраст: Люди с высоким чистым состоянием, как правило, старше. Модель может использовать возраст как признак, чтобы прогнозировать уровень богатства.\n", + "- Страна: Богатство распределяется неравномерно по миру. Страна проживания может быть важным признаком для предсказания уровня богатства.\n", + "- Отрасль: Определенные отрасли (например, финансы, технологии) часто связаны с высоким чистым состоянием. \n", + "\n", + "### Задача регрессии:\n", + "Прогнозирование чистого состояния (Networth):\n", + "\n", + "Цель: Предсказать абсолютное значение чистого состояния миллиардера, используя информацию из имеющихся данных.\n", + "\n", + "Применение: Это может быть полезно для оценки потенциального состояния миллиардеров в будущем или для сравнения миллиардеров в разных странах и отраслях.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Определение достижимого уровня качества модели для первой задачи " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Создание целевой переменной и предварительная обработка данных" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Среднее значение поля 'Networth': 4.8607499999999995\n", + " Rank Name Networth Age Country \\\n", + "0 1 Elon Musk 219.0 50 United States \n", + "1 2 Jeff Bezos 171.0 58 United States \n", + "2 3 Bernard Arnault & family 158.0 73 France \n", + "3 4 Bill Gates 129.0 66 United States \n", + "4 5 Warren Buffett 118.0 91 United States \n", + "\n", + " Source Industry above_average_networth \n", + "0 Tesla, SpaceX Automotive 1 \n", + "1 Amazon Technology 1 \n", + "2 LVMH Fashion & Retail 1 \n", + "3 Microsoft Technology 1 \n", + "4 Berkshire Hathaway Finance & Investments 1 \n" + ] + } + ], + "source": [ + "from sklearn import set_config\n", + "\n", + "# Установим параметры для вывода\n", + "set_config(transform_output=\"pandas\")\n", + "\n", + "# Устанавливаем случайное состояние\n", + "random_state = 42\n", + "# Можно использовать данные о above_average_networth для анализа зависимости между типом источника богатства и чистым состоянием.\n", + "# Рассчитываем среднее значение чистого состояния\n", + "average_networth = df['Networth'].mean()\n", + "print(f\"Среднее значение поля 'Networth': {average_networth}\")\n", + "\n", + "# Создаем новую переменную, указывающую, превышает ли чистое состояние среднее\n", + "df['above_average_networth'] = (df['Networth'] > average_networth).astype(int)\n", + "\n", + "# Выводим первые строки измененной таблицы для проверки\n", + "print(df.head())\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Разделение набора данных на обучающую и тестовые выборки (80/20) для задачи классификации\n", + "\n", + "Целевой признак -- above_average_networth " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X_train shape: (2080, 8)\n", + "y_train shape: (2080, 1)\n", + "X_test shape: (520, 8)\n", + "y_test shape: (520, 1)\n", + "X_train:\n", + " Rank Name Networth Age Country Source \\\n", + "2125 2076 Yogesh Kothari 1.4 73 India specialty chemicals \n", + "1165 1163 Yvonne Bauer 2.7 45 Germany magazines, media \n", + "397 398 Juergen Blickle 6.4 75 Germany auto parts \n", + "1432 1397 Alexander Svetakov 2.2 54 Russia real estate \n", + "1024 1012 Li Min 3.0 56 China semiconductor \n", + "\n", + " Industry above_average_networth \n", + "2125 Manufacturing 0 \n", + "1165 Media & Entertainment 0 \n", + "397 Manufacturing 1 \n", + "1432 Finance & Investments 0 \n", + "1024 Technology 0 \n", + "y_train:\n", + " above_average_networth\n", + "2125 0\n", + "1165 0\n", + "397 1\n", + "1432 0\n", + "1024 0\n", + "X_test:\n", + " Rank Name Networth Age Country \\\n", + "2437 2324 Horst Wortmann 1.2 80 Germany \n", + "2118 2076 Ramesh Juneja 1.4 66 India \n", + "1327 1292 Teresita Sy-Coson 2.4 71 Philippines \n", + "2063 1929 Myron Wentz 1.5 82 St. Kitts and Nevis \n", + "1283 1238 Suh Kyung-bae 2.5 59 South Korea \n", + "\n", + " Source Industry above_average_networth \n", + "2437 footwear Fashion & Retail 0 \n", + "2118 pharmaceuticals Healthcare 0 \n", + "1327 diversified diversified 0 \n", + "2063 health products Fashion & Retail 0 \n", + "1283 cosmetics Fashion & Retail 0 \n", + "y_test:\n", + " above_average_networth\n", + "2437 0\n", + "2118 0\n", + "1327 0\n", + "2063 0\n", + "1283 0\n" + ] + } + ], + "source": [ + "from typing import Tuple\n", + "from pandas import DataFrame\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "def split_stratified_into_train_val_test(\n", + " df_input,\n", + " stratify_colname=\"y\",\n", + " frac_train=0.6,\n", + " frac_val=0.15,\n", + " frac_test=0.25,\n", + " random_state=None,\n", + ") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame, DataFrame, DataFrame]:\n", + "\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", + " if stratify_colname not in df_input.columns:\n", + " raise ValueError(\"%s is not a column in the dataframe\" % (stratify_colname))\n", + " X = df_input # Contains all columns.\n", + " y = df_input[\n", + " [stratify_colname]\n", + " ] # Dataframe of just the column on which to stratify.\n", + " # 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", + " if frac_val <= 0:\n", + " assert len(df_input) == len(df_train) + len(df_temp)\n", + " return df_train, pd.DataFrame(), df_temp, y_train, pd.DataFrame(), y_temp\n", + " # Split the temp dataframe into val and test dataframes.\n", + " relative_frac_test = frac_test / (frac_val + frac_test)\n", + " df_val, df_test, y_val, y_test = train_test_split(\n", + " df_temp,\n", + " y_temp,\n", + " stratify=y_temp,\n", + " test_size=relative_frac_test,\n", + " random_state=random_state,\n", + " )\n", + " assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n", + " return df_train, df_val, df_test, y_train, y_val, y_test\n", + "\n", + "# Разделение набора данных на обучающую, валидационную и тестовую выборки (80/0/20)\n", + "random_state = 42 # Задайте любое целое число для воспроизводимости\n", + "X_train, X_val, X_test, y_train, y_val, y_test = split_stratified_into_train_val_test(\n", + " df, stratify_colname=\"above_average_networth\", frac_train=0.80, frac_val=0, frac_test=0.20, random_state=random_state\n", + ")\n", + "\n", + "# Вывод размеров выборок\n", + "print(\"X_train shape:\", X_train.shape)\n", + "print(\"y_train shape:\", y_train.shape)\n", + "print(\"X_test shape:\", X_test.shape)\n", + "print(\"y_test shape:\", y_test.shape)\n", + "\n", + "# Отображение содержимого выборок (необязательно, но полезно для проверки)\n", + "print(\"X_train:\\n\", X_train.head())\n", + "print(\"y_train:\\n\", y_train.head())\n", + "print(\"X_test:\\n\", X_test.head())\n", + "print(\"y_test:\\n\", y_test.head())\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Формирование конвейера для классификации данных\n", + "\n", + "preprocessing_num -- конвейер для обработки числовых данных: заполнение пропущенных значений и стандартизация\n", + "\n", + "preprocessing_cat -- конвейер для обработки категориальных данных: заполнение пропущенных данных и унитарное кодирование\n", + "\n", + "features_preprocessing -- трансформер для предобработки признаков\n", + "\n", + "features_engineering -- трансформер для конструирования признаков\n", + "\n", + "drop_columns -- трансформер для удаления колонок\n", + "\n", + "pipeline_end -- основной конвейер предобработки данных и конструирования признаков" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "# Определение столбцов для обработки\n", + "columns_to_drop = [\"Name\", \"Rank \"] # Столбцы, которые можно удалить\n", + "num_columns = [\"Networth\", \"Age\"] # Числовые столбцы\n", + "cat_columns = [\"Country\", \"Source\", \"Industry\"] # Категориальные столбцы\n", + "\n", + "# Препроцессинг числовых столбцов\n", + "num_imputer = SimpleImputer(strategy=\"median\")\n", + "num_scaler = StandardScaler()\n", + "preprocessing_num = Pipeline(\n", + " [\n", + " (\"imputer\", num_imputer),\n", + " (\"scaler\", num_scaler),\n", + " ]\n", + ")\n", + "\n", + "# Препроцессинг категориальных столбцов\n", + "cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\")\n", + "cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n", + "preprocessing_cat = Pipeline(\n", + " [\n", + " (\"imputer\", cat_imputer),\n", + " (\"encoder\", cat_encoder),\n", + " ]\n", + ")\n", + "\n", + "# Объединение препроцессинга\n", + "features_preprocessing = ColumnTransformer(\n", + " verbose_feature_names_out=False,\n", + " transformers=[\n", + " (\"preprocessing_num\", preprocessing_num, num_columns),\n", + " (\"preprocessing_cat\", preprocessing_cat, cat_columns),\n", + " ],\n", + " remainder=\"passthrough\"\n", + ")\n", + "\n", + "# Удаление ненужных столбцов\n", + "drop_columns = ColumnTransformer(\n", + " verbose_feature_names_out=False,\n", + " transformers=[\n", + " (\"drop_columns\", \"drop\", columns_to_drop),\n", + " ],\n", + " remainder=\"passthrough\",\n", + ")\n", + "\n", + "# Создание финального пайплайна\n", + "pipeline_end = Pipeline(\n", + " [\n", + " (\"features_preprocessing\", features_preprocessing),\n", + " (\"drop_columns\", drop_columns),\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__Демонстрация работы конвейера__" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Networth Age Country_Argentina Country_Australia \\\n", + "2125 -0.340947 0.680013 0.0 0.0 \n", + "1165 -0.211625 -1.475070 0.0 0.0 \n", + "397 0.156447 0.833948 0.0 0.0 \n", + "1432 -0.261364 -0.782365 0.0 0.0 \n", + "1024 -0.181781 -0.628430 0.0 0.0 \n", + "\n", + " Country_Austria Country_Barbados Country_Belgium Country_Belize \\\n", + "2125 0.0 0.0 0.0 0.0 \n", + "1165 0.0 0.0 0.0 0.0 \n", + "397 0.0 0.0 0.0 0.0 \n", + "1432 0.0 0.0 0.0 0.0 \n", + "1024 0.0 0.0 0.0 0.0 \n", + "\n", + " Country_Brazil Country_Bulgaria ... Industry_Manufacturing \\\n", + "2125 0.0 0.0 ... 1.0 \n", + "1165 0.0 0.0 ... 0.0 \n", + "397 0.0 0.0 ... 1.0 \n", + "1432 0.0 0.0 ... 0.0 \n", + "1024 0.0 0.0 ... 0.0 \n", + "\n", + " Industry_Media & Entertainment Industry_Metals & Mining \\\n", + "2125 0.0 0.0 \n", + "1165 1.0 0.0 \n", + "397 0.0 0.0 \n", + "1432 0.0 0.0 \n", + "1024 0.0 0.0 \n", + "\n", + " Industry_Real Estate Industry_Service Industry_Sports \\\n", + "2125 0.0 0.0 0.0 \n", + "1165 0.0 0.0 0.0 \n", + "397 0.0 0.0 0.0 \n", + "1432 0.0 0.0 0.0 \n", + "1024 0.0 0.0 0.0 \n", + "\n", + " Industry_Technology Industry_Telecom Industry_diversified \\\n", + "2125 0.0 0.0 0.0 \n", + "1165 0.0 0.0 0.0 \n", + "397 0.0 0.0 0.0 \n", + "1432 0.0 0.0 0.0 \n", + "1024 1.0 0.0 0.0 \n", + "\n", + " above_average_networth \n", + "2125 0 \n", + "1165 0 \n", + "397 1 \n", + "1432 0 \n", + "1024 0 \n", + "\n", + "[5 rows x 859 columns]\n" + ] + } + ], + "source": [ + "preprocessing_result = pipeline_end.fit_transform(X_train)\n", + "preprocessed_df = pd.DataFrame(\n", + " preprocessing_result,\n", + " columns=pipeline_end.get_feature_names_out(),\n", + ")\n", + "\n", + "# Вывод первых строк обработанных данных\n", + "print(preprocessed_df.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Формирование набора моделей для классификации\n", + "\n", + "logistic -- логистическая регрессия\n", + "\n", + "ridge -- гребневая регрессия\n", + "\n", + "decision_tree -- дерево решений\n", + "\n", + "knn -- k-ближайших соседей\n", + "\n", + "naive_bayes -- наивный Байесовский классификатор\n", + "\n", + "gradient_boosting -- метод градиентного бустинга (набор деревьев решений)\n", + "\n", + "random_forest -- метод случайного леса (набор деревьев решений)\n", + "\n", + "mlp -- многослойный персептрон (нейронная сеть)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn import linear_model, tree, neighbors, naive_bayes, ensemble, neural_network\n", + "class_models = {\n", + " \"logistic\": {\"model\": linear_model.LogisticRegression()},\n", + " \"ridge\": {\"model\": linear_model.LogisticRegression(penalty=\"l2\", class_weight=\"balanced\")},\n", + " \"decision_tree\": {\n", + " \"model\": tree.DecisionTreeClassifier(max_depth=7, random_state=42)\n", + " },\n", + " \"knn\": {\"model\": neighbors.KNeighborsClassifier(n_neighbors=7)},\n", + " \"naive_bayes\": {\"model\": naive_bayes.GaussianNB()},\n", + " \"gradient_boosting\": {\n", + " \"model\": ensemble.GradientBoostingClassifier(n_estimators=210)\n", + " },\n", + " \"random_forest\": {\n", + " \"model\": ensemble.RandomForestClassifier(\n", + " max_depth=11, class_weight=\"balanced\", random_state=42\n", + " )\n", + " },\n", + " \"mlp\": {\n", + " \"model\": neural_network.MLPClassifier(\n", + " hidden_layer_sizes=(7,),\n", + " max_iter=500,\n", + " early_stopping=True,\n", + " random_state=42,\n", + " )\n", + " },\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Обучение моделей и оценка их качества" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: logistic\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: ridge\n", + "Model: decision_tree\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: knn\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: naive_bayes\n", + "Model: gradient_boosting\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: random_forest\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: mlp\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from sklearn import metrics\n", + "\n", + "for model_name in class_models.keys():\n", + " print(f\"Model: {model_name}\")\n", + " model = class_models[model_name][\"model\"]\n", + "\n", + " model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\n", + " model_pipeline = model_pipeline.fit(X_train, y_train.values.ravel())\n", + "\n", + " y_train_predict = model_pipeline.predict(X_train)\n", + " y_test_probs = model_pipeline.predict_proba(X_test)[:, 1]\n", + " y_test_predict = np.where(y_test_probs > 0.5, 1, 0)\n", + "\n", + " class_models[model_name][\"pipeline\"] = model_pipeline\n", + " class_models[model_name][\"probs\"] = y_test_probs\n", + " class_models[model_name][\"preds\"] = y_test_predict\n", + "\n", + " # Оценка метрик\n", + " class_models[model_name][\"Precision_train\"] = metrics.precision_score(\n", + " y_train, y_train_predict\n", + " )\n", + " class_models[model_name][\"Precision_test\"] = metrics.precision_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Recall_train\"] = metrics.recall_score(\n", + " y_train, y_train_predict\n", + " )\n", + " class_models[model_name][\"Recall_test\"] = metrics.recall_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Accuracy_train\"] = metrics.accuracy_score(\n", + " y_train, y_train_predict\n", + " )\n", + " class_models[model_name][\"Accuracy_test\"] = metrics.accuracy_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"ROC_AUC_test\"] = metrics.roc_auc_score(\n", + " y_test, y_test_probs\n", + " )\n", + " class_models[model_name][\"F1_train\"] = metrics.f1_score(y_train, y_train_predict)\n", + " class_models[model_name][\"F1_test\"] = metrics.f1_score(y_test, y_test_predict)\n", + " class_models[model_name][\"MCC_test\"] = metrics.matthews_corrcoef(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Confusion_matrix\"] = metrics.confusion_matrix(\n", + " y_test, y_test_predict\n", + " )\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Сводная таблица оценок качества для использованных моделей классификации" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4UAAAQ9CAYAAADu7ug2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeVwU5R8H8M9yLcgNcoiioihHHgRakQfeaJ5peWGiqZV5l+ZRHqhEaeZ95oEUpqVl3qYmpGbemimSeEEKaqIoKtfu8/uDmJ8bsoAu7O7wef9e8/q58zw78501+PjMPjOjEEIIEBERERERUYVkou8CiIiIiIiISH84KCQiIiIiIqrAOCgkIiIiIiKqwDgoJCIiIiIiqsA4KCQiIiIiIqrAOCgkIiIiIiKqwDgoJCIiIiIiqsA4KCQiIiIiIqrAOCgkIiIiIiKqwDgoJNKx6OhoKBQKXL16tUy2f/XqVSgUCkRHR+tke3FxcVAoFIiLi9PJ9oiIiORi2rRpUCgUJeqrUCgwbdq0si2IqIxwUEhUQSxZskRnA0kiIiIikg8zfRdARKVTo0YNPH78GObm5qV635IlS1C5cmUMGDBAY33z5s3x+PFjWFhY6LBKIiIi4/fJJ59gwoQJ+i6DqMxxUEhkZBQKBSwtLXW2PRMTE51uj4iISA4ePnwIa2trmJnxn8skf5w+SlQOlixZghdeeAFKpRIeHh4YNmwY7t27V6jf4sWLUatWLVhZWeGll17CgQMH0KJFC7Ro0ULq87RrCtPS0jBw4EBUq1YNSqUSVapUQdeuXaXrGmvWrIlz584hPj4eCoUCCoVC2mZR1xQeOXIEr732GhwdHWFtbY0GDRpg/vz5uv1giIiIDEDBtYPnz59H37594ejoiKZNmz71msLs7GyMGTMGLi4usLW1RZcuXfD3338/dbtxcXFo1KgRLC0tUbt2bSxfvrzI6xS/+eYbBAUFwcrKCk5OTujduzdSUlLK5HiJ/ounPojK2LRp0xAREYE2bdpg6NChSExMxNKlS3Hs2DEcOnRImga6dOlSDB8+HM2aNcOYMWNw9epVdOvWDY6OjqhWrZrWffTo0QPnzp3DiBEjULNmTdy6dQt79uxBcnIyatasiXnz5mHEiBGwsbHBxx9/DABwc3Mrcnt79uxBp06dUKVKFYwaNQru7u5ISEjAtm3bMGrUKN19OERERAbkzTffRJ06dfDpp59CCIFbt24V6jN48GB888036Nu3L1599VX88ssv6NixY6F+p06dQvv27VGlShVERERApVJh+vTpcHFxKdQ3MjISkydPRs+ePTF48GDcvn0bCxcuRPPmzXHq1Ck4ODiUxeES/Z8gIp1as2aNACCuXLkibt26JSwsLES7du2ESqWS+ixatEgAEKtXrxZCCJGdnS2cnZ1F48aNRW5urtQvOjpaABAhISHSuitXrggAYs2aNUIIIe7evSsAiNmzZ2ut64UXXtDYToH9+/cLAGL//v1CCCHy8vKEl5eXqFGjhrh7965GX7VaXfIPgoiIyEhMnTpVABB9+vR56voCp0+fFgDE+++/r9Gvb9++AoCYOnWqtK5z586iUqVK4vr169K6ixcvCjMzM41tXr16VZiamorIyEiNbZ49e1aYmZkVWk9UFjh9lKgM7d27Fzk5ORg9ejRMTP7/4zZkyBDY2dlh+/btAIDjx4/jzp07GDJkiMa1C2FhYXB0dNS6DysrK1hYWCAuLg5379597ppPnTqFK1euYPTo0YXOTJb0ttxERETG6L333tPavmPHDgDAyJEjNdaPHj1a47VKpcLevXvRrVs3eHh4SOu9vb3RoUMHjb4//PAD1Go1evbsiX/++Uda3N3dUadOHezfv/85joioZDh9lKgMXbt2DQDg4+Ojsd7CwgK1atWS2gv+39vbW6OfmZkZatasqXUfSqUSn3/+OT788EO4ubnhlVdeQadOndC/f3+4u7uXuuZLly4BAOrVq1fq9xIRERkzLy8vre3Xrl2DiYkJateurbH+vzl/69YtPH78uFCuA4Wz/uLFixBCoE6dOk/dZ2nvNk70LDgoJJKB0aNHo3Pnzti8eTN2796NyZMnIyoqCr/88gtefPFFfZdHRERkFKysrMp9n2q1GgqFAjt37oSpqWmhdhsbm3KviSoeTh8lKkM1atQAACQmJmqsz8nJwZUrV6T2gv9PSkrS6JeXlyfdQbQ4tWvXxocffoiff/4Zf/75J3JycjBnzhypvaRTPwvOfv75558l6k9ERFRR1KhRA2q1WppVU+C/Oe/q6gpLS8tCuQ4UzvratWtDCAEvLy+0adOm0PLKK6/o/kCI/oODQqIy1KZNG1hYWGDBggUQQkjrV61ahYyMDOluZY0aNYKzszO++uor5OXlSf1i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F3kxuxBCPH78WIwZM0ZUqVJFWFhYCG9vb7F69Wqpffr06cLd3V0oFAoRHh4uhMi/AH/evHnCx8dHmJubCxcXFxEaGiri4+Ol923dulV4e3sLpVIpmjVrJlavXl3qi9nHjRsnnJ2dhY2NjejVq5eYO3eusLe3l9qnTp0qGjZsKJYsWSI8PDyEpaWleOONN0R6errGdmNjY0VAQICwsLAQjo6Oonnz5uKHH34QQvBidiIiysdsfjpmM5UHhRBFXGVLREREREREssfpo0RERERERBUYB4VEREREREQVGAeFREREREREFRgHhURERERERBUYB4VEREREREQVGAeFREREREREFRgHhURERERERBUYB4VEREREREQVGAeFREREREREFRgHhURERERERBUYB4VEREREREQVGAeFREREREREFRgHhURERERERBUYB4VU4U2bNg0KhcJgtn316lUoFApER0eXSU1ERERUMgU5/s8//+i7FKIyxUEhET3Vjh07MG3aNH2XQURERERljINCojL0ySef4PHjx6V6T40aNfD48WO89dZbZVRVyezYsQMRERF6rYGIiIiIyp6ZvgsgkjMzMzOYmZXux0yhUMDS0rKMKiobeXl5UKvVsLCw0HcpRERERFRK/KaQKpSDBw+icePGsLS0RO3atbF8+fKn9vvmm28QFBQEKysrODk5oXfv3khJSSnU78iRI3jttdfg6OgIa2trNGjQAPPnz5fan3ZN4Z49e9C0aVM4ODjAxsYGPj4+mDRpktRe1DWFv/zyC5o1awZra2s4ODiga9euSEhI0OhTsL+kpCQMGDAADg4OsLe3x8CBA/Ho0aMSf04DBgzA4sWLAeQPUguWJ+v74osvMG/ePNSuXRtKpRLnz58HAFy4cAFvvPEGnJycYGlpiUaNGmHLli2F9nHv3j2MHj0anp6eUCqV8Pb2xueffw61Wl3iOomIiMrbtWvX4O3tjXr16uHmzZto0aIF6tWrh/Pnz6Nly5aoVKkSqlatilmzZmm8Ly4uDgqFAt999x0iIyNRrVo1WFpaonXr1khKStLT0RDl4zeFVGGcPXsW7dq1g4uLC6ZNm4a8vDxMnToVbm5uGv0iIyMxefJk9OzZE4MHD8bt27excOFCNG/eHKdOnYKDgwOA/MFdp06dUKVKFYwaNQru7u5ISEjAtm3bMGrUqKfWcO7cOXTq1AkNGjTA9OnToVQqkZSUhEOHDmmtfe/evejQoQNq1aqFadOm4fHjx1i4cCGaNGmCkydPombNmhr9e/bsCS8vL0RFReHkyZNYuXIlXF1d8fnnn5fos3r33Xdx48YN7NmzB19//fVT+6xZswZZWVl45513oFQq4eTkhHPnzqFJkyaoWrUqJkyYAGtra3z33Xfo1q0bNm3ahNdffx0A8OjRI4SEhOD69et49913Ub16dfz222+YOHEiUlNTMW/evBLVSUREVJ4uXbqEVq1awcnJCXv27EHlypUBAHfv3kX79u3RvXt39OzZExs3bsT48eNRv359dOjQQWMbn332GUxMTDB27FhkZGRg1qxZCAsLw5EjR/RxSET5BFEF0a1bN2FpaSmuXbsmrTt//rwwNTUVBT8KV69eFaampiIyMlLjvWfPnhVmZmbS+ry8POHl5SVq1Kgh7t69q9FXrVZLf546dap48sds7ty5AoC4fft2kXVeuXJFABBr1qyR1gUEBAhXV1dx584dad2ZM2eEiYmJ6N+/f6H9vf322xrbfP3114Wzs3OR+3yaYcOGiaf9iiioz87OTty6dUujrXXr1qJ+/foiKytLWqdWq8Wrr74q6tSpI62bMWOGsLa2Fn/99ZfG+ydMmCBMTU1FcnJyqWolIiIqCwW5evv2bZGQkCA8PDxE48aNRXp6utQnJCREABAxMTHSuuzsbOHu7i569Oghrdu/f78AIPz8/ER2dra0fv78+QKAOHv2bPkcFNFTcPooVQgqlQq7d+9Gt27dUL16dWm9n58fQkNDpdc//PAD1Go1evbsiX/++Uda3N3dUadOHezfvx8AcOrUKVy5cgWjR4+WvjksoO0RFAV9f/rppxJPk0xNTcXp06cxYMAAODk5SesbNGiAtm3bYseOHYXe895772m8btasGe7cuYP79++XaJ8l0aNHD7i4uEiv09PT8csvv6Bnz5548OCB9NnduXMHoaGhuHjxIq5fvw4A+P7779GsWTM4OjpqfM5t2rSBSqXCr7/+qrM6iYiInteff/6JkJAQ1KxZE3v37oWjo6NGu42NDfr16ye9trCwwEsvvYTLly8X2tbAgQM1rsFv1qwZADy1L1F54aCQKoTbt2/j8ePHqFOnTqE2Hx8f6c8XL16EEAJ16tSBi4uLxpKQkIBbt24ByJ8+AgD16tUrVR29evVCkyZNMHjwYLi5uaF379747rvvtA4Qr127VqjOAn5+fvjnn3/w8OFDjfVPDnwBSOF19+7dUtWrjZeXl8brpKQkCCEwefLkQp/d1KlTAUD6/C5evIhdu3YV6temTRuNfkRERIagc+fOsLW1xe7du2FnZ1eovVq1aoVOCjs6Oj41d8sjo4lKi9cUEj1BrVZDoVBg586dMDU1LdRuY2PzXNu3srLCr7/+iv3792P79u3YtWsXNmzYgFatWuHnn39+6j6fRVHbEULoZPtA/rE8qWBgO3bsWI1vX5/k7e0t9W3bti0++uijp/arW7euzuokIiJ6Xj169MDatWsRGxuLd999t1B7aXK3PDKaqLQ4KKQKwcXFBVZWVrh48WKhtsTEROnPtWvXhhACXl5eWgcmtWvXBpA/naTg262SMjExQevWrdG6dWt8+eWX+PTTT/Hxxx9j//79T91WjRo1CtVZ4MKFC6hcuTKsra1LVUNJaJsG+zS1atUCAJibmxf7mdSuXRuZmZml/uyIiIj0Yfbs2TAzM8P7778PW1tb9O3bV98lEekUp49ShWBqaorQ0FBs3rwZycnJ0vqEhATs3r1bet29e3eYmpoiIiKi0Bk7IQTu3LkDAAgMDISXlxfmzZuHe/fuFepXlPT09ELrAgICAADZ2dlPfU+VKlUQEBCAtWvXauzrzz//xM8//4zXXnutyP09j4KB5n+Pryiurq5o0aIFli9fjtTU1ELtt2/flv7cs2dPHD58WOOzL3Dv3j3k5eU9W9FERERlQKFQYMWKFXjjjTcQHh7+1EctERkzflNIFUZERAR27dqFZs2a4f3330deXh4WLlyIF154AX/88QeA/G+wZs6ciYkTJ+Lq1avo1q0bbG1tceXKFfz444945513MHbsWJiYmGDp0qXo3LkzAgICMHDgQFSpUgUXLlzAuXPnnjrYAYDp06fj119/RceOHVGjRg3cunULS5YsQbVq1dC0adMia589ezY6dOiA4OBgDBo0SHokhb29PaZNm1YWHxeCgoIAACNHjkRoaChMTU3Ru3dvre9ZvHgxmjZtivr162PIkCGoVasWbt68icOHD+Pvv//GmTNnAADjxo3Dli1b0KlTJwwYMABBQUF4+PAhzp49i40bN+Lq1avSbb6JiIgMgYmJCb755ht069YNPXv2xI4dO9CqVSt9l0WkExwU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tE12djasra1LXA8REckbs/nFmM1UGtgppHKrRYsWWLBgAUxMTODm5gYjI/UfB3Nzc7XXqamp8Pf3R2RkZL59OTo6vlQNZmZmJX5PamoqAGDLli1qv/CB3LkYmnLkyBEEBwdj8uTJCAoKgrW1NVatWoWZM2eWuNaffvopXxAaGhpqrFYiIpIHZnPRmM1UWtgppHLL3Nwcnp6exd6+fv36WL16NZycnPJdkcvj6uqKo0ePolmzZgByr7qdPHkS9evXL3D7OnXqQKVSYf/+/WjdunW+9ryroTk5OdI6X19fKJVK3L59u9CrmD4+PtLE/Dx//fXXi0/yGYcPH0aVKlUwbtw4ad2tW7fybXf79m3cu3cPbm5u0nEMDAzg5eUFZ2dnuLm54fr16wgODi7R8YmIqPxhNheN2UylhTeaISqm4OBgODg4oHPnzjh48CBu3LiBffv24dNPP8Xff/8NABg2bBj+97//YcOGDbh8+TI++eSTIp9jVLVqVYSEhOD999/Hhg0bpH2uWbMGAFClShUoFAps3rwZDx48QGpqKiwtLTFy5EgMHz4cy5cvx7Vr13Dq1Cn88MMP0gTxjz/+GFevXsWoUaMQExODlStXYtmyZSU63xo1auD27dtYtWoVrl27hjlz5hQ4Md/U1BQhISE4e/YsDh48iE8//RQ9evSAi4sLAGDy5MkIDw/HnDlzcOXKFZw/fx5Lly7Fd999V6J6iIiInsdsZjaThmh7UiORNjw7mb0k7XFxcaJfv37CwcFBKJVKUa1aNTFw4ECRnJwshMidvD5s2DBhZWUlbGxsxIgRI0S/fv0KncwuhBBpaWli+PDhwtXVVZiYmAhPT0+xZMkSqT0sLEy4uLgIhUIhQkJChBC5E/Bnz54tvLy8hLGxsXB0dBRBQUFi//790vs2bdokPD09hVKpFE2bNhVLliwp8WT2UaNGCXt7e2FhYSF69uwpZs2aJaytraX2iRMnCj8/PzF//nzh5uYmTE1NxTvvvCMSExPV9hsZGSnq1asnTExMhK2trWjWrJlYv369EIKT2YmIKBezuWDMZioLCiEKmWVLREREREREssfho0REREREROUYO4VERERERETlGDuFRERERERE5Rg7hUREREREROUYO4VERERERETlGDuFRERERERE5Rg7hUREREREROUYO4VERERERETlGDuFRERERERE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X75crZ4LFy5g586deOuttwDkzgF9flqIk5MT3Nzc1PZvbm5e5JSYlxEUFISsrCy1vw1UKhXmzZun0eOQZvCbQqIitG3bFiYmJujYsSM++ugjpKam4qeffoKTkxPi4uKKtY+ePXuib9++mD9/PoKCgqSbreQZNWoUNm7ciLfffhuhoaHw9/fHkydPcP78eaxduxY3b95UG276Im5ubvj6669x8+ZN1KxZE6tXr8aZM2fw448/wtjYGADw9ttvY/369ejatSs6dOiAGzduYOHChfD19UVqamq+fXbo0AH29vb47bff0L59ezg5Oam1v/fee1izZg0+/vhj7N27F40bN0ZOTg4uX76MNWvWYMeOHWjQoAHCwsJw4MABdOjQAVWqVEFCQgLmz5+PSpUqoUmTJsU+RyIi0p5JkyZh586daNy4MQYNGoScnBzMnTsXtWvXxpkzZ174/g4dOuC7775Du3bt0KdPHyQkJGDevHnw9PTEuXPnpO3q1auH3r17Y/78+UhOTkajRo2wZ8+eYn3TZGVlhQULFuC9995D/fr10atXLzg6OuL27dvYsmULGjdurPa84OIwMzODr68vVq9ejZo1a8LOzg61a9dG7dq1i70POzs7NGnSBP3798f9+/cxe/ZseHp6SjdjMTY2xtdff43+/fsjMDAQvXv3lh5JUbVqVQwfPlza1zfffIP27dsjICAAAwYMkB5JYW1tLT0/8fHjx6hUqRLeeecd+Pn5wcLCArt378bx48cxc+ZMaV/+/v5YvXo1RowYgddffx0WFhbo2LFjiT6f53Xp0gVvvPEGPv/8c8TGxsLb2xsbN26ULhCXxreT9Aq0e/NTIu3JeyTF849HeP621hs3bhR169YVpqamomrVquLrr78WS5YsUdtGiPyPpMiTkpIizMzMBADxyy+/FFjL48ePxZgxY4Snp6cwMTERDg4OolGjRuLbb7+VHiNRHIGBgaJWrVrixIkTIiAgQJiamooqVaqIuXPnqm2nUqnE9OnTRZUqVYRSqRSvvfaa2Lx5swgJCSnwltRCCPHJJ58IAGLlypUFtmdmZoqvv/5a1KpVSyiVSmFrayv8/f3F5MmTRXJyshBCiD179ojOnTsLNzc3YWJiItzc3ETv3r3zPY6DiIh02549e8Rrr70mTExMRPXq1cXixYvF559/LkxNTaVtABT6KISIiAhR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iirQ561evTquXLmClStXIiEhAbNnz37qxHxbW1uEhYXh5MmT2LdvHwYNGoSuXbvC09MTADBhwgRMnToVs2fPxrlz53D69GksXboUX3zxRYHqISIi+jdmM7OZComxJzUSGcOTk9kLsj0pKUl69+4tbm5uolarpWrVqtKvXz9JTk4WkczJ64MHDxatVitOTk4ydOhQ6d27d46T2UVEHj16JEOGDJFy5cqJjY2N+Pj4yJIlS5TtERER4unpKSqVSsLCwkQkcwL+zJkzxdfXV6ytrcXd3V1CQkJkz549yvvWr18vPj4+olarpWnTprJkyZICT2YfPny4uLq6ir29vXTr1k1mzJghjo6OyvZx48ZJvXr1ZO7cueLl5SW2trby5ptvyu3btw32Gx0dLf7+/mJjYyPOzs7SrFkz+eGHH0SEk9mJiCgTs/npmM1UHFQiOcyyJSIiIiIiIrPH4aNERERERESlGDuFREREREREpRg7hURERERERKUYO4VERERERESlGDuFREREREREpRg7hURERERERKUYO4VERERERESlGDuFREREREREpRg7hURERERERKUYO4VERERERESlGDuFREREREREpRg7hURERERERKUYO4VERERERESlGDuFREREREREpRg7hURFRKVSYfz48cYuI0dff/01atasCWtrazg5ORm7HCIiIrNy6dIlqFQqREVFGbsUojyxU0hUCv3+++8IDw9HtWrVsGjRIixcuNDYJWVz7do1jB8/HidOnDB2KURERERmzcrYBRBR8du9ezf0ej1mzZoFHx8fY5fzVNeuXcOECRNQuXJl+Pv7G7scIiIiIrPFbwqp1Hjw4IGxSzAZN2/eBIBCHTb68OHDQtsXERERERUfdgrJLI0fPx4qlQpnz55Fz5494ezsjCZNmuDUqVMIDw9H1apVYWtrC09PT7zzzju4devWU98fHx+P8PBwODk5wdHREW+//Xa2zk9qaiqGDBkCd3d3ODg4oGPHjrh69epT6zp+/DjatWsHrVYLe3t7tGrVCgcPHjRoExUVBZVKhf3792PQoEFwd3eHk5MT/vvf/yItLQ13795F79694ezsDGdnZ4wYMQIiku9zU7lyZYwbNw4A4O7unm3u49y5c1G7dm2o1Wp4eXlhwIABuHv3rsE+mjdvjhdeeAFHjx5Fs2bNUKZMGYwePVo5H+PG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XLhwAaGhoQU6PhERlT7M5twxm6mo8EYzRPkUGhoKNzc3dOrUCfv27cPFixexe/duDBo0CFevXgUADB48GJ9++inWrVuH33//He+//36uzzGqXLkywsLC8M4772DdunXKPr/77jsAQKVKlaBSqbBhwwb8+eefSElJgYODA4YNG4YhQ4Zg2bJlSEhIwLFjx/Dll18qE8Tfe+89nD9/HsOHD0dcXBxWrFiBqKioAn3e6tWr48qVK1i5ciUSEhIwe/bsp07Mt7W1RVhYGE6ePIl9+/Zh0KBB6Nq1Kzw9PQEAEyZMwNSpUzF79mycO3cOp0+fxtKlS/HFF18UqB4iIqJ/YzYzm6mQGHtSI5ExPDmZvSDbk5KSpHfv3uLm5iZqtVqqVq0q/fr1k+TkZBHJnLw+ePBg0Wq14uTkJEOHDpXevXvnOJldROTRo0cyZMgQKVeunNjY2IiPj48sWbJE2R4RESGenp6iUqkkLCxMRDIn4M+cOVN8fX3F2tpa3N3dJSQkRPbs2aO8b/369eLj4yNqtVqaNm0qS5YsKfBk9uHDh4urq6vY29tLt27dZMaMGeLo6KhsHzdunNSrV0/mzp0rXl5eYmtrK2+++abcvn3bYL/R0dHi7+8vNjY24uzsLM2aNZMffvhBRDiZnYiIMjGbn47ZTMVBJZLDLFsiIiIiIiIyexw+SkREREREVIqxU0hERERERFSKsVNIRERERERUirFTSEREREREVIqxU0hERERERFSKsVNIRERERERUirFTSEREREREVIqxU0hERERERFSKsVNIRERERERUirFTSEREREREVIqxU0hERERERFSK/T/K/uEWxsmrUAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.metrics import ConfusionMatrixDisplay\n", + "import matplotlib.pyplot as plt\n", + "\n", + "_, ax = plt.subplots(int(len(class_models) / 2), 2, figsize=(12, 10), sharex=False, sharey=False)\n", + "\n", + "for index, key in enumerate(class_models.keys()):\n", + " c_matrix = class_models[key][\"Confusion_matrix\"]\n", + " disp = ConfusionMatrixDisplay(\n", + " confusion_matrix=c_matrix, display_labels=[\"Below Average\", \"Above Average\"] # Измените метки на нужные\n", + " ).plot(ax=ax.flat[index])\n", + " disp.ax_.set_title(key)\n", + "\n", + "plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.1)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "403 - это количество правильно предсказанных объектов с чистым состоянием выше среднего.\n", + "117 - это количество объектов с чистым состоянием выше среднего, которые модель ошибочно отнесла к категории ниже среднего.\n", + "1. Высокая точность: Модель демонстрирует высокую точность в определении объектов с чистым состоянием выше среднего. Это означает, что она хорошо справляется с задачей выделения богатых людей.\n", + "2. Проблема с ложными отрицательными: Высокое количество ложных отрицательных результатов (117) говорит о том, что ваша модель пропускает значительное количество богатых людей. Она не всегда распознает их как \"выше среднего\".\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Точность, полнота, верность (аккуратность), F-мера" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Precision_trainPrecision_testRecall_trainRecall_testAccuracy_trainAccuracy_testF1_trainF1_test
logistic1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
ridge1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
decision_tree1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
gradient_boosting1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
random_forest1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
mlp1.0000001.0000000.9957260.9829060.9990380.9961540.9978590.991379
naive_bayes1.0000000.9206351.0000000.9914531.0000000.9788461.0000000.954733
knn1.0000001.0000000.8482910.8119660.9658650.9576920.9179190.896226
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n", + " [\n", + " \"Precision_train\",\n", + " \"Precision_test\",\n", + " \"Recall_train\",\n", + " \"Recall_test\",\n", + " \"Accuracy_train\",\n", + " \"Accuracy_test\",\n", + " \"F1_train\",\n", + " \"F1_test\",\n", + " ]\n", + "]\n", + "class_metrics.sort_values(\n", + " by=\"Accuracy_test\", ascending=False\n", + ").style.background_gradient(\n", + " cmap=\"plasma\",\n", + " low=0.3,\n", + " high=1,\n", + " subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n", + ").background_gradient(\n", + " cmap=\"viridis\",\n", + " low=1,\n", + " high=0.3,\n", + " subset=[\n", + " \"Precision_train\",\n", + " \"Precision_test\",\n", + " \"Recall_train\",\n", + " \"Recall_test\",\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Все модели в данной выборке — логистическая регрессия, ридж-регрессия, дерево решений, KNN, наивный байесовский классификатор, градиентный бустинг, случайный лес и многослойный перцептрон (MLP) — демонстрируют идеальные значения по всем метрикам на обучающих и тестовых наборах данных. Это достигается, поскольку все модели показали значения, равные 1.0 для Precision, Recall, Accuracy и F1-меры, что указывает на то, что модель безошибочно классифицирует все примеры.\n", + "\n", + "Модель MLP, хотя и имеет немного более низкие значения Recall (0.994) и F1-на тестовом наборе (0.997) по сравнению с другими, по-прежнему остается высокоэффективной. Тем не менее, она не снижает показатели классификации до такого уровня, что может вызвать обеспокоенность, и остается на уровне, близком к идеальному." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ROC-кривая, каппа Коэна, коэффициент корреляции Мэтьюса" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Accuracy_testF1_testROC_AUC_testCohen_kappa_testMCC_test
logistic1.0000001.0000001.0000001.0000001.000000
ridge1.0000001.0000001.0000001.0000001.000000
decision_tree1.0000001.0000001.0000001.0000001.000000
gradient_boosting1.0000001.0000001.0000001.0000001.000000
mlp0.9961540.9913791.0000000.9889040.988965
random_forest1.0000001.0000001.0000001.0000001.000000
knn0.9576920.8962260.9978580.8700150.877459
naive_bayes0.9788460.9547330.9833200.9409550.942055
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n", + " [\n", + " \"Accuracy_test\",\n", + " \"F1_test\",\n", + " \"ROC_AUC_test\",\n", + " \"Cohen_kappa_test\",\n", + " \"MCC_test\",\n", + " ]\n", + "]\n", + "\n", + "# Сортировка по ROC_AUC_test в порядке убывания\n", + "class_metrics = class_metrics.sort_values(by=\"ROC_AUC_test\", ascending=False)\n", + "\n", + "# Применение стилей\n", + "class_metrics.style.background_gradient(\n", + " cmap=\"plasma\", # Цветовая палитра для ROC_AUC_test, MCC_test, Cohen_kappa_test\n", + " low=0.3, # Минимальное значение для цветового градиента\n", + " high=1, # Максимальное значение для цветового градиента\n", + " subset=[\n", + " \"ROC_AUC_test\",\n", + " \"MCC_test\",\n", + " \"Cohen_kappa_test\",\n", + " ],\n", + ").background_gradient(\n", + " cmap=\"viridis\", # Цветовая палитра для Accuracy_test, F1_test\n", + " low=1, # Минимальное значение для цветового градиента\n", + " high=0.3, # Максимальное значение для цветового градиента\n", + " subset=[\n", + " \"Accuracy_test\",\n", + " \"F1_test\",\n", + " ],\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Почти все модели, включая логистическую регрессию, ридж-регрессию, дерево решений, градиентный бустинг и случайный лес, показали выдающиеся результаты по всем метрикам:\n", + "\n", + "- **Accuracy**: Все модели достигли идеальной точности (1.000), что означает, что они правильно классифицировали все объекты в тестовом наборе.\n", + "- **F1**: Аналогично, все модели показали идеальное значение F1-меры (1.000), что говорит о балансе между точностью (precision) и полнотой (recall).\n", + "- **ROC AUC**: Все модели достигли максимального значения ROC AUC (1.000), что указывает на их способность различать классы с идеальной точностью.\n", + "- **Cohen's Kappa**: Идеальное значение Cohen's Kappa (1.000) подтверждает высокую согласованность классификации с идеальным классификатором.\n", + "- **MCC**: Идеальное значение MCC (1.000) указывает на высокую точность классификации и сильную связь между предсказаниями и истинными значениями.\n", + "\n", + "Модель MLP (Многослойный перцептрон) также показала отличные результаты:\n", + "\n", + "- **Accuracy**: Достигла значения 0.996, что немного ниже идеального, но все еще очень высокий результат.\n", + "- **F1**: Значение F1-меры равно 0.991, что также указывает на высокую эффективность модели.\n", + "- **ROC AUC**: MLP достигает идеального значения ROC AUC (1.000), что свидетельствует о ее способности выделять классы с идеальной точностью.\n", + "- **Cohen's Kappa**: Высокое значение Cohen's Kappa (0.989) говорит о хорошей согласованности классификации с идеальным классификатором.\n", + "- **MCC**: Высокое значение MCC (0.989) также подтверждает высокую точность классификации и сильную связь между предсказаниями и истинными значениями.\n", + "\n", + "Модель KNN показала сравнительно более низкие результаты:\n", + "\n", + "- **Accuracy**: Достигла значения 0.958, что ниже идеального, но все еще является приемлемым результатом.\n", + "- **F1**: Значение F1-меры равно 0.896, что указывает на более низкую эффективность модели по сравнению с другими.\n", + "- **ROC AUC**: KNN достигает значения ROC AUC 0.998, что свидетельствует о ее способности выделять классы с хорошей точностью.\n", + "- **Cohen's Kappa**: Значение Cohen's Kappa (0.870) говорит о более низкой согласованности классификации с идеальным классификатором.\n", + "- **MCC**: Значение MCC (0.877) также подтверждает более низкую точность классификации и связи между предсказаниями и истинными значениями.\n", + "\n", + "Модель наивного байесовского классификатора (naive_bayes) показала следующие результаты:\n", + "- **Accuracy**: Модель правильно классифицировала 97.88% объектов в тестовом наборе. Это довольно хороший результат, но не идеальный.\n", + "- **F1-мера**: Значение F1-меры 0.955 указывает на то, что модель достигает баланса между точностью (precision) и полнотой (recall). Это означает, что модель хорошо справляется как с правильным определением объектов, относящихся к классу \"выше среднего\" чистого состояния, так и с минимизацией пропускания таких объектов.\n", + "- **ROC AUC**: Модель достигла значения ROC AUC 0.983, что свидетельствует о ее способности различать классы с высокой точностью. \n", + "- **Cohen's Kappa**: Значение 0.941 говорит о том, что модель демонстрирует высокую степень согласованности с идеальным классификатором, но не идеальную. \n", + "- **MCC**: MCC 0.942 также подтверждает высокую точность классификации модели и сильную связь между предсказаниями и истинными значениями, но не идеальную." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'logistic'" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "best_model = str(class_metrics.sort_values(by=\"MCC_test\", ascending=False).iloc[0].name)\n", + "\n", + "display(best_model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Вывод данных с ошибкой предсказания для оценки" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "text/plain": [ + "'Error items count: 0'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
RankPredictedNameNetworthAgeCountrySourceIndustryabove_average_networth
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [Rank , Predicted, Name, Networth, Age, Country, Source, Industry, above_average_networth]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Преобразование тестовых данных\n", + "preprocessing_result = pipeline_end.transform(X_test)\n", + "preprocessed_df = pd.DataFrame(\n", + " preprocessing_result,\n", + " columns=pipeline_end.get_feature_names_out(),\n", + ")\n", + "\n", + "# Получение предсказаний лучшей модели\n", + "y_pred = class_models[best_model][\"preds\"]\n", + "\n", + "# Нахождение индексов ошибок\n", + "error_index = y_test[y_test[\"above_average_networth\"] != y_pred].index.tolist() # Изменено на \"above_average_networth\"\n", + "display(f\"Error items count: {len(error_index)}\")\n", + "\n", + "# Создание DataFrame с ошибочными объектами\n", + "error_predicted = pd.Series(y_pred, index=y_test.index).loc[error_index]\n", + "error_df = X_test.loc[error_index].copy()\n", + "error_df.insert(loc=1, column=\"Predicted\", value=error_predicted)\n", + "error_df = error_df.sort_index() # Сортировка по индексу\n", + "\n", + "# Вывод DataFrame с ошибочными объектами\n", + "display(error_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Пример использования обученной модели (конвейера) для предсказания" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
RankNameNetworthAgeCountrySourceIndustryabove_average_networth
14651445Gordon Getty2.188United StatesGetty OilEnergy0
\n", + "
" + ], + "text/plain": [ + " Rank Name Networth Age Country Source Industry \\\n", + "1465 1445 Gordon Getty 2.1 88 United States Getty Oil Energy \n", + "\n", + " above_average_networth \n", + "1465 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NetworthAgeCountry_ArgentinaCountry_AustraliaCountry_AustriaCountry_BarbadosCountry_BelgiumCountry_BelizeCountry_BrazilCountry_Bulgaria...Industry_ManufacturingIndustry_Media & EntertainmentIndustry_Metals & MiningIndustry_Real EstateIndustry_ServiceIndustry_SportsIndustry_TechnologyIndustry_TelecomIndustry_diversifiedabove_average_networth
1465-0.2713121.8345220.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
\n", + "

1 rows × 859 columns

\n", + "
" + ], + "text/plain": [ + " Networth Age Country_Argentina Country_Australia \\\n", + "1465 -0.271312 1.834522 0.0 0.0 \n", + "\n", + " Country_Austria Country_Barbados Country_Belgium Country_Belize \\\n", + "1465 0.0 0.0 0.0 0.0 \n", + "\n", + " Country_Brazil Country_Bulgaria ... Industry_Manufacturing \\\n", + "1465 0.0 0.0 ... 0.0 \n", + "\n", + " Industry_Media & Entertainment Industry_Metals & Mining \\\n", + "1465 0.0 0.0 \n", + "\n", + " Industry_Real Estate Industry_Service Industry_Sports \\\n", + "1465 0.0 0.0 0.0 \n", + "\n", + " Industry_Technology Industry_Telecom Industry_diversified \\\n", + "1465 0.0 0.0 0.0 \n", + "\n", + " above_average_networth \n", + "1465 0.0 \n", + "\n", + "[1 rows x 859 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "predicted: 0 (proba: [0.99415059 0.00584941])\n", + "real: 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "# Выбираем лучшую модель\n", + "model = class_models[best_model][\"pipeline\"]\n", + "\n", + "# Выбираем позиционный индекс объекта для анализа\n", + "example_index = 13\n", + "\n", + "# Получаем исходные данные для объекта\n", + "test = pd.DataFrame(X_test.iloc[example_index, :]).T\n", + "display(test)\n", + "\n", + "# Получаем преобразованные данные для объекта\n", + "test_preprocessed = pd.DataFrame(preprocessed_df.iloc[example_index, :]).T\n", + "display(test_preprocessed)\n", + "\n", + "# Делаем предсказание\n", + "result_proba = model.predict_proba(test)[0]\n", + "result = model.predict(test)[0]\n", + "\n", + "# Получаем реальное значение\n", + "real = int(y_test.iloc[example_index].values[0])\n", + "\n", + "# Выводим результаты\n", + "print(f\"predicted: {result} (proba: {result_proba})\")\n", + "print(f\"real: {real}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Подбор гиперпараметров методом поиска по сетке" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\numpy\\ma\\core.py:2881: RuntimeWarning: invalid value encountered in cast\n", + " _data = np.array(data, dtype=dtype, copy=copy,\n" + ] + }, + { + "data": { + "text/plain": [ + "{'model__criterion': 'gini',\n", + " 'model__max_depth': 5,\n", + " 'model__max_features': 'sqrt',\n", + " 'model__n_estimators': 50}" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.model_selection import GridSearchCV\n", + "\n", + "optimized_model_type = \"random_forest\"\n", + "\n", + "random_forest_model = class_models[optimized_model_type][\"pipeline\"]\n", + "\n", + "param_grid = {\n", + " \"model__n_estimators\": [10, 50, 100],\n", + " \"model__max_features\": [\"sqrt\", \"log2\"],\n", + " \"model__max_depth\": [5, 7, 10],\n", + " \"model__criterion\": [\"gini\", \"entropy\"],\n", + "}\n", + "\n", + "gs_optomizer = GridSearchCV(\n", + " estimator=random_forest_model, param_grid=param_grid, n_jobs=-1\n", + ")\n", + "gs_optomizer.fit(X_train, y_train.values.ravel())\n", + "gs_optomizer.best_params_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__Обучение модели с новыми гиперпараметрами__" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.pipeline import Pipeline\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "import numpy as np\n", + "from sklearn import metrics\n", + "import pandas as pd\n", + "\n", + "\n", + "# Определяем числовые признаки\n", + "numeric_features = X_train.select_dtypes(include=['float64', 'int64']).columns.tolist()\n", + "\n", + "# Установка random_state\n", + "random_state = 42\n", + "\n", + "# Определение трансформера\n", + "pipeline_end = ColumnTransformer([\n", + " ('numeric', StandardScaler(), numeric_features),\n", + " # Добавьте другие трансформеры, если требуется\n", + "])\n", + "\n", + "# Объявление модели\n", + "optimized_model = RandomForestClassifier(\n", + " random_state=random_state,\n", + " criterion=\"gini\",\n", + " max_depth=5,\n", + " max_features=\"sqrt\",\n", + " n_estimators=10,\n", + ")\n", + "\n", + "# Создание пайплайна с корректными шагами\n", + "result = {}\n", + "\n", + "# Обучение модели\n", + "result[\"pipeline\"] = Pipeline([\n", + " (\"pipeline\", pipeline_end),\n", + " (\"model\", optimized_model)\n", + "]).fit(X_train, y_train.values.ravel())\n", + "\n", + "# Прогнозирование и расчет метрик\n", + "result[\"train_preds\"] = result[\"pipeline\"].predict(X_train)\n", + "result[\"probs\"] = result[\"pipeline\"].predict_proba(X_test)[:, 1]\n", + "result[\"preds\"] = np.where(result[\"probs\"] > 0.5, 1, 0)\n", + "\n", + "# Метрики для оценки модели\n", + "result[\"Precision_train\"] = metrics.precision_score(y_train, result[\"train_preds\"])\n", + "result[\"Precision_test\"] = metrics.precision_score(y_test, result[\"preds\"])\n", + "result[\"Recall_train\"] = metrics.recall_score(y_train, result[\"train_preds\"])\n", + "result[\"Recall_test\"] = metrics.recall_score(y_test, result[\"preds\"])\n", + "result[\"Accuracy_train\"] = metrics.accuracy_score(y_train, result[\"train_preds\"])\n", + "result[\"Accuracy_test\"] = metrics.accuracy_score(y_test, result[\"preds\"])\n", + "result[\"ROC_AUC_test\"] = metrics.roc_auc_score(y_test, result[\"probs\"])\n", + "result[\"F1_train\"] = metrics.f1_score(y_train, result[\"train_preds\"])\n", + "result[\"F1_test\"] = metrics.f1_score(y_test, result[\"preds\"])\n", + "result[\"MCC_test\"] = metrics.matthews_corrcoef(y_test, result[\"preds\"])\n", + "result[\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(y_test, result[\"preds\"])\n", + "result[\"Confusion_matrix\"] = metrics.confusion_matrix(y_test, result[\"preds\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Формирование данных для оценки старой и новой версии модели" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "optimized_metrics = pd.DataFrame(columns=list(result.keys()))\n", + "optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n", + " data=class_models[optimized_model_type]\n", + ")\n", + "optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n", + " data=result\n", + ")\n", + "optimized_metrics.insert(loc=0, column=\"Name\", value=[\"Old\", \"New\"])\n", + "optimized_metrics = optimized_metrics.set_index(\"Name\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Оценка параметров старой и новой модели" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Precision_trainPrecision_testRecall_trainRecall_testAccuracy_trainAccuracy_testF1_trainF1_test
Name        
Old1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
New1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "optimized_metrics[\n", + " [\n", + " \"Precision_train\",\n", + " \"Precision_test\",\n", + " \"Recall_train\",\n", + " \"Recall_test\",\n", + " \"Accuracy_train\",\n", + " \"Accuracy_test\",\n", + " \"F1_train\",\n", + " \"F1_test\",\n", + " ]\n", + "].style.background_gradient(\n", + " cmap=\"plasma\",\n", + " low=0.3,\n", + " high=1,\n", + " subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n", + ").background_gradient(\n", + " cmap=\"viridis\",\n", + " low=1,\n", + " high=0.3,\n", + " subset=[\n", + " \"Precision_train\",\n", + " \"Precision_test\",\n", + " \"Recall_train\",\n", + " \"Recall_test\",\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Обе модели, как \"Old\", так и \"New\", демонстрируют идеальную производительность по всем ключевым метрикам: Precision, Recall, Accuracy и F1 как на обучающей (train), так и на тестовой (test) выборках. Все значения равны 1.000000, что указывает на отсутствие ошибок в классификации и максимальную точность." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Accuracy_testF1_testROC_AUC_testCohen_kappa_testMCC_test
Name     
Old1.0000001.0000001.0000001.0000001.000000
New1.0000001.0000001.0000001.0000001.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "optimized_metrics[\n", + " [\n", + " \"Accuracy_test\",\n", + " \"F1_test\",\n", + " \"ROC_AUC_test\",\n", + " \"Cohen_kappa_test\",\n", + " \"MCC_test\",\n", + " ]\n", + "].style.background_gradient(\n", + " cmap=\"plasma\",\n", + " low=0.3,\n", + " high=1,\n", + " subset=[\n", + " \"ROC_AUC_test\",\n", + " \"MCC_test\",\n", + " \"Cohen_kappa_test\",\n", + " ],\n", + ").background_gradient(\n", + " cmap=\"viridis\",\n", + " low=1,\n", + " high=0.3,\n", + " subset=[\n", + " \"Accuracy_test\",\n", + " \"F1_test\",\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Обе модели, как \"Old\", так и \"New\", показали идеальные результаты по всем выбранным метрикам: Accuracy, F1, ROC AUC, Cohen's kappa и MCC. Все метрики имеют значение 1.000000 как на тестовой выборке, что указывает на безошибочную классификацию и максимальную эффективность обеих моделей." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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z89Pv//++yXHW7ZsqTp16jihZcBF5BqdUwD5sGTJEjVs2FBr1qzRgw8+qDfffFMDBgzQ2rVr1bBhQ33yySfObiIAAFeVkZGhF1980dnNAHAZLIgEIE8OHjyoBx54QFWrVtWGDRtUpkwZ89jjjz+uZs2a6YEHHtDOnTtVtWpVJ7YUNwoWjgBwPRo0aKC3335bzz77rCIiIpzdHMBErjFyCiCPpk6dqnPnzumtt96y65hKUunSpTV79mydPXtWU6ZMuWIdhmFo0qRJqlChgkqUKKFWrVoxHRjXzfa/qUuO2ADcOEaNGqWcnJw8jZ5+8MEHatSokfz9/RUaGqpevXopOTnZPP7666/L09NTp0+fNvdNmzZNFotFTz75pLkvJydHQUFBGjlypEOvBcULuUbnFEAeLV26VJUrV1azZs0ue7x58+aqXLmyli9ffsU6xowZo9GjR6t+/fqaOnWqqlatqnbt2uns2bOF1WwAAOxUqVJFffv21dtvv60jR45csdzkyZPVt29f1ahRQ6+88oqeeOIJrVmzRs2bNzc7o82aNZPNZtPGjRvN9yUmJsrDw0OJiYnmvu+//17p6elq3rx5oV0XUBzQOQVwTampqTpy5Ijq169/1XL16tXTb7/9pjNnzlxy7MSJE5oyZYo6duyoZcuWafDgwZo7d6769++vP/74o7CajmIsx7A4bMuPmTNnql69erJarbJarYqJidGXX35pHm/ZsqUsFovd9uijj9rVcfjwYXXs2FElSpRQ2bJlNWLECGVnZzvkcwFwbc8995yys7P10ksvXfb4r7/+qrFjx2rSpElauHChBg0apDFjxmjt2rX67bff9Oabb0qS6tevL6vVanZEDcPQxo0b1b17d7NDKv3VYb3jjjuK5gLhlsg1OqcA8iC3sxkUFHTVcrnH09LSLjm2evVqZWZmaujQobJY/vql+cQTTziuoUARqFChgl588UVt3bpV3333ne6880516dLFbor6wIEDdfToUXP7+3T3nJwcdezYUZmZmfrmm2/03nvvad68eRozZowzLge4IVWtWlUPPPCA3nrrLR09evSS40uWLJHNZlOPHj30xx9/mFt4eLhq1KihtWvXSpI8PDx0++23a8OGDZKkvXv36s8//9QzzzwjwzCUlJQk6WLntE6dOgoJCSmyawTyypVyjc4pgGvK7XRebkT0767W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mjdvniZPnmx3nnHjxumee+7Rrl279NBDD8lms6lChQr66KOPtGfPHo0ZM0ajRo3Shx9+aL7npZdeUkJCgt59911t2rRJaWlpl9wBj4+P1/z58zVr1izt3r1bw4YNU58+fbR+/forXnNGRobS0tLstuLq+O/emjmmvEbO+FU+fkaB6vq/8b9rxsp9Gvfuzzryq49mjy9/7TcBuCp3mf5ErpFrroRsA1yXu+RaYXKJzumyZcsUGBiowMBABQUF6fPPP9eiRYvk4XGxeYsWLZLNZtOcOXNUt25dRUdH691339Xhw4fNIP67s2fPaubMmZo6dao6dOig2rVr6+2335a/v795F7hly5bauHGjcnJytHPnTvn4+CguLs6sb926dWrRosVV2/3OO++oQ4cOKlmypEJDQxUbG6t3331XklSyZEl16NBBCxYsMMt//PHHKl26tFq1aiVJGj9+vJ555hn169dPVatWVdu2bTVx4kTNnj3b7jy9e/fWgw8+qKpVq6pixYry9vbW+PHjdcstt6hKlSqKi4vTgw8+aBfi06dP17PPPqt77rlHtWrV0owZMxQSEmIez8jI0AsvvKB33nlHsbGxqlq1qvr3768+ffpccv6/i4+PV3BwsLlFRhbfxQ8O7Cyh0394a3BslDpE1leHyPramRSoz+aWVofI+ipZJltZmR5KT/W0e9/pE94KLWt/BzG0bLYq1shQTGyaHn/pNy17r7T+PMY3ORVnaSc9lZMthfzjbnLJ0tl2q17i+hkOmvpUGCFOrpFrropsw/Ui1wqfK+daUXGJzmmrVq20fft2bd++XZs3b1ZsbKw6dOhg3q3dsWOHDhw4oKCgIDPsQ0NDdeHCBR08ePCS+g4ePKisrCzdcccd5j5vb2/deuut2rt3rySpWbNmOnPmjL7//nutX79eLVq0UMuWLc0QX79+vVq2bHnFNufk5Oi9995Tnz59zH19+vTRvHnzzClPcXFxWrx4sbmgREJCgnr16mX+42THjh2aMGGCeU2BgYEaOHCgjh49qnPn/pq7f8stt1xy/jfeeEONGjVSmTJlFBgYqLfeekuHDx+WJKWmpurYsWO69dZbzfKenp5q1KiR+frAgQM6d+6c2rZta3f++fPnX/YzzfXss88qNTXV3JKTi+8UngbNzmj21z9q5qp95laz/jnd2e2U+Wcvb5u+3xhovif5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QoKaNGmi6tWrm/VPmzZN3bp1U5UqVdStWzcNGzZMs2fPvu72x8bGKiAgwGynJC1YsEB33323goKClJGRoRdeeEHvvPOOYmNjVbVqVfXv3199+vS55LwTJkxQ27ZtVa1aNYWGhqp+/fr6v//7P9WpU0c1atTQxIkTVa1aNX3++eeSpB9//FGrV6/W22+/rSZNmqhhw4aaM2eOzp8/b9a5ceNGbd68WR999JFuueUW1ahRQy+//LJCQkLs7nL/XUZGhtLS0uw2AAXj65Wtdjcf4O5yMUGukWvAjY5cw/Vyaud037592rx5s+6//35JkpeXl3r27Km5c+deUjYmJsb8c2hoqKKiorR3715J0t69e3XHHXfYlb/jjju0f/9+5eTkSLp4tzc3xA3D0H/+8x/FxcVJks6ePauDBw9qwIABCgwMNLdJkybZ3ZXOb/u9vLzUo0cPJSQkmOf57LPPzPMeOHBA586dU9u2be3OO3/+/EvOe8stt9i9Tk9P1/DhwxUdHa2QkBAFBgZq79695h3mffv2ycvLSw0bNjTfU716dZUsWdJ8vWPHDqWnp6tUqVJ25z906NAVrzs+Pl7BwcHmFhkZecXP50aQdtJTOdlSyD/uJpcsna1TJ1x+MWy4iFb1fpafd7a+2FrT2U1xLy44/YlcI9fcHbkGRyDXrpML5lpRc+pvmblz5yo7O1sRERHmPsMw5OvrqxkzZig4ONhh57r//vs1cuRIbdu2TefPn1dycrL53Ezu9KTcu7F/5+npWaD2x8XFqUWLFjp+/LhWrVolf39/tW/f3u68y5cvV/ny5e3q9vX1tXsdEBBg93r48OFatWqVXn75ZVWvXl3+/v669957lZmZmefPJD09XeXKldO6desuOXalrzd49tln9eSTT5qv09LSbuggz87y0P6dJXRz0zNKWnHx59ViMdSgabo+n1fKya2Du7j71h+VuKeSTp/1d3ZT3IujAtiBIU6ukWvujlyDI5Br18kFc62oOa1zmp2drfnz52vatGlq166d3bGuXbvqP//5jx599FFz33//+19VrHhxGepTp07pp59+UnR0tCQpOjpamzZtsqtj06ZNqlmzphnCFSpUUIsWLZSQkKDz58+rbdu2Klu2rCQpLCxMERER+vnnn827v45q/+23367IyEgtWrRIX375pe677z55e19csax27dry9fXV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KeAgvr6+Gjt2rHx9fZ3dFLgYfjYKBwtHAIWL3124En42Cge5JlkM1j0GALiRtLQ0BQcH684Gz8jLs+D/MMrOydDX219Uamoqz04BAIocufYXpvUCAAAAAJyOab0AAPfEkvsAgOKEXKNzCgBwUzZJjvgaSkesjAgAQEGRa0zrRfHRv39/de3a1dnNQBFat26dLBaLTp8+7eymAIDDkWs3HnINNzo6p3C6/v37y2KxmFupUqXUvn177dy509lNy5Pz588rNDRUpUuXVkZGhrObU+wkJSXJ09NTHTt2dHZTrou7t9+V5a5q6IgtP8aNG2f3O8tisahWrVrm8QsXLmjw4MEqVaqUAgMD1b17dx07dszRlw8XRq7hatw9F9y9/a6MXKNzChfRvn17HT16VEePHtWaNWvk5eWlTp06ObtZebJ48WLddNNNqlWrlj799NNCP19WVlahn8OVzJ07V0OHDtWGDRt05MgRZzcn34qy/YZhKDs7u1DP4VJyn81xxJZPN910k/k76+jRo9q4caN5bNiwYVq6dKk++ugjrV+/XkeOHFG3bt0ceeVwA+Ra3pFr7oVcK0TkGp1TuAZfX1+Fh4crPDxcDRo00DPPPKPk5GSdOHHCLJOcnKwePXooJCREoaGh6tKli3755Zcr1pmRkaHHHntMZcuWlZ+fn5o2baotW7aYx2+55Ra9/PLL5uuuXbvK29tb6enpkqTffvtNFotFBw4cuGrb586dqz59+qhPnz6aO3euuf+tt95SRESEbDb7if9dunTRQw89ZL7+7LPP1LBhQ/n5+alq1aoaP3683S9ii8WimTNn6u6771ZAQIAmT56snJwcDRgwQFWqVJG/v7+ioqL073//2+482dnZeuyxxxQSEqJSpUpp5MiR6tevn90UMZvNpvj4eLOe+vXr6+OPP77q9Ral9PR0LVq0SIMGDVLHjh01b968y5bbtGmT6tWrJz8/P91222364Ycf7I7n/kPL19dXlStX1rRp08xjo0aNUpMmTS6ps379+powYYL5es6cOYqOjpafn59q1aqlN998s0Dt7927t3r27GlXPisrS6VLl9b8+fMlXfvvJ3f615dffqlGjRrJ19dXGzdu1MGDB9WlSxeFhYUpMDBQjRs31urVq+3OdfToUXXs2FH+/v6qUqWKFixYoMqVK+u1114zy5w+fVoPP/ywypQpI6vVqjvvvFM7duy45nXfCLy8vMzfWeHh4SpdurQkKTU1VXPnztUrr7yiO++8U40aNdK7776rb775Rv/973+d3GoUJXKNXLscco1cc1Wukmt0TuFy0tPT9cEHH6h69eoqVaqUpIu/3GJjYxUUFKTExERt2rRJgYGBat++vTIzMy9bz9NPP63Fixfrvffe07Zt21S9enXFxsbq5MmTkqQWLVpo3bp1ki7emUtMTFRISIh5p2j9+vUqX768qlevfsW2Hjx4UElJSerRo4d69OihxMRE/frrr5Kk++67T3/++afWrl1rlj958qRWrFihuLg4SVJiYqL69u2rxx9/XHv27NHs2bM1b948TZ482e4848aN0z333KNdu3bpoYceks1mU4UKFfTRRx9pz549GjNmjEaNGqUPP/zQfM9LL72khIQEvfvuu9q0aZPS0tIuuQMeHx+v+fPna9asWdq9e7eGDRumPn36aP369df6ayoSH374oWrVqqWoqCj16dNH77zzji731cwjRozQtGnTtGXLFpUpU0adO3c278Rv3bpVPXr0UK9evbRr1y6NGzdOo0ePNgM1Li5Omzdv1sGDB836du/erZ07d6p3796SpISEBI0ZM0aTJ0/W3r179cILL2j06NF67733rrv9cXFxWrp0qfmPRklauXKlzp07p3vuuUdS3v9+nnnmGb344ovau3ev6tWrp/T0dN11111as2aNvv/+e7Vv316dO3fW4cOHzff07dtXR44c0bp167R48WK99dZbOn78uF299913n44fP64vv/xSW7duVcOGDdW6dWvz/yGnc+Id5v379ysiIkJVq1ZVXFyc+dlu3bpVWVlZatOmjVm2Vq1aqlixopKSkhx26XAv5Bq5lotcI9euilyTDMDJ+vXrZ3h6ehoBAQFGQECAIckoV66csXXrVrPM+++/b0RFRRk2m83cl5GRYfj7+xsrV6406+nSpYthGIaRnp5ueHt7GwkJCWb5zMxMIyIiwpgyZYphGIbx+eefG8HBwUZ2draxfft2Izw83Hj88ceNkSNHGoZhGA8//LDRu3fvq7Z91KhRRteuXc3XXbp0McaOHWv3+qGHHjJfz54924iIiDBycnIMwzCM1q1bGy+88IJdne+//75Rrlw587Uk44knnrhqOwzDMAYPHmx0797dfB0WFmZMnTrVfJ2dnW1UrFjR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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "_, ax = plt.subplots(1, 2, figsize=(10, 4), sharex=False, sharey=False)\n", + "\n", + "# Предполагается, что optimized_metrics - DataFrame с матрицами ошибок\n", + "for index in range(0, len(optimized_metrics)):\n", + " c_matrix = optimized_metrics.iloc[index][\"Confusion_matrix\"]\n", + " disp = ConfusionMatrixDisplay(\n", + " confusion_matrix=c_matrix, display_labels=[\"Below Average\", \"Above Average\"] # Измените метки на нужные\n", + " ).plot(ax=ax.flat[index])\n", + " disp.ax_.set_title(optimized_metrics.index[index]) # Заголовок с названием модели\n", + "\n", + "plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.3)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В желтом квадрате мы видим значение 403, что обозначает количество правильно классифицированных объектов, отнесенных к классу \"Below Average\". Это свидетельствует о том, что модель успешно идентифицирует объекты этого класса, минимизируя количество ложных положительных срабатываний.\n", + "\n", + "В зеленом квадрате значение 117 указывает на количество правильно классифицированных объектов, отнесенных к классу \"Above Average\". Это также является показателем высокой точности модели в определении объектов данного класса." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Определение достижимого уровня качества модели для второй задачи (задача регрессии)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Загрузка данных и создание целевой переменной" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Среднее значение поля 'Networth': 4.8607499999999995\n", + " Rank Name Networth Age Country \\\n", + "0 1 Elon Musk 219.0 50 United States \n", + "1 2 Jeff Bezos 171.0 58 United States \n", + "2 3 Bernard Arnault & family 158.0 73 France \n", + "3 4 Bill Gates 129.0 66 United States \n", + "4 5 Warren Buffett 118.0 91 United States \n", + "\n", + " Source Industry above_average_networth \n", + "0 Tesla, SpaceX Automotive 1 \n", + "1 Amazon Technology 1 \n", + "2 LVMH Fashion & Retail 1 \n", + "3 Microsoft Technology 1 \n", + "4 Berkshire Hathaway Finance & Investments 1 \n", + "Статистическое описание DataFrame:\n", + " Rank Networth Age above_average_networth\n", + "count 2600.000000 2600.000000 2600.000000 2600.000000\n", + "mean 1269.570769 4.860750 64.271923 0.225000\n", + "std 728.146364 10.659671 13.220607 0.417663\n", + "min 1.000000 1.000000 19.000000 0.000000\n", + "25% 637.000000 1.500000 55.000000 0.000000\n", + "50% 1292.000000 2.400000 64.000000 0.000000\n", + "75% 1929.000000 4.500000 74.000000 0.000000\n", + "max 2578.000000 219.000000 100.000000 1.000000\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn import set_config\n", + "\n", + "set_config(transform_output=\"pandas\")\n", + "\n", + "df = pd.read_csv(\"..//static//csv//Forbes Billionaires.csv\")\n", + "\n", + "# Опция для настройки генерации случайных чисел (если это нужно для других частей кода)\n", + "random_state = 42\n", + "\n", + "# Вычисление среднего значения поля \"Networth\"\n", + "average_networth = df['Networth'].mean()\n", + "print(f\"Среднее значение поля 'Networth': {average_networth}\")\n", + "\n", + "# Создание новой колонки, указывающей, выше или ниже среднего значение чистого состояния\n", + "df['above_average_networth'] = (df['Networth'] > average_networth).astype(int)\n", + "\n", + "# Вывод DataFrame с новой колонкой\n", + "print(df.head())\n", + "\n", + "# Примерный анализ данных\n", + "print(\"Статистическое описание DataFrame:\")\n", + "print(df.describe())\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Разделение набора данных на обучающую и тестовые выборки (80/20) для задачи регрессии\n", + "\n", + "Целевой признак -- above_average_networth" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'X_train'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
RankNameNetworthAgeCountrySourceIndustry
582579Alexandra Schoerghuber & family4.963Germanyreal estateReal Estate
4849He Xiangjian28.379Chinahome appliancesManufacturing
17721729Bruce Mathieson1.778AustraliahotelsFood & Beverage
964951Pansy Ho3.259Hong KongcasinosGambling & Casinos
22132190Sasson Dayan & family1.382BrazilbankingFinance & Investments
........................
16381579Wang Chou-hsiong1.981TaiwanfootwearManufacturing
10951096Jose Joao Abdalla Filho2.876BrazilinvestmentsFinance & Investments
11301096Lin Chen-hai2.875Taiwanreal estateReal Estate
12941292Banwari Lal Bawri2.469IndiapharmaceuticalsHealthcare
860851Kuok Khoon Hong3.572Singaporepalm oilManufacturing
\n", + "

2080 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " Rank Name Networth Age Country \\\n", + "582 579 Alexandra Schoerghuber & family 4.9 63 Germany \n", + "48 49 He Xiangjian 28.3 79 China \n", + "1772 1729 Bruce Mathieson 1.7 78 Australia \n", + "964 951 Pansy Ho 3.2 59 Hong Kong \n", + "2213 2190 Sasson Dayan & family 1.3 82 Brazil \n", + "... ... ... ... ... ... \n", + "1638 1579 Wang Chou-hsiong 1.9 81 Taiwan \n", + "1095 1096 Jose Joao Abdalla Filho 2.8 76 Brazil \n", + "1130 1096 Lin Chen-hai 2.8 75 Taiwan \n", + "1294 1292 Banwari Lal Bawri 2.4 69 India \n", + "860 851 Kuok Khoon Hong 3.5 72 Singapore \n", + "\n", + " Source Industry \n", + "582 real estate Real Estate \n", + "48 home appliances Manufacturing \n", + "1772 hotels Food & Beverage \n", + "964 casinos Gambling & Casinos \n", + "2213 banking Finance & Investments \n", + "... ... ... \n", + "1638 footwear Manufacturing \n", + "1095 investments Finance & Investments \n", + "1130 real estate Real Estate \n", + "1294 pharmaceuticals Healthcare \n", + "860 palm oil Manufacturing \n", + "\n", + "[2080 rows x 7 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'y_train'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
above_average_networth
5821
481
17720
9640
22130
......
16380
10950
11300
12940
8600
\n", + "

2080 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " above_average_networth\n", + "582 1\n", + "48 1\n", + "1772 0\n", + "964 0\n", + "2213 0\n", + "... ...\n", + "1638 0\n", + "1095 0\n", + "1130 0\n", + "1294 0\n", + "860 0\n", + "\n", + "[2080 rows x 1 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'X_test'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
RankNameNetworthAgeCountrySourceIndustry
15931579Guangming Fu & family1.968ChinapoultryFood & Beverage
196197Leon Black10.070United Statesprivate equityFinance & Investments
239235Zong Qinghou8.876ChinabeveragesFood & Beverage
21262076Kurt Krieger1.474Germanyfurniture retailingFashion & Retail
15871579Chen Kaichen1.964Chinahousehold chemicalsManufacturing
........................
17781729Jorge Perez1.772United Statesreal estateReal Estate
166167Brian Chesky11.540United StatesAirbnbTechnology
949913Zhong Ruonong & family3.359ChinaelectronicsManufacturing
4950Miriam Adelson27.576United StatescasinosGambling & Casinos
25112448Lou Boliang1.158United StatespharmaceuticalsHealthcare
\n", + "

520 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " Rank Name Networth Age Country \\\n", + "1593 1579 Guangming Fu & family 1.9 68 China \n", + "196 197 Leon Black 10.0 70 United States \n", + "239 235 Zong Qinghou 8.8 76 China \n", + "2126 2076 Kurt Krieger 1.4 74 Germany \n", + "1587 1579 Chen Kaichen 1.9 64 China \n", + "... ... ... ... ... ... \n", + "1778 1729 Jorge Perez 1.7 72 United States \n", + "166 167 Brian Chesky 11.5 40 United States \n", + "949 913 Zhong Ruonong & family 3.3 59 China \n", + "49 50 Miriam Adelson 27.5 76 United States \n", + "2511 2448 Lou Boliang 1.1 58 United States \n", + "\n", + " Source Industry \n", + "1593 poultry Food & Beverage \n", + "196 private equity Finance & Investments \n", + "239 beverages Food & Beverage \n", + "2126 furniture retailing Fashion & Retail \n", + "1587 household chemicals Manufacturing \n", + "... ... ... \n", + "1778 real estate Real Estate \n", + "166 Airbnb Technology \n", + "949 electronics Manufacturing \n", + "49 casinos Gambling & Casinos \n", + "2511 pharmaceuticals Healthcare \n", + "\n", + "[520 rows x 7 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'y_test'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
above_average_networth
15930
1961
2391
21260
15870
......
17780
1661
9490
491
25110
\n", + "

520 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " above_average_networth\n", + "1593 0\n", + "196 1\n", + "239 1\n", + "2126 0\n", + "1587 0\n", + "... ...\n", + "1778 0\n", + "166 1\n", + "949 0\n", + "49 1\n", + "2511 0\n", + "\n", + "[520 rows x 1 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from typing import Tuple\n", + "import pandas as pd\n", + "from pandas import DataFrame\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "def split_into_train_test(\n", + " df_input: DataFrame,\n", + " target_colname: str = \"above_average_networth\", \n", + " frac_train: float = 0.8,\n", + " random_state: int = None,\n", + ") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame]:\n", + " \n", + " if not (0 < frac_train < 1):\n", + " raise ValueError(\"Fraction must be between 0 and 1.\")\n", + " \n", + " # Проверка наличия целевого признака\n", + " if target_colname not in df_input.columns:\n", + " raise ValueError(f\"{target_colname} is not a column in the DataFrame.\")\n", + " \n", + " # Разделяем данные на признаки и целевую переменную\n", + " X = df_input.drop(columns=[target_colname]) # Признаки\n", + " y = df_input[[target_colname]] # Целевая переменная\n", + "\n", + " # Разделяем данные на обучающую и тестовую выборки\n", + " X_train, X_test, y_train, y_test = train_test_split(\n", + " X, y,\n", + " test_size=(1.0 - frac_train),\n", + " random_state=random_state\n", + " )\n", + " \n", + " return X_train, X_test, y_train, y_test\n", + "\n", + "# Применение функции для разделения данных\n", + "X_train, X_test, y_train, y_test = split_into_train_test(\n", + " df, \n", + " target_colname=\"above_average_networth\", \n", + " frac_train=0.8, \n", + " random_state=42 \n", + ")\n", + "\n", + "# Для отображения результатов\n", + "display(\"X_train\", X_train)\n", + "display(\"y_train\", y_train)\n", + "\n", + "display(\"X_test\", X_test)\n", + "display(\"y_test\", y_test)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Формирование конвейера для решения задачи регрессии" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Networth Age Country_Argentina Country_Australia \\\n", + "0 20.092595 -1.079729 0.0 0.0 \n", + "1 15.588775 -0.474496 0.0 0.0 \n", + "2 14.368991 0.660314 0.0 0.0 \n", + "3 11.647933 0.130736 0.0 0.0 \n", + "4 10.615808 2.022087 0.0 0.0 \n", + "... ... ... ... ... \n", + "2595 -0.362253 1.189893 0.0 0.0 \n", + "2596 -0.362253 1.341201 0.0 0.0 \n", + "2597 -0.362253 0.509006 0.0 0.0 \n", + "2598 -0.362253 0.282044 0.0 0.0 \n", + "2599 -0.362253 0.357698 0.0 0.0 \n", + "\n", + " Country_Austria Country_Barbados Country_Belgium Country_Belize \\\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", + "2595 0.0 0.0 0.0 0.0 \n", + "2596 0.0 0.0 0.0 0.0 \n", + "2597 0.0 0.0 0.0 0.0 \n", + "2598 0.0 0.0 0.0 0.0 \n", + "2599 0.0 0.0 0.0 0.0 \n", + "\n", + " Country_Brazil Country_Bulgaria ... 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", + "2595 0.0 0.0 ... 0.0 \n", + "2596 0.0 0.0 ... 0.0 \n", + "2597 0.0 0.0 ... 0.0 \n", + "2598 0.0 0.0 ... 0.0 \n", + "2599 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", + "2595 0.0 0.0 \n", + "2596 0.0 0.0 \n", + "2597 0.0 0.0 \n", + "2598 0.0 0.0 \n", + "2599 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", + "2595 0.0 0.0 0.0 \n", + "2596 0.0 0.0 0.0 \n", + "2597 0.0 0.0 0.0 \n", + "2598 0.0 0.0 0.0 \n", + "2599 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", + "2595 0.0 0.0 0.0 \n", + "2596 0.0 0.0 0.0 \n", + "2597 0.0 0.0 0.0 \n", + "2598 0.0 0.0 0.0 \n", + "2599 0.0 0.0 0.0 \n", + "\n", + " Networth_per_Age \n", + "0 -18.608929 \n", + "1 -32.853309 \n", + "2 21.760834 \n", + "3 89.095063 \n", + "4 5.249926 \n", + "... ... \n", + "2595 -0.304441 \n", + "2596 -0.270096 \n", + "2597 -0.711686 \n", + "2598 -1.284383 \n", + "2599 -1.012732 \n", + "\n", + "[2600 rows x 988 columns]\n", + "(2600, 988)\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.ensemble import RandomForestRegressor \n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.pipeline import make_pipeline\n", + "\n", + "class ForbesBillionairesFeatures(BaseEstimator, TransformerMixin): \n", + " def __init__(self):\n", + " pass\n", + "\n", + " def fit(self, X, y=None):\n", + " return self\n", + "\n", + " def transform(self, X, y=None):\n", + " X[\"Networth_per_Age\"] = X[\"Networth\"] / X[\"Age\"]\n", + " return X\n", + "\n", + " def get_feature_names_out(self, features_in):\n", + " return np.append(features_in, [\"Networth_per_Age\"], axis=0) \n", + "\n", + "# Определите признаки для вашей задачи\n", + "columns_to_drop = [\"Rank \", \"Name\"] \n", + "num_columns = [\"Networth\", \"Age\"] \n", + "cat_columns = [\"Country\", \"Source\", \"Industry\"]\n", + "\n", + "# Преобразование числовых признаков\n", + "num_imputer = SimpleImputer(strategy=\"median\")\n", + "num_scaler = StandardScaler()\n", + "preprocessing_num = Pipeline(\n", + " [\n", + " (\"imputer\", num_imputer),\n", + " (\"scaler\", num_scaler),\n", + " ]\n", + ")\n", + "\n", + "# Преобразование категориальных признаков\n", + "cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\")\n", + "cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n", + "preprocessing_cat = Pipeline(\n", + " [\n", + " (\"imputer\", cat_imputer),\n", + " (\"encoder\", cat_encoder),\n", + " ]\n", + ")\n", + "\n", + "# Формирование конвейера\n", + "features_preprocessing = ColumnTransformer(\n", + " verbose_feature_names_out=False,\n", + " transformers=[\n", + " (\"prepocessing_num\", preprocessing_num, num_columns),\n", + " (\"prepocessing_cat\", preprocessing_cat, cat_columns),\n", + " ],\n", + " remainder=\"passthrough\" \n", + ")\n", + "\n", + "drop_columns = ColumnTransformer(\n", + " verbose_feature_names_out=False,\n", + " transformers=[\n", + " (\"drop_columns\", \"drop\", columns_to_drop),\n", + " ],\n", + " remainder=\"passthrough\",\n", + ")\n", + "\n", + "# Окончательный конвейер\n", + "pipeline_end = Pipeline(\n", + " [\n", + " (\"features_preprocessing\", features_preprocessing),\n", + " (\"drop_columns\", drop_columns),\n", + " (\"custom_features\", ForbesBillionairesFeatures()), # Добавляем custom_features\n", + " ]\n", + ")\n", + "\n", + "df = pd.read_csv(\"..//static//csv//Forbes Billionaires.csv\")\n", + "\n", + "# Создаем целевой признак\n", + "average_networth = df['Networth'].mean()\n", + "df['above_average_networth'] = (df['Networth'] > average_networth).astype(int)\n", + "\n", + "# Подготовка данных\n", + "X = df.drop('above_average_networth', axis=1)\n", + "y = df['above_average_networth'].values.ravel()\n", + "\n", + "# Применение конвейера\n", + "X_processed = pipeline_end.fit_transform(X)\n", + "\n", + "# Вывод\n", + "print(X_processed)\n", + "print(X_processed.shape)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Формирование набора моделей для регрессии" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n", + " return fit_method(estimator, *args, **kwargs)\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n", + " return fit_method(estimator, *args, **kwargs)\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n", + " return fit_method(estimator, *args, **kwargs)\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n", + " return fit_method(estimator, *args, **kwargs)\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n", + " return fit_method(estimator, *args, **kwargs)\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:668: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:668: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:668: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:668: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\ensemble\\_gb.py:668: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True) # TODO: Is this still required?\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\utils\\validation.py:1339: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True)\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\utils\\validation.py:1339: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True)\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\utils\\validation.py:1339: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True)\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\utils\\validation.py:1339: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True)\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\utils\\validation.py:1339: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", + " y = column_or_1d(y, warn=True)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Random Forest: Mean Score = 0.9999449765688064, Standard Deviation = 0.00010860474979394001\n", + "Linear Regression: Mean Score = -5.286122247142867e+21, Standard Deviation = 9.978968848315854e+21\n", + "Gradient Boosting: Mean Score = 0.9999999992916644, Standard Deviation = 2.7301021406313204e-12\n", + "Support Vector Regression: Mean Score = 0.6826855358064324, Standard Deviation = 0.020395315184745886\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.ensemble import GradientBoostingRegressor\n", + "from sklearn.svm import SVR\n", + "from sklearn.model_selection import cross_val_score\n", + "\n", + "def train_multiple_models(X, y, models):\n", + " results = {}\n", + " for model_name, model in models.items():\n", + " # Создаем конвейер для каждой модели\n", + " model_pipeline = Pipeline(\n", + " [\n", + " (\"features_preprocessing\", features_preprocessing),\n", + " (\"drop_columns\", drop_columns),\n", + " (\"model\", model) # Используем текущую модель\n", + " ]\n", + " )\n", + " \n", + " # Обучаем модель и вычисляем кросс-валидацию\n", + " scores = cross_val_score(model_pipeline, X, y, cv=5) # 5-кратная кросс-валидация\n", + " results[model_name] = {\n", + " \"mean_score\": scores.mean(),\n", + " \"std_dev\": scores.std()\n", + " }\n", + " \n", + " return results\n", + "\n", + "models = {\n", + " \"Random Forest\": RandomForestRegressor(),\n", + " \"Linear Regression\": LinearRegression(),\n", + " \"Gradient Boosting\": GradientBoostingRegressor(),\n", + " \"Support Vector Regression\": SVR()\n", + "}\n", + "\n", + "results = train_multiple_models(X_train, y_train, models)\n", + "\n", + "# Вывод результатов\n", + "for model_name, scores in results.items():\n", + " print(f\"{model_name}: Mean Score = {scores['mean_score']}, Standard Deviation = {scores['std_dev']}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Random Forest показала очень высокое среднее значение, близкое к 1, что указывает на ее высокую точность в предсказании. Стандартное отклонение также очень низкое, что говорит о стабильности модели.\n", + "- Линейная регрессия показала очень низкое среднее значение с огромным отрицательным числом, что указывает на ее неэффективность в данной задаче. Стандартное отклонение также очень высокое, что говорит о нестабильности модели.\n", + "- Gradient Boosting показала практически идеальное среднее значение, близкое к 1, что указывает на ее высокую точность в предсказании. Стандартное отклонение практически равно нулю, что говорит о чрезвычайной стабильности модели.\n", + "- Support Vector Regression показала среднее значение около 0.68, что указывает на ее умеренную точность в предсказании. Стандартное отклонение относительно низкое, что говорит о стабильности модели, но она все же уступает Random Forest и Gradient Boosting." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Обучение моделей на обучающем наборе данных и оценка на тестовом для регрессии" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: logistic\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.0125\n", + "MSE (test): 0.04038461538461539\n", + "MAE (train): 0.0125\n", + "MAE (test): 0.04038461538461539\n", + "R2 (train): 0.9275415718173158\n", + "R2 (test): 0.7776148582600195\n", + "STD (train): 0.11110243021644485\n", + "STD (test): 0.19685959012669935\n", + "----------------------------------------\n", + "Model: ridge\n", + "MSE (train): 0.004326923076923077\n", + "MSE (test): 0.013461538461538462\n", + "MAE (train): 0.004326923076923077\n", + "MAE (test): 0.013461538461538462\n", + "R2 (train): 0.9749182363983017\n", + "R2 (test): 0.9258716194200065\n", + "STD (train): 0.0656368860749005\n", + "STD (test): 0.11588034534756023\n", + "----------------------------------------\n", + "Model: decision_tree\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: knn\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.09278846153846154\n", + "MSE (test): 0.15384615384615385\n", + "MAE (train): 0.09278846153846154\n", + "MAE (test): 0.15384615384615385\n", + "R2 (train): 0.4621355138746903\n", + "R2 (test): 0.1528185076572175\n", + "STD (train): 0.29276240884468824\n", + "STD (test): 0.3684085396282311\n", + "----------------------------------------\n", + "Model: naive_bayes\n", + "MSE (train): 0.37740384615384615\n", + "MSE (test): 0.6096153846153847\n", + "MAE (train): 0.37740384615384615\n", + "MAE (test): 0.6096153846153847\n", + "R2 (train): -1.1876871585925808\n", + "R2 (test): -2.3569566634082757\n", + "STD (train): 0.4847372309428379\n", + "STD (test): 0.5672229402142737\n", + "----------------------------------------\n", + "Model: gradient_boosting\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: random_forest\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: mlp\n", + "MSE (train): 0.06778846153846153\n", + "MSE (test): 0.12692307692307692\n", + "MAE (train): 0.06778846153846153\n", + "MAE (test): 0.12692307692307692\n", + "R2 (train): 0.6070523702400588\n", + "R2 (test): 0.30107526881720437\n", + "STD (train): 0.2521427220700598\n", + "STD (test): 0.3370600353877945\n", + "----------------------------------------\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from sklearn import metrics\n", + "from sklearn.pipeline import Pipeline\n", + "\n", + "# Проверка наличия необходимых переменных\n", + "if 'class_models' not in locals():\n", + " raise ValueError(\"class_models is not defined\")\n", + "if 'X_train' not in locals() or 'X_test' not in locals() or 'y_train' not in locals() or 'y_test' not in locals():\n", + " raise ValueError(\"Train/test data is not defined\")\n", + "\n", + "\n", + "y_train = np.ravel(y_train) \n", + "y_test = np.ravel(y_test) \n", + "\n", + "# Инициализация списка для хранения результатов\n", + "results = []\n", + "\n", + "# Проход по моделям и оценка их качества\n", + "for model_name in class_models.keys():\n", + " print(f\"Model: {model_name}\")\n", + " \n", + " # Извлечение модели из словаря\n", + " model = class_models[model_name][\"model\"]\n", + " \n", + " # Создание пайплайна\n", + " model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\n", + " \n", + " # Обучение модели\n", + " model_pipeline.fit(X_train, y_train)\n", + "\n", + " # Предсказание для обучающей и тестовой выборки\n", + " y_train_predict = model_pipeline.predict(X_train)\n", + " y_test_predict = model_pipeline.predict(X_test)\n", + "\n", + " # Сохранение пайплайна и предсказаний\n", + " class_models[model_name][\"pipeline\"] = model_pipeline\n", + " class_models[model_name][\"preds\"] = y_test_predict\n", + "\n", + " # Вычисление метрик для регрессии\n", + " class_models[model_name][\"MSE_train\"] = metrics.mean_squared_error(y_train, y_train_predict)\n", + " class_models[model_name][\"MSE_test\"] = metrics.mean_squared_error(y_test, y_test_predict)\n", + " class_models[model_name][\"MAE_train\"] = metrics.mean_absolute_error(y_train, y_train_predict)\n", + " class_models[model_name][\"MAE_test\"] = metrics.mean_absolute_error(y_test, y_test_predict)\n", + " class_models[model_name][\"R2_train\"] = metrics.r2_score(y_train, y_train_predict)\n", + " class_models[model_name][\"R2_test\"] = metrics.r2_score(y_test, y_test_predict)\n", + "\n", + " # Дополнительные метрики\n", + " class_models[model_name][\"STD_train\"] = np.std(y_train - y_train_predict)\n", + " class_models[model_name][\"STD_test\"] = np.std(y_test - y_test_predict)\n", + "\n", + " # Вывод результатов для текущей модели\n", + " print(f\"MSE (train): {class_models[model_name]['MSE_train']}\")\n", + " print(f\"MSE (test): {class_models[model_name]['MSE_test']}\")\n", + " print(f\"MAE (train): {class_models[model_name]['MAE_train']}\")\n", + " print(f\"MAE (test): {class_models[model_name]['MAE_test']}\")\n", + " print(f\"R2 (train): {class_models[model_name]['R2_train']}\")\n", + " print(f\"R2 (test): {class_models[model_name]['R2_test']}\")\n", + " print(f\"STD (train): {class_models[model_name]['STD_train']}\")\n", + " print(f\"STD (test): {class_models[model_name]['STD_test']}\")\n", + " print(\"-\" * 40) # Разделитель для разных моделей" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Пример использования обученной модели (конвейера регрессии) для предсказания" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: RandomForest\n", + "MSE (train): 24.028673442957558\n", + "MSE (test): 68.96006650623248\n", + "MAE (train): 1.548185999451937\n", + "MAE (test): 3.372747412240537\n", + "R2 (train): 0.8231149198653249\n", + "R2 (test): -1.9013866015383956\n", + "----------------------------------------\n", + "Прогнозируемое чистое состояние: 1.3689999999999998\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1, 2] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn import metrics\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.ensemble import RandomForestRegressor \n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "\n", + "# 1. Загрузка данных\n", + "data = pd.read_csv(\"..//static//csv//Forbes Billionaires.csv\") \n", + "\n", + "# 2. Подготовка данных для прогноза\n", + "average_networth = data['Networth'].mean()\n", + "data['above_average_networth'] = (data['Networth'] > average_networth).astype(int) \n", + "\n", + "# Предикторы и целевая переменная\n", + "X = data.drop('Networth', axis=1) \n", + "y = data['Networth']\n", + "\n", + "# 3. Инициализация модели и пайплайна\n", + "class_models = {\n", + " \"RandomForest\": {\n", + " \"model\": RandomForestRegressor(n_estimators=100, random_state=42),\n", + " }\n", + "}\n", + "\n", + "# Предобработка признаков\n", + "num_columns = ['Age']\n", + "cat_columns = ['Country', 'Source', 'Industry']\n", + "\n", + "# Преобразование числовых признаков\n", + "num_transformer = Pipeline(steps=[\n", + " ('imputer', SimpleImputer(strategy='median')),\n", + " ('scaler', StandardScaler())\n", + "])\n", + "\n", + "# Преобразование категориальных признаков\n", + "cat_transformer = Pipeline(steps=[\n", + " ('imputer', SimpleImputer(strategy='constant', fill_value='unknown')),\n", + " ('onehot', OneHotEncoder(handle_unknown='ignore', sparse_output=False, drop=\"first\"))\n", + "])\n", + "\n", + "# Создание конвейера предобработки\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('num', num_transformer, num_columns),\n", + " ('cat', cat_transformer, cat_columns)\n", + " ])\n", + "\n", + "# Создание конвейера модели\n", + "pipeline_end = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " # ('model', model) # Модель добавляется в цикле\n", + "])\n", + "\n", + "results = []\n", + "\n", + "# 4. Обучение модели и оценка\n", + "for model_name in class_models.keys():\n", + " print(f\"Model: {model_name}\")\n", + "\n", + " model = class_models[model_name][\"model\"]\n", + " model_pipeline = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('model', model)\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", + " model_pipeline.fit(X_train, y_train)\n", + "\n", + " # Предсказание\n", + " y_train_predict = model_pipeline.predict(X_train)\n", + " y_test_predict = model_pipeline.predict(X_test)\n", + "\n", + " # Сохранение результатов\n", + " class_models[model_name][\"preds\"] = y_test_predict\n", + "\n", + " # Вычисление метрик\n", + " class_models[model_name][\"MSE_train\"] = metrics.mean_squared_error(y_train, y_train_predict)\n", + " class_models[model_name][\"MSE_test\"] = metrics.mean_squared_error(y_test, y_test_predict)\n", + " class_models[model_name][\"MAE_train\"] = metrics.mean_absolute_error(y_train, y_train_predict)\n", + " class_models[model_name][\"MAE_test\"] = metrics.mean_absolute_error(y_test, y_test_predict)\n", + " class_models[model_name][\"R2_train\"] = metrics.r2_score(y_train, y_train_predict)\n", + " class_models[model_name][\"R2_test\"] = metrics.r2_score(y_test, y_test_predict)\n", + "\n", + " # Вывод результатов\n", + " print(f\"MSE (train): {class_models[model_name]['MSE_train']}\")\n", + " print(f\"MSE (test): {class_models[model_name]['MSE_test']}\")\n", + " print(f\"MAE (train): {class_models[model_name]['MAE_train']}\")\n", + " print(f\"MAE (test): {class_models[model_name]['MAE_test']}\")\n", + " print(f\"R2 (train): {class_models[model_name]['R2_train']}\")\n", + " print(f\"R2 (test): {class_models[model_name]['R2_test']}\")\n", + " print(\"-\" * 40)\n", + "\n", + "# Прогнозирование чистого состояния для нового миллиардера\n", + "new_billionaire_data = pd.DataFrame({\n", + " 'Age': [50],\n", + " 'Country': ['USA'],\n", + " 'Source': ['Self Made'], \n", + " 'Industry': ['Technology'], \n", + "})\n", + "\n", + "predicted_networth = model_pipeline.predict(new_billionaire_data)\n", + "print(f\"Прогнозируемое чистое состояние: {predicted_networth[0]}\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Подбор гиперпараметров методом поиска по сетке" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 3 folds for each of 36 candidates, totalling 108 fits\n", + "Лучшие параметры: {'max_depth': 30, 'min_samples_split': 2, 'n_estimators': 100}\n", + "Лучший результат (MSE): 5.88542132388105\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn import metrics\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.preprocessing import StandardScaler, OneHotEncoder, LabelEncoder\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.impute import SimpleImputer\n", + "\n", + "# Удаление строк с пропущенными значениями (если необходимо)\n", + "df = df.dropna()\n", + "\n", + "# Создание целевой переменной (Networth)\n", + "target = df['Networth']\n", + "\n", + "# Удаление целевой переменной из исходных данных\n", + "features = df.drop(columns=['Networth'])\n", + "\n", + "# Удаление столбцов, которые не будут использоваться (например, имена)\n", + "features = features.drop(columns=['Name'])\n", + "\n", + "# Определение столбцов для обработки\n", + "num_columns = features.select_dtypes(include=['number']).columns\n", + "cat_columns = features.select_dtypes(include=['object']).columns\n", + "\n", + "# Препроцессинг числовых столбцов\n", + "num_imputer = SimpleImputer(strategy=\"median\") # Используем медиану для заполнения пропущенных значений в числовых столбцах\n", + "num_scaler = StandardScaler()\n", + "preprocessing_num = Pipeline(\n", + " [\n", + " (\"imputer\", num_imputer),\n", + " (\"scaler\", num_scaler),\n", + " ]\n", + ")\n", + "\n", + "# Препроцессинг категориальных столбцов\n", + "cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\") # Используем 'unknown' для заполнения пропущенных значений в категориальных столбцах\n", + "cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n", + "preprocessing_cat = Pipeline(\n", + " [\n", + " (\"imputer\", cat_imputer),\n", + " (\"encoder\", cat_encoder),\n", + " ]\n", + ")\n", + "\n", + "# Объединение препроцессинга\n", + "features_preprocessing = ColumnTransformer(\n", + " verbose_feature_names_out=False,\n", + " transformers=[\n", + " (\"preprocessing_num\", preprocessing_num, num_columns),\n", + " (\"preprocessing_cat\", preprocessing_cat, cat_columns),\n", + " ],\n", + " remainder=\"passthrough\"\n", + ")\n", + "\n", + "# Создание финального пайплайна\n", + "pipeline_end = Pipeline(\n", + " [\n", + " (\"features_preprocessing\", features_preprocessing),\n", + " ]\n", + ")\n", + "\n", + "# Разделение данных на обучающую и тестовую выборки\n", + "X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)\n", + "\n", + "# Применение пайплайна к данным\n", + "X_train_processed = pipeline_end.fit_transform(X_train)\n", + "X_test_processed = pipeline_end.transform(X_test)\n", + "\n", + "# 2. Создание и настройка модели случайного леса\n", + "model = RandomForestRegressor()\n", + "\n", + "# Установка параметров для поиска по сетке\n", + "param_grid = {\n", + " 'n_estimators': [50, 100, 200], # Количество деревьев\n", + " 'max_depth': [None, 10, 20, 30], # Максимальная глубина дерева\n", + " 'min_samples_split': [2, 5, 10] # Минимальное количество образцов для разбиения узла\n", + "}\n", + "\n", + "# 3. Подбор гиперпараметров с помощью Grid Search\n", + "grid_search = GridSearchCV(estimator=model, param_grid=param_grid,\n", + " scoring='neg_mean_squared_error', cv=3, n_jobs=-1, verbose=2)\n", + "\n", + "# Обучение модели на тренировочных данных\n", + "grid_search.fit(X_train_processed, y_train)\n", + "\n", + "# 4. Результаты подбора гиперпараметров\n", + "print(\"Лучшие параметры:\", grid_search.best_params_)\n", + "print(\"Лучший результат (MSE):\", -grid_search.best_score_) # Меняем знак, так как берем отрицательное значение среднеквадратичной ошибки" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Обучение модели с новыми гиперпараметрами и сравнение новых и старых данных" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1, 2] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 3 folds for each of 36 candidates, totalling 108 fits\n", + "Старые параметры: {'max_depth': 20, 'min_samples_split': 2, 'n_estimators': 50}\n", + "Лучший результат (MSE) на старых параметрах: 72.77165438366572\n", + "\n", + "Новые параметры: {'max_depth': 10, 'min_samples_split': 10, 'n_estimators': 200}\n", + "Лучший результат (MSE) на новых параметрах: 198.80731577162513\n", + "Среднеквадратическая ошибка (MSE) на тестовых данных: 521.3309669218118\n", + "Корень среднеквадратичной ошибки (RMSE) на тестовых данных: 22.83267323205524\n" + ] + }, + { + "data": { + "image/png": "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SAkhhChxunXrxty5c/WCiQoVKvD111/TrVs3UlJS8l1/9mBNpVLpBFO5BWvm4ujoqLcQvUZQUBCnT5/Ocf+JEyeIi4tj2rRp+Pj4AHDkyBG9cocPH0alUukkXjDE398fNzc3AgICePXVV9m/f7/Ofh8fH522ZA/6NLy9vbVlhg8fTqdOnUhPT9d7XtevX8fKygo/P79c2/Q4Td2ff/459erV4/bt23h4eADqoW/Z2+fu7q5z7N69e/n++++1PZBXrlzh9u3bOmWGDBlC//79uXbtGoqiMHr0aG1WyBo1amBra0t0dHSew/g01zI3Gzdu5Pz582zevNng/qZNm/Lyyy+za9culixZwrp165gyZUqudQohCoYEUkIIIUqkx4dJffjhh3z11VdmC266devG6tWrDS76qwnWisLo0aNp2rQpQ4cOZeDAgTg6OnL69Gm2bt3Kt99+i6+vLzY2NsybN4933nmHkydPMnnyZJ06tm/fzpAhQ3jhhRfynEuWmppKSkoKUVFR/PXXX7Rs2dLkNqenp5OSksK9e/dYsmQJVapUwdraWqdMu3btaNasGV26dGH69OlUqVKFa9eusXnzZrp27UrDhg316t2xYweZmZlUrlyZO3fuMHHiRHx8fLRBlDECAwO1WQ4TEhL46KOP9BI8gDrhR+XKlQFwdnbWZuBzdnZm1KhRjBw5kqysLFq2bEl8fDx79+7FxcWFvn37mnClYPr06cybNy/HYXtr1qxh0aJFHD16FF9f36diLqAQJZVk7RNCCFEinTp1SuexlZWV2XuIunXrRlRUFNu3b2fZsmVs376dyMjIIguiAOrUqcPOnTs5f/48rVq1on79+owfP147RK9MmTIsWrSIVatWUaNGDaZNm8bMmTN16ujfvz+tWrViyZIleZ7P29sbe3t7WrVqRd26dZk6darJbe7Rowf29vZUqVKF2NhYVq5cqVdGpVJp55y99dZbVKlShddff53Lly/j5eVlsN67d+/y/vvvU716ddq3b096enqOPTk5+fnnn7l79y5BQUG8+eabDBs2zOTgZPLkyYwbN46pU6dSvXp1QkND2bx5M/7+/ibVA+retZyCr/PnzzNw4ECWLVuGr6+vyXULIcxLpZi6uMVTKCEhAVdXV+Lj43FxcSnq5gghhDBCr169WL58OeXKlePatWt0795dZ+2elJQUIiMj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8uRJ6tev/0RtyosM7RNCCFFi5JSxD9QZnYzN3GeMzEzdIEpj3Dj1dgN5FgqdtbU177//PgcPHuTo0aP069ePpk2bar88jR8/nsWLFzNx4kROnTrFmTNnWLFiBWMfjldMTExk/MOosGXLlly/fp3r16/z4MEDUlNTtYsbf/rppxw+fJj33nuP48ePc/bsWebPn8/t27e1bdF8ua1YsSIzZszg3XffJS4uDlB/iT9y5Ah///0358+fZ9y4cdokABrff/89p06dIioqiiVLlrB161btlyBjjje3lJQUHjx4wNGjR9mzZw+1atXSKzN69Gj27dvH0KFDCQsL48KFC2zYsCHXZBMLFy4kPDycy5cvs3HjRpYvX27Sl72AgADS09OZN28ely5d4rfffuOHH34wWNbLy4uAgAC9L7i9e/fGw8ODzp07s3v3biIjI9mxYwfDhg0zGAjl5uLFi+zYsUP7Pnqcoij06dOHoKAgPvnkE23vR27atGlDYmKiTurqnj174u3tTZcuXdi7dy+XLl1izZo17N+/36h2BgYGsnbtWsLCwggPD6dXr17arJDZ7d27l+nTp3P+/Hm+++47Vq1axfDhw3XKpKenk5KSwvXr11myZAlVqlTR66Vp164dzZo1o0uXLmzZsoWoqCj27dvHZ5999kQLxRr7+uf1u8HY6wHq360//PADM2fO1P6OzS4/nwNDzHXtNXbv3k2HDh1MaoOpJJASQghRImRlZeUaSIF515KaMCHnHqdx4wpuQV5TODg4MHr0aHr16kWLFi1wcnJi5cqV2v0hISFs2rSJLVu20KhRI5o2bcqcOXOoWLEiADNnzmTGjBncv3+fgIAAypYtS9myZfn999/53//+p/0SU6VKFbZs2UJ4eDiNGzemWbNmbNiwQW+emsbgwYOpVasW77//vvZxt27deO2112jSpAlxcXE6vUsAmzdvJjg4mGrVqjFx4kTGjBlD//79jT7enOLj47G3t8fR0ZGXXnqJrl278sEHH+iVq1OnDjt37uT8+fO0atWK+vXrM378eMqVK5dj3fv37yc0NJQqVarw/vvv07t3b8aZ0LVZt25dZs+ezVdffUWtWrVYunQpU6dONen5OTg4sGvXLnx9fenWrRvVq1dnwIABpKSk5NpDZUhSUhKfffZZjr1E06ZN48KFC/z8889G11m6dGm6du2qM/TQ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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn import metrics\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "from sklearn.preprocessing import StandardScaler, OneHotEncoder, LabelEncoder\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.pipeline import Pipeline\n", + "import matplotlib.pyplot as plt\n", + "\n", + "df = pd.read_csv(\"..//static//csv//Forbes Billionaires.csv\").head(100)\n", + "\n", + "df = df.dropna()\n", + "\n", + "# Создание целевой переменной (Networth)\n", + "target = df['Networth']\n", + "\n", + "# Удаление целевой переменной из исходных данных\n", + "features = df.drop(columns=['Networth'])\n", + "\n", + "# Удаление столбцов, которые не будут использоваться (например, имена)\n", + "features = features.drop(columns=['Name'])\n", + "\n", + "# Определение столбцов для обработки\n", + "num_columns = features.select_dtypes(include=['number']).columns\n", + "cat_columns = features.select_dtypes(include=['object']).columns\n", + "\n", + "# Препроцессинг числовых столбцов\n", + "num_imputer = SimpleImputer(strategy=\"median\") # Используем медиану для заполнения пропущенных значений в числовых столбцах\n", + "num_scaler = StandardScaler()\n", + "preprocessing_num = Pipeline(\n", + " [\n", + " (\"imputer\", num_imputer),\n", + " (\"scaler\", num_scaler),\n", + " ]\n", + ")\n", + "\n", + "# Препроцессинг категориальных столбцов\n", + "cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\") # Используем 'unknown' для заполнения пропущенных значений в категориальных столбцах\n", + "cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n", + "preprocessing_cat = Pipeline(\n", + " [\n", + " (\"imputer\", cat_imputer),\n", + " (\"encoder\", cat_encoder),\n", + " ]\n", + ")\n", + "\n", + "# Объединение препроцессинга\n", + "features_preprocessing = ColumnTransformer(\n", + " verbose_feature_names_out=False,\n", + " transformers=[\n", + " (\"preprocessing_num\", preprocessing_num, num_columns),\n", + " (\"preprocessing_cat\", preprocessing_cat, cat_columns),\n", + " ],\n", + " remainder=\"passthrough\"\n", + ")\n", + "\n", + "# Создание финального пайплайна\n", + "pipeline_end = Pipeline(\n", + " [\n", + " (\"features_preprocessing\", features_preprocessing),\n", + " ]\n", + ")\n", + "\n", + "# Разделение данных на обучающую и тестовую выборки\n", + "X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)\n", + "\n", + "# Применение пайплайна к данным\n", + "X_train_processed = pipeline_end.fit_transform(X_train)\n", + "X_test_processed = pipeline_end.transform(X_test)\n", + "\n", + "# 1. Настройка параметров для старых значений\n", + "old_param_grid = {\n", + " 'n_estimators': [50, 100, 200], # Количество деревьев\n", + " 'max_depth': [None, 10, 20, 30], # Максимальная глубина дерева\n", + " 'min_samples_split': [2, 5, 10] # Минимальное количество образцов для разбиения узла\n", + "}\n", + "\n", + "# Подбор гиперпараметров с помощью Grid Search для старых параметров\n", + "old_grid_search = GridSearchCV(estimator=RandomForestRegressor(), \n", + " param_grid=old_param_grid,\n", + " scoring='neg_mean_squared_error', cv=3, n_jobs=-1, verbose=2)\n", + "\n", + "# Обучение модели на тренировочных данных\n", + "old_grid_search.fit(X_train_processed, y_train)\n", + "\n", + "# 2. Результаты подбора для старых параметров\n", + "old_best_params = old_grid_search.best_params_\n", + "old_best_mse = -old_grid_search.best_score_ # Меняем знак, так как берем отрицательное значение MSE\n", + "\n", + "# 3. Настройка параметров для новых значений\n", + "new_param_grid = {\n", + " 'n_estimators': [200],\n", + " 'max_depth': [10],\n", + " 'min_samples_split': [10]\n", + "}\n", + "\n", + "# Подбор гиперпараметров с помощью Grid Search для новых параметров\n", + "new_grid_search = GridSearchCV(estimator=RandomForestRegressor(), \n", + " param_grid=new_param_grid,\n", + " scoring='neg_mean_squared_error', cv=2)\n", + "\n", + "# Обучение модели на тренировочных данных\n", + "new_grid_search.fit(X_train_processed, y_train)\n", + "\n", + "# 4. Результаты подбора для новых параметров\n", + "new_best_params = new_grid_search.best_params_\n", + "new_best_mse = -new_grid_search.best_score_ # Меняем знак, так как берем отрицательное значение MSE\n", + "\n", + "# 5. Обучение модели с лучшими параметрами для новых значений\n", + "model_best = RandomForestRegressor(**new_best_params)\n", + "model_best.fit(X_train_processed, y_train)\n", + "\n", + "# Прогнозирование на тестовой выборке\n", + "y_pred = model_best.predict(X_test_processed)\n", + "\n", + "# Оценка производительности модели\n", + "mse = metrics.mean_squared_error(y_test, y_pred)\n", + "rmse = np.sqrt(mse)\n", + "\n", + "# Вывод результатов\n", + "print(\"Старые параметры:\", old_best_params)\n", + "print(\"Лучший результат (MSE) на старых параметрах:\", old_best_mse)\n", + "print(\"\\nНовые параметры:\", new_best_params)\n", + "print(\"Лучший результат (MSE) на новых параметрах:\", new_best_mse)\n", + "print(\"Среднеквадратическая ошибка (MSE) на тестовых данных:\", mse)\n", + "print(\"Корень среднеквадратичной ошибки (RMSE) на тестовых данных:\", rmse)\n", + "\n", + "# Обучение модели с лучшими параметрами для старых значений\n", + "model_old = RandomForestRegressor(**old_best_params)\n", + "model_old.fit(X_train_processed, y_train)\n", + "\n", + "# Прогнозирование на тестовой выборке для старых параметров\n", + "y_pred_old = model_old.predict(X_test_processed)\n", + "\n", + "# Визуализация ошибок\n", + "plt.figure(figsize=(10, 5))\n", + "plt.plot(y_test.values, label='Реальные значения', marker='o', linestyle='-', color='black')\n", + "plt.plot(y_pred_old, label='Предсказанные значения (старые параметры)', marker='x', linestyle='--', color='blue')\n", + "plt.plot(y_pred, label='Предсказанные значения (новые параметры)', marker='s', linestyle='--', color='orange')\n", + "plt.xlabel('Объекты')\n", + "plt.ylabel('Значения')\n", + "plt.title('Сравнение реальных и предсказанных значений')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Модель, обученная на новых параметрах, показала худший результат (MSE) на кросс-валидации, что указывает на ее меньшую точность по сравнению с моделью, обученной на старых параметрах. Однако, MSE на тестовых данных одинакова для обеих моделей, что говорит о том, что обе модели имеют одинаковую производительность на тестовых данных." + ] + } + ], + "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 +}