{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f444fb75",
   "metadata": {},
   "source": [
    "\n",
    "# Поиск аномалий по всем показателям за 2008 год\n",
    "\n",
    "Задача:\n",
    "- отобрать данные **за 2008 год**\n",
    "- использовать **все числовые показатели**\n",
    "- решить задачу поиска аномалий **максимальным количеством способов**\n",
    "- посчитать **Precision, Recall, F1-score**\n",
    "- выбрать **3–4 лучших метода**\n",
    "- по их результатам получить **консенсусное решение**\n",
    "- выделить наиболее отличающиеся объекты и кратко их описать\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e7d60385",
   "metadata": {},
   "source": [
    "## 1. Импорт библиотек"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "10593d2c",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import precision_score, recall_score, f1_score\n",
    "\n",
    "from sklearn.ensemble import IsolationForest\n",
    "from sklearn.neighbors import LocalOutlierFactor, NearestNeighbors\n",
    "from sklearn.svm import OneClassSVM\n",
    "from sklearn.covariance import EllipticEnvelope\n",
    "from sklearn.cluster import DBSCAN\n",
    "from sklearn.decomposition import PCA\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9eed748c",
   "metadata": {},
   "source": [
    "## 2. Загрузка данных"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "619b0ee9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Размер исходного датасета: (497, 9)\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>Район</th>\n",
       "      <th>Год</th>\n",
       "      <th>Динамика_Количества_Работников</th>\n",
       "      <th>Динамика_Величина_КРС</th>\n",
       "      <th>Динамика_Мощности_Техники</th>\n",
       "      <th>Динамика_Количества_Техники</th>\n",
       "      <th>Динамика_Основных_Средств</th>\n",
       "      <th>Динамика_Посевных_Площадей</th>\n",
       "      <th>Динамика_Себестоимости_Произведенной_Продукции</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Арзамасский</td>\n",
       "      <td>2019</td>\n",
       "      <td>0.9648</td>\n",
       "      <td>0.8773</td>\n",
       "      <td>1.0907</td>\n",
       "      <td>1.0638</td>\n",
       "      <td>1.3537</td>\n",
       "      <td>1.0871</td>\n",
       "      <td>1.4476</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Балахнинский</td>\n",
       "      <td>2019</td>\n",
       "      <td>1.0125</td>\n",
       "      <td>0.9695</td>\n",
       "      <td>1.0091</td>\n",
       "      <td>0.9500</td>\n",
       "      <td>1.0919</td>\n",
       "      <td>1.3471</td>\n",
       "      <td>1.0623</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Богородский</td>\n",
       "      <td>2019</td>\n",
       "      <td>0.8421</td>\n",
       "      <td>0.9707</td>\n",
       "      <td>1.0060</td>\n",
       "      <td>0.9636</td>\n",
       "      <td>1.0791</td>\n",
       "      <td>0.7955</td>\n",
       "      <td>1.0837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Большеболдинский</td>\n",
       "      <td>2019</td>\n",
       "      <td>0.7951</td>\n",
       "      <td>0.8774</td>\n",
       "      <td>0.8965</td>\n",
       "      <td>0.8611</td>\n",
       "      <td>0.9460</td>\n",
       "      <td>0.9489</td>\n",
       "      <td>0.7530</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Борский</td>\n",
       "      <td>2019</td>\n",
       "      <td>0.8389</td>\n",
       "      <td>0.7987</td>\n",
       "      <td>0.8097</td>\n",
       "      <td>1.0094</td>\n",
       "      <td>0.8950</td>\n",
       "      <td>0.8701</td>\n",
       "      <td>1.0847</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              Район   Год  Динамика_Количества_Работников  \\\n",
       "0       Арзамасский  2019                          0.9648   \n",
       "1      Балахнинский  2019                          1.0125   \n",
       "2       Богородский  2019                          0.8421   \n",
       "3  Большеболдинский  2019                          0.7951   \n",
       "4           Борский  2019                          0.8389   \n",
       "\n",
       "   Динамика_Величина_КРС  Динамика_Мощности_Техники  \\\n",
       "0                 0.8773                     1.0907   \n",
       "1                 0.9695                     1.0091   \n",
       "2                 0.9707                     1.0060   \n",
       "3                 0.8774                     0.8965   \n",
       "4                 0.7987                     0.8097   \n",
       "\n",
       "   Динамика_Количества_Техники  Динамика_Основных_Средств  \\\n",
       "0                       1.0638                     1.3537   \n",
       "1                       0.9500                     1.0919   \n",
       "2                       0.9636                     1.0791   \n",
       "3                       0.8611                     0.9460   \n",
       "4                       1.0094                     0.8950   \n",
       "\n",
       "   Динамика_Посевных_Площадей  Динамика_Себестоимости_Произведенной_Продукции  \n",
       "0                      1.0871                                          1.4476  \n",
       "1                      1.3471                                          1.0623  \n",
       "2                      0.7955                                          1.0837  \n",
       "3                      0.9489                                          0.7530  \n",
       "4                      0.8701                                          1.0847  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Столбцы:\n",
      "- Район\n",
      "- Год\n",
      "- Динамика_Количества_Работников\n",
      "- Динамика_Величина_КРС\n",
      "- Динамика_Мощности_Техники\n",
      "- Динамика_Количества_Техники\n",
      "- Динамика_Основных_Средств\n",
      "- Динамика_Посевных_Площадей\n",
      "- Динамика_Себестоимости_Произведенной_Продукции\n"
     ]
    }
   ],
   "source": [
    "\n",
    "df = pd.read_csv(\"Reproduction_Agriculture_Resources.csv\", encoding=\"cp1251\", sep=\";\")\n",
    "df.columns = df.columns.str.strip()\n",
    "\n",
    "print(\"Размер исходного датасета:\", df.shape)\n",
    "display(df.head())\n",
    "print(\"\\nСтолбцы:\")\n",
    "for col in df.columns:\n",
    "    print(\"-\", col)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "372fcdd0",
   "metadata": {},
   "source": [
    "## 3. Отбор данных за 2008 год"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "2ef08fb2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Размер выборки за 2008 год: (47, 9)\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>Район</th>\n",
       "      <th>Год</th>\n",
       "      <th>Динамика_Количества_Работников</th>\n",
       "      <th>Динамика_Величина_КРС</th>\n",
       "      <th>Динамика_Мощности_Техники</th>\n",
       "      <th>Динамика_Количества_Техники</th>\n",
       "      <th>Динамика_Основных_Средств</th>\n",
       "      <th>Динамика_Посевных_Площадей</th>\n",
       "      <th>Динамика_Себестоимости_Произведенной_Продукции</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Ардатовский</td>\n",
       "      <td>2008</td>\n",
       "      <td>0.8768</td>\n",
       "      <td>0.9522</td>\n",
       "      <td>1.0068</td>\n",
       "      <td>0.9836</td>\n",
       "      <td>1.1812</td>\n",
       "      <td>1.0165</td>\n",
       "      <td>1.2164</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Арзамасский</td>\n",
       "      <td>2008</td>\n",
       "      <td>0.7997</td>\n",
       "      <td>0.8506</td>\n",
       "      <td>0.9274</td>\n",
       "      <td>0.9534</td>\n",
       "      <td>1.8609</td>\n",
       "      <td>0.9481</td>\n",
       "      <td>1.2785</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Балахнинский</td>\n",
       "      <td>2008</td>\n",
       "      <td>1.8087</td>\n",
       "      <td>1.0080</td>\n",
       "      <td>1.1952</td>\n",
       "      <td>1.1176</td>\n",
       "      <td>1.2149</td>\n",
       "      <td>1.0986</td>\n",
       "      <td>1.8307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Богородский</td>\n",
       "      <td>2008</td>\n",
       "      <td>0.8784</td>\n",
       "      <td>0.8904</td>\n",
       "      <td>0.8281</td>\n",
       "      <td>0.8857</td>\n",
       "      <td>1.2082</td>\n",
       "      <td>0.9265</td>\n",
       "      <td>1.2655</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Большеболдинский</td>\n",
       "      <td>2008</td>\n",
       "      <td>1.0810</td>\n",
       "      <td>1.0626</td>\n",
       "      <td>1.1745</td>\n",
       "      <td>1.1186</td>\n",
       "      <td>1.6366</td>\n",
       "      <td>1.0380</td>\n",
       "      <td>1.4914</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              Район   Год  Динамика_Количества_Работников  \\\n",
       "0       Ардатовский  2008                          0.8768   \n",
       "1       Арзамасский  2008                          0.7997   \n",
       "2      Балахнинский  2008                          1.8087   \n",
       "3       Богородский  2008                          0.8784   \n",
       "4  Большеболдинский  2008                          1.0810   \n",
       "\n",
       "   Динамика_Величина_КРС  Динамика_Мощности_Техники  \\\n",
       "0                 0.9522                     1.0068   \n",
       "1                 0.8506                     0.9274   \n",
       "2                 1.0080                     1.1952   \n",
       "3                 0.8904                     0.8281   \n",
       "4                 1.0626                     1.1745   \n",
       "\n",
       "   Динамика_Количества_Техники  Динамика_Основных_Средств  \\\n",
       "0                       0.9836                     1.1812   \n",
       "1                       0.9534                     1.8609   \n",
       "2                       1.1176                     1.2149   \n",
       "3                       0.8857                     1.2082   \n",
       "4                       1.1186                     1.6366   \n",
       "\n",
       "   Динамика_Посевных_Площадей  Динамика_Себестоимости_Произведенной_Продукции  \n",
       "0                      1.0165                                          1.2164  \n",
       "1                      0.9481                                          1.2785  \n",
       "2                      1.0986                                          1.8307  \n",
       "3                      0.9265                                          1.2655  \n",
       "4                      1.0380                                          1.4914  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "data_2008 = df[df[\"Год\"] == 2008].copy()\n",
    "\n",
    "feature_cols = [\n",
    "    \"Динамика_Количества_Работников\",\n",
    "    \"Динамика_Величина_КРС\",\n",
    "    \"Динамика_Мощности_Техники\",\n",
    "    \"Динамика_Количества_Техники\",\n",
    "    \"Динамика_Основных_Средств\",\n",
    "    \"Динамика_Посевных_Площадей\",\n",
    "    \"Динамика_Себестоимости_Произведенной_Продукции\"\n",
    "]\n",
    "\n",
    "data_2008 = data_2008[[\"Район\", \"Год\"] + feature_cols].dropna().reset_index(drop=True)\n",
    "\n",
    "print(\"Размер выборки за 2008 год:\", data_2008.shape)\n",
    "display(data_2008.head())\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2c91a552",
   "metadata": {},
   "source": [
    "## 4. Подготовка признаков"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "7e8cad28",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Форма матрицы признаков: (47, 7)\n"
     ]
    }
   ],
   "source": [
    "\n",
    "X_raw = data_2008[feature_cols].copy()\n",
    "scaler = StandardScaler()\n",
    "X = scaler.fit_transform(X_raw)\n",
    "\n",
    "print(\"Форма матрицы признаков:\", X.shape)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a562737d",
   "metadata": {},
   "source": [
    "\n",
    "## 5. Псевдо-разметка аномалий для оценки качества\n",
    "\n",
    "В датасете нет готовой истинной разметки аномалий, поэтому для расчёта метрик\n",
    "используется **IQR-разметка**: объект считается аномальным, если хотя бы по одному\n",
    "признаку выходит за границы `Q1 - 1.5*IQR` или `Q3 + 1.5*IQR`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "25454aec",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Количество псевдо-аномалий: 12\n",
      "Доля псевдо-аномалий: 0.2553\n"
     ]
    }
   ],
   "source": [
    "\n",
    "Q1 = X_raw.quantile(0.25)\n",
    "Q3 = X_raw.quantile(0.75)\n",
    "IQR = Q3 - Q1\n",
    "\n",
    "lower = Q1 - 1.5 * IQR\n",
    "upper = Q3 + 1.5 * IQR\n",
    "\n",
    "y_true = ((X_raw < lower) | (X_raw > upper)).any(axis=1).astype(int)\n",
    "\n",
    "print(\"Количество псевдо-аномалий:\", int(y_true.sum()))\n",
    "print(\"Доля псевдо-аномалий:\", round(float(y_true.mean()), 4))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e875f301",
   "metadata": {},
   "source": [
    "## 6. Поиск аномалий несколькими методами"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "04b248af",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Методы выполнены: ['Isolation Forest', 'LOF', 'One-Class SVM', 'Elliptic Envelope', 'DBSCAN', 'KNN Distance', 'PCA Reconstruction']\n"
     ]
    }
   ],
   "source": [
    "\n",
    "predictions = {}\n",
    "\n",
    "# 1. Isolation Forest\n",
    "iso = IsolationForest(contamination=0.1, random_state=42)\n",
    "predictions[\"Isolation Forest\"] = (iso.fit_predict(X) == -1).astype(int)\n",
    "\n",
    "# 2. Local Outlier Factor\n",
    "lof = LocalOutlierFactor(n_neighbors=10, contamination=0.1)\n",
    "predictions[\"LOF\"] = (lof.fit_predict(X) == -1).astype(int)\n",
    "\n",
    "# 3. One-Class SVM\n",
    "ocsvm = OneClassSVM(kernel=\"rbf\", gamma=\"scale\", nu=0.1)\n",
    "predictions[\"One-Class SVM\"] = (ocsvm.fit_predict(X) == -1).astype(int)\n",
    "\n",
    "# 4. Elliptic Envelope\n",
    "ee = EllipticEnvelope(contamination=0.1, random_state=42)\n",
    "predictions[\"Elliptic Envelope\"] = (ee.fit_predict(X) == -1).astype(int)\n",
    "\n",
    "# 5. DBSCAN\n",
    "db = DBSCAN(eps=2.2, min_samples=5)\n",
    "db_labels = db.fit_predict(X)\n",
    "predictions[\"DBSCAN\"] = (db_labels == -1).astype(int)\n",
    "\n",
    "# 6. KNN distance\n",
    "knn = NearestNeighbors(n_neighbors=5)\n",
    "knn.fit(X)\n",
    "distances, _ = knn.kneighbors(X)\n",
    "knn_score = distances[:, -1]\n",
    "knn_threshold = np.percentile(knn_score, 90)\n",
    "predictions[\"KNN Distance\"] = (knn_score >= knn_threshold).astype(int)\n",
    "\n",
    "# 7. PCA reconstruction error\n",
    "pca = PCA(n_components=min(3, X.shape[1]))\n",
    "X_pca = pca.fit_transform(X)\n",
    "X_rec = pca.inverse_transform(X_pca)\n",
    "pca_error = np.mean((X - X_rec) ** 2, axis=1)\n",
    "pca_threshold = np.percentile(pca_error, 90)\n",
    "predictions[\"PCA Reconstruction\"] = (pca_error >= pca_threshold).astype(int)\n",
    "\n",
    "print(\"Методы выполнены:\", list(predictions.keys()))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cbb8af67",
   "metadata": {},
   "source": [
    "## 7. Метрики качества"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "3eec77c8",
   "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>Метод</th>\n",
       "      <th>Precision</th>\n",
       "      <th>Recall</th>\n",
       "      <th>F1-score</th>\n",
       "      <th>Найдено аномалий</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Isolation Forest</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.416667</td>\n",
       "      <td>0.588235</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>LOF</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.416667</td>\n",
       "      <td>0.588235</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>KNN Distance</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.416667</td>\n",
       "      <td>0.588235</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Elliptic Envelope</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.470588</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>PCA Reconstruction</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.470588</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>One-Class SVM</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.444444</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>DBSCAN</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.400000</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                Метод  Precision    Recall  F1-score  Найдено аномалий\n",
       "0    Isolation Forest   1.000000  0.416667  0.588235                 5\n",
       "1                 LOF   1.000000  0.416667  0.588235                 5\n",
       "2        KNN Distance   1.000000  0.416667  0.588235                 5\n",
       "3   Elliptic Envelope   0.800000  0.333333  0.470588                 5\n",
       "4  PCA Reconstruction   0.800000  0.333333  0.470588                 5\n",
       "5       One-Class SVM   0.666667  0.333333  0.444444                 6\n",
       "6              DBSCAN   1.000000  0.250000  0.400000                 3"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "results = []\n",
    "\n",
    "for method, pred in predictions.items():\n",
    "    results.append({\n",
    "        \"Метод\": method,\n",
    "        \"Precision\": precision_score(y_true, pred, zero_division=0),\n",
    "        \"Recall\": recall_score(y_true, pred, zero_division=0),\n",
    "        \"F1-score\": f1_score(y_true, pred, zero_division=0),\n",
    "        \"Найдено аномалий\": int(pred.sum())\n",
    "    })\n",
    "\n",
    "results_df = pd.DataFrame(results).sort_values([\"F1-score\", \"Precision\", \"Recall\"], ascending=False).reset_index(drop=True)\n",
    "display(results_df)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "664f5e6a",
   "metadata": {},
   "source": [
    "## 8. График сравнения методов"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "45ccc701",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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iRNjjI8fP14Wi0XVq1d/6vphYWGS9Ew98TzqeVy1atWULFky3b59Ww0bNoxzmYYNGyoqKkpDhw6N9dyjR4+eGNb+l1WrVunKlSv2x3v27NFvv/0Wq/749G60YsWKKVmyZLJarfruu+904cKFGGcjRn+PP/79HRkZqcmTJz91u/F5nQAAeJFwphQAAM/Z66+/rgULFqhRo0bKmzevWrRooQIFCigyMlK//vqrli5dGuNsJUkqUKCAqlatqi5dusjDw8P+y+jgwYPty9SqVUtz585VypQplS9fPu3atUu//PKL0qRJE2cdq1atUtq0ae2X723fvl3dunVL8PFE/yJdvXp15c+fX61atVLmzJl15coVbdmyRT4+PrEuAYyvy5cvy93d/amTSPv4+Ojbb7/VRx99pGLFiqlx48ZKly6dLl68qHXr1qlcuXKxgpCnGTp0qHr27PnEOaGS+njd3Nw0atQotWrVShUrVlSTJk10/fp1TZgwQX5+furevbsk6fr16/r666+1dOlSVahQQcuXL7dvI/qMmV27dqlYsWIqVKiQateurXfeeUdffPGFLly4oMKFC+vnn3/W6tWr1a1bN/sZX9EOHz6sefPmyTAMnT17Vl9//bWyZMnyn2dkxVdC63kaFxcXHT9+XIZhKFmyZHEuU7FiRbVr104jRozQwYMHVaVKFbm5uen06dNaunSpJkyYoA8//DDBx5ErVy699dZb6tChgyIiIhQYGKg0adKoV69eMZaLT+/GpUCBAurdu7dGjhypxo0bq1ChQipbtqxSp04tf39/denSRRaLRXPnzo0VQv9bfF4nAABeJIRSAACY4P3339fhw4c1ZswYrV69Wt9++608PDxUqFAhffXVV2rTpk2M5StWrKgyZcpo8ODBunjxovLly6fZs2erUKFC9mUmTJggFxcXzZ8/X+Hh4SpXrpx++eUXVa1aNc4aosMOd3d3ZcuWTQMHDlS/fv2e6Xjefvtt7dq1S0OHDtXEiRN1//59ZciQQaVLl1a7du2eaZvROnTo8J/zJzVt2lSZMmXSyJEjNWbMGEVERChz5swqX768WrVqlaD9ubu7x7i0MC5JfbwtW7aUt7e3Ro4cqd69eytZsmT64IMPNGrUKPuljcePH9fw4cMlSdu2bdO2bdtibWfatGnKmDGjChUqJKvVqh9++EEDBw7U4sWLNWvW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9eabb+rBgwc6efKkpk6dKn9/f61YsUIDBgzQ7du35efnpwwZMmjJkiVyc3Pjj0NIlK1bt6p69eoaP3688ubNq9u3b6t3795KkSKFdu7cKQ8PD82ZM0dDhgxRzZo1NXbsWM5OQZLZsWOHKlasqCVLlqh+/fp68OCB5s2bp8mTJ6tgwYKaOXOm3NzcdPPmTaVLl87R5cJJRb+PhoSEaM6cOZo6dapKlSqlGTNm2JcJCQnRmTNntHnzZlWrVk358+d3YMWvJi7fc2LRH4gPHTqkGzdu6PLly/L399fy5cu1ZMkSPXr0SHXr1pW7u7tcXV2VK1cueXl5yWazyWKx8JdZJNqff/6pmjVr6uOPP9bQoUPl4uKiR48e6fDhw2rXrp3at2+vZcuW6X//+586duwoV1dXderUSa6urqpTp46jy4cTOX36tH1uvOjLqaIDqSNHjih79ux8CEGSin4PPX36tM6dO6dNmzapQIECslgs+uKLL9S2bVulTJlS9erV01tvvaWIiAi5u7srffr0slgsevToEfM5It6OHz+uvHnzxhjbsWOHqlatar80VJKKFi2qd999V40bN9bKlSvl7+8vT09PlSpVikAKScYwDL311ltq1qyZJk+erPLlyyt9+vRq0aKFLBaLpkyZoo8++khz585VunTpCOCRZE6dOqVDhw4pf/78ypcvn72vUqRIoZYtW0qSZsyYoVatWmnWrFn254oWLcrZog7E3fecWPQcKjVr1lRAQIAGDx6sggULauXKlWrYsKGaNm0qb29vBQcHq3///lq9erU++eQTWa1WAikkiR9++EH58+fXgAED5OLiIsMw5OrqqmLFimnRokVKmTKlPv/8c0lS8eLF1bZtWzVs2FAFChRwcOVwFtE/ywoVKqQtW7bo7Nmzslqt9jvw3b17VwsWLNChQ4ccWSac1Pz581WnTh1dvnxZWbNmlYuLi1xdXTVq1Ch98skn6tixo27duqX06dMra9as8vX1lcVisf+sBOJj0aJFqlSpkkJCQmKMnz9/XhcuXLA/fvTokbJnz65Bgwbp1KlT9ucaNWqkHDlymFgxnInNZov1OPq9t3Llyjp16pT9To+enp766KOP1L59e124cEH16tXTo0ePCKSQJEJCQvT+++/rq6++UuPGjTVkyBAdPHjQ/nzy5MnVokULtW7dWgcOHFDbtm0dVyxiIJRyYnv27FG7du305Zdf6tdff9XOnTt1/PhxXblyxb7Mpk2b1LRpUy1atEibN29Wnjx5HFgxnM2BAwcUFRUlLy+vWPOi5MiRQ127dtW+ffu0b98+Sf8EU2PGjNHrr7/uqJLxkosOmy5cuKCjR48qODhYktSiRQsVLlxYTZs21ZkzZ2SxWPTw4UONHTtW8+fP505TSHI2m00hISFKnjy5zp07J1dXV1mtVkVEREiSWrdubb9d+r/xhyEkROPGjfXbb78pRYoUunXrln28YcOGun//vhYsWCBJ9qAzderUevDgAUEAkoTVatX169ftwZPVarUHVS1atFC2bNk0aNAg+/LRwVTTpk11//59Xb9+3RFlwwlFz1v75ptvau7cuQoKCtJnn32mDz/8UEePHtXt27fl4+OjFi1aqH379vrxxx/16aefOrpsiFDKqR09elTlypWTv7+/Tpw4ofLly6t169bq3LmzJOn+/fsqXry4GjdurJ9//plTFpHkLBaLrl69av/341PYWa1WVa5cWREREbp9+7Z93MPDw/Q64TwsFouWLVumd999V+XLl1e9evU0b948ZcqUScOGDVPq1KlVpEgRvfPOO6pUqZKmTp2q1atXK1u2bI4uHS+5f58tYLVa9fHHH6tbt27y8fHRhx9+qODgYPvPOG9vb0lSZGSk6bXCeUT3XbZs2XT06FFlzZrVPndenjx5VKRIEc2fP1/z5s2T9M9cejt27FDatGm5wx6SxP3791W0aFHVrl1bn376qf7++297+C5Jbdu21dmzZ3XgwAFJ/8zx4+npqbZt22rlypXcZRRJwmazyd3dXaNGjdIff/whHx8fLVq0SOPHj5eLi4veeecdNWvWTD/99JNSpEihdu3aadiwYerevbujS4cIpZxK9C/8e/fulSRdvHhRVqtVDx8+VJUqVfTee+9p6tSpkqSFCxdq0qRJSpkypVq2bKmcOXM6rG44n+heLF++vK5du6bJkydLkn2eFOmfN49bt24pX758XDaAJHPq1CkNHDhQ3bt315IlS+Tj46PJkydr0qRJKl++vJYtW6YxY8aoZMmSqlOnjnbt2kUgj0SLnqdMkvbv36+9e/fq4MGDcnd3V+PGjTVs2DD9/fffqlKlirZt26YNGzbos88+k6+vr8qUKePg6vGyiQ6iHu+7O3fuKG/evKpfv778/f21fv16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mxu3b98mKioK+GPa3uMmTJjAypUr8fPzY8uWLXh5eb30WkVERCRl6C5RREREROzKYrFgMpm4e/cu58+f5+zZswBUr14db29vhg0bxvXr1zGbzSQmJj7x2mvXrpEuXTrc3NwUSImIiLxiFEqJiIiIiN1Y+0KFh4fTsGFDqlWrRq1atejTpw8+Pj74+/uzY8cOhg8fTkxMDE5OTgDcv3+fYcOGsX79ej788EM7n4WIiIg8DzV4EBERERG7sAZSx48fp0qVKrRr146PP/6YLVu2sGLFCrJnz86IESO4dOkSoaGh7Nq1i27duhEVFcWVK1fYtm0bW7dupUCBAvY+FREREXkOWn1PREREROzm7NmzvPPOO3zyySeMHDkSgLi4OOrXr8+DBw84ePAgAHPnzmX9+vUcO3aMrFmzUqVKFXr06EGhQoXsWb6IiIi8AI2UEhERERG7sFgszJ8/H1dXV7Jly2bb7uLiQvXq1dmwYQO3b9/Gw8ODTp060alTJ2JiYvD09CQpKUmrOoqIiLzi9EkuIiIiInZhNpsJCAggNjaWZcuWcf/+fQYPHszNmzcZP348w4YNw8PD44nXZM2aFQAHBwd7lCwiIiIpSNP3RERERMSurl27RnBwMEePHqVy5cosX76cxo0bM2XKFAAMw8BkMtm5ShEREUlpCqVERERExO6uXr1KSEgIa9asIVeuXBw+fBhA0/RERETSMLO9CxARERER8fb2ZujQoTRr1gwHBwfGjRsHgKOjIxaLxc7ViYiIyMugkVIiIiIi8j/DOpXv2LFj+Pn58dlnn9m7JBEREXlJNFJKRERERP5n5MiRgyFDhlCwYEH27dvHrVu37F2SiIiIvCQaKSUiIiIi/3OuX78OgJeXl50rERERkZdFoZSIiIiIiIiIiKQ6Td8TEREREREREZFUp1BKRERERERERERSnUIpERERERERERFJdQqlREREREREREQk1SmUEhERERERERGRVKdQSkREREREREREUp1CKRERERERERERSXUKpUREREREREREJNUplBIRERERERERkVSnUEpEREQkBfn7+2MymejWrdtT+3r06IHJZMLf3z/1CxMRERH5H6NQSkRERCSF5c6dmxUrVhAXF2fbFh8fz7Jly8iTJ48dKxMRERH536FQSkRERCSFlSpVity5cxMaGmrbFhoaSp48eShZsqRtm8ViYcyYMeTPnx8XFxeKFy/O6tWrAbh48SImk+kv/7t48SIAO3fupFy5cjg7O+Pt7U1QUBBJSUlP1LNjx46nXu/u7v7S/x1ERERE/hOFUiIiIiIvQYcOHfjqq69sP8+fP5+PPvroiWPGjBnDokWLmDlzJj///DN9+vShTZs27Ny5k9y5c3P16lWuXr3KoUOHADh06JBtW+7cubl8+TL16tWjbNmyHD9+nC+//JJ58+YxevToP60pMjKSq1evMnny5Jd23iIiIiJ/l6O9CxARERFJi9q0acOgQYP49ddfAdi7dy8rVqxgx44dADx8+JCQkBC2bdtGxYoVAfD19WXPnj3MmjWLatWqkSNHDuDR1D8AT09P2zaAGTNmkDt3bqZNm4bJZOKtt97iypUrDBw4kOHDh2M2m23/L4BcuXKRMWNGMmfOnCr/BiIiIiL/iUIpERERkZfA09OT+vXrs2DBAgzDoH79+mTLls22/+zZs8TGxlKrVq0nXpeQkPDEFL//JCIigooVK2IymWzbKleuzP3794mOjrb1r7p16xaOjo5kyJAhBc5MREREJGUolBIRERF5STp06EBAQAAA06dPf2Lf/fv3AdiwYQO5cuV6Yp+zs3OK1nH+/Hny5s37RHglIiIiYm8KpURERERekjp16pCQkIDJZKJ27dpP7CtcuDDOzs5ERUVRrVq15/r9b7/9NmvWrMEwDFvgtHfvXlxdXfHx8bEdt3PnTqpWrfr8JyIiIiLyEiiUEhEREXlJHBwciIiIsP39ca6urvTv358+ffpgsVioUqUK9+7dY+/evbi5udG+ffv/+vs//vhjJk+eTGBgIAEBAURGRvLpp5/St29fzGYzCQkJfPvtt2zfvp01a9Zw7do1AO7du4dhGMTExODp6ZnyJy4iIiLyNyiUEhEREXmJ3Nzc/nLfqFGj8PT0ZMyYMZw/fx53d3dKlSrF4MGD/9bvzpUrFxs3buSTTz6hePHieHh40LFjR4YOHQrAvn37aNasGQCNGzd+6vVly5bl4sWLz35SIiIiIinAZBiGYe8iRERERCTl7dixgxEjRthW/Hvc3bt3KVGihEIpERERsRuzvQsQERERkZcjXbp0eHh4/Ok+s9msqXsiIiJiVxopJSIiIiIiIiIiqU4jpUREREREREREJNUplBIRERERERERkVSnUEpERERERERERFKdQikREREREREREUl1CqVERERERERERCTVKZQSEREREREREZFUp1BKRERERERERERSnUIpERERERERERFJdQqlREREREREREQk1f0fc3Ev51nBQsMAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1200x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "plot_df = results_df.set_index(\"Метод\")[[\"Precision\", \"Recall\", \"F1-score\"]]\n",
    "plot_df.plot(kind=\"bar\", figsize=(12, 6))\n",
    "plt.title(\"Сравнение методов по метрикам\")\n",
    "plt.ylabel(\"Значение метрики\")\n",
    "plt.xticks(rotation=45, ha=\"right\")\n",
    "plt.grid(axis=\"y\", alpha=0.3)\n",
    "plt.tight_layout()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4c65de53",
   "metadata": {},
   "source": [
    "## 9. Отбор 4 лучших методов"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a95f7430",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Лучшие методы: ['Isolation Forest', 'LOF', 'KNN Distance', 'Elliptic Envelope']\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>Метод</th>\n",
       "      <th>Precision</th>\n",
       "      <th>Recall</th>\n",
       "      <th>F1-score</th>\n",
       "      <th>Найдено аномалий</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Isolation Forest</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.416667</td>\n",
       "      <td>0.588235</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>LOF</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.416667</td>\n",
       "      <td>0.588235</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>KNN Distance</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.416667</td>\n",
       "      <td>0.588235</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Elliptic Envelope</td>\n",
       "      <td>0.8</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.470588</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               Метод  Precision    Recall  F1-score  Найдено аномалий\n",
       "0   Isolation Forest        1.0  0.416667  0.588235                 5\n",
       "1                LOF        1.0  0.416667  0.588235                 5\n",
       "2       KNN Distance        1.0  0.416667  0.588235                 5\n",
       "3  Elliptic Envelope        0.8  0.333333  0.470588                 5"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "top_methods = results_df[\"Метод\"].head(4).tolist()\n",
    "print(\"Лучшие методы:\", top_methods)\n",
    "\n",
    "top_results = results_df[results_df[\"Метод\"].isin(top_methods)].copy()\n",
    "display(top_results)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04e93b11",
   "metadata": {},
   "source": [
    "\n",
    "## 10. Консенсусное решение\n",
    "\n",
    "Объект считается консенсусной аномалией, если его отметили как аномальный\n",
    "**не менее 3 из 4 лучших методов**.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "8327329a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Количество консенсусных аномалий: 4\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>Район</th>\n",
       "      <th>Год</th>\n",
       "      <th>Динамика_Количества_Работников</th>\n",
       "      <th>Динамика_Величина_КРС</th>\n",
       "      <th>Динамика_Мощности_Техники</th>\n",
       "      <th>Динамика_Количества_Техники</th>\n",
       "      <th>Динамика_Основных_Средств</th>\n",
       "      <th>Динамика_Посевных_Площадей</th>\n",
       "      <th>Динамика_Себестоимости_Произведенной_Продукции</th>\n",
       "      <th>votes</th>\n",
       "      <th>consensus_anomaly</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Балахнинский</td>\n",
       "      <td>2008</td>\n",
       "      <td>1.8087</td>\n",
       "      <td>1.0080</td>\n",
       "      <td>1.1952</td>\n",
       "      <td>1.1176</td>\n",
       "      <td>1.2149</td>\n",
       "      <td>1.0986</td>\n",
       "      <td>1.8307</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>Первомайский</td>\n",
       "      <td>2008</td>\n",
       "      <td>1.5438</td>\n",
       "      <td>1.3573</td>\n",
       "      <td>0.9347</td>\n",
       "      <td>0.9643</td>\n",
       "      <td>5.6055</td>\n",
       "      <td>1.2508</td>\n",
       "      <td>3.0518</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>Семеновский</td>\n",
       "      <td>2008</td>\n",
       "      <td>0.2776</td>\n",
       "      <td>0.1935</td>\n",
       "      <td>0.2088</td>\n",
       "      <td>0.1915</td>\n",
       "      <td>0.2029</td>\n",
       "      <td>0.1459</td>\n",
       "      <td>0.2434</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>г.о.г.Выкса</td>\n",
       "      <td>2008</td>\n",
       "      <td>1.3452</td>\n",
       "      <td>1.0606</td>\n",
       "      <td>1.0762</td>\n",
       "      <td>0.9865</td>\n",
       "      <td>1.4471</td>\n",
       "      <td>1.0618</td>\n",
       "      <td>1.5896</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Район   Год  Динамика_Количества_Работников  Динамика_Величина_КРС  \\\n",
       "2   Балахнинский  2008                          1.8087                 1.0080   \n",
       "31  Первомайский  2008                          1.5438                 1.3573   \n",
       "34   Семеновский  2008                          0.2776                 0.1935   \n",
       "15   г.о.г.Выкса  2008                          1.3452                 1.0606   \n",
       "\n",
       "    Динамика_Мощности_Техники  Динамика_Количества_Техники  \\\n",
       "2                      1.1952                       1.1176   \n",
       "31                     0.9347                       0.9643   \n",
       "34                     0.2088                       0.1915   \n",
       "15                     1.0762                       0.9865   \n",
       "\n",
       "    Динамика_Основных_Средств  Динамика_Посевных_Площадей  \\\n",
       "2                      1.2149                      1.0986   \n",
       "31                     5.6055                      1.2508   \n",
       "34                     0.2029                      0.1459   \n",
       "15                     1.4471                      1.0618   \n",
       "\n",
       "    Динамика_Себестоимости_Произведенной_Продукции  votes  consensus_anomaly  \n",
       "2                                           1.8307      4                  1  \n",
       "31                                          3.0518      4                  1  \n",
       "34                                          0.2434      4                  1  \n",
       "15                                          1.5896      3                  1  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "top_pred_matrix = pd.DataFrame({method: predictions[method] for method in top_methods})\n",
    "top_pred_matrix[\"votes\"] = top_pred_matrix.sum(axis=1)\n",
    "\n",
    "consensus_threshold = 3\n",
    "consensus_flag = (top_pred_matrix[\"votes\"] >= consensus_threshold).astype(int)\n",
    "\n",
    "consensus_objects = data_2008.copy()\n",
    "consensus_objects[\"votes\"] = top_pred_matrix[\"votes\"]\n",
    "consensus_objects[\"consensus_anomaly\"] = consensus_flag\n",
    "\n",
    "print(\"Количество консенсусных аномалий:\", int(consensus_flag.sum()))\n",
    "display(consensus_objects[consensus_objects[\"consensus_anomaly\"] == 1].sort_values(\"votes\", ascending=False))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73b692e9",
   "metadata": {},
   "source": [
    "## 11. Наиболее отличающиеся объекты"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "0bc9f289",
   "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>Район</th>\n",
       "      <th>votes</th>\n",
       "      <th>integral_deviation</th>\n",
       "      <th>Динамика_Количества_Работников</th>\n",
       "      <th>Динамика_Величина_КРС</th>\n",
       "      <th>Динамика_Мощности_Техники</th>\n",
       "      <th>Динамика_Количества_Техники</th>\n",
       "      <th>Динамика_Основных_Средств</th>\n",
       "      <th>Динамика_Посевных_Площадей</th>\n",
       "      <th>Динамика_Себестоимости_Произведенной_Продукции</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>Семеновский</td>\n",
       "      <td>4</td>\n",
       "      <td>28.634101</td>\n",
       "      <td>0.2776</td>\n",
       "      <td>0.1935</td>\n",
       "      <td>0.2088</td>\n",
       "      <td>0.1915</td>\n",
       "      <td>0.2029</td>\n",
       "      <td>0.1459</td>\n",
       "      <td>0.2434</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>Первомайский</td>\n",
       "      <td>4</td>\n",
       "      <td>19.081543</td>\n",
       "      <td>1.5438</td>\n",
       "      <td>1.3573</td>\n",
       "      <td>0.9347</td>\n",
       "      <td>0.9643</td>\n",
       "      <td>5.6055</td>\n",
       "      <td>1.2508</td>\n",
       "      <td>3.0518</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Балахнинский</td>\n",
       "      <td>4</td>\n",
       "      <td>9.646032</td>\n",
       "      <td>1.8087</td>\n",
       "      <td>1.0080</td>\n",
       "      <td>1.1952</td>\n",
       "      <td>1.1176</td>\n",
       "      <td>1.2149</td>\n",
       "      <td>1.0986</td>\n",
       "      <td>1.8307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>г.о.г.Выкса</td>\n",
       "      <td>3</td>\n",
       "      <td>5.223509</td>\n",
       "      <td>1.3452</td>\n",
       "      <td>1.0606</td>\n",
       "      <td>1.0762</td>\n",
       "      <td>0.9865</td>\n",
       "      <td>1.4471</td>\n",
       "      <td>1.0618</td>\n",
       "      <td>1.5896</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Район  votes  integral_deviation  Динамика_Количества_Работников  \\\n",
       "34   Семеновский      4           28.634101                          0.2776   \n",
       "31  Первомайский      4           19.081543                          1.5438   \n",
       "2   Балахнинский      4            9.646032                          1.8087   \n",
       "15   г.о.г.Выкса      3            5.223509                          1.3452   \n",
       "\n",
       "    Динамика_Величина_КРС  Динамика_Мощности_Техники  \\\n",
       "34                 0.1935                     0.2088   \n",
       "31                 1.3573                     0.9347   \n",
       "2                  1.0080                     1.1952   \n",
       "15                 1.0606                     1.0762   \n",
       "\n",
       "    Динамика_Количества_Техники  Динамика_Основных_Средств  \\\n",
       "34                       0.1915                     0.2029   \n",
       "31                       0.9643                     5.6055   \n",
       "2                        1.1176                     1.2149   \n",
       "15                       0.9865                     1.4471   \n",
       "\n",
       "    Динамика_Посевных_Площадей  Динамика_Себестоимости_Произведенной_Продукции  \n",
       "34                      0.1459                                          0.2434  \n",
       "31                      1.2508                                          3.0518  \n",
       "2                       1.0986                                          1.8307  \n",
       "15                      1.0618                                          1.5896  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "z_scores = pd.DataFrame(np.abs(X), columns=feature_cols)\n",
    "consensus_ranked = consensus_objects[consensus_objects[\"consensus_anomaly\"] == 1].copy()\n",
    "\n",
    "if len(consensus_ranked) > 0:\n",
    "    consensus_ranked[\"integral_deviation\"] = z_scores.loc[consensus_ranked.index].sum(axis=1).values\n",
    "    consensus_ranked = consensus_ranked.sort_values([\"votes\", \"integral_deviation\"], ascending=[False, False])\n",
    "    display(consensus_ranked[[\"Район\", \"votes\", \"integral_deviation\"] + feature_cols].head(10))\n",
    "else:\n",
    "    print(\"Консенсусные аномалии не найдены.\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d2b38f5",
   "metadata": {},
   "source": [
    "## 12. Краткое описание консенсусных аномалий"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "bd57ab1c",
   "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>Район</th>\n",
       "      <th>Голоса</th>\n",
       "      <th>Описание</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Семеновский</td>\n",
       "      <td>4</td>\n",
       "      <td>Динамика_Посевных_Площадей: ниже среднего; Дин...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Первомайский</td>\n",
       "      <td>4</td>\n",
       "      <td>Динамика_Основных_Средств: выше среднего; Дина...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Балахнинский</td>\n",
       "      <td>4</td>\n",
       "      <td>Динамика_Количества_Работников: выше среднего;...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>г.о.г.Выкса</td>\n",
       "      <td>3</td>\n",
       "      <td>Динамика_Количества_Работников: выше среднего;...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Район  Голоса                                           Описание\n",
       "0   Семеновский       4  Динамика_Посевных_Площадей: ниже среднего; Дин...\n",
       "1  Первомайский       4  Динамика_Основных_Средств: выше среднего; Дина...\n",
       "2  Балахнинский       4  Динамика_Количества_Работников: выше среднего;...\n",
       "3   г.о.г.Выкса       3  Динамика_Количества_Работников: выше среднего;..."
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "def describe_object(row, cols, max_features=3):\n",
    "    vals = row[cols]\n",
    "    avg = X_raw[cols].mean()\n",
    "    std = X_raw[cols].std(ddof=0).replace(0, 1)\n",
    "    z = ((vals - avg) / std).abs().sort_values(ascending=False)\n",
    "\n",
    "    top_cols = z.head(max_features).index.tolist()\n",
    "    parts = []\n",
    "    for c in top_cols:\n",
    "        direction = \"выше\" if row[c] > avg[c] else \"ниже\"\n",
    "        parts.append(f\"{c}: {direction} среднего\")\n",
    "    return \"; \".join(parts)\n",
    "\n",
    "if len(consensus_ranked) > 0:\n",
    "    descriptions = []\n",
    "    for _, row in consensus_ranked.head(10).iterrows():\n",
    "        descriptions.append({\n",
    "            \"Район\": row[\"Район\"],\n",
    "            \"Голоса\": int(row[\"votes\"]),\n",
    "            \"Описание\": describe_object(row, feature_cols)\n",
    "        })\n",
    "    descriptions_df = pd.DataFrame(descriptions)\n",
    "    display(descriptions_df)\n",
    "else:\n",
    "    print(\"Нет объектов для описания.\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a6d5751b",
   "metadata": {},
   "source": [
    "## 13. Визуализация консенсусных аномалий через PCA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "3ddb9326",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwEAAAIjCAYAAABbDBecAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAfrtJREFUeJzt3XlcVOX+B/DPmZ1dUBBRxAXctUzNK17TynLLsntvlllKi7bYLbPV/LVY12yxW1Zq2iJalmaLlXaz0qwUK8WwNDcUUFQEBWYGhlnP8/uDmBxngEE5DsN83q8Xr1dzznPO+c6XQ57vOc95HkkIIUBERERERCFDFegAiIiIiIjo/GIRQEREREQUYlgEEBERERGFGBYBREREREQhhkUAEREREVGIYRFARERERBRiWAQQEREREYUYFgFERERERCGGRQARERERUYhhEUBEREREFGJYBBA1QZmZmZAkCdu3b/da9+abb0KSJIwbNw4ulysA0RERBUZGRgYkSXL/REdH44ILLsBLL70Em83m1T4nJwc33XQTkpOTodfrERcXh+HDh2Pp0qU+//9ZXl4Og8EASZKwZ8+e8/GViAJGE+gAiMh/n376Ke666y4MGTIEK1euhFqtDnRIRETnlV6vx1tvvQWg+qL9448/xoMPPoht27Zh5cqV7nZvvfUW7rzzTrRu3Ro333wz0tLSYDabsWHDBtx22204fvw4HnvsMY99r169GpIkITExEStWrMB//vOf8/rdiM4nSQghAh0EEXnKzMzELbfcgm3btqF///4AgE2bNmHkyJHo0qULfvzxR8TExAQ4SiKi8ysjIwMfffQRKioq3MtkWcbAgQOxfft2HD16FElJSfjpp5/w97//HYMGDcKXX36JqKgoj/1s374du3btQkZGhsfyoUOHolWrVkhJScGaNWtw6NCh8/G1iAKC3YGIgkBOTg6uueYatGnTBuvXr/dZAKxevRr9+vVDWFgYWrVqhZtuuglHjx71aJORkYHIyEivbT/66CNIkoRNmzZ5LP/5558xevRoxMbGIiIiAn369MH8+fM92uzduxf/+te/EBcXB4PBgP79++Pzzz/3aFNb96aTJ09CkiQ89dRTHsuPHj2K2267DUlJSdDr9ejYsSPuuusu2O12HDp0CJIk4eWXX/b6HllZWZAkCR988IFf+2pobE899RQkScLJ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jBs3Dl988YXP2ZLFadOaaDQa96gqmZmZ6N27N/r06XNW+zoXQggIIWq96Bk/fjy2bt3qs19xeXm5+/foS80+T4/Vbref05Og4cOHQ6fT4dVXX/XY79tvvw2j0Vjr+TJy5EhERESgtLQU48ePrzVeSZI8hi/Nz8/HmjVrvNoeOXIEW7Zs8SpcazN79my0bt0ad955Z53tXC4XHnvsMdx444248MIL/dp3Xex2O5xOp8/ZaM+F0+n0KCrsdjsWL16M+Ph49OvXDwAwevRoFBUVYdWqVR7bvfbaa4iMjMTQoUMBVJ9jLpfL3TXuzOOc+Td80UUXISIiAiqVCm+99Rby8/Mb/CTQl0cffRSDBw/G1VdfXWc7s9mMOXPm4P7770diYuI5H9eXJ598EkII3HzzzR5zCtTIzs52D7Va0xXooYcewr/+9S+PnylTpiAtLa3WpyxEwYxPAoiCSFRUFF577TX84x//wEsvvYRHHnkEWq0Wzz//PG655RYMHToUEyZMcA8R2qFDB69hNP2hUqmwaNEijB07FhdeeCFuueUWtGnTBnv37sXu3bvdF7QLFizA3//+d/Tu3RtTpkxBp06dcOLECWzduhWFhYXYuXNng4/97LPP4uuvv8bQoUMxdepUdO/eHcePH8fq1auxefNmjxeVJ02ahFdffRXfffcdnn/++XPaV0Ns3LjRoztQbm4upk+f7rPtQw89hM8//xxXXXUVMjIy0K9fP1RWVuL333/HRx99hPz8fPdThTOlp6cjNjYWkydPxr333gtJkvDuu++eUwETHx+PmTNnYvbs2Rg5ciSuvvpq7Nu3DwsXLsSAAQNqvdupVquxZ88eCCFq7b4zZswY/Pe//8XIkSNx4403ori4GAsWLEBqaip+++03d7tFixZh7ty5CA8Pr/fl0Rpff/01VqxYUe+wroWFhdDpdPjyyy/92u+ZKisrPboDvfvuu7BarWc13G1dkpKS8PzzzyM/Px9dunTBqlWrkJOTgyVLlriH85w6dSoWL16MjIwMZGdno0OHDvjoo4+wZcsWvPLKK+4XX4cOHYo77rgDc+fORU5ODq688kpotVocOHAAq1evxvz58/Gvf/3LZxy9evXCI488gueeew433HCDRyFdUlKCr776yqN9zfsVX331FS6++GLExcW513399dfYsmVLvd99x44daNWqVa1d5BpDeno6FixYgLvvvhvdunXzmDF406ZN+Pzzz/Gf//wHNpsNH3/8Ma644opan4RcffXVmD9/vscwuUTNQkDGJCKiOtU2bGWNa665RoSHh4tDhw65l61atUr07dtX6PV6ERcXJyZOnCgKCws9tmvIMIZCCLF582ZxxRVXiKioKBERESH69OnjNZzgwYMHxaRJk0RiYqLQarWibdu24qqrrhIfffRRvd/H1zCcQghRUFAgJk2aJOLj44VerxedOnUS06ZNEzabzSv2nj17CpVK5fVd/d3X2QwRWvMTFhYmevToIV5++WV3mzOHCBVCCLPZLGbOnClSU1OFTqcTrVq1Eunp6WLevHnu4SBrs2XLFvG3v/1NhIWFiaSkJPHwww+L9evX+xx60Z8hQmu8/vrrolu3bkKr1YrWrVuLu+66y2s42Nr2Wdf6t99+W6SlpQm9Xi+6desmli5d6jWE5MUXXyyuu+46sXfvXp/79DVE6IUXXugxPG1eXp7PIULhY2jIM4cZrU3N9jU/kZGR4qKLLhLvvvtundvVbNuQIUJ79uwptm/fLgYNGiQMBoNISUkRr7/+utf2J06cELfccoto1aqV0Ol0onfv3h7f+XRLliwR/fr1E2FhYSIqKkr07t1bPPzww+LYsWPuNr7OT6vVKrp16yYGDBggnE6nu93pufD1U/Odan6/11xzjcd+v/vuu1qHRz39b+b0fdSntjzXJjs7W9x4440iKSlJaLVaERsbKy6//HKxbNky4XK5xMcffywAiLfffrvWfWzatEkAEPPnz/f7uETBQBKikZ6JExEFQN++fREXF4cNGzYEOhQivwwbNgwnT570+32VpkiSJHz33XeNOsEYEZ1ffCeAiILW9u3bkZOTg0mTJgU6FCIioqDCdwKIKOjs2rUL2dnZeOmll9CmTRtcf/31gQ6JKKSMGDHC430AIgo+fBJAREHno48+wi233AKHw4EPPvjgnIc2JKKG+eqrrzxeIiai4MN3AoiIiIiIQgyfBBARERERhRgWAUREREREISakXgyWZRnHjh1DVFQUJEkKdDhEREREROdMCAGz2YykpCSoVP7d4w+pIuDYsWNITk4OdBhERERERI3uyJEjaNeunV9tQ6oIqJli/ciRI4iOjg5wNIEjyzJKSkoQHx/vd7VIDcMcK485Vh5zrDzmWHnMsfKYY+XVl2OTyYTk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vgaqX2iWJKnWl6ZrLFq0CJGRkbj55ptrbfP5559j//79WLduXZ37IiIiImWwO1BjOfMl4Fu/9m/4UAUsWLAAxcXF7ov14cOHo3fv3pg4cSJ27NiBX375BbfeeiuGDh3qdVFbl5kzZ2Lbtm24++678dtvv2Hv3r1YtGgRTp48iaioKDz44IO4//77sWzZMhw8eBA7duzAa6+9hmXLlvl9jAkTJiAxMRHjxo3Dli1bcOjQIXz88cfYunWru0337t3xt7/9DY888ggmTJjgcXF8zz33wGQy4YYbbsD27dtx4MABvPvuu9i3b5/fMQDVF/FWqxWVlZXYuHEj/vjjD/Tq1cur3RNPPIHly5dj9uzZ2L17N/bs2YOVK1fi//7v/2rdd1paGt59913s2bMHP//8MyZOnNjgF2PT0tJwzTXXYMqUKdi8eTN27tyJm266CW3btsU111zj1X78+PGYNWsWZs6c6bWuffv20Ol0eO2113Do0CF8/vnnXl10vvvuO0ybNg2jR4/2WTSd7oUXXsBLL73kNYrSmW3+85//IDw83M9vTERERI2JRUBj8DUKUPuB9Q8fqpC4uDi8+eabeP755/Hzzz9DkiR89tlniI2NxSWXXIIrrrgCHTt2xMqVKxu03y5duuDrr7/Gzp07cfHFF2PQoEH47LPP3F1knnnmGTz++OOYO3cuunfvjpEjR2LdunXo2LGj38fQ6XT4+uuvkZCQgNGjR6N379547rnnoFarPdrddtttsNvtHi+0AtX94jdu3OgeZahfv354880363xHwJfffvsNYWFhiI6ORkZGBh544AGfoymNGDECa9euxddff40BAwbgb3/7G15++WWkpKTUuu+3334bZWVluOiii3DzzTfj3nvvrffC2pelS5eiX79+uOqqqzBo0CAIIfDll1/6/K5hYWF45JFH0L17d6918fHxyMzMxOrVq9GjRw8899xzmDdvnkebW2+9FUOGDMF7771Xb1yXXnopLr300jrbpKamul+mJiIiovNPEkKIQAdxvphMJsTExMBoNHqNoGO1WpGXl4eOHTvW2pfbp/qGAT2Pw4T6q6arikajqfNubVP2zDPPYPXq1fjtt98CHYpPzSHHTUVtf5uyLKO4uBgJCQlQqXg/QwnMsfKYY+Uxx8pjjpVXX47rusatDX9T58KfC3x/JhQjv1VUVGDXrl14/fXX8e9//zvQ4RAREREFJRYBZ8tRBSwb698d/jMLgWVjq7enBrvnnnvQr18/DBs2zKsrEBERERH5h0XA2dKGAYPvA+I6+dfFp6YQiOtUvZ2WM6SejczMTNhsNqxatcrrPQEiIiIi8g+HCD0X/TKAPtf7f0Ef0w64K4sFABEREREFFJ8EnKHB70k39IKeBQBRg4TQ2AVERETnDYuAP9UMq2ixWAIcCRGdrmbWYnb/IiIiajzsDvQntVqNFi1aoLi4GAAQHh7ebId25PCVymOOG4csyygpKUF4eLh7PgoiIiI6d/xX9TSJiYkA4C4EmishBGRZhkql4gWqQpjjxqNSqdC+fXvmkYiIqBGxCDiNJElo06YNEhIS4HA4Ah2OYmRZxqlTp9CyZUtO6qEQ5rjx6HQ65pCIiKiRsQjwQa1WN+v+x7IsQ6vVwmAw8OJKIcwxERERNWW8OiEiIiIiCjEsAoiIiIiIQgyLACIiIiKiEMMigIiIiIgoxLAIICIiIiIKMSwCiIiIiIhCDIsAIiIiIqIQwyKAiIiIiCjEsAggIiIiIgoxLAKIiIiIiEIMiwAiIiIiohDDIoCIiIiIKMSwCCAiIiIiCjEsAoiIiIiIQgyLACIiIiKiEMMigIiIiIgoxLAIICIiIiIKMSwCiIiIiIhCDIsAIiIiIqIQwyKAiIiIiCjEsAggIiIiIgoxLAKIiIiIiEIMiwAiIiIiohDDIoCIiIiIKMSwCCAiIiIiCjEsAoiIiIiIQkzQFAFPPfUUJEny+OnWrVugwyIiIiIiCjqaQAfQED179sS3337r/qzRBFX4RERERERNQlBdRWs0GiQmJgY6DCIiIiKioBZURcCBAweQlJQEg8GAQYMGYe7cuWjfvn2t7W02G2w2m/uzyWQCAMiyDFmWFY+3qZJlGUKIkM6B0phj5THHymOOlcccK485Vh5zrLz6cnw2uQ+aImDgwIHIzMxE165dcfz4ccyePRtDhgzBrl27EBUV5XObuXPnYvbs2V7LS0pKYLValQ65yZJlGUajEUIIqFRB81pIUGGOlcccK485Vh5zrDzmWHnMsfLqy7HZbG7wPiUhhGiM4M638vJypKSk4L///S9uu+02n218PQlITk5GWVkZoqOjz1eoTY4syygpKUF8fDz/WBXCHCuPOVYec6w85lh5zLHymGPl1Zdjk8mE2NhYGI1Gv69xg+ZJwJlatGiBLl26IDc3t9Y2er0eer3ea7lKpQr5k1SSJOZBYcyx8phj5THHymOOlcccK485Vl5dOT6bvAftb6qiogIHDx5EmzZtAh0KEREREVFQCZoi4MEHH8T333+P/Px8ZGVl4dprr4VarcaECRMCHRoRERERUVAJmu5AhYWFmDBhAk6dOoX4+Hj8/e9/x08//YT4+PhAh0ZEREREFFSCpghYuXJloEMgIiIiImoWgqY7EBERERERNQ4WAUREREREIYZFABERERFRiGERQEREREQUYlgEEBERERGFGBYBREREREQhhkUAEREREVGIYRFARERERBRiWAQQEREREYUYFgFERERERCGGRQARERERUYhhEUBEREREFGJYBBARERERhRgWAUREREREIYZFABERERFRiGERQEREREQUYlgEEBERERGFGBYBREREREQhhkUAEREREVGIYRFARERERBRiWAQQEREREYUYFgFERERERCGGRQARERERUYhhEUBEREREFGJYBBARERERhRgWAUREREREIYZFABERERFRiGERQEREREQUYlgEEBERERGFGBYBREREREQhhkUAEREREVGIYRFARERERBRiWAQQEREREYUYFgFERERERCGGRQARERERUYhhEUBEREREFGJYBBARERERhRgWAUREREREIYZFABERERFRiGERQEREREQUYlgEEBERERGFGBYBREREREQhhkUAEREREVGIYRFARERERBRiWAQQEREREYWYoC0CnnvuOUiShOnTpwc6FCIiIiKioBKURcC2bduwePFi9OnTJ9ChEBEREREFnaArAioqKjBx4kS8+eabiI2NDXQ4RERERERBRxPoABpq2rRpGDNmDIYPH47//Oc/dba12Wyw2WzuzyaTCQAgyzJkWVY0zqZMlmUIIUI6B0pjjpXHHCuPOVYec6w85lh5zLHy6svx2eQ+qIqAlStXYseOHdi2bZtf7efOnYvZs2d7LS8pKYHVam3s8IKGLMswGo0QQkClCrqHQUGBOVYec6w85lh5zLHymGPlMcfKqy/HZrO5wfsMmiLgyJEjuO+++/DNN9/AYDD4tc3MmTMxY8YM92eTyYTk5GTEx8cjOjpaqVCbPFmWIUkS4uPj+ceqEOZYecyx8phj5THHymOOlcccK6++HPt7bXy6oCkCsrOzUVxcjIsu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jcfvIuCRRx5Br169UFxcjH379iEqKgqDBw/G4cOHlYyPiIiIiIgamd9FQFZWFubOnYtWrVohNTUVX3zxBUaMGIEhQ4bg0KFDSsZIRERERESNyO8ioKqqChrNXxMMS5KERYsWYezYsRg6dCj279+vSIBERERERNS4NPU3qdatWzds374d3bt391j++uuvAwCuvvrqxo2MiIiIiIgU4feTgGuvvRYffPCBz3Wvv/46JkyYACFEowVGRERERETK8LsImDlzJr788sta1y9cuBCyLDdKUEREREREpBxOFkZEREREFGJYBBARERERhRgWAUREREREIYZFABERERFRiGm0IkCWZaxdu7axdkdERERERArxe56A2uTm5uKdd95BZmYmSkpK4HA4GiMuIiIiIiJSyFk9CaiqqsLy5ctxySWXoGvXrsjKysITTzyBwsLCxo6PiIiIiIgaWYOeBGzbtg1vvfUWVq5cic6dO2PixInIysrCwoUL0aNHD6ViJCIiIiKiRuR3EdCnTx+YTCbceOONyMrKQs+ePQEAjz76qGLBERERERFR4/O7O9C+fftwySWX4NJLL+VdfyIiIiKiIOZ3EXDo0CF07doVd911F9q1a4cHH3wQv/76KyRJUjI+IiIiIiJqZH4XAW3btsWsWbOQm5uLd999F0VFRRg8eDCcTicyMzOxf/9+JeMkIiIiIqJGclajA1122WV47733cPz4cbz++uvYuHEjunXrhj59+jR2fERERERE1MjOabKwmJgY3H333di+fTt27NiBYcOGNVJYRERERESkFL+LgKqqKnz++ecwm81e60wmEw4fPowXX3yxUYMjIiIiIqLG53cRsGTJEsyfPx9RUVFe66Kjo/Hqq6/irbfeatTgiIiIiIio8fldBKxYsQLTp0+vdf306dOxbNmyxoiJiIiIiIgU5HcRcODAAVxwwQW1ru/Tpw8OHDjQKEEREREREZFy/C4CnE4nSkpKal1fUlICp9PZKEEREREREZFy/C4CevbsiW+//bbW9V9//TV69uzZKEEREREREZFy/C4Cbr31VjzzzDNYu3at17ovvvgCc+bMwa233tqowRERERERUePT+Ntw6tSp+OGHH3D11VejW7du6Nq1KwBg79692L9/P8aPH4+pU6cqFigRERERETWOBk0W9t5772HlypVIS0vD/v37sW/fPnTt2hUffPABPvjgA6ViJCIiIiKiRuT3k4Aa48ePx/jx45WIhYiIiIiIzgO/nwTIsoznn38egwcPxoABA/Doo4+iqqpKydiIiIiIiEgBfhcBc+bMwWOPPYbIyEi0bdsW8+fPx7Rp05SMjYiIiIiIFOB3EbB8+XIsXLgQ69evx5o1a/DFF19gxYoVkGVZyfiIiIiIiKiR+V0EHD58GKNHj3Z/Hj58OCRJwrFjxxQJjIiIiIiIlNGgGYMNBoPHMq1WC4fD0ehBERERERGRcvweHUgIgYyMDOj1evcyq9WKO++8ExEREe5ln3zySeNGSEREREREjcrvImDy5Mley2666aZGDYaIiIiIiJTndxGwdOlSJeOo19y5c/HJJ59g7969CAsLQ3p6Op5//nn3zMVEREREROSfBs0YHEjff/89pk2bhp9++gnffPMNHA4HrrzySlRWVgY6NCIiIiKioNLgGYMD5auvvvL4nJmZiYSEBGRnZ+OSSy7xuY3NZoPNZnN/NplMAKonPgvloU1lWYYQIqRzoDTmWHnMsfKYY+Uxx8pjjpXHHCuvvhyfTe6Dpgg4k9FoBADExcXV2mbu3LmYPXu21/KSkhJYrVbFYmvqZFmG0WiEEAIqVdA8DAoqzLHymGPlMcfKY46VxxwrjzlWXn05NpvNDd6nJIQQjRHc+STLMq6++mqUl5dj8+bNtbbz9SQgOTkZZWVliI6OPh+hNkmyLKOkpATx8fH8Y1UIc6w85lh5zLHymGPlMcfKY46VV1+OTSYTYmNjYTQa/b7GDconAdOmTcOuXbvqLAAAQK/XewxpWkOlUoX8SSpJEvOgMOZYecyx8phj5THHymOOlcccK6+uHJ9N3oOuCLjnnnuwdu1a/PDDD2jXrl2gwyEiIiIiCjpBUwQIIfDvf/8bn376KTZt2oSOHTsGOiQiIiIioqAUNEXAtGnT8P777+Ozzz5DVFQUioqKAAAxMTEICwsLcHRERERERMEjaDpuLVq0CEajEcOGDUObNm3cP6tWrQp0aEREREREQSVongQE4SBGRERERERNUtA8CSAiIiIiosbBIoCIiIiIKMSwCCAiIiIiCjEsAoiIiIiIQkzQvBhMRER0OlkW2F9shtHiQEy4Fl0SoqBSSYEOi4goKLAIICKioJNdUIplWQXILa6A3emCTqNGakIkJqenoF9KXKDDIyJq8tgdiIiIgkp2QSnmrNuDXUeNiDZo0C42HNEGDXYfM2LOuj3ILigNdIhERE0eiwAiIgoasiywLKsA5RYHOrQMR4ReA7VKQoReg5S4cBirHFieVQBZ5twyRER1YRFARERBY3+xGbnFFUiI0kOSPPv/S5KE+Eg9DhRXYH+xOUAREhEFBxYBREQUNIwWB+xOFwxatc/1Bq0adqcLRovjPEdGRBRcWAQQEVHQiAnXQqdRw+pw+VxvdVS/JBwTrj3PkRERBRcWAUREFDS6JEQhNSESJRU2COHZ718IgZIKG9ISItElISpAERIRBQcWAUREFDRUKgmT01MQE6ZFQakFlTYnXLJApc2JglILYsK0mJSewvkCiIjqwSKAiIiCSr+UOMwa0x09k2JgsjpRWGaByepEr6QYzBrTnfMEEBH5gZOFERFR0OmXEoe+ybGcMZiI6CyxCCAioqCkUknolhgd6DCIiIISuwMREREREYUYFgFERERERCGGRQARERERUYhhEUBEREREFGJYBBARERERhRgWAUREREREIYZFABERERFRiGERQEREREQUYlgEEBERERGFGBYBREREREQhhkUAEREREVGIYRFARERERBRiWAQQEREREYUYFgFERERERCGGRQARERERUYhhEUBEREREFGJYBBARERERhRgWAUREREREIYZFABERERFRiGERQEREREQUYlgEEBERERGFGE2gAyAiotAhywL7i80wWhyICdeiS0IUVCop0GEREYUcFgFERHReZBeUYllWAXKLK2B3uqDTqJGaEInJ6SnolxIX6PCIiEIKuwMREZHisgtKMWfdHuw6akS0QYN2seGINmiw+5gRc9btQXZBaaBDJCIKKSwCiIhIUbIssCyrAOUWBzq0DEeEXgO1SkKEXoOUuHAYqxxYnlUAWRaBDpWIKGSwCCAiIkXtLzYjt7gCCVF6SJJn/39JkhAfqceB4grsLzYHKEIiotDDIoCIiBRltDhgd7pg0Kp9rjdo1bA7XTBaHOc5MiKi0MUigIiIFBUTroVOo4bV4fK53uqofkk4Jlx7niMjIgpdLAKIiEhRXRKikJoQiZIKG4Tw7PcvhEBJhQ1pCZHokhAVoAiJiEJPUBUBP/zwA8aOHYukpCRIkoQ1a9YEOiQiIqqHSiVhcnoKYsK0KCi1oNLmhEsWqLQ5UVBqQUyYFpPSUzhfABHR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AoiIiIiIQgyLgGZozpw5SE9PR3h4OFq0aOGzzeHDhzFmzBiEh4cjISEBDz30EJxOZ537LS0txcSJExEdHY0WLVrgtttuQ0VFhQLfIPhs2rQJkiT5/Nm2bVut2w0bNsyr/Z133nkeIw8uHTp08MrXc889V+c2VqsV06ZNQ8uWLREZGYl//vOfOHHixHmKOLjk5+fjtttuQ8eOHREWFobOnTvjySefhN1ur3M7nsd1W7BgATp06ACDwYCBAwfil19+qbP96tWr0a1bNxgMBvTu3RtffvnleYo0+MydOxcDBgxAVFQUEhISMG7cOOzbt6/ObTIzM73OV4PBcJ4iDj5PPfWUV766detW5zY8hxvG179tkiRh2rRpPts31jnMIqAZstvtuO6663DXXXf5XO9yuTBmzBjY7XZkZWVh2bJlyMzMxBNPPFHnfidOnIjdu3fjm2++wdq1a/HDDz9g6tSpSnyFoJOeno7jx497/Nx+++3o2LEj+vfvX+e2U6ZM8djuhRdeOE9RB6enn37aI1///ve/62x///3344svvsDq1avx/fff49ixY/jHP/5xnqINLnv37oUsy1i8eDF2796Nl19+GW+88QYee+yxerfleezbqlWrMGPGDDz55JPYsWMHLrjgAowYMQLFxcU+22dlZWHChAm47bbb8Ouvv2LcuHEYN24cdu3adZ4jDw7ff/89pk2bhp9++gnffPMNHA4HrrzySlRWVta5XXR0tMf5WlBQcJ4iDk49e/b0yNfmzZtrbctzuOG2bdvmkd9vvvkGAHDdddfVuk2jnMOCmq2lS5eKmJgYr+VffvmlUKlUoqioyL1s0aJFIjo6WthsNp/7+uOPPwQAsW3bNvey//3vf0KSJHH06NFGjz3Y2e12ER8fL55++uk62w0dOlTcd9995yeoZiAlJUW8/PLLfrcvLy8XWq1WrF692r1sz549AoDYunWrAhE2Py+88ILo2LFjnW14Htfu4osvFtOmTXN/drlcIikpScydO9dn+/Hjx4sxY8Z4LBs4cKC44447FI2zuSguLhYAxPfff19rm9r+bSTfnnzySXHBBRf43Z7n8Lm77777ROfOnYUsyz7XN9Y5zCcBIWjr1q3o3bs3Wrdu7V42YsQImEwm7N69u9ZtWrRo4XFXe/jw4VCpVPj5558VjznYfP755zh16hRuueWWetuuWLECrVq1Qq9evTBz5kxYLJbzEGHweu6559CyZUv07dsXL774Yp3d2LKzs+FwODB8+HD3sm7duqF9+/bYunXr+Qg36BmNRsTFxdXbjuexN7vdjuzsbI/zT6VSYfjw4bWef1u3bvVoD1T//5nnq3+MRiMA1HvOVlRUICUlBcnJybjmmmtq/bePqh04cABJSUno1KkTJk6ciMOHD9falufwubHb7Xjvvfdw6623QpKkWts1xjmsOZdAKTgVFRV5FAAA3J+Liopq3SYhIcFjmUajQVxcXK3bhLK3334bI0aMQLt27epsd+ONNyIlJQVJSUn47bff8Mgjj2Dfvn345JNPzlOkweXee+/FRRddhLi4OGRlZWHmzJk4fvw4/vvf//psX1RUBJ1O5/VuTOvWrXne+iE3NxevvfYa5s2bV2c7nse+nTx5Ei6Xy+f/b/fu3etzm9r+/8zztX6yLGP69OkYPHgwevXqVWu7rl274p133kGfPn1gNBoxb948pKenY/fu3fX+PzsUDRw4EJmZmejatSuOHz+O2bNnY8iQIdi1axeioqK82vMcPjdr1qxBeXk5MjIyam3TWOcwi4Ag8eijj+L555+vs82ePXvqfVmHGuZs8l5YWIj169fjww8/rHf/p79T0bt3b7Rp0waXX345Dh48iM6dO5994EGkITmeMWOGe1mfPn2g0+lwxx13YO7cuZyuvg5ncx4fPXoUI0eOxHXXXYcpU6bUuS3PY2oKpk2bhl27dtXZXx0ABg0ahEGDBrk/p6eno3v37li8eDGeeeYZpcMMOqNGjXL/d58+fTBw4ECkpKTgww8/xG233RbAyJqnt99+G6NGjUJSUlKtbRrrHGYRECQeeOCBOqtCAOjUqZNf+0pMTPQanaJmtJTExMRatznzRTan04nS0tJat2kOzibvS5cuRcuWLXH11Vc3+HgDBw4EUH0HNlQuns7l3B44cCCcTify8/PRtWtXr/WJiYmw2+0oLy/3eBpw4sSJZn3enqmhOT527BguvfRSpKenY8mSJQ0+Xiiex760atUKarXaazSqus6/xMTEBrWnavfcc497wIqG3s3XarXo27cvcnNzFYqueWnRogW6dOlSa754Dp+9goICfPvttw1+inq25zCLgCARHx+P+Pj4RtnXoEGDMGfOHBQXF7u7+HzzzTeIjo5Gjx49at2mvLwc2dnZ6Nev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",
      "text/plain": [
       "<Figure size 900x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "pca_vis = PCA(n_components=2)\n",
    "X_2d = pca_vis.fit_transform(X)\n",
    "\n",
    "plt.figure(figsize=(9, 6))\n",
    "plt.scatter(X_2d[:, 0], X_2d[:, 1], alpha=0.7, label=\"Объекты\")\n",
    "if consensus_flag.sum() > 0:\n",
    "    idx = np.where(consensus_flag == 1)[0]\n",
    "    plt.scatter(X_2d[idx, 0], X_2d[idx, 1], s=100, marker=\"x\", label=\"Консенсусные аномалии\")\n",
    "plt.title(\"Консенсусные аномалии в проекции PCA\")\n",
    "plt.xlabel(\"PCA 1\")\n",
    "plt.ylabel(\"PCA 2\")\n",
    "plt.legend()\n",
    "plt.grid(alpha=0.3)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a531f6b",
   "metadata": {},
   "source": [
    "\n",
    "## 14. Итог\n",
    "\n",
    "Было протестировано 7 методов поиска аномалий. По метрике **F1-score** лучшие результаты показали:\n",
    "\n",
    "1. **Isolation Forest** — Precision = 1.0, Recall = 0.417, F1 = 0.588  \n",
    "2. **Local Outlier Factor (LOF)** — Precision = 1.0, Recall = 0.417, F1 = 0.588  \n",
    "3. **KNN Distance** — Precision = 1.0, Recall = 0.417, F1 = 0.588  \n",
    "4. **Elliptic Envelope** — Precision = 0.80, Recall = 0.333, F1 = 0.471  \n",
    "\n",
    "Эти методы были использованы для консенсусного решения.\n",
    "\n",
    "### Консенсусные аномалии\n",
    "Объект считался аномальным, если его отметили **минимум 3 из 4 лучших методов**.  \n",
    "В результате было найдено **4 наиболее отличающихся района**:\n",
    "\n",
    "- **Семеновский** — максимальное интегральное отклонение показателей; значения посевных площадей и ряда других показателей значительно отличаются от средних.\n",
    "- **Первомайский** — сильное отклонение по **стоимости основных средств** и **себестоимости продукции**.\n",
    "- **Балахнинский** — заметное превышение среднего по **числу работников**, технике и себестоимости.\n",
    "- **г.о.г. Выкса** — отклонения по **числу работников**, технике и стоимости основных средств.\n",
    "\n",
    "### Общий вывод\n",
    "Наиболее устойчивые результаты дали **Isolation Forest, LOF и KNN Distance**, которые показали одинаковые метрики и полностью согласованные результаты по большинству аномалий.  \n",
    "Консенсус этих методов позволил выделить несколько районов, экономические показатели которых **существенно отличаются от остальных** и требуют дополнительного анализа.\n"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
