{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "0f102ee1",
   "metadata": {},
   "source": [
    "# Регрессия методом эволюционного поиска архитектуры нейросети (ABC)\n",
    "\n",
    "В работе автоматически определяется зависимая переменная, выполняется предобработка данных и решается задача регрессии\n",
    "с помощью нейросети, архитектура которой подбирается методом искусственной пчелиной колонии (**Artificial Bee Colony, ABC**).\n",
    "\n",
    "В конце ноутбука есть отдельная ячейка, печатающая все ключевые метрики для итогового вывода."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8933f1b1",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import gc\n",
    "import math\n",
    "import warnings\n",
    "from copy import deepcopy\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.compose import ColumnTransformer\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import OneHotEncoder, StandardScaler\n",
    "from sklearn.impute import SimpleImputer\n",
    "from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error\n",
    "from sklearn.neural_network import MLPRegressor\n",
    "\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "RANDOM_STATE = 42\n",
    "np.random.seed(RANDOM_STATE)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88b08e6b",
   "metadata": {},
   "source": [
    "## Загрузка данных"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6282cd4d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Используемый файл: housing_price_dataset.csv\n",
      "Размер датасета: (50000, 6)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SquareFeet</th>\n",
       "      <th>Bedrooms</th>\n",
       "      <th>Bathrooms</th>\n",
       "      <th>Neighborhood</th>\n",
       "      <th>YearBuilt</th>\n",
       "      <th>Price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2126</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>Rural</td>\n",
       "      <td>1969</td>\n",
       "      <td>215355.283618</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2459</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>Rural</td>\n",
       "      <td>1980</td>\n",
       "      <td>195014.221626</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1860</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>Suburb</td>\n",
       "      <td>1970</td>\n",
       "      <td>306891.012076</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2294</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>Urban</td>\n",
       "      <td>1996</td>\n",
       "      <td>206786.787153</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2130</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>Suburb</td>\n",
       "      <td>2001</td>\n",
       "      <td>272436.239065</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SquareFeet  Bedrooms  Bathrooms Neighborhood  YearBuilt          Price\n",
       "0        2126         4          1        Rural       1969  215355.283618\n",
       "1        2459         3          2        Rural       1980  195014.221626\n",
       "2        1860         2          1       Suburb       1970  306891.012076\n",
       "3        2294         2          1        Urban       1996  206786.787153\n",
       "4        2130         5          2       Suburb       2001  272436.239065"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Типы данных:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>dtype</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>SquareFeet</th>\n",
       "      <td>int64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Bedrooms</th>\n",
       "      <td>int64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Bathrooms</th>\n",
       "      <td>int64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Neighborhood</th>\n",
       "      <td>object</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>YearBuilt</th>\n",
       "      <td>int64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Price</th>\n",
       "      <td>float64</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                dtype\n",
       "SquareFeet      int64\n",
       "Bedrooms        int64\n",
       "Bathrooms       int64\n",
       "Neighborhood   object\n",
       "YearBuilt       int64\n",
       "Price         float64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "POSSIBLE_FILES = [\n",
    "    \"housing_price_dataset.csv\",\n",
    "    \"Housing_Price_Dataset.csv\",\n",
    "    \"housing_price_prediction_data.csv\",\n",
    "    \"Housing Price Dataset.csv\",\n",
    "    \"/mnt/data/housing_price_dataset.csv\",\n",
    "    \"/mnt/data/Housing Price Dataset.csv\",\n",
    "    \"/mnt/data/Housing_Price_Dataset.csv\",\n",
    "    \"/mnt/data/Housing Price Prediction.csv\",\n",
    "]\n",
    "\n",
    "data_path = None\n",
    "for path in POSSIBLE_FILES:\n",
    "    if os.path.exists(path):\n",
    "        data_path = path\n",
    "        break\n",
    "\n",
    "if data_path is None:\n",
    "    raise FileNotFoundError(\n",
    "        \"CSV-файл не найден. Поместите файл housing_price_dataset.csv рядом с ноутбуком \"\n",
    "        \"или укажите путь в списке POSSIBLE_FILES.\"\n",
    "    )\n",
    "\n",
    "df = pd.read_csv(data_path)\n",
    "print(\"Используемый файл:\", data_path)\n",
    "print(\"Размер датасета:\", df.shape)\n",
    "display(df.head())\n",
    "print(\"\\nТипы данных:\")\n",
    "display(df.dtypes.rename(\"dtype\").to_frame())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "17b61ca7",
   "metadata": {},
   "source": [
    "## Нормализация названий колонок и выбор зависимой переменной"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "9ceec265",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>original_name</th>\n",
       "      <th>normalized_name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>SquareFeet</td>\n",
       "      <td>squarefeet</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Bedrooms</td>\n",
       "      <td>bedrooms</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Bathrooms</td>\n",
       "      <td>bathrooms</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Neighborhood</td>\n",
       "      <td>neighborhood</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>YearBuilt</td>\n",
       "      <td>yearbuilt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Price</td>\n",
       "      <td>price</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  original_name normalized_name\n",
       "0    SquareFeet      squarefeet\n",
       "1      Bedrooms        bedrooms\n",
       "2     Bathrooms       bathrooms\n",
       "3  Neighborhood    neighborhood\n",
       "4     YearBuilt       yearbuilt\n",
       "5         Price           price"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Выбранная зависимая переменная: price\n"
     ]
    }
   ],
   "source": [
    "def normalize_col(name: str) -> str:\n",
    "    s = str(name).strip().lower()\n",
    "    replacements = {\n",
    "        \" \": \"_\", \"-\": \"_\", \"/\": \"_\", \"\\\\\": \"_\", \"(\": \"\", \")\": \"\",\n",
    "        \"[\": \"\", \"]\": \"\", \"{\": \"\", \"}\": \"\", \"%\": \"pct\", \".\": \"_\",\n",
    "        \",\": \"_\", \":\": \"_\", \";\": \"_\", \"?\": \"\", \"!\": \"\", \"'\": \"\",\n",
    "        '\"': \"\", \"&\": \"and\"\n",
    "    }\n",
    "    for old, new in replacements.items():\n",
    "        s = s.replace(old, new)\n",
    "    while \"__\" in s:\n",
    "        s = s.replace(\"__\", \"_\")\n",
    "    return s.strip(\"_\")\n",
    "\n",
    "original_columns = df.columns.tolist()\n",
    "df.columns = [normalize_col(c) for c in df.columns]\n",
    "\n",
    "mapping_df = pd.DataFrame({\n",
    "    \"original_name\": original_columns,\n",
    "    \"normalized_name\": df.columns\n",
    "})\n",
    "display(mapping_df)\n",
    "\n",
    "target_candidates_priority = [\n",
    "    \"price\", \"sale_price\", \"amount\", \"target\", \"label\", \"y\", \"cost\", \"value\"\n",
    "]\n",
    "\n",
    "numeric_cols = df.select_dtypes(include=[np.number]).columns.tolist()\n",
    "if not numeric_cols:\n",
    "    raise ValueError(\"В датасете нет числовых столбцов, подходящих для регрессии.\")\n",
    "\n",
    "target_col = None\n",
    "for cand in target_candidates_priority:\n",
    "    if cand in df.columns and pd.api.types.is_numeric_dtype(df[cand]):\n",
    "        target_col = cand\n",
    "        break\n",
    "\n",
    "if target_col is None:\n",
    "    # резервное правило: самый «похожий» на целевую переменную числовой столбец\n",
    "    # с наибольшей дисперсией и неидентификационным названием\n",
    "    bad_keywords = [\"id\", \"index\", \"zipcode\", \"zip\", \"code\"]\n",
    "    numeric_candidates = [c for c in numeric_cols if not any(k in c for k in bad_keywords)]\n",
    "    if not numeric_candidates:\n",
    "        numeric_candidates = numeric_cols\n",
    "    target_col = df[numeric_candidates].std(numeric_only=True).sort_values(ascending=False).index[0]\n",
    "\n",
    "print(\"Выбранная зависимая переменная:\", target_col)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ddf93b42",
   "metadata": {},
   "source": [
    "## Подготовка признаков"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4a347bee",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Число исходных признаков: 5\n",
      "Числовые признаки: ['squarefeet', 'bedrooms', 'bathrooms', 'yearbuilt']\n",
      "Категориальные признаки: ['neighborhood']\n",
      "\n",
      "Пропуски по столбцам:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>squarefeet</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>neighborhood</th>\n",
       "      <th>yearbuilt</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>missing_count</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               squarefeet  bedrooms  bathrooms  neighborhood  yearbuilt  price\n",
       "missing_count           0         0          0             0          0      0"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X = df.drop(columns=[target_col]).copy()\n",
    "y = df[target_col].copy()\n",
    "\n",
    "# удаляем явные идентификаторы\n",
    "id_like = [c for c in X.columns if any(k in c for k in [\"id\", \"index\", \"name\"])]\n",
    "# customer or neighborhood names могут быть содержательными, но для текущего датасета идентификатором является только order-like\n",
    "id_like = [c for c in id_like if c in X.columns and X[c].nunique(dropna=False) >= 0.95 * len(X)]\n",
    "if id_like:\n",
    "    X = X.drop(columns=id_like)\n",
    "\n",
    "numeric_features = X.select_dtypes(include=[np.number]).columns.tolist()\n",
    "categorical_features = [c for c in X.columns if c not in numeric_features]\n",
    "\n",
    "print(\"Число исходных признаков:\", X.shape[1])\n",
    "print(\"Числовые признаки:\", numeric_features)\n",
    "print(\"Категориальные признаки:\", categorical_features)\n",
    "\n",
    "print(\"\\nПропуски по столбцам:\")\n",
    "display(df.isna().sum().rename(\"missing_count\").to_frame().T)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6e670e49",
   "metadata": {},
   "source": [
    "## Разбиение выборки и предобработка"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "6b7fd3ad",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Число признаков после кодирования: 7\n",
      "Использовано log1p-преобразование цели: False\n",
      "Скошенность целевой переменной (train): -0.0184\n"
     ]
    }
   ],
   "source": [
    "X_trainval, X_test, y_trainval, y_test = train_test_split(\n",
    "    X, y, test_size=0.20, random_state=RANDOM_STATE\n",
    ")\n",
    "X_train, X_val, y_train, y_val = train_test_split(\n",
    "    X_trainval, y_trainval, test_size=0.25, random_state=RANDOM_STATE\n",
    ")  # итог: 60/20/20\n",
    "\n",
    "def build_ohe():\n",
    "    try:\n",
    "        return OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False)\n",
    "    except TypeError:\n",
    "        return OneHotEncoder(handle_unknown=\"ignore\", sparse=False)\n",
    "\n",
    "numeric_transformer = Pipeline([\n",
    "    (\"imputer\", SimpleImputer(strategy=\"median\")),\n",
    "    (\"scaler\", StandardScaler())\n",
    "])\n",
    "\n",
    "categorical_transformer = Pipeline([\n",
    "    (\"imputer\", SimpleImputer(strategy=\"most_frequent\")),\n",
    "    (\"onehot\", build_ohe())\n",
    "])\n",
    "\n",
    "preprocessor = ColumnTransformer([\n",
    "    (\"num\", numeric_transformer, numeric_features),\n",
    "    (\"cat\", categorical_transformer, categorical_features)\n",
    "], remainder=\"drop\")\n",
    "\n",
    "X_train_p = preprocessor.fit_transform(X_train)\n",
    "X_val_p = preprocessor.transform(X_val)\n",
    "X_test_p = preprocessor.transform(X_test)\n",
    "X_trainval_p = preprocessor.transform(X_trainval)\n",
    "\n",
    "feature_names = preprocessor.get_feature_names_out()\n",
    "print(\"Число признаков после кодирования:\", len(feature_names))\n",
    "\n",
    "# Автоматическое решение о log1p-преобразовании цели\n",
    "y_positive = (y_train > 0).all()\n",
    "y_skew = pd.Series(y_train).skew()\n",
    "USE_LOG1P = bool(y_positive and y_skew > 0.75)\n",
    "\n",
    "if USE_LOG1P:\n",
    "    y_train_fit = np.log1p(y_train.to_numpy())\n",
    "    y_val_fit = np.log1p(y_val.to_numpy())\n",
    "    y_test_fit = np.log1p(y_test.to_numpy())\n",
    "    y_trainval_fit = np.log1p(y_trainval.to_numpy())\n",
    "else:\n",
    "    y_train_fit = y_train.to_numpy()\n",
    "    y_val_fit = y_val.to_numpy()\n",
    "    y_test_fit = y_test.to_numpy()\n",
    "    y_trainval_fit = y_trainval.to_numpy()\n",
    "\n",
    "print(\"Использовано log1p-преобразование цели:\", USE_LOG1P)\n",
    "print(\"Скошенность целевой переменной (train):\", round(float(y_skew), 4))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3eb88393",
   "metadata": {},
   "source": [
    "## Эволюционный поиск архитектуры нейросети методом ABC\n",
    "\n",
    "Используется дискретно-непрерывное пространство параметров:\n",
    "- архитектура скрытых слоёв;\n",
    "- функция активации;\n",
    "- коэффициент регуляризации `alpha`;\n",
    "- начальная скорость обучения `learning_rate_init`;\n",
    "- размер пакета.\n",
    "\n",
    "Поиск ведётся по валидационной ошибке RMSE."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "cb087103",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Для ускорения эволюционного поиска используем подмножество train\n",
    "SEARCH_MAX_SAMPLES = min(4000, X_train_p.shape[0])\n",
    "search_idx = np.random.RandomState(RANDOM_STATE).choice(\n",
    "    np.arange(X_train_p.shape[0]), size=SEARCH_MAX_SAMPLES, replace=False\n",
    ")\n",
    "\n",
    "X_search = X_train_p[search_idx]\n",
    "y_search = y_train_fit[search_idx]\n",
    "\n",
    "ARCHITECTURES = [\n",
    "    (32,), (64,), (128,),\n",
    "    (32, 16), (64, 32), (128, 64),\n",
    "    (64, 32, 16), (128, 64, 32), (96, 64, 32),\n",
    "    (128, 96, 64, 32), (160, 96, 64, 32),\n",
    "]\n",
    "ACTIVATIONS = [\"relu\", \"tanh\"]\n",
    "BATCH_SIZES = [32, 64, 128, 256]\n",
    "\n",
    "def sample_solution(rng):\n",
    "    return {\n",
    "        \"hidden_layers\": ARCHITECTURES[rng.randint(len(ARCHITECTURES))],\n",
    "        \"activation\": ACTIVATIONS[rng.randint(len(ACTIVATIONS))],\n",
    "        \"alpha\": float(10 ** rng.uniform(-6, -2)),\n",
    "        \"learning_rate_init\": float(10 ** rng.uniform(-4.5, -2.2)),\n",
    "        \"batch_size\": int(BATCH_SIZES[rng.randint(len(BATCH_SIZES))]),\n",
    "    }\n",
    "\n",
    "def mutate_solution(solution, partner, rng):\n",
    "    cand = deepcopy(solution)\n",
    "    keys = [\"hidden_layers\", \"activation\", \"alpha\", \"learning_rate_init\", \"batch_size\"]\n",
    "    n_changes = rng.randint(1, 4)\n",
    "    chosen = rng.choice(keys, size=n_changes, replace=False)\n",
    "    for key in chosen:\n",
    "        if key == \"hidden_layers\":\n",
    "            cand[key] = partner[key] if rng.rand() < 0.5 else ARCHITECTURES[rng.randint(len(ARCHITECTURES))]\n",
    "        elif key == \"activation\":\n",
    "            cand[key] = partner[key] if rng.rand() < 0.5 else ACTIVATIONS[rng.randint(len(ACTIVATIONS))]\n",
    "        elif key == \"batch_size\":\n",
    "            cand[key] = partner[key] if rng.rand() < 0.5 else int(BATCH_SIZES[rng.randint(len(BATCH_SIZES))])\n",
    "        elif key == \"alpha\":\n",
    "            base = math.log10(solution[key])\n",
    "            other = math.log10(partner[key])\n",
    "            new_log = np.clip(base + rng.uniform(-1, 1) * (base - other), -6, -2)\n",
    "            cand[key] = float(10 ** new_log)\n",
    "        elif key == \"learning_rate_init\":\n",
    "            base = math.log10(solution[key])\n",
    "            other = math.log10(partner[key])\n",
    "            new_log = np.clip(base + rng.uniform(-1, 1) * (base - other), -4.5, -2.2)\n",
    "            cand[key] = float(10 ** new_log)\n",
    "    return cand\n",
    "\n",
    "def inverse_target(y_arr):\n",
    "    y_arr = np.asarray(y_arr)\n",
    "    if USE_LOG1P:\n",
    "        return np.expm1(y_arr)\n",
    "    return y_arr\n",
    "\n",
    "def evaluate_solution(solution, random_state=RANDOM_STATE):\n",
    "    model = MLPRegressor(\n",
    "        hidden_layer_sizes=solution[\"hidden_layers\"],\n",
    "        activation=solution[\"activation\"],\n",
    "        solver=\"adam\",\n",
    "        alpha=solution[\"alpha\"],\n",
    "        learning_rate_init=solution[\"learning_rate_init\"],\n",
    "        batch_size=solution[\"batch_size\"],\n",
    "        max_iter=250,\n",
    "        early_stopping=True,\n",
    "        validation_fraction=0.15,\n",
    "        n_iter_no_change=20,\n",
    "        random_state=random_state,\n",
    "    )\n",
    "    model.fit(X_search, y_search)\n",
    "    pred_val = inverse_target(model.predict(X_val_p))\n",
    "    true_val = inverse_target(y_val_fit)\n",
    "    rmse_val = float(np.sqrt(mean_squared_error(true_val, pred_val)))\n",
    "    mae_val = float(mean_absolute_error(true_val, pred_val))\n",
    "    r2_val = float(r2_score(true_val, pred_val))\n",
    "    return {\n",
    "        \"model\": model,\n",
    "        \"rmse_val\": rmse_val,\n",
    "        \"mae_val\": mae_val,\n",
    "        \"r2_val\": r2_val,\n",
    "        \"fitness\": -rmse_val,  # максимизируем fitness\n",
    "    }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "0b451f91",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Итерация 01: best RMSE=50011.391, R2=0.5670, arch=(128, 64, 32)\n",
      "Итерация 02: best RMSE=49888.758, R2=0.5691, arch=(32, 16)\n",
      "Итерация 03: best RMSE=49858.301, R2=0.5697, arch=(32, 16)\n",
      "Итерация 04: best RMSE=49806.145, R2=0.5706, arch=(32, 16)\n",
      "Итерация 05: best RMSE=49806.145, R2=0.5706, arch=(32, 16)\n",
      "Итерация 06: best RMSE=49837.226, R2=0.5700, arch=(64, 32)\n",
      "Итерация 07: best RMSE=50302.910, R2=0.5620, arch=(128, 96, 64, 32)\n",
      "Итерация 08: best RMSE=49874.578, R2=0.5694, arch=(128,)\n",
      "Итерация 09: best RMSE=49874.578, R2=0.5694, arch=(128,)\n",
      "Итерация 10: best RMSE=49850.883, R2=0.5698, arch=(32,)\n",
      "\n",
      "Лучшая конфигурация ABC:\n",
      "{'hidden_layers': (32,), 'activation': 'relu', 'alpha': 0.0007304392476849531, 'learning_rate_init': 0.00630957344480193, 'batch_size': 32}\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cycle</th>\n",
       "      <th>best_hidden_layers</th>\n",
       "      <th>best_activation</th>\n",
       "      <th>best_alpha</th>\n",
       "      <th>best_learning_rate_init</th>\n",
       "      <th>best_batch_size</th>\n",
       "      <th>best_val_rmse</th>\n",
       "      <th>best_val_mae</th>\n",
       "      <th>best_val_r2</th>\n",
       "      <th>mean_val_rmse</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>(64, 32)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.010000</td>\n",
       "      <td>0.001444</td>\n",
       "      <td>64</td>\n",
       "      <td>49837.225616</td>\n",
       "      <td>39982.430343</td>\n",
       "      <td>0.570026</td>\n",
       "      <td>185976.366911</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>(128, 96, 64, 32)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000004</td>\n",
       "      <td>0.000054</td>\n",
       "      <td>32</td>\n",
       "      <td>50302.909744</td>\n",
       "      <td>40367.842460</td>\n",
       "      <td>0.561953</td>\n",
       "      <td>187789.245686</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>(128,)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000001</td>\n",
       "      <td>0.006310</td>\n",
       "      <td>64</td>\n",
       "      <td>49874.578480</td>\n",
       "      <td>40004.789505</td>\n",
       "      <td>0.569382</td>\n",
       "      <td>95779.236590</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>(128,)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000001</td>\n",
       "      <td>0.006310</td>\n",
       "      <td>64</td>\n",
       "      <td>49874.578480</td>\n",
       "      <td>40004.789505</td>\n",
       "      <td>0.569382</td>\n",
       "      <td>96402.574560</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>(32,)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000730</td>\n",
       "      <td>0.006310</td>\n",
       "      <td>32</td>\n",
       "      <td>49850.883212</td>\n",
       "      <td>39996.466454</td>\n",
       "      <td>0.569791</td>\n",
       "      <td>96387.260560</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   cycle best_hidden_layers best_activation  best_alpha  \\\n",
       "5      6           (64, 32)            relu    0.010000   \n",
       "6      7  (128, 96, 64, 32)            relu    0.000004   \n",
       "7      8             (128,)            relu    0.000001   \n",
       "8      9             (128,)            relu    0.000001   \n",
       "9     10              (32,)            relu    0.000730   \n",
       "\n",
       "   best_learning_rate_init  best_batch_size  best_val_rmse  best_val_mae  \\\n",
       "5                 0.001444               64   49837.225616  39982.430343   \n",
       "6                 0.000054               32   50302.909744  40367.842460   \n",
       "7                 0.006310               64   49874.578480  40004.789505   \n",
       "8                 0.006310               64   49874.578480  40004.789505   \n",
       "9                 0.006310               32   49850.883212  39996.466454   \n",
       "\n",
       "   best_val_r2  mean_val_rmse  \n",
       "5     0.570026  185976.366911  \n",
       "6     0.561953  187789.245686  \n",
       "7     0.569382   95779.236590  \n",
       "8     0.569382   96402.574560  \n",
       "9     0.569791   96387.260560  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>hidden_layers</th>\n",
       "      <th>activation</th>\n",
       "      <th>alpha</th>\n",
       "      <th>learning_rate_init</th>\n",
       "      <th>batch_size</th>\n",
       "      <th>rmse_val</th>\n",
       "      <th>mae_val</th>\n",
       "      <th>r2_val</th>\n",
       "      <th>cycle</th>\n",
       "      <th>phase</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.001545</td>\n",
       "      <td>32</td>\n",
       "      <td>49806.144877</td>\n",
       "      <td>39969.002919</td>\n",
       "      <td>0.570562</td>\n",
       "      <td>4</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000611</td>\n",
       "      <td>0.001545</td>\n",
       "      <td>32</td>\n",
       "      <td>49823.965440</td>\n",
       "      <td>39974.526240</td>\n",
       "      <td>0.570255</td>\n",
       "      <td>5</td>\n",
       "      <td>employed</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>(64, 32)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.010000</td>\n",
       "      <td>0.001444</td>\n",
       "      <td>64</td>\n",
       "      <td>49837.225616</td>\n",
       "      <td>39982.430343</td>\n",
       "      <td>0.570026</td>\n",
       "      <td>6</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>(32,)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000730</td>\n",
       "      <td>0.006310</td>\n",
       "      <td>32</td>\n",
       "      <td>49850.883212</td>\n",
       "      <td>39996.466454</td>\n",
       "      <td>0.569791</td>\n",
       "      <td>10</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.001545</td>\n",
       "      <td>64</td>\n",
       "      <td>49854.029206</td>\n",
       "      <td>39987.768384</td>\n",
       "      <td>0.569736</td>\n",
       "      <td>4</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.001050</td>\n",
       "      <td>0.001744</td>\n",
       "      <td>64</td>\n",
       "      <td>49858.301204</td>\n",
       "      <td>40003.886950</td>\n",
       "      <td>0.569663</td>\n",
       "      <td>3</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.001955</td>\n",
       "      <td>0.001628</td>\n",
       "      <td>32</td>\n",
       "      <td>49860.574674</td>\n",
       "      <td>39991.252878</td>\n",
       "      <td>0.569623</td>\n",
       "      <td>5</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000165</td>\n",
       "      <td>0.001628</td>\n",
       "      <td>32</td>\n",
       "      <td>49865.090708</td>\n",
       "      <td>39999.375976</td>\n",
       "      <td>0.569545</td>\n",
       "      <td>7</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.002964</td>\n",
       "      <td>0.006310</td>\n",
       "      <td>32</td>\n",
       "      <td>49868.545164</td>\n",
       "      <td>39998.712446</td>\n",
       "      <td>0.569486</td>\n",
       "      <td>7</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.003797</td>\n",
       "      <td>32</td>\n",
       "      <td>49869.133951</td>\n",
       "      <td>39998.330708</td>\n",
       "      <td>0.569476</td>\n",
       "      <td>6</td>\n",
       "      <td>employed</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  hidden_layers activation     alpha  learning_rate_init  batch_size  \\\n",
       "0      (32, 16)       relu  0.000085            0.001545          32   \n",
       "1      (32, 16)       relu  0.000611            0.001545          32   \n",
       "2      (64, 32)       relu  0.010000            0.001444          64   \n",
       "3         (32,)       relu  0.000730            0.006310          32   \n",
       "4      (32, 16)       relu  0.000085            0.001545          64   \n",
       "5      (32, 16)       relu  0.001050            0.001744          64   \n",
       "6      (32, 16)       relu  0.001955            0.001628          32   \n",
       "7      (32, 16)       relu  0.000165            0.001628          32   \n",
       "8      (32, 16)       relu  0.002964            0.006310          32   \n",
       "9      (32, 16)       relu  0.000085            0.003797          32   \n",
       "\n",
       "       rmse_val       mae_val    r2_val  cycle     phase  \n",
       "0  49806.144877  39969.002919  0.570562      4  onlooker  \n",
       "1  49823.965440  39974.526240  0.570255      5  employed  \n",
       "2  49837.225616  39982.430343  0.570026      6  onlooker  \n",
       "3  49850.883212  39996.466454  0.569791     10  onlooker  \n",
       "4  49854.029206  39987.768384  0.569736      4  onlooker  \n",
       "5  49858.301204  40003.886950  0.569663      3  onlooker  \n",
       "6  49860.574674  39991.252878  0.569623      5  onlooker  \n",
       "7  49865.090708  39999.375976  0.569545      7  onlooker  \n",
       "8  49868.545164  39998.712446  0.569486      7  onlooker  \n",
       "9  49869.133951  39998.330708  0.569476      6  employed  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rng = np.random.RandomState(RANDOM_STATE)\n",
    "\n",
    "N_FOOD_SOURCES = 8\n",
    "N_CYCLES = 10\n",
    "LIMIT = 4\n",
    "\n",
    "food_sources = [sample_solution(rng) for _ in range(N_FOOD_SOURCES)]\n",
    "food_metrics = [evaluate_solution(sol, random_state=RANDOM_STATE + i) for i, sol in enumerate(food_sources)]\n",
    "trial_counters = [0] * N_FOOD_SOURCES\n",
    "\n",
    "history_rows = []\n",
    "all_candidates_rows = []\n",
    "\n",
    "def as_row(solution, metrics, cycle=None, phase=None):\n",
    "    row = {\n",
    "        \"hidden_layers\": str(solution[\"hidden_layers\"]),\n",
    "        \"activation\": solution[\"activation\"],\n",
    "        \"alpha\": solution[\"alpha\"],\n",
    "        \"learning_rate_init\": solution[\"learning_rate_init\"],\n",
    "        \"batch_size\": solution[\"batch_size\"],\n",
    "        \"rmse_val\": metrics[\"rmse_val\"],\n",
    "        \"mae_val\": metrics[\"mae_val\"],\n",
    "        \"r2_val\": metrics[\"r2_val\"],\n",
    "    }\n",
    "    if cycle is not None:\n",
    "        row[\"cycle\"] = cycle\n",
    "    if phase is not None:\n",
    "        row[\"phase\"] = phase\n",
    "    return row\n",
    "\n",
    "for i in range(N_FOOD_SOURCES):\n",
    "    all_candidates_rows.append(as_row(food_sources[i], food_metrics[i], cycle=0, phase=\"init\"))\n",
    "\n",
    "for cycle in range(1, N_CYCLES + 1):\n",
    "    # Employed bees\n",
    "    for i in range(N_FOOD_SOURCES):\n",
    "        partner_idx = rng.choice([j for j in range(N_FOOD_SOURCES) if j != i])\n",
    "        candidate = mutate_solution(food_sources[i], food_sources[partner_idx], rng)\n",
    "        cand_metrics = evaluate_solution(candidate, random_state=RANDOM_STATE + cycle * 100 + i)\n",
    "        all_candidates_rows.append(as_row(candidate, cand_metrics, cycle=cycle, phase=\"employed\"))\n",
    "        if cand_metrics[\"fitness\"] > food_metrics[i][\"fitness\"]:\n",
    "            food_sources[i] = candidate\n",
    "            food_metrics[i] = cand_metrics\n",
    "            trial_counters[i] = 0\n",
    "        else:\n",
    "            trial_counters[i] += 1\n",
    "\n",
    "    # Onlooker bees\n",
    "    fitness_values = np.array([m[\"fitness\"] for m in food_metrics], dtype=float)\n",
    "    fitness_shifted = fitness_values - fitness_values.min() + 1e-6\n",
    "    probs = fitness_shifted / fitness_shifted.sum()\n",
    "\n",
    "    for onlooker in range(N_FOOD_SOURCES):\n",
    "        i = rng.choice(np.arange(N_FOOD_SOURCES), p=probs)\n",
    "        partner_idx = rng.choice([j for j in range(N_FOOD_SOURCES) if j != i])\n",
    "        candidate = mutate_solution(food_sources[i], food_sources[partner_idx], rng)\n",
    "        cand_metrics = evaluate_solution(candidate, random_state=RANDOM_STATE + cycle * 1000 + onlooker)\n",
    "        all_candidates_rows.append(as_row(candidate, cand_metrics, cycle=cycle, phase=\"onlooker\"))\n",
    "        if cand_metrics[\"fitness\"] > food_metrics[i][\"fitness\"]:\n",
    "            food_sources[i] = candidate\n",
    "            food_metrics[i] = cand_metrics\n",
    "            trial_counters[i] = 0\n",
    "        else:\n",
    "            trial_counters[i] += 1\n",
    "\n",
    "    # Scout bees\n",
    "    for i in range(N_FOOD_SOURCES):\n",
    "        if trial_counters[i] >= LIMIT:\n",
    "            food_sources[i] = sample_solution(rng)\n",
    "            food_metrics[i] = evaluate_solution(food_sources[i], random_state=RANDOM_STATE + cycle * 10000 + i)\n",
    "            trial_counters[i] = 0\n",
    "            all_candidates_rows.append(as_row(food_sources[i], food_metrics[i], cycle=cycle, phase=\"scout\"))\n",
    "\n",
    "    best_idx = int(np.argmin([m[\"rmse_val\"] for m in food_metrics]))\n",
    "    mean_rmse = float(np.mean([m[\"rmse_val\"] for m in food_metrics]))\n",
    "    history_rows.append({\n",
    "        \"cycle\": cycle,\n",
    "        \"best_hidden_layers\": str(food_sources[best_idx][\"hidden_layers\"]),\n",
    "        \"best_activation\": food_sources[best_idx][\"activation\"],\n",
    "        \"best_alpha\": food_sources[best_idx][\"alpha\"],\n",
    "        \"best_learning_rate_init\": food_sources[best_idx][\"learning_rate_init\"],\n",
    "        \"best_batch_size\": food_sources[best_idx][\"batch_size\"],\n",
    "        \"best_val_rmse\": food_metrics[best_idx][\"rmse_val\"],\n",
    "        \"best_val_mae\": food_metrics[best_idx][\"mae_val\"],\n",
    "        \"best_val_r2\": food_metrics[best_idx][\"r2_val\"],\n",
    "        \"mean_val_rmse\": mean_rmse,\n",
    "    })\n",
    "    print(\n",
    "        f\"Итерация {cycle:02d}: best RMSE={food_metrics[best_idx]['rmse_val']:.3f}, \"\n",
    "        f\"R2={food_metrics[best_idx]['r2_val']:.4f}, arch={food_sources[best_idx]['hidden_layers']}\"\n",
    "    )\n",
    "\n",
    "search_history_df = pd.DataFrame(history_rows)\n",
    "all_candidates_df = pd.DataFrame(all_candidates_rows).sort_values(\"rmse_val\", ascending=True).reset_index(drop=True)\n",
    "\n",
    "best_idx = int(np.argmin([m[\"rmse_val\"] for m in food_metrics]))\n",
    "best_solution = deepcopy(food_sources[best_idx])\n",
    "\n",
    "print(\"\\nЛучшая конфигурация ABC:\")\n",
    "print(best_solution)\n",
    "display(search_history_df.tail())\n",
    "display(all_candidates_df.head(10))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7e1a7b42",
   "metadata": {},
   "source": [
    "## Финальное обучение лучшей нейросети на объединённой train+validation выборке"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "ea1a8a62",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>model</th>\n",
       "      <th>r2_test</th>\n",
       "      <th>rmse_test</th>\n",
       "      <th>mae_test</th>\n",
       "      <th>r2_trainval</th>\n",
       "      <th>rmse_trainval</th>\n",
       "      <th>mae_trainval</th>\n",
       "      <th>n_original_features</th>\n",
       "      <th>n_processed_features</th>\n",
       "      <th>hidden_layers</th>\n",
       "      <th>activation</th>\n",
       "      <th>alpha</th>\n",
       "      <th>learning_rate_init</th>\n",
       "      <th>batch_size</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Нейросеть с архитектурой, найденной ABC</td>\n",
       "      <td>0.575564</td>\n",
       "      <td>49358.310222</td>\n",
       "      <td>39432.017822</td>\n",
       "      <td>0.568887</td>\n",
       "      <td>50055.534047</td>\n",
       "      <td>40014.86674</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>(32,)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.00073</td>\n",
       "      <td>0.00631</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                     model   r2_test     rmse_test  \\\n",
       "0  Нейросеть с архитектурой, найденной ABC  0.575564  49358.310222   \n",
       "\n",
       "       mae_test  r2_trainval  rmse_trainval  mae_trainval  \\\n",
       "0  39432.017822     0.568887   50055.534047   40014.86674   \n",
       "\n",
       "   n_original_features  n_processed_features hidden_layers activation  \\\n",
       "0                    5                     7         (32,)       relu   \n",
       "\n",
       "     alpha  learning_rate_init  batch_size  \n",
       "0  0.00073             0.00631          32  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>epoch</th>\n",
       "      <th>train_loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>28</td>\n",
       "      <td>1.252460e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>29</td>\n",
       "      <td>1.252416e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>30</td>\n",
       "      <td>1.252281e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>31</td>\n",
       "      <td>1.252406e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>32</td>\n",
       "      <td>1.252455e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>33</td>\n",
       "      <td>1.252425e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>34</td>\n",
       "      <td>1.252446e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>35</td>\n",
       "      <td>1.252468e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>36</td>\n",
       "      <td>1.252430e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>37</td>\n",
       "      <td>1.252407e+09</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    epoch    train_loss\n",
       "27     28  1.252460e+09\n",
       "28     29  1.252416e+09\n",
       "29     30  1.252281e+09\n",
       "30     31  1.252406e+09\n",
       "31     32  1.252455e+09\n",
       "32     33  1.252425e+09\n",
       "33     34  1.252446e+09\n",
       "34     35  1.252468e+09\n",
       "35     36  1.252430e+09\n",
       "36     37  1.252407e+09"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y_true</th>\n",
       "      <th>y_pred</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>170835.035713</td>\n",
       "      <td>218620.080345</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>126913.469998</td>\n",
       "      <td>134866.992980</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>246611.883092</td>\n",
       "      <td>255264.069330</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>244250.462969</td>\n",
       "      <td>258072.016213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>271127.650112</td>\n",
       "      <td>277548.429307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>189289.951199</td>\n",
       "      <td>202795.196660</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>343510.576500</td>\n",
       "      <td>286258.253792</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>203461.591080</td>\n",
       "      <td>198129.739903</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>285903.247682</td>\n",
       "      <td>308237.372115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>224868.958375</td>\n",
       "      <td>224211.786152</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          y_true         y_pred\n",
       "0  170835.035713  218620.080345\n",
       "1  126913.469998  134866.992980\n",
       "2  246611.883092  255264.069330\n",
       "3  244250.462969  258072.016213\n",
       "4  271127.650112  277548.429307\n",
       "5  189289.951199  202795.196660\n",
       "6  343510.576500  286258.253792\n",
       "7  203461.591080  198129.739903\n",
       "8  285903.247682  308237.372115\n",
       "9  224868.958375  224211.786152"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "final_model = MLPRegressor(\n",
    "    hidden_layer_sizes=best_solution[\"hidden_layers\"],\n",
    "    activation=best_solution[\"activation\"],\n",
    "    solver=\"adam\",\n",
    "    alpha=best_solution[\"alpha\"],\n",
    "    learning_rate_init=best_solution[\"learning_rate_init\"],\n",
    "    batch_size=best_solution[\"batch_size\"],\n",
    "    max_iter=600,\n",
    "    early_stopping=True,\n",
    "    validation_fraction=0.12,\n",
    "    n_iter_no_change=25,\n",
    "    random_state=RANDOM_STATE,\n",
    ")\n",
    "\n",
    "final_model.fit(X_trainval_p, y_trainval_fit)\n",
    "\n",
    "pred_test = inverse_target(final_model.predict(X_test_p))\n",
    "pred_trainval = inverse_target(final_model.predict(X_trainval_p))\n",
    "true_test = y_test.to_numpy()\n",
    "true_trainval = y_trainval.to_numpy()\n",
    "\n",
    "r2_test = float(r2_score(true_test, pred_test))\n",
    "rmse_test = float(np.sqrt(mean_squared_error(true_test, pred_test)))\n",
    "mae_test = float(mean_absolute_error(true_test, pred_test))\n",
    "\n",
    "r2_trainval = float(r2_score(true_trainval, pred_trainval))\n",
    "rmse_trainval = float(np.sqrt(mean_squared_error(true_trainval, pred_trainval)))\n",
    "mae_trainval = float(mean_absolute_error(true_trainval, pred_trainval))\n",
    "\n",
    "results_df = pd.DataFrame([{\n",
    "    \"model\": \"Нейросеть с архитектурой, найденной ABC\",\n",
    "    \"r2_test\": r2_test,\n",
    "    \"rmse_test\": rmse_test,\n",
    "    \"mae_test\": mae_test,\n",
    "    \"r2_trainval\": r2_trainval,\n",
    "    \"rmse_trainval\": rmse_trainval,\n",
    "    \"mae_trainval\": mae_trainval,\n",
    "    \"n_original_features\": X.shape[1],\n",
    "    \"n_processed_features\": len(feature_names),\n",
    "    \"hidden_layers\": str(best_solution[\"hidden_layers\"]),\n",
    "    \"activation\": best_solution[\"activation\"],\n",
    "    \"alpha\": best_solution[\"alpha\"],\n",
    "    \"learning_rate_init\": best_solution[\"learning_rate_init\"],\n",
    "    \"batch_size\": best_solution[\"batch_size\"],\n",
    "}])\n",
    "\n",
    "display(results_df)\n",
    "\n",
    "loss_curve_df = pd.DataFrame({\n",
    "    \"epoch\": np.arange(1, len(final_model.loss_curve_) + 1),\n",
    "    \"train_loss\": final_model.loss_curve_\n",
    "})\n",
    "display(loss_curve_df.tail(10))\n",
    "\n",
    "pred_sample_df = pd.DataFrame({\n",
    "    \"y_true\": true_test[:10],\n",
    "    \"y_pred\": pred_test[:10]\n",
    "})\n",
    "display(pred_sample_df)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1b64964",
   "metadata": {},
   "source": [
    "## Диагностика качества"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "002bd172",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABv0AAAHqCAYAAAAnJIIoAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4FFXbx/HvZlNJg5BG6L13kaYUBSJVBWyANAULoMCLKI9SLaCIwAMiNoqCD4gIiigdFAFFQXpHOqRQ0nt23j/WrFlSCBDYBH6f65oruzNnZ+6Z3eycnXvOOSbDMAxEREREREREREREREREpNBycnQAIiIiIiIiIiIiIiIiInJzlPQTERERERERERERERERKeSU9BMREREREREREREREREp5JT0ExERERERERERERERESnklPQTERERERERERERERERKeSU9BMREREREREREREREREp5JT0ExERERERERERERERESnklPQTERERERERERERERERKeScHR2AiIiIiIjInSYlJYXLly9jsVgICQlxdDgiIiIiIiJyF1BLPxERERERkXzw559/0qNHD/z9/XFzc6NEiRJ069bN0WHJXerXX39l06ZNtuebNm1iy5YtjgtIRERERERuOSX9REREREQEgHnz5mEymfjzzz+zLPv0008xmUw88sgjpKenOyC6gu27777jvvvu48CBA7z99tusXbuWtWvX8vHHHzs6tELjm2++wWQy2SWq5MadOXOGF198kb1797J3715efPFFzpw54+iwREQKjb59++Ll5eXoMERERK6Lkn4id5lZs2ZhMplo3LhxjmVMJpPd5OnpSY0aNXjrrbdISEjIUj49PZ25c+fSqlUr/Pz8cHNzo1y5cvTr1y/bi4ZS8GRc5M2YnJ2dKVmyJH379uXcuXNZyrdq1QqTyUTlypWzXd/atWtt6/rmm2/slu3du5fu3btTtmxZ3N3dKVmyJG3btmXGjBl25cqVK5fls5gxPfTQQ/m38yIick3Lli3jhRde4P7772fRokWYzWZHh1SgXL58mWeffZbQ0FC2b9/Oc889R5s2bWjTpg116tRxdHhyl+ratSve3t7UqVOHOnXqULRoUbp27erosERECrRLly7x3//+l8cee4yffvqJxMREHnroIUaNGsVff/3l6PBERESuSWP6idxlFi5cSLly5di+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KScffvghVapUITo6mjlz5vDLL79c827pJ598khEjRvDTTz+xcOFCOnXqlGsiuFGjRrYk4e7du1m2bBlTp06le/fu7Nq1yzaWAVgv9GX+HIqIZIiPj6du3br0798/Ty2qr5aeno6HhwcvvfQSS5cuzbbMiRMn6NixI88//zwLFy5k/fr1PPvss5QoUYLQ0NCb3YUCbfLkybYbUT755BOaNGnCqFGjmDVr1k2v+/PPP+fkyZOsXr0613Jr164FrO/10qVLefzxx/nhhx9o27Yt6enptG3blsuXL/Pqq69SrVo1PD09OXfuHH379rVLOj355JPs3LmTGTNm8Mknn9x0/NnJfOPNtYSGhhIUFMSCBQto0aIFCxYsIDg42O58FxQUxIwZMxg0aJAtgZch48IIWOsqtWvX5oMPPsh2W5mTpGC9qevqG4feeOMNwsLCsn39mjVrWLduHdu2bct2edmyZZk7dy4vv/wyDRo0sFuWW0IXyLXVW3YSExOzzDt48CDz5s1jwYIFuLi45PjaMWPG2MYpztC5c2e75++88w6jR4+mf//+vPnmm/j5+eHk5MTQoUOzTWKGhYVRtmzZa8bt7u7OihUrAGudec6cOQwdOpQSJUrYJc8aN27MW2+9ZffamTNn8t1332VZ57USpZldvHiRyZMnM2rUKPz8/PL8ugx169albt26fPHFFxw8eDBPddu8OHnyJC4uLoSEhORYJuO4jxgxIsfv3KsToGFhYXn+fk5JSWH06NE888wzWf7PROTu06lTJz788EM+//xznnnmmWzLhIeHM3/+fAICAmyJjM2bN9OlSxdatGjBrFmzKFGiBC4uLsydO9fWI05m27dvZ8CAAXh6evLWW2/x2GOPZXtx/3pcq241cOBAVq9ezbBhw7L0SpDhRr5z8+L3339n3rx5zJw5k4EDB7Jr164crzHkth8Z8fXq1Ys+ffpk+/pr1T0y5LX+cKvdyDE/efLkdV8jy82xY8ds4wQ//fTTzJ8/3+74Xk+dG6zXe9auXcuVK1dYsGAB/fv3p3Tp0txzzz3Xva7MdagMmzdvZsKECVn2o1y5clnGn16yZEm2df/Mda7z58/z7rvv8uijj7J///4sZTNimjx5co5jN+blZqMlS5YQExPDjh07mDRpEiVLlsxS78u4HpchJiaGbt262ZUZMmQIc+fOZejQoTRt2hRfX19MJhNPPvmk3fHr0qUL/fv3Z/Lkydm23sy8b9fzP5WXOnVm7777Lk5OTrzyyitcunQpy/Lb8TvtbqWkn8hdYMOGDVy4cIFFixaxaNGiLMsXLlyYJemXnQcffBD4t3VFtWrVANi7d2+OJ7+bkZKSwoULF+y6fboWR178AWsysX79+hw+fJglS5Zk23rtaq+++iqhoaE88MADObYg2b17N+3bt+fBBx/klVdeoVevXrRq1cq2PCoqipYtW+Lj48OECROoWLEi7u7u7Ny5k1dffTVPd9yDtbuJe+65B7B2RXHffffRo0cPDh8+nGNFpkSJErRq1YopU6awZcuWHC+eX83V1ZVGjRrRqFEjqlSpQr9+/ViyZEmOd2OJiGTWvn37XLtETk5O5vXXX+d///sfUVFR1KpVi3fffdf23enp6clHH30EwJYtW4iKisqyjtmzZ1O+fHmmTJkCWFus/Prrr0ydOvWOT/pl7nKmUaNGDBo0iA8//JDevXvb3a0L1h/L8fHxdq39jhw5Alh/gGeWkJDA+PHjefHFF6+ZMMmcBHv44Yf5/fffef/992nbti179+7lyJEjzJ8/n969e9vKZSQKM3NycuL9999n7969nDhxglmzZhEeHk6vXr2ueRzKli3L4cOHs8zPaEGfsQ/ly5dnzZo1xMbG2t34cuTIESwWi91xMJvN9OjRg3nz5vHuu++yfPlyBgwYgNlsttvGs88+S9euXdm3b5+ta56MbhwzVKxYkd27d/Pggw/mKRF09U1dgO2u/6sZhsFrr73Go48+muU9z6xnz56cPn2a8ePH8+WXX1KsWLE8HdsSJUqwbds2DMPINfaLFy+SkpKSbXJo1KhR1KtX75q9KtSuXTvLfl99vL/55htat26dpXVdVFQU/v7+dvNSU1M5duwYDz30UK7bzdhO5m137NgRPz8/Vq1aZZf0y+5Gp6tbMJctWxaLxcLRo0dtLejAehE6Kioq2/+pt956C29vb1urkhvRv39/pk6dSlhYWJaLb5lj27NnDxaLxa6139X/Kxn+/PNPGjRokKVlYGYVKlQArDfW5eUmsLNnzxIbG2t3bHIza9YsIiIiGDduXJ7Ki8id7Y033mD58uW88MILHDp0iB49ethu/D19+jTr169nzJgxXLlyha+++sqWuFq6dCnu7u6sXr3aLpmVuWvkzNq2bctHH31EUlISy5cvZ+DAgWzatOm6bujILC91K3d3d1auXMmRI0c4c+YMhmFkqQtdz3duxYoV2bdvX57iGz9+PH369KFevXrcc889vPXWW7z55pvXvR8BAQF4e3uTnp5+0zcG57X+cLMyWollduTIEVu98HrPc5GRkZw+ffqaPR9ldKG6b9++ayZqS5QowY8//khQUBDfffcd//d//0eHDh0ICAgAuK46N1hvkM/Yl27dulG1alUmT57M4sWLr3tdV9ehgGx/s4H1t93VZXft2pVt2avrXJUqVaJ58+b88ssvWbpBzziWPj4+N/W5y7j+2LFjR0wmE+PGjeO1116zu86W+XockG2PZN988w19+vSx/T4F64102R2Xzz//nDFjxnD8+HHbNcHM11dv5H8qL3XqDOfPn2f69OlMnDgRb2/vbJN+N/M7TXKn7j1F7gILFy4kMDCQJUuWZJmeeuopli1blu3d01fL6Os6Li4OsF5wNZvNLFiw4JbEvXv3blJTU+1OetdyvRd/Mk+5Xfx58sknadeuHW3atMmxkpGx3vr16/P4448TEBBg6041Jxn9eec2plHGepcsWcKwYcO49957GThwoN0d8ps2beLSpUvMmzePl19+mU6dOtGmTRuKFSuW63pzYzabmThxIufPn2fmzJm5lu3RowebN2/Gx8eHDh06XPe2Mt7jCxcu3FCsIiJXGzx4MNu2bWPRokXs2bOHxx57jIceeijbH9852bZtW5YfNaGhoTm2erqTvf3225QoUYKBAwdmGfsiLS2Njz/+2PY8JSWFjz/+mICAgCxj606fPp34+Hhef/3169p+eno6KSkptjFqM87ZGV2OZzzOaczXGTNmsGHDBhYuXEibNm3sxhbJTYcOHdi+fbvdex4fH88nn3xCuXLlbK3TO3ToQHp6epbzZUYLvI4dO9rNf/rpp7ly5QrPPfcccXFxOf6w9fPzo0WLFra6ytXn9ccff5xz585lubMZrC3jcutu51oy/ncmTpyYa7mdO3cyduxYJk2axGOPPUabNm3y1DV7ixYtiI2NZf369bZ5v//+O2BtBZEhI/F19dgn27Zt47vvvmPSpEk3fKE0M7PZbPd5Autd2VePpQPWLtcTExNtYydej4xt5HSBJDcZdaxp06bZzc/pc3by5Ek++ugjxo0bd12tUa/Wo0cPzp07R2BgoN1NZ1fHFhYWxuLFi23z0tLSmDFjBl5eXnYtVA8cOMCBAweuOY5VxvY+/vjjbOuIkZGRds8zbm7My/sSGxvL22+/zbBhwwgODr5meRG58wUHB7Nt2zbat2/PlClTaNCgAQsWLCA+Pp6yZcvSv39/PDw8WLFihV3SxWw2YzKZ7HoGOnnyZI5dzzdr1gyz2YynpyezZ8/ml19+yfY8nlfXU7eqUqUKDz74YLZ1oev5zu3WrZut156rXX0uzUh21K1blxEjRvDuu+9mmzC81n6YzWa6devG0qVLs3391eeEnOR3/SE3y5cvt6tHbN++nd9//9124+L1nucyxti+1vmzXbt2eHt7M3HixCw9K1z9/lSpUsXW7eKMGTNsXS1muN46d2ZJSUnEx8ffcP39dslIiGVXN2vYsCEVK1bk/ffft10LzSyvn7vMMrrCv9a42tnJrr46Y8aMbIdtAutNVw888IDtt8TV68qP/6mcjB8/nqCgIJ5//vlcy93o7zTJnVr6idzhEhMT+fbbb3nsscfo3r17luUhISH873//4/vvv79moizjzt66desC1i6jBgwYwOzZs5kxYwZDhgyxK58xNsoTTzxhGxPu0KFDFClSJMvdM9lZsmQJZrM52zFksrNt2zbWrFnD2rVrb/nFn9zulurfvz8vvvgi48aNyzWOjP7qe/Tocc2Wkg0aNLC1oPjss89o0KABEyZMsI0/kl3lKSUl5aa7YWvVqhX33nsv06ZNY+jQoTlexOvevTtnzpyhatWquLq65ri+jRs30qpVqyzHJWMg65vt1kREBKx3Y8+dO5fTp0/bWgeNGDGCVatWMXfu3DyP3RQWFpZl7IGgoCBiYmJITEy8qYvohY23tzczZsyga9euTJkyhVdffdW2LCQkhHfffZeTJ09SpUoVFi9ezK5du/jkk0+ytLpfs2YNb7/9drbdZF8t46ai+Ph4li9fzsmTJxk6dCgA1apVo2LFiowYMYJz587h4+PD0qVLsx0DYv/+/YwcOZJx48bRqFGj69rv1157jf/973+0b9+el156CT8/P+bPn8+JEydYunSprZVShw4daNOmDa+//jonTpygXr16bNiwgaVLl/L8889nGVOlfv361KpViyVLllC9evUsXWPm1dNPP83XX3/N888/z8aNG2nevDnp6ekcOnSIr7/+mtWrV1/XzVOZrVmzhgEDBuR6bk5I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fuIyEbFJBHq7c295P8xOpnzfzu2wadMmWrduzZUrVyhatKijwxEREREREREREZECREk/ERG59WLDYUHXayf9en2br4m/VfsuMH7FAS5EJ9nmlfB1Z2znGjxUq0S+bUdylpqaiouLi6PDEBERERERERERueOpe08REbn1kqKtk5MLuHpmnZxc/i2TT1btu8ALC3baJfwAwqKTeGHBTlbtu5Bv27paWloagwcPxtfXF39/f0aPHo1hGAAkJyczYsQISpYsiaenJ40bN2bTpk221546dYrOnTtTrFgxPD09qVmzJj/++CMnT56kdevWABQrVgyTyUTfvn1zjeOTTz4hJCQEi8ViN//hhx+mf//+ABw/fpyHH36YoKAgvLy8aNSoEevWrbvhfTeZTHz00Ud06dIFT09P3n77bcaNG0e9evWYM2cOZcqUwcvLixdffJH09HTee+89goODCQwM5O2337atxzAMxo0bR5kyZXBzcyMkJISXXnrJtvxax1FERERERERERORuo5Z+IiJy+zi7grM7YIBhgCnTvScpqbm+1DAMElPT87SZdIvB2O/3Y2S3HsAEjPv+AM0r+eepq08PFzMmU967BJ0/fz7PPPMM27dv588//2TgwIGUKVOGAQMGMHjwYA4cOMCiRYsICQlh2bJlPPTQQ+zdu5fKlSszaNAgUlJS+OWXX/D09OTAgQN4eXlRunRpli5dSrdu3Th8+DA+Pj54eHjkGsdjjz3GkCFD2LhxIw8++CAAly9fZtWqVfz4448AxMXF0aFDB95++23c3Nz44osv6Ny5M4cPH6ZMmTJ53ufMxo0bx6RJk5g2bRrOzs7MmTOH48eP89NPP7Fq1SqOHz9O9+7d+fvvv6lSpQo///wzW7dupX///rRp04bGjRuzdOlSpk6dyqJFi6hZsyZhYWHs3r3bto1rHUeR63UhOpHUNIMyxYs4OhQRERERERERkRuipJ+IiOQPw4CUeEi4BImXrX8Trlj/XjxinZcYhTXh90/yzqckuHrlafWJqenUGLM6f0IFwmKSqD1uTZ7KH5gQShHXvJ8yS5cuzdSpUzGZTFStWpW9e/cydepUQkNDmTt3LqdPnyYkJASAESNGsGrVKubOncs777zD6dOn6datG7Vr1wagQoUKtvX6+fkBEBgYmKcx/YoVK0b79u356quvbEm/b775Bn9/f1ur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wcPDwy4egGXLluHt7U1CQgIAr776KlWqVKFIkSJUqFCB0aNHk5qamt0qr6lv37488sgjvP3224SEhFC1alXbPnz99dfcf//9eHh40KhRI44cOcIff/zBPffcg5eXF+3btycy8t8+1jdt2sS9996Lp6cnRYsWpXnz5pw69W93DN999x0NGjTA3d2dChUqMH78+Cyt/UWyYzKZCP2ni8816uJTREREREREpNALi06iy8wtHLgQQ3FPV74a0OSOSvhBAR/Tr1mzZnz//fecO3cOwzDYuHEjR44coV27dgDs2LGD1NRU2rRpY3tNtWrVKFOmjO1C57Zt26hduzZBQf+25AgNDSUmJob9+/fbymReR0aZjHWkpKSwY8cOuzJOTk60adMmTxdURUSytedrOPwjmJygzTgodmedYK5Lxrh+EYdyLmMYkJqYtyktyVre7Axm12wmZ+vytKS8re86ux2dP38+/v7+bN++nSFDhvDCCy/w2GOP0axZM3bu3Em7du14+umnSUhIICoqigceeID69evz559/smrVKsLDw3n88cdt64uPj2f48OH8+eefrF+/HicnJx599FEsFovddl9//XVGjBjBrl27qFKlCk899dQ1E1w+Pj506tSJr776ym7+woULeeSRRyhSpAgA3t7ezJs3jwMHDjB9+nQ+/fRTu5tjrtf69es5fPgwa9eu5YcffrDNHzt2LG+88QY7d+7E2dmZHj16MHLkSKZPn87mzZs5duwYY8aMASAtLY1HHnmEli1bsmfPHrZt28bAgQMxmUwAbN68md69e/Pyyy9z4MABPv74Y+bNm8fbb799w3HL3SUj6bfuYDip6ZZrlBYRERERERGRgizIx40HqwVSq6QP3w+5j3vL+zk6pHxXoPuQmzFjBgMHDqRUqVI4Ozvj5OTEp59+SosWLQAICwvD1dWVokWL2r0uKCiIsLAwW5nMCb+M5RnLcisTExNDYmIiV65cIT09Pdsyhw7lfIE6OTmZ5ORk2/OYmJjr2HsRuaOd2ga/f2R93HQQlG7k2HgcLbA6HFyRe0u/tCSY81De1peWBPHhkOBkTapezbBYp28HgLP7tdfXfxW4eORt20DdunV54403ABg1ahSTJk3C39+fAQMGADBmzBg++ugj9uzZw7p166hfv76ty2mAOXPmULp0aY4cOUKVKlXo1q2b3frnzJlD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Jf790W2YShG1Dea3prhqeUctHFjbleWuVZ1s7iuQLblsHy7RFLeJ2QZlxzuk4O5QuJL3iSlqfKBtGWAoRTxiYZuKwaJDT64CShG1TLwgwBstfx17jG0ZRCwLpcA0FK4foFQYHpYdjyAIsEwzDAyVqs0IHGvJOVhwyFe8CceCfdnfcaLs+ERtg4Zx940/LlTdYNJjx9EilX5i6jDMsDKnoR3pQn0AZpwG0+aH8w9f+G29V/PyFQfhxd+F109/R33XIo4vtbl+x0kLXCHEcWVRW9jCfEN3vs4rEUIIIU5cb33rW3nzm9/MggULOPXUU/mHf/gHUqkUTzzxBNlsln//93/nW9/6Fm984xs566yz+P73v89jjz3GE088AcD999/PunXr+OEPf8iZZ57JpZdeype//GVuv/12HMcB4I477mDu3Ll885vfZPHixVx77bW84x3v4Oabb66t41vf+hYf+tCH+MAHPsCSJUu44447SCQSfO973wM4oLUIcSypZzXMnGlJ5rem6M6W95ivPVSo8lxnFs/XtKdjzJmepDEeYU1n2L5zbVe21spzTWcWy1DEbAMdhJVBG3ryBBK8CYFi8rP7hgKFQmtNoeIRtQzKrocXaGxDYRkQNQ1sy8A2VW1fAP7om8vXmiAI9+P4AUMlF9fXuF6A5wdErHA/JccjE7dq4X3DJOHd3uzrOKG1pjtbZkFrA3OmhR18xh8XGuORSY8dR1NdQ7+HH36Yt771rcycOROlFPfcc89et/2bv/kblFLccsstE24fGhriPe95D+l0msbGRq6++moKhcKEbZ577jn+7M/+jFgsxuzZs/na1762x/5/8pOfsGjRImKxGKeffjq//vWvJ9yvtebzn/887e3txONxLrzwQjZt2vSyf3YhDplSu1phrruHY/avinX3hG1d25aGlVlCHC5jrydp7ymEmIKWtIcV+hukvacQQggxJfi+z49//GOKxSLnnHMOK1euxHVdLrzwwto2ixYt4qSTTuLxxx8H4PHHH+f0009nxowZtW0uvvhicrkczz//fG2b8fsY22ZsH47jsHLlygnbGIbBhRdeWNvmQNYixLFibVeWL/9qHX/3i+f5h1+t5+9+8Txf/tW6o3ZS3DAUVy3voDkZYXNfgULFww80hbLLMzuG8bVm7vQEmjCgSMUs5remGCo63LWyk7tWdtI5XCJb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X37R4cOHveJ/oKzvCh07dlRgYKBLu6elpWnv3r0e3+6X8j0pNTVVkryi7c/mcDiUl5fn1W1+PsV1L403tzm8H/23y1Oevk9iYqKOHTumdevWOct88803cjgczh8NJCYmavny5SooKHCWWbx4sZo3b67q1as7y5TcTnGZ4u14Uz+sIvoeiYmJ2rRpk0vCdfHixYqIiHD+qLusfVqe94e3HxMv5tjPPr80ZY0Dd+rUiX3vaQzgBh588EETGRlpli1bZjIyMpyPkydPWh0aftOjRw8zfPhwq8PwWWvWrDEBAQHmueeeMzt37jSzZ882oaGh5r333rM6NJ80cOBAU79+ffP555+b9PR08+mnn5patWqZJ554wurQfEZOTo5Zv369Wb9+vZFkpk6datavX29+/vlnY4wxL7zwgomKijKfffaZ2bhxo7nttttMo0aNzKlTpyyOHJVtzpw5JigoyMyaNcts3brVDB061ERFRZnMzEyrQ6tUo0aNMsuWLTPp6elm5cqVJikpydSqVcscOHDA6tAqnK++/y9U75ycHPPYY4+ZlJQUk56ebr7++mvToUMH07RpU5Obm2t16JetPN8VHnjgAdOgQQPzzTffmLVr15rExESTmJhoYdQVo6y679q1y/z1r381a9euNenp6eazzz4zjRs3Ntdee63FkV++0aNHm2+//dakp6ebjRs3mtGjRxubzWa++uorY4z3trkxF667N7c5fJev9t/KqyL6Pr169TLt27c3q1evNitWrDBNmzY1/fr1c84/duyYiY6ONnfffbfZvHmzmTNnjgkNDTVvvvmms8zKlStNQECA+dvf/ma2bdtmJkyYYAIDA82mTZucZbylH1YRfY/CwkLTunVrc8MNN5jU1FSzcOFCU7t2bTNmzBhnmT179pjQ0FDz+OOPm23btpnp06cbf39/s3DhQmeZ8rw/vOWYeLnHfvZ5xTl7HJh971lI+sEtSCr18c4771gdGn5D0s96//3vf03r1q1NUFCQadGihXnrrbesDslnZWdnm+HDh5sGDRqY4OBg07hxYzNu3DiTl5dndWg+Y+nSpaUeNwYOHGiMMcbhcJinn37aREdHm6CgINOzZ0+TlpZmbdCoMq+//rpp0KCBsdvt5uqrrzbff/+91SFVur59+5q6desau91u6tevb/r27Wt27dpldViVwlff/xeq98mTJ80NN9xgateubQIDA03Dhg3NkCFDvGawtDzfFU6dOmX+8pe/mOrVq5vQ0FDzxz/+0WRkZFgXdAUpq+579+411157ralRo4YJCgoyTZo0MY8//rjJysqyNvAKcN9995mGDRsau91uateubXr27Okc9DPGe9vcmAvX3ZvbHL7NF/tv5VURfZ/Dhw+bfv36mbCwMBMREWHuvfdek5OT41Jmw4YN5pprrjFBQUGmfv365oUXXjgnlo8++sg0a9bM2O1206pVK/PFF1+4zPeWflhF9T1++uknc+ONN5qQkBBTq1YtM2rUKFNQUOBSZunSpaZdu3bGbrebxo0blzoWWtb7w1uOiRVx7GefV4yzx4HZ957FZowxFX/+IAAAAAAAAAAAAICqwj39AAAAAAAAAAAAAA9H0g8AAAAAAAAAAADwcCT9AAAAAAAAAAAAAA9H0g8AAAAAAAAAAADwcCT9AAAAAAAAAAAAAA9H0g8AAAAAAAAAAADwcCT9AAAAAAAAAAAAAA9H0g8AAAAAAAAAAADwcCT9AAAAAAAAAAAAAA9H0g+AVxg0aJB69+7tMu3nn39WcHCwbDabNUEBAAB4sYKCAs2aNUvXXHONateurZCQELVp00Yvvvii8vPzrQ4PAADAa02cOFHt2rWzOgwAbijA6gAAoLI8/fTTJPwAAAAqyZYtW/Sf//xHjz76qNq3b6/c3Fxt2rRJEydO1KJFi7Ro0SIFBgZaHSYAAIDPKigooD8G+BjO9APglTZt2qTZs2fr4YcfliQtW7ZMNpvtvI9iK1asUPfu3RUSEqLY2Fg98sgjOnHihHN+XFycnnnmGfXr10/VqlVT/fr1NX36dJdtT506VQkJCapWrZpiY2P1l7/8RcePH3fOnzVrlqKiolyW+emnn2Sz2ZSamuqcZrPZNG/ePOfrf/7zn7LZbBoxYoRzWkZGhm6//XbVrFnTpT7Hjh279J0HAABQDq1bt9aSJUt0xx13qHHjxoqPj1ffvn21fPlybd68Wa+++qoknbf/VbJPc/ToUd1zzz2qXr26QkNDdeONN2rnzp3O+ffdd5/atGmjvLw8SVJ+fr7at2+ve+65x1nmySefVLNmzRQaGqrGjRvr6aefVkFBQZXsCwAAgIv17rvvqmbNms7+TbHevXvr7rvvPu9ys2bN0qRJk7RhwwZnv2rWrFmSTve7ZsyYoVtvvVXVqlXTc889V+o41Lx58875ofxnn32mDh06KDg4WI0bN9akSZNUWFhYIXUFUHVI+gHwSqNHj9Ytt9yirl27SpK6du2qjIwMZWRk6P/+7/8kyfk6IyNDkrR792716tVLd9xxhzZu3KgPP/xQK1as0LBhw1zW/dJLL6lt27Zav369Ro8ereHDh2vx4sXO+X5+fpo2bZq2bNmif//73/rmm2/0xBNPXFZ9Tpw4oaefflphYWEu00eNGqUdO3Zo4cKFLnUDAACobAEBpV84pnbt2rr99ts1e/Zs57R33nnHpe+VmJjossygQYO0du1azZ8/XykpKTLG6KabbnIm7aZNm6YTJ05o9OjRkqRx48bp2LFj+vvf/+5cR3h4uGbNmqWtW7fqtdde09tvv61XXnmloqsNAABQIfr06aOioiLNnz/fOe3AgQP64osvdN999513ub59+2rUqFFq1aqVs2/Vt29f5/yJEyfqj3/8ozZt2nTB9ZT03Xff6Z577tHw4cO1detWvfnmm5o1a5aee+65S68gAEtweU8AXmf58uVatGiRNm3apLS0NEmS3W5XTEyMJKlGjRqS5HxdbPLkyerfv7/zV+dNmzbVtGnT1KNHD82YMUPBwcGSpG7dujkHnJo1a6aVK1fqlVde0e9//3tJcvnVelxcnJ599lk98MADeuONNy65TlOmTFF8fPw5v7BKTU3VgAEDdNVVV7nUDQAAoKq0atVKP//8s8u0goIC+fv7O19HRUW59L3sdrvz+c6dOzV//nytXLnS+YOt2bNnKzY2VvPmzVOfPn0UFham9957Tz169FB4eLheffVVLV26VBEREc71PPXUU87ncXFxeuyxxzRnzpzL/vEVAABAZQgJCdFdd92ld955R3369JEkvffee2rQoIGuu+66Cy4XFhamgICAc8a2JOmuu+7Svffee1GxTJo0SaNHj9bAgQMlSY0bN9YzzzyjJ554QhMmTLiodQGwFmf6AfA6xZ2Uli1bXtRyGzZs0KxZsxQWFuZ8JCcny+FwKD093Vnu7F+mJyYmatu2bc7XX3/9tXr27Kn69esrPDxcd999tw4fPqyTJ09eUn3+97//aerUqXr55ZfPmdeoUSMtWLBAR44cuaR1AwAAXK4FCxYoNTXV5VE8YFQe27ZtU0BAgDp37uycVrNmTTVv3tylj5WYmKjHHntMzzzzjEaNGqVrrrnGZT0ffvihunXrppiYGIWFhempp57S3r17L7+CAAAAlWTIkCH66quv9Ouvv0o6fenOQYMGnXPpzYvRqVOni15mw4YN+utf/+oyJjZkyBBlZGRc8ngWAGtwph8ArzJ37lytX79eH3300UUve/z4cd1///165JFHzpnXoEGDcq3jp59+0h/+8Ac9+OCDeu6551SjRg2tWLFCgwcPVn5+vkJDQy86rnHjxqlPnz5q27btOfNeeeUV9e/fX7Vq1VJoaKiKioouev0AAACXo2HDhudM2717t5o1a1ah23E4HFq5cqX8/f21a9cul3kpKSnq37+/Jk2apOTkZEVGRmrOnDml/mgKAADAXbRv315t27bVu+++qxtuuEFbtmzRF198cVnrrFatmstrPz8/GWNcpp193+Pjx49r0qRJuv32289ZX/GVrwB4BpJ+ALxGUVGRxo0bp4cfflhXXHHFRS/foUMHbd26VU2aNLlgue+///6c18VnFa5bt04Oh0Mvv/yy/PxOn0x9KQnIYqmpqfrkk0+clyk9W7NmzTRo0CAdPnxY//3vf52X+wQAAKhsR44cUWBgoMLDw12mr127VkuXLtULL7xQrvW0bNlShYWFWr16tfPynocPH1ZaWpri4+Od5V566SVt375d3377rZKTk/XOO+84L121atUqNWzYUOPGjXOWP/uSowAAAO7oz3/+s1599VX9+uuvSkpKUmxsbJnL2O32cv/wu3bt2srJydGJEyecCcHU1FSXMh06dFBaWlqZY2IA3B+X9wTgNb7++mtlZGRozJgxl7T8k08+qVWrVmnYsGFKTU3Vzp079dlnn2nYsGEu5VauXKkpU6Zox44dmj59uj7++GMNHz5cktSkSRMVFBTo9ddf1549e/Sf//xHM2fOLHV7ubm5zkdeXp4kKT8/3+XXV3/72980cuRI1atXr9R1fP/99xo7dqw++eQTtWrVSvXr17+kugMAAFysvXv3ql27dvrnP/+pXbt2Ofs+t912m7p37+5yn+MLadq0qW677TYNGTJEK1as0IYNGzRgwADVr19ft912myRp/fr1Gj9+vP7xj3+oW7dumjp1qoYPH649e/Y417F3717NmTNHu3fv1rRp0zR37tzKqjoAAECFueuuu/TLL7/o7bff1n333VeuZeLi4pSenq7U1FQdOnTIOa5Ums6dOys0NFRjx47V7t279f7772vWrFkuZcaPH693331XkyZN0pYtW7Rt2zbNmTPH5Z7JADwDST8AXiM3N1dPPvmkqlevfknLt2nTRt9++6127Nih7t27q3379ho/fvw5CbdRo0Zp7dq1at++vZ599llNnTpVycnJkqS2bdtq6tSpevHFF9W6dWvNnj1bkydPPmdbWVlZCgkJcT5atGgh6XRHrOSv0sPDw/XEE0+UGu/BgwfVp08fTZ06VR06dLikOgMAAFyq1q1ba8KECZo1a5a6dOmiVq1aacqUKRo2bJi++uor2e32cq/rnXfeUceOHfWHP/xBiYmJMsZowYIFCgwMVG5urgYMGKBBgwbplltukSQNHTpU119/ve6++24VFRXp1ltv1aOPPqphw4apXbt2WrVqlZ5++unKqjoAAECFiYyM1B133KGwsDD17t27XMvccccd6tWrl66//nrVrl1bH3zwwXnL1qhRQ++9954WLFighIQEffDBB5o4caJLmeTkZH3++ef66quvdNVVV6lLly565ZVXSr2MOwD3ZjNnX9AXAHBecXFxGjFiRLl/uX6x2rVrp3nz5ikuLq5S1g8AAAAAAAD30rNnT7Vq1UrTpk2zOhQAHo57+gGAGwkKCpLNZrM6DAAAAAAAAFSyo0ePatmyZVq2bJneeOMNq8MB4AVI+gGAG1m9erXVIQAAAAAAAKAKtG/fXkePHtWLL76o5s2bO6e3atXK5fYvJb355pvq379/VYUIwMNweU8AAAAAAAAAANzEzz//rIKCglLnRUdHKzw8vIojAuApSPoBAAAAAAAAAAAAHs7P6gAAAAAAAAAAAAAAXB6SfgAAAAAAAAAAAICHI+kHAAAAAAAAAAAAeDiSfgAAAAAAAAAAAICHI+kHAAAAAAAAAAAAeDiSfgAAAAAAAAAAAICHI+kHAAAAAAAAAAAAeDiSfgAAAAAAAAAAAICH+/+5Q3S+gS/EmQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1800x500 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1, 3, figsize=(18, 5))\n",
    "\n",
    "# История ABC\n",
    "axes[0].plot(search_history_df[\"cycle\"], search_history_df[\"best_val_rmse\"], marker=\"o\", label=\"best_val_rmse\")\n",
    "axes[0].plot(search_history_df[\"cycle\"], search_history_df[\"mean_val_rmse\"], marker=\"s\", label=\"mean_val_rmse\", alpha=0.8)\n",
    "axes[0].set_title(\"ABC: динамика RMSE\")\n",
    "axes[0].set_xlabel(\"Итерация\")\n",
    "axes[0].set_ylabel(\"RMSE\")\n",
    "axes[0].legend()\n",
    "\n",
    "# Кривая обучения\n",
    "axes[1].plot(loss_curve_df[\"epoch\"], loss_curve_df[\"train_loss\"])\n",
    "axes[1].set_title(\"Кривая обучения финальной модели\")\n",
    "axes[1].set_xlabel(\"Эпоха\")\n",
    "axes[1].set_ylabel(\"Train loss\")\n",
    "\n",
    "# Факт vs прогноз\n",
    "axes[2].scatter(true_test, pred_test, alpha=0.6)\n",
    "mn = min(true_test.min(), pred_test.min())\n",
    "mx = max(true_test.max(), pred_test.max())\n",
    "axes[2].plot([mn, mx], [mn, mx], linestyle=\"--\")\n",
    "axes[2].set_title(\"Фактические и предсказанные значения\")\n",
    "axes[2].set_xlabel(\"y_true\")\n",
    "axes[2].set_ylabel(\"y_pred\")\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c8ff1ef0",
   "metadata": {},
   "source": [
    "## Финальная ячейка для итогового вывода"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "1897b06d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=== КЛЮЧЕВАЯ ИНФОРМАЦИЯ ДЛЯ ВЫВОДА ===\n",
      "Зависимая переменная: price\n",
      "\n",
      "Число исходных признаков: 5\n",
      "Число признаков после кодирования: 7\n",
      "Лучшая архитектура, найденная ABC: (32,)\n",
      "Функция активации: relu\n",
      "alpha: 0.0007304392476849531\n",
      "learning_rate_init: 0.00630957344480193\n",
      "batch_size: 32\n",
      "Использовано log1p-преобразование цели: False\n",
      "\n",
      "Метрики модели на test:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>model</th>\n",
       "      <th>r2_test</th>\n",
       "      <th>rmse_test</th>\n",
       "      <th>mae_test</th>\n",
       "      <th>r2_trainval</th>\n",
       "      <th>rmse_trainval</th>\n",
       "      <th>mae_trainval</th>\n",
       "      <th>n_original_features</th>\n",
       "      <th>n_processed_features</th>\n",
       "      <th>hidden_layers</th>\n",
       "      <th>activation</th>\n",
       "      <th>alpha</th>\n",
       "      <th>learning_rate_init</th>\n",
       "      <th>batch_size</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Нейросеть с архитектурой, найденной ABC</td>\n",
       "      <td>0.575564</td>\n",
       "      <td>49358.310222</td>\n",
       "      <td>39432.017822</td>\n",
       "      <td>0.568887</td>\n",
       "      <td>50055.534047</td>\n",
       "      <td>40014.86674</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>(32,)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.00073</td>\n",
       "      <td>0.00631</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                     model   r2_test     rmse_test  \\\n",
       "0  Нейросеть с архитектурой, найденной ABC  0.575564  49358.310222   \n",
       "\n",
       "       mae_test  r2_trainval  rmse_trainval  mae_trainval  \\\n",
       "0  39432.017822     0.568887   50055.534047   40014.86674   \n",
       "\n",
       "   n_original_features  n_processed_features hidden_layers activation  \\\n",
       "0                    5                     7         (32,)       relu   \n",
       "\n",
       "     alpha  learning_rate_init  batch_size  \n",
       "0  0.00073             0.00631          32  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Топ-10 конфигураций ABC по валидационному RMSE:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>hidden_layers</th>\n",
       "      <th>activation</th>\n",
       "      <th>alpha</th>\n",
       "      <th>learning_rate_init</th>\n",
       "      <th>batch_size</th>\n",
       "      <th>rmse_val</th>\n",
       "      <th>mae_val</th>\n",
       "      <th>r2_val</th>\n",
       "      <th>cycle</th>\n",
       "      <th>phase</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.001545</td>\n",
       "      <td>32</td>\n",
       "      <td>49806.144877</td>\n",
       "      <td>39969.002919</td>\n",
       "      <td>0.570562</td>\n",
       "      <td>4</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000611</td>\n",
       "      <td>0.001545</td>\n",
       "      <td>32</td>\n",
       "      <td>49823.965440</td>\n",
       "      <td>39974.526240</td>\n",
       "      <td>0.570255</td>\n",
       "      <td>5</td>\n",
       "      <td>employed</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>(64, 32)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.010000</td>\n",
       "      <td>0.001444</td>\n",
       "      <td>64</td>\n",
       "      <td>49837.225616</td>\n",
       "      <td>39982.430343</td>\n",
       "      <td>0.570026</td>\n",
       "      <td>6</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>(32,)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000730</td>\n",
       "      <td>0.006310</td>\n",
       "      <td>32</td>\n",
       "      <td>49850.883212</td>\n",
       "      <td>39996.466454</td>\n",
       "      <td>0.569791</td>\n",
       "      <td>10</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.001545</td>\n",
       "      <td>64</td>\n",
       "      <td>49854.029206</td>\n",
       "      <td>39987.768384</td>\n",
       "      <td>0.569736</td>\n",
       "      <td>4</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.001050</td>\n",
       "      <td>0.001744</td>\n",
       "      <td>64</td>\n",
       "      <td>49858.301204</td>\n",
       "      <td>40003.886950</td>\n",
       "      <td>0.569663</td>\n",
       "      <td>3</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.001955</td>\n",
       "      <td>0.001628</td>\n",
       "      <td>32</td>\n",
       "      <td>49860.574674</td>\n",
       "      <td>39991.252878</td>\n",
       "      <td>0.569623</td>\n",
       "      <td>5</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000165</td>\n",
       "      <td>0.001628</td>\n",
       "      <td>32</td>\n",
       "      <td>49865.090708</td>\n",
       "      <td>39999.375976</td>\n",
       "      <td>0.569545</td>\n",
       "      <td>7</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.002964</td>\n",
       "      <td>0.006310</td>\n",
       "      <td>32</td>\n",
       "      <td>49868.545164</td>\n",
       "      <td>39998.712446</td>\n",
       "      <td>0.569486</td>\n",
       "      <td>7</td>\n",
       "      <td>onlooker</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.003797</td>\n",
       "      <td>32</td>\n",
       "      <td>49869.133951</td>\n",
       "      <td>39998.330708</td>\n",
       "      <td>0.569476</td>\n",
       "      <td>6</td>\n",
       "      <td>employed</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  hidden_layers activation     alpha  learning_rate_init  batch_size  \\\n",
       "0      (32, 16)       relu  0.000085            0.001545          32   \n",
       "1      (32, 16)       relu  0.000611            0.001545          32   \n",
       "2      (64, 32)       relu  0.010000            0.001444          64   \n",
       "3         (32,)       relu  0.000730            0.006310          32   \n",
       "4      (32, 16)       relu  0.000085            0.001545          64   \n",
       "5      (32, 16)       relu  0.001050            0.001744          64   \n",
       "6      (32, 16)       relu  0.001955            0.001628          32   \n",
       "7      (32, 16)       relu  0.000165            0.001628          32   \n",
       "8      (32, 16)       relu  0.002964            0.006310          32   \n",
       "9      (32, 16)       relu  0.000085            0.003797          32   \n",
       "\n",
       "       rmse_val       mae_val    r2_val  cycle     phase  \n",
       "0  49806.144877  39969.002919  0.570562      4  onlooker  \n",
       "1  49823.965440  39974.526240  0.570255      5  employed  \n",
       "2  49837.225616  39982.430343  0.570026      6  onlooker  \n",
       "3  49850.883212  39996.466454  0.569791     10  onlooker  \n",
       "4  49854.029206  39987.768384  0.569736      4  onlooker  \n",
       "5  49858.301204  40003.886950  0.569663      3  onlooker  \n",
       "6  49860.574674  39991.252878  0.569623      5  onlooker  \n",
       "7  49865.090708  39999.375976  0.569545      7  onlooker  \n",
       "8  49868.545164  39998.712446  0.569486      7  onlooker  \n",
       "9  49869.133951  39998.330708  0.569476      6  employed  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Последние итерации ABC:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cycle</th>\n",
       "      <th>best_hidden_layers</th>\n",
       "      <th>best_activation</th>\n",
       "      <th>best_alpha</th>\n",
       "      <th>best_learning_rate_init</th>\n",
       "      <th>best_batch_size</th>\n",
       "      <th>best_val_rmse</th>\n",
       "      <th>best_val_mae</th>\n",
       "      <th>best_val_r2</th>\n",
       "      <th>mean_val_rmse</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>(128, 64, 32)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000254</td>\n",
       "      <td>0.001345</td>\n",
       "      <td>64</td>\n",
       "      <td>50011.391145</td>\n",
       "      <td>40133.906183</td>\n",
       "      <td>0.567016</td>\n",
       "      <td>158852.853867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.001050</td>\n",
       "      <td>0.001744</td>\n",
       "      <td>64</td>\n",
       "      <td>49888.758446</td>\n",
       "      <td>40019.762710</td>\n",
       "      <td>0.569137</td>\n",
       "      <td>142380.620977</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.001050</td>\n",
       "      <td>0.001744</td>\n",
       "      <td>64</td>\n",
       "      <td>49858.301204</td>\n",
       "      <td>40003.886950</td>\n",
       "      <td>0.569663</td>\n",
       "      <td>165520.374815</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.001545</td>\n",
       "      <td>32</td>\n",
       "      <td>49806.144877</td>\n",
       "      <td>39969.002919</td>\n",
       "      <td>0.570562</td>\n",
       "      <td>119652.140012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>(32, 16)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.001545</td>\n",
       "      <td>32</td>\n",
       "      <td>49806.144877</td>\n",
       "      <td>39969.002919</td>\n",
       "      <td>0.570562</td>\n",
       "      <td>163254.800806</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>(64, 32)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.010000</td>\n",
       "      <td>0.001444</td>\n",
       "      <td>64</td>\n",
       "      <td>49837.225616</td>\n",
       "      <td>39982.430343</td>\n",
       "      <td>0.570026</td>\n",
       "      <td>185976.366911</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>(128, 96, 64, 32)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000004</td>\n",
       "      <td>0.000054</td>\n",
       "      <td>32</td>\n",
       "      <td>50302.909744</td>\n",
       "      <td>40367.842460</td>\n",
       "      <td>0.561953</td>\n",
       "      <td>187789.245686</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>(128,)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000001</td>\n",
       "      <td>0.006310</td>\n",
       "      <td>64</td>\n",
       "      <td>49874.578480</td>\n",
       "      <td>40004.789505</td>\n",
       "      <td>0.569382</td>\n",
       "      <td>95779.236590</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>(128,)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000001</td>\n",
       "      <td>0.006310</td>\n",
       "      <td>64</td>\n",
       "      <td>49874.578480</td>\n",
       "      <td>40004.789505</td>\n",
       "      <td>0.569382</td>\n",
       "      <td>96402.574560</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>(32,)</td>\n",
       "      <td>relu</td>\n",
       "      <td>0.000730</td>\n",
       "      <td>0.006310</td>\n",
       "      <td>32</td>\n",
       "      <td>49850.883212</td>\n",
       "      <td>39996.466454</td>\n",
       "      <td>0.569791</td>\n",
       "      <td>96387.260560</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   cycle best_hidden_layers best_activation  best_alpha  \\\n",
       "0      1      (128, 64, 32)            relu    0.000254   \n",
       "1      2           (32, 16)            relu    0.001050   \n",
       "2      3           (32, 16)            relu    0.001050   \n",
       "3      4           (32, 16)            relu    0.000085   \n",
       "4      5           (32, 16)            relu    0.000085   \n",
       "5      6           (64, 32)            relu    0.010000   \n",
       "6      7  (128, 96, 64, 32)            relu    0.000004   \n",
       "7      8             (128,)            relu    0.000001   \n",
       "8      9             (128,)            relu    0.000001   \n",
       "9     10              (32,)            relu    0.000730   \n",
       "\n",
       "   best_learning_rate_init  best_batch_size  best_val_rmse  best_val_mae  \\\n",
       "0                 0.001345               64   50011.391145  40133.906183   \n",
       "1                 0.001744               64   49888.758446  40019.762710   \n",
       "2                 0.001744               64   49858.301204  40003.886950   \n",
       "3                 0.001545               32   49806.144877  39969.002919   \n",
       "4                 0.001545               32   49806.144877  39969.002919   \n",
       "5                 0.001444               64   49837.225616  39982.430343   \n",
       "6                 0.000054               32   50302.909744  40367.842460   \n",
       "7                 0.006310               64   49874.578480  40004.789505   \n",
       "8                 0.006310               64   49874.578480  40004.789505   \n",
       "9                 0.006310               32   49850.883212  39996.466454   \n",
       "\n",
       "   best_val_r2  mean_val_rmse  \n",
       "0     0.567016  158852.853867  \n",
       "1     0.569137  142380.620977  \n",
       "2     0.569663  165520.374815  \n",
       "3     0.570562  119652.140012  \n",
       "4     0.570562  163254.800806  \n",
       "5     0.570026  185976.366911  \n",
       "6     0.561953  187789.245686  \n",
       "7     0.569382   95779.236590  \n",
       "8     0.569382   96402.574560  \n",
       "9     0.569791   96387.260560  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Последние эпохи обучения финальной модели:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>epoch</th>\n",
       "      <th>train_loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>28</td>\n",
       "      <td>1.252460e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>29</td>\n",
       "      <td>1.252416e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>30</td>\n",
       "      <td>1.252281e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>31</td>\n",
       "      <td>1.252406e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>32</td>\n",
       "      <td>1.252455e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>33</td>\n",
       "      <td>1.252425e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>34</td>\n",
       "      <td>1.252446e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>35</td>\n",
       "      <td>1.252468e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>36</td>\n",
       "      <td>1.252430e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>37</td>\n",
       "      <td>1.252407e+09</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    epoch    train_loss\n",
       "27     28  1.252460e+09\n",
       "28     29  1.252416e+09\n",
       "29     30  1.252281e+09\n",
       "30     31  1.252406e+09\n",
       "31     32  1.252455e+09\n",
       "32     33  1.252425e+09\n",
       "33     34  1.252446e+09\n",
       "34     35  1.252468e+09\n",
       "35     36  1.252430e+09\n",
       "36     37  1.252407e+09"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Первые 10 фактических и предсказанных значений на тесте:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>y_true</th>\n",
       "      <th>y_pred</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>170835.035713</td>\n",
       "      <td>218620.080345</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>126913.469998</td>\n",
       "      <td>134866.992980</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>246611.883092</td>\n",
       "      <td>255264.069330</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>244250.462969</td>\n",
       "      <td>258072.016213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>271127.650112</td>\n",
       "      <td>277548.429307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>189289.951199</td>\n",
       "      <td>202795.196660</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>343510.576500</td>\n",
       "      <td>286258.253792</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>203461.591080</td>\n",
       "      <td>198129.739903</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>285903.247682</td>\n",
       "      <td>308237.372115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>224868.958375</td>\n",
       "      <td>224211.786152</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          y_true         y_pred\n",
       "0  170835.035713  218620.080345\n",
       "1  126913.469998  134866.992980\n",
       "2  246611.883092  255264.069330\n",
       "3  244250.462969  258072.016213\n",
       "4  271127.650112  277548.429307\n",
       "5  189289.951199  202795.196660\n",
       "6  343510.576500  286258.253792\n",
       "7  203461.591080  198129.739903\n",
       "8  285903.247682  308237.372115\n",
       "9  224868.958375  224211.786152"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"=== КЛЮЧЕВАЯ ИНФОРМАЦИЯ ДЛЯ ВЫВОДА ===\")\n",
    "print(\"Зависимая переменная:\", target_col)\n",
    "print()\n",
    "print(\"Число исходных признаков:\", X.shape[1])\n",
    "print(\"Число признаков после кодирования:\", len(feature_names))\n",
    "print(\"Лучшая архитектура, найденная ABC:\", best_solution[\"hidden_layers\"])\n",
    "print(\"Функция активации:\", best_solution[\"activation\"])\n",
    "print(\"alpha:\", best_solution[\"alpha\"])\n",
    "print(\"learning_rate_init:\", best_solution[\"learning_rate_init\"])\n",
    "print(\"batch_size:\", best_solution[\"batch_size\"])\n",
    "print(\"Использовано log1p-преобразование цели:\", USE_LOG1P)\n",
    "print()\n",
    "\n",
    "print(\"Метрики модели на test:\")\n",
    "display(results_df[[\n",
    "    \"model\", \"r2_test\", \"rmse_test\", \"mae_test\",\n",
    "    \"r2_trainval\", \"rmse_trainval\", \"mae_trainval\",\n",
    "    \"n_original_features\", \"n_processed_features\",\n",
    "    \"hidden_layers\", \"activation\", \"alpha\", \"learning_rate_init\", \"batch_size\"\n",
    "]])\n",
    "\n",
    "print(\"Топ-10 конфигураций ABC по валидационному RMSE:\")\n",
    "display(all_candidates_df[[\n",
    "    \"hidden_layers\", \"activation\", \"alpha\", \"learning_rate_init\", \"batch_size\",\n",
    "    \"rmse_val\", \"mae_val\", \"r2_val\", \"cycle\", \"phase\"\n",
    "]].head(10))\n",
    "\n",
    "print(\"Последние итерации ABC:\")\n",
    "display(search_history_df.tail(10))\n",
    "\n",
    "print(\"Последние эпохи обучения финальной модели:\")\n",
    "display(loss_curve_df.tail(10))\n",
    "\n",
    "print(\"Первые 10 фактических и предсказанных значений на тесте:\")\n",
    "display(pred_sample_df)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fae24837",
   "metadata": {},
   "source": [
    "Итог\n",
    "\n",
    "Зависимой переменной выбрана price. Методом ABC найдена лучшая архитектура нейросети (32,) с параметрами: relu, alpha = 0.00073, learning_rate_init = 0.00631, batch_size = 32.\n",
    "\n",
    "На тестовой выборке модель показала R² = 0.5756, RMSE ≈ 49358, MAE ≈ 39432. Это соответствует качественному решению задачи для данного набора из 5 исходных признаков (7 после кодирования).\n",
    "\n",
    "Следовательно, наилучшей моделью является нейросеть с архитектурой, найденной ABC, и дальнейшее усложнение архитектуры улучшения не дало."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
