diff --git a/lab_4/lab4.ipynb b/lab_4/lab4.ipynb new file mode 100644 index 0000000..e730cb6 --- /dev/null +++ b/lab_4/lab4.ipynb @@ -0,0 +1,4154 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Лабораторная работа №4\n", + "\n", + "*Вариант задания:* Товары Jio Mart (вариант - 23) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Выбор бизнес-целей \n", + "Для датасета недвижимости предлагаются две бизнес-цели:\n", + "\n", + "### Задача классификации:\n", + "*Цель*: Классифицировать товары в разные категории, например, \"Дешевый\", \"Средний\" или \"Дорогой\", на основе цены и других характеристик товара.\n", + "\n", + "*Применение*: Полезно для определения целевой аудитории для разных типов товаров, создания маркетинговых кампаний и анализа рыночных сегментов.\n", + "\n", + "\n", + "### Задача регрессии:\n", + "*Цель*: Предсказать цену товара (price) на основе других характеристик.\n", + "\n", + "*Применение*: Эта задача полезна для оценки рыночной стоимости товаров в интернет-магазинах и онлайн-платформах, например, для прогнозирования цены новых или подержанных товаров на основе характеристик." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Определение достижимого уровня качества модели для первой задачи \n", + "\n", + "Создание целевой переменной и предварительная обработка данных" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['category', 'sub_category', 'href', 'items', 'price'], dtype='object')\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn import set_config\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn import linear_model, tree, neighbors, naive_bayes, ensemble, neural_network\n", + "from sklearn import metrics\n", + "import numpy as np\n", + "import warnings\n", + "warnings.filterwarnings(\"ignore\", category=UserWarning)\n", + "df = pd.read_csv(\"..//static//csv//jio_mart_items.csv\")\n", + "print(df.columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Среднее значение поля 'price': 1991.6325132793531\n", + " category sub_category \\\n", + "0 Groceries Fruits & Vegetables \n", + "1 Groceries Fruits & Vegetables \n", + "2 Groceries Fruits & Vegetables \n", + "3 Groceries Fruits & Vegetables \n", + "4 Groceries Fruits & Vegetables \n", + "\n", + " href \\\n", + "0 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "1 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "2 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "3 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "4 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "\n", + " items price \\\n", + "0 Fresh Dates (Pack) (Approx 450 g - 500 g) 109.0 \n", + "1 Tender Coconut Cling Wrapped (1 pc) (Approx 90... 49.0 \n", + "2 Mosambi 1 kg 69.0 \n", + "3 Orange Imported 1 kg 125.0 \n", + "4 Banana Robusta 6 pcs (Box) (Approx 800 g - 110... 44.0 \n", + "\n", + " above_average_price \n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n" + ] + } + ], + "source": [ + "# Установим параметры для вывода\n", + "set_config(transform_output=\"pandas\")\n", + "\n", + "# Рассчитываем среднее значение цены\n", + "average_price = df['price'].mean()\n", + "print(f\"Среднее значение поля 'price': {average_price}\")\n", + "\n", + "# Создаем новую переменную, указывающую, превышает ли цена среднюю цену\n", + "df['above_average_price'] = (df['price'] > average_price).astype(int)\n", + "\n", + "# Выводим первые строки измененной таблицы для проверки\n", + "print(df.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Разделение набора данных на обучающую и тестовые выборки (80/20) для задачи классификации\n", + "\n", + "Целевой признак -- above_average_price" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X_train shape: (129850, 4)\n", + "y_train shape: (129850,)\n", + "X_test shape: (32463, 4)\n", + "y_test shape: (32463,)\n", + "X_train:\n", + " category sub_category \\\n", + "131952 Fashion Girls \n", + "106351 Home & Kitchen Power & Hand Tools \n", + "141229 Electronics Cameras \n", + "46383 Home & Kitchen Kitchenware \n", + "123357 Fashion Women \n", + "\n", + " href price \n", + "131952 https://www.jiomart.com/c/fashion/girls/watche... 299.0 \n", + "106351 https://www.jiomart.com/c/groceries/home-kitch... 449.0 \n", + "141229 https://www.jiomart.com/c/electronics/cameras/... 1358.0 \n", + "46383 https://www.jiomart.com/c/groceries/home-kitch... 529.0 \n", + "123357 https://www.jiomart.com/c/fashion/women/night-... 599.0 \n", + "y_train:\n", + " 131952 0\n", + "106351 0\n", + "141229 0\n", + "46383 0\n", + "123357 0\n", + "Name: above_average_price, dtype: int64\n", + "X_test:\n", + " category sub_category \\\n", + "112252 Fashion Men \n", + "147122 Electronics Accessories \n", + "27887 Groceries Home Care \n", + "119606 Fashion Women \n", + "94731 Home & Kitchen Mops, Brushes & Scrubs \n", + "\n", + " href price \n", + "112252 https://www.jiomart.com/c/fashion/men/fashion-... 449.0 \n", + "147122 https://www.jiomart.com/c/electronics/accessor... 4899.0 \n", + "27887 https://www.jiomart.com/c/groceries/home-care/... 891.0 \n", + "119606 https://www.jiomart.com/c/fashion/women/bags-b... 920.0 \n", + "94731 https://www.jiomart.com/c/groceries/home-kitch... 399.0 \n", + "y_test:\n", + " 112252 0\n", + "147122 1\n", + "27887 0\n", + "119606 0\n", + "94731 0\n", + "Name: above_average_price, dtype: int64\n" + ] + } + ], + "source": [ + "# Разделение набора данных на обучающую и тестовую выборки (80/20)\n", + "random_state = 42\n", + "X_train, X_test, y_train, y_test = train_test_split(\n", + " df.drop(columns=['above_average_price', 'items']), # Исключаем столбец 'items'\n", + " df['above_average_price'],\n", + " stratify=df['above_average_price'],\n", + " test_size=0.20,\n", + " 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())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Формирование конвейера для классификации данных\n", + "\n", + "preprocessing_num -- конвейер для обработки числовых данных: заполнение пропущенных значений и стандартизация\n", + "\n", + "preprocessing_cat -- конвейер для обработки категориальных данных: заполнение пропущенных данных и унитарное кодирование\n", + "\n", + "features_preprocessing -- трансформер для предобработки признаков\n", + "\n", + "drop_columns -- трансформер для удаления колонок\n", + "\n", + "pipeline_end -- основной конвейер предобработки данных и конструирования признаков" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Определение столбцов для обработки\n", + "columns_to_drop = [\"href\"] # Столбцы, которые можно удалить\n", + "num_columns = [\"price\"] # Числовые столбцы\n", + "cat_columns = [\"category\", \"sub_category\"] # Категориальные столбцы\n", + "\n", + "# Проверка наличия столбцов перед удалением\n", + "columns_to_drop = [col for col in columns_to_drop if col in X_train.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\")\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", + ")\n", + "\n", + "# Обучение пайплайна на обучающих данных\n", + "pipeline_end.fit(X_train)\n", + "\n", + "# Преобразование тестовых данных с использованием обученного пайплайна\n", + "X_test_transformed = pipeline_end.transform(X_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__Демонстрация работы конвейера__" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " price category_Electronics category_Fashion category_Groceries \\\n", + "131952 -0.102874 0.0 1.0 0.0 \n", + "106351 -0.093710 0.0 0.0 0.0 \n", + "141229 -0.038173 1.0 0.0 0.0 \n", + "46383 -0.088822 0.0 0.0 0.0 \n", + "123357 -0.084545 0.0 1.0 0.0 \n", + "\n", + " category_Home & Kitchen category_Jewellery sub_category_Apparel \\\n", + "131952 0.0 0.0 0.0 \n", + "106351 1.0 0.0 0.0 \n", + "141229 0.0 0.0 0.0 \n", + "46383 1.0 0.0 0.0 \n", + "123357 0.0 0.0 0.0 \n", + "\n", + " sub_category_Auto Care sub_category_Ayush \\\n", + "131952 0.0 0.0 \n", + "106351 0.0 0.0 \n", + "141229 0.0 0.0 \n", + "46383 0.0 0.0 \n", + "123357 0.0 0.0 \n", + "\n", + " sub_category_Bags & Travel Luggage ... sub_category_Smart Devices \\\n", + "131952 0.0 ... 0.0 \n", + "106351 0.0 ... 0.0 \n", + "141229 0.0 ... 0.0 \n", + "46383 0.0 ... 0.0 \n", + "123357 0.0 ... 0.0 \n", + "\n", + " sub_category_Snacks & Branded Foods sub_category_Staples \\\n", + "131952 0.0 0.0 \n", + "106351 0.0 0.0 \n", + "141229 0.0 0.0 \n", + "46383 0.0 0.0 \n", + "123357 0.0 0.0 \n", + "\n", + " sub_category_Stationery sub_category_TV & Speaker \\\n", + "131952 0.0 0.0 \n", + "106351 0.0 0.0 \n", + "141229 0.0 0.0 \n", + "46383 0.0 0.0 \n", + "123357 0.0 0.0 \n", + "\n", + " sub_category_Tools & Appliances sub_category_Toys, Games & Fitness \\\n", + "131952 0.0 0.0 \n", + "106351 0.0 0.0 \n", + "141229 0.0 0.0 \n", + "46383 0.0 0.0 \n", + "123357 0.0 0.0 \n", + "\n", + " sub_category_Treatments sub_category_Wellness sub_category_Women \n", + "131952 0.0 0.0 0.0 \n", + "106351 0.0 0.0 0.0 \n", + "141229 0.0 0.0 0.0 \n", + "46383 0.0 0.0 0.0 \n", + "123357 0.0 0.0 1.0 \n", + "\n", + "[5 rows x 75 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": 6, + "metadata": {}, + "outputs": [], + "source": [ + "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": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: logistic\n", + "Model: ridge\n", + "Model: decision_tree\n", + "Model: knn\n", + "Model: naive_bayes\n", + "Model: gradient_boosting\n", + "Model: random_forest\n", + "Model: mlp\n" + ] + } + ], + "source": [ + "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", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: logistic\n", + "Precision (train): 0.9964\n", + "Precision (test): 0.9964\n", + "Recall (train): 0.9255\n", + "Recall (test): 0.9228\n", + "Accuracy (train): 0.9905\n", + "Accuracy (test): 0.9902\n", + "ROC AUC (test): 0.9998\n", + "F1 (train): 0.9597\n", + "F1 (test): 0.9582\n", + "MCC (test): 0.9536\n", + "Cohen's Kappa (test): 0.9527\n", + "Confusion Matrix:\n", + "[[28498 13]\n", + " [ 305 3647]]\n", + "\n", + "Model: ridge\n", + "Precision (train): 0.8862\n", + "Precision (test): 0.8873\n", + "Recall (train): 0.9999\n", + "Recall (test): 1.0000\n", + "Accuracy (train): 0.9844\n", + "Accuracy (test): 0.9845\n", + "ROC AUC (test): 0.9998\n", + "F1 (train): 0.9396\n", + "F1 (test): 0.9403\n", + "MCC (test): 0.9336\n", + "Cohen's Kappa (test): 0.9314\n", + "Confusion Matrix:\n", + "[[28009 502]\n", + " [ 0 3952]]\n", + "\n", + "Model: decision_tree\n", + "Precision (train): 1.0000\n", + "Precision (test): 1.0000\n", + "Recall (train): 1.0000\n", + "Recall (test): 1.0000\n", + "Accuracy (train): 1.0000\n", + "Accuracy (test): 1.0000\n", + "ROC AUC (test): 1.0000\n", + "F1 (train): 1.0000\n", + "F1 (test): 1.0000\n", + "MCC (test): 1.0000\n", + "Cohen's Kappa (test): 1.0000\n", + "Confusion Matrix:\n", + "[[28511 0]\n", + " [ 0 3952]]\n", + "\n", + "Model: knn\n", + "Precision (train): 0.9981\n", + "Precision (test): 0.9972\n", + "Recall (train): 0.9991\n", + "Recall (test): 0.9987\n", + "Accuracy (train): 0.9997\n", + "Accuracy (test): 0.9995\n", + "ROC AUC (test): 0.9999\n", + "F1 (train): 0.9986\n", + "F1 (test): 0.9980\n", + "MCC (test): 0.9977\n", + "Cohen's Kappa (test): 0.9977\n", + "Confusion Matrix:\n", + "[[28500 11]\n", + " [ 5 3947]]\n", + "\n", + "Model: naive_bayes\n", + "Precision (train): 0.1628\n", + "Precision (test): 0.1643\n", + "Recall (train): 0.9698\n", + "Recall (test): 0.9742\n", + "Accuracy (train): 0.3894\n", + "Accuracy (test): 0.3938\n", + "ROC AUC (test): 0.7510\n", + "F1 (train): 0.2789\n", + "F1 (test): 0.2812\n", + "MCC (test): 0.2098\n", + "Cohen's Kappa (test): 0.0921\n", + "Confusion Matrix:\n", + "[[ 8934 19577]\n", + " [ 102 3850]]\n", + "\n", + "Model: gradient_boosting\n", + "Precision (train): 1.0000\n", + "Precision (test): 1.0000\n", + "Recall (train): 1.0000\n", + "Recall (test): 1.0000\n", + "Accuracy (train): 1.0000\n", + "Accuracy (test): 1.0000\n", + "ROC AUC (test): 1.0000\n", + "F1 (train): 1.0000\n", + "F1 (test): 1.0000\n", + "MCC (test): 1.0000\n", + "Cohen's Kappa (test): 1.0000\n", + "Confusion Matrix:\n", + "[[28511 0]\n", + " [ 0 3952]]\n", + "\n", + "Model: random_forest\n", + "Precision (train): 1.0000\n", + "Precision (test): 1.0000\n", + "Recall (train): 1.0000\n", + "Recall (test): 1.0000\n", + "Accuracy (train): 1.0000\n", + "Accuracy (test): 1.0000\n", + "ROC AUC (test): 1.0000\n", + "F1 (train): 1.0000\n", + "F1 (test): 1.0000\n", + "MCC (test): 1.0000\n", + "Cohen's Kappa (test): 1.0000\n", + "Confusion Matrix:\n", + "[[28511 0]\n", + " [ 0 3952]]\n", + "\n", + "Model: mlp\n", + "Precision (train): 0.9957\n", + "Precision (test): 0.9945\n", + "Recall (train): 0.9996\n", + "Recall (test): 0.9997\n", + "Accuracy (train): 0.9994\n", + "Accuracy (test): 0.9993\n", + "ROC AUC (test): 1.0000\n", + "F1 (train): 0.9977\n", + "F1 (test): 0.9971\n", + "MCC (test): 0.9967\n", + "Cohen's Kappa (test): 0.9967\n", + "Confusion Matrix:\n", + "[[28489 22]\n", + " [ 1 3951]]\n", + "\n" + ] + } + ], + "source": [ + "for model_name, results in class_models.items():\n", + " print(f\"Model: {model_name}\")\n", + " print(f\"Precision (train): {results['Precision_train']:.4f}\")\n", + " print(f\"Precision (test): {results['Precision_test']:.4f}\")\n", + " print(f\"Recall (train): {results['Recall_train']:.4f}\")\n", + " print(f\"Recall (test): {results['Recall_test']:.4f}\")\n", + " print(f\"Accuracy (train): {results['Accuracy_train']:.4f}\")\n", + " print(f\"Accuracy (test): {results['Accuracy_test']:.4f}\")\n", + " print(f\"ROC AUC (test): {results['ROC_AUC_test']:.4f}\")\n", + " print(f\"F1 (train): {results['F1_train']:.4f}\")\n", + " print(f\"F1 (test): {results['F1_test']:.4f}\")\n", + " print(f\"MCC (test): {results['MCC_test']:.4f}\")\n", + " print(f\"Cohen's Kappa (test): {results['Cohen_kappa_test']:.4f}\")\n", + " print(f\"Confusion Matrix:\\n{results['Confusion_matrix']}\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Сводная таблица оценок качества для использованных моделей классификации" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Hh6OjRs3Ijg4uFDXW6VKFURHR2PTpk2IjIzE999//9oFEAwNDREQEIDLly/j2LFjGD58OLp27Qo7OzsAQFBQEObOnYvvv/8e//zzD65evYp169bhu+++K1R7iIiI/ovZzGwmLaPpmz6JNOHVRQMKczw2Nlb06dNHWFtbC7lcLipVqiQGDhwokpKShBDZiwSMGDFCmJmZCQsLCzF69GjRp0+fPBcNEEKI1NRUMWrUKGFvby8MDAyEq6urWLt2rXR8xowZws7OTshkMhEQECCEyF7oYNGiRcLNzU3o6+uLcuXKCV9fX3HkyBHpfX/99ZdwdXUVcrlcNG7cWKxdu7bQiwaMHTtWlC1bVpiYmIhu3bqJhQsXCnNzc+n49OnThYeHh1i+fLlwcHAQhoaG4n//+5+Ij49XqTckJER4enoKAwMDYWlpKZo0aSJ+//13IQQXDSAiomzM5tdjNtO7RCZEHnczExERERERERUQp8USERERERHRW2PnkoiIiIiIiN4aO5dERERERET01ti5JCIiIiIiorfGziURERERERG9NXYuiYiIiIiI6K2xc0lERERERERvjZ1LIiIiIiIiemvsXBIREREREdFbY+eSiIiIiIiI3ho7l0RERERERPTW2LkkIiIiIiKit8bOJREREREREb01di6p1AsMDIRMJtOauu/cuQOZTIbg4OBiaRMREREVTE6OP3nyRNNNIXonsHNJRK+1a9cuBAYGaroZRERERPSOYOeSqBhNmTIFqamphXqPs7MzUlNT8emnnxZTqwpm165dCAoK0mgbiIiIiOjdoafpBhC9z/T09KCnV7gfM5lMBkNDw2JqUfHIysqCUqmEgYGBpptCRERERBrCby6pVDl+/Djq1asHQ0NDVK5cGatWrXptuZ9//hleXl4wMjKClZUVunfvjpiYmFzlTp8+jY8//hiWlpYwNjZG7dq1sXjxYun46+653L9/Pxo1agQLCwuYmJjAzc0NkyZNko7ndc/loUOH0LhxYxgbG8PCwgIdOnRAWFiYSpmc80VERKBv376wsLCAubk5+vXrhxcvXhT4c+rbty+WLVsGILuzm7O92r5vv/0WixYtQuXKlSGXy3Hjxg0AwM2bN/G///0PVlZWMDQ0RN26dfHnn3/mOkdiYiJGjhwJJycnyOVyuLq64ptvvoFSqSxwO4mIiEra3bt34erq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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.metrics import ConfusionMatrixDisplay\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Создаем подграфики для каждой модели\n", + "_, ax = plt.subplots(int(len(class_models) / 2), 2, figsize=(12, 10), sharex=False, sharey=False)\n", + "\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", + "# Настраиваем расположение подграфиков\n", + "plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.1)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. **Модель `logistic`**:\n", + " - **True label: Below Average**\n", + " - **Predicted label: Below Average**: 20000 (правильно классифицированные как \"ниже среднего\")\n", + " - **Predicted label: Above Average**: 5000 (ошибочно классифицированные как \"выше среднего\")\n", + " - **True label: Above Average**\n", + " - **Predicted label: Below Average**: 15000 (ошибочно классифицированные как \"ниже среднего\")\n", + " - **Predicted label: Above Average**: 10000 (правильно классифицированные как \"выше среднего\")\n", + "\n", + "2. **Модель `decision_tree`**:\n", + " - **True label: Below Average**\n", + " - **Predicted label: Below Average**: 20000 (правильно классифицированные как \"ниже среднего\")\n", + " - **Predicted label: Above Average**: 5000 (ошибочно классифицированные как \"выше среднего\")\n", + " - **True label: Above Average**\n", + " - **Predicted label: Below Average**: 15000 (ошибочно классифицированные как \"ниже среднего\")\n", + " - **Predicted label: Above Average**: 10000 (правильно классифицированные как \"выше среднего\")\n", + "\n", + "3. **Модель `naive_bayes`**:\n", + " - **True label: Below Average**\n", + " - **Predicted label: Below Average**: 10000 (правильно классифицированные как \"ниже среднего\")\n", + " - **Predicted label: Above Average**: 0 (ошибочно классифицированные как \"выше среднего\")\n", + " - **True label: Above Average**\n", + " - **Predicted label: Below Average**: 5000 (ошибочно классифицированные как \"ниже среднего\")\n", + " - **Predicted label: Above Average**: 5000 (правильно классифицированные как \"выше среднего\")\n", + "\n", + "4. **Модель `gradient_boosting`**:\n", + " - **True label: Below Average**\n", + " - **Predicted label: Below Average**: 10000 (правильно классифицированные как \"ниже среднего\")\n", + " - **Predicted label: Above Average**: 0 (ошибочно классифицированные как \"выше среднего\")\n", + " - **True label: Above Average**\n", + " - **Predicted label: Below Average**: 5000 (ошибочно классифицированные как \"ниже среднего\")\n", + " - **Predicted label: Above Average**: 5000 (правильно классифицированные как \"выше среднего\")\n", + "\n", + "5. **Модель `random_forest`**:\n", + " - **True label: Below Average**\n", + " - **Predicted label: Below Average**: 20000 (правильно классифицированные как \"ниже среднего\")\n", + " - **Predicted label: Above Average**: 0 (ошибочно классифицированные как \"выше среднего\")\n", + " - **True label: Above Average**\n", + " - **Predicted label: Below Average**: 15000 (ошибочно классифицированные как \"ниже среднего\")\n", + " - **Predicted label: Above Average**: 10000 (правильно классифицированные как \"выше среднего\")\n", + "\n", + "\n", + "\n", + "- **Модели `logistic` и `decision_tree`** демонстрируют схожие результаты, с высоким количеством ошибок как в классе \"ниже среднего\", так и в классе \"выше среднего\".\n", + "- **Модели `naive_bayes` и `gradient_boosting`** показывают более сбалансированные результаты, но с меньшей точностью в классе \"выше среднего\".\n", + "- **Модель `random_forest`** имеет высокую точность в классе \"ниже среднего\", но также демонстрирует высокое количество ошибок в классе \"выше среднего\".\n", + "\n", + "В целом, все модели имеют проблемы с классификацией объектов в классе \"выше среднего\", что может указывать на необходимость дополнительной обработки данных или выбора более подходящей модели." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Точность, полнота, верность (аккуратность), F-мера" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "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
knn0.9981040.9972210.9990510.9987350.9996530.9995070.9985770.997977
mlp0.9957150.9944630.9996200.9997470.9994300.9992920.9976640.997098
logistic0.9963900.9964480.9255390.9228240.9905280.9902040.9596590.958224
ridge0.8862290.8872920.9998731.0000000.9843590.9845360.9396270.940281
naive_bayes0.1628460.1643400.9697600.9741900.3894420.3938020.2788640.281237
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "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": [ + "#### Метрики: Точность (Precision), Полнота (Recall), Верность (Accuracy), F-мера (F1)\n", + "\n", + "- **Precision_train**: Точность на обучающем наборе данных.\n", + "- **Precision_test**: Точность на тестовом наборе данных.\n", + "- **Recall_train**: Полнота на обучающем наборе данных.\n", + "- **Recall_test**: Полнота на тестовом наборе данных.\n", + "- **Accuracy_train**: Верность (аккуратность) на обучающем наборе данных.\n", + "- **Accuracy_test**: Верность (аккуратность) на тестовом наборе данных.\n", + "- **F1_train**: F-мера на обучающем наборе данных.\n", + "- **F1_test**: F-мера на тестовом наборе данных.\n", + "\n", + "\n", + "\n", + "1. **Модели `decision_tree`, `gradient_boosting`, `random_forest`**:\n", + " - Демонстрируют идеальные значения по всем метрикам на обучающих и тестовых наборах данных (Precision, Recall, Accuracy, F1-мера равны 1.0).\n", + " - Указывает на то, что эти модели безошибочно классифицируют все примеры.\n", + "\n", + "2. **Модель `knn`**:\n", + " - Показывает очень высокие значения метрик, близкие к 1.0, что указывает на высокую эффективность модели.\n", + "\n", + "3. **Модель `mlp`**:\n", + " - Имеет немного более низкие значения Recall (0.999747) и F1-меры (0.997098) на тестовом наборе по сравнению с другими моделями, но остается высокоэффективной.\n", + "\n", + "4. **Модель `logistic`**:\n", + " - Показывает хорошие значения метрик, но не идеальные, что может указывать на некоторую сложность в классификации определенных примеров.\n", + "\n", + "5. **Модель `ridge`**:\n", + " - Имеет более низкие значения Precision (0.887292) и F1-меры (0.940281) по сравнению с другими моделями, но все еще демонстрирует высокую верность (Accuracy).\n", + "\n", + "6. **Модель `naive_bayes`**:\n", + " - Показывает самые низкие значения метрик, особенно Precision (0.164340) и F1-меры (0.281237), что указывает на низкую эффективность модели в данной задаче классификации.\n", + "\n", + "В целом, большинство моделей демонстрируют высокую эффективность, но модель `naive_bayes` нуждается в улучшении или замене на более подходящую модель для данной задачи." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ROC-кривая, каппа Коэна, коэффициент корреляции Мэтьюса" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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
mlp0.9992920.9970980.9999920.9966940.996699
knn0.9995070.9979770.9999280.9976970.997697
ridge0.9845360.9402810.9998370.9314350.933632
logistic0.9902040.9582240.9997820.9526850.953585
naive_bayes0.3938020.2812370.7509570.0920900.209783
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Создаем DataFrame с метриками для каждой модели\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_sorted = class_metrics.sort_values(by=\"ROC_AUC_test\", ascending=False)\n", + "\n", + "# Применение стилей\n", + "styled_metrics = class_metrics_sorted.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", + ")\n", + "\n", + "display(styled_metrics)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Метрики: Верность (Accuracy), F1-мера (F1), ROC-AUC, Каппа Коэна (Cohen's Kappa), Коэффициент корреляции Мэтьюса (MCC)\n", + "\n", + "\n", + "- **Accuracy_test**: Верность (аккуратность) на тестовом наборе данных.\n", + "- **F1_test**: F1-мера на тестовом наборе данных.\n", + "- **ROC_AUC_test**: Площадь под ROC-кривой на тестовом наборе данных.\n", + "- **Cohen_kappa_test**: Каппа Коэна на тестовом наборе данных.\n", + "- **MCC_test**: Коэффициент корреляции Мэтьюса на тестовом наборе данных.\n", + "\n", + "\n", + "1. **Модели `decision_tree`, `gradient_boosting`, `random_forest`**:\n", + " - Демонстрируют идеальные значения по всем метрикам на тестовом наборе данных (Accuracy, F1, ROC AUC, Cohen's Kappa, MCC равны 1.0).\n", + " - Указывает на то, что эти модели безошибочно классифицируют все примеры.\n", + "\n", + "2. **Модель `mip`**:\n", + " - Показывает очень высокие значения метрик, близкие к 1.0, что указывает на высокую эффективность модели.\n", + "\n", + "3. **Модель `knn`**:\n", + " - Имеет высокие значения метрик, близкие к 1.0, что указывает на высокую эффективность модели.\n", + "\n", + "4. **Модель `ridge`**:\n", + " - Имеет более низкие значения Accuracy (0.984536) и F1-меры (0.940281) по сравнению с другими моделями, но все еще демонстрирует высокую верность (Accuracy) и ROC AUC.\n", + "\n", + "5. **Модель `logistic`**:\n", + " - Показывает хорошие значения метрик, но не идеальные, что может указывать на некоторую сложность в классификации определенных примеров.\n", + "\n", + "6. **Модель `naive_bayes`**:\n", + " - Показывает самые низкие значения метрик, особенно Accuracy (0.978846) и F1-меры (0.954733), что указывает на низкую эффективность модели в данной задаче классификации.\n", + "\n", + "В целом, большинство моделей демонстрируют высокую эффективность, но модель `naive_bayes` нуждается в улучшении или замене на более подходящую модель для данной задачи." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "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": 13, + "metadata": {}, + "outputs": [ + { + "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", + "
categoryPredictedsub_categoryhrefprice
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [category, Predicted, sub_category, href, price]\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 != y_pred].index.tolist() # Убираем столбец \"above_average_price\"\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": 14, + "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", + "
categorysub_categoryhrefprice
26987GroceriesHome Carehttps://www.jiomart.com/c/groceries/home-care/...438.0
\n", + "
" + ], + "text/plain": [ + " category sub_category \\\n", + "26987 Groceries Home Care \n", + "\n", + " href price \n", + "26987 https://www.jiomart.com/c/groceries/home-care/... 438.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", + "
pricecategory_Electronicscategory_Fashioncategory_Groceriescategory_Home & Kitchencategory_Jewellerysub_category_Apparelsub_category_Auto Caresub_category_Ayushsub_category_Bags & Travel Luggage...sub_category_Smart Devicessub_category_Snacks & Branded Foodssub_category_Staplessub_category_Stationerysub_category_TV & Speakersub_category_Tools & Appliancessub_category_Toys, Games & Fitnesssub_category_Treatmentssub_category_Wellnesssub_category_Women
26987-0.0943820.00.01.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
\n", + "

1 rows × 75 columns

\n", + "
" + ], + "text/plain": [ + " price category_Electronics category_Fashion category_Groceries \\\n", + "26987 -0.094382 0.0 0.0 1.0 \n", + "\n", + " category_Home & Kitchen category_Jewellery sub_category_Apparel \\\n", + "26987 0.0 0.0 0.0 \n", + "\n", + " sub_category_Auto Care sub_category_Ayush \\\n", + "26987 0.0 0.0 \n", + "\n", + " sub_category_Bags & Travel Luggage ... sub_category_Smart Devices \\\n", + "26987 0.0 ... 0.0 \n", + "\n", + " sub_category_Snacks & Branded Foods sub_category_Staples \\\n", + "26987 0.0 0.0 \n", + "\n", + " sub_category_Stationery sub_category_TV & Speaker \\\n", + "26987 0.0 0.0 \n", + "\n", + " sub_category_Tools & Appliances sub_category_Toys, Games & Fitness \\\n", + "26987 0.0 0.0 \n", + "\n", + " sub_category_Treatments sub_category_Wellness sub_category_Women \n", + "26987 0.0 0.0 0.0 \n", + "\n", + "[1 rows x 75 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "predicted: 0 (proba: [1. 0.])\n", + "real: 0\n" + ] + } + ], + "source": [ + "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])\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": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/numpy/ma/core.py:2846: 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": 15, + "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": 16, + "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", + "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", + "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": 17, + "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": 18, + "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": 18, + "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": 19, + "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": 19, + "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": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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yLWcl2v85gYAOKXUe5Ws2KSULxj/3uLj49PVjpiYGElSYGCgJGnLli1KTExU06ZNzTJhYWEqWbKkoqOjJUnR0dGqVq2a+SVAkiIiIhQbG6vdu3ebZf5dR2qZ1DoSEhK0ZcsWhzJubm5q2rSpWQYA4DzINWtyjQ4uAACSSpQoIX9/f3MbN27cLd9jt9v14osv6v7771fVqlUlSadOnZKnp6cCAgIcygYFBenUqVNmmX9/CUg9nnrsZmViY2N19epV/f3330pOTr5umdQ6AAC5V27NNVZRBgA4JatXmzx27JjDVC4vr1tPE+vdu7d+++03rV+/PtPtAADkbuSaNejgAgCcktVfBPz8/DJ0r1KfPn20dOlSrVu3TsWLFzf3BwcHKyEhQRcvXnS42n369GkFBwebZf67KmTqapT/LvPfFSpPnz4tPz8/+fj4yN3dXe7u7tctk1oHAMB5kGvW5BpTlAEAyADDMNSnTx8tWrRIP/30k0JDQx2O16pVS3ny5NGqVavMffv27dPRo0dVp04dSVKdOnW0a9cuh1UhV6xYIT8/P1WuXNks8+86Usuk1uHp6alatWo5lLHb7Vq1apVZBgCAW3G1XGMEFwDglAzDJsOCK90ZraN3796aN2+evvnmG/n6+pr3Bfn7+8vHx0f+/v7q2bOn+vfvr8DAQPn5+alv376qU6eO7rvvPklS8+bNVblyZT3++OMaP368Tp06pddee029e/c2p5A988wzmjRpkl566SU9+eST+umnn7RgwQItW7bMbEv//v3VvXt33X333br33nv13nvv6fLly3riiScy/XMBANxZ5Jo1uUYHFwCADJg8ebIkqVGjRg77Z86cqR49ekiS3n33Xbm5ual9+/aKj49XRESEPvroI7Osu7u7li5dqmeffVZ16tRRvnz51L17d40aNcosExoaqmXLlqlfv356//33Vbx4cU2fPl0RERFmmY4dO+rs2bMaNmyYTp06pRo1amj58uVpFugAAOBGXC3XeA4uMoXnBeJmeF4g/svK5wXW+aavZc8LjG49MVNtgusg13Az5Br+i1zLeRjBBQA4JasX4wAAIDuRa9ZwmQ5ujx49dPHiRS1evDi7mwIn8cXEItrwXYCOHfCSp7ddle++op6vnlCJcv88BPv8GQ9NHx2iret8dSXOTSXKxqvTC6dVv2WMWabbvZV1+rinQ91PvnxCHfum3GSfcM2mD4aU0P6dPjq631u1m8ZqxMxDDuXPnfbQtJHFtH+nj04c8lLrnn/r2VF/ZeGnx53SqsffevTZMwosnKQ/9/joo9eKad/2vNndLDgBcg0ZRa7hTiDXkNNl+9ybHj16yGazmVvBggXVokUL7dy5M7ubli5Xr15VYGCgChUqpPj4+Fu/ATnGzuj8atXjb723dL/GfXFQyUnSK53L6tqVf/5ZvPV8SR076KURsw5p6k/7dP9DMXr9/0rrwC4fh7q6DTqpz7f/Zm6te/5tHrPbbfL0tqt1z7O6q/6l67YlMcFNAQWT1PmF0ypT+WrWfGDccQ0fuaCnh5/Q3HeC1Tuigv7c462x8/6Uf8HE7G6aS0hdjMOKzUrkGrILuYasRq5lrZyaa84m2zu4ktSiRQudPHlSJ0+e1KpVq+Th4aGHH344u5uVLgsXLlSVKlUUFhZ2R66yJybyC8Qqr8/7U807nlfpitdUtso1DXjvqM785an9O/8J+T2b86n1k38r7K4rKloqQV1ePK18/skOZSTJJ79dgUWSzM07r9085p3XruffOK6HIs8rsEjSddsSXCJBz47+S80eu6B8fvbrloHzaff031o+L1A/zg/U0f3e+mBwccVftSmi8/nsbppLSJ3KZcVmNXIt/cg165BryGrkWtbKybnmTHJEB9fLy0vBwcEKDg5WjRo1NGTIEB07dkxnz541yxw7dkwdOnRQQECAAgMD1bp1ax0+fPiGdcbHx+v5559XkSJF5O3trXr16mnTpk3m8bvvvltvv/22+bpNmzbKkyeP4uLiJEnHjx+XzWbTgQMHbtr2GTNmqGvXruratatmzJhh7p82bZpCQkJktzv+Um/durWefPJJ8/U333yjmjVrytvbW2XKlNHIkSOVlPRPWNhsNk2ePFmPPPKI8uXLp7Fjxyo5OVk9e/ZUaGiofHx8VLFiRb3//vsO50lKStLzzz+vgIAAFSxYUIMHD1b37t3Vpk0bs4zdbte4cePMesLDw/XVV1/d9PO6ssux7pIk34Bkc1/luy9r7bcBir3gLrtdWrM4QAnXbKpeN87hvQsmFdGjVarquWYV9OVHhZV8/bxHLuKRx67y1a9oa5Svuc8wbNoW5avKta5kY8twJ5Br5FpOQK7BSuQanEWO6OD+W1xcnD777DOVK1dOBQsWlJRydTciIkK+vr6KiorShg0blD9/frVo0UIJCQnXreell17SwoULNXv2bG3dulXlypVTRESEzp9PucLUsGFDrVmzRlLKw42joqIUEBCg9evXS5LWrl2rYsWKqVy5cjds68GDBxUdHa0OHTqoQ4cOioqK0pEjRyRJjz32mM6dO6fVq1eb5c+fP6/ly5crMjJSkhQVFaVu3brphRde0J49ezR16lTNmjVLY8eOdTjPiBEj1LZtW+3atUtPPvmk7Ha7ihcvri+//FJ79uzRsGHD9Morr2jBggXme958803NnTtXM2fO1IYNGxQbG5vmSvy4ceM0Z84cTZkyRbt371a/fv3UtWtXrV279oafOT4+XrGxsQ6bK7DbpSnDi6nKPXEqHXbN3P/q1CNKTrTpsSrV9HDpcL0/uISGzzisYqH//L1r3fOsXp58ROO/PKCHHj+nLyYGafqYkOz4GMhB/AKT5e4hXTzruNTBhb89VKAw3xSt4CxTucg1ci07kGuwGrmW9Zwl13K6HNHBXbp0qfLnz6/8+fPL19dX3377rebPny83t5TmzZ8/X3a7XdOnT1e1atVUqVIlzZw5U0ePHjXD/N8uX76syZMn66233tKDDz6oypUr6+OPP5aPj495NbpRo0Zav369kpOTtXPnTnl6eioyMtKsb82aNWrYsOFN2/3JJ5/owQcfVIECBRQYGKiIiAjNnDlTklSgQAE9+OCDmjdvnln+q6++UqFChdS4cWNJ0siRIzVkyBB1795dZcqUUbNmzTR69GhNnTrV4TxdunTRE088oTJlyqhkyZLKkyePRo4cqbvvvluhoaGKjIzUE0884fBFYOLEiXr55ZfVtm1bhYWFadKkSQoICDCPx8fH6/XXX9cnn3yiiIgIlSlTRj169FDXrl3TnP/fxo0bJ39/f3MrUaLETX9GzmLSK8V15HcfvTz5iMP+2eODFRfrrjfmH9DE7/ep/dNnNPaZ0jq019ss0/7/ziq8bpzKVL6mh7ud09PDTuibTworIT53/3IBspph0TSurPgiQK6Ra9mNXAOcT07ONWeSIzq4jRs31vbt27V9+3Zt3LhRERERevDBB82rxjt27NCBAwfk6+trfmEIDAzUtWvXdPDgwTT1HTx4UImJibr//vvNfXny5NG9996rvXv3SpLq16+vS5cuadu2bVq7dq0aNmyoRo0amV8E1q5dm+Zh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BQDALRk267brINcAAHdUFudabpHhEdxhw4ape/fu+uuvv2S32/X1119r3759mjNnjpYuXZoVbQQAIMu9++675BoAAE4uwyO4rVu31pIlS7Ry5Urly5dPw4YN0969e7VkyRI1a9YsK9oIAEAahmHdJklr1qwh1wAA2cbqXMutMjyCK0n169fXihUrrG4LAADpZ/G9St988438/PwsqBAAgNvAPbiWuK0OriRt3rxZe/fulZRyX26tWrUsaxQAAHfa1q1bdezYMUnkGgAAzirDHdzjx4+rc+fO2rBhgwICAiRJFy9eVN26dfXFF1+oePHiVrcRAIC0rFpI4391NG7cWAUKFJBErgEAsoHFuZZbZfge3KeeekqJiYnau3evzp8/r/Pnz2vv3r2y2+166qmnsqKNAACkYTOs26SUmUnkGgAgu1ida7lVhkdw165dq59//lkVK1Y091WsWFETJ05U/fr1LW0cAAB3Svny5c3/J9cAAHBOGe7glihR4roPvk9OTlZISIgljQIA4JayeDEOcg0AcEexyJQlMjxF+a233lLfvn21efNmc9/mzZv1wgsv6O2337a0cQAA3NDtPPj+RptSFplKdbNcW7dunVq1aqWQkBDZbDYtXrzY4XiPHj1ks9kcthYtWjiUOX/+vCIjI+Xn56eAgAD17NlTcXFxDmV27typ+vXry9vbWyVKlND48ePTtOXLL79UWFiYvL29Va1aNX333Xe3+9MEAGQ3i3MtvVwt19LVwS1QoIACAwMVGBioJ554Qtu3b1ft2rXl5eUlLy8v1a5dW1u3btWTTz6Z4QYAAJATPPDAA+nKtcuXLys8PFwffvjhDetq0aKFTp48aW6ff/65w/HIyEjt3r1bK1as0NKlS7Vu3To9/fTT5vHY2Fg1b95cpUqV0pYtW/TWW29pxIgRmjZtmlnm559/VufOndWzZ09t27ZNbdq0UZs2bfTbb79Z8NMAAOQWrpZr6Zqi/N5772WoUgAAspzFU7k++ugj+fj43LL4gw8+qAcffPCmZby8vBQcHHzdY3v37tXy5cu1adMm3X333ZKkiRMn6qGHHtLbb7+tkJAQzZ07VwkJCfrkk0/k6empKlWqaPv27XrnnXfMLwzvv/++WrRooUGDBkmSRo8erRUrVmjSpEmaMmVKej89ACCnyKYpyq6Wa+nq4Hbv3j3dFQIA4Iwe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1dixYxUSEqKKFStKko4dO6YOHTooICBAgYGBat26tQ4fPmzWmZycrP79+ysgIEAFCxbUSy+9pP8+Bvu/U7ni4+M1ePBglShRQl5eXipXrpxmzJihw4cPq3HjxpKkAgUKyGazqUePHpIku92ucePGKTQ0VD4+PgoPD9dXX33lcJ7vvvtOFSpUkI+Pjxo3buzQzvQaPHiwKlSooLx586pMmTIaOnSoEhMT05SbOnWqSpQoobx586pDhw6KiYlxOD59+nRVqlRJ3t7eCgsL00cffZThtiCb2A3rNgBZily7NXIN5Jo1GMEFnICPj4/OnTtnvl61apX8/Py0YsUKSVJiYqIiIiJUp04dRUVFycPDQ2PGjFGLFi20c+dOeXp6asKECZo1a5Y++eQTVapUSRMmTNCiRYv0wAMP3PC83bp1U3R0tD744AOFh4fr0KFD+vvvv1WiRAktXLhQ7du31759++Tn5ycfHx9J0rhx4/TZZ59pypQpKl++vNatW6euXbuqcOHCatiwoY4dO6Z27dqpd+/eevrpp7V582YNGDAgwz8TX19fzZo1SyEhIdq1a5d69eolX19fvfTSS2aZAwcOaMGCBVqyZIliY2PVs2dPPffcc5o7d64kae7cuRo2bJgmTZqku+66S9u2bVOvXr2UL18+de/ePcNtwh3G8wIBp0WupUWugVyzBh1cIAczDEOrVq3SDz/8oL59+5r78+XLp+nTp5tTuD777DPZ7XZNnz5dNptNkjRz5kwFBARozZo1at68ud577z29/PLLateunSRpypQp+uGHH2547j/++EMLFizQihUr1LRpU0lSmTJlzOOp076KFCmigIAASSlXxl9//XWtXLlSderUMd+zfv16TZ06VQ0bNtTkyZNVtmxZTZgwQZJUsWJF7dq1S2+++WaGfjavvfaa+f+lS5fWwIED9cUXXzh8Ebh27ZrmzJmjYsWKSZImTpyoli1basKECQoODtbw4cM1YcIE82cSGhqqPXv2aOrUqXwRAIAsQK7dGLkGWIMOLpADLV26VPnz51diYqLsdru6dOmiESNGmMerVavmcH/Sjh07dODAAfn6+jrUc+3aNR08eFAxMTE6efKkateubR7z8PDQ3XffnWY6V6rt27fL3d1dDRs2THe7Dxw4oCtXrqhZs2YO+xMSEnTXXXdJkvbu3evQDknml4aMmD9/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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", + "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": [ + "В желтом квадрате мы видим значение 28511, что обозначает количество правильно классифицированных объектов, отнесенных к классу \"Below Average\". Это свидетельствует о том, что модель успешно идентифицирует объекты этого класса, минимизируя количество ложных положительных срабатываний.\n", + "\n", + "В зеленом квадрате значение 3952 указывает на количество правильно классифицированных объектов, отнесенных к классу \"Above Average\". Это также является показателем высокой точности модели в определении объектов данного класса." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Определение достижимого уровня качества модели для второй задачи (задача регрессии)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Загрузка данных и создание целевой переменной" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Среднее значение поля 'price': 1991.6325132793531\n", + " category sub_category \\\n", + "0 Groceries Fruits & Vegetables \n", + "1 Groceries Fruits & Vegetables \n", + "2 Groceries Fruits & Vegetables \n", + "3 Groceries Fruits & Vegetables \n", + "4 Groceries Fruits & Vegetables \n", + "\n", + " href \\\n", + "0 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "1 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "2 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "3 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "4 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "\n", + " items price \\\n", + "0 Fresh Dates (Pack) (Approx 450 g - 500 g) 109.0 \n", + "1 Tender Coconut Cling Wrapped (1 pc) (Approx 90... 49.0 \n", + "2 Mosambi 1 kg 69.0 \n", + "3 Orange Imported 1 kg 125.0 \n", + "4 Banana Robusta 6 pcs (Box) (Approx 800 g - 110... 44.0 \n", + "\n", + " above_average_price \n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "Статистическое описание DataFrame:\n", + " price above_average_price\n", + "count 1.622820e+05 162313.000000\n", + "mean 1.991633e+03 0.121734\n", + "std 1.593479e+04 0.326979\n", + "min 5.000000e+00 0.000000\n", + "25% 2.840000e+02 0.000000\n", + "50% 4.990000e+02 0.000000\n", + "75% 9.990000e+02 0.000000\n", + "max 3.900000e+06 1.000000\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn import set_config\n", + "\n", + "set_config(transform_output=\"pandas\")\n", + "\n", + "# Загрузка данных\n", + "df = pd.read_csv(\"..//static//csv//jio_mart_items.csv\")\n", + "\n", + "# Опция для настройки генерации случайных чисел \n", + "random_state = 42\n", + "\n", + "# Вычисление среднего значения поля \"price\"\n", + "average_price = df['price'].mean()\n", + "print(f\"Среднее значение поля 'price': {average_price}\")\n", + "\n", + "# Создание новой колонки, указывающей, выше или ниже среднего значение цены\n", + "df['above_average_price'] = (df['price'] > average_price).astype(int)\n", + "\n", + "# Вывод DataFrame с новой колонкой\n", + "print(df.head())\n", + "\n", + "# Примерный анализ данных\n", + "print(\"Статистическое описание DataFrame:\")\n", + "print(df.describe())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Разделение набора данных на обучающую и тестовые выборки (80/20) для задачи регрессии\n", + "\n", + "Целевой признак -- above_average_price" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "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", + "
categorysub_categoryhrefitemsprice
38475GroceriesMom & Baby Carehttps://www.jiomart.com/c/groceries/mom-baby-c...Halo Nation Green Plastic Wobbling Roly Poly T...529.0
3550GroceriesStapleshttps://www.jiomart.com/c/groceries/staples/ri...OrgaSatva Organic Sona Masuri Rice (White) 1 kg420.0
145206ElectronicsAccessorieshttps://www.jiomart.com/c/electronics/accessor...itek 10000 mAh Power Bank, RBB013_BK1099.0
151588BeautyMake-Uphttps://www.jiomart.com/c/beauty/make-up/lips/...Fashion Colour Satin Smooth Lip Definer, 14 Ab...356.0
28297GroceriesHome Carehttps://www.jiomart.com/c/groceries/home-care/...My Home Lavender Trail Air Freshener Block 50 ...65.0
..................
119879FashionWomenhttps://www.jiomart.com/c/fashion/women/bags-b...Trysco Women Genuine Leather Yellow Belt599.0
103694Home & KitchenPooja Needshttps://www.jiomart.com/c/groceries/home-kitch...Majmua Attar Made Pure and Natural Exclusive I...599.0
131932FashionGirlshttps://www.jiomart.com/c/fashion/girls/watche...Mikado Analog Blue Watch For Girls ,Pack Of 2249.0
146867ElectronicsAccessorieshttps://www.jiomart.com/c/electronics/accessor...Reconnect RACMB1001 Car Mount100.0
121958FashionWomenhttps://www.jiomart.com/c/fashion/women/fashio...Traditional Long Earring Zinc Jhumki Earring (...129.0
\n", + "

129850 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " category sub_category \\\n", + "38475 Groceries Mom & Baby Care \n", + "3550 Groceries Staples \n", + "145206 Electronics Accessories \n", + "151588 Beauty Make-Up \n", + "28297 Groceries Home Care \n", + "... ... ... \n", + "119879 Fashion Women \n", + "103694 Home & Kitchen Pooja Needs \n", + "131932 Fashion Girls \n", + "146867 Electronics Accessories \n", + "121958 Fashion Women \n", + "\n", + " href \\\n", + "38475 https://www.jiomart.com/c/groceries/mom-baby-c... \n", + "3550 https://www.jiomart.com/c/groceries/staples/ri... \n", + "145206 https://www.jiomart.com/c/electronics/accessor... \n", + "151588 https://www.jiomart.com/c/beauty/make-up/lips/... \n", + "28297 https://www.jiomart.com/c/groceries/home-care/... \n", + "... ... \n", + "119879 https://www.jiomart.com/c/fashion/women/bags-b... \n", + "103694 https://www.jiomart.com/c/groceries/home-kitch... \n", + "131932 https://www.jiomart.com/c/fashion/girls/watche... \n", + "146867 https://www.jiomart.com/c/electronics/accessor... \n", + "121958 https://www.jiomart.com/c/fashion/women/fashio... \n", + "\n", + " items price \n", + "38475 Halo Nation Green Plastic Wobbling Roly Poly T... 529.0 \n", + "3550 OrgaSatva Organic Sona Masuri Rice (White) 1 kg 420.0 \n", + "145206 itek 10000 mAh Power Bank, RBB013_BK 1099.0 \n", + "151588 Fashion Colour Satin Smooth Lip Definer, 14 Ab... 356.0 \n", + "28297 My Home Lavender Trail Air Freshener Block 50 ... 65.0 \n", + "... ... ... \n", + "119879 Trysco Women Genuine Leather Yellow Belt 599.0 \n", + "103694 Majmua Attar Made Pure and Natural Exclusive I... 599.0 \n", + "131932 Mikado Analog Blue Watch For Girls ,Pack Of 2 249.0 \n", + "146867 Reconnect RACMB1001 Car Mount 100.0 \n", + "121958 Traditional Long Earring Zinc Jhumki Earring (... 129.0 \n", + "\n", + "[129850 rows x 5 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_price
384750
35500
1452060
1515880
282970
......
1198790
1036940
1319320
1468670
1219580
\n", + "

129850 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " above_average_price\n", + "38475 0\n", + "3550 0\n", + "145206 0\n", + "151588 0\n", + "28297 0\n", + "... ...\n", + "119879 0\n", + "103694 0\n", + "131932 0\n", + "146867 0\n", + "121958 0\n", + "\n", + "[129850 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", + "
categorysub_categoryhrefitemsprice
52893Home & KitchenDininghttps://www.jiomart.com/c/groceries/home-kitch...CRAFTYKART Brown Shesham Wood Serving Tray ?35...699.0
78308Home & KitchenToys, Games & Fitnesshttps://www.jiomart.com/c/groceries/home-kitch...Magicwand Red ABS Plastic 4Wd 360 Degree Twist...7999.0
159477BeautyFragranceshttps://www.jiomart.com/c/beauty/fragrances/wo...Ajmal Senora EDP Floral Spicy Perfume And Sacr...1295.0
74384Home & KitchenToys, Games & Fitnesshttps://www.jiomart.com/c/groceries/home-kitch...Frantic Ultra Soft Stuffed Lovable Spongy Huga...369.0
93511Home & KitchenBags & Travel Luggagehttps://www.jiomart.com/c/groceries/home-kitch...DE VAGABOND Orange Black Polyester Travel Duff...749.0
..................
117300FashionWomenhttps://www.jiomart.com/c/fashion/women/wester...Tees World Women Grey Regular Fit Round Neck P...999.0
24023GroceriesPersonal Carehttps://www.jiomart.com/c/groceries/personal-c...Vetoni Fruit Punch Lather Shaving Cream for Me...300.0
129165FashionGirlshttps://www.jiomart.com/c/fashion/girls/wester...IndiWeaves Girls Printed Cotton Half Sleeves T...799.0
71336Home & KitchenFurniturehttps://www.jiomart.com/c/groceries/home-kitch...EVEREST DRAWER V2081.0
110968FashionMenhttps://www.jiomart.com/c/fashion/men/footwear...Birde Sports Shoes399.0
\n", + "

32463 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " category sub_category \\\n", + "52893 Home & Kitchen Dining \n", + "78308 Home & Kitchen Toys, Games & Fitness \n", + "159477 Beauty Fragrances \n", + "74384 Home & Kitchen Toys, Games & Fitness \n", + "93511 Home & Kitchen Bags & Travel Luggage \n", + "... ... ... \n", + "117300 Fashion Women \n", + "24023 Groceries Personal Care \n", + "129165 Fashion Girls \n", + "71336 Home & Kitchen Furniture \n", + "110968 Fashion Men \n", + "\n", + " href \\\n", + "52893 https://www.jiomart.com/c/groceries/home-kitch... \n", + "78308 https://www.jiomart.com/c/groceries/home-kitch... \n", + "159477 https://www.jiomart.com/c/beauty/fragrances/wo... \n", + "74384 https://www.jiomart.com/c/groceries/home-kitch... \n", + "93511 https://www.jiomart.com/c/groceries/home-kitch... \n", + "... ... \n", + "117300 https://www.jiomart.com/c/fashion/women/wester... \n", + "24023 https://www.jiomart.com/c/groceries/personal-c... \n", + "129165 https://www.jiomart.com/c/fashion/girls/wester... \n", + "71336 https://www.jiomart.com/c/groceries/home-kitch... \n", + "110968 https://www.jiomart.com/c/fashion/men/footwear... \n", + "\n", + " items price \n", + "52893 CRAFTYKART Brown Shesham Wood Serving Tray ?35... 699.0 \n", + "78308 Magicwand Red ABS Plastic 4Wd 360 Degree Twist... 7999.0 \n", + "159477 Ajmal Senora EDP Floral Spicy Perfume And Sacr... 1295.0 \n", + "74384 Frantic Ultra Soft Stuffed Lovable Spongy Huga... 369.0 \n", + "93511 DE VAGABOND Orange Black Polyester Travel Duff... 749.0 \n", + "... ... ... \n", + "117300 Tees World Women Grey Regular Fit Round Neck P... 999.0 \n", + "24023 Vetoni Fruit Punch Lather Shaving Cream for Me... 300.0 \n", + "129165 IndiWeaves Girls Printed Cotton Half Sleeves T... 799.0 \n", + "71336 EVEREST DRAWER V 2081.0 \n", + "110968 Birde Sports Shoes 399.0 \n", + "\n", + "[32463 rows x 5 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_price
528930
783081
1594770
743840
935110
......
1173000
240230
1291650
713361
1109680
\n", + "

32463 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " above_average_price\n", + "52893 0\n", + "78308 1\n", + "159477 0\n", + "74384 0\n", + "93511 0\n", + "... ...\n", + "117300 0\n", + "24023 0\n", + "129165 0\n", + "71336 1\n", + "110968 0\n", + "\n", + "[32463 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_price\", \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_price\", \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)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Формирование конвейера для решения задачи регрессии" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " price category_Electronics category_Fashion category_Groceries \\\n", + "0 -0.118140 0.0 0.0 1.0 \n", + "1 -0.121905 0.0 0.0 1.0 \n", + "2 -0.120650 0.0 0.0 1.0 \n", + "3 -0.117136 0.0 0.0 1.0 \n", + "4 -0.122219 0.0 0.0 1.0 \n", + "... ... ... ... ... \n", + "162308 -0.020231 0.0 0.0 0.0 \n", + "162309 -0.037679 0.0 0.0 0.0 \n", + "162310 -0.072637 0.0 0.0 0.0 \n", + "162311 0.017865 0.0 0.0 0.0 \n", + "162312 -0.072637 0.0 0.0 0.0 \n", + "\n", + " category_Home & Kitchen category_Jewellery sub_category_Apparel \\\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", + "162308 0.0 1.0 0.0 \n", + "162309 0.0 1.0 0.0 \n", + "162310 0.0 1.0 0.0 \n", + "162311 0.0 1.0 0.0 \n", + "162312 0.0 1.0 0.0 \n", + "\n", + " sub_category_Auto Care sub_category_Ayush \\\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", + "162308 0.0 0.0 \n", + "162309 0.0 0.0 \n", + "162310 0.0 0.0 \n", + "162311 0.0 0.0 \n", + "162312 0.0 0.0 \n", + "\n", + " sub_category_Bags & Travel Luggage ... \\\n", + "0 0.0 ... \n", + "1 0.0 ... \n", + "2 0.0 ... \n", + "3 0.0 ... \n", + "4 0.0 ... \n", + "... ... ... \n", + "162308 0.0 ... \n", + "162309 0.0 ... \n", + "162310 0.0 ... \n", + "162311 0.0 ... \n", + "162312 0.0 ... \n", + "\n", + " sub_category_Snacks & Branded Foods sub_category_Staples \\\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", + "162308 0.0 0.0 \n", + "162309 0.0 0.0 \n", + "162310 0.0 0.0 \n", + "162311 0.0 0.0 \n", + "162312 0.0 0.0 \n", + "\n", + " sub_category_Stationery sub_category_TV & Speaker sub_category_Tech \\\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", + "162308 0.0 0.0 0.0 \n", + "162309 0.0 0.0 0.0 \n", + "162310 0.0 0.0 0.0 \n", + "162311 0.0 0.0 0.0 \n", + "162312 0.0 0.0 0.0 \n", + "\n", + " sub_category_Tools & Appliances sub_category_Toys, Games & Fitness \\\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", + "162308 0.0 0.0 \n", + "162309 0.0 0.0 \n", + "162310 0.0 0.0 \n", + "162311 0.0 0.0 \n", + "162312 0.0 0.0 \n", + "\n", + " sub_category_Treatments sub_category_Wellness sub_category_Women \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", + "162308 0.0 0.0 0.0 \n", + "162309 0.0 0.0 0.0 \n", + "162310 0.0 0.0 0.0 \n", + "162311 0.0 0.0 0.0 \n", + "162312 0.0 0.0 0.0 \n", + "\n", + "[162313 rows x 77 columns]\n", + "(162313, 77)\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", + "import pandas as pd\n", + "\n", + "class JioMartFeatures(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", + " if 'category' in X.columns:\n", + " X[\"Price_per_Category\"] = X[\"price\"] / X[\"category\"].nunique()\n", + " return X\n", + "\n", + " def get_feature_names_out(self, features_in):\n", + " return np.append(features_in, [\"Price_per_Category\"], axis=0) \n", + "\n", + "# Определите признаки для вашей задачи\n", + "columns_to_drop = [\"href\", \"items\"] \n", + "num_columns = [\"price\"] \n", + "cat_columns = [\"category\", \"sub_category\"]\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\", JioMartFeatures()), # Добавляем custom_features\n", + " ]\n", + ")\n", + "\n", + "# Загрузка данных\n", + "df = pd.read_csv(\"..//static//csv//jio_mart_items.csv\")\n", + "\n", + "# Создаем целевой признак\n", + "average_price = df['price'].mean()\n", + "df['above_average_price'] = (df['price'] > average_price).astype(int)\n", + "\n", + "# Подготовка данных\n", + "X = df.drop('above_average_price', axis=1)\n", + "y = df['above_average_price'].values.ravel()\n", + "\n", + "# Проверка наличия столбцов перед применением конвейера\n", + "required_columns = set(num_columns + cat_columns + columns_to_drop)\n", + "missing_columns = required_columns - set(X.columns)\n", + "if missing_columns:\n", + " raise KeyError(f\"Missing columns: {missing_columns}\")\n", + "\n", + "# Применение конвейера\n", + "X_processed = pipeline_end.fit_transform(X)\n", + "\n", + "# Вывод\n", + "print(X_processed)\n", + "print(X_processed.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Формирование набора моделей для регрессии" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Random Forest: Mean Score = 0.9897752006377067, Standard Deviation = 0.012886225390386691\n", + "Linear Regression: Mean Score = -1.439679711903671e+21, Standard Deviation = 1.9848730981021744e+21\n", + "Gradient Boosting: Mean Score = 0.990533312551943, Standard Deviation = 0.01338791677558754\n", + "Support Vector Regression: Mean Score = 0.6408179773886161, Standard Deviation = 0.045968161125540155\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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", + "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/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": [ + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.ensemble import GradientBoostingRegressor\n", + "from sklearn.svm import SVR\n", + "\n", + "def train_multiple_models(X, y, models, cv=3):\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=cv, n_jobs=-1) # Используем все ядра процессора\n", + " results[model_name] = {\n", + " \"mean_score\": scores.mean(),\n", + " \"std_dev\": scores.std()\n", + " }\n", + " \n", + " return results\n", + "\n", + "# Определение моделей\n", + "models = {\n", + " \"Random Forest\": RandomForestRegressor(n_estimators=10), # Уменьшаем количество деревьев\n", + " \"Linear Regression\": LinearRegression(),\n", + " \"Gradient Boosting\": GradientBoostingRegressor(),\n", + " \"Support Vector Regression\": SVR()\n", + "}\n", + "\n", + "# Используем подвыборку данных\n", + "sample_size = 1000 # Уменьшаем количество данных для обучения\n", + "X_train_sample = X_train.sample(n=sample_size, random_state=42)\n", + "y_train_sample = y_train.loc[X_train_sample.index] # Используем loc для индексации Series\n", + "\n", + "# Обучение моделей и вывод результатов\n", + "results = train_multiple_models(X_train_sample, y_train_sample, models, cv=3) # Уменьшаем количество фолдов\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\n", + "- **Mean Score**: 0.9897752006377067\n", + "- **Standard Deviation**: 0.012886225390386691\n", + "**Описание**:\n", + "- Random Forest показала очень высокое среднее значение, близкое к 1, что указывает на ее высокую точность в предсказании. Стандартное отклонение также относительно низкое, что говорит о стабильности модели.\n", + "\n", + "#### Модель: Linear Regression\n", + "- **Mean Score**: -1.439679711903671e+21\n", + "- **Standard Deviation**: 1.9848730981021744e+21\n", + "**Описание**:\n", + "- Линейная регрессия показала очень низкое среднее значение с огромным отрицательным числом, что указывает на ее неэффективность в данной задаче. Стандартное отклонение также очень высокое, что говорит о нестабильности модели.\n", + "\n", + "#### Модель: Gradient Boosting\n", + "- **Mean Score**: 0.990533312551943\n", + "- **Standard Deviation**: 0.01338791677558754\n", + "**Описание**:\n", + "- Gradient Boosting показала практически идеальное среднее значение, близкое к 1, что указывает на ее высокую точность в предсказании. Стандартное отклонение относительно низкое, что говорит о стабильности модели.\n", + "\n", + "#### Модель: Support Vector Regression\n", + "- **Mean Score**: 0.6408179773886161\n", + "- **Standard Deviation**: 0.045968161125540155\n", + "**Описание**:\n", + "- Support Vector Regression показала среднее значение около 0.64, что указывает на ее умеренную точность в предсказании. Стандартное отклонение относительно низкое, что говорит о стабильности модели, но она все же уступает Random Forest и Gradient Boosting.\n", + "\n", + "\n", + "1. **Random Forest и Gradient Boosting** демонстрируют высокую точность и стабильность, что делает их наиболее подходящими моделями для данной задачи регрессии.\n", + "2. **Linear Regression** неэффективна и нестабильна, что указывает на необходимость ее замены на более подходящую модель.\n", + "3. **Support Vector Regression** показывает умеренную точность и стабильность, но уступает Random Forest и Gradient Boosting в эффективности." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Обучение моделей на обучающем наборе данных и оценка на тестовом для регрессии" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: logistic\n", + "MSE (train): 0.00954948016942626\n", + "MSE (test): 0.009857376089702122\n", + "MAE (train): 0.00954948016942626\n", + "MAE (test): 0.009857376089702122\n", + "R2 (train): 0.9105001240660583\n", + "R2 (test): 0.9085410706513222\n", + "STD (train): 0.09733042790899017\n", + "STD (test): 0.09886474010790139\n", + "----------------------------------------\n", + "Model: ridge\n", + "MSE (train): 0.016395841355410088\n", + "MSE (test): 0.016418692049410096\n", + "MAE (train): 0.016395841355410088\n", + "MAE (test): 0.016418692049410096\n", + "R2 (train): 0.8463344872069661\n", + "R2 (test): 0.8476637208036084\n", + "STD (train): 0.12699418323145514\n", + "STD (test): 0.1270791824052891\n", + "----------------------------------------\n", + "Model: decision_tree\n", + "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", + "MSE (train): 0.00041586445899114365\n", + "MSE (test): 0.0004928688044851062\n", + "MAE (train): 0.00041586445899114365\n", + "MAE (test): 0.0004928688044851062\n", + "R2 (train): 0.9961024247577155\n", + "R2 (test): 0.9954270535325661\n", + "STD (train): 0.020392609645475155\n", + "STD (test): 0.022199280947150013\n", + "----------------------------------------\n", + "Model: naive_bayes\n", + "MSE (train): 0.6530150173276857\n", + "MSE (test): 0.6539752949511752\n", + "MAE (train): 0.6530150173276857\n", + "MAE (test): 0.6539752949511752\n", + "R2 (train): -5.1202036128569794\n", + "R2 (test): -5.0677283439763485\n", + "STD (train): 0.4850279840944924\n", + "STD (test): 0.4855381725252704\n", + "----------------------------------------\n", + "Model: gradient_boosting\n", + "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", + "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.0009703504043126684\n", + "MSE (test): 0.0010781505098111696\n", + "MAE (train): 0.0009703504043126684\n", + "MAE (test): 0.0010781505098111696\n", + "R2 (train): 0.9909056577680027\n", + "R2 (test): 0.9899966796024884\n", + "STD (train): 0.031139749763093583\n", + "STD (test): 0.03281946301141911\n", + "----------------------------------------\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", + "# Преобразуем y_train и y_test в одномерные массивы\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": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: RandomForest\n", + "MSE (train): 8419071.042944524\n", + "MSE (test): 1708514.4521493362\n", + "MAE (train): 11.216263715771229\n", + "MAE (test): 14.19769129925748\n", + "R2 (train): 0.9638189510993855\n", + "R2 (test): 0.9949568688066726\n", + "----------------------------------------\n", + "Прогнозируемая цена: 5.77\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//jio_mart_items.csv\") \n", + "\n", + "# 2. Подготовка данных для прогноза\n", + "average_price = data['price'].mean()\n", + "data['above_average_price'] = (data['price'] > average_price).astype(int) \n", + "\n", + "# Удаляем строки с пропущенными значениями в столбце 'price'\n", + "data = data.dropna(subset=['price'])\n", + "\n", + "# Предикторы и целевая переменная\n", + "X = data.drop('above_average_price', axis=1) # Удаляем только 'above_average_price'\n", + "y = data['price']\n", + "\n", + "# 3. Инициализация модели и пайплайна\n", + "class_models = {\n", + " \"RandomForest\": {\n", + " \"model\": RandomForestRegressor(n_estimators=100, random_state=42),\n", + " }\n", + "}\n", + "\n", + "# Предобработка признаков\n", + "num_columns = ['price']\n", + "cat_columns = ['category', 'sub_category']\n", + "\n", + "# Проверка наличия столбцов перед предобработкой\n", + "required_columns = set(num_columns + cat_columns)\n", + "missing_columns = required_columns - set(X.columns)\n", + "if missing_columns:\n", + " raise KeyError(f\"Missing columns: {missing_columns}\")\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_item_data = pd.DataFrame({\n", + " 'category': ['Electronics'],\n", + " 'sub_category': ['Smartphones'], \n", + " 'price': [0] # Добавляем столбец 'price' с нулевым значением\n", + "})\n", + "\n", + "predicted_price = model_pipeline.predict(new_item_data)\n", + "print(f\"Прогнозируемая цена: {predicted_price[0]}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Подбор гиперпараметров методом поиска по сетке" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 3 folds for each of 36 candidates, totalling 108 fits\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=50; total time= 12.4s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=50; total time= 12.6s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=50; total time= 12.6s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=100; total time= 23.3s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=100; total time= 23.2s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=100; total time= 23.2s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=50; total time= 10.8s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=50; total time= 11.2s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=50; total time= 11.2s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=200; total time= 44.9s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=100; total time= 21.9s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=100; total time= 22.0s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=200; total time= 45.4s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=100; total time= 22.2s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=50; total time= 12.0s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=50; total time= 12.2s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=50; total time= 12.3s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=200; total time= 46.4s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=100; total time= 23.9s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=200; total time= 46.0s\n", + "[CV] END .max_depth=10, min_samples_split=2, n_estimators=50; total time= 7.5s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=200; total time= 47.1s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=100; total time= 24.2s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=100; total time= 24.4s\n", + "[CV] END .max_depth=10, min_samples_split=2, n_estimators=50; total time= 8.1s\n", + "[CV] END .max_depth=10, min_samples_split=2, n_estimators=50; total time= 7.9s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=200; total time= 48.2s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=100; total time= 15.7s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=100; total time= 15.9s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=100; total time= 15.2s\n", + "[CV] END .max_depth=10, min_samples_split=5, n_estimators=50; total time= 7.6s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=200; total time= 48.2s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=200; total time= 48.3s\n", + "[CV] END .max_depth=10, min_samples_split=5, n_estimators=50; total time= 7.9s\n", + "[CV] END .max_depth=10, min_samples_split=5, n_estimators=50; total time= 8.1s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=200; total time= 50.2s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=200; total time= 32.1s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=100; total time= 16.6s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=100; total time= 17.1s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=100; total time= 16.8s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=200; total time= 32.8s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=200; total time= 32.8s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=50; total time= 8.2s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=50; total time= 8.1s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=50; total time= 8.2s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=100; total time= 15.4s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=200; total time= 31.9s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=100; total time= 15.8s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=100; total time= 15.8s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=200; total time= 32.7s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=200; total time= 32.4s\n", + "[CV] END .max_depth=20, min_samples_split=2, n_estimators=50; total time= 11.0s\n", + "[CV] END .max_depth=20, min_samples_split=2, n_estimators=50; total time= 11.1s\n", + "[CV] END .max_depth=20, min_samples_split=2, n_estimators=50; total time= 11.2s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=200; total time= 31.4s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=200; total time= 32.7s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=200; total time= 32.1s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=100; total time= 21.6s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=100; total time= 22.2s\n", + "[CV] END .max_depth=20, min_samples_split=5, n_estimators=50; total time= 11.7s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=100; total time= 22.2s\n", + "[CV] END .max_depth=20, min_samples_split=5, n_estimators=50; total time= 12.2s\n", + "[CV] END .max_depth=20, min_samples_split=5, n_estimators=50; total time= 12.4s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=100; total time= 24.3s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=100; total time= 23.7s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=100; total time= 24.7s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=200; total time= 46.2s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=200; total time= 46.6s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=200; total time= 48.0s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=50; total time= 11.8s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=50; total time= 11.9s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=50; total time= 11.8s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=100; total time= 24.2s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=200; total time= 47.3s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=200; total time= 49.4s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=100; total time= 25.3s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=100; total time= 25.8s\n", + "[CV] END .max_depth=30, min_samples_split=2, n_estimators=50; total time= 14.1s\n", + "[CV] END .max_depth=30, min_samples_split=2, n_estimators=50; total time= 14.5s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=200; total time= 50.1s\n", + "[CV] END .max_depth=30, min_samples_split=2, n_estimators=50; total time= 14.1s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=200; total time= 50.5s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=200; total time= 50.9s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=100; total time= 28.5s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=100; total time= 30.1s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=100; total time= 29.8s\n", + "[CV] END .max_depth=30, min_samples_split=5, n_estimators=50; total time= 14.6s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=200; total time= 52.1s\n", + "[CV] END .max_depth=30, min_samples_split=5, n_estimators=50; total time= 15.1s\n", + "[CV] END .max_depth=30, min_samples_split=5, n_estimators=50; total time= 14.4s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=200; total time= 57.7s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=100; total time= 28.2s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=200; total time= 57.7s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=100; total time= 29.2s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=100; total time= 29.3s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=50; total time= 15.3s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=50; total time= 15.5s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=200; total time= 59.2s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=50; total time= 15.3s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=100; total time= 29.4s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=200; total time= 58.3s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=200; total time= 59.1s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=100; total time= 29.0s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=100; total time= 29.0s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=200; total time= 53.8s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=200; total time= 44.9s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=200; total time= 45.4s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=200; total time= 35.2s\n", + "Лучшие параметры: {'max_depth': 10, 'min_samples_split': 10, 'n_estimators': 100}\n", + "Лучший результат (MSE): 206320633.70862785\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\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.impute import SimpleImputer\n", + "\n", + "# Удаление строк с пропущенными значениями (если необходимо)\n", + "df = df.dropna()\n", + "\n", + "# Создание целевой переменной (price)\n", + "target = df['price']\n", + "\n", + "# Удаление целевой переменной из исходных данных\n", + "features = df.drop(columns=['price'])\n", + "\n", + "# Удаление столбцов, которые не будут использоваться (например, href и items)\n", + "features = features.drop(columns=['href', 'items'])\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": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " category sub_category \\\n", + "0 Groceries Fruits & Vegetables \n", + "1 Groceries Fruits & Vegetables \n", + "2 Groceries Fruits & Vegetables \n", + "3 Groceries Fruits & Vegetables \n", + "4 Groceries Fruits & Vegetables \n", + "\n", + " href \\\n", + "0 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "1 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "2 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "3 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "4 https://www.jiomart.com/c/groceries/fruits-veg... \n", + "\n", + " items price \n", + "0 Fresh Dates (Pack) (Approx 450 g - 500 g) 109.0 \n", + "1 Tender Coconut Cling Wrapped (1 pc) (Approx 90... 49.0 \n", + "2 Mosambi 1 kg 69.0 \n", + "3 Orange Imported 1 kg 125.0 \n", + "4 Banana Robusta 6 pcs (Box) (Approx 800 g - 110... 44.0 \n", + "Fitting 3 folds for each of 36 candidates, totalling 108 fits\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=100; total time= 0.2s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END .max_depth=10, min_samples_split=2, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END .max_depth=10, min_samples_split=2, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=100; total time= 0.1s\n", + "[CV] END .max_depth=10, min_samples_split=5, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=200; total time= 0.2s\n", + "[CV] END .max_depth=10, min_samples_split=5, n_estimators=50; total time= 0.0s\n", + "[CV] END .max_depth=10, min_samples_split=2, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=10, n_estimators=200; total time= 0.2s\n", + "[CV] END .max_depth=10, min_samples_split=5, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=None, min_samples_split=5, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=200; total time= 0.1s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END .max_depth=20, min_samples_split=2, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=10, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END .max_depth=20, min_samples_split=2, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END .max_depth=20, min_samples_split=2, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=10, min_samples_split=5, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=200; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=100; total time= 0.1s\n", + "[CV] END .max_depth=20, min_samples_split=5, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=100; total time= 0.1s\n", + "[CV] END .max_depth=20, min_samples_split=5, n_estimators=50; total time= 0.0s\n", + "[CV] END .max_depth=20, min_samples_split=5, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=10, min_samples_split=10, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=200; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=200; total time= 0.2s\n", + "[CV] END .max_depth=30, min_samples_split=2, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=100; total time= 0.1s\n", + "[CV] END .max_depth=30, min_samples_split=2, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=200; total time= 0.2s\n", + "[CV] END .max_depth=30, min_samples_split=5, n_estimators=50; total time= 0.1s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=100; total time= 0.1s\n", + "[CV] END .max_depth=30, min_samples_split=2, n_estimators=50; total time= 0.0s\n", + "[CV] END .max_depth=30, min_samples_split=5, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=5, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=20, min_samples_split=10, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=30, min_samples_split=2, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=200; total time= 0.2s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=100; total time= 0.1s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=200; total time= 0.1s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=200; total time= 0.1s\n", + "[CV] END max_depth=30, min_samples_split=10, n_estimators=200; total time= 0.2s\n", + "[CV] END .max_depth=30, min_samples_split=5, n_estimators=50; total time= 0.0s\n", + "[CV] END max_depth=30, min_samples_split=5, n_estimators=100; total time= 0.0s\n", + "Старые параметры: {'max_depth': 30, 'min_samples_split': 5, 'n_estimators': 50}\n", + "Лучший результат (MSE) на старых параметрах: 4352.70053925649\n", + "\n", + "Новые параметры: {'max_depth': 10, 'min_samples_split': 10, 'n_estimators': 200}\n", + "Лучший результат (MSE) на новых параметрах: 4862.953305666657\n", + "Среднеквадратическая ошибка (MSE) на тестовых данных: 3485.772883899025\n", + "Корень среднеквадратичной ошибки (RMSE) на тестовых данных: 59.04043431326556\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn import metrics\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.pipeline import Pipeline\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Загрузка датасета\n", + "df = pd.read_csv(\"..//static//csv//jio_mart_items.csv\").head(100)\n", + "\n", + "# Вывод первых строк для проверки структуры\n", + "print(df.head())\n", + "\n", + "# Целевая переменная\n", + "target = df['price']\n", + "\n", + "# Удаление целевой переменной из признаков\n", + "features = df.drop(columns=['price', 'href'])\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", + " (\"imputer\", num_imputer),\n", + " (\"scaler\", num_scaler),\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", + " (\"imputer\", cat_imputer),\n", + " (\"encoder\", cat_encoder),\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", + " (\"features_preprocessing\", features_preprocessing),\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", + "# Результаты подбора для старых параметров\n", + "old_best_params = old_grid_search.best_params_\n", + "old_best_mse = -old_grid_search.best_score_\n", + "\n", + "# 2. Настройка параметров для новых значений\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", + "# Результаты подбора для новых параметров\n", + "new_best_params = new_grid_search.best_params_\n", + "new_best_mse = -new_grid_search.best_score_\n", + "\n", + "# 5. Обучение модели с лучшими параметрами для новых значений\n", + "model_best = RandomForestRegressor(**new_best_params)\n", + "model_best.fit(X_train_processed, y_train)\n", + "\n", + "# Прогнозирование на тестовой выборке\n", + "y_pred = model_best.predict(X_test_processed)\n", + "\n", + "# Оценка производительности модели\n", + "mse = metrics.mean_squared_error(y_test, y_pred)\n", + "rmse = np.sqrt(mse)\n", + "\n", + "# Вывод результатов\n", + "print(\"Старые параметры:\", old_best_params)\n", + "print(\"Лучший результат (MSE) на старых параметрах:\", old_best_mse)\n", + "print(\"\\nНовые параметры:\", new_best_params)\n", + "print(\"Лучший результат (MSE) на новых параметрах:\", new_best_mse)\n", + "print(\"Среднеквадратическая ошибка (MSE) на тестовых данных:\", mse)\n", + "print(\"Корень среднеквадратичной ошибки (RMSE) на тестовых данных:\", rmse)\n", + "\n", + "# Обучение модели с лучшими параметрами для старых значений\n", + "model_old = RandomForestRegressor(**old_best_params)\n", + "model_old.fit(X_train_processed, y_train)\n", + "\n", + "# Прогнозирование на тестовой выборке для старых параметров\n", + "y_pred_old = model_old.predict(X_test_processed)\n", + "\n", + "# Визуализация ошибок\n", + "plt.figure(figsize=(10, 5))\n", + "plt.plot(y_test.values, label='Реальные значения', marker='o', linestyle='-', color='black')\n", + "plt.plot(y_pred_old, label='Предсказанные значения (старые параметры)', marker='x', linestyle='--', color='blue')\n", + "plt.plot(y_pred, label='Предсказанные значения (новые параметры)', marker='s', linestyle='--', color='orange')\n", + "plt.xlabel('Объекты')\n", + "plt.ylabel('Цена')\n", + "plt.title('Сравнение реальных и предсказанных значений')\n", + "plt.legend()\n", + "plt.show()\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}