diff --git a/Lab_4/lab4.ipynb b/Lab_4/lab4.ipynb new file mode 100644 index 0000000..e048576 --- /dev/null +++ b/Lab_4/lab4.ipynb @@ -0,0 +1,4216 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Лабораторная работа №4\n", + "\n", + "*Вариант задания:* " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Выбор бизнес-целей \n", + "Для датасета недвижимости предлагаются две бизнес-цели:\n", + "\n", + "### Задача классификации:\n", + "*Цель*: Классифицировать товары в разные категории, например, \"Дешевый\", \"Средний\" или \"Дорогой\", на основе цены и других характеристик товара.\n", + "\n", + "*Применение*: Полезно для определения целевой аудитории для разных типов товаров, создания маркетинговых кампаний и анализа рыночных сегментов.\n", + "\n", + "\n", + "### Задача регрессии:\n", + "*Цель*: Предсказать широту появления (city_latitude) на основе других характеристик.\n", + "\n", + "*Применение*: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Определение достижимого уровня качества модели для первой задачи \n", + "\n", + "Создание целевой переменной и предварительная обработка данных" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['summary', 'city', 'state', 'date_time', 'shape', 'duration', 'stats',\n", + " 'report_link', 'text', 'posted', 'city_latitude', 'city_longitude'],\n", + " 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\", state=UserWarning)\n", + "df = pd.read_csv(\"nuforc_reports.csv\")\n", + "df = df.head(1000)\n", + "print(df.columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Среднее значение поля city_latitude: 39.215819681793704\n", + " summary city state \\\n", + "0 Viewed some red lights in the sky appearing to... Visalia CA \n", + "1 Look like 1 or 3 crafts from North traveling s... Cincinnati OH \n", + "2 seen dark rectangle moving slowly thru the sky... Tecopa CA \n", + "3 One red light moving switly west to east, beco... Knoxville TN \n", + "4 Bright, circular Fresnel-lens shaped light sev... Alexandria VA \n", + "\n", + " date_time shape duration \\\n", + "0 2021-12-15T21:45:00 light 2 minutes \n", + "1 2021-12-16T09:45:00 triangle 14 seconds \n", + "2 2021-12-10T00:00:00 rectangle Several minutes \n", + "3 2021-12-10T19:30:00 triangle 20-30 seconds \n", + "4 2021-12-07T08:00:00 circle NaN \n", + "\n", + " stats \\\n", + "0 Occurred : 12/15/2021 21:45 (Entered as : 12/... \n", + "1 Occurred : 12/16/2021 09:45 (Entered as : 12/... \n", + "2 Occurred : 12/10/2021 00:00 (Entered as : 12/... \n", + "3 Occurred : 12/10/2021 19:30 (Entered as : 12/... \n", + "4 Occurred : 12/7/2021 08:00 (Entered as : 12/0... \n", + "\n", + " report_link \\\n", + "0 http://www.nuforc.org/webreports/165/S165881.html \n", + "1 http://www.nuforc.org/webreports/165/S165888.html \n", + "2 http://www.nuforc.org/webreports/165/S165810.html \n", + "3 http://www.nuforc.org/webreports/165/S165825.html \n", + "4 http://www.nuforc.org/webreports/165/S165754.html \n", + "\n", + " text posted \\\n", + "0 Viewed some red lights in the sky appearing to... 2021-12-19T00:00:00 \n", + "1 Look like 1 or 3 crafts from North traveling s... 2021-12-19T00:00:00 \n", + "2 seen dark rectangle moving slowly thru the sky... 2021-12-19T00:00:00 \n", + "3 One red light moving switly west to east, beco... 2021-12-19T00:00:00 \n", + "4 Bright, circular Fresnel-lens shaped light sev... 2021-12-19T00:00:00 \n", + "\n", + " city_latitude city_longitude above_average_city_latitude \n", + "0 36.356650 -119.347937 0 \n", + "1 39.174503 -84.481363 0 \n", + "2 NaN NaN 0 \n", + "3 35.961561 -83.980115 0 \n", + "4 38.798958 -77.095133 0 \n" + ] + } + ], + "source": [ + "# Установим параметры для вывода\n", + "set_config(transform_output=\"pandas\")\n", + "\n", + "# Рассчитываем среднее значение цены\n", + "average_city_latitude = df['city_latitude'].mean()\n", + "print(f\"Среднее значение поля city_latitude: {average_city_latitude}\")\n", + "\n", + "# Создаем новую переменную, указывающую, превышает ли цена среднюю цену\n", + "df['above_average_city_latitude'] = (df['city_latitude'] > average_city_latitude).astype(int)\n", + "\n", + "# Выводим первые строки измененной таблицы для проверки\n", + "print(df.head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Разделение набора данных на обучающую и тестовые выборки (80/20) для задачи классификации\n", + "\n", + "Целевой признак -- above_average_city_latitude" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X_train shape: (800, 7)\n", + "y_train shape: (800,)\n", + "X_test shape: (200, 7)\n", + "y_test shape: (200,)\n", + "X_train:\n", + " city state date_time shape \\\n", + "214 Clayton NM 1997-06-18T02:30:00 disk \n", + "831 Cedar Rapids IA 2020-04-18T22:00:00 other \n", + "35 Lufkin TX 1993-02-09T19:00:00 delta \n", + "431 Leesburg VA 2020-03-30T21:00:00 oval \n", + "726 Roseville MN 2020-04-16T21:20:00 light \n", + "\n", + " text city_latitude \\\n", + "214 have endured a low pitched motor hum for 24 ye... 36.401600 \n", + "831 31 satellite like objects flying straight line... 41.977695 \n", + "35 SUMMARY: Family traveling home along a rural ... 31.315223 \n", + "431 We were on a walk and saw a vertical string of... 39.122452 \n", + "726 Lights traveling at high speeds across the sky... 45.006100 \n", + "\n", + " city_longitude \n", + "214 -103.355000 \n", + "831 -91.675865 \n", + "35 -94.746566 \n", + "431 -77.563847 \n", + "726 -93.156600 \n", + "y_train:\n", + " 214 0\n", + "831 1\n", + "35 0\n", + "431 0\n", + "726 1\n", + "Name: above_average_city_latitude, dtype: int64\n", + "X_test:\n", + " city state date_time shape \\\n", + "541 Frackville PA 2020-04-11T00:58:00 cigar \n", + "797 Seminole OK 2020-04-17T22:45:00 light \n", + "887 Sanford FL 2020-04-20T23:34:00 NaN \n", + "516 Powell River BC 2020-04-09T11:00:00 disk \n", + "410 Dayton OH 2020-03-29T00:00:00 circle \n", + "\n", + " text city_latitude \\\n", + "541 This was the best encounter. Now this is the 2... 40.785200 \n", + "797 My husband and I were driving last night and I... 35.243167 \n", + "887 MADAR Node 91 28.814930 \n", + "516 Observed two glimmering craft over Powell Rive... 50.016300 \n", + "410 3/29/20 and 4/5/20 in my back yard I didn’t ... 39.735409 \n", + "\n", + " city_longitude \n", + "541 -76.223000 \n", + "797 -96.636440 \n", + "887 -81.339465 \n", + "516 -124.322600 \n", + "410 -84.167628 \n", + "y_test:\n", + " 541 1\n", + "797 0\n", + "887 0\n", + "516 1\n", + "410 1\n", + "Name: above_average_city_latitude, 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_city_latitude', 'summary', 'stats', 'report_link', 'posted', \"duration\"]), # Исключаем столбец 'items'\n", + " df['above_average_city_latitude'],\n", + " stratify=df['above_average_city_latitude'],\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": 31, + "metadata": {}, + "outputs": [], + "source": [ + "# Определение столбцов для обработки\n", + "columns_to_drop = [\"date_time\", \"posted\", \"city\", \"state\", \"summary\", \"stats\", \"report_link\", \"duration\", \"text\"] # Столбцы, которые можно удалить\n", + "# ,\n", + "num_columns = [\"city_latitude\", \"city_longitude\"] # Числовые столбцы\n", + "cat_columns = [\"shape\"] # Категориальные столбцы\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": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " city_latitude city_longitude shape_chevron shape_cigar shape_circle \\\n", + "214 -0.553732 -0.447864 0.0 0.0 0.0 \n", + "831 0.530905 0.260652 0.0 0.0 0.0 \n", + "35 -1.543111 0.074367 0.0 0.0 0.0 \n", + "431 -0.024484 1.116759 0.0 0.0 0.0 \n", + "726 1.119977 0.170823 0.0 0.0 0.0 \n", + "\n", + " shape_cone shape_cross shape_cylinder shape_delta shape_diamond ... \\\n", + "214 0.0 0.0 0.0 0.0 0.0 ... \n", + "831 0.0 0.0 0.0 0.0 0.0 ... \n", + "35 0.0 0.0 0.0 1.0 0.0 ... \n", + "431 0.0 0.0 0.0 0.0 0.0 ... \n", + "726 0.0 0.0 0.0 0.0 0.0 ... \n", + "\n", + " shape_flash shape_formation shape_light shape_other shape_oval \\\n", + "214 0.0 0.0 0.0 0.0 0.0 \n", + "831 0.0 0.0 0.0 1.0 0.0 \n", + "35 0.0 0.0 0.0 0.0 0.0 \n", + "431 0.0 0.0 0.0 0.0 1.0 \n", + "726 0.0 0.0 1.0 0.0 0.0 \n", + "\n", + " shape_rectangle shape_sphere shape_teardrop shape_triangle \\\n", + "214 0.0 0.0 0.0 0.0 \n", + "831 0.0 0.0 0.0 0.0 \n", + "35 0.0 0.0 0.0 0.0 \n", + "431 0.0 0.0 0.0 0.0 \n", + "726 0.0 0.0 0.0 0.0 \n", + "\n", + " shape_unknown \n", + "214 0.0 \n", + "831 0.0 \n", + "35 0.0 \n", + "431 0.0 \n", + "726 0.0 \n", + "\n", + "[5 rows x 23 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": 33, + "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": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: logistic\n", + "Model: ridge\n", + "Model: decision_tree\n", + "Model: knn\n", + "Model: naive_bayes" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Model: gradient_boosting\n", + "Model: random_forest\n", + "Model: mlp\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n", + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n" + ] + } + ], + "source": [ + "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": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: logistic\n", + "Precision (train): 1.0000\n", + "Precision (test): 1.0000\n", + "Recall (train): 0.9152\n", + "Recall (test): 0.9059\n", + "Accuracy (train): 0.9637\n", + "Accuracy (test): 0.9600\n", + "ROC AUC (test): 0.9935\n", + "F1 (train): 0.9557\n", + "F1 (test): 0.9506\n", + "MCC (test): 0.9203\n", + "Cohen's Kappa (test): 0.9171\n", + "Confusion Matrix:\n", + "[[115 0]\n", + " [ 8 77]]\n", + "\n", + "Model: ridge\n", + "Precision (train): 1.0000\n", + "Precision (test): 1.0000\n", + "Recall (train): 0.9357\n", + "Recall (test): 0.9059\n", + "Accuracy (train): 0.9725\n", + "Accuracy (test): 0.9600\n", + "ROC AUC (test): 0.9934\n", + "F1 (train): 0.9668\n", + "F1 (test): 0.9506\n", + "MCC (test): 0.9203\n", + "Cohen's Kappa (test): 0.9171\n", + "Confusion Matrix:\n", + "[[115 0]\n", + " [ 8 77]]\n", + "\n", + "Model: decision_tree\n", + "Precision (train): 1.0000\n", + "Precision (test): 1.0000\n", + "Recall (train): 1.0000\n", + "Recall (test): 0.9882\n", + "Accuracy (train): 1.0000\n", + "Accuracy (test): 0.9950\n", + "ROC AUC (test): 0.9941\n", + "F1 (train): 1.0000\n", + "F1 (test): 0.9941\n", + "MCC (test): 0.9898\n", + "Cohen's Kappa (test): 0.9898\n", + "Confusion Matrix:\n", + "[[115 0]\n", + " [ 1 84]]\n", + "\n", + "Model: knn\n", + "Precision (train): 0.9753\n", + "Precision (test): 0.9487\n", + "Recall (train): 0.9240\n", + "Recall (test): 0.8706\n", + "Accuracy (train): 0.9575\n", + "Accuracy (test): 0.9250\n", + "ROC AUC (test): 0.9841\n", + "F1 (train): 0.9489\n", + "F1 (test): 0.9080\n", + "MCC (test): 0.8471\n", + "Cohen's Kappa (test): 0.8449\n", + "Confusion Matrix:\n", + "[[111 4]\n", + " [ 11 74]]\n", + "\n", + "Model: naive_bayes\n", + "Precision (train): 0.4453\n", + "Precision (test): 0.4162\n", + "Recall (train): 0.9883\n", + "Recall (test): 0.9059\n", + "Accuracy (train): 0.4688\n", + "Accuracy (test): 0.4200\n", + "ROC AUC (test): 0.4837\n", + "F1 (train): 0.6140\n", + "F1 (test): 0.5704\n", + "MCC (test): -0.0624\n", + "Cohen's Kappa (test): -0.0288\n", + "Confusion Matrix:\n", + "[[ 7 108]\n", + " [ 8 77]]\n", + "\n", + "Model: gradient_boosting\n", + "Precision (train): 1.0000\n", + "Precision (test): 1.0000\n", + "Recall (train): 1.0000\n", + "Recall (test): 0.9882\n", + "Accuracy (train): 1.0000\n", + "Accuracy (test): 0.9950\n", + "ROC AUC (test): 0.9999\n", + "F1 (train): 1.0000\n", + "F1 (test): 0.9941\n", + "MCC (test): 0.9898\n", + "Cohen's Kappa (test): 0.9898\n", + "Confusion Matrix:\n", + "[[115 0]\n", + " [ 1 84]]\n", + "\n", + "Model: random_forest\n", + "Precision (train): 1.0000\n", + "Precision (test): 1.0000\n", + "Recall (train): 0.9971\n", + "Recall (test): 0.9647\n", + "Accuracy (train): 0.9988\n", + "Accuracy (test): 0.9850\n", + "ROC AUC (test): 0.9989\n", + "F1 (train): 0.9985\n", + "F1 (test): 0.9820\n", + "MCC (test): 0.9696\n", + "Cohen's Kappa (test): 0.9692\n", + "Confusion Matrix:\n", + "[[115 0]\n", + " [ 3 82]]\n", + "\n", + "Model: mlp\n", + "Precision (train): 0.0000\n", + "Precision (test): 0.0000\n", + "Recall (train): 0.0000\n", + "Recall (test): 0.0000\n", + "Accuracy (train): 0.5725\n", + "Accuracy (test): 0.5750\n", + "ROC AUC (test): 0.5173\n", + "F1 (train): 0.0000\n", + "F1 (test): 0.0000\n", + "MCC (test): 0.0000\n", + "Cohen's Kappa (test): 0.0000\n", + "Confusion Matrix:\n", + "[[115 0]\n", + " [ 85 0]]\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": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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EREZMXYKiYiIiIiIjBg7hUREREREREaMnUIiIiIiIiIjxk4hERERERGREWOnkIiIiIiIyIixU0hERERERGTE2CkkIiIiIiIyYuwUEhERERERGTF2ComIiIiIiIwYO4Vk9GbOnAmFQqE3+7558yYUCgUiIyPLpSYiIiIqnYIc//vvv3VdClG5YqeQiIr0888/Y+bMmboug4iIiIjKGTuFROVo6tSpePr0aZneU6NGDTx9+hT/93//V05Vlc7PP/+MsLAwndZAREREROXPTNcFEMmZmZkZzMzK9mOmUChgZWVVThWVj7y8PKhUKlhYWOi6FCIiIiIqI35TSEbl2LFjaNmyJaysrFC7dm2sWrWqyO2+/vprNG/eHNbW1nB2dsaAAQOQmJhYaLsTJ07g9ddfh5OTE2xsbPDSSy/hyy+/lNqLmlO4b98+tGvXDo6OjrC1tUW9evUwZcoUqb24OYW//vor2rdvDxsbGzg6OqJXr16IjY1V26bgePHx8QgNDYWjoyMcHBwwZMgQPHnypNSfU2hoKJYtWwYgv5NasDxb3+eff45Fixahdu3asLS0xJUrVwAAf/75J9566y04OzvDysoKLVq0wPbt2wsd49GjRxg7diy8vLxgaWkJHx8ffPbZZ1CpVKWuk4iIqKLdunULPj4+aNSoEZKTk9GxY0c0atQIV65cQadOnVCpUiVUrVoV8+bNU3vfoUOHoFAo8N1332HOnDmoVq0arKys0KVLF8THx+vobIjy8ZtCMhoXL17Ea6+9BhcXF8ycORN5eXmYMWMG3Nzc1LabM2cOpk2bhsDAQAwbNgwPHjzAkiVL0KFDB5w7dw6Ojo4A8jt3PXr0gIeHB8aMGQN3d3fExsZi586dGDNmTJE1XL58GT169MBLL72E8PBwWFpaIj4+HjExMRpr379/P7p3745atWph5syZePr0KZYsWYK2bdvi7NmzqFmzptr2gYGB8Pb2RkREBM6ePYu1a9fC1dUVn332Wak+q3fffRd3797Fvn378NVXXxW5zYYNG5CVlYURI0bA0tISzs7OuHz5Mtq2bYuqVati0qRJsLGxwXfffYfevXtj69at6NOnDwDgyZMn8PPzw507d/Duu++ievXq+O233zB58mTcu3cPixYtKlWdREREFen69evo3LkznJ2dsW/fPlSpUgUAkJqaim7duqFv374IDAzE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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": 37, + "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.0000000.9882351.0000000.9950001.0000000.994083
gradient_boosting1.0000001.0000001.0000000.9882351.0000000.9950001.0000000.994083
random_forest1.0000001.0000000.9970760.9647060.9987500.9850000.9985360.982036
logistic1.0000001.0000000.9152050.9058820.9637500.9600000.9557250.950617
ridge1.0000001.0000000.9356730.9058820.9725000.9600000.9667670.950617
knn0.9753090.9487180.9239770.8705880.9575000.9250000.9489490.907975
mlp0.0000000.0000000.0000000.0000000.5725000.5750000.0000000.000000
naive_bayes0.4453230.4162160.9883040.9058820.4687500.4200000.6139870.570370
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "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": 38, + "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
gradient_boosting0.9950000.9940830.9999490.9897540.989806
random_forest0.9850000.9820360.9988750.9691680.969629
decision_tree0.9950000.9940830.9941180.9897540.989806
logistic0.9600000.9506170.9934530.9171410.920306
ridge0.9600000.9506170.9933500.9171410.920306
knn0.9250000.9079750.9840920.8448810.847103
mlp0.5750000.0000000.5173400.0000000.000000
naive_bayes0.4200000.5703700.483683-0.028825-0.062401
\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": 39, + "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": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Error items count: 1'" + ] + }, + "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", + "
cityPredictedstatedate_timeshapetextcity_latitudecity_longitude
421Shelbyville0IN2020-03-29T22:03:00sphereStanding by my truck outside my garage I saw o...39.5239-85.7853
\n", + "
" + ], + "text/plain": [ + " city Predicted state date_time shape \\\n", + "421 Shelbyville 0 IN 2020-03-29T22:03:00 sphere \n", + "\n", + " text city_latitude \\\n", + "421 Standing by my truck outside my garage I saw o... 39.5239 \n", + "\n", + " city_longitude \n", + "421 -85.7853 " + ] + }, + "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_city_latitude\"\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": 41, + "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", + "
citystatedate_timeshapetextcity_latitudecity_longitude
429WhitefordMD2020-03-30T20:50:00lightContinuous single file objects dimly lit fly o...39.7015-76.3228
\n", + "
" + ], + "text/plain": [ + " city state date_time shape \\\n", + "429 Whiteford MD 2020-03-30T20:50:00 light \n", + "\n", + " text city_latitude \\\n", + "429 Continuous single file objects dimly lit fly o... 39.7015 \n", + "\n", + " city_longitude \n", + "429 -76.3228 " + ] + }, + "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", + "
city_latitudecity_longitudeshape_chevronshape_cigarshape_circleshape_coneshape_crossshape_cylindershape_deltashape_diamond...shape_flashshape_formationshape_lightshape_othershape_ovalshape_rectangleshape_sphereshape_teardropshape_triangleshape_unknown
4290.088151.1920470.00.00.00.00.00.00.00.0...0.00.01.00.00.00.00.00.00.00.0
\n", + "

1 rows × 23 columns

\n", + "
" + ], + "text/plain": [ + " city_latitude city_longitude shape_chevron shape_cigar shape_circle \\\n", + "429 0.08815 1.192047 0.0 0.0 0.0 \n", + "\n", + " shape_cone shape_cross shape_cylinder shape_delta shape_diamond ... \\\n", + "429 0.0 0.0 0.0 0.0 0.0 ... \n", + "\n", + " shape_flash shape_formation shape_light shape_other shape_oval \\\n", + "429 0.0 0.0 1.0 0.0 0.0 \n", + "\n", + " shape_rectangle shape_sphere shape_teardrop shape_triangle \\\n", + "429 0.0 0.0 0.0 0.0 \n", + "\n", + " shape_unknown \n", + "429 0.0 \n", + "\n", + "[1 rows x 23 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "predicted: 1 (proba: [0. 1.])\n", + "real: 1\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": 42, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\tumvu\\AppData\\Roaming\\Python\\Python312\\site-packages\\numpy\\ma\\core.py:2881: RuntimeWarning: invalid value encountered in cast\n", + " _data = np.array(data, dtype=dtype, copy=copy,\n" + ] + }, + { + "data": { + "text/plain": [ + "{'model__criterion': 'gini',\n", + " 'model__max_depth': 10,\n", + " 'model__max_features': 'sqrt',\n", + " 'model__n_estimators': 10}" + ] + }, + "execution_count": 42, + "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": 43, + "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": 44, + "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": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Precision_trainPrecision_testRecall_trainRecall_testAccuracy_trainAccuracy_testF1_trainF1_test
Name        
Old1.0000001.0000000.9970760.9647060.9987500.9850000.9985360.982036
New1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 45, + "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": 46, + "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     
Old0.9850000.9820360.9988750.9691680.969629
New1.0000001.0000001.0000001.0000001.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "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": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6cAAAGsCAYAAAAhRNGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABj4klEQVR4nO3dd3gU1f7H8c+mh1RCSQhFQk0QBAHlUgMCBkWkKSCJgCLeawFBUbAA0oyiKBdQaqRoEFRQQUSvImBABKTZkC6gVAUSQknZnd8f+bG6BjAhk2zh/Xqeee7NzOzZ74aYT86cM2cshmEYAgAAAADAibycXQAAAAAAAHROAQAAAABOR+cUAAAAAOB0dE4BAAAAAE5H5xQAAAAA4HR0TgEAAAAATkfnFAAAAADgdHROAQAAAABO5+PsAgAAKKwLFy4oOzvbtPb8/PwUEBBgWnsAABQGuZaHzikAwK1cuHBBMdcF6+hxq2ltRkVFaf/+/W4Z5AAA90au/YnOKQDArWRnZ+vocav2b75OoSFFvzsl44xNMY0OKDs72+1CHADg/si1P9E5BQC4pdAQL1NCHAAAV0Cu0TkFALgpq2GT1TCnHQAAnI1co3MKAHBTNhmyqegpbkYbAAAUFbnGo2QAAAAAAC6AkVMAgFuyySYzJi6Z0woAAEVDrtE5BQC4KathyGoUfeqSGW0AAFBU5BrTegEAAAAALoCRUwCAW2LhCACAJyHX6JwCANyUTYas13iIAwA8B7nGtF4AAAAAgAtg5BQA4JaY/gQA8CTkGiOnAAAAAAAXwMgpAMAtseQ+AMCTkGt0TgEAbsr2/5sZ7QAA4GzkGtN6AQAAAAAugJFTAIBbspq05L4ZbQAAUFTkGp1TAICbshp5mxntAADgbOQa03oBAAAAAC6AkVMAgFti4QgAgCch1+icAgDclE0WWWUxpR0AAJyNXGNaLwAAAADABTByCgBwSzYjbzOjHQAAnI1cY+QUAAAAAOACGDkFALglq0n35pjRBgAARUWu0TkFALgpQhwA4EnINab1AgAAAABcACOnAAC3ZDMsshkmLLlvQhsAABQVuUbnFADgppj+BADwJOQa03oBAAAAAC6AkVMAgFuyyktWE66xWk2oBQCAoiLX6JwCANyUYdK9OYYb35sDAPAc5BrTegEAAAAALoCRUwCAW2LhCACAJyHX6JwCANyU1fCS1TDh3hzDhGIAACgico1pvQAAAAAAF8DIKQDALdlkkc2Ea6w2ufElZgCAxyDXGDkFAAAAALgARk4BAG6JhSMAAJ6EXKNzCgBwU+YtHOG+058AAJ6DXGNaLwAAAADABTByCgBwS3kLRxR96pIZbQAAUFTkGiOnAIrJ3LlzZbFY9Msvv/zjuVWrVlW/fv2KvSZ4Fpu8ZDVhM2NlRAAAiopco3MKoJB+/PFHJSUlqWLFivL391d0dLQSExP1448/Ors0AAAu6+JF04CAAP3222/5jrdu3Vp169Z1QmUALqJzCqDAlixZooYNG2rlypW677779MYbb6h///5atWqVGjZsqA8++MDZJeIacnHhCDM2ANeOrKwsvfjii84uA8iHXOOeUwAFtHfvXt17772qVq2avvrqK5UrV85+7LHHHlPLli1177336rvvvlO1atWcWCmuFTaTpi6588PKARRegwYNNGvWLD399NOKjo52djmAHbnGyCmAAnr55Zd17tw5zZw506FjKklly5bVjBkzdPbsWU2YMOGybRiGoXHjxqlSpUoqVaqU2rRpw3RgAECJeuaZZ2S1Wgs0evr222+rUaNGCgwMVEREhHr16qVDhw7Zj0+ePFne3t46ffq0fd/EiRNlsVj0+OOP2/dZrVaFhIRo2LBhpn4WwNPQOQVQIMuWLVPVqlXVsmXLSx5v1aqVqlatquXLl1+2jZEjR2rEiBGqX7++Xn75ZVWrVk233nqrzp49W1xlw4NZDYtpW2F89dVX6tSpk6Kjo2WxWPThhx86HDcMQyNHjlSFChUUGBiodu3aaffu3Q7nnDx5UomJiQoNDVV4eLj69++vzMzMon5LABRATEyM+vTpo1mzZunw4cOXPW/8+PHq06ePatasqVdffVWDBw/WypUr1apVK3tntGXLlrLZbFq7dq39dWlpafLy8lJaWpp939atW5WZmalWrVoV2+eC+yPX6JwCKID09HQdPnxY9evXv+J5N9xwg3799VedOXMm37ETJ05owoQJ6tixoz7++GM98sgjSklJUb9+/fT7778XV+mA6c6ePav69evr9ddfv+TxCRMmaPLkyZo+fbo2bNigoKAgJSQk6MKFC/ZzLi4i9vnnn+vjjz/WV199pQcffLCkPgJwzXv22WeVm5url1566ZLHDxw4oFGjRmncuHFauHChHnroIY0c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y4SiAQAex0kjp66Ua4VeEOns2bN69NFHVb58eQUFBal06dIOGwAAJcIwcZNUtWpVlSpVSuHh4fbtUrm2dOlSNW7cWHfffbfKly+vG2+8UbNmzbIf379/v44ePap27drZ94WFhalJkyZav369yd8EAIDHMDnXMjIyHLasrKxLvq0r5VqhO6dPPfWUvvzyS02bNk3+/v6aPXu2Ro8erejoaM2fP9/U4gAAKCmnTp2SYRj2LTg4+JK5tm/fPvt9Np999pkeeughDRo0SPPmzZMkHT16VJIUGRnp8LrIyEj7MQAAilvlypUVFhZm35KTky95nivlWqGn9S5btkzz589X69atdd9996lly5aqUaOGrrvuOqWmpioxMdHUAgEAuCSzlsv//zYOHTqkuLg4ffXVV6pevbref//9S+aazWZT48aN9cILL0iSbrzxRv3www+aPn06azQAAK5eMeTaX29N8ff3v+TprpRrhR45PXnypKpVqyYp7z6ckydPSpJatGihr776ytzqAAC4DIth3iblZVpYWJhycnIUGhqqNm3aXDLXKlSooDp16jjsi4uL08GDByVJUVFRkqRjx445nHPs2DH7MQAA/q44cu2v2+U6p66Ua4XunFarVk379++XJMXGxurdd9+VlDeiGh4ebmpxAACUpILkWvPmzbVz506Hfbt27dJ1110nKW8RiaioKK1cudJ+PCMjQxs2bFDTpk2Lr3gAAK6CK+Vaoaf13nfffdq+fbvi4+M1fPhwderUSVOnTlVOTo5effVVU4sDAOCyimFVw4Lk2pAhQ9SsWTO98MIL6tGjhzZu3KiZM2dq5syZkiSLxaLBgwdr3Lhxqlmzpn3J/ejoaHXp0sWEggEAHslJq/W6Uq4VunM6ZMgQ+/9v166dfv75Z23evFk1atTQDTfcYGpxAACUpILk2k033aQPPvhATz/9tMaMGaOYmBhNmjTJ4d7Up556SmfPntWDDz6o06dPq0WLFvr00095xikAwOW4Uq5ZDMMwo3+Oa1RGRobCwsJ0alc1hYYUepY4PFxCdANnlwAXk2vkaLU+Unp6+lU/F/vi750qL42TV2DRQ9F2/oIODnuuSDXBc5BruBJyDX9HrpmrQCOnkydPLnCDgwYNuupiAAAoKIv+XPShqO1I0vTp0y95BZhcAwCUBLNzzR0VqHP62muvFagxi8VCiF+jut/QWD4WP2eXARfju7q0s0uAqzmbLd3u7CIu7fXXX5eXl+NIGbl27epaq558LL7OLgMupsw6cg2Ocs5mS+2dXYXnKFDn9OLqvAAAuAyTnwf3/fffu930JwCABzE519xRoRdEAgDAJThpVUMAAIoFuVb455wCAAAAAGA2Rk4BAO6JK8wAAE9CrtE5BQC4J4th0qqGbhziAADPQa4xrRcAAAAA4AKuqnOalpampKQkNW3aVL/99psk6a233tLatWtNLQ4AgMsyTNwkDRgwgFwDADiPybnmjgrdOV28eLESEhIUGBiorVu3KisrS5KUnp6uF154wfQCAQC4JJNDPCAggFwDADgPndPCd07HjRun6dOna9asWfL1/fPh1M2bN9eWLVtMLQ4AgJIyZcoUcg0AACcq9IJIO3fuVKtWrfLtDwsL0+nTp82oCQCAf1TcC0eQawCAksSCSFcxchoVFaU9e/bk27927VpVq1bNlKIAAPhHhsW87RLINQBAiSrmXHMHhe6cDhgwQI899pg2bNggi8Wiw4cPKzU1VUOHDtVDDz1UHDUCAFDsvv32W3INAAAnKvS03uHDh8tms6lt27Y6d+6cWrVqJX9/fw0dOlQDBw4sjhoBAMjP5IeVd+rUSefPnyfXAADOYXKuuaNCd04tFoueffZZPfnkk9qzZ48yMzNVp04dBQcHF0d9AACUiAMHDuj48ePkGgAATlLozulFfn5+qlOnjpm1AABQYGYvHEGuAQCciQWRrqJz2qZNG1ksl7/J9ssvvyxSQQAAFIjJ05/uuOMO+fjkj0VyDQBQIpjWW/jOaYMGDRy+zsnJ0bZt2/TDDz+ob9++ZtUFAECJqlu3rvz9/ck1AACcpNCd09dee+2S+59//nllZmYWuSAAAArEpOlPF68wv/jiiwoNDbXvJtcAACXK5FxzR4V+lMzlJCUl6c033zSrOQAArswwcbsEcg0AUKKKOdfcgWmd0/Xr1ysgIMCs5gAAcCpyDQCAklXoab3dunVz+NowDB05ckTffvutRowYYVphAABckckLRyQmJsrX15dcAwA4BwsiFb5zGhYW5vC1l5eXateurTFjxujWW281rTAAAK7E7CX3Q0ND5efnR64BAJyCR8kUsnNqtVp13333qV69eipdunRx1QQAQImbNm2aw4JIAACgZBXqnlNvb2/deuutOn36dDGV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8gqjg3pVXDjXHn/8cUVERCg0NFQDBw4stlxz+k9OZmamFi1apIceekgdO3bU3LlzL3neunXrdMMNNyggIED/+te/9MMPPzgcX7x4sa6//nr5+/uratWqmjhxov3YM888oyZNmuRrs379+hozZoz969mzZysuLk4BAQGKjY3VG2+8UaT6e/furZ49ezqcn5OTo7Jly2r+/PmSJJvNpuTkZMXExCgwMFD169fX+++/bz//4vSvFStWqFGjRvL399fatWu1d+9ede7cWZGRkQoODtZNN92kL774wuG9jhw5oo4dOyowMFAxMTFasGCBqlatqkmTJtnPOX36tB544AGVK1dOoaGhuuWWW7R9+/Z//NxwVLX2OS35fpOW/rxRj47br7EP1dLBPdybcy3x6h0kr1sClNvnhHLaHlHugN/ldVeQvNoHXvJ8I8uQdWaGLG0DZAly+q9it2T29CezjB07VtnZ2Vq5cqWys7N1/vx5LVmyJN955Bq55opCI6zy9pFOn3C8WHDqdx+VLpfrpKrgDIH3Bsivna9O987QH61OKf2+Mwrs4S//hD+nhvr+y1fBz5VS6OQQBT0cqNxtucp4IlOG1eRfrNcIV8211157TXfccYe6d++uVq1aKSoq6pK5Zgan/0X07rvvKjY2VrVr11ZSUpLefPNNGUb+7+iTTz6piRMnatOmTSpXrpw6deqknJy8ex82b96sHj16qFevXvr+++/1/PPPa8SIEfZATUxM1MaNG7V37157ez/++KO+++479e7dW5KUmpqqkSNHavz48dqxY4deeOEFjRgxQvPmzbvq+hMTE7Vs2TJlZv45vfOzzz7TuXPn1LVrV0lScnKy5s+fr+nTp+vHH3/UkCFDlJSUpDVr1ji8z/Dhw/Xiiy9qx44duuGGG5SZmanbb79dK1eu1NatW9WhQwd16tRJBw8etL+mT58+Onz4sFavXq3Fixdr5syZOn78uEO7d999t44fP64VK1Zo8+bNatiwodq2bauTJy89dScrKyvfstSQft0XoEfuqKfB3epqeWp5PfHyXlWpwRXma4mx6oJsX5yX93Ph8plVVt5Ph8m2KFO2T/P/HBi5hqyjT0mG5D0kzAnVwkyrV6926BwtXbpU9evX1+nTp/Xhhx8qKytLkZGR+V5HrpFrgCvL/jJH2f/LVvDzQQqbE6rg50rp/DtZuvDJ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9OihsWPHOrscuJhff/1VlStX1hdffKG2bds6u5wrysjIUFhYmNpVHywf76LfR5ZrzdIXeycpPT29QNMrAbgGcg1XQq65Z64xrRfwUAcOHND//vc/xcfHKysrS1OnTtX+/fvtzzjDte3LL79UZmam6tWrpyNHjuipp55S1apV7fdyuQWmPwHXFHINV0Ku/a0dN0XnFPBQXl5emjt3roYOHSrDMFS3bl198cUX9gUVcG3LycnRM888o3379ikkJETNmjVTamqqfeEKAHA15BquhFzzDEzrBQC4Ffv0p2qD5ONlwvQnW5a+2DfZLac/AQDcH7n2J0ZOAQDuielPAABPQq7Jy9kFAAAAAADAyCkAwD3ZLj6pw4x2AABwMnKNkVMAAAAAgPPROQWuYf369VOXLl3sX7du3VqDBw8u8TpWr14ti8Wi06dPX/Yci8WiDz/8sMBtPv/882rQoEGR6vrll19ksVi0bdu2IrWDYmLYzNsAeARy7crINRdHrtE5BVxNv379ZLFYZLFY5Ofnpxo1amjMmDHKzc0t9vdesmRJgR9kXpDgBYrVxYUjzNgAFBtyDSggco17TgFX1KFDB82ZM0dZWVn65JNP9Mgjj8jX11dPP/10vnOzs7Pl5+dnyvtGRESY0g4AAH9FrgEoCEZOARfk7++vqKgoXXfddXrooYfUrl07LV26VNKfU5bGjx+v6Oho1a5dW5J06NAh9ejRQ+Hh4YqIiFDnzp31yy+/2Nu0Wq16/PHHFR4erjJlyuipp57S3x9z/PfpT1lZWRo2bJgqV64sf39/1ahRQykpKfrll1/Upk0bSVLp0qVlsVjUr18/SZLNZlNycrJiYmIUGBio+vXr6/3333d4n08++US1atVSYGCg2rRp41BnQQ0bNky1atVSqVKlVK1aNY0YMUI5OTn5zpsxY4YqV66sUqVKqUePHkpPT3c4Pnv2bMXFxSkgIECxsbF64403Cl0LnMRmmLcBKFbk2j8j10CuMXIKuIXAwED98ccf9q9Xrlyp0NBQff7555KknJwcJSQkqGnTpkpLS5OPj4/GjRunDh066LvvvpOfn58mTpyouXPn6s0331RcXJwmTpyoDz74QLfccstl37dPnz5av369Jk+erPr162v//v36/fffVblyZS1evFjdu3fXzp07FRoaqsDAQElScnKy3n77bU2fPl01a9bUV199paSkJJUrV07x8fE6dOiQunXrpkceeUQPPvigvv32Wz3xxBOF/p6EhIRo7ty5io6O1vfff68BAwYoJCRETz31lP2cPXv26N1339WyZcuUkZGh/v376+GHH1ZqaqokKTU1VSNHjtTUqVN14403auvWrRowYICCgoLUt2/fQteEEsbz4AC3Ra7lR66BXKNzCrg0wzC0cuVKffbZZxo4cKB9f1BQkGbPnm2f9vT222/LZrNp9uzZslgskqQ5c+YoPDxcq1ev1q233qpJkybp6aefVrdu3SRJ06dP12effXbZ9961a5feffddff7552rXrp0kqVq1avbjF6dKlS9fXuHh4ZLyrki/8MIL+uKLL9S0aVP7a9auXasZM2YoPj5e06ZNU/Xq1TVx4kRJUu3atfX999/rpZdeKtT35rnnnrP//6pVq2ro0KFauHChQ4hfuHBB8+fPV8WKFSVJU6ZMUceOHTVx4kRFRUVp1KhRmjhxov17EhMTo59++kkzZswgxAGgGJBrl0euAXROAZf08ccfKzg4WDk5ObLZbOrdu7eef/55+/F69eo53I+zfft27dmzRyEhIQ7tXLhwQXv37lV6erqOHDmiJk2a2I/5+PiocePG+aZAXbRt2zZ5e3srPj6+wHXv2bNH586dU/v27R32Z2dn68Ybb5Qk7dixw6EOSfbAL4xFixZp8uTJ2rt3rzIzM5Wbm6vQ0FCHc6pUqWIP8IvvY7PZtHPnToWEhGjv3r3q37+/BgwYYD8nNzdXYWFhha4HTmDIpCvMRW8CwJWRa/+MXAO5RucUcElt2rTRtGnT5Ofnp+joaPn4OP6nGhQU5PB1ZmamGjVqZJ/W81flypW7qhouTmcqjMzMTEnS8uXLHcJTyrvfyCzr169XYmKiRo8erYSEBIWFhWnhwoX2q9aFqXXWrFn5/qjw9vY2rVYUI6Y/AW6DXLsycg2SyDXROQVcUlBQkGrUqFHg8xs2bKhFixapfPny+a6yXlShQgVt2LBBrVq1kpR3JXXz5s1q2LDhJc+vV6+ebDab1qxZY5/+9FcXr3BbrVb7vjp16sjf318HDx687JXpuLg4+yIYF33zzTf//CH/4uuvv9Z1112nZ5991r7vwIED+c47ePCgDh8+rOjoaPv7eHl5qXbt2oqMjFR0dLT27dunxMTEQr0/AKBwyLUrI9eAPKzWC3iAxMRElS1bVp07d1ZaWpr279+v1atXa9CgQfr1118lSY899phefPFFffjhh/r555/18MMPX/FZblWrVlXfvn11//3368MPP7S3+e6770qSrrvuOlksFn388cc6ceKEMjMzFRISoqFDh2rIkCGaN2+e9u7dqy1btmjKlCmaN2+eJOk///mPdu/erSeffFI7d+7UggULNHfu3EJ93po1a+rgwYNauHCh9u7dq8mTJ+uDDz7Id15AQID69u2r7du3Ky0tTYMGDVKPHj0UFRUlSRo9erSSk5M1efJk7dq1S99//73mzJmjV199tVD1wElsNvM2AC6FXCPXrknkGp1TwBOUKlVKX331lapUqaJu3bopLi5O/fv314ULF+xXnJ944gnde++96tu3r5o2baqQkBB17dr1iu1OmzZNd911lx5++GHFxsZqwIABOnv2rCSpYsWKGj16tIYPH67IyEg9+uijkqSxY8dqxIgRSk5OVlxcnDp06KDly5crJiZGUt79MosXL9aHH36o+vXra/r06XrhhRcK9XnvvPNODRkyRI8++qgaNGigr7/+WiNGjMh3Xo0aNdStWzfdfvvtuvXWW3XDDTc4LKn/wAMPaPbs2ZozZ47q1aun+Ph4zZ07114rAMA5yDVyDdcmi3G5u8YBAHBBGRkZCgsLU7ty/eXj5ffPL/gHubZsfXEiRenp6ZedPggAQHEh1/7EPacAAPfEwhEAAE9CrjGtFwAAAADgfIycAgDck82QKQ9zs7nvFWYAgAch1+icAgDck2HYZBhFX5HQjDYAACgqco1pvQAAAAAAF8DIKQDAPRmGOVOX3HjhCACAByHX6JwCANyUYdK9OW4c4gAAD0KuMa0XAAAAAOB8jJwCANyTzSZZTFj0wY0XjgAAeBByjc4pAMBNMf0JAOBJyDWm9QIAAAAAnI+RUwCAWzJsNhkmTH9y5+fBAQA8B7nGyCkAAAAAwAUwcgoAcE/cmwMA8CTkGp1TAICbshmS5doOcQCAByHXmNYLAAAAAHA+Rk4BAO7JMCSZ8Tw4973CDADwIOQanVMAgHsybIYME6Y/GW4c4gAAz0GuMa0XAAAAAOAC6JwCANyTYTNvuwqvv/66qlatqoCAADVp0kQbN240+QMCAK4p5BqdUwCAezJshmlbYS1atEiPP/64Ro0apS1btqh+/fpKSEjQ8ePHi+GTAgCuBeQanVMAAArt1Vdf1YABA3TfffepTp06mj59ukqVKqU333zT2aUBAFBorpJrdE4BAO7JSdOfsrOztXnzZrVr186+z8vLS+3atdP69evN/pQAgGsFucZqvQAA95SrHMmEBQlzlSNJysjIcNjv7+8vf3//fOf//vvvslqtioyMdNgfGRmpn3/+uegFAQCuSeQanVMAgJvx8/NTVFSU1h79xLQ2g4ODVblyZYd9o0aN0vPPP2/aewAAcCnk2p/onAIA3EpAQID279+v7Oxs09o0DEMWi8Vh36WuLktS2bJl5e3trWPHjjnsP3bsmKKiokyrCQBwbSDX/kTnFADgdgICAhQQEOCU9/bz81OjRo20cuVKdenSRZJks9m0cuVKPfroo06pCQDg3si1PHROAQAopMcff1x9+/ZV48aNdfPNN2vSpEk6e/as7rvvPmeXBgBAoblKrtE5BQCgkHr27KkTJ05o5MiROnr0qBo0aKBPP/0032ISAAC4A1fJNYthGCasCQUAAAAAwNXjOacAAAAAAKejcwoAAAAAcDo6pwAAAAAAp6NzCgAAAABwOjqnAAAAAACno3MKAAAAAHA6OqcAAAAAAKejcwoAAAAAcDo6pwAAAAAAp6NzCgAAAABwOjqnAAAAAACno3MKAAAAAHC6/wN2u4mC4B4WdAAAAABJRU5ErkJggg==", + "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": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Среднее значение поля 'city_latitude': 38.70460772283549\n", + " summary city state \\\n", + "0 Viewed some red lights in the sky appearing to... Visalia CA \n", + "1 Look like 1 or 3 crafts from North traveling s... Cincinnati OH \n", + "2 seen dark rectangle moving slowly thru the sky... Tecopa CA \n", + "3 One red light moving switly west to east, beco... Knoxville TN \n", + "4 Bright, circular Fresnel-lens shaped light sev... Alexandria VA \n", + "\n", + " date_time shape duration \\\n", + "0 2021-12-15T21:45:00 light 2 minutes \n", + "1 2021-12-16T09:45:00 triangle 14 seconds \n", + "2 2021-12-10T00:00:00 rectangle Several minutes \n", + "3 2021-12-10T19:30:00 triangle 20-30 seconds \n", + "4 2021-12-07T08:00:00 circle NaN \n", + "\n", + " stats \\\n", + "0 Occurred : 12/15/2021 21:45 (Entered as : 12/... \n", + "1 Occurred : 12/16/2021 09:45 (Entered as : 12/... \n", + "2 Occurred : 12/10/2021 00:00 (Entered as : 12/... \n", + "3 Occurred : 12/10/2021 19:30 (Entered as : 12/... \n", + "4 Occurred : 12/7/2021 08:00 (Entered as : 12/0... \n", + "\n", + " report_link \\\n", + "0 http://www.nuforc.org/webreports/165/S165881.html \n", + "1 http://www.nuforc.org/webreports/165/S165888.html \n", + "2 http://www.nuforc.org/webreports/165/S165810.html \n", + "3 http://www.nuforc.org/webreports/165/S165825.html \n", + "4 http://www.nuforc.org/webreports/165/S165754.html \n", + "\n", + " text posted \\\n", + "0 Viewed some red lights in the sky appearing to... 2021-12-19T00:00:00 \n", + "1 Look like 1 or 3 crafts from North traveling s... 2021-12-19T00:00:00 \n", + "2 seen dark rectangle moving slowly thru the sky... 2021-12-19T00:00:00 \n", + "3 One red light moving switly west to east, beco... 2021-12-19T00:00:00 \n", + "4 Bright, circular Fresnel-lens shaped light sev... 2021-12-19T00:00:00 \n", + "\n", + " city_latitude city_longitude above_average_city_latitude \n", + "0 36.356650 -119.347937 0 \n", + "1 39.174503 -84.481363 1 \n", + "2 NaN NaN 0 \n", + "3 35.961561 -83.980115 0 \n", + "4 38.798958 -77.095133 1 \n", + "Статистическое описание DataFrame:\n", + " city_latitude city_longitude above_average_city_latitude\n", + "count 110136.000000 110136.000000 136940.000000\n", + "mean 38.704608 -95.185792 0.435928\n", + "std 5.752186 18.310088 0.495880\n", + "min -32.055500 -170.494000 0.000000\n", + "25% 34.238375 -113.901810 0.000000\n", + "50% 39.257500 -89.161450 0.000000\n", + "75% 42.317739 -80.363444 1.000000\n", + "max 64.845276 130.850580 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(\"nuforc_reports.csv\")\n", + "\n", + "# Опция для настройки генерации случайных чисел \n", + "random_state = 42\n", + "\n", + "# Вычисление среднего значения поля \"city_latitude\"\n", + "average_city_latitude = df['city_latitude'].mean()\n", + "print(f\"Среднее значение поля 'city_latitude': {average_city_latitude}\")\n", + "\n", + "# Создание новой колонки, указывающей, выше или ниже среднего значение цены\n", + "df['above_average_city_latitude'] = (df['city_latitude'] > average_city_latitude).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_city_latitude" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'X_train'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
summarycitystatedate_timeshapedurationstatsreport_linktextpostedcity_latitudecity_longitude
1246784 lights moving in unison at a high rate of sp...Mount JulietTN2019-02-24T20:25:00light4 secondsOccurred : 2/24/2019 20:25 (Entered as : 02/2...http://www.nuforc.org/webreports/144/S144994.html4 lights moving in unison at a high rate of sp...2019-02-27T00:00:0036.172148-86.490748
2212Observed a long line of objects moving at very...Bethany BeachDE2020-03-01T05:30:00other45 secondsOccurred : 3/1/2020 05:30 (Entered as : 03/01...http://www.nuforc.org/webreports/153/S153730.htmlObserved a long line of objects moving at very...2020-04-09T00:00:0038.556200-75.069200
31960My wife and myself were traveling to a friends...WebbMS1975-12-31T19:30:00diskapprox 5 minsOccurred : 12/31/1975 19:30 (Entered as : 12/...http://www.nuforc.org/webreports/037/S37355.htmlMy wife and myself were traveling to a friends...2004-06-18T00:00:0033.919100-90.307300
33954I was sitting at my friends house, in my car a...EllensburgWA2004-03-17T08:45:00diamond10-20 minutesOccurred : 3/17/2004 08:45 (Entered as : 03/1...http://www.nuforc.org/webreports/035/S35995.htmlI was sitting at my friends house, in my car a...2004-04-09T00:00:0046.979000-120.470300
516Observed two glimmering craft over Powell Rive...Powell RiverBC2020-04-09T11:00:00disk3 minutesOccurred : 4/9/2020 11:00 (Entered as : 04/09...http://www.nuforc.org/webreports/155/S155845.htmlObserved two glimmering craft over Powell Rive...2020-06-25T00:00:0050.016300-124.322600
.......................................
110268Big black tranparent blib in sky.Sedro WoolleyWA2016-08-14T19:45:00other6 secondsOccurred : 8/14/2016 19:45 (Entered as : 08/1...http://www.nuforc.org/webreports/129/S129281.htmlBig black tranparent blib in sky Walking at No...2016-08-16T00:00:00NaNNaN
119879Very fast bright light.BrainerdMN2017-08-19T18:00:00light5 secondsOccurred : 8/19/2017 18:00 (Entered as : 08/1...http://www.nuforc.org/webreports/135/S135876.htmlVery fast bright light. Observed a bright ligh...2017-08-24T00:00:0046.306700-94.100800
103694never seen this beforeOld TappanNJ2015-03-12T05:49:00triangle20 secondsOccurred : 3/12/2015 05:49 (Entered as : 0312...http://www.nuforc.org/webreports/117/S117744.htmlnever seen this before. moved slow then all th...2015-03-13T00:00:00NaNNaN
131932Back in the late 70s or early 80s my family wa...TacomaWA1980-06-01T09:00:00sphere10 secondsOccurred : 6/1/1980 09:00 (Entered as : 06/01...http://www.nuforc.org/webreports/164/S164812.htmlBack in the late 70s or early 80s my family wa...2021-10-19T00:00:0047.212572-122.459720
121958Exiting Highway 61 onto I-280 and saw a light ...DavenportIA2018-11-01T01:00:00light2 secondsOccurred : 11/1/2018 01:00 (Entered as : 11/0...http://www.nuforc.org/webreports/143/S143647.htmlExiting highway 61 on to Interstate 280 and sa...2018-11-09T00:00:0041.555164-90.598760
\n", + "

109552 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " summary city \\\n", + "124678 4 lights moving in unison at a high rate of sp... Mount Juliet \n", + "2212 Observed a long line of objects moving at very... Bethany Beach \n", + "31960 My wife and myself were traveling to a friends... Webb \n", + "33954 I was sitting at my friends house, in my car a... Ellensburg \n", + "516 Observed two glimmering craft over Powell Rive... Powell River \n", + "... ... ... \n", + "110268 Big black tranparent blib in sky. Sedro Woolley \n", + "119879 Very fast bright light. Brainerd \n", + "103694 never seen this before Old Tappan \n", + "131932 Back in the late 70s or early 80s my family wa... Tacoma \n", + "121958 Exiting Highway 61 onto I-280 and saw a light ... Davenport \n", + "\n", + " state date_time shape duration \\\n", + "124678 TN 2019-02-24T20:25:00 light 4 seconds \n", + "2212 DE 2020-03-01T05:30:00 other 45 seconds \n", + "31960 MS 1975-12-31T19:30:00 disk approx 5 mins \n", + "33954 WA 2004-03-17T08:45:00 diamond 10-20 minutes \n", + "516 BC 2020-04-09T11:00:00 disk 3 minutes \n", + "... ... ... ... ... \n", + "110268 WA 2016-08-14T19:45:00 other 6 seconds \n", + "119879 MN 2017-08-19T18:00:00 light 5 seconds \n", + "103694 NJ 2015-03-12T05:49:00 triangle 20 seconds \n", + "131932 WA 1980-06-01T09:00:00 sphere 10 seconds \n", + "121958 IA 2018-11-01T01:00:00 light 2 seconds \n", + "\n", + " stats \\\n", + "124678 Occurred : 2/24/2019 20:25 (Entered as : 02/2... \n", + "2212 Occurred : 3/1/2020 05:30 (Entered as : 03/01... \n", + "31960 Occurred : 12/31/1975 19:30 (Entered as : 12/... \n", + "33954 Occurred : 3/17/2004 08:45 (Entered as : 03/1... \n", + "516 Occurred : 4/9/2020 11:00 (Entered as : 04/09... \n", + "... ... \n", + "110268 Occurred : 8/14/2016 19:45 (Entered as : 08/1... \n", + "119879 Occurred : 8/19/2017 18:00 (Entered as : 08/1... \n", + "103694 Occurred : 3/12/2015 05:49 (Entered as : 0312... \n", + "131932 Occurred : 6/1/1980 09:00 (Entered as : 06/01... \n", + "121958 Occurred : 11/1/2018 01:00 (Entered as : 11/0... \n", + "\n", + " report_link \\\n", + "124678 http://www.nuforc.org/webreports/144/S144994.html \n", + "2212 http://www.nuforc.org/webreports/153/S153730.html \n", + "31960 http://www.nuforc.org/webreports/037/S37355.html \n", + "33954 http://www.nuforc.org/webreports/035/S35995.html \n", + "516 http://www.nuforc.org/webreports/155/S155845.html \n", + "... ... \n", + "110268 http://www.nuforc.org/webreports/129/S129281.html \n", + "119879 http://www.nuforc.org/webreports/135/S135876.html \n", + "103694 http://www.nuforc.org/webreports/117/S117744.html \n", + "131932 http://www.nuforc.org/webreports/164/S164812.html \n", + "121958 http://www.nuforc.org/webreports/143/S143647.html \n", + "\n", + " text \\\n", + "124678 4 lights moving in unison at a high rate of sp... \n", + "2212 Observed a long line of objects moving at very... \n", + "31960 My wife and myself were traveling to a friends... \n", + "33954 I was sitting at my friends house, in my car a... \n", + "516 Observed two glimmering craft over Powell Rive... \n", + "... ... \n", + "110268 Big black tranparent blib in sky Walking at No... \n", + "119879 Very fast bright light. Observed a bright ligh... \n", + "103694 never seen this before. moved slow then all th... \n", + "131932 Back in the late 70s or early 80s my family wa... \n", + "121958 Exiting highway 61 on to Interstate 280 and sa... \n", + "\n", + " posted city_latitude city_longitude \n", + "124678 2019-02-27T00:00:00 36.172148 -86.490748 \n", + "2212 2020-04-09T00:00:00 38.556200 -75.069200 \n", + "31960 2004-06-18T00:00:00 33.919100 -90.307300 \n", + "33954 2004-04-09T00:00:00 46.979000 -120.470300 \n", + "516 2020-06-25T00:00:00 50.016300 -124.322600 \n", + "... ... ... ... \n", + "110268 2016-08-16T00:00:00 NaN NaN \n", + "119879 2017-08-24T00:00:00 46.306700 -94.100800 \n", + "103694 2015-03-13T00:00:00 NaN NaN \n", + "131932 2021-10-19T00:00:00 47.212572 -122.459720 \n", + "121958 2018-11-09T00:00:00 41.555164 -90.598760 \n", + "\n", + "[109552 rows x 12 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_city_latitude
1246780
22120
319600
339541
5161
......
1102680
1198791
1036940
1319321
1219581
\n", + "

109552 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " above_average_city_latitude\n", + "124678 0\n", + "2212 0\n", + "31960 0\n", + "33954 1\n", + "516 1\n", + "... ...\n", + "110268 0\n", + "119879 1\n", + "103694 0\n", + "131932 1\n", + "121958 1\n", + "\n", + "[109552 rows x 1 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'X_test'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
summarycitystatedate_timeshapedurationstatsreport_linktextpostedcity_latitudecity_longitude
108340Bright light with irregular flight pattern and...PittsboroNC2015-12-08T21:00:00light5 minutesOccurred : 12/8/2015 21:00 (Entered as : 12/0...http://www.nuforc.org/webreports/124/S124610.htmlBright light with irregular flight pattern and...2015-12-17T00:00:0035.751900-79.224800
290713 lights flash less than seconds apart in a ro...San Luis ObispoCA2004-03-16T22:10:00flash3 secondsOccurred : 3/16/2004 22:10 (Entered as : 03/1...http://www.nuforc.org/webreports/035/S35640.html3 lights flash less than seconds apart in a ro...2004-03-17T00:00:0035.262867-120.624789
89462A wonderful aircraft, but spooky.CornwallON2013-07-06T00:30:00triangle20 secondsOccurred : 7/6/2013 00:30 (Entered as : 76201...http://www.nuforc.org/webreports/099/S99896.htmlA wonderful aircraft , but spooky Saw aircraft...2013-07-14T00:00:0045.056209-74.710143
124422I was outside facing east, speaking with a co-...Virginia BeachVA2019-01-09T06:35:00fireball5-7 secondsOccurred : 1/9/2019 06:35 (Entered as : 1-9-1...http://www.nuforc.org/webreports/144/S144555.htmlI was outside facing east, speaking with a co-...2019-01-24T00:00:0036.837301-76.061948
126342Bright circular light in the sky - once we sta...FruitlandUT2019-05-11T23:40:00circle2 minutesOccurred : 5/11/2019 23:40 (Entered as : 5/11...http://www.nuforc.org/webreports/146/S146570.htmlBright circular light in the sky - once we sta...2019-06-07T00:00:00NaNNaN
.......................................
48714Was this white cylinder with fins a weather ba...Cape CoralFL2007-04-29T15:30:00cylinder30 minsOccurred : 4/29/2007 15:30 (Entered as : 04/2...http://www.nuforc.org/webreports/056/S56462.htmlWas this white cylinder with fins a weather ba...2007-06-12T00:00:0026.616422-81.970066
25512I was driving down a rural road near Haymarket...HaymarketVA2003-03-11T22:00:00triangle3 minutesOccurred : 3/11/2003 22:00 (Entered as : 3-11...http://www.nuforc.org/webreports/028/S28125.htmlI was driving down a rural road near Haymarket...2003-03-21T00:00:0038.869400-77.637300
96155Five orange lights in the sky over Essex area,...Essex JunctionVT2014-05-25T21:50:00light10 minutesOccurred : 5/25/2014 21:50 (Entered as : 05/2...http://www.nuforc.org/webreports/109/S109718.htmlFive orange lights in the sky over Essex area,...2014-06-04T00:00:0044.532199-73.058631
82188It was slowly moving over our pastures going a...New WashingtonOH2013-01-24T21:00:00circle5 minutesOccurred : 1/24/2013 21:00 (Entered as : 1/24...http://www.nuforc.org/webreports/096/S96095.htmlIt was slowly moving over our pastures going a...2013-02-04T00:00:0040.945000-82.861800
1245202 circles in the sky changed colors several ti...South AmboyNJ2019-02-02T00:28:00circle1 minuteOccurred : 2/2/2019 00:28 (Entered as : 02/2/...http://www.nuforc.org/webreports/144/S144752.html2 circles in the sky changed colors several ti...2019-02-07T00:00:0040.477900-74.290700
\n", + "

27388 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " summary city \\\n", + "108340 Bright light with irregular flight pattern and... Pittsboro \n", + "29071 3 lights flash less than seconds apart in a ro... San Luis Obispo \n", + "89462 A wonderful aircraft, but spooky. Cornwall \n", + "124422 I was outside facing east, speaking with a co-... Virginia Beach \n", + "126342 Bright circular light in the sky - once we sta... Fruitland \n", + "... ... ... \n", + "48714 Was this white cylinder with fins a weather ba... Cape Coral \n", + "25512 I was driving down a rural road near Haymarket... Haymarket \n", + "96155 Five orange lights in the sky over Essex area,... Essex Junction \n", + "82188 It was slowly moving over our pastures going a... New Washington \n", + "124520 2 circles in the sky changed colors several ti... South Amboy \n", + "\n", + " state date_time shape duration \\\n", + "108340 NC 2015-12-08T21:00:00 light 5 minutes \n", + "29071 CA 2004-03-16T22:10:00 flash 3 seconds \n", + "89462 ON 2013-07-06T00:30:00 triangle 20 seconds \n", + "124422 VA 2019-01-09T06:35:00 fireball 5-7 seconds \n", + "126342 UT 2019-05-11T23:40:00 circle 2 minutes \n", + "... ... ... ... ... \n", + "48714 FL 2007-04-29T15:30:00 cylinder 30 mins \n", + "25512 VA 2003-03-11T22:00:00 triangle 3 minutes \n", + "96155 VT 2014-05-25T21:50:00 light 10 minutes \n", + "82188 OH 2013-01-24T21:00:00 circle 5 minutes \n", + "124520 NJ 2019-02-02T00:28:00 circle 1 minute \n", + "\n", + " stats \\\n", + "108340 Occurred : 12/8/2015 21:00 (Entered as : 12/0... \n", + "29071 Occurred : 3/16/2004 22:10 (Entered as : 03/1... \n", + "89462 Occurred : 7/6/2013 00:30 (Entered as : 76201... \n", + "124422 Occurred : 1/9/2019 06:35 (Entered as : 1-9-1... \n", + "126342 Occurred : 5/11/2019 23:40 (Entered as : 5/11... \n", + "... ... \n", + "48714 Occurred : 4/29/2007 15:30 (Entered as : 04/2... \n", + "25512 Occurred : 3/11/2003 22:00 (Entered as : 3-11... \n", + "96155 Occurred : 5/25/2014 21:50 (Entered as : 05/2... \n", + "82188 Occurred : 1/24/2013 21:00 (Entered as : 1/24... \n", + "124520 Occurred : 2/2/2019 00:28 (Entered as : 02/2/... \n", + "\n", + " report_link \\\n", + "108340 http://www.nuforc.org/webreports/124/S124610.html \n", + "29071 http://www.nuforc.org/webreports/035/S35640.html \n", + "89462 http://www.nuforc.org/webreports/099/S99896.html \n", + "124422 http://www.nuforc.org/webreports/144/S144555.html \n", + "126342 http://www.nuforc.org/webreports/146/S146570.html \n", + "... ... \n", + "48714 http://www.nuforc.org/webreports/056/S56462.html \n", + "25512 http://www.nuforc.org/webreports/028/S28125.html \n", + "96155 http://www.nuforc.org/webreports/109/S109718.html \n", + "82188 http://www.nuforc.org/webreports/096/S96095.html \n", + "124520 http://www.nuforc.org/webreports/144/S144752.html \n", + "\n", + " text \\\n", + "108340 Bright light with irregular flight pattern and... \n", + "29071 3 lights flash less than seconds apart in a ro... \n", + "89462 A wonderful aircraft , but spooky Saw aircraft... \n", + "124422 I was outside facing east, speaking with a co-... \n", + "126342 Bright circular light in the sky - once we sta... \n", + "... ... \n", + "48714 Was this white cylinder with fins a weather ba... \n", + "25512 I was driving down a rural road near Haymarket... \n", + "96155 Five orange lights in the sky over Essex area,... \n", + "82188 It was slowly moving over our pastures going a... \n", + "124520 2 circles in the sky changed colors several ti... \n", + "\n", + " posted city_latitude city_longitude \n", + "108340 2015-12-17T00:00:00 35.751900 -79.224800 \n", + "29071 2004-03-17T00:00:00 35.262867 -120.624789 \n", + "89462 2013-07-14T00:00:00 45.056209 -74.710143 \n", + "124422 2019-01-24T00:00:00 36.837301 -76.061948 \n", + "126342 2019-06-07T00:00:00 NaN NaN \n", + "... ... ... ... \n", + "48714 2007-06-12T00:00:00 26.616422 -81.970066 \n", + "25512 2003-03-21T00:00:00 38.869400 -77.637300 \n", + "96155 2014-06-04T00:00:00 44.532199 -73.058631 \n", + "82188 2013-02-04T00:00:00 40.945000 -82.861800 \n", + "124520 2019-02-07T00:00:00 40.477900 -74.290700 \n", + "\n", + "[27388 rows x 12 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_city_latitude
1083400
290710
894621
1244220
1263420
......
487140
255121
961551
821881
1245201
\n", + "

27388 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " above_average_city_latitude\n", + "108340 0\n", + "29071 0\n", + "89462 1\n", + "124422 0\n", + "126342 0\n", + "... ...\n", + "48714 0\n", + "25512 1\n", + "96155 1\n", + "82188 1\n", + "124520 1\n", + "\n", + "[27388 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_city_latitude\", \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_city_latitude\", \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": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " city_latitude city_longitude shape_changing shape_chevron \\\n", + "0 -0.475704 -1.527173 0.0 0.0 \n", + "1 0.070048 0.574031 0.0 0.0 \n", + "2 0.086123 0.291990 0.0 0.0 \n", + "3 -0.552224 0.604238 0.0 0.0 \n", + "4 -0.002686 1.019156 0.0 0.0 \n", + "... ... ... ... ... \n", + "136935 1.426621 -1.516027 0.0 0.0 \n", + "136936 -2.044798 0.757950 0.0 0.0 \n", + "136937 0.180564 -0.660057 0.0 0.0 \n", + "136938 -0.719495 -1.453787 0.0 0.0 \n", + "136939 0.785101 1.328590 0.0 0.0 \n", + "\n", + " shape_cigar shape_circle shape_cone shape_crescent shape_cross \\\n", + "0 0.0 0.0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 0.0 0.0 \n", + "2 0.0 0.0 0.0 0.0 0.0 \n", + "3 0.0 0.0 0.0 0.0 0.0 \n", + "4 0.0 1.0 0.0 0.0 0.0 \n", + "... ... ... ... ... ... \n", + "136935 0.0 0.0 0.0 0.0 0.0 \n", + "136936 0.0 0.0 0.0 0.0 0.0 \n", + "136937 0.0 0.0 0.0 0.0 0.0 \n", + "136938 0.0 0.0 0.0 0.0 0.0 \n", + "136939 0.0 0.0 0.0 0.0 0.0 \n", + "\n", + " shape_cylinder ... shape_light shape_other shape_oval \\\n", + "0 0.0 ... 1.0 0.0 0.0 \n", + "1 0.0 ... 0.0 0.0 0.0 \n", + "2 0.0 ... 0.0 0.0 0.0 \n", + "3 0.0 ... 0.0 0.0 0.0 \n", + "4 0.0 ... 0.0 0.0 0.0 \n", + "... ... ... ... ... ... \n", + "136935 0.0 ... 0.0 0.0 0.0 \n", + "136936 1.0 ... 0.0 0.0 0.0 \n", + "136937 0.0 ... 1.0 0.0 0.0 \n", + "136938 0.0 ... 0.0 0.0 0.0 \n", + "136939 0.0 ... 0.0 0.0 1.0 \n", + "\n", + " shape_pyramid shape_rectangle shape_round shape_sphere \\\n", + "0 0.0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 0.0 \n", + "2 0.0 1.0 0.0 0.0 \n", + "3 0.0 0.0 0.0 0.0 \n", + "4 0.0 0.0 0.0 0.0 \n", + "... ... ... ... ... \n", + "136935 0.0 0.0 0.0 0.0 \n", + "136936 0.0 0.0 0.0 0.0 \n", + "136937 0.0 0.0 0.0 0.0 \n", + "136938 0.0 0.0 0.0 0.0 \n", + "136939 0.0 0.0 0.0 0.0 \n", + "\n", + " shape_teardrop shape_triangle shape_unknown \n", + "0 0.0 0.0 0.0 \n", + "1 0.0 1.0 0.0 \n", + "2 0.0 0.0 0.0 \n", + "3 0.0 1.0 0.0 \n", + "4 0.0 0.0 0.0 \n", + "... ... ... ... \n", + "136935 0.0 1.0 0.0 \n", + "136936 0.0 0.0 0.0 \n", + "136937 0.0 0.0 0.0 \n", + "136938 0.0 0.0 0.0 \n", + "136939 0.0 0.0 0.0 \n", + "\n", + "[136940 rows x 30 columns]\n", + "(136940, 30)\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 'state' in X.columns:\n", + " X[\"city_latitude_per_state\"] = X[\"city_latitude\"] / X[\"state\"].nunique()\n", + " return X\n", + "\n", + " def get_feature_names_out(self, features_in):\n", + " return np.append(features_in, [\"city_latitude_per_state\"], axis=0) \n", + "\n", + "# Определите признаки для вашей задачи\n", + "columns_to_drop = [\"date_time\", \"posted\", \"city\", \"state\", \"summary\", \"stats\", \"report_link\", \"duration\", \"text\"] # Столбцы, которые можно удалить\n", + "num_columns = [\"city_latitude\", \"city_longitude\"] # Числовые столбцы\n", + "cat_columns = [\"shape\"] # Категориальные столбцы\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(\"nuforc_reports.csv\")\n", + "\n", + "# Создаем целевой признак\n", + "average_city_latitude = df['city_latitude'].mean()\n", + "df['above_average_city_latitude'] = (df['city_latitude'] > average_city_latitude).astype(int)\n", + "\n", + "# Подготовка данных\n", + "X = df.drop('above_average_city_latitude', axis=1)\n", + "y = df['above_average_city_latitude'].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": 51, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Random Forest: Mean Score = 0.9794675822991522, Standard Deviation = 0.016333217085689338\n", + "Linear Regression: Mean Score = 0.5039253856797983, Standard Deviation = 0.030322793232352978\n", + "Gradient Boosting: Mean Score = 0.9901727931253768, Standard Deviation = 0.008628774764973144\n", + "Support Vector Regression: Mean Score = 0.8080621690604891, Standard Deviation = 0.04395269414319326\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": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: logistic\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.04693661457572659\n", + "MSE (test): 0.04651672265225646\n", + "MAE (train): 0.04693661457572659\n", + "MAE (test): 0.04651672265225646\n", + "R2 (train): 0.8090856146775022\n", + "R2 (test): 0.810957714373292\n", + "STD (train): 0.21150311767890387\n", + "STD (test): 0.21060132280199356\n", + "----------------------------------------\n", + "Model: ridge\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.04438987877902731\n", + "MSE (test): 0.04465459325251935\n", + "MAE (train): 0.04438987877902731\n", + "MAE (test): 0.04465459325251935\n", + "R2 (train): 0.8194444465532269\n", + "R2 (test): 0.8185253411919435\n", + "STD (train): 0.20595974713766416\n", + "STD (test): 0.2065443307233859\n", + "----------------------------------------\n", + "Model: decision_tree\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: knn\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.0024737111143566526\n", + "MSE (test): 0.0035416970936176426\n", + "MAE (train): 0.0024737111143566526\n", + "MAE (test): 0.0035416970936176426\n", + "R2 (train): 0.9899381955615719\n", + "R2 (test): 0.9856066705606039\n", + "STD (train): 0.04973611399311279\n", + "STD (test): 0.05950515838317305\n", + "----------------------------------------\n", + "Model: naive_bayes\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.12056375054768512\n", + "MSE (test): 0.12202424419453775\n", + "MAE (train): 0.12056375054768512\n", + "MAE (test): 0.12202424419453775\n", + "R2 (train): 0.5096077010230355\n", + "R2 (test): 0.5040978661189495\n", + "STD (train): 0.32835683006894384\n", + "STD (test): 0.33012146600139913\n", + "----------------------------------------\n", + "Model: gradient_boosting\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: random_forest\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE (train): 0.00040163575288447494\n", + "MSE (test): 0.0005476851175697386\n", + "MAE (train): 0.00040163575288447494\n", + "MAE (test): 0.0005476851175697386\n", + "R2 (train): 0.9983663490948678\n", + "R2 (test): 0.997774227406279\n", + "STD (train): 0.020036827134216634\n", + "STD (test): 0.023396263773981758\n", + "----------------------------------------\n", + "Model: mlp\n", + "MSE (train): 0.0206659851029648\n", + "MSE (test): 0.01971666423251059\n", + "MAE (train): 0.0206659851029648\n", + "MAE (test): 0.01971666423251059\n", + "R2 (train): 0.9159412352450146\n", + "R2 (test): 0.9198721866260421\n", + "STD (train): 0.1430221622813633\n", + "STD (test): 0.13976464450173487\n", + "----------------------------------------\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from sklearn import metrics\n", + "from sklearn.pipeline import Pipeline\n", + "\n", + "# Проверка наличия необходимых переменных\n", + "if 'class_models' not in locals():\n", + " raise ValueError(\"class_models is not defined\")\n", + "if 'X_train' not in locals() or 'X_test' not in locals() or 'y_train' not in locals() or 'y_test' not in locals():\n", + " raise ValueError(\"Train/test data is not defined\")\n", + "\n", + "# Преобразуем 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": 53, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: RandomForest\n", + "MSE (train): 0.025664413833537104\n", + "MSE (test): 0.12705862332487192\n", + "MAE (train): 0.017621854354383706\n", + "MAE (test): 0.06595286282214888\n", + "R2 (train): 0.9991314892285292\n", + "R2 (test): 0.9964919352072331\n", + "----------------------------------------\n", + "Прогнозируемая цена: 25.070991060937757\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n", + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import 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(\"nuforc_reports.csv\") \n", + "data = data.head(1000)\n", + "\n", + "# 2. Подготовка данных для прогноза\n", + "average_city_latitude = data['city_latitude'].mean()\n", + "data['above_average_city_latitude'] = (data['city_latitude'] > average_city_latitude).astype(int) \n", + "\n", + "# Удаляем строки с пропущенными значениями в столбце 'city_latitude'\n", + "data = data.dropna(subset=['city_latitude'])\n", + "\n", + "# Предикторы и целевая переменная\n", + "X = data.drop('above_average_city_latitude', axis=1) # Удаляем только 'above_average_city_latitude'\n", + "y = data['city_latitude']\n", + "\n", + "# 3. Инициализация модели и пайплайна\n", + "class_models = {\n", + " \"RandomForest\": {\n", + " \"model\": RandomForestRegressor(n_estimators=100, random_state=42),\n", + " }\n", + "}\n", + "\n", + "# Предобработка признаков\n", + "num_columns = ['city_latitude']\n", + "cat_columns = ['state', 'city']\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", + " 'state': ['Electronics'],\n", + " 'city': ['Smartphones'], \n", + " 'city_latitude': [0] # Добавляем столбец 'city_latitude' с нулевым значением\n", + "})\n", + "\n", + "predicted_city_latitude = model_pipeline.predict(new_item_data)\n", + "print(f\"Прогнозируемая цена: {predicted_city_latitude[0]}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Подбор гиперпараметров методом поиска по сетке" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 3 folds for each of 36 candidates, totalling 108 fits\n", + "Лучшие параметры: {'max_depth': None, 'min_samples_split': 2, 'n_estimators': 100}\n", + "Лучший результат (MSE): 1.2759929698621533\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", + "# Создание целевой переменной (city_latitude)\n", + "target = df['city_latitude']\n", + "\n", + "# Удаление целевой переменной из исходных данных\n", + "features = df.drop(columns=['city_latitude'])\n", + "\n", + "# Удаление столбцов, которые не будут использоваться (например, href и items)\n", + "features = features.drop(columns=[\"date_time\", \"posted\", \"city\", \"state\", \"summary\", \"stats\", \"report_link\", \"duration\", \"text\"])\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": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " summary city state \\\n", + "0 Viewed some red lights in the sky appearing to... Visalia CA \n", + "1 Look like 1 or 3 crafts from North traveling s... Cincinnati OH \n", + "3 One red light moving switly west to east, beco... Knoxville TN \n", + "5 I'm familiar with all the fakery and UFO sight... Fullerton CA \n", + "6 I was driving up lakes mead towards the lake a... Las Vegas NV \n", + "\n", + " date_time shape duration \\\n", + "0 2021-12-15T21:45:00 light 2 minutes \n", + "1 2021-12-16T09:45:00 triangle 14 seconds \n", + "3 2021-12-10T19:30:00 triangle 20-30 seconds \n", + "5 2020-07-07T23:00:00 unknown 2 minutes \n", + "6 2020-04-23T03:00:00 oval 10 minutes \n", + "\n", + " stats \\\n", + "0 Occurred : 12/15/2021 21:45 (Entered as : 12/... \n", + "1 Occurred : 12/16/2021 09:45 (Entered as : 12/... \n", + "3 Occurred : 12/10/2021 19:30 (Entered as : 12/... \n", + "5 Occurred : 7/7/2020 23:00 (Entered as : 07/07... \n", + "6 Occurred : 4/23/2020 03:00 (Entered as : 4/23... \n", + "\n", + " report_link \\\n", + "0 http://www.nuforc.org/webreports/165/S165881.html \n", + "1 http://www.nuforc.org/webreports/165/S165888.html \n", + "3 http://www.nuforc.org/webreports/165/S165825.html \n", + "5 http://www.nuforc.org/webreports/157/S157444.html \n", + "6 http://www.nuforc.org/webreports/155/S155608.html \n", + "\n", + " text posted \\\n", + "0 Viewed some red lights in the sky appearing to... 2021-12-19T00:00:00 \n", + "1 Look like 1 or 3 crafts from North traveling s... 2021-12-19T00:00:00 \n", + "3 One red light moving switly west to east, beco... 2021-12-19T00:00:00 \n", + "5 I'm familiar with all the fakery and UFO sight... 2020-07-09T00:00:00 \n", + "6 I was driving up lakes mead towards the lake a... 2020-05-01T00:00:00 \n", + "\n", + " city_latitude city_longitude \n", + "0 36.356650 -119.347937 \n", + "1 39.174503 -84.481363 \n", + "3 35.961561 -83.980115 \n", + "5 33.877422 -117.924978 \n", + "6 36.141246 -115.186592 \n", + "Fitting 3 folds for each of 36 candidates, totalling 108 fits\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\tumvu\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:242: UserWarning: Found unknown categories in columns [0, 1, 2, 3, 4] during transform. These unknown categories will be encoded as all zeros\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Старые параметры: {'max_depth': 10, 'min_samples_split': 2, 'n_estimators': 50}\n", + "Лучший результат (MSE) на старых параметрах: 0.6044726602932151\n", + "\n", + "Новые параметры: {'max_depth': 10, 'min_samples_split': 10, 'n_estimators': 200}\n", + "Лучший результат (MSE) на новых параметрах: 4.113148481479761\n", + "Среднеквадратическая ошибка (MSE) на тестовых данных: 0.14708677585880306\n", + "Корень среднеквадратичной ошибки (RMSE) на тестовых данных: 0.38351893807060305\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(\"nuforc_reports.csv\").head(100).dropna()\n", + "\n", + "# Вывод первых строк для проверки структуры\n", + "print(df.head())\n", + "\n", + "# Целевая переменная\n", + "target = df['city_latitude']\n", + "\n", + "# Удаление целевой переменной из признаков\n", + "features = df.drop(columns=['summary', 'stats', 'report_link', 'posted', \"duration\"])\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.12.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}