diff --git a/lab_4/lab_4.ipynb b/lab_4/lab_4.ipynb new file mode 100644 index 0000000..43d4dd4 --- /dev/null +++ b/lab_4/lab_4.ipynb @@ -0,0 +1,6625 @@ +{ + "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": "markdown", + "metadata": {}, + "source": [ + "Загрузка данных и создание целевой переменной" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "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", + "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_close" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "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": [ + "#### Формирование конвейера для классификации данных\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": 44, + "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()), \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": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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_diversifiedNetworth_per_Age
582-0.013606-0.1099340.00.00.00.00.00.00.00.0...0.00.00.01.00.00.00.00.00.00.123766
481.9940831.0790790.00.00.00.00.00.00.00.0...1.00.00.00.00.00.00.00.00.01.847949
1772-0.2881621.0047660.01.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.0-0.286795
964-0.159464-0.4071870.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.391623
2213-0.3224811.3020190.00.00.00.00.00.01.00.0...0.00.00.00.00.00.00.00.00.0-0.247678
..................................................................
1638-0.2710021.2277060.00.00.00.00.00.00.00.0...1.00.00.00.00.00.00.00.00.0-0.220739
1095-0.1937830.8561390.00.00.00.00.00.01.00.0...0.00.00.00.00.00.00.00.00.0-0.226346
1130-0.1937830.7818260.00.00.00.00.00.00.00.0...0.00.00.01.00.00.00.00.00.0-0.247860
1294-0.2281030.3359460.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.0-0.678986
860-0.1337240.5588860.00.00.00.00.00.00.00.0...1.00.00.00.00.00.00.00.00.0-0.239269
\n", + "

2080 rows × 857 columns

\n", + "
" + ], + "text/plain": [ + " Networth Age Country_Argentina Country_Australia \\\n", + "582 -0.013606 -0.109934 0.0 0.0 \n", + "48 1.994083 1.079079 0.0 0.0 \n", + "1772 -0.288162 1.004766 0.0 1.0 \n", + "964 -0.159464 -0.407187 0.0 0.0 \n", + "2213 -0.322481 1.302019 0.0 0.0 \n", + "... ... ... ... ... \n", + "1638 -0.271002 1.227706 0.0 0.0 \n", + "1095 -0.193783 0.856139 0.0 0.0 \n", + "1130 -0.193783 0.781826 0.0 0.0 \n", + "1294 -0.228103 0.335946 0.0 0.0 \n", + "860 -0.133724 0.558886 0.0 0.0 \n", + "\n", + " Country_Austria Country_Barbados Country_Belgium Country_Belize \\\n", + "582 0.0 0.0 0.0 0.0 \n", + "48 0.0 0.0 0.0 0.0 \n", + "1772 0.0 0.0 0.0 0.0 \n", + "964 0.0 0.0 0.0 0.0 \n", + "2213 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... \n", + "1638 0.0 0.0 0.0 0.0 \n", + "1095 0.0 0.0 0.0 0.0 \n", + "1130 0.0 0.0 0.0 0.0 \n", + "1294 0.0 0.0 0.0 0.0 \n", + "860 0.0 0.0 0.0 0.0 \n", + "\n", + " Country_Brazil Country_Bulgaria ... Industry_Manufacturing \\\n", + "582 0.0 0.0 ... 0.0 \n", + "48 0.0 0.0 ... 1.0 \n", + "1772 0.0 0.0 ... 0.0 \n", + "964 0.0 0.0 ... 0.0 \n", + "2213 1.0 0.0 ... 0.0 \n", + "... ... ... ... ... \n", + "1638 0.0 0.0 ... 1.0 \n", + "1095 1.0 0.0 ... 0.0 \n", + "1130 0.0 0.0 ... 0.0 \n", + "1294 0.0 0.0 ... 0.0 \n", + "860 0.0 0.0 ... 1.0 \n", + "\n", + " Industry_Media & Entertainment Industry_Metals & Mining \\\n", + "582 0.0 0.0 \n", + "48 0.0 0.0 \n", + "1772 0.0 0.0 \n", + "964 0.0 0.0 \n", + "2213 0.0 0.0 \n", + "... ... ... \n", + "1638 0.0 0.0 \n", + "1095 0.0 0.0 \n", + "1130 0.0 0.0 \n", + "1294 0.0 0.0 \n", + "860 0.0 0.0 \n", + "\n", + " Industry_Real Estate Industry_Service Industry_Sports \\\n", + "582 1.0 0.0 0.0 \n", + "48 0.0 0.0 0.0 \n", + "1772 0.0 0.0 0.0 \n", + "964 0.0 0.0 0.0 \n", + "2213 0.0 0.0 0.0 \n", + "... ... ... ... \n", + "1638 0.0 0.0 0.0 \n", + "1095 0.0 0.0 0.0 \n", + "1130 1.0 0.0 0.0 \n", + "1294 0.0 0.0 0.0 \n", + "860 0.0 0.0 0.0 \n", + "\n", + " Industry_Technology Industry_Telecom Industry_diversified \\\n", + "582 0.0 0.0 0.0 \n", + "48 0.0 0.0 0.0 \n", + "1772 0.0 0.0 0.0 \n", + "964 0.0 0.0 0.0 \n", + "2213 0.0 0.0 0.0 \n", + "... ... ... ... \n", + "1638 0.0 0.0 0.0 \n", + "1095 0.0 0.0 0.0 \n", + "1130 0.0 0.0 0.0 \n", + "1294 0.0 0.0 0.0 \n", + "860 0.0 0.0 0.0 \n", + "\n", + " Networth_per_Age \n", + "582 0.123766 \n", + "48 1.847949 \n", + "1772 -0.286795 \n", + "964 0.391623 \n", + "2213 -0.247678 \n", + "... ... \n", + "1638 -0.220739 \n", + "1095 -0.226346 \n", + "1130 -0.247860 \n", + "1294 -0.678986 \n", + "860 -0.239269 \n", + "\n", + "[2080 rows x 857 columns]" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preprocessing_result = pipeline_end.fit_transform(X_train)\n", + "preprocessed_df = pd.DataFrame(\n", + " preprocessing_result,\n", + " columns=pipeline_end.get_feature_names_out(),\n", + ")\n", + "\n", + "preprocessed_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Формирование набора моделей для классификации\n", + "\n", + "logistic -- логистическая регрессия\n", + "\n", + "ridge -- гребневая регрессия\n", + "\n", + "decision_tree -- дерево решений\n", + "\n", + "knn -- k-ближайших соседей\n", + "\n", + "naive_bayes -- наивный Байесовский классификатор\n", + "\n", + "gradient_boosting -- метод градиентного бустинга (набор деревьев решений)\n", + "\n", + "random_forest -- метод случайного леса (набор деревьев решений)\n", + "\n", + "mlp -- многослойный персептрон (нейронная сеть)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn import ensemble, linear_model, naive_bayes, neighbors, neural_network, tree\n", + "\n", + "class_models = {\n", + " \"logistic\": {\"model\": linear_model.LogisticRegression()},\n", + " \"ridge\": {\"model\": linear_model.RidgeClassifierCV(cv=5, class_weight=\"balanced\")},\n", + " \"ridge\": {\"model\": linear_model.LogisticRegression(penalty=\"l2\", class_weight=\"balanced\")},\n", + " \"decision_tree\": {\n", + " \"model\": tree.DecisionTreeClassifier(max_depth=7, random_state=random_state)\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=random_state\n", + " )\n", + " },\n", + " \"mlp\": {\n", + " \"model\": neural_network.MLPClassifier(\n", + " hidden_layer_sizes=(7,),\n", + " max_iter=500,\n", + " early_stopping=True,\n", + " random_state=random_state,\n", + " )\n", + " },\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Обучение моделей на обучающем наборе данных и оценка на тестовом" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "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" + ] + }, + { + "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: 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" + ] + }, + { + "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" + ] + }, + { + "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: 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" + ] + }, + { + "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", + " class_models[model_name][\"Precision_train\"] = metrics.precision_score(\n", + " y_train, y_train_predict\n", + " )\n", + " class_models[model_name][\"Precision_test\"] = metrics.precision_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Recall_train\"] = metrics.recall_score(\n", + " y_train, y_train_predict\n", + " )\n", + " class_models[model_name][\"Recall_test\"] = metrics.recall_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Accuracy_train\"] = metrics.accuracy_score(\n", + " y_train, y_train_predict\n", + " )\n", + " class_models[model_name][\"Accuracy_test\"] = metrics.accuracy_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"ROC_AUC_test\"] = metrics.roc_auc_score(\n", + " y_test, y_test_probs\n", + " )\n", + " class_models[model_name][\"F1_train\"] = metrics.f1_score(y_train, y_train_predict)\n", + " class_models[model_name][\"F1_test\"] = metrics.f1_score(y_test, y_test_predict)\n", + " class_models[model_name][\"MCC_test\"] = metrics.matthews_corrcoef(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(\n", + " y_test, y_test_predict\n", + " )\n", + " class_models[model_name][\"Confusion_matrix\"] = metrics.confusion_matrix(\n", + " y_test, y_test_predict\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Сводная таблица оценок качества для использованных моделей классификации\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__Матрица неточностей__" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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x/j444/x4MEDNGrUCLNmzZI6heq4tv9yd3fHoUOH8OzZM5VvC4v774TKFoePEhUi706YEELal5qami+4CmJjY4OAgABs3LgR69evh4mJCXr06KFSp0+fPoiMjMSePXvyvT8lJQU5OTklanNOTg5++OEH6XVWVhZ++OEHODg4wNfXt8DrOnXqFCIjI196zHfffRdXr17F+PHjYWhoiH79+uW7hrt372L58uX53vv8+XNpCEtycnK+8gYNGgBAvkdXEBGR9jE0NET79u2xbds2lTlqsbGx2LVrV7GPIZPJVB5fcOvWLWml6jx5HZYFCxao7C/OqtwBAQGwsrLC7NmzkZ2dna/84cOHxWrri/I6NikpKSV+b55169bhyZMn0uvNmzcjMTFRutbGjRvD0dERy5YtU8nFXbt2ITo6Wlp51cXFBQ0aNMDatWtV2nP58mXs3bsXXbp0AZA7B/S/00IcHR3h6uqqcnxzc/NCp8S8ioCAAGRnZ6v8baBUKrF48WK1nofUg98UEhWiY8eOMDExQdeuXfHhhx8iPT0dy5cvh6OjIxITE4t1jL59+2LgwIFYsmQJAgICpMVW8owfPx7bt2/HW2+9hcGDB8PX1xdPnz7FpUuXsHnzZty6dUtluGlRXF1d8fXXX+PWrVuoWbMmNmzYgKioKPz4448wNjYGALz11lvYunUrevbsicDAQNy8eRPLli2Dj48P0tPT8x0zMDAQdnZ22LRpEzp37gxHR0eV8nfffRcbN27ERx99hEOHDqF58+ZQKBT466+/sHHjRuzZsweNGzdGSEgIjh49isDAQLi7u+PBgwdYsmQJKleujBYtWhT7GomISHOmTZuGvXv3onnz5hg+fDgUCgUWLVqEOnXqICoqqsj3BwYG4rvvvkOnTp0wYMAAPHjwAIsXL4anpycuXrwo1WvQoAH69++PJUuWIDU1Fc2aNcOBAweK9U2TlZUVli5dinfffReNGjVCv3794ODggPj4eOzcuRPNmzdXeV5wcZiZmcHHxwcbNmxAzZo1YWtrizp16qBOnTrFPoatrS1atGiBIUOG4P79+5g/fz48PT2lxViMjY3x9ddfY8iQIfD390f//v2lR1JUrVoVY8eOlY71zTffoHPnzvDz88PQoUOlR1JYW1tLz0988uQJKleujLfffhv169eHhYUF9u/fjzNnzmDu3LnSsXx9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b28v7t+/L4QQYuzYsaJTp05CCCFUKpVwcHAQTk5OYseOHUIIIb7//ntRuXLlImtPSEgQcrlcpKamivv37wtzc3Nx7do1IYQQqampwszMTOzdu1da//79+2rzDh06JGxsbERkZKRITEwUu3fvFtWrVxfTpk2T3gNAVKpUSaxZs0YkJiaK69evi+zsbDFlyhRx4sQJcfXqVfH9998LCwsLsX79eul9M2fOFA4ODuLnn38WcXFxYujQocLGxkbtHM2cOVO4urqK2rVri8TERDF69GgBQOzfv19aZ//+/QKA8PHxEbt37xbnz58XnTt3FtWrVxfZ2dlCCCFOnjwpjIyMRHh4uIiPjxdr164VCoVCrF27VgghxJ9//ikAiISEBGm7+fOuXLkinW83NzexceNGcfXqVbFx40bh4OAgIiMji/wZREREiMaNGwshhNiyZYuoVauWUKlUQgghtm7dKhQKhXj06JG0/pYtW4RCoRAPHz6UzkGdOnXEzp07RWJioli7dq2Qy+XiwIEDasffoEEDsXv3bpGQkCDu378vzp49K5YvXy4uXLggLl++LD7//HNhbm4url+/Lu2rffv2omHDhuLYsWPi1KlTIiAgQCgUCrFgwQK1dbp06SJOnDghLl++LD755BPh6Ogo/T8lItIGZjOzOf98M5uZzaXFRiG9lJCQEGFsbCwsLS2FpaWlACDc3NzEqVOnpHW+++474e3tLX2gCCFEVlaWUCgUYteuXdJ28j9UMzIyhKmpqYiOjpbWz87OFu7u7mLu3LlCCCF+/fVXYWtrK3Jzc8XZs2eFq6urGD16tBg/frwQQojBgweLfv36FVn7xIkTRbdu3aTXXbt2FVOnTlV7/f7770uvV6xYIdzd3aVAbdeunZg9e7baNr/77jvh5uYmvQYgPv744yLrEEKI4cOHi549e0qvXVxcxLx586TXubm5omrVqtI5yszMFBYWFqJ+/fpi4cKFQgghcnJyhLm5uWjbtq30vvwP3nXr1knz7t+/LxQKhRR0/fr1E4GBgWr1fPrpp6Ju3brSa19fXxEeHi69njBhgmjWrJn0ulatWiImJkZtGzNmzBD+/v5FHnfz5s3V6ndycpKCM/91VFSUtH7fvn1F79691c7B77//rrbNQYMGib59+6od/+bNm4usQwgh6tWrJ77++mshhBBxcXECgDhx4oS0/MqVKwKAFDyHDx8WNjY2IjMzU207tWrVEitWrCh2f0REZYXZzGwWgtn8LGZzybH7KL20Nm3a4OzZszh79iyOHz+OoKAgdOzYEdevXwcAnDt3DgkJCbC2toaVlRWsrKzg4OCAzMxMJCYmFtheYmIicnJy0KJFC2meqakpmjZtiri4OADAm2++iUePHuHMmTM4ePAgAgIC0Lp1axw4cAAAcPDgQbRu3brQmpVKJb799lv0799fmte/f39ERkZK3VKCg4OxceNGaZB7dHQ0+vTpAyMjI+m4wsPDpWOysrLCkCFDkJKSgidPnkjbbdy4cYH9L126FH5+fnB2doaVlRVWrlyJGzduAADS09Nx584dNG3aVFrf2NgYfn5+0uuEhAQ8efIEFy5cwMSJE2FlZQU7OztkZ2e/sIuEv7+/9G8HBwd4e3tL5zIuLk7tXANAixYtcOXKFSiVSulcxMTEAMjr+//DDz8gODgYAPD48WMkJiZi0KBBaudi5syZL/z55ouPj8fx48fRt29fAICJiQl69+4tdRUyMTFBr169EB0dLe3nl19+kfabfw4CAwPV9hsVFVVgv8//DDIyMhAWFgYfHx/Y2dnBysoKcXFx0s8gPj4eJiYmaNSokfQeT09P2NvbS6/PnTuHjIwMODo6qu0/KSmpyOMmIioPzGZmM7OZ2fwyTLRdAOkvS0tLeHp6Sq9Xr14NW1tbrFq1CjNnzkRGRgb8/PykD5BnOTs7v9Q+7ezs4OvriwMHDuDo0aMIDAxEq1at0Lt3b1y+fBlXrlxBQEBAoe/ftWsX/v777wL94pVKJfbt24fAwEB06dIFQghs27YNTZo0weHDh7FgwQJp3YyMDEyfPh09evQosH1zc3Pp35aWlmrL1q1bh7CwMMyfPx/+/v6wtrbGvHnz8Mcff5T4+PPHZwAocGe2x48fIz09Hba2tiXeXnH69u2L8ePH4/Tp03j69CmSk5Olc5dfy6pVqwqMbzA2Ni50mxEREcjNzYW7u7s0TwgBuVyOJUuWwNbWFsHBwQgICMDdu3exZ88eKBQKdOjQQW2/27ZtQ+XKldW2LZfL1V4//zMICwvDnj178OWXX8LT0xMKhQLvvvsusrOzS3xOMjIy4ObmJv2x8yw7O7sSb4eIqCwwm5nNALP5WczmkmGjkDRGJpPByMgIT58+BQA0atQI69evR6VKlWBjY1Ps+2vVqgUzMzPExsaiWrVqAPIGMZ84cQIff/yxtF5AQAD279+P48ePY9asWXBwcICPjw9mzZoFNzc3eHl5FbqPiIgI9OnTB5MmTVKbP2vWLERERCAwMBDm5ubo0aMHoqOjkZCQAG9vb7WrU40aNUJ8fLxa6JZEbGwsmjdvjo8++kia9+zVK1tbW7i4uODEiRNo1aoVgLxAPH36NBo2bAgA0rH17dsXEydOVNt+t27d8MMPP2Do0KHSvGPHjqFq1aoAgLS0NFy+fBk+Pj4AAB8fH8TGxhao0cvLSwqOKlWqICAgANHR0Xj69CkCAwNRqVIlAICLiwvc3d1x9epV6UphcXJzcxEVFYX58+fjrbfeKrT+5s2bw8PDA+vXr8eOHTvw3nvvwdTUFABQt25dyOVy3Lhxo8g/Ml4kNjYWoaGh6N69O4C8EHn25gre3t7Izc3FmTNnpKvACQkJSEtLk9Zp1KgRbt++DRMTE1SvXr1U+yciKm/M5qIxm5nN9C9t9l0l/RUSEiI6dOggUlJSREpKirh06ZL46KOPhEwmk/qfP378WNSuXVu0bt1aHDp0SFy9elXs379fjBw5UiQnJ0vbeXag9ujRo4W7u7vYsWOH2mD21NRUaZ3NmzcLY2Nj4erqqvY+Y2Nj0adPn0Jrvnv3rjA1NZUGvj9r+/btQi6XS4OR9+zZI+RyufD29hYzZsxQW3fnzp3CxMRETJs2Tfz555/i0qVL4ocffhCTJk2S1gEgNm3apPa+RYsWCRsbG7Fz504RHx8vPv/8c2FjYyN8fX2ldWbOnCkcHR3F5s2bxV9//SWGDx8ubGxspHEWmzZtEsbGxsLe3l5ERkaKhIQEcerUKbF48WLx9ttvSwPE8/vt16tXT+zdu1dcuHBBvPPOO6Jq1arSjQROnTqlNpg9MjJSbTB7vlWrVgl3d3fh5OQkvvvuuwLLFAqFWLRokYiPjxfnz58Xa9asEfPnz3/hz2DTpk3CzMxMPHjwoMCycePGSfULIcSkSZNE3bp1hYmJiTh8+LDaupMmTRKOjo4FzkH+IPr8409LS1N7X/fu3UXDhg3FmTNnxNmzZ0WXLl2EtbW1GD16tLRO+/btRaNGjcQff/whTp8+Ldq0aSMUCoU0zkKlUomWLVsKX19fsWvXLpGUlCRiY2PFxIkT1cY7EBGVN2Yzszl/GbOZ2VxabBTSSwkJCREApMna2lo0adJEbNiwQW29lJQUMWDAAOHk5CTkcrmoWbOmGDJkiEhPT5e282zwPH36VIwcOVJav0WLFuL48eNq27x//76QyWTS4GYh8j7QAIjly5cXWvOXX34p7OzspDt8PSsrK0vY2dmJRYsWCSGEUCqVws3NTQAQiYmJBdbfuXOnaN68uVAoFMLGxkY0bdpUrFy5Ulr+ouDJzMwUoaGhwtbWVtjZ2Ylhw4aJzz77TC14cnJyxIgRI4SNjY2wt7cX48ePF++9954UqJ07dxZvv/22WLhwofD29hampqbC2dlZBAUFieXLlwsA4ty5c9IH75YtW0S9evWEmZmZaNq0qTh37pxaTRs2bBB169YVpqamomrVqmoD6fOlpaUJuVwuLCws1O46li86Olo0bNhQmJmZCXt7e9GqVSvx888/v/BnkF//i/zxxx9S/UIIcenSJQFAVKtWTe2GCELkffi/6BwcPHhQCFF48CQlJUlB4uHhIZYsWSICAgLUgufWrVuiY8eOQi6Xi2rVqomYmBhRqVIltf9bDx8+FCNHjhTu7u7C1NRUeHh4iODgYHHjxo0XHhsRUXlgNjOb8zGbmc2lJRNCiPL5TpKISkulUsHHxwe9evXCjBkztF1OhXTz5k14eHhg7969aNeunbbLISIiLWM2ax+zWfM4ppBIh1y/fh27d+9GQEAAsrKysGTJEiQlJaFfv37aLq3C+O2335CRkYH69esjJSUF48aNQ/Xq1aWxJEREVLEwm7WP2Vz22Cgk0iFGRkaIjIxEWFgYhBB47bXXsHfvXmkAOpW9nJwcTJw4EVevXoW1tTWaN2+O6OhoaTA9ERFVLMxm7WM2lz12HyUiIiIiIqrA+PB6IiIiIiKiCoyNQiIiIiIiogqMjUIiIiIiIqIKjI1CIiIiIiKiCoyNQiIiIiIiogqMjUKiMhYaGopu3bpJr1u3bo2PP/643Os4cOAAZDIZHjx4UOg6MpkMmzdvLvE2p02bhoYNG75SXdeuXYNMJsPZs2dfaTtEREQlxWwuGrO54mGjkCqk0NBQyGQyyGQymJmZwdPTE+Hh4cjNzS3zff/888+YMWNGidYtSVgQEREZAmYzkfbw4fVUYXXo0AFr165FVlYWtm/fjuHDh8PU1BQTJkwosG52djbMzMw0sl8HBweNbIeIiMjQMJuJtIPfFFKFJZfL4erqimrVqmHYsGFo3749fv31VwD/dSuZNWsW3N3d4e3tDQBITk5Gr169YGdnBwcHB3Tt2hXXrl2TtqlUKjF27FjY2dnB0dER48aNgxBCbb/Pd1HJysrC+PHj4eHhAblcDk9PT0RERODatWto06YNAMDe3h4ymQyhoaEAAJVKhTlz5qBGjRpQKBTw9fXFhg0b1Pazfft2eHl5QaFQoE2bNmp1ltT48ePh5eUFCwsL1KxZE5MnT0ZOTk6B9VasWAEPDw9YWFigV69eSE9PV1u+evVq+Pj4wNzcHHXq1ME333xT6lqIiMjwMZuLx2ymssBGIdG/FAoFsrOzpdf79u1DfHw89uzZg61btyInJwdBQUGwtrbG4cOHERsbCysrK3To0EF63/z58xEZGYk1a9bgyJEjSE1NxaZNm4rc74ABA/DDDz9g8eLFiIuLw4oVK2BlZQUPDw9s3LgRABAfH4+UlBQsWrQIADBnzhxERUVh+fLluHjxIsaMGYP+/fvj4MGDAPICskePHujSpQvOnj2LwYMH47PPPiv1ObG2tkZkZCQuXbqERYsWYdWqVViwYIHaOgkJCfjxxx+xZcsW7Ny5E2fOnMFHH30kLY+OjsaUKVMwa9YsxMXFYfbs2Zg8eTK+/fbbUtdDREQVC7O5IGYzlQlBVAGFhISIrl27CiGEUKlUYs+ePUIul4uwsDBpuYuLi8jKypLe89133wlvb2+hUqmkeVlZWUKhUIhdu3YJIYRwc3MTc+fOlZbn5OSIKlWqSPsSQoiAgAAxevRoIYQQ8fHxAoDYs2fPC+vcv3+/ACDS0tKkeZmZmcLCwkL8/vvvausOGjRI9O3bVwghxIQJE0TdunXVlo8fP77Atp4HQGzatKnQ5fPmzRN+fn7S66lTpwpjY2Nx8+ZNad6OHTuEkZGRSElJEUIIUatWLRETE6O2nRkzZgh/f38hhBBJSUkCgDhz5kyh+yUiIsPHbH4xZjOVB44ppApr69atsLKyQk5ODlSq/2/vfkKi7KI4jv8mdUaxcYy0dIQMmZAC8U9CtMgICpdtpKABBxQhXChGrlqUbmpjygS6ELQWhrYIodongtZCSVyU5VM4hC6CQBgsxOa8C3FoXsucF3uDnu9nN8+9c+95FjOHc3nOTEJXrlzRrVu3kuMVFRUpvQpzc3NaXFyU3+9PWefr169yHEerq6taWVnRqVOnkmOZmZmqra3d9pjKllevXikjI0Nnz57dddyLi4taW1vThQsXUq6vr6+rurpakvT69euUOCTp9OnTu95jy9jYmKLRqBzHUTwe18bGhvLy8lLmHDlyRCUlJSn7JBIJLSwsyO/3y3EcNTc3q6WlJTlnY2NDgUAg7XgAAH83cvOvkZvxO1AUwrXOnTungYEBeb1eBYNBZWamfhxyc3NTXsfjcZ08eVIjIyPb1iosLPxPMeTk5KT9nng8Lkl69uxZyhe+tNmLsVemp6cVDofV1dWl+vp6BQIBjY6OqqenJ+1YBwcHtyXCjIyMPYsVAPB3IDfvjNyM34WiEK6Vm5urUCi06/k1NTUaGxvToUOHtp3IbSkuLtbLly9VV1cnafPUbWZmRjU1NT+cX1FRoUQioYmJCZ0/f37b+NZp6Ldv35LXTpw4IZ/Pp1gs9tNTzOPHjycb87e8ePHi1zf5nampKZWWlurGjRvJa0tLS9vmxWIxLS8vKxgMJvfZt2+fysvLdfjwYQWDQb1//17hcDit/QEA7kNu3hm5Gb8LPzQD7FI4HFZBQYEuXryoyclJffjwQc+fP1dbW5s+fvwoSWpvb9edO3c0Pj6uN2/eqLW1dcf/MTp69KgikYiampo0Pj6eXPPRo0eSpNLSUnk8Hj19+lSfPn1SPB6X3+/X9evX1dHRoQcPHshxHM3OzurevXvJBvGrV6/q3bt36uzs1MLCgh4+fKj79++ndb/Hjh1TLBbT6OioHMdRNBr9YWN+dna2IpGI5ubmNDk5qba2Nl26dElFRUWSpK6uLt2+fVvRaFRv377V/Py8hoeHdffu3bTiAQDg38jN5GbskT/d1Aj8Cd83s6czvrKyYo2NjVZQUGA+n8/KysqspaXFVldXzWyzeb29vd3y8vIsPz/frl27Zo2NjT9tZjcz+/Lli3V0dFhxcbF5vV4LhUI2NDSUHO/u7raioiLzeDwWiUTMbLMBv6+vz8rLyy0rK8sKCwutvr7eJiYmku978uSJhUIh8/l8dubMGRsaGkq7mb2zs9MOHjxo+/fvt8uXL1tvb68FAoHk+M2bN62ystL6+/stGAxadna2NTQ02OfPn1PWHRkZsaqqKvN6vXbgwAGrq6uzx48fmxnN7ACATeTmHyM34//gMftJly0AAAAA4K/H46MAAAAA4GIUhQAAAADgYhSFAAAAAOBiFIUAAAAA4GIUhQAAAADgYhSFAAAAAOBiFIUAAAAA4GIUhQAAAADgYhSFAAAAAOBiFIUAAAAA4GIUhQAAAADgYv8AYjlVZsg3sMAAAAAASUVORK5CYII=", + "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()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Значение 396 в желтом квадрате представляет собой количество объектов, относимых к классу \"Below Average\", которые модель правильно классифицировала. Это свидетельствует о высоком уровне точности в идентификации этого класса.\n", + "Значение 124 в голубом квадрате указывает на количество правильно классифицированных объектов класса \"Above Average\". Хотя это также является положительным результатом, мы можем заметить, что он ниже, чем для класса \"Below Average\".\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__Точность, полнота, верность (аккуратность), F-мера__" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "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
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
ridge0.9808510.9606301.0000000.9838710.9956730.9865380.9903330.972112
logistic1.0000001.0000000.9436010.8306450.9875000.9596150.9709820.907489
mlp0.9907980.9531250.7006510.4919350.9322120.8730770.8208390.648936
knn0.9685310.9074070.6008680.3951610.9072120.8461540.7416330.550562
naive_bayes0.3699840.2605461.0000000.8467740.6225960.3903850.5401290.398482
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 51, + "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": [ + "Многие модели, включая логистическую регрессию, дерево решений,градиентный бустинг и случайный лес, показали выдающиеся результаты по всем метрикам:\n", + "\n", + "- Accuracy: Все модели, кроме MLP, достигли идеальной точности (1.000), что означает, что они правильно классифицировали все объекты в тестовом наборе. MLP показала высокую точность 0.996, что все равно является отличным результатом.\n", + "- F1: Аналогично, все модели показали идеальное значение F1-меры (1.000), кроме MLP, которая показала значение 0.991.\n", + "- ROC AUC: Все модели достигли максимального значения ROC AUC (1.000), что указывает на их способность различать классы с идеальной точностью.\n", + "- Cohen's Kappa: Идеальное значение Cohen's Kappa (1.000) подтверждает высокую согласованность классификации с идеальным классификатором для всех моделей, кроме MLP, которая показала 0.989.\n", + "- MCC: Идеальное значение MCC (1.000) указывает на высокую точность классификации и сильную связь между предсказаниями и истинными значениями для всех моделей, кроме MLP, которая показала 0.989.\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 (Метод k-ближайших соседей) показала сравнительно более низкие результаты:\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", + "\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 также подтверждает высокую точность классификации модели и сильную связь между предсказаниями и истинными значениями, но не идеальную.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__ROC-кривая, каппа Коэна, коэффициент корреляции Мэтьюса__" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "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
decision_tree1.0000001.0000001.0000001.0000001.000000
gradient_boosting1.0000001.0000001.0000001.0000001.000000
random_forest1.0000001.0000001.0000001.0000001.000000
ridge0.9865380.9721120.9994710.9632410.963361
logistic0.9596150.9074890.9994300.8819410.888152
mlp0.8730770.6489360.9334470.5808910.628281
knn0.8461540.5505620.8832070.4745350.534367
naive_bayes0.3903850.3984820.5471240.0531660.096181
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n", + " [\n", + " \"Accuracy_test\",\n", + " \"F1_test\",\n", + " \"ROC_AUC_test\",\n", + " \"Cohen_kappa_test\",\n", + " \"MCC_test\",\n", + " ]\n", + "]\n", + "class_metrics.sort_values(by=\"ROC_AUC_test\", ascending=False).style.background_gradient(\n", + " cmap=\"plasma\",\n", + " low=0.3,\n", + " high=1,\n", + " subset=[\n", + " \"ROC_AUC_test\",\n", + " \"MCC_test\",\n", + " \"Cohen_kappa_test\",\n", + " ],\n", + ").background_gradient(\n", + " cmap=\"viridis\",\n", + " low=1,\n", + " high=0.3,\n", + " subset=[\n", + " \"Accuracy_test\",\n", + " \"F1_test\",\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Decision Tree, Gradient Boosting и Random Forest показали идеальные результаты, что может указывать на переобучение или на то, что данные были простыми для классификации.\n", + "\n", + "- Ridge и Logistic Regression показали высокие результаты, что указывает на их эффективность в данной задаче классификации.\n", + "\n", + "- MLP показала средние результаты, что может указывать на необходимость настройки гиперпараметров или использования более сложной архитектуры.\n", + "\n", + "- KNN и Naive Bayes показали низкие результаты, что указывает на их неэффективность в данной задаче классификации." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'decision_tree'" + ] + }, + "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": 55, + "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" + } + ], + "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() # Сортировка по индексу" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Пример использования обученной модели (конвейера) для предсказания" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "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", + "
RankNameNetworthAgeCountrySourceIndustry
17011645Zugen Ni1.865ChinaappliancesManufacturing
\n", + "
" + ], + "text/plain": [ + " Rank Name Networth Age Country Source Industry\n", + "1701 1645 Zugen Ni 1.8 65 China appliances Manufacturing " + ] + }, + "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_diversifiedNetworth_per_Age
1701-0.2795820.0386930.00.00.00.00.00.00.00.0...1.00.00.00.00.00.00.00.00.0-7.22566
\n", + "

1 rows × 857 columns

\n", + "
" + ], + "text/plain": [ + " Networth Age Country_Argentina Country_Australia \\\n", + "1701 -0.279582 0.038693 0.0 0.0 \n", + "\n", + " Country_Austria Country_Barbados Country_Belgium Country_Belize \\\n", + "1701 0.0 0.0 0.0 0.0 \n", + "\n", + " Country_Brazil Country_Bulgaria ... Industry_Manufacturing \\\n", + "1701 0.0 0.0 ... 1.0 \n", + "\n", + " Industry_Media & Entertainment Industry_Metals & Mining \\\n", + "1701 0.0 0.0 \n", + "\n", + " Industry_Real Estate Industry_Service Industry_Sports \\\n", + "1701 0.0 0.0 0.0 \n", + "\n", + " Industry_Technology Industry_Telecom Industry_diversified \\\n", + "1701 0.0 0.0 0.0 \n", + "\n", + " Networth_per_Age \n", + "1701 -7.22566 \n", + "\n", + "[1 rows x 857 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'predicted: 0 (proba: [1. 0.])'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'real: 0'" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Выбираем лучшую модель\n", + "model = class_models[best_model][\"pipeline\"]\n", + "\n", + "# Выбираем позицию объекта для анализа\n", + "example_position = 127\n", + "\n", + "# Получаем исходные данные для объекта по позиции\n", + "test = pd.DataFrame(X_test.iloc[example_position, :]).T\n", + "display(test)\n", + "\n", + "# Получаем преобразованные данные для объекта по позиции\n", + "test_preprocessed = pd.DataFrame(preprocessed_df.iloc[example_position, :]).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_position].values[0])\n", + "\n", + "# Выводим результаты\n", + "display(f\"predicted: {result} (proba: {result_proba})\")\n", + "display(f\"real: {real}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Подбор гиперпараметров методом поиска по сетке" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'model__criterion': 'gini',\n", + " 'model__max_depth': 5,\n", + " 'model__max_features': 'sqrt',\n", + " 'model__n_estimators': 50}" + ] + }, + "execution_count": 60, + "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": 61, + "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", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n", + "c:\\Users\\Admin\\Desktop\\5 semestr\\mii\\AIM-PIbd-32-Safiulova-K-N\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n" + ] + } + ], + "source": [ + "optimized_model = ensemble.RandomForestClassifier(\n", + " random_state=random_state,\n", + " criterion=\"gini\",\n", + " max_depth=5,\n", + " max_features=\"log2\",\n", + " n_estimators=10,\n", + ")\n", + "\n", + "result = {}\n", + "\n", + "result[\"pipeline\"] = Pipeline([(\"pipeline\", pipeline_end), (\"model\", optimized_model)]).fit(X_train, y_train.values.ravel())\n", + "result[\"train_preds\"] = result[\"pipeline\"].predict(X_train)\n", + "result[\"probs\"] = result[\"pipeline\"].predict_proba(X_test)[:, 1]\n", + "result[\"preds\"] = np.where(result[\"probs\"] > 0.5, 1, 0)\n", + "\n", + "result[\"Precision_train\"] = metrics.precision_score(y_train, result[\"train_preds\"])\n", + "result[\"Precision_test\"] = metrics.precision_score(y_test, result[\"preds\"])\n", + "result[\"Recall_train\"] = metrics.recall_score(y_train, result[\"train_preds\"])\n", + "result[\"Recall_test\"] = metrics.recall_score(y_test, result[\"preds\"])\n", + "result[\"Accuracy_train\"] = metrics.accuracy_score(y_train, result[\"train_preds\"])\n", + "result[\"Accuracy_test\"] = metrics.accuracy_score(y_test, result[\"preds\"])\n", + "result[\"ROC_AUC_test\"] = metrics.roc_auc_score(y_test, result[\"probs\"])\n", + "result[\"F1_train\"] = metrics.f1_score(y_train, result[\"train_preds\"])\n", + "result[\"F1_test\"] = metrics.f1_score(y_test, result[\"preds\"])\n", + "result[\"MCC_test\"] = metrics.matthews_corrcoef(y_test, result[\"preds\"])\n", + "result[\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(y_test, result[\"preds\"])\n", + "result[\"Confusion_matrix\"] = metrics.confusion_matrix(y_test, result[\"preds\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__Формирование данных для оценки старой и новой версии модели__" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "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": 63, + "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
New0.0000000.0000000.0000000.0000000.7783650.7615380.0000000.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 63, + "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": [ + "Как для обучающей (Precision_train), так и для тестовой (Precision_test) выборки обе модели достигли идеальных значений 1.000000. Это указывает на то, что модели очень точно классифицируют положительные образцы, не пропуская их." + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "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
New0.7615380.0000000.9995720.0000000.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 64, + "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": [ + "Оба варианта модели продемонстрировали безупречную точность классификации, достигнув значения 1.000000. Это свидетельствует о том, что модели точно классифицировали все тестовые примеры, не допустив никаких ошибок в предсказаниях." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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rklu/70LAAAAAAD564Yap/Hx8erbt68iIyP1559/SpLee+89nvMGACg4hh0XSYMGDSLXAACOY+dcc0W5bpx++umnioqKko+Pj7Zv3660tDRJUnJysp5//nm7VxAAgKuyc4h7e3uTawAAx6FxmvvG6ZQpUzR79my988478vDwMNffeeed2rZtm10rBwBAQZkxYwa5BgCAA+V6QqT9+/erWbNmV6wPCAjQ2bNn7VEnAAD+U35PHEGuAQAKEhMi3UDPaUhIiA4cOHDF+o0bN6pKlSp2qRQAAP/JsNhvuQpyDQBQoPI511xBrhungwYN0uOPP64ffvhBFotFR48eVVxcnEaMGKHBgwfnRx0BAMh3P/74I7kGAIAD5XpY7zPPPCOr1apWrVrpwoULatasmby8vDRixAgNHTo0P+oIAMCV7Pyw8k6dOunixYvkGgDAMeyca64o141Ti8WiZ599ViNHjtSBAweUmpqqmjVrytfXNz/qBwBAgTh06JBOnDhBrgEA4CC5bpxe5unpqZo1a9qzLgAA5Ji9J44g1wAAjsSESDfQOG3ZsqUslmvfZPvtt9/mqUIAAOSInYc/dezYUUWKXBmL5BoAoEAwrDf3jdN69erZvM7IyNCOHTv0008/qX///vaqFwAABapWrVry8vIi1wAAcJBcN05fffXVq66fMGGCUlNT81whAAByxE7Dny5fYX7hhRfk7+9vribXAAAFys655opy/SiZa+nbt6/effddexUHAMD1GXZcroJcAwAUqHzONVdgt8ZpQkKCvL297VUcAAAORa4BAFCwcj2st1u3bjavDcPQsWPH9OOPP2rs2LF2qxgAANdl54kjoqOj5eHhQa4BAByDCZFy3zgNCAiwee3m5qawsDBNmjRJbdu2tVvFAAC4HntPue/v7y9PT09yDQDgEDxKJpeN06ysLD3wwAOqXbu2ihcvnl91AgCgwM2aNctmQiQAAFCwcnXPqbu7u9q2bauzZ8/mU3UAAAAAADejXE+IVKtWLf3222/5URcAAAAAwE0q143TKVOmaMSIEVq2bJmOHTumlJQUmwUAgAJh5yn3V6xYQa4BAByHR8nk/J7TSZMm6amnntLdd98tSbrnnntksVjM7YZhyGKxKCsry/61BADgX+w9cUTPnj3l5vb3NVtyDQBQkJgQKReN04kTJ+qRRx7R2rVr87M+AAA4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GjXS6tWrbY517NgxdejQQT4+PqpcubIWLVqkSpUq6bXXXjP3OXv2rB566CGVKlVK/v7+uuuuu7Rz587/PG9k8w/KknsR6exJ23A+81cRFS/Fly1k8yySqceivtc3u6rpfJrn/9YaGn/vWn22uab2/VnaofVzVc46/IlcI9cKCz678E9858l/zpprBcnhjdOPPvpI4eHhCgsLU9++ffXuu+/KMK78iY4cOVLTp0/Xli1bVKpUKXXq1EkZGdnj27du3aoePXqoV69e2r17tyZMmKCxY8eagRodHa3NmzcrMTHRLG/Pnj3atWuX+vTpI0mKi4vTuHHjNHXqVO3bt0/PP/+8xo4dqwULFtxw/aOjo7V06VKlpqaa+69cuVIXLlxQ165dJUkxMTFauHChZs+erT179mj48OHq27ev1q9fb3OcZ555Ri+88IL27dunOnXqKDU1VXfffbfWrFmj7du3q127durUqZMOHz5svqdfv346evSo1q1bp08//VRz5szRiRMnbMq97777dOLECX399dfaunWr6tevr1atWun06asPz0hLS1NKSorNAuDa3N2yFNNrlSwW6YUvm5nre0b+pKKeGZq//lYH1g75gVwj1woDPrsAOILDx2LExsaqb9++kqR27dopOTlZ69evV4sWLWz2Gz9+vNq0aSNJWrBggcqVK6clS5aoR48eeuWVV9SqVSuNHTtWklSjRg3t3btXL730kgYMGKBbbrlFdevW1aJFi8x94uLi1LhxY1WrVs0sf/r06erWrZskqXLlytq7d6/efvtt9e/f/4bqHxUVpWLFimnJkiW6//77JUmLFi3SPffcIz8/P6Wlpen555/X6tWrFRmZfc9GlSpVtHHjRr399ttq3ry5eZxJkyaZ5y9JQUFBqlu3rvl68uTJWrJkib788ks99thj+vnnn7V69Wpt2bJFDRs2lJR9Bb169ermezZu3KjNmzfrxIkT8vLKHq7z8ssv6/PPP9cnn3yihx9++IrzjYmJ0cSJE6/587jZpJx2V1amFPivK4bFS2bqzEmH//OCg7m7ZSmm9yqFBKbq0dhO/+h5kBpW+VO1KxzXponv2LxnweBPtWJndU389K6Crq7rcdIp98k1cs3V8dmFq+E7TwFw0lwrSA7tOd2/f782b96s3r17S5KKFCminj17KjY29op9L4eclB1gYWFh2rdv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TN16663avn27Bg0apGLFiql///65rhMKGM+DA1wWuXYlcg3kGo1TwKkZhqE1a9Zo5cqVGjp0qLm+WLFimjt3rjns6f3335fVatXcuXNlsVgkSfPmzVNgYKDWrVuntm3b6rXXXtPo0aPVrVs3SdLs2bO1cuXKax77l19+0UcffaRVq1apdevWkqQqVaqY2y8PlSpdurQCAwMlZV+Rfv7557V69WpFRkaa79m4caPefvttNW/eXLNmzVLVqlU1ffp0SVJYWJh2796tF198MVc/m+eee878/0qVKmnEiBH68MMPbUL80qVLWrhwocqWLStJmjFjhjp06KDp06crJCRE48eP1/Tp082fSeXKlbV37169/fbbhDgA5ANy7drINYDGKeCUli1bJl9fX2VkZMhqtapPnz6aMGGCub127do29+Ps3LlTBw4ckJ+fn005ly5dUmJiopKTk3Xs2DE1btzY3FakSBE1bNjwiiFQl+3YsUPu7u5q3rx5jut94MABXbhwQW3atLFZn56erltvvVWStG/fPpt6SDIDPzcWL16sN954Q4mJiUpNTVVmZqb8/f1t9qlQoYIZ4JePY7VatX//fvn5+SkxMVEDBw7UoEGDzH0yMzMVEBCQ6/rAAQzZ6Qpz3osAcH3k2n8j10Cu0TgFnFLLli01a9YseXp6KjQ0VEWK2P5TLVasmM3r1NRUNWjQwBzW80+lSpW6oTpcHs6UG6mpqZKk5cuX24SnlH2/kb0kJCQoOjpaEydOVFRUlAICAvThhx+aV61zU9d33nnnii8V7u7udqsr8hHDnwCXQa5dH7kGSeSaaJwCTqlYsWKqVq1ajvevX7++Fi9erNKlS19xlfWyMmXK6IcfflCzZs0kZV9J3bp1q+rXr3/V/WvXri2r1ar169ebw5/+6fIV7qysLHNdzZo15eXlpcOHD1/zynRERIQ5CcZl33///X+f5D989913qlixop599llz3aFDh67Y7/Dhwzp69KhCQ0PN47i5uSksLEzBwcEKDQ3Vb7/9pujo6FwdHwCQO+Ta9ZFrQDZm6wUKgejoaJUsWVKdO3dWfHy8Dh48qHXr1mnYsGH6448/JEmPP/64XnjhBX3++ef6+eef9eijj173WW6VKlVS//799eCDD+rzzz83y/zoo48kSRUrVpTFYtGyZct08uRJpaamys/PTyNGjNDw4cO1YMECJSYmatu2bZoxY4YWLFggSXrkkUf066+/auTIkdq/f78WLVqk+fPn5+p8q1evrsOHD+vDDz9UYmKi3njjDS1ZsuSK/by9vdW/f3/t3LlT8fHxGjZsmHr06KGQkBBJ0sSJExUTE6M33nhDv/zyi3bv3q158+bplVdeyVV94CBWq/0WAE6FXCPXbkrkGo1ToDAoWrSoNmzYoAoVKqhbt26KiIjQwIEDdenSJfOK81NPPaX7779f/fv3V2RkpPz8/NS1a9frljtr1izde++9evTRRxUeHq5Bgwbp/PnzkqSyZctq4sSJeuaZZxQcHKzHHntMkjR58mSNHTtWMTExioiIULt27bR8+XJVrlxZUvb9Mp9++qk+//xz1a1bV7Nnz9bzzz+fq/O95557NHz4cD322GOqV6+evvvuO40dO/aK/apVq6Zu3brp7rvvVtu2bVWnTh2bKfUfeughzZ07V/PmzVPt2rXVvHlzzZ8/36wrAMAxyDVyDTcni3Gtu8YBAHBCKSkpCggIUOtSA1XEzfO/3/AfMq3pWn0yVsnJydccPggAQH4h1/7GPacAANfExBEAgMKEXGNYLwAAAADA8eg5BQC4JqshuzzMzeq6V5gBAIUIuUbjFADgmgzDKsPI+4yE9igDAIC8ItcY1gsAAAAAcAL0nAIAXJNh2GfokgtPHAEAKETINRqnAAAXZdjp3hwXDnEAQCFCrjGsFwAAAADgePScAgBck9UqWeww6YMLTxwBAChEyDUapwAAF8XwJwBAYUKuMawXAAAAAOB49JwCAFySYbXKsMPwJ1d+HhwAoPAg1+g5BQAAAAA4AXpOAQCuiXtzAACFCblG4xQA4KKshmS5uUMcAFCIkGsM6wUAAAAAOB49pwAA12QYkuzxPDjXvcIMAChEyDUapwAA12RYDRl2GP5kuHCIAwAKD3KNYb0AAAAAACdA4xQA4JoMq/2WG/Dmm2+qUqVK8vb2VuPGjbV582Y7nyAA4KZCrtE4BQC4JsNq2G3JrcWLF+vJJ5/U+PHjtW3bNtWtW1dRUVE6ceJEPpwpAOBmQK7ROAUAINdeeeUVDRo0SA888IBq1qyp2bNnq2jRonr33XcdXTUAAHLNWXKNxikAwDU5aPhTenq6tm7dqtatW5vr3Nzc1Lp1ayUkJNj7LAEANwtyjdl6AQCuKVMZkh0mJMxUhiQpJSXFZr2Xl5e8vLyu2P+vv/5SVlaWgoODbdYHBwfr559/znuFAAA3JXKNxikAwMV4enoqJCREG5O+sluZvr6+Kl++vM268ePHa8KECXY7BgAAV0Ou/Y3GKQDApXh7e+vgwYNKT0+3W5mGYchisdisu9rVZUkqWbKk3N3ddfz4cZv1x48fV0hIiN3qBAC4OZBrf6NxCgBwOd7e3vL29nbIsT09PdWgQQOtWbNGXbp0kSRZrVatWbNGjz32mEPqBABwbeRaNhqnAADk0pNPPqn+/furYcOGuu222/Taa6/p/PnzeuCBBxxdNQAAcs1Zco3GKQAAudSzZ0+dPHlS48aNU1JSkurVq6cVK1ZcMZkEAACuwFlyzWIYhh3mhAIAAAAA4MbxnFMAAAAAgMPROAUAAAAAOByNUwAAAACAw9E4BQAAAAA4HI1TAAAAAIDD0TgFAAAAADgcjVMAAAAAgMPROAUAAAAAOByNUwAAAACAw9E4BQAAAAA4HI1TAAAAAIDD0TgFAAAAADjc/wNN5t8iblBPygAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "_, ax = plt.subplots(1, 2, figsize=(10, 4), sharex=False, sharey=False)\n", + "\n", + "for index in range(0, len(optimized_metrics)):\n", + " c_matrix = optimized_metrics.iloc[index][\"Confusion_matrix\"]\n", + " disp = ConfusionMatrixDisplay(\n", + " confusion_matrix=c_matrix, display_labels=[\"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()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В желтом квадрате мы видим значение 396, что обозначает количество правильно классифицированных объектов, отнесенных к классу \"Below Average\". Это свидетельствует о том, что модель успешно идентифицирует объекты этого класса, минимизируя количество ложных положительных срабатываний.\n", + "\n", + "В зеленом квадрате значение 124 указывает на количество правильно классифицированных объектов, отнесенных к классу \"Above Average\". Это также является показателем высокой точности модели в определении объектов данного класса." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Определение достижимого уровня качества модели для второй задачи (задача регрессии)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__2. Прогнозирование цены закрытия акций:__\n", + "\n", + "\n", + "Описание: Оценить, какая будет цена закрытия акций Starbucks на следующий день или через несколько дней на основе исторических данных.\n", + "Целевая переменная: Цена закрытия (Close). (среднее значение)" + ] + }, + { + "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": 87, + "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': 20, 'min_samples_split': 2, 'n_estimators': 50}\n", + "Лучший результат (MSE) на старых параметрах: 5.760387482085847\n", + "\n", + "Новые параметры: {'max_depth': 10, 'min_samples_split': 10, 'n_estimators': 200}\n", + "Лучший результат (MSE) на новых параметрах: 13.643983185514095\n", + "Среднеквадратическая ошибка (MSE) на тестовых данных: 0.024952019817877404\n", + "Корень среднеквадратичной ошибки (RMSE) на тестовых данных: 0.15796208348169316\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAHWCAYAAACi1sL/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABj9klEQVR4nO3dd3gU1fv38c+GhPRGCRBK6DWIFAuggKIERKqCEJAqKiJFioAKISBGRIoKoqAColQFVCx8ld4ldGlSQpFeE5KQBJJ5/uDJ/nZJArthUwjv13XtRebMmTP3DJNM7pwzZ0yGYRgCAAAAAEiSnHI6AAAAAADITUiSAAAAAMACSRIAAAAAWCBJAgAAAAALJEkAAAAAYIEkCQAAAAAskCQBAAAAgAWSJAAAAACwQJIEAAAAABZIkgAAAADAAkkScJ84cuSIXnvtNZUtW1Zubm7y8fFR/fr19cknn+j69es5Hd4DY/Xq1TKZTDKZTPruu+/SrVO/fn2ZTCYFBwdblSclJemTTz5RzZo15ePjIz8/P1WrVk2vvvqqDhw4YK43a9Ys8z7S+2zevDlLjxEAgAedc04HAODufv31V7Vr106urq7q0qWLgoODlZSUpPXr12vIkCHau3evpk+fntNhPlDc3Nw0d+5cde7c2ar82LFj2rhxo9zc3NJs88ILL+j3339Xx44d1atXL924cUMHDhzQsmXLVK9ePVWuXNmq/ujRo1WmTJk07ZQvX96xBwMAAKyQJAG5XFRUlDp06KCgoCCtXLlSxYoVM6/r06ePDh8+rF9//TUHI3wwPffcc/r555918eJFFSpUyFw+d+5cFSlSRBUqVNCVK1fM5Vu3btWyZcs0duxYvfPOO1ZtTZkyRVevXk2zj2bNmqlOnTpZdgwAACB9DLcDcrmPPvpIsbGx+vrrr60SpFTly5dX//79zcsmk0lvvvmmvv/+e1WqVElubm6qXbu21q5da7Xd8ePH9cYbb6hSpUpyd3dXwYIF1a5dOx07dsyq3u1Dvzw8PFS9enV99dVXVvW6desmLy+vNPH98MMPMplMWr16tVX5li1b1LRpU/n6+srDw0MNGzbUhg0brOqMGjVKJpNJFy9etCqPjIyUyWTSrFmzrPZfunRpq3onT56Uu7u7TCZTmuP6/fff9eSTT8rT01Pe3t5q3ry59u7dmyb+jLRq1Uqurq5atGiRVfncuXPVvn175cuXz6r8yJEjkm4Nxbtdvnz5VLBgQZv3bYtjx45lOFzv9nMhSY0aNUq3ruU5lqRp06YpODhYHh4eVvV++OGHu8Z06tQp9ezZU4GBgXJ1dVWZMmXUu3dvJSUl3XWIoWUsu3fvVrdu3cxDT4sWLaoePXro0qVLVvtLvX4OHDig9u3by8fHRwULFlT//v2VkJBgVTf1+yYjqfGlnruVK1fKyclJI0eOtKo3d+5cmUwmTZs27Y7nolGjRmrUqJFV2datW83HejeNGjVKM5xTkj7++ON0/48///xzVatWTa6urgoMDFSfPn3SJOa3XwOFChVS8+bN9c8//1jVy4lzdafrwvJYf/rpJzVv3tx8jZUrV05jxoxRcnJymjaDg4O1bds21atXT+7u7ipTpoy++OILq3pJSUkaOXKkateuLV9fX3l6eurJJ5/UqlWrrOpZfr8tXbrUal1CQoL8/f1lMpn08ccfW607deqUevTooSJFisjV1VXVqlXTN998Y15vObw3o8+oUaMk2Xe937x5U2PGjFG5cuXk6uqq0qVL65133lFiYqJVvdKlS5v34+TkpKJFi+qll17SiRMn7vh/BuQF9CQBudwvv/yismXLql69ejZvs2bNGi1YsED9+vWTq6urPv/8czVt2lR///23+RerrVu3auPGjerQoYNKlCihY8eOadq0aWrUqJH27dsnDw8PqzYnTZqkQoUKKSYmRt9884169eql0qVL65lnnrH7mFauXKlmzZqpdu3aCgsLk5OTk2bOnKmnn35a69at06OPPmp3m+kZOXJkml8OJGnOnDnq2rWrQkJCNG7cOMXHx2vatGl64okntGPHjjTJVno8PDzUqlUrzZs3T71795Yk7dq1S3v37tVXX32l3bt3W9UPCgqSJH3//feqX7++nJ3v/uM3Ojo6TYJoMpnsSqg6duyo5557TpL022+/ad68eRnWrVy5st59911J0sWLF/XWW29ZrV+wYIHeeOMNNWrUSH379pWnp6f279+vDz744K5xnD59Wo8++qiuXr2qV199VZUrV9apU6f0ww8/KD4+Xg0aNNCcOXPM9ceOHStJ5ngkmb8H/vzzTx09elTdu3dX0aJFzcNN9+7dq82bN6dJMtq3b6/SpUsrIiJCmzdv1qeffqorV67o22+/vWvcGXn66af1xhtvKCIi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dg+3W7hwoflFsg0bNlT37t114sQJ/fDDD2ratGlWxAgAAAAA2cbuJKlZs2b69ddf1bJlSyUmJqpTp0769ddfmRQBAAAAQJ5g93A7SXryySe1cuVKeXl5KSAgINMJ0tq1a9WiRQsFBgbKZDJp6dKlVusNw9DIkSNVrFgxubu765lnntGhQ4cytS8AAAAAsIXdPUlt27Y1fx0YGKgPP/xQGzdulL+/vyRp8eLFNrcVFxenGjVqqEePHlbtpvroo4/06aefavbs2SpTpoxGjBihkJAQ7du3T25ubvaGDgAAAAB3ZXeS5Ovra/66Zs2aqlmzZqZ33qxZMzVr1izddYZhaPLkyXrvvffUqlUrSdK3336rIkWKaOnSperQoUOm9wsAAAAAGbE7SZo5c2ZWxJFGVFSUzp49q2eeecZc5uvrq8cee0ybNm3KMElKTExUYmKieTkmJibLYwUAAACQd2T6ZbJHjx7Vvn37ZDKZVKVKFZUtW9aRcens2bOSpCJFiliVFylSxLwuPREREQoPD3doLAAAAAAeHHeduOHmzZsKDQ1VbGyspFs9M+3atVP58uXVpk0btW7dWhUqVFD79u117dq1LA/4boYPH67o6Gjz5+TJkzkdEgAAAID7yF2TJGdnZ/300086f/68JKl///76559/tG7dOiUkJCghIUFr1qzRP//8o7feesthgRUtWlSSdO7cOavyc+fOmdelx9XVVT4+PlYfAAAAALCVTVOAFypUSDdv3pQk/fzzz5oxY4bq16+vfPnyKV++fHriiSf05ZdfppnC+16UKVNGRYsW1YoVK8xlMTEx2rJli+rWreuw/QAAAACAJZueSSpfvry2bdumihUrKiUlRQUKFEhTx9/fX/Hx8XbtPDY2VocPHzYvR0VFaefOnSpQoIBKlSqlAQMG6P3331eFChXMU4AHBgaqdevWdu0HAAAAAGxlU09Sp06d9M477+jcuXOqX7++Ro0apYSEBPP669evKzw8XI8//rhdO4+MjLSaRnzgwIGqWbOmRo4cKUl6++231bdvX7366qt65JFHFBsbqz/++IN3JAEAAADIMibDMAxbKr722mv66aefFBwcrJUrV6pAgQKqUaOGJGnXrl1ycXHR77//rocffjgr47VbTEyMfH19FR0dzfNJAIDca64ppyMAgKwTalPKkeVszQ1sTpIkad26dfr1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T9kff/yhJ554Qn5+fipYsKCef/55HTlyxLz+2LFjMplMmj9/vurVqyc3NzcFBwdrzZo15jrJycnq2bOnObZKlSrpk08+sYol9d40ceJEq/I2bdpY3Wcl6eTJk2rfvr38/PxUoEABtWrVSseOHZN06+d4RveC1POV2hsYHh6uwoULy8fHR6+//rqSkpIyde6B25EkIU+4fPmy/vjjD/Xp00eenp5p1qcmD1u3btWZM2d05swZlShRQpMnTzYvv/TSS5IkJycnffrpp9q7d69mz56tlStX6u2337ZqLz4+XmPHjtW3336rDRs26OrVq+rQoUOmYl+3bp26dOmi/v37a9++ffryyy81a9YsjR079o7bNW3a1Bz7mTNnNHnyZKv1sbGxeu6557RixQrt2LFDTZs2VYsWLXTixAmreuPHj1eNGjW0Y8cODRs2TP3799eff/5pXm/L+fDw8NCmTZt06tQpc9n06dNVvHhxq3pvvvmmNm3apPnz52v37t1q166dmjZtqkOHDqlevXrmY/nxxx8lyer4Ujny3APAnWzbtk3t27dXhw4dtGfPHo0aNUojRoyw+mVfkkaPHq0zZ84oMjJSnp6e6tOnT6b2FxERoW+//VZffPGF9u7dq7feekudO3e2SlbSk7r/1E/79u2t1sfFxWngwIGKjIzUihUr5OTkpDZt2iglJcWq3pAhQzRo0CDt2LFDdevWVYsWLXTp0iVJtxK4EiVKaNGiRdq3b59Gjhypd955RwsXLrRqo3jx4poxY4Z5+fTp09qwYYM8PDzMZTdu3FBISIi8vb21bt06bdiwQV5eXmratKmSkpI0ePBg87EMGjRIdevWNS8vXrzY3M6KFSu0f/9+rV69WvPmzdPixYsVHh5u30kHMmIAecCWLVsMScbixYtt3iYoKMiYOXPmXestWrTIKFiwoHl55syZhiRj8+bN5rL9+/cbkowtW7YYhmEYYWFhRo0aNdJtb8mSJYblt17jxo2NDz74wKrOnDlzjGLFimUYU9euXY1WrVpZlc2cOdPw9fW947FUq1bN+Oyzz8zLQUFBRtOmTa3qvPTSS0azZs0ybCO98+Hr62v07dvXGD16tGEYhrFu3TqjevXqRqtWrYyuXbsahmEYx48fN/Lly2ecOnXKqr3GjRsbw4cPtypbtWqVkd6PJ0efewAPpq5duxr58uUzPD09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jRry9PQ0Lz/++OPKly+f9u3bp5iYGJ0+fTrdfe3fv9+qrG7duuavnZ2dVadOnTR17HXo0CF17NhRZcuWlY+Pj0qXLi1JOnHihF37njp1qmrXrq3ChQvLy8tL06dPT9OGJPXq1UvTp09XSkqKvv76a/Xq1ctq/a5du3T48GF5e3vLy8tLXl5eKlCggBISEqyGAd5NjRo1rHqo6tatq9jYWJ08eVJHjhzRjRs3rM65i4uLHn300TTns0SJEvL09FSFChX03HPPqWPHjjbHAAB5HRM3AADSdfToUZUpUybD9f7+/jp+/Hi660wmU1aFZbMWLVooKChIM2bMUGBgoFJSUhQcHGz1/M7dzJ8/X4MHD9aECRNUt25deXt7a/z48dqyZUuaup07d1ZYWJjmz5+vokWLqnr16lbrY2NjVbt2bX3//fdpti1cuLD9B3iP1q1bJ29vb0VFRenVV1/VxIkT0wypBIAHFT1JAPCAqVKlijZs2GBVtmHDBlWsWFH58uUzl61du1ZPPvlkhu1UrlxZu3btUlxcnLls8+bNSk5OVpUqVeTj46PAwMB091W1alWrss2bN5u/vnnzprZt26YqVapk6vikW71gBw8e1HvvvafGjRurSpUqunLlSrp177TvDRs2qF69enrjjTdUs2ZNlS9fPsNeHz8/P7Vs2VKvv/56ml4kSapVq5YOHTqkgIAAlS9f3urj6+tr87Ht2rVL169ft4rfy8tLJUuWVLly5ZQ/f36rc37jxg1t3bo1zTkvU6aMypcvr2effVYvvPCClixZYnMMAJDXkSQBwANm0KBBWrFihcaMGaN///1Xs2fP1pQpUzR48GBJ0vXr1/XZZ5/pyJEjatasmc6ePauzZ88qNjZWN2/eNE8AEBoaKhcXF3Xp0kV79uzRunXr1KtXL7Vt21bly5eXdGtShHHjxmnBggU6ePCghg0bpp07d6p///5WMU2dOlVLlizRgQMH1KdPH125csVqAgh7+fv7q2DBgpo+fboOHz6slStXauDAgenWvdO+K1SooMjISC1fvlz//vuvRowYYTVT3O2GDRumd955Ry+99FKadZ06dVKhQoXUqlUrrVu3TlFRUVq9erX69eun//77z+ZjS0pKUs+ePbVv3z799ttvCgsL05tvviknJyd5enqqd+/eGjJkiP744w/t27dPvXr1Unx8vHr27GnVzvnz53X27Flt2bJFv/zyiypXrmxzDACQ1zHcDgAeMLVq1dLChQs1cuRIjRkzRsWKFdPo0aPVrVs3SdKCBQvUr18/SdJjjz2WZvu2bdtq9erV8vb21u+//66BAwfqkUcekYeHh1q1aqXJkyeb6/br10/R0dEaNGiQzp8/r6pVq+rnn39WhQoVrNr88MMP9eGHH2rnzp0qX768fv75ZxUqVCjTx+jk5KT58+erX79+Cg4OVqVKlfTpp5+ap9K2dd+vvfaaduzYoZdeekkmk0kdO3bUG2+8od9//z3d/VaqVEnDhg1Ld52Hh4fWrl2roUOHqm3btrp27ZqKFy+uxo0b3/XZL0uNGzdWhQoV1KBBAyUmJqpjx44aNWqU1fGkpKTo5Zdf1rVr11SnTh0tX75c/v7+aWKVpEKFCqlJkyb66KOPbI4BAPI6k2EYRk4HAQDIPWbNmqXVq1enOyX4zp07NWDAAK1evdoh+zp27JjKlCmjHTt2WL2DKTvk5L4zq1u3brp69aqWLl2a06EAQJ7GcDsAgBV3d/cMn5FxcXFJ9+W0AADkJQy3AwBYeemll9J9pkaSqlWrZvViUwAA8iKG2wEAAACABYbbAQAAAIAFkiQAAAAAsECSBAAAAAAWSJIAAAAAwAJJEgAAAABYIEkCAAAAAAskSQAAAABggSQJAAAAACz8PyI0BN5yWyWVAAAAAElFTkSuQmCC", + "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", + "import matplotlib.pyplot as plt\n", + "\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", + "plt.figure(figsize=(10, 5))\n", + "plt.bar(['Старые параметры', 'Новые параметры'], [old_best_mse, new_best_mse], color=['blue', 'orange'])\n", + "plt.xlabel('Подбор параметров')\n", + "plt.ylabel('Среднеквадратическая ошибка (MSE)')\n", + "plt.title('Сравнение MSE для старых и новых параметров')\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 +}