{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "837693ee",
   "metadata": {},
   "source": [
    "# Поиск аномалий и снижение размерности для датасета стран мира\n",
    "\n",
    "В ноутбуке выполняются:\n",
    "- загрузка и предобработка данных;\n",
    "- отбор содержательных непрерывных числовых признаков;\n",
    "- поиск аномалий методом Isolation Forest;\n",
    "- оценка качества найденного разбиения внутренними метриками;\n",
    "- снижение размерности до двух новых признаков;\n",
    "- повторный поиск аномалий тем же методом на новых признаках;\n",
    "- сравнение результатов до и после снижения размерности.\n",
    "\n",
    "Финальный вывод намеренно не приводится."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "5a6bdd71",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "import re\n",
    "import json\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.impute import SimpleImputer\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.ensemble import IsolationForest\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.metrics import silhouette_score, calinski_harabasz_score, davies_bouldin_score\n",
    "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, jaccard_score, confusion_matrix\n",
    "from sklearn.neighbors import LocalOutlierFactor\n",
    "\n",
    "plt.rcParams[\"figure.figsize\"] = (10, 6)\n",
    "pd.set_option(\"display.max_columns\", 200)\n",
    "pd.set_option(\"display.width\", 160)\n",
    "RANDOM_STATE = 42"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2d038537",
   "metadata": {},
   "source": [
    "## 1. Загрузка данных и первичный просмотр"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "8909528e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Размер исходного датафрейма: (195, 35)\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>Country</th>\n",
       "      <th>Density\\n(P/Km2)</th>\n",
       "      <th>Abbreviation</th>\n",
       "      <th>Agricultural Land( %)</th>\n",
       "      <th>Land Area(Km2)</th>\n",
       "      <th>Armed Forces size</th>\n",
       "      <th>Birth Rate</th>\n",
       "      <th>Calling Code</th>\n",
       "      <th>Capital/Major City</th>\n",
       "      <th>Co2-Emissions</th>\n",
       "      <th>CPI</th>\n",
       "      <th>CPI Change (%)</th>\n",
       "      <th>Currency-Code</th>\n",
       "      <th>Fertility Rate</th>\n",
       "      <th>Forested Area (%)</th>\n",
       "      <th>Gasoline Price</th>\n",
       "      <th>GDP</th>\n",
       "      <th>Gross primary education enrollment (%)</th>\n",
       "      <th>Gross tertiary education enrollment (%)</th>\n",
       "      <th>Infant mortality</th>\n",
       "      <th>Largest city</th>\n",
       "      <th>Life expectancy</th>\n",
       "      <th>Maternal mortality ratio</th>\n",
       "      <th>Minimum wage</th>\n",
       "      <th>Official language</th>\n",
       "      <th>Out of pocket health expenditure</th>\n",
       "      <th>Physicians per thousand</th>\n",
       "      <th>Population</th>\n",
       "      <th>Population: Labor force participation (%)</th>\n",
       "      <th>Tax revenue (%)</th>\n",
       "      <th>Total tax rate</th>\n",
       "      <th>Unemployment rate</th>\n",
       "      <th>Urban_population</th>\n",
       "      <th>Latitude</th>\n",
       "      <th>Longitude</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Afghanistan</td>\n",
       "      <td>60</td>\n",
       "      <td>AF</td>\n",
       "      <td>58.10%</td>\n",
       "      <td>652,230</td>\n",
       "      <td>323,000</td>\n",
       "      <td>32.49</td>\n",
       "      <td>93.0</td>\n",
       "      <td>Kabul</td>\n",
       "      <td>8,672</td>\n",
       "      <td>149.9</td>\n",
       "      <td>2.30%</td>\n",
       "      <td>AFN</td>\n",
       "      <td>4.47</td>\n",
       "      <td>2.10%</td>\n",
       "      <td>$0.70</td>\n",
       "      <td>$19,101,353,833</td>\n",
       "      <td>104.00%</td>\n",
       "      <td>9.70%</td>\n",
       "      <td>47.9</td>\n",
       "      <td>Kabul</td>\n",
       "      <td>64.5</td>\n",
       "      <td>638.0</td>\n",
       "      <td>$0.43</td>\n",
       "      <td>Pashto</td>\n",
       "      <td>78.40%</td>\n",
       "      <td>0.28</td>\n",
       "      <td>38,041,754</td>\n",
       "      <td>48.90%</td>\n",
       "      <td>9.30%</td>\n",
       "      <td>71.40%</td>\n",
       "      <td>11.12%</td>\n",
       "      <td>9,797,273</td>\n",
       "      <td>33.939110</td>\n",
       "      <td>67.709953</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Albania</td>\n",
       "      <td>105</td>\n",
       "      <td>AL</td>\n",
       "      <td>43.10%</td>\n",
       "      <td>28,748</td>\n",
       "      <td>9,000</td>\n",
       "      <td>11.78</td>\n",
       "      <td>355.0</td>\n",
       "      <td>Tirana</td>\n",
       "      <td>4,536</td>\n",
       "      <td>119.05</td>\n",
       "      <td>1.40%</td>\n",
       "      <td>ALL</td>\n",
       "      <td>1.62</td>\n",
       "      <td>28.10%</td>\n",
       "      <td>$1.36</td>\n",
       "      <td>$15,278,077,447</td>\n",
       "      <td>107.00%</td>\n",
       "      <td>55.00%</td>\n",
       "      <td>7.8</td>\n",
       "      <td>Tirana</td>\n",
       "      <td>78.5</td>\n",
       "      <td>15.0</td>\n",
       "      <td>$1.12</td>\n",
       "      <td>Albanian</td>\n",
       "      <td>56.90%</td>\n",
       "      <td>1.20</td>\n",
       "      <td>2,854,191</td>\n",
       "      <td>55.70%</td>\n",
       "      <td>18.60%</td>\n",
       "      <td>36.60%</td>\n",
       "      <td>12.33%</td>\n",
       "      <td>1,747,593</td>\n",
       "      <td>41.153332</td>\n",
       "      <td>20.168331</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Algeria</td>\n",
       "      <td>18</td>\n",
       "      <td>DZ</td>\n",
       "      <td>17.40%</td>\n",
       "      <td>2,381,741</td>\n",
       "      <td>317,000</td>\n",
       "      <td>24.28</td>\n",
       "      <td>213.0</td>\n",
       "      <td>Algiers</td>\n",
       "      <td>150,006</td>\n",
       "      <td>151.36</td>\n",
       "      <td>2.00%</td>\n",
       "      <td>DZD</td>\n",
       "      <td>3.02</td>\n",
       "      <td>0.80%</td>\n",
       "      <td>$0.28</td>\n",
       "      <td>$169,988,236,398</td>\n",
       "      <td>109.90%</td>\n",
       "      <td>51.40%</td>\n",
       "      <td>20.1</td>\n",
       "      <td>Algiers</td>\n",
       "      <td>76.7</td>\n",
       "      <td>112.0</td>\n",
       "      <td>$0.95</td>\n",
       "      <td>Arabic</td>\n",
       "      <td>28.10%</td>\n",
       "      <td>1.72</td>\n",
       "      <td>43,053,054</td>\n",
       "      <td>41.20%</td>\n",
       "      <td>37.20%</td>\n",
       "      <td>66.10%</td>\n",
       "      <td>11.70%</td>\n",
       "      <td>31,510,100</td>\n",
       "      <td>28.033886</td>\n",
       "      <td>1.659626</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Andorra</td>\n",
       "      <td>164</td>\n",
       "      <td>AD</td>\n",
       "      <td>40.00%</td>\n",
       "      <td>468</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.20</td>\n",
       "      <td>376.0</td>\n",
       "      <td>Andorra la Vella</td>\n",
       "      <td>469</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>EUR</td>\n",
       "      <td>1.27</td>\n",
       "      <td>34.00%</td>\n",
       "      <td>$1.51</td>\n",
       "      <td>$3,154,057,987</td>\n",
       "      <td>106.40%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.7</td>\n",
       "      <td>Andorra la Vella</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>$6.63</td>\n",
       "      <td>Catalan</td>\n",
       "      <td>36.40%</td>\n",
       "      <td>3.33</td>\n",
       "      <td>77,142</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>67,873</td>\n",
       "      <td>42.506285</td>\n",
       "      <td>1.521801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Angola</td>\n",
       "      <td>26</td>\n",
       "      <td>AO</td>\n",
       "      <td>47.50%</td>\n",
       "      <td>1,246,700</td>\n",
       "      <td>117,000</td>\n",
       "      <td>40.73</td>\n",
       "      <td>244.0</td>\n",
       "      <td>Luanda</td>\n",
       "      <td>34,693</td>\n",
       "      <td>261.73</td>\n",
       "      <td>17.10%</td>\n",
       "      <td>AOA</td>\n",
       "      <td>5.52</td>\n",
       "      <td>46.30%</td>\n",
       "      <td>$0.97</td>\n",
       "      <td>$94,635,415,870</td>\n",
       "      <td>113.50%</td>\n",
       "      <td>9.30%</td>\n",
       "      <td>51.6</td>\n",
       "      <td>Luanda</td>\n",
       "      <td>60.8</td>\n",
       "      <td>241.0</td>\n",
       "      <td>$0.71</td>\n",
       "      <td>Portuguese</td>\n",
       "      <td>33.40%</td>\n",
       "      <td>0.21</td>\n",
       "      <td>31,825,295</td>\n",
       "      <td>77.50%</td>\n",
       "      <td>9.20%</td>\n",
       "      <td>49.10%</td>\n",
       "      <td>6.89%</td>\n",
       "      <td>21,061,025</td>\n",
       "      <td>-11.202692</td>\n",
       "      <td>17.873887</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Country Density\\n(P/Km2) Abbreviation Agricultural Land( %) Land Area(Km2) Armed Forces size  Birth Rate  Calling Code Capital/Major City  \\\n",
       "0  Afghanistan               60           AF                58.10%        652,230           323,000       32.49          93.0              Kabul   \n",
       "1      Albania              105           AL                43.10%         28,748             9,000       11.78         355.0             Tirana   \n",
       "2      Algeria               18           DZ                17.40%      2,381,741           317,000       24.28         213.0            Algiers   \n",
       "3      Andorra              164           AD                40.00%            468               NaN        7.20         376.0   Andorra la Vella   \n",
       "4       Angola               26           AO                47.50%      1,246,700           117,000       40.73         244.0             Luanda   \n",
       "\n",
       "  Co2-Emissions     CPI CPI Change (%) Currency-Code  Fertility Rate Forested Area (%) Gasoline Price                GDP  \\\n",
       "0         8,672   149.9          2.30%           AFN            4.47             2.10%         $0.70    $19,101,353,833    \n",
       "1         4,536  119.05          1.40%           ALL            1.62            28.10%         $1.36    $15,278,077,447    \n",
       "2       150,006  151.36          2.00%           DZD            3.02             0.80%         $0.28   $169,988,236,398    \n",
       "3           469     NaN            NaN           EUR            1.27            34.00%         $1.51     $3,154,057,987    \n",
       "4        34,693  261.73         17.10%           AOA            5.52            46.30%         $0.97    $94,635,415,870    \n",
       "\n",
       "  Gross primary education enrollment (%) Gross tertiary education enrollment (%)  Infant mortality      Largest city  Life expectancy  \\\n",
       "0                                104.00%                                   9.70%              47.9             Kabul             64.5   \n",
       "1                                107.00%                                  55.00%               7.8            Tirana             78.5   \n",
       "2                                109.90%                                  51.40%              20.1           Algiers             76.7   \n",
       "3                                106.40%                                     NaN               2.7  Andorra la Vella              NaN   \n",
       "4                                113.50%                                   9.30%              51.6            Luanda             60.8   \n",
       "\n",
       "   Maternal mortality ratio Minimum wage Official language Out of pocket health expenditure  Physicians per thousand  Population  \\\n",
       "0                     638.0       $0.43             Pashto                           78.40%                     0.28  38,041,754   \n",
       "1                      15.0       $1.12           Albanian                           56.90%                     1.20   2,854,191   \n",
       "2                     112.0       $0.95             Arabic                           28.10%                     1.72  43,053,054   \n",
       "3                       NaN       $6.63            Catalan                           36.40%                     3.33      77,142   \n",
       "4                     241.0       $0.71         Portuguese                           33.40%                     0.21  31,825,295   \n",
       "\n",
       "  Population: Labor force participation (%) Tax revenue (%) Total tax rate Unemployment rate Urban_population   Latitude  Longitude  \n",
       "0                                    48.90%           9.30%         71.40%            11.12%        9,797,273  33.939110  67.709953  \n",
       "1                                    55.70%          18.60%         36.60%            12.33%        1,747,593  41.153332  20.168331  \n",
       "2                                    41.20%          37.20%         66.10%            11.70%       31,510,100  28.033886   1.659626  \n",
       "3                                       NaN             NaN            NaN               NaN           67,873  42.506285   1.521801  \n",
       "4                                    77.50%           9.20%         49.10%             6.89%       21,061,025 -11.202692  17.873887  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Названия колонок:\n",
      "['Country', 'Density\\n(P/Km2)', 'Abbreviation', 'Agricultural Land( %)', 'Land Area(Km2)', 'Armed Forces size', 'Birth Rate', 'Calling Code', 'Capital/Major City', 'Co2-Emissions', 'CPI', 'CPI Change (%)', 'Currency-Code', 'Fertility Rate', 'Forested Area (%)', 'Gasoline Price', 'GDP', 'Gross primary education enrollment (%)', 'Gross tertiary education enrollment (%)', 'Infant mortality', 'Largest city', 'Life expectancy', 'Maternal mortality ratio', 'Minimum wage', 'Official language', 'Out of pocket health expenditure', 'Physicians per thousand', 'Population', 'Population: Labor force participation (%)', 'Tax revenue (%)', 'Total tax rate', 'Unemployment rate', 'Urban_population', 'Latitude', 'Longitude']\n"
     ]
    }
   ],
   "source": [
    "\n",
    "DATA_PATH = \"world-data-2023.csv\"\n",
    "\n",
    "df_raw = pd.read_csv(DATA_PATH)\n",
    "print(\"Размер исходного датафрейма:\", df_raw.shape)\n",
    "display(df_raw.head())\n",
    "print(\"\\nНазвания колонок:\")\n",
    "print(df_raw.columns.tolist())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d44f9c8f",
   "metadata": {},
   "source": [
    "## 2. Нормализация названий колонок и преобразование числовых значений\n",
    "\n",
    "Часть признаков хранится как строки с символами процентов, валюты и разделителями тысяч.\n",
    "Ниже выполняется автоматическое приведение таких столбцов к числовому виду, если это возможно."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8d04d2de",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Нормализованные названия колонок:\n",
      "['country', 'density_p_km2', 'abbreviation', 'agricultural_land', 'land_area_km2', 'armed_forces_size', 'birth_rate', 'calling_code', 'capital_major_city', 'co2_emissions', 'cpi', 'cpi_change', 'currency_code', 'fertility_rate', 'forested_area', 'gasoline_price', 'gdp', 'gross_primary_education_enrollment', 'gross_tertiary_education_enrollment', 'infant_mortality', 'largest_city', 'life_expectancy', 'maternal_mortality_ratio', 'minimum_wage', 'official_language', 'out_of_pocket_health_expenditure', 'physicians_per_thousand', 'population', 'population_labor_force_participation', 'tax_revenue', 'total_tax_rate', 'unemployment_rate', 'urban_population', 'latitude', 'longitude']\n",
      "country                                  object\n",
      "density_p_km2                             int64\n",
      "abbreviation                             object\n",
      "agricultural_land                       float64\n",
      "land_area_km2                           float64\n",
      "armed_forces_size                       float64\n",
      "birth_rate                              float64\n",
      "calling_code                            float64\n",
      "capital_major_city                       object\n",
      "co2_emissions                           float64\n",
      "cpi                                     float64\n",
      "cpi_change                              float64\n",
      "currency_code                            object\n",
      "fertility_rate                          float64\n",
      "forested_area                           float64\n",
      "gasoline_price                          float64\n",
      "gdp                                     float64\n",
      "gross_primary_education_enrollment      float64\n",
      "gross_tertiary_education_enrollment     float64\n",
      "infant_mortality                        float64\n",
      "largest_city                             object\n",
      "life_expectancy                         float64\n",
      "maternal_mortality_ratio                float64\n",
      "minimum_wage                            float64\n",
      "official_language                        object\n",
      "out_of_pocket_health_expenditure        float64\n",
      "physicians_per_thousand                 float64\n",
      "population                              float64\n",
      "population_labor_force_participation    float64\n",
      "tax_revenue                             float64\n",
      "total_tax_rate                          float64\n",
      "unemployment_rate                       float64\n",
      "urban_population                        float64\n",
      "latitude                                float64\n",
      "longitude                               float64\n",
      "dtype: object\n"
     ]
    }
   ],
   "source": [
    "\n",
    "def normalize_column_name(col: str) -> str:\n",
    "    col = str(col).strip().lower()\n",
    "    col = col.replace(\"\\n\", \" \")\n",
    "    col = re.sub(r\"[%/()\\-]+\", \" \", col)\n",
    "    col = re.sub(r\"[^a-zа-я0-9]+\", \"_\", col)\n",
    "    col = re.sub(r\"_+\", \"_\", col).strip(\"_\")\n",
    "    return col\n",
    "\n",
    "df = df_raw.copy()\n",
    "original_to_normalized = {col: normalize_column_name(col) for col in df.columns}\n",
    "df = df.rename(columns=original_to_normalized)\n",
    "\n",
    "print(\"Нормализованные названия колонок:\")\n",
    "print(df.columns.tolist())\n",
    "\n",
    "def try_convert_object_to_numeric(series: pd.Series, min_share: float = 0.70) -> pd.Series:\n",
    "    if not pd.api.types.is_object_dtype(series):\n",
    "        return series\n",
    "\n",
    "    s = series.astype(str).str.strip()\n",
    "    s = s.replace({\"\": np.nan, \"nan\": np.nan, \"None\": np.nan, \"N/A\": np.nan, \"NULL\": np.nan})\n",
    "    s = s.str.replace(r\"[$€£¥]\", \"\", regex=True)\n",
    "    s = s.str.replace(\"%\", \"\", regex=False)\n",
    "    s = s.str.replace(r\"(?<=\\d),(?=\\d)\", \"\", regex=True)\n",
    "    s = s.str.replace(r\"\\s+\", \" \", regex=True)\n",
    "    converted = pd.to_numeric(s, errors=\"coerce\")\n",
    "\n",
    "    if converted.notna().mean() >= min_share:\n",
    "        return converted\n",
    "    return series\n",
    "\n",
    "for col in df.columns:\n",
    "    df[col] = try_convert_object_to_numeric(df[col])\n",
    "\n",
    "print(df.dtypes)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f10f79fe",
   "metadata": {},
   "source": [
    "## 3. Отбор содержательных непрерывных числовых переменных\n",
    "\n",
    "Исключаются:\n",
    "- явные идентификаторы и текстовые поля;\n",
    "- коды и служебные атрибуты;\n",
    "- числовые признаки с семантикой идентификаторов.\n",
    "\n",
    "Для устойчивости используется автоматический отбор по типу данных и ключевым словам в названии признака."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "60b2d04b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Выбранные содержательные числовые признаки (28):\n",
      "['density_p_km2', 'agricultural_land', 'land_area_km2', 'armed_forces_size', 'birth_rate', 'co2_emissions', 'cpi', 'cpi_change', 'fertility_rate', 'forested_area', 'gasoline_price', 'gdp', 'gross_primary_education_enrollment', 'gross_tertiary_education_enrollment', 'infant_mortality', 'life_expectancy', 'maternal_mortality_ratio', 'minimum_wage', 'out_of_pocket_health_expenditure', 'physicians_per_thousand', 'population', 'population_labor_force_participation', 'tax_revenue', 'total_tax_rate', 'unemployment_rate', 'urban_population', 'latitude', 'longitude']\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>density_p_km2</th>\n",
       "      <th>agricultural_land</th>\n",
       "      <th>land_area_km2</th>\n",
       "      <th>armed_forces_size</th>\n",
       "      <th>birth_rate</th>\n",
       "      <th>co2_emissions</th>\n",
       "      <th>cpi</th>\n",
       "      <th>cpi_change</th>\n",
       "      <th>fertility_rate</th>\n",
       "      <th>forested_area</th>\n",
       "      <th>gasoline_price</th>\n",
       "      <th>gdp</th>\n",
       "      <th>gross_primary_education_enrollment</th>\n",
       "      <th>gross_tertiary_education_enrollment</th>\n",
       "      <th>infant_mortality</th>\n",
       "      <th>life_expectancy</th>\n",
       "      <th>maternal_mortality_ratio</th>\n",
       "      <th>minimum_wage</th>\n",
       "      <th>out_of_pocket_health_expenditure</th>\n",
       "      <th>physicians_per_thousand</th>\n",
       "      <th>population</th>\n",
       "      <th>population_labor_force_participation</th>\n",
       "      <th>tax_revenue</th>\n",
       "      <th>total_tax_rate</th>\n",
       "      <th>unemployment_rate</th>\n",
       "      <th>urban_population</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>60</td>\n",
       "      <td>58.1</td>\n",
       "      <td>652230.0</td>\n",
       "      <td>323000.0</td>\n",
       "      <td>32.49</td>\n",
       "      <td>8672.0</td>\n",
       "      <td>149.90</td>\n",
       "      <td>2.3</td>\n",
       "      <td>4.47</td>\n",
       "      <td>2.1</td>\n",
       "      <td>0.70</td>\n",
       "      <td>1.910135e+10</td>\n",
       "      <td>104.0</td>\n",
       "      <td>9.7</td>\n",
       "      <td>47.9</td>\n",
       "      <td>64.5</td>\n",
       "      <td>638.0</td>\n",
       "      <td>0.43</td>\n",
       "      <td>78.4</td>\n",
       "      <td>0.28</td>\n",
       "      <td>38041754.0</td>\n",
       "      <td>48.9</td>\n",
       "      <td>9.3</td>\n",
       "      <td>71.4</td>\n",
       "      <td>11.12</td>\n",
       "      <td>9797273.0</td>\n",
       "      <td>33.939110</td>\n",
       "      <td>67.709953</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>105</td>\n",
       "      <td>43.1</td>\n",
       "      <td>28748.0</td>\n",
       "      <td>9000.0</td>\n",
       "      <td>11.78</td>\n",
       "      <td>4536.0</td>\n",
       "      <td>119.05</td>\n",
       "      <td>1.4</td>\n",
       "      <td>1.62</td>\n",
       "      <td>28.1</td>\n",
       "      <td>1.36</td>\n",
       "      <td>1.527808e+10</td>\n",
       "      <td>107.0</td>\n",
       "      <td>55.0</td>\n",
       "      <td>7.8</td>\n",
       "      <td>78.5</td>\n",
       "      <td>15.0</td>\n",
       "      <td>1.12</td>\n",
       "      <td>56.9</td>\n",
       "      <td>1.20</td>\n",
       "      <td>2854191.0</td>\n",
       "      <td>55.7</td>\n",
       "      <td>18.6</td>\n",
       "      <td>36.6</td>\n",
       "      <td>12.33</td>\n",
       "      <td>1747593.0</td>\n",
       "      <td>41.153332</td>\n",
       "      <td>20.168331</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>18</td>\n",
       "      <td>17.4</td>\n",
       "      <td>2381741.0</td>\n",
       "      <td>317000.0</td>\n",
       "      <td>24.28</td>\n",
       "      <td>150006.0</td>\n",
       "      <td>151.36</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.02</td>\n",
       "      <td>0.8</td>\n",
       "      <td>0.28</td>\n",
       "      <td>1.699882e+11</td>\n",
       "      <td>109.9</td>\n",
       "      <td>51.4</td>\n",
       "      <td>20.1</td>\n",
       "      <td>76.7</td>\n",
       "      <td>112.0</td>\n",
       "      <td>0.95</td>\n",
       "      <td>28.1</td>\n",
       "      <td>1.72</td>\n",
       "      <td>43053054.0</td>\n",
       "      <td>41.2</td>\n",
       "      <td>37.2</td>\n",
       "      <td>66.1</td>\n",
       "      <td>11.70</td>\n",
       "      <td>31510100.0</td>\n",
       "      <td>28.033886</td>\n",
       "      <td>1.659626</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>164</td>\n",
       "      <td>40.0</td>\n",
       "      <td>468.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.20</td>\n",
       "      <td>469.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.27</td>\n",
       "      <td>34.0</td>\n",
       "      <td>1.51</td>\n",
       "      <td>3.154058e+09</td>\n",
       "      <td>106.4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.7</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.63</td>\n",
       "      <td>36.4</td>\n",
       "      <td>3.33</td>\n",
       "      <td>77142.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>67873.0</td>\n",
       "      <td>42.506285</td>\n",
       "      <td>1.521801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>26</td>\n",
       "      <td>47.5</td>\n",
       "      <td>1246700.0</td>\n",
       "      <td>117000.0</td>\n",
       "      <td>40.73</td>\n",
       "      <td>34693.0</td>\n",
       "      <td>261.73</td>\n",
       "      <td>17.1</td>\n",
       "      <td>5.52</td>\n",
       "      <td>46.3</td>\n",
       "      <td>0.97</td>\n",
       "      <td>9.463542e+10</td>\n",
       "      <td>113.5</td>\n",
       "      <td>9.3</td>\n",
       "      <td>51.6</td>\n",
       "      <td>60.8</td>\n",
       "      <td>241.0</td>\n",
       "      <td>0.71</td>\n",
       "      <td>33.4</td>\n",
       "      <td>0.21</td>\n",
       "      <td>31825295.0</td>\n",
       "      <td>77.5</td>\n",
       "      <td>9.2</td>\n",
       "      <td>49.1</td>\n",
       "      <td>6.89</td>\n",
       "      <td>21061025.0</td>\n",
       "      <td>-11.202692</td>\n",
       "      <td>17.873887</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   density_p_km2  agricultural_land  land_area_km2  armed_forces_size  birth_rate  co2_emissions     cpi  cpi_change  fertility_rate  forested_area  \\\n",
       "0             60               58.1       652230.0           323000.0       32.49         8672.0  149.90         2.3            4.47            2.1   \n",
       "1            105               43.1        28748.0             9000.0       11.78         4536.0  119.05         1.4            1.62           28.1   \n",
       "2             18               17.4      2381741.0           317000.0       24.28       150006.0  151.36         2.0            3.02            0.8   \n",
       "3            164               40.0          468.0                NaN        7.20          469.0     NaN         NaN            1.27           34.0   \n",
       "4             26               47.5      1246700.0           117000.0       40.73        34693.0  261.73        17.1            5.52           46.3   \n",
       "\n",
       "   gasoline_price           gdp  gross_primary_education_enrollment  gross_tertiary_education_enrollment  infant_mortality  life_expectancy  \\\n",
       "0            0.70  1.910135e+10                               104.0                                  9.7              47.9             64.5   \n",
       "1            1.36  1.527808e+10                               107.0                                 55.0               7.8             78.5   \n",
       "2            0.28  1.699882e+11                               109.9                                 51.4              20.1             76.7   \n",
       "3            1.51  3.154058e+09                               106.4                                  NaN               2.7              NaN   \n",
       "4            0.97  9.463542e+10                               113.5                                  9.3              51.6             60.8   \n",
       "\n",
       "   maternal_mortality_ratio  minimum_wage  out_of_pocket_health_expenditure  physicians_per_thousand  population  population_labor_force_participation  \\\n",
       "0                     638.0          0.43                              78.4                     0.28  38041754.0                                  48.9   \n",
       "1                      15.0          1.12                              56.9                     1.20   2854191.0                                  55.7   \n",
       "2                     112.0          0.95                              28.1                     1.72  43053054.0                                  41.2   \n",
       "3                       NaN          6.63                              36.4                     3.33     77142.0                                   NaN   \n",
       "4                     241.0          0.71                              33.4                     0.21  31825295.0                                  77.5   \n",
       "\n",
       "   tax_revenue  total_tax_rate  unemployment_rate  urban_population   latitude  longitude  \n",
       "0          9.3            71.4              11.12         9797273.0  33.939110  67.709953  \n",
       "1         18.6            36.6              12.33         1747593.0  41.153332  20.168331  \n",
       "2         37.2            66.1              11.70        31510100.0  28.033886   1.659626  \n",
       "3          NaN             NaN                NaN           67873.0  42.506285   1.521801  \n",
       "4          9.2            49.1               6.89        21061025.0 -11.202692  17.873887  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "identifier_keywords = [\n",
    "    \"country\", \"abbreviation\", \"capital\", \"city\", \"currency\", \"language\",\n",
    "    \"calling_code\", \"code\"\n",
    "]\n",
    "\n",
    "numeric_cols = df.select_dtypes(include=\"number\").columns.tolist()\n",
    "selected_numeric_cols = [\n",
    "    col for col in numeric_cols\n",
    "    if not any(keyword in col for keyword in identifier_keywords)\n",
    "]\n",
    "\n",
    "# При необходимости оставляем только признаки с достаточным числом уникальных значений.\n",
    "selected_numeric_cols = [\n",
    "    col for col in selected_numeric_cols\n",
    "    if df[col].nunique(dropna=True) >= 15\n",
    "]\n",
    "\n",
    "print(\"Выбранные содержательные числовые признаки ({}):\".format(len(selected_numeric_cols)))\n",
    "print(selected_numeric_cols)\n",
    "\n",
    "data_num = df[selected_numeric_cols].copy()\n",
    "display(data_num.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "38a5bebb",
   "metadata": {},
   "source": [
    "## 4. Обработка пропусков и масштабирование\n",
    "\n",
    "Для поиска аномалий и снижения размерности используется стандартизация признаков.\n",
    "Пропуски заполняются медианой, чтобы метод был устойчив к выбросам."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c2fe376a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Размер матрицы признаков после предобработки: (195, 28)\n",
      "Число пропусков до обработки: 304\n",
      "Число пропусков после обработки: 0\n"
     ]
    }
   ],
   "source": [
    "\n",
    "preprocessor = Pipeline(steps=[\n",
    "    (\"imputer\", SimpleImputer(strategy=\"median\")),\n",
    "    (\"scaler\", StandardScaler())\n",
    "])\n",
    "\n",
    "X = preprocessor.fit_transform(data_num)\n",
    "feature_names = data_num.columns.tolist()\n",
    "\n",
    "print(\"Размер матрицы признаков после предобработки:\", X.shape)\n",
    "print(\"Число пропусков до обработки:\", int(data_num.isna().sum().sum()))\n",
    "print(\"Число пропусков после обработки:\", int(np.isnan(X).sum()))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "90038697",
   "metadata": {},
   "source": [
    "## 5. Поиск аномалий в исходном пространстве признаков\n",
    "\n",
    "В качестве основного метода используется **Isolation Forest**.\n",
    "Доля аномалий задаётся адаптивно через `contamination=0.08`, что подходит для задачи без разметки и умеренного числа объектов."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "caaf3335",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Число аномалий: 16\n",
      "Доля аномалий: 0.0821\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>Country</th>\n",
       "      <th>Density\\n(P/Km2)</th>\n",
       "      <th>Abbreviation</th>\n",
       "      <th>Agricultural Land( %)</th>\n",
       "      <th>Land Area(Km2)</th>\n",
       "      <th>Armed Forces size</th>\n",
       "      <th>Birth Rate</th>\n",
       "      <th>Calling Code</th>\n",
       "      <th>Capital/Major City</th>\n",
       "      <th>Co2-Emissions</th>\n",
       "      <th>CPI</th>\n",
       "      <th>CPI Change (%)</th>\n",
       "      <th>Currency-Code</th>\n",
       "      <th>Fertility Rate</th>\n",
       "      <th>Forested Area (%)</th>\n",
       "      <th>Gasoline Price</th>\n",
       "      <th>GDP</th>\n",
       "      <th>Gross primary education enrollment (%)</th>\n",
       "      <th>Gross tertiary education enrollment (%)</th>\n",
       "      <th>Infant mortality</th>\n",
       "      <th>Largest city</th>\n",
       "      <th>Life expectancy</th>\n",
       "      <th>Maternal mortality ratio</th>\n",
       "      <th>Minimum wage</th>\n",
       "      <th>Official language</th>\n",
       "      <th>Out of pocket health expenditure</th>\n",
       "      <th>Physicians per thousand</th>\n",
       "      <th>Population</th>\n",
       "      <th>Population: Labor force participation (%)</th>\n",
       "      <th>Tax revenue (%)</th>\n",
       "      <th>Total tax rate</th>\n",
       "      <th>Unemployment rate</th>\n",
       "      <th>Urban_population</th>\n",
       "      <th>Latitude</th>\n",
       "      <th>Longitude</th>\n",
       "      <th>anomaly_score_original</th>\n",
       "      <th>anomaly_original</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>China</td>\n",
       "      <td>153</td>\n",
       "      <td>CN</td>\n",
       "      <td>56.20%</td>\n",
       "      <td>9,596,960</td>\n",
       "      <td>2,695,000</td>\n",
       "      <td>10.90</td>\n",
       "      <td>86.0</td>\n",
       "      <td>Beijing</td>\n",
       "      <td>9,893,038</td>\n",
       "      <td>125.08</td>\n",
       "      <td>2.90%</td>\n",
       "      <td>CNY</td>\n",
       "      <td>1.69</td>\n",
       "      <td>22.40%</td>\n",
       "      <td>$0.96</td>\n",
       "      <td>$19,910,000,000,000</td>\n",
       "      <td>100.20%</td>\n",
       "      <td>50.60%</td>\n",
       "      <td>7.4</td>\n",
       "      <td>Shanghai</td>\n",
       "      <td>77.0</td>\n",
       "      <td>29.0</td>\n",
       "      <td>$0.87</td>\n",
       "      <td>Standard Chinese</td>\n",
       "      <td>32.40%</td>\n",
       "      <td>1.98</td>\n",
       "      <td>1,397,715,000</td>\n",
       "      <td>68.00%</td>\n",
       "      <td>9.40%</td>\n",
       "      <td>59.20%</td>\n",
       "      <td>4.32%</td>\n",
       "      <td>842,933,962</td>\n",
       "      <td>35.861660</td>\n",
       "      <td>104.195397</td>\n",
       "      <td>0.647035</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>186</th>\n",
       "      <td>United States</td>\n",
       "      <td>36</td>\n",
       "      <td>US</td>\n",
       "      <td>44.40%</td>\n",
       "      <td>9,833,517</td>\n",
       "      <td>1,359,000</td>\n",
       "      <td>11.60</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Washington, D.C.</td>\n",
       "      <td>5,006,302</td>\n",
       "      <td>117.24</td>\n",
       "      <td>7.50%</td>\n",
       "      <td>USD</td>\n",
       "      <td>1.73</td>\n",
       "      <td>33.90%</td>\n",
       "      <td>$0.71</td>\n",
       "      <td>$21,427,700,000,000</td>\n",
       "      <td>101.80%</td>\n",
       "      <td>88.20%</td>\n",
       "      <td>5.6</td>\n",
       "      <td>New York City</td>\n",
       "      <td>78.5</td>\n",
       "      <td>19.0</td>\n",
       "      <td>$7.25</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11.10%</td>\n",
       "      <td>2.61</td>\n",
       "      <td>328,239,523</td>\n",
       "      <td>62.00%</td>\n",
       "      <td>9.60%</td>\n",
       "      <td>36.60%</td>\n",
       "      <td>14.70%</td>\n",
       "      <td>270,663,028</td>\n",
       "      <td>37.090240</td>\n",
       "      <td>-95.712891</td>\n",
       "      <td>0.596291</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>India</td>\n",
       "      <td>464</td>\n",
       "      <td>IN</td>\n",
       "      <td>60.40%</td>\n",
       "      <td>3,287,263</td>\n",
       "      <td>3,031,000</td>\n",
       "      <td>17.86</td>\n",
       "      <td>91.0</td>\n",
       "      <td>New Delhi</td>\n",
       "      <td>2,407,672</td>\n",
       "      <td>180.44</td>\n",
       "      <td>7.70%</td>\n",
       "      <td>INR</td>\n",
       "      <td>2.22</td>\n",
       "      <td>23.80%</td>\n",
       "      <td>$0.97</td>\n",
       "      <td>$2,611,000,000,000</td>\n",
       "      <td>113.00%</td>\n",
       "      <td>28.10%</td>\n",
       "      <td>29.9</td>\n",
       "      <td>Kurebhar</td>\n",
       "      <td>69.4</td>\n",
       "      <td>145.0</td>\n",
       "      <td>$0.30</td>\n",
       "      <td>Hindi</td>\n",
       "      <td>65.10%</td>\n",
       "      <td>0.86</td>\n",
       "      <td>1,366,417,754</td>\n",
       "      <td>49.30%</td>\n",
       "      <td>11.20%</td>\n",
       "      <td>49.70%</td>\n",
       "      <td>5.36%</td>\n",
       "      <td>471,031,528</td>\n",
       "      <td>20.593684</td>\n",
       "      <td>78.962880</td>\n",
       "      <td>0.571656</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>163</th>\n",
       "      <td>South Sudan</td>\n",
       "      <td>18</td>\n",
       "      <td>SS</td>\n",
       "      <td>NaN</td>\n",
       "      <td>644,329</td>\n",
       "      <td>185,000</td>\n",
       "      <td>35.01</td>\n",
       "      <td>211.0</td>\n",
       "      <td>Juba</td>\n",
       "      <td>1,727</td>\n",
       "      <td>4,583.71</td>\n",
       "      <td>187.90%</td>\n",
       "      <td>SSP</td>\n",
       "      <td>4.70</td>\n",
       "      <td>NaN</td>\n",
       "      <td>$0.28</td>\n",
       "      <td>$11,997,800,751</td>\n",
       "      <td>73.00%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>63.7</td>\n",
       "      <td>Juba</td>\n",
       "      <td>57.6</td>\n",
       "      <td>1150.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>English</td>\n",
       "      <td>61.30%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11,062,113</td>\n",
       "      <td>72.40%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>31.40%</td>\n",
       "      <td>12.24%</td>\n",
       "      <td>2,201,250</td>\n",
       "      <td>6.876992</td>\n",
       "      <td>31.306979</td>\n",
       "      <td>0.570527</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126</th>\n",
       "      <td>Nigeria</td>\n",
       "      <td>226</td>\n",
       "      <td>NG</td>\n",
       "      <td>77.70%</td>\n",
       "      <td>923,768</td>\n",
       "      <td>215,000</td>\n",
       "      <td>37.91</td>\n",
       "      <td>234.0</td>\n",
       "      <td>Abuja</td>\n",
       "      <td>120,369</td>\n",
       "      <td>267.51</td>\n",
       "      <td>11.40%</td>\n",
       "      <td>NGN</td>\n",
       "      <td>5.39</td>\n",
       "      <td>7.20%</td>\n",
       "      <td>$0.46</td>\n",
       "      <td>$448,120,428,859</td>\n",
       "      <td>84.70%</td>\n",
       "      <td>10.20%</td>\n",
       "      <td>75.7</td>\n",
       "      <td>Lagos</td>\n",
       "      <td>54.3</td>\n",
       "      <td>917.0</td>\n",
       "      <td>$0.54</td>\n",
       "      <td>English</td>\n",
       "      <td>72.20%</td>\n",
       "      <td>0.38</td>\n",
       "      <td>200,963,599</td>\n",
       "      <td>52.90%</td>\n",
       "      <td>1.50%</td>\n",
       "      <td>34.80%</td>\n",
       "      <td>8.10%</td>\n",
       "      <td>102,806,948</td>\n",
       "      <td>9.081999</td>\n",
       "      <td>8.675277</td>\n",
       "      <td>0.544632</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>190</th>\n",
       "      <td>Venezuela</td>\n",
       "      <td>32</td>\n",
       "      <td>VE</td>\n",
       "      <td>24.50%</td>\n",
       "      <td>912,050</td>\n",
       "      <td>343,000</td>\n",
       "      <td>17.88</td>\n",
       "      <td>58.0</td>\n",
       "      <td>Caracas</td>\n",
       "      <td>164,175</td>\n",
       "      <td>2,740.27</td>\n",
       "      <td>254.90%</td>\n",
       "      <td>VED</td>\n",
       "      <td>2.27</td>\n",
       "      <td>52.70%</td>\n",
       "      <td>$0.00</td>\n",
       "      <td>$482,359,318,768</td>\n",
       "      <td>97.20%</td>\n",
       "      <td>79.30%</td>\n",
       "      <td>21.4</td>\n",
       "      <td>Caracas</td>\n",
       "      <td>72.1</td>\n",
       "      <td>125.0</td>\n",
       "      <td>$0.01</td>\n",
       "      <td>Spanish</td>\n",
       "      <td>45.80%</td>\n",
       "      <td>1.92</td>\n",
       "      <td>28,515,829</td>\n",
       "      <td>59.70%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>73.30%</td>\n",
       "      <td>8.80%</td>\n",
       "      <td>25,162,368</td>\n",
       "      <td>6.423750</td>\n",
       "      <td>-66.589730</td>\n",
       "      <td>0.531859</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>Russia</td>\n",
       "      <td>9</td>\n",
       "      <td>RU</td>\n",
       "      <td>13.30%</td>\n",
       "      <td>17,098,240</td>\n",
       "      <td>1,454,000</td>\n",
       "      <td>11.50</td>\n",
       "      <td>7.0</td>\n",
       "      <td>Moscow</td>\n",
       "      <td>1,732,027</td>\n",
       "      <td>180.75</td>\n",
       "      <td>4.50%</td>\n",
       "      <td>RUB</td>\n",
       "      <td>1.57</td>\n",
       "      <td>49.80%</td>\n",
       "      <td>$0.59</td>\n",
       "      <td>$1,699,876,578,871</td>\n",
       "      <td>102.60%</td>\n",
       "      <td>81.90%</td>\n",
       "      <td>6.1</td>\n",
       "      <td>Moscow</td>\n",
       "      <td>72.7</td>\n",
       "      <td>17.0</td>\n",
       "      <td>$0.53</td>\n",
       "      <td>Russian</td>\n",
       "      <td>36.40%</td>\n",
       "      <td>4.01</td>\n",
       "      <td>144,373,535</td>\n",
       "      <td>61.80%</td>\n",
       "      <td>11.40%</td>\n",
       "      <td>46.20%</td>\n",
       "      <td>4.59%</td>\n",
       "      <td>107,683,889</td>\n",
       "      <td>61.524010</td>\n",
       "      <td>105.318756</td>\n",
       "      <td>0.529119</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>Somalia</td>\n",
       "      <td>25</td>\n",
       "      <td>SO</td>\n",
       "      <td>70.30%</td>\n",
       "      <td>637,657</td>\n",
       "      <td>20,000</td>\n",
       "      <td>41.75</td>\n",
       "      <td>252.0</td>\n",
       "      <td>Mogadishu</td>\n",
       "      <td>645</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>SOS</td>\n",
       "      <td>6.07</td>\n",
       "      <td>10.00%</td>\n",
       "      <td>$1.41</td>\n",
       "      <td>$4,720,727,278</td>\n",
       "      <td>23.40%</td>\n",
       "      <td>2.50%</td>\n",
       "      <td>76.6</td>\n",
       "      <td>Bosaso</td>\n",
       "      <td>57.1</td>\n",
       "      <td>829.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Arabic</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.02</td>\n",
       "      <td>15,442,905</td>\n",
       "      <td>47.40%</td>\n",
       "      <td>0.00%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11.35%</td>\n",
       "      <td>7,034,861</td>\n",
       "      <td>5.152149</td>\n",
       "      <td>46.199616</td>\n",
       "      <td>0.520696</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113</th>\n",
       "      <td>Monaco</td>\n",
       "      <td>26,337</td>\n",
       "      <td>MC</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5.90</td>\n",
       "      <td>377.0</td>\n",
       "      <td>Monaco City</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>EUR</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>$2.00</td>\n",
       "      <td>$7,184,844,193</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.6</td>\n",
       "      <td>Monaco City</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>$11.72</td>\n",
       "      <td>French</td>\n",
       "      <td>6.10%</td>\n",
       "      <td>6.56</td>\n",
       "      <td>38,964</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>38,964</td>\n",
       "      <td>43.738418</td>\n",
       "      <td>7.424616</td>\n",
       "      <td>0.503057</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>Lesotho</td>\n",
       "      <td>71</td>\n",
       "      <td>LS</td>\n",
       "      <td>77.60%</td>\n",
       "      <td>30,355</td>\n",
       "      <td>2,000</td>\n",
       "      <td>26.81</td>\n",
       "      <td>266.0</td>\n",
       "      <td>Maseru</td>\n",
       "      <td>2,512</td>\n",
       "      <td>155.86</td>\n",
       "      <td>5.20%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3.14</td>\n",
       "      <td>1.60%</td>\n",
       "      <td>$0.70</td>\n",
       "      <td>$2,460,072,444</td>\n",
       "      <td>120.90%</td>\n",
       "      <td>10.20%</td>\n",
       "      <td>65.7</td>\n",
       "      <td>Maseru</td>\n",
       "      <td>53.7</td>\n",
       "      <td>544.0</td>\n",
       "      <td>$0.41</td>\n",
       "      <td>English</td>\n",
       "      <td>16.90%</td>\n",
       "      <td>0.07</td>\n",
       "      <td>2,125,268</td>\n",
       "      <td>67.90%</td>\n",
       "      <td>31.60%</td>\n",
       "      <td>13.60%</td>\n",
       "      <td>23.41%</td>\n",
       "      <td>607,508</td>\n",
       "      <td>-29.609988</td>\n",
       "      <td>28.233608</td>\n",
       "      <td>0.495733</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Australia</td>\n",
       "      <td>3</td>\n",
       "      <td>AU</td>\n",
       "      <td>48.20%</td>\n",
       "      <td>7,741,220</td>\n",
       "      <td>58,000</td>\n",
       "      <td>12.60</td>\n",
       "      <td>61.0</td>\n",
       "      <td>Canberra</td>\n",
       "      <td>375,908</td>\n",
       "      <td>119.8</td>\n",
       "      <td>1.60%</td>\n",
       "      <td>AUD</td>\n",
       "      <td>1.74</td>\n",
       "      <td>16.30%</td>\n",
       "      <td>$0.93</td>\n",
       "      <td>$1,392,680,589,329</td>\n",
       "      <td>100.30%</td>\n",
       "      <td>113.10%</td>\n",
       "      <td>3.1</td>\n",
       "      <td>Sydney</td>\n",
       "      <td>82.7</td>\n",
       "      <td>6.0</td>\n",
       "      <td>$13.59</td>\n",
       "      <td>NaN</td>\n",
       "      <td>19.60%</td>\n",
       "      <td>3.68</td>\n",
       "      <td>25,766,605</td>\n",
       "      <td>65.50%</td>\n",
       "      <td>23.00%</td>\n",
       "      <td>47.40%</td>\n",
       "      <td>5.27%</td>\n",
       "      <td>21,844,756</td>\n",
       "      <td>-25.274398</td>\n",
       "      <td>133.775136</td>\n",
       "      <td>0.488885</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>Japan</td>\n",
       "      <td>347</td>\n",
       "      <td>JP</td>\n",
       "      <td>12.30%</td>\n",
       "      <td>377,944</td>\n",
       "      <td>261,000</td>\n",
       "      <td>7.40</td>\n",
       "      <td>81.0</td>\n",
       "      <td>Tokyo</td>\n",
       "      <td>1,135,886</td>\n",
       "      <td>105.48</td>\n",
       "      <td>0.50%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.42</td>\n",
       "      <td>68.50%</td>\n",
       "      <td>$1.06</td>\n",
       "      <td>$5,081,769,542,380</td>\n",
       "      <td>98.80%</td>\n",
       "      <td>63.20%</td>\n",
       "      <td>1.8</td>\n",
       "      <td>Tokyo</td>\n",
       "      <td>84.2</td>\n",
       "      <td>5.0</td>\n",
       "      <td>$6.77</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13.10%</td>\n",
       "      <td>2.41</td>\n",
       "      <td>126,226,568</td>\n",
       "      <td>61.70%</td>\n",
       "      <td>11.90%</td>\n",
       "      <td>46.70%</td>\n",
       "      <td>2.29%</td>\n",
       "      <td>115,782,416</td>\n",
       "      <td>36.204824</td>\n",
       "      <td>138.252924</td>\n",
       "      <td>0.483056</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>Brazil</td>\n",
       "      <td>25</td>\n",
       "      <td>BR</td>\n",
       "      <td>33.90%</td>\n",
       "      <td>8,515,770</td>\n",
       "      <td>730,000</td>\n",
       "      <td>13.92</td>\n",
       "      <td>55.0</td>\n",
       "      <td>Bras���</td>\n",
       "      <td>462,299</td>\n",
       "      <td>167.4</td>\n",
       "      <td>3.70%</td>\n",
       "      <td>BRL</td>\n",
       "      <td>1.73</td>\n",
       "      <td>58.90%</td>\n",
       "      <td>$1.02</td>\n",
       "      <td>$1,839,758,040,766</td>\n",
       "      <td>115.40%</td>\n",
       "      <td>51.30%</td>\n",
       "      <td>12.8</td>\n",
       "      <td>S����</td>\n",
       "      <td>75.7</td>\n",
       "      <td>60.0</td>\n",
       "      <td>$1.53</td>\n",
       "      <td>Portuguese</td>\n",
       "      <td>28.30%</td>\n",
       "      <td>2.15</td>\n",
       "      <td>212,559,417</td>\n",
       "      <td>63.90%</td>\n",
       "      <td>14.20%</td>\n",
       "      <td>65.10%</td>\n",
       "      <td>12.08%</td>\n",
       "      <td>183,241,641</td>\n",
       "      <td>-14.235004</td>\n",
       "      <td>-51.925280</td>\n",
       "      <td>0.478466</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>Central African Republic</td>\n",
       "      <td>8</td>\n",
       "      <td>CF</td>\n",
       "      <td>8.20%</td>\n",
       "      <td>622,984</td>\n",
       "      <td>8,000</td>\n",
       "      <td>35.35</td>\n",
       "      <td>236.0</td>\n",
       "      <td>Bangui</td>\n",
       "      <td>297</td>\n",
       "      <td>186.86</td>\n",
       "      <td>37.10%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4.72</td>\n",
       "      <td>35.60%</td>\n",
       "      <td>$1.41</td>\n",
       "      <td>$2,220,307,369</td>\n",
       "      <td>102.00%</td>\n",
       "      <td>3.00%</td>\n",
       "      <td>84.5</td>\n",
       "      <td>Bangui</td>\n",
       "      <td>52.8</td>\n",
       "      <td>829.0</td>\n",
       "      <td>$0.37</td>\n",
       "      <td>French</td>\n",
       "      <td>39.60%</td>\n",
       "      <td>0.06</td>\n",
       "      <td>4,745,185</td>\n",
       "      <td>72.00%</td>\n",
       "      <td>8.60%</td>\n",
       "      <td>73.30%</td>\n",
       "      <td>3.68%</td>\n",
       "      <td>1,982,064</td>\n",
       "      <td>6.611111</td>\n",
       "      <td>20.939444</td>\n",
       "      <td>0.477219</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Argentina</td>\n",
       "      <td>17</td>\n",
       "      <td>AR</td>\n",
       "      <td>54.30%</td>\n",
       "      <td>2,780,400</td>\n",
       "      <td>105,000</td>\n",
       "      <td>17.02</td>\n",
       "      <td>54.0</td>\n",
       "      <td>Buenos Aires</td>\n",
       "      <td>201,348</td>\n",
       "      <td>232.75</td>\n",
       "      <td>53.50%</td>\n",
       "      <td>ARS</td>\n",
       "      <td>2.26</td>\n",
       "      <td>9.80%</td>\n",
       "      <td>$1.10</td>\n",
       "      <td>$449,663,446,954</td>\n",
       "      <td>109.70%</td>\n",
       "      <td>90.00%</td>\n",
       "      <td>8.8</td>\n",
       "      <td>Buenos Aires</td>\n",
       "      <td>76.5</td>\n",
       "      <td>39.0</td>\n",
       "      <td>$3.35</td>\n",
       "      <td>Spanish</td>\n",
       "      <td>17.60%</td>\n",
       "      <td>3.96</td>\n",
       "      <td>44,938,712</td>\n",
       "      <td>61.30%</td>\n",
       "      <td>10.10%</td>\n",
       "      <td>106.30%</td>\n",
       "      <td>9.79%</td>\n",
       "      <td>41,339,571</td>\n",
       "      <td>-38.416097</td>\n",
       "      <td>-63.616672</td>\n",
       "      <td>0.475051</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      Country Density\\n(P/Km2) Abbreviation Agricultural Land( %) Land Area(Km2) Armed Forces size  Birth Rate  Calling Code  \\\n",
       "36                      China              153           CN                56.20%      9,596,960         2,695,000       10.90          86.0   \n",
       "186             United States               36           US                44.40%      9,833,517         1,359,000       11.60           1.0   \n",
       "77                      India              464           IN                60.40%      3,287,263         3,031,000       17.86          91.0   \n",
       "163               South Sudan               18           SS                   NaN        644,329           185,000       35.01         211.0   \n",
       "126                   Nigeria              226           NG                77.70%        923,768           215,000       37.91         234.0   \n",
       "190                 Venezuela               32           VE                24.50%        912,050           343,000       17.88          58.0   \n",
       "143                    Russia                9           RU                13.30%     17,098,240         1,454,000       11.50           7.0   \n",
       "160                   Somalia               25           SO                70.30%        637,657            20,000       41.75         252.0   \n",
       "113                    Monaco           26,337           MC                   NaN              2               NaN        5.90         377.0   \n",
       "95                    Lesotho               71           LS                77.60%         30,355             2,000       26.81         266.0   \n",
       "8                   Australia                3           AU                48.20%      7,741,220            58,000       12.60          61.0   \n",
       "85                      Japan              347           JP                12.30%        377,944           261,000        7.40          81.0   \n",
       "23                     Brazil               25           BR                33.90%      8,515,770           730,000       13.92          55.0   \n",
       "33   Central African Republic                8           CF                 8.20%        622,984             8,000       35.35         236.0   \n",
       "6                   Argentina               17           AR                54.30%      2,780,400           105,000       17.02          54.0   \n",
       "\n",
       "    Capital/Major City Co2-Emissions       CPI CPI Change (%) Currency-Code  Fertility Rate Forested Area (%) Gasoline Price                   GDP  \\\n",
       "36             Beijing     9,893,038    125.08          2.90%           CNY            1.69            22.40%         $0.96   $19,910,000,000,000    \n",
       "186   Washington, D.C.     5,006,302    117.24          7.50%           USD            1.73            33.90%         $0.71   $21,427,700,000,000    \n",
       "77           New Delhi     2,407,672    180.44          7.70%           INR            2.22            23.80%         $0.97    $2,611,000,000,000    \n",
       "163               Juba         1,727  4,583.71        187.90%           SSP            4.70               NaN         $0.28       $11,997,800,751    \n",
       "126              Abuja       120,369    267.51         11.40%           NGN            5.39             7.20%         $0.46      $448,120,428,859    \n",
       "190            Caracas       164,175  2,740.27        254.90%           VED            2.27            52.70%         $0.00      $482,359,318,768    \n",
       "143             Moscow     1,732,027    180.75          4.50%           RUB            1.57            49.80%         $0.59    $1,699,876,578,871    \n",
       "160          Mogadishu           645       NaN            NaN           SOS            6.07            10.00%         $1.41        $4,720,727,278    \n",
       "113        Monaco City           NaN       NaN            NaN           EUR             NaN               NaN         $2.00        $7,184,844,193    \n",
       "95              Maseru         2,512    155.86          5.20%           NaN            3.14             1.60%         $0.70        $2,460,072,444    \n",
       "8             Canberra       375,908     119.8          1.60%           AUD            1.74            16.30%         $0.93    $1,392,680,589,329    \n",
       "85               Tokyo     1,135,886    105.48          0.50%           NaN            1.42            68.50%         $1.06    $5,081,769,542,380    \n",
       "23             Bras���       462,299     167.4          3.70%           BRL            1.73            58.90%         $1.02    $1,839,758,040,766    \n",
       "33              Bangui           297    186.86         37.10%           NaN            4.72            35.60%         $1.41        $2,220,307,369    \n",
       "6         Buenos Aires       201,348    232.75         53.50%           ARS            2.26             9.80%         $1.10      $449,663,446,954    \n",
       "\n",
       "    Gross primary education enrollment (%) Gross tertiary education enrollment (%)  Infant mortality   Largest city  Life expectancy  \\\n",
       "36                                 100.20%                                  50.60%               7.4       Shanghai             77.0   \n",
       "186                                101.80%                                  88.20%               5.6  New York City             78.5   \n",
       "77                                 113.00%                                  28.10%              29.9       Kurebhar             69.4   \n",
       "163                                 73.00%                                     NaN              63.7           Juba             57.6   \n",
       "126                                 84.70%                                  10.20%              75.7          Lagos             54.3   \n",
       "190                                 97.20%                                  79.30%              21.4        Caracas             72.1   \n",
       "143                                102.60%                                  81.90%               6.1         Moscow             72.7   \n",
       "160                                 23.40%                                   2.50%              76.6         Bosaso             57.1   \n",
       "113                                    NaN                                     NaN               2.6    Monaco City              NaN   \n",
       "95                                 120.90%                                  10.20%              65.7         Maseru             53.7   \n",
       "8                                  100.30%                                 113.10%               3.1         Sydney             82.7   \n",
       "85                                  98.80%                                  63.20%               1.8          Tokyo             84.2   \n",
       "23                                 115.40%                                  51.30%              12.8          S����             75.7   \n",
       "33                                 102.00%                                   3.00%              84.5         Bangui             52.8   \n",
       "6                                  109.70%                                  90.00%               8.8   Buenos Aires             76.5   \n",
       "\n",
       "     Maternal mortality ratio Minimum wage Official language Out of pocket health expenditure  Physicians per thousand     Population  \\\n",
       "36                       29.0       $0.87   Standard Chinese                           32.40%                     1.98  1,397,715,000   \n",
       "186                      19.0       $7.25                NaN                           11.10%                     2.61    328,239,523   \n",
       "77                      145.0       $0.30              Hindi                           65.10%                     0.86  1,366,417,754   \n",
       "163                    1150.0          NaN           English                           61.30%                      NaN     11,062,113   \n",
       "126                     917.0       $0.54            English                           72.20%                     0.38    200,963,599   \n",
       "190                     125.0       $0.01            Spanish                           45.80%                     1.92     28,515,829   \n",
       "143                      17.0       $0.53            Russian                           36.40%                     4.01    144,373,535   \n",
       "160                     829.0          NaN            Arabic                              NaN                     0.02     15,442,905   \n",
       "113                       NaN      $11.72             French                            6.10%                     6.56         38,964   \n",
       "95                      544.0       $0.41            English                           16.90%                     0.07      2,125,268   \n",
       "8                         6.0      $13.59                NaN                           19.60%                     3.68     25,766,605   \n",
       "85                        5.0       $6.77                NaN                           13.10%                     2.41    126,226,568   \n",
       "23                       60.0       $1.53         Portuguese                           28.30%                     2.15    212,559,417   \n",
       "33                      829.0       $0.37             French                           39.60%                     0.06      4,745,185   \n",
       "6                        39.0       $3.35            Spanish                           17.60%                     3.96     44,938,712   \n",
       "\n",
       "    Population: Labor force participation (%) Tax revenue (%) Total tax rate Unemployment rate Urban_population   Latitude   Longitude  \\\n",
       "36                                     68.00%           9.40%         59.20%             4.32%      842,933,962  35.861660  104.195397   \n",
       "186                                    62.00%           9.60%         36.60%            14.70%      270,663,028  37.090240  -95.712891   \n",
       "77                                     49.30%          11.20%         49.70%             5.36%      471,031,528  20.593684   78.962880   \n",
       "163                                    72.40%             NaN         31.40%            12.24%        2,201,250   6.876992   31.306979   \n",
       "126                                    52.90%           1.50%         34.80%             8.10%      102,806,948   9.081999    8.675277   \n",
       "190                                    59.70%             NaN         73.30%             8.80%       25,162,368   6.423750  -66.589730   \n",
       "143                                    61.80%          11.40%         46.20%             4.59%      107,683,889  61.524010  105.318756   \n",
       "160                                    47.40%           0.00%            NaN            11.35%        7,034,861   5.152149   46.199616   \n",
       "113                                       NaN             NaN            NaN               NaN           38,964  43.738418    7.424616   \n",
       "95                                     67.90%          31.60%         13.60%            23.41%          607,508 -29.609988   28.233608   \n",
       "8                                      65.50%          23.00%         47.40%             5.27%       21,844,756 -25.274398  133.775136   \n",
       "85                                     61.70%          11.90%         46.70%             2.29%      115,782,416  36.204824  138.252924   \n",
       "23                                     63.90%          14.20%         65.10%            12.08%      183,241,641 -14.235004  -51.925280   \n",
       "33                                     72.00%           8.60%         73.30%             3.68%        1,982,064   6.611111   20.939444   \n",
       "6                                      61.30%          10.10%        106.30%             9.79%       41,339,571 -38.416097  -63.616672   \n",
       "\n",
       "     anomaly_score_original  anomaly_original  \n",
       "36                 0.647035                 1  \n",
       "186                0.596291                 1  \n",
       "77                 0.571656                 1  \n",
       "163                0.570527                 1  \n",
       "126                0.544632                 1  \n",
       "190                0.531859                 1  \n",
       "143                0.529119                 1  \n",
       "160                0.520696                 1  \n",
       "113                0.503057                 1  \n",
       "95                 0.495733                 1  \n",
       "8                  0.488885                 1  \n",
       "85                 0.483056                 1  \n",
       "23                 0.478466                 1  \n",
       "33                 0.477219                 1  \n",
       "6                  0.475051                 1  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "contamination = 0.08\n",
    "\n",
    "iso_forest = IsolationForest(\n",
    "    n_estimators=400,\n",
    "    contamination=contamination,\n",
    "    random_state=RANDOM_STATE,\n",
    "    n_jobs=-1\n",
    ")\n",
    "\n",
    "labels_original = iso_forest.fit_predict(X)   # 1 = нормальный объект, -1 = аномалия\n",
    "scores_original = -iso_forest.score_samples(X)  # чем больше, тем более аномальный объект\n",
    "\n",
    "is_anomaly_original = (labels_original == -1).astype(int)\n",
    "\n",
    "result_original = df_raw.copy()\n",
    "result_original[\"anomaly_score_original\"] = scores_original\n",
    "result_original[\"anomaly_original\"] = is_anomaly_original\n",
    "\n",
    "print(\"Число аномалий:\", int(is_anomaly_original.sum()))\n",
    "print(\"Доля аномалий:\", round(is_anomaly_original.mean(), 4))\n",
    "\n",
    "display(\n",
    "    result_original.loc[result_original[\"anomaly_original\"] == 1]\n",
    "    .sort_values(\"anomaly_score_original\", ascending=False)\n",
    "    .head(15)\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c1848f1f",
   "metadata": {},
   "source": [
    "## 6. Внутренние показатели качества метода\n",
    "\n",
    "Так как истинной разметки аномалий нет, качество оценивается внутренними метриками разделения:\n",
    "- `silhouette_score`;\n",
    "- `calinski_harabasz_score`;\n",
    "- `davies_bouldin_score`.\n",
    "\n",
    "Дополнительно считается разрыв средних аномальных оценок между классами."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "603cbe59",
   "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>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>silhouette_score</th>\n",
       "      <td>0.428121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>calinski_harabasz_score</th>\n",
       "      <td>13.127589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>davies_bouldin_score</th>\n",
       "      <td>2.874742</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean_score_normal</th>\n",
       "      <td>0.399060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean_score_anomaly</th>\n",
       "      <td>0.523997</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>score_gap</th>\n",
       "      <td>0.124936</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>anomaly_share</th>\n",
       "      <td>0.082051</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                             value\n",
       "silhouette_score          0.428121\n",
       "calinski_harabasz_score  13.127589\n",
       "davies_bouldin_score      2.874742\n",
       "mean_score_normal         0.399060\n",
       "mean_score_anomaly        0.523997\n",
       "score_gap                 0.124936\n",
       "anomaly_share             0.082051"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "def safe_internal_metrics(X_data, binary_labels, anomaly_scores):\n",
    "    metrics = {}\n",
    "    unique = np.unique(binary_labels)\n",
    "\n",
    "    if len(unique) == 2 and np.bincount(binary_labels).min() > 1:\n",
    "        metrics[\"silhouette_score\"] = silhouette_score(X_data, binary_labels)\n",
    "        metrics[\"calinski_harabasz_score\"] = calinski_harabasz_score(X_data, binary_labels)\n",
    "        metrics[\"davies_bouldin_score\"] = davies_bouldin_score(X_data, binary_labels)\n",
    "    else:\n",
    "        metrics[\"silhouette_score\"] = np.nan\n",
    "        metrics[\"calinski_harabasz_score\"] = np.nan\n",
    "        metrics[\"davies_bouldin_score\"] = np.nan\n",
    "\n",
    "    scores_normal = anomaly_scores[binary_labels == 0]\n",
    "    scores_anomaly = anomaly_scores[binary_labels == 1]\n",
    "    metrics[\"mean_score_normal\"] = float(np.mean(scores_normal)) if len(scores_normal) else np.nan\n",
    "    metrics[\"mean_score_anomaly\"] = float(np.mean(scores_anomaly)) if len(scores_anomaly) else np.nan\n",
    "    metrics[\"score_gap\"] = metrics[\"mean_score_anomaly\"] - metrics[\"mean_score_normal\"]\n",
    "    metrics[\"anomaly_share\"] = float(np.mean(binary_labels))\n",
    "    return pd.Series(metrics)\n",
    "\n",
    "metrics_original = safe_internal_metrics(X, is_anomaly_original, scores_original)\n",
    "display(metrics_original.to_frame(\"value\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c099529",
   "metadata": {},
   "source": [
    "## 7. Характеристика аномальных объектов\n",
    "\n",
    "Ниже формируются:\n",
    "- список наиболее аномальных стран;\n",
    "- сравнительная статистика аномалий и неаномалий по признакам;\n",
    "- признаки с наибольшим средним стандартизованным отклонением у аномальных объектов."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "7de9f681",
   "metadata": {},
   "outputs": [
    {
     "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>Country</th>\n",
       "      <th>anomaly_score_original</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>China</td>\n",
       "      <td>0.647035</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>186</th>\n",
       "      <td>United States</td>\n",
       "      <td>0.596291</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>India</td>\n",
       "      <td>0.571656</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>163</th>\n",
       "      <td>South Sudan</td>\n",
       "      <td>0.570527</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126</th>\n",
       "      <td>Nigeria</td>\n",
       "      <td>0.544632</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>190</th>\n",
       "      <td>Venezuela</td>\n",
       "      <td>0.531859</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>Russia</td>\n",
       "      <td>0.529119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>Somalia</td>\n",
       "      <td>0.520696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113</th>\n",
       "      <td>Monaco</td>\n",
       "      <td>0.503057</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>Lesotho</td>\n",
       "      <td>0.495733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Australia</td>\n",
       "      <td>0.488885</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>Japan</td>\n",
       "      <td>0.483056</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>Brazil</td>\n",
       "      <td>0.478466</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>Central African Republic</td>\n",
       "      <td>0.477219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Argentina</td>\n",
       "      <td>0.475051</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      Country  anomaly_score_original\n",
       "36                      China                0.647035\n",
       "186             United States                0.596291\n",
       "77                      India                0.571656\n",
       "163               South Sudan                0.570527\n",
       "126                   Nigeria                0.544632\n",
       "190                 Venezuela                0.531859\n",
       "143                    Russia                0.529119\n",
       "160                   Somalia                0.520696\n",
       "113                    Monaco                0.503057\n",
       "95                    Lesotho                0.495733\n",
       "8                   Australia                0.488885\n",
       "85                      Japan                0.483056\n",
       "23                     Brazil                0.478466\n",
       "33   Central African Republic                0.477219\n",
       "6                   Argentina                0.475051"
      ]
     },
     "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>normal_mean_z</th>\n",
       "      <th>anomaly_mean_z</th>\n",
       "      <th>abs_gap</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>land_area_km2</th>\n",
       "      <td>-0.155530</td>\n",
       "      <td>1.739991</td>\n",
       "      <td>1.895521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>urban_population</th>\n",
       "      <td>-0.141622</td>\n",
       "      <td>1.584395</td>\n",
       "      <td>1.726016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>co2_emissions</th>\n",
       "      <td>-0.130788</td>\n",
       "      <td>1.463189</td>\n",
       "      <td>1.593977</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>armed_forces_size</th>\n",
       "      <td>-0.129271</td>\n",
       "      <td>1.446215</td>\n",
       "      <td>1.575485</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>population</th>\n",
       "      <td>-0.129256</td>\n",
       "      <td>1.446051</td>\n",
       "      <td>1.575307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>gdp</th>\n",
       "      <td>-0.124797</td>\n",
       "      <td>1.396161</td>\n",
       "      <td>1.520958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cpi_change</th>\n",
       "      <td>-0.115914</td>\n",
       "      <td>1.296789</td>\n",
       "      <td>1.412703</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>cpi</th>\n",
       "      <td>-0.097376</td>\n",
       "      <td>1.089396</td>\n",
       "      <td>1.186772</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>density_p_km2</th>\n",
       "      <td>-0.062458</td>\n",
       "      <td>0.698750</td>\n",
       "      <td>0.761208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>maternal_mortality_ratio</th>\n",
       "      <td>-0.060379</td>\n",
       "      <td>0.675489</td>\n",
       "      <td>0.735868</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unemployment_rate</th>\n",
       "      <td>-0.059783</td>\n",
       "      <td>0.668818</td>\n",
       "      <td>0.728601</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>infant_mortality</th>\n",
       "      <td>-0.045448</td>\n",
       "      <td>0.508446</td>\n",
       "      <td>0.553894</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>life_expectancy</th>\n",
       "      <td>0.042545</td>\n",
       "      <td>-0.475973</td>\n",
       "      <td>0.518518</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>minimum_wage</th>\n",
       "      <td>-0.041264</td>\n",
       "      <td>0.461646</td>\n",
       "      <td>0.502911</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>latitude</th>\n",
       "      <td>0.040838</td>\n",
       "      <td>-0.456880</td>\n",
       "      <td>0.497718</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                          normal_mean_z  anomaly_mean_z   abs_gap\n",
       "land_area_km2                 -0.155530        1.739991  1.895521\n",
       "urban_population              -0.141622        1.584395  1.726016\n",
       "co2_emissions                 -0.130788        1.463189  1.593977\n",
       "armed_forces_size             -0.129271        1.446215  1.575485\n",
       "population                    -0.129256        1.446051  1.575307\n",
       "gdp                           -0.124797        1.396161  1.520958\n",
       "cpi_change                    -0.115914        1.296789  1.412703\n",
       "cpi                           -0.097376        1.089396  1.186772\n",
       "density_p_km2                 -0.062458        0.698750  0.761208\n",
       "maternal_mortality_ratio      -0.060379        0.675489  0.735868\n",
       "unemployment_rate             -0.059783        0.668818  0.728601\n",
       "infant_mortality              -0.045448        0.508446  0.553894\n",
       "life_expectancy                0.042545       -0.475973  0.518518\n",
       "minimum_wage                  -0.041264        0.461646  0.502911\n",
       "latitude                       0.040838       -0.456880  0.497718"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "top_anomalies_original = result_original.loc[result_original[\"anomaly_original\"] == 1].copy()\n",
    "top_anomalies_original = top_anomalies_original.sort_values(\"anomaly_score_original\", ascending=False)\n",
    "\n",
    "country_col_candidates = [c for c in df_raw.columns if \"country\" in c.lower()]\n",
    "country_col = country_col_candidates[0] if country_col_candidates else df_raw.columns[0]\n",
    "\n",
    "print(\"Наиболее аномальные страны:\")\n",
    "display(top_anomalies_original[[country_col, \"anomaly_score_original\"]].head(15))\n",
    "\n",
    "X_df = pd.DataFrame(X, columns=feature_names)\n",
    "X_df[\"anomaly_original\"] = is_anomaly_original\n",
    "\n",
    "group_mean = X_df.groupby(\"anomaly_original\").mean().T\n",
    "group_mean.columns = [\"normal_mean_z\", \"anomaly_mean_z\"]\n",
    "group_mean[\"abs_gap\"] = (group_mean[\"anomaly_mean_z\"] - group_mean[\"normal_mean_z\"]).abs()\n",
    "group_mean = group_mean.sort_values(\"abs_gap\", ascending=False)\n",
    "\n",
    "print(\"Признаки с наибольшим отличием аномалий от обычных объектов:\")\n",
    "display(group_mean.head(15))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a754a377",
   "metadata": {},
   "source": [
    "## 8. Снижение размерности до двух новых переменных\n",
    "\n",
    "Для уменьшения размерности применяется **PCA**.\n",
    "Метод даёт линейные компоненты, хорошо интерпретируется и устойчив на умеренных данных."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4d6981f2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Доли объяснённой дисперсии по компонентам: [0.24071869 0.16855004]\n",
      "Суммарная объяснённая дисперсия: 0.4092687286603829\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>component_1</th>\n",
       "      <th>component_2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3.745014</td>\n",
       "      <td>1.321565</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.470165</td>\n",
       "      <td>-0.885146</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.716611</td>\n",
       "      <td>0.222846</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-2.176383</td>\n",
       "      <td>-1.170742</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4.121260</td>\n",
       "      <td>0.711285</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   component_1  component_2\n",
       "0     3.745014     1.321565\n",
       "1    -1.470165    -0.885146\n",
       "2    -0.716611     0.222846\n",
       "3    -2.176383    -1.170742\n",
       "4     4.121260     0.711285"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "pca = PCA(n_components=2, random_state=RANDOM_STATE)\n",
    "X_2d = pca.fit_transform(X)\n",
    "\n",
    "explained_variance = pca.explained_variance_ratio_\n",
    "print(\"Доли объяснённой дисперсии по компонентам:\", explained_variance)\n",
    "print(\"Суммарная объяснённая дисперсия:\", explained_variance.sum())\n",
    "\n",
    "components_df = pd.DataFrame(\n",
    "    X_2d,\n",
    "    columns=[\"component_1\", \"component_2\"]\n",
    ")\n",
    "\n",
    "display(components_df.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26486186",
   "metadata": {},
   "source": [
    "## 9. Поиск аномалий тем же методом на двух новых признаках"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "259cd002",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Число аномалий в 2D-пространстве: 16\n",
      "Доля аномалий в 2D-пространстве: 0.0821\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>Country</th>\n",
       "      <th>Density\\n(P/Km2)</th>\n",
       "      <th>Abbreviation</th>\n",
       "      <th>Agricultural Land( %)</th>\n",
       "      <th>Land Area(Km2)</th>\n",
       "      <th>Armed Forces size</th>\n",
       "      <th>Birth Rate</th>\n",
       "      <th>Calling Code</th>\n",
       "      <th>Capital/Major City</th>\n",
       "      <th>Co2-Emissions</th>\n",
       "      <th>CPI</th>\n",
       "      <th>CPI Change (%)</th>\n",
       "      <th>Currency-Code</th>\n",
       "      <th>Fertility Rate</th>\n",
       "      <th>Forested Area (%)</th>\n",
       "      <th>Gasoline Price</th>\n",
       "      <th>GDP</th>\n",
       "      <th>Gross primary education enrollment (%)</th>\n",
       "      <th>Gross tertiary education enrollment (%)</th>\n",
       "      <th>Infant mortality</th>\n",
       "      <th>Largest city</th>\n",
       "      <th>Life expectancy</th>\n",
       "      <th>Maternal mortality ratio</th>\n",
       "      <th>Minimum wage</th>\n",
       "      <th>Official language</th>\n",
       "      <th>Out of pocket health expenditure</th>\n",
       "      <th>Physicians per thousand</th>\n",
       "      <th>Population</th>\n",
       "      <th>Population: Labor force participation (%)</th>\n",
       "      <th>Tax revenue (%)</th>\n",
       "      <th>Total tax rate</th>\n",
       "      <th>Unemployment rate</th>\n",
       "      <th>Urban_population</th>\n",
       "      <th>Latitude</th>\n",
       "      <th>Longitude</th>\n",
       "      <th>component_1</th>\n",
       "      <th>component_2</th>\n",
       "      <th>anomaly_score_2d</th>\n",
       "      <th>anomaly_2d</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>China</td>\n",
       "      <td>153</td>\n",
       "      <td>CN</td>\n",
       "      <td>56.20%</td>\n",
       "      <td>9,596,960</td>\n",
       "      <td>2,695,000</td>\n",
       "      <td>10.90</td>\n",
       "      <td>86.0</td>\n",
       "      <td>Beijing</td>\n",
       "      <td>9,893,038</td>\n",
       "      <td>125.08</td>\n",
       "      <td>2.90%</td>\n",
       "      <td>CNY</td>\n",
       "      <td>1.69</td>\n",
       "      <td>22.40%</td>\n",
       "      <td>$0.96</td>\n",
       "      <td>$19,910,000,000,000</td>\n",
       "      <td>100.20%</td>\n",
       "      <td>50.60%</td>\n",
       "      <td>7.4</td>\n",
       "      <td>Shanghai</td>\n",
       "      <td>77.0</td>\n",
       "      <td>29.0</td>\n",
       "      <td>$0.87</td>\n",
       "      <td>Standard Chinese</td>\n",
       "      <td>32.40%</td>\n",
       "      <td>1.98</td>\n",
       "      <td>1,397,715,000</td>\n",
       "      <td>68.00%</td>\n",
       "      <td>9.40%</td>\n",
       "      <td>59.20%</td>\n",
       "      <td>4.32%</td>\n",
       "      <td>842,933,962</td>\n",
       "      <td>35.861660</td>\n",
       "      <td>104.195397</td>\n",
       "      <td>-6.061188</td>\n",
       "      <td>21.160516</td>\n",
       "      <td>0.832235</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>186</th>\n",
       "      <td>United States</td>\n",
       "      <td>36</td>\n",
       "      <td>US</td>\n",
       "      <td>44.40%</td>\n",
       "      <td>9,833,517</td>\n",
       "      <td>1,359,000</td>\n",
       "      <td>11.60</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Washington, D.C.</td>\n",
       "      <td>5,006,302</td>\n",
       "      <td>117.24</td>\n",
       "      <td>7.50%</td>\n",
       "      <td>USD</td>\n",
       "      <td>1.73</td>\n",
       "      <td>33.90%</td>\n",
       "      <td>$0.71</td>\n",
       "      <td>$21,427,700,000,000</td>\n",
       "      <td>101.80%</td>\n",
       "      <td>88.20%</td>\n",
       "      <td>5.6</td>\n",
       "      <td>New York City</td>\n",
       "      <td>78.5</td>\n",
       "      <td>19.0</td>\n",
       "      <td>$7.25</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11.10%</td>\n",
       "      <td>2.61</td>\n",
       "      <td>328,239,523</td>\n",
       "      <td>62.00%</td>\n",
       "      <td>9.60%</td>\n",
       "      <td>36.60%</td>\n",
       "      <td>14.70%</td>\n",
       "      <td>270,663,028</td>\n",
       "      <td>37.090240</td>\n",
       "      <td>-95.712891</td>\n",
       "      <td>-5.472201</td>\n",
       "      <td>10.671317</td>\n",
       "      <td>0.751637</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>India</td>\n",
       "      <td>464</td>\n",
       "      <td>IN</td>\n",
       "      <td>60.40%</td>\n",
       "      <td>3,287,263</td>\n",
       "      <td>3,031,000</td>\n",
       "      <td>17.86</td>\n",
       "      <td>91.0</td>\n",
       "      <td>New Delhi</td>\n",
       "      <td>2,407,672</td>\n",
       "      <td>180.44</td>\n",
       "      <td>7.70%</td>\n",
       "      <td>INR</td>\n",
       "      <td>2.22</td>\n",
       "      <td>23.80%</td>\n",
       "      <td>$0.97</td>\n",
       "      <td>$2,611,000,000,000</td>\n",
       "      <td>113.00%</td>\n",
       "      <td>28.10%</td>\n",
       "      <td>29.9</td>\n",
       "      <td>Kurebhar</td>\n",
       "      <td>69.4</td>\n",
       "      <td>145.0</td>\n",
       "      <td>$0.30</td>\n",
       "      <td>Hindi</td>\n",
       "      <td>65.10%</td>\n",
       "      <td>0.86</td>\n",
       "      <td>1,366,417,754</td>\n",
       "      <td>49.30%</td>\n",
       "      <td>11.20%</td>\n",
       "      <td>49.70%</td>\n",
       "      <td>5.36%</td>\n",
       "      <td>471,031,528</td>\n",
       "      <td>20.593684</td>\n",
       "      <td>78.962880</td>\n",
       "      <td>-1.454311</td>\n",
       "      <td>12.067417</td>\n",
       "      <td>0.740562</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>Russia</td>\n",
       "      <td>9</td>\n",
       "      <td>RU</td>\n",
       "      <td>13.30%</td>\n",
       "      <td>17,098,240</td>\n",
       "      <td>1,454,000</td>\n",
       "      <td>11.50</td>\n",
       "      <td>7.0</td>\n",
       "      <td>Moscow</td>\n",
       "      <td>1,732,027</td>\n",
       "      <td>180.75</td>\n",
       "      <td>4.50%</td>\n",
       "      <td>RUB</td>\n",
       "      <td>1.57</td>\n",
       "      <td>49.80%</td>\n",
       "      <td>$0.59</td>\n",
       "      <td>$1,699,876,578,871</td>\n",
       "      <td>102.60%</td>\n",
       "      <td>81.90%</td>\n",
       "      <td>6.1</td>\n",
       "      <td>Moscow</td>\n",
       "      <td>72.7</td>\n",
       "      <td>17.0</td>\n",
       "      <td>$0.53</td>\n",
       "      <td>Russian</td>\n",
       "      <td>36.40%</td>\n",
       "      <td>4.01</td>\n",
       "      <td>144,373,535</td>\n",
       "      <td>61.80%</td>\n",
       "      <td>11.40%</td>\n",
       "      <td>46.20%</td>\n",
       "      <td>4.59%</td>\n",
       "      <td>107,683,889</td>\n",
       "      <td>61.524010</td>\n",
       "      <td>105.318756</td>\n",
       "      <td>-3.407737</td>\n",
       "      <td>5.785855</td>\n",
       "      <td>0.678986</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126</th>\n",
       "      <td>Nigeria</td>\n",
       "      <td>226</td>\n",
       "      <td>NG</td>\n",
       "      <td>77.70%</td>\n",
       "      <td>923,768</td>\n",
       "      <td>215,000</td>\n",
       "      <td>37.91</td>\n",
       "      <td>234.0</td>\n",
       "      <td>Abuja</td>\n",
       "      <td>120,369</td>\n",
       "      <td>267.51</td>\n",
       "      <td>11.40%</td>\n",
       "      <td>NGN</td>\n",
       "      <td>5.39</td>\n",
       "      <td>7.20%</td>\n",
       "      <td>$0.46</td>\n",
       "      <td>$448,120,428,859</td>\n",
       "      <td>84.70%</td>\n",
       "      <td>10.20%</td>\n",
       "      <td>75.7</td>\n",
       "      <td>Lagos</td>\n",
       "      <td>54.3</td>\n",
       "      <td>917.0</td>\n",
       "      <td>$0.54</td>\n",
       "      <td>English</td>\n",
       "      <td>72.20%</td>\n",
       "      <td>0.38</td>\n",
       "      <td>200,963,599</td>\n",
       "      <td>52.90%</td>\n",
       "      <td>1.50%</td>\n",
       "      <td>34.80%</td>\n",
       "      <td>8.10%</td>\n",
       "      <td>102,806,948</td>\n",
       "      <td>9.081999</td>\n",
       "      <td>8.675277</td>\n",
       "      <td>5.844181</td>\n",
       "      <td>2.860024</td>\n",
       "      <td>0.674378</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>163</th>\n",
       "      <td>South Sudan</td>\n",
       "      <td>18</td>\n",
       "      <td>SS</td>\n",
       "      <td>NaN</td>\n",
       "      <td>644,329</td>\n",
       "      <td>185,000</td>\n",
       "      <td>35.01</td>\n",
       "      <td>211.0</td>\n",
       "      <td>Juba</td>\n",
       "      <td>1,727</td>\n",
       "      <td>4,583.71</td>\n",
       "      <td>187.90%</td>\n",
       "      <td>SSP</td>\n",
       "      <td>4.70</td>\n",
       "      <td>NaN</td>\n",
       "      <td>$0.28</td>\n",
       "      <td>$11,997,800,751</td>\n",
       "      <td>73.00%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>63.7</td>\n",
       "      <td>Juba</td>\n",
       "      <td>57.6</td>\n",
       "      <td>1150.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>English</td>\n",
       "      <td>61.30%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11,062,113</td>\n",
       "      <td>72.40%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>31.40%</td>\n",
       "      <td>12.24%</td>\n",
       "      <td>2,201,250</td>\n",
       "      <td>6.876992</td>\n",
       "      <td>31.306979</td>\n",
       "      <td>6.512153</td>\n",
       "      <td>1.807443</td>\n",
       "      <td>0.667510</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113</th>\n",
       "      <td>Monaco</td>\n",
       "      <td>26,337</td>\n",
       "      <td>MC</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5.90</td>\n",
       "      <td>377.0</td>\n",
       "      <td>Monaco City</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>EUR</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>$2.00</td>\n",
       "      <td>$7,184,844,193</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.6</td>\n",
       "      <td>Monaco City</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>$11.72</td>\n",
       "      <td>French</td>\n",
       "      <td>6.10%</td>\n",
       "      <td>6.56</td>\n",
       "      <td>38,964</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>38,964</td>\n",
       "      <td>43.738418</td>\n",
       "      <td>7.424616</td>\n",
       "      <td>-4.017761</td>\n",
       "      <td>-2.152247</td>\n",
       "      <td>0.624152</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>Brazil</td>\n",
       "      <td>25</td>\n",
       "      <td>BR</td>\n",
       "      <td>33.90%</td>\n",
       "      <td>8,515,770</td>\n",
       "      <td>730,000</td>\n",
       "      <td>13.92</td>\n",
       "      <td>55.0</td>\n",
       "      <td>Bras���</td>\n",
       "      <td>462,299</td>\n",
       "      <td>167.4</td>\n",
       "      <td>3.70%</td>\n",
       "      <td>BRL</td>\n",
       "      <td>1.73</td>\n",
       "      <td>58.90%</td>\n",
       "      <td>$1.02</td>\n",
       "      <td>$1,839,758,040,766</td>\n",
       "      <td>115.40%</td>\n",
       "      <td>51.30%</td>\n",
       "      <td>12.8</td>\n",
       "      <td>S����</td>\n",
       "      <td>75.7</td>\n",
       "      <td>60.0</td>\n",
       "      <td>$1.53</td>\n",
       "      <td>Portuguese</td>\n",
       "      <td>28.30%</td>\n",
       "      <td>2.15</td>\n",
       "      <td>212,559,417</td>\n",
       "      <td>63.90%</td>\n",
       "      <td>14.20%</td>\n",
       "      <td>65.10%</td>\n",
       "      <td>12.08%</td>\n",
       "      <td>183,241,641</td>\n",
       "      <td>-14.235004</td>\n",
       "      <td>-51.925280</td>\n",
       "      <td>-1.626349</td>\n",
       "      <td>3.496162</td>\n",
       "      <td>0.603769</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>131</th>\n",
       "      <td>Pakistan</td>\n",
       "      <td>287</td>\n",
       "      <td>PK</td>\n",
       "      <td>47.80%</td>\n",
       "      <td>796,095</td>\n",
       "      <td>936,000</td>\n",
       "      <td>28.25</td>\n",
       "      <td>92.0</td>\n",
       "      <td>Islamabad</td>\n",
       "      <td>201,150</td>\n",
       "      <td>182.32</td>\n",
       "      <td>10.60%</td>\n",
       "      <td>PKR</td>\n",
       "      <td>3.51</td>\n",
       "      <td>1.90%</td>\n",
       "      <td>$0.79</td>\n",
       "      <td>$304,400,000,000</td>\n",
       "      <td>94.30%</td>\n",
       "      <td>9.00%</td>\n",
       "      <td>57.2</td>\n",
       "      <td>Karachi</td>\n",
       "      <td>67.1</td>\n",
       "      <td>140.0</td>\n",
       "      <td>$0.69</td>\n",
       "      <td>Urdu</td>\n",
       "      <td>66.50%</td>\n",
       "      <td>0.98</td>\n",
       "      <td>216,565,318</td>\n",
       "      <td>52.60%</td>\n",
       "      <td>9.20%</td>\n",
       "      <td>33.90%</td>\n",
       "      <td>4.45%</td>\n",
       "      <td>79,927,762</td>\n",
       "      <td>30.375321</td>\n",
       "      <td>69.345116</td>\n",
       "      <td>2.024238</td>\n",
       "      <td>2.606812</td>\n",
       "      <td>0.590210</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>Chad</td>\n",
       "      <td>13</td>\n",
       "      <td>TD</td>\n",
       "      <td>39.70%</td>\n",
       "      <td>1,284,000</td>\n",
       "      <td>35,000</td>\n",
       "      <td>42.17</td>\n",
       "      <td>235.0</td>\n",
       "      <td>N'Djamena</td>\n",
       "      <td>1,016</td>\n",
       "      <td>117.7</td>\n",
       "      <td>-1.00%</td>\n",
       "      <td>XAF</td>\n",
       "      <td>5.75</td>\n",
       "      <td>3.80%</td>\n",
       "      <td>$0.78</td>\n",
       "      <td>$11,314,951,343</td>\n",
       "      <td>86.80%</td>\n",
       "      <td>3.30%</td>\n",
       "      <td>71.4</td>\n",
       "      <td>N'Djamena</td>\n",
       "      <td>54.0</td>\n",
       "      <td>1140.0</td>\n",
       "      <td>$0.60</td>\n",
       "      <td>French</td>\n",
       "      <td>56.40%</td>\n",
       "      <td>0.04</td>\n",
       "      <td>15,946,876</td>\n",
       "      <td>70.70%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>63.50%</td>\n",
       "      <td>1.89%</td>\n",
       "      <td>3,712,273</td>\n",
       "      <td>15.454166</td>\n",
       "      <td>18.732207</td>\n",
       "      <td>6.194705</td>\n",
       "      <td>0.968427</td>\n",
       "      <td>0.586011</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>78</th>\n",
       "      <td>Indonesia</td>\n",
       "      <td>151</td>\n",
       "      <td>ID</td>\n",
       "      <td>31.50%</td>\n",
       "      <td>1,904,569</td>\n",
       "      <td>676,000</td>\n",
       "      <td>18.07</td>\n",
       "      <td>62.0</td>\n",
       "      <td>Jakarta</td>\n",
       "      <td>563,325</td>\n",
       "      <td>151.18</td>\n",
       "      <td>3.00%</td>\n",
       "      <td>IDR</td>\n",
       "      <td>2.31</td>\n",
       "      <td>49.90%</td>\n",
       "      <td>$0.63</td>\n",
       "      <td>$1,119,190,780,753</td>\n",
       "      <td>106.40%</td>\n",
       "      <td>36.30%</td>\n",
       "      <td>21.1</td>\n",
       "      <td>Kalimantan</td>\n",
       "      <td>71.5</td>\n",
       "      <td>177.0</td>\n",
       "      <td>$0.48</td>\n",
       "      <td>Indonesian</td>\n",
       "      <td>48.30%</td>\n",
       "      <td>0.43</td>\n",
       "      <td>270,203,917</td>\n",
       "      <td>67.50%</td>\n",
       "      <td>10.20%</td>\n",
       "      <td>30.10%</td>\n",
       "      <td>4.69%</td>\n",
       "      <td>151,509,724</td>\n",
       "      <td>-0.789275</td>\n",
       "      <td>113.921327</td>\n",
       "      <td>0.239051</td>\n",
       "      <td>2.879473</td>\n",
       "      <td>0.578641</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>Somalia</td>\n",
       "      <td>25</td>\n",
       "      <td>SO</td>\n",
       "      <td>70.30%</td>\n",
       "      <td>637,657</td>\n",
       "      <td>20,000</td>\n",
       "      <td>41.75</td>\n",
       "      <td>252.0</td>\n",
       "      <td>Mogadishu</td>\n",
       "      <td>645</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>SOS</td>\n",
       "      <td>6.07</td>\n",
       "      <td>10.00%</td>\n",
       "      <td>$1.41</td>\n",
       "      <td>$4,720,727,278</td>\n",
       "      <td>23.40%</td>\n",
       "      <td>2.50%</td>\n",
       "      <td>76.6</td>\n",
       "      <td>Bosaso</td>\n",
       "      <td>57.1</td>\n",
       "      <td>829.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Arabic</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.02</td>\n",
       "      <td>15,442,905</td>\n",
       "      <td>47.40%</td>\n",
       "      <td>0.00%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11.35%</td>\n",
       "      <td>7,034,861</td>\n",
       "      <td>5.152149</td>\n",
       "      <td>46.199616</td>\n",
       "      <td>5.908173</td>\n",
       "      <td>0.972714</td>\n",
       "      <td>0.562088</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66</th>\n",
       "      <td>Greece</td>\n",
       "      <td>81</td>\n",
       "      <td>GR</td>\n",
       "      <td>47.60%</td>\n",
       "      <td>131,957</td>\n",
       "      <td>146,000</td>\n",
       "      <td>8.10</td>\n",
       "      <td>30.0</td>\n",
       "      <td>Athens</td>\n",
       "      <td>62,434</td>\n",
       "      <td>101.87</td>\n",
       "      <td>0.20%</td>\n",
       "      <td>EUR</td>\n",
       "      <td>1.35</td>\n",
       "      <td>31.70%</td>\n",
       "      <td>$1.54</td>\n",
       "      <td>$209,852,761,469</td>\n",
       "      <td>99.60%</td>\n",
       "      <td>136.60%</td>\n",
       "      <td>3.6</td>\n",
       "      <td>Macedonia</td>\n",
       "      <td>81.3</td>\n",
       "      <td>3.0</td>\n",
       "      <td>$4.46</td>\n",
       "      <td>Greek</td>\n",
       "      <td>35.50%</td>\n",
       "      <td>5.48</td>\n",
       "      <td>10,716,322</td>\n",
       "      <td>51.80%</td>\n",
       "      <td>26.20%</td>\n",
       "      <td>51.90%</td>\n",
       "      <td>17.24%</td>\n",
       "      <td>8,507,474</td>\n",
       "      <td>39.074208</td>\n",
       "      <td>21.824312</td>\n",
       "      <td>-4.174639</td>\n",
       "      <td>-1.205791</td>\n",
       "      <td>0.542756</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>Japan</td>\n",
       "      <td>347</td>\n",
       "      <td>JP</td>\n",
       "      <td>12.30%</td>\n",
       "      <td>377,944</td>\n",
       "      <td>261,000</td>\n",
       "      <td>7.40</td>\n",
       "      <td>81.0</td>\n",
       "      <td>Tokyo</td>\n",
       "      <td>1,135,886</td>\n",
       "      <td>105.48</td>\n",
       "      <td>0.50%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.42</td>\n",
       "      <td>68.50%</td>\n",
       "      <td>$1.06</td>\n",
       "      <td>$5,081,769,542,380</td>\n",
       "      <td>98.80%</td>\n",
       "      <td>63.20%</td>\n",
       "      <td>1.8</td>\n",
       "      <td>Tokyo</td>\n",
       "      <td>84.2</td>\n",
       "      <td>5.0</td>\n",
       "      <td>$6.77</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13.10%</td>\n",
       "      <td>2.41</td>\n",
       "      <td>126,226,568</td>\n",
       "      <td>61.70%</td>\n",
       "      <td>11.90%</td>\n",
       "      <td>46.70%</td>\n",
       "      <td>2.29%</td>\n",
       "      <td>115,782,416</td>\n",
       "      <td>36.204824</td>\n",
       "      <td>138.252924</td>\n",
       "      <td>-3.576397</td>\n",
       "      <td>1.632946</td>\n",
       "      <td>0.537675</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>Central African Republic</td>\n",
       "      <td>8</td>\n",
       "      <td>CF</td>\n",
       "      <td>8.20%</td>\n",
       "      <td>622,984</td>\n",
       "      <td>8,000</td>\n",
       "      <td>35.35</td>\n",
       "      <td>236.0</td>\n",
       "      <td>Bangui</td>\n",
       "      <td>297</td>\n",
       "      <td>186.86</td>\n",
       "      <td>37.10%</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4.72</td>\n",
       "      <td>35.60%</td>\n",
       "      <td>$1.41</td>\n",
       "      <td>$2,220,307,369</td>\n",
       "      <td>102.00%</td>\n",
       "      <td>3.00%</td>\n",
       "      <td>84.5</td>\n",
       "      <td>Bangui</td>\n",
       "      <td>52.8</td>\n",
       "      <td>829.0</td>\n",
       "      <td>$0.37</td>\n",
       "      <td>French</td>\n",
       "      <td>39.60%</td>\n",
       "      <td>0.06</td>\n",
       "      <td>4,745,185</td>\n",
       "      <td>72.00%</td>\n",
       "      <td>8.60%</td>\n",
       "      <td>73.30%</td>\n",
       "      <td>3.68%</td>\n",
       "      <td>1,982,064</td>\n",
       "      <td>6.611111</td>\n",
       "      <td>20.939444</td>\n",
       "      <td>5.534218</td>\n",
       "      <td>0.560500</td>\n",
       "      <td>0.530670</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      Country Density\\n(P/Km2) Abbreviation Agricultural Land( %) Land Area(Km2) Armed Forces size  Birth Rate  Calling Code  \\\n",
       "36                      China              153           CN                56.20%      9,596,960         2,695,000       10.90          86.0   \n",
       "186             United States               36           US                44.40%      9,833,517         1,359,000       11.60           1.0   \n",
       "77                      India              464           IN                60.40%      3,287,263         3,031,000       17.86          91.0   \n",
       "143                    Russia                9           RU                13.30%     17,098,240         1,454,000       11.50           7.0   \n",
       "126                   Nigeria              226           NG                77.70%        923,768           215,000       37.91         234.0   \n",
       "163               South Sudan               18           SS                   NaN        644,329           185,000       35.01         211.0   \n",
       "113                    Monaco           26,337           MC                   NaN              2               NaN        5.90         377.0   \n",
       "23                     Brazil               25           BR                33.90%      8,515,770           730,000       13.92          55.0   \n",
       "131                  Pakistan              287           PK                47.80%        796,095           936,000       28.25          92.0   \n",
       "34                       Chad               13           TD                39.70%      1,284,000            35,000       42.17         235.0   \n",
       "78                  Indonesia              151           ID                31.50%      1,904,569           676,000       18.07          62.0   \n",
       "160                   Somalia               25           SO                70.30%        637,657            20,000       41.75         252.0   \n",
       "66                     Greece               81           GR                47.60%        131,957           146,000        8.10          30.0   \n",
       "85                      Japan              347           JP                12.30%        377,944           261,000        7.40          81.0   \n",
       "33   Central African Republic                8           CF                 8.20%        622,984             8,000       35.35         236.0   \n",
       "\n",
       "    Capital/Major City Co2-Emissions       CPI CPI Change (%) Currency-Code  Fertility Rate Forested Area (%) Gasoline Price                   GDP  \\\n",
       "36             Beijing     9,893,038    125.08          2.90%           CNY            1.69            22.40%         $0.96   $19,910,000,000,000    \n",
       "186   Washington, D.C.     5,006,302    117.24          7.50%           USD            1.73            33.90%         $0.71   $21,427,700,000,000    \n",
       "77           New Delhi     2,407,672    180.44          7.70%           INR            2.22            23.80%         $0.97    $2,611,000,000,000    \n",
       "143             Moscow     1,732,027    180.75          4.50%           RUB            1.57            49.80%         $0.59    $1,699,876,578,871    \n",
       "126              Abuja       120,369    267.51         11.40%           NGN            5.39             7.20%         $0.46      $448,120,428,859    \n",
       "163               Juba         1,727  4,583.71        187.90%           SSP            4.70               NaN         $0.28       $11,997,800,751    \n",
       "113        Monaco City           NaN       NaN            NaN           EUR             NaN               NaN         $2.00        $7,184,844,193    \n",
       "23             Bras���       462,299     167.4          3.70%           BRL            1.73            58.90%         $1.02    $1,839,758,040,766    \n",
       "131          Islamabad       201,150    182.32         10.60%           PKR            3.51             1.90%         $0.79      $304,400,000,000    \n",
       "34           N'Djamena         1,016     117.7         -1.00%           XAF            5.75             3.80%         $0.78       $11,314,951,343    \n",
       "78             Jakarta       563,325    151.18          3.00%           IDR            2.31            49.90%         $0.63    $1,119,190,780,753    \n",
       "160          Mogadishu           645       NaN            NaN           SOS            6.07            10.00%         $1.41        $4,720,727,278    \n",
       "66              Athens        62,434    101.87          0.20%           EUR            1.35            31.70%         $1.54      $209,852,761,469    \n",
       "85               Tokyo     1,135,886    105.48          0.50%           NaN            1.42            68.50%         $1.06    $5,081,769,542,380    \n",
       "33              Bangui           297    186.86         37.10%           NaN            4.72            35.60%         $1.41        $2,220,307,369    \n",
       "\n",
       "    Gross primary education enrollment (%) Gross tertiary education enrollment (%)  Infant mortality   Largest city  Life expectancy  \\\n",
       "36                                 100.20%                                  50.60%               7.4       Shanghai             77.0   \n",
       "186                                101.80%                                  88.20%               5.6  New York City             78.5   \n",
       "77                                 113.00%                                  28.10%              29.9       Kurebhar             69.4   \n",
       "143                                102.60%                                  81.90%               6.1         Moscow             72.7   \n",
       "126                                 84.70%                                  10.20%              75.7          Lagos             54.3   \n",
       "163                                 73.00%                                     NaN              63.7           Juba             57.6   \n",
       "113                                    NaN                                     NaN               2.6    Monaco City              NaN   \n",
       "23                                 115.40%                                  51.30%              12.8          S����             75.7   \n",
       "131                                 94.30%                                   9.00%              57.2        Karachi             67.1   \n",
       "34                                  86.80%                                   3.30%              71.4      N'Djamena             54.0   \n",
       "78                                 106.40%                                  36.30%              21.1     Kalimantan             71.5   \n",
       "160                                 23.40%                                   2.50%              76.6         Bosaso             57.1   \n",
       "66                                  99.60%                                 136.60%               3.6      Macedonia             81.3   \n",
       "85                                  98.80%                                  63.20%               1.8          Tokyo             84.2   \n",
       "33                                 102.00%                                   3.00%              84.5         Bangui             52.8   \n",
       "\n",
       "     Maternal mortality ratio Minimum wage Official language Out of pocket health expenditure  Physicians per thousand     Population  \\\n",
       "36                       29.0       $0.87   Standard Chinese                           32.40%                     1.98  1,397,715,000   \n",
       "186                      19.0       $7.25                NaN                           11.10%                     2.61    328,239,523   \n",
       "77                      145.0       $0.30              Hindi                           65.10%                     0.86  1,366,417,754   \n",
       "143                      17.0       $0.53            Russian                           36.40%                     4.01    144,373,535   \n",
       "126                     917.0       $0.54            English                           72.20%                     0.38    200,963,599   \n",
       "163                    1150.0          NaN           English                           61.30%                      NaN     11,062,113   \n",
       "113                       NaN      $11.72             French                            6.10%                     6.56         38,964   \n",
       "23                       60.0       $1.53         Portuguese                           28.30%                     2.15    212,559,417   \n",
       "131                     140.0       $0.69               Urdu                           66.50%                     0.98    216,565,318   \n",
       "34                     1140.0       $0.60             French                           56.40%                     0.04     15,946,876   \n",
       "78                      177.0       $0.48         Indonesian                           48.30%                     0.43    270,203,917   \n",
       "160                     829.0          NaN            Arabic                              NaN                     0.02     15,442,905   \n",
       "66                        3.0       $4.46              Greek                           35.50%                     5.48     10,716,322   \n",
       "85                        5.0       $6.77                NaN                           13.10%                     2.41    126,226,568   \n",
       "33                      829.0       $0.37             French                           39.60%                     0.06      4,745,185   \n",
       "\n",
       "    Population: Labor force participation (%) Tax revenue (%) Total tax rate Unemployment rate Urban_population   Latitude   Longitude  component_1  \\\n",
       "36                                     68.00%           9.40%         59.20%             4.32%      842,933,962  35.861660  104.195397    -6.061188   \n",
       "186                                    62.00%           9.60%         36.60%            14.70%      270,663,028  37.090240  -95.712891    -5.472201   \n",
       "77                                     49.30%          11.20%         49.70%             5.36%      471,031,528  20.593684   78.962880    -1.454311   \n",
       "143                                    61.80%          11.40%         46.20%             4.59%      107,683,889  61.524010  105.318756    -3.407737   \n",
       "126                                    52.90%           1.50%         34.80%             8.10%      102,806,948   9.081999    8.675277     5.844181   \n",
       "163                                    72.40%             NaN         31.40%            12.24%        2,201,250   6.876992   31.306979     6.512153   \n",
       "113                                       NaN             NaN            NaN               NaN           38,964  43.738418    7.424616    -4.017761   \n",
       "23                                     63.90%          14.20%         65.10%            12.08%      183,241,641 -14.235004  -51.925280    -1.626349   \n",
       "131                                    52.60%           9.20%         33.90%             4.45%       79,927,762  30.375321   69.345116     2.024238   \n",
       "34                                     70.70%             NaN         63.50%             1.89%        3,712,273  15.454166   18.732207     6.194705   \n",
       "78                                     67.50%          10.20%         30.10%             4.69%      151,509,724  -0.789275  113.921327     0.239051   \n",
       "160                                    47.40%           0.00%            NaN            11.35%        7,034,861   5.152149   46.199616     5.908173   \n",
       "66                                     51.80%          26.20%         51.90%            17.24%        8,507,474  39.074208   21.824312    -4.174639   \n",
       "85                                     61.70%          11.90%         46.70%             2.29%      115,782,416  36.204824  138.252924    -3.576397   \n",
       "33                                     72.00%           8.60%         73.30%             3.68%        1,982,064   6.611111   20.939444     5.534218   \n",
       "\n",
       "     component_2  anomaly_score_2d  anomaly_2d  \n",
       "36     21.160516          0.832235           1  \n",
       "186    10.671317          0.751637           1  \n",
       "77     12.067417          0.740562           1  \n",
       "143     5.785855          0.678986           1  \n",
       "126     2.860024          0.674378           1  \n",
       "163     1.807443          0.667510           1  \n",
       "113    -2.152247          0.624152           1  \n",
       "23      3.496162          0.603769           1  \n",
       "131     2.606812          0.590210           1  \n",
       "34      0.968427          0.586011           1  \n",
       "78      2.879473          0.578641           1  \n",
       "160     0.972714          0.562088           1  \n",
       "66     -1.205791          0.542756           1  \n",
       "85      1.632946          0.537675           1  \n",
       "33      0.560500          0.530670           1  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "iso_forest_2d = IsolationForest(\n",
    "    n_estimators=400,\n",
    "    contamination=contamination,\n",
    "    random_state=RANDOM_STATE,\n",
    "    n_jobs=-1\n",
    ")\n",
    "\n",
    "labels_2d = iso_forest_2d.fit_predict(X_2d)\n",
    "scores_2d = -iso_forest_2d.score_samples(X_2d)\n",
    "is_anomaly_2d = (labels_2d == -1).astype(int)\n",
    "\n",
    "result_2d = df_raw.copy()\n",
    "result_2d[\"component_1\"] = X_2d[:, 0]\n",
    "result_2d[\"component_2\"] = X_2d[:, 1]\n",
    "result_2d[\"anomaly_score_2d\"] = scores_2d\n",
    "result_2d[\"anomaly_2d\"] = is_anomaly_2d\n",
    "\n",
    "print(\"Число аномалий в 2D-пространстве:\", int(is_anomaly_2d.sum()))\n",
    "print(\"Доля аномалий в 2D-пространстве:\", round(is_anomaly_2d.mean(), 4))\n",
    "\n",
    "display(\n",
    "    result_2d.loc[result_2d[\"anomaly_2d\"] == 1]\n",
    "    .sort_values(\"anomaly_score_2d\", ascending=False)\n",
    "    .head(15)\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07711c74",
   "metadata": {},
   "source": [
    "## 10. Показатели качества метода на новых признаках"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "22317b5a",
   "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_space</th>\n",
       "      <th>reduced_2d</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>silhouette_score</th>\n",
       "      <td>0.428121</td>\n",
       "      <td>0.535111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>calinski_harabasz_score</th>\n",
       "      <td>13.127589</td>\n",
       "      <td>28.609320</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>davies_bouldin_score</th>\n",
       "      <td>2.874742</td>\n",
       "      <td>1.904779</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean_score_normal</th>\n",
       "      <td>0.399060</td>\n",
       "      <td>0.420948</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean_score_anomaly</th>\n",
       "      <td>0.523997</td>\n",
       "      <td>0.626800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>score_gap</th>\n",
       "      <td>0.124936</td>\n",
       "      <td>0.205853</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>anomaly_share</th>\n",
       "      <td>0.082051</td>\n",
       "      <td>0.082051</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                         original_space  reduced_2d\n",
       "silhouette_score               0.428121    0.535111\n",
       "calinski_harabasz_score       13.127589   28.609320\n",
       "davies_bouldin_score           2.874742    1.904779\n",
       "mean_score_normal              0.399060    0.420948\n",
       "mean_score_anomaly             0.523997    0.626800\n",
       "score_gap                      0.124936    0.205853\n",
       "anomaly_share                  0.082051    0.082051"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "metrics_2d = safe_internal_metrics(X_2d, is_anomaly_2d, scores_2d)\n",
    "\n",
    "metrics_compare = pd.concat(\n",
    "    [metrics_original.rename(\"original_space\"), metrics_2d.rename(\"reduced_2d\")],\n",
    "    axis=1\n",
    ")\n",
    "display(metrics_compare)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f798e79e",
   "metadata": {},
   "source": [
    "## 11. Оценка точности поиска аномалий на новых признаках\n",
    "\n",
    "Так как истинной разметки нет, в качестве опорной принимается разметка, полученная в исходном пространстве признаков.\n",
    "Тогда можно измерить, насколько хорошо поиск аномалий по двум новым признакам воспроизводит исходное решение."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "6abd5f06",
   "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>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>accuracy_vs_original</th>\n",
       "      <td>0.948718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>precision_vs_original</th>\n",
       "      <td>0.687500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>recall_vs_original</th>\n",
       "      <td>0.687500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f1_vs_original</th>\n",
       "      <td>0.687500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>jaccard_vs_original</th>\n",
       "      <td>0.523810</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                          value\n",
       "accuracy_vs_original   0.948718\n",
       "precision_vs_original  0.687500\n",
       "recall_vs_original     0.687500\n",
       "f1_vs_original         0.687500\n",
       "jaccard_vs_original    0.523810"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Матрица согласованности [исходное пространство x 2D-пространство]:\n",
      "[[174   5]\n",
      " [  5  11]]\n"
     ]
    }
   ],
   "source": [
    "\n",
    "comparison_metrics = pd.Series({\n",
    "    \"accuracy_vs_original\": accuracy_score(is_anomaly_original, is_anomaly_2d),\n",
    "    \"precision_vs_original\": precision_score(is_anomaly_original, is_anomaly_2d, zero_division=0),\n",
    "    \"recall_vs_original\": recall_score(is_anomaly_original, is_anomaly_2d, zero_division=0),\n",
    "    \"f1_vs_original\": f1_score(is_anomaly_original, is_anomaly_2d, zero_division=0),\n",
    "    \"jaccard_vs_original\": jaccard_score(is_anomaly_original, is_anomaly_2d, zero_division=0),\n",
    "})\n",
    "\n",
    "display(comparison_metrics.to_frame(\"value\"))\n",
    "\n",
    "cm = confusion_matrix(is_anomaly_original, is_anomaly_2d)\n",
    "print(\"Матрица согласованности [исходное пространство x 2D-пространство]:\")\n",
    "print(cm)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0224096",
   "metadata": {},
   "source": [
    "## 12. Сравнение аномальных объектов до и после снижения размерности"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "7257d2b0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Совпавшие аномальные объекты: 11\n",
      "['Brazil', 'Central African Republic', 'China', 'India', 'Japan', 'Monaco', 'Nigeria', 'Russia', 'Somalia', 'South Sudan', 'United States']\n",
      "\n",
      "Аномалии только в исходном пространстве: 5\n",
      "['Argentina', 'Australia', 'Lesotho', 'South Africa', 'Venezuela']\n",
      "\n",
      "Аномалии только в 2D-пространстве: 5\n",
      "['Chad', 'Greece', 'Indonesia', 'Pakistan', 'Sierra Leone']\n"
     ]
    }
   ],
   "source": [
    "\n",
    "orig_anomaly_countries = set(result_original.loc[result_original[\"anomaly_original\"] == 1, country_col])\n",
    "new_anomaly_countries = set(result_2d.loc[result_2d[\"anomaly_2d\"] == 1, country_col])\n",
    "\n",
    "common_anomalies = sorted(orig_anomaly_countries & new_anomaly_countries)\n",
    "only_original = sorted(orig_anomaly_countries - new_anomaly_countries)\n",
    "only_2d = sorted(new_anomaly_countries - orig_anomaly_countries)\n",
    "\n",
    "print(\"Совпавшие аномальные объекты:\", len(common_anomalies))\n",
    "print(common_anomalies)\n",
    "\n",
    "print(\"\\nАномалии только в исходном пространстве:\", len(only_original))\n",
    "print(only_original)\n",
    "\n",
    "print(\"\\nАномалии только в 2D-пространстве:\", len(only_2d))\n",
    "print(only_2d)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "892d1d8f",
   "metadata": {},
   "source": [
    "## 13. Визуализация новых признаков и аномалий"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "90f973b1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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G1ksFo0fP96t7b4477zzJDmKTJL02GOPKTc3V6+99ppbAV2S2rRp41ZALygo0OLFizVkyBANHjxYBQUF+uijjwJqDwAEG9m/+rK/J8H+fC07Zllead26tbp166aMjAzFxMS4fe5LvucGScrMzNSYMWOcObdNmzZ69NFHXaZb8Of58tVXX8lkMun999932zc+Pl7Dhw93ni7LLevWrXPbt4ynx7OoqEiTJ09WmzZtnPfbvffeq6KiIq/HKX88X7JKmUC/l1R2fRWfd+XPs1gsOuGEEzRy5EjndeXm5iouLs4tk0iO+fItFotmzJgh6e/7NTIyUunp6S77rl271nk9x7rfpb8zf3krVqxQVFSUs1dyGX/yrz/tqorHq0+fPurcubPb7X388cc9HvPzzz93fgdISEjQwIED9dtvv7ns4+vrvrLbU/7+9vX7Udl3zDFjxrid179/f5lMJl188cVu5/kiNTVVHTt2dObmgoICzZgxQx06dHDeXxVdf/31LgV0yTH1S0FBga666ioNGTJEixYtUmFhYUBtQt3AdC4ImQULFmjQoEGKjIzU0KFDNXv2bP3www8688wzAzpeQUGB+vTpo61bt2r06NFq2bKlFi5cqOHDhyszM9Ptgz06Olpz587VZZdd5tzm7U3zhx9+0Jo1azRkyBA1bdpUO3fu1OzZs9WnTx/9/vvvio2NdbtMhw4dnMW9w4cP66677qr0NvhafMnMzHSGkUB4u7zNZtPFF1+sZcuWaciQIbrzzjuVk5OjL7/8Ur/++qtat26tBx98UJ988oluvvlmbdy4UQkJCfriiy/0yiuvaPr06erSpYsk/x+PMtOmTVPLli0lSU888YTHwp2v5s2bpxtvvFFnnnmmZsyYoYMHD+rpp5/W6tWr9fPPP6tevXrOfaOiovTqq6+6XD4hIcH5/7Leo+eff75uvfVW/fHHH87n7OrVqxUREVFpe8qmbyizY8cOTZo0yW0/m82mAQMG6KyzztJjjz2m//3vf5o8ebJKS0s1bdo0SY7hapdeeqlWrFihm2++WV27dtUXX3yhcePGae/evXryySedx5s6daqmTJmi7t27a9q0aYqMjNR3332n5cuXq1+/fnrqqaeUm5sryVEgfOSRR3T//ferY8eOkuQWvN544w3l5OTo9ttvV2FhoZ5++mmdd9552rhxoxo3bixJ+vLLL7V9+3bdeOONSk1NdU478dtvv+nbb7/1GGwqs2HDBvXq1UsREREaOXKkWrRooW3btumTTz7Rww8/rEGDBrn88HHXXXepY8eOGjlypHNb2W2S/n6NGoahbdu2adasWbrooou0e/dul8esU6dOuvTSS2W1WvXJJ5/otttuk91u1+23315pmxs1auR8LPbs2aOnn35aF110kf766y+X519llixZoptuukmjR4/Wfffd59y+dOlSXXjhhWrVqpWmTJmigoICPfvss+rRo4d++ukn5xfb3377Tb169VJiYqLuvfdeRURE6KWXXlKfPn20cuVKt7lpR48erXr16mnKlCnO5/quXbucX0ArGjp0qC666CJJjnkF33777Upv0/z587Vx40af7wNPFi5cqPz8fN16661q2LChvv/+ez377LPas2ePFi5cKEkaNWqUy7DM66+/XpdffrkGDRrk3JacnCzJ8Z4RHx+vsWPHKj4+XsuXL9ekSZOUnZ2tmTNnSnI8h6ZPn65x48bpyiuv1KWXXqq8vDwNHz5cHTp0cL5G/VX2Q2XDhg0lSZ988olatWrlNuT0WD7++GPl5uZqyJAhSk1NVZ8+fbRgwQJdc801AbUJAIKJ7O+uurK/v3z5fPVm0qRJlRahKssN+fn56t27t/bu3atRo0bpxBNP1Jo1azRhwgTt379fTz311HHdvqpgt9t16aWX6ptvvtHIkSPVsWNHbdy4UU8++aS2bNni9gOOJ02bNnV7nD3dP8H4XlLx+nJzc3Xrrbd63K8sN5WWlmrt2rV6+eWXVVBQoPnz5ys+Pl6XX3653n33Xc2aNUsWi8V5ubfffluGYejaa691OZ7FYtGbb77p8hqZO3euoqOjAypgrl+/XpdddpkuuugiPf/8887t/uZff9tV3Y9XefPnz9ewYcPUv39/Pfroo8rPz9fs2bPVs2dP/fzzz26dcSrzwAMP6JZbbpH09/vXyJEj1atXL7d9/fl+FB0drQULFmjmzJnO27lnzx4tW7ZM0dHRft/uMiUlJfrrr7+cufmbb75RRkaGxowZ4/IcrMyCBQt07rnnKjU1VUOGDNF9992nTz75RFdddVXAbUMtZwAhsG7dOkOS8eWXXxqGYRh2u91o2rSpceedd7rst2PHDkOSMXPmTLdjdOrUyejdu7fz9FNPPWVIMt58803ntuLiYuPss882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dT4e5UfDVObIkSP64osvXN5zr7jiCplMJr333ns+HwcAqgLZ31V1Zv+KqvLzdcKECTrttNO89uL0NTcsXLhQvXr1Uv369V3aev7558tms2nVqlUu+/vyfClT9vle/s+bsuzn6T7y1OaOHTuqQ4cOLscum65txYoVlR7DF8H6XlJYWOhzfiu7fw8cOKAPPvhA69evV9++fZ3nn3/++UpLS3OZounXX3/Vhg0bdN1117kd7/rrr9fmzZud06N88MEHSkpKcjmmL44cOaL+/fsrISFBH3/8scvtCST/Bqtd5fn7eNlsNrfnZ35+vss+X375pTIzMzV06FCX/SwWi7p16+bxuebL695X/nw/ioyM1LXXXusyz3jZaHF/LFmyRMnJyUpOTlaXLl20cOFCXX/99Xr00UclKaDs/M4778hsNuuKK65wbhs6dKg+//zz4xoNj9qN6VxQ7Ww2m9555x2de+65zjmsJKlbt2564okntGzZMvXr18/lMpMnT/ZYbCmbOkJyBOG2bdu6FQrLilW7du1yu/yNN96ol19+Wffcc4/mzZun7t27q23btm77lc2xNXfuXO3du9dlzmlPhbTMzEw1b97c213gZsGCBfrtt9/03nvv6a233jrmvpMnT1ZaWppGjRrlcU6/yhzr8tu2bVP79u1diuHejBs3Tu+8846+//57PfLIIzrppJNczvf38SgLsElJSZVed15ennP6BW/Kjt++fXu38zp06KBvvvmm0uup7FiRkZFq1aqVx+fW8TCbzS5hT5LatWsnSc658Hbt2qW0tDS3oFDx/t22bZvMZrPb43M8PL1G2rVr51Koy8jI0NSpU/XOO+/o0KFDLvt6es14epzK2759uyR5nCcwUGvWrHF5HrVt21YffvihS1F+9erVmjx5stauXesWYLOysip9vv71118u19GkSRN98MEHPn0JzsvLU//+/XXw4EE1bNjQ7ceCYz3HO3bsqC+++EJ5eXnKyclRfn6+1/3sdrv++usvderUybm94mMcHx+vJk2auM3F6M/rtkxWVpYeeeQRjR071uU9vDxfXuOStHv3bk2aNEkff/yxW9j15UeOin777Tc9+OCDWr58udsXq4rHa926taZMmaJx48apc+fOmjhxol/X9cEHHygxMVERERFq2rSpWrdu7TwvMTFRkvz6gvPuu++qpKREp556qrZu3erc3q1bNy1YsMCn6YcAoCqQ/d1VZ/Yvryo/X7/55ht98sknWrZsmcvUeOX5mhv+/PNPbdiwwWtbK2ZLX54vZW666aZjXnd55aeDq1evnoYOHaqZM2d6XDj1zz//1KZNm3xuc6CC9b3k8OHDHp/7nsycOdM5rZ0kDRgwwFm8lBzfXa699lrNnj1b+fn5io2N1YIFCxQdHe3xB5Xk5GQNHDhQc+bM0RlnnKE5c+Zo2LBhbq/lylx88cX6448/lJKS4rYmVHp6ut/5N1jtKs/fx2vz5s2Vvkb//PNPSX+vp1NRWY4s4+vr3lf+fj+68cYbdfrpp2v//v3asmWL9u/fr8GDB+uhhx7y+Tq7deumhx56SCaTSbGxserYsaPL1JiBZOeyNcOOHDniXLfr1FNPVXFxsRYuXOgyJShQhiI6qt3y5cu1f/9+vfPOO3rnnXfczl+wYIFbkB45cqTbB/CIESOOuy3XXXed7r33Xn377bd6/fXX9eCDD3rc74477tDcuXM1ZswYnX322UpKSpLJZNKQIUNcFrcpc+DAAfXv39+nNhQXF2vixIm6+eabnYVSbzZt2qR58+bpzTffDGjutOO9fHnbt293foAf77zGkqM4HBERobS0tEr3jY6O1ieffOKy7euvvw54LmIE3+DBg7VmzRqNGzdOXbt2VXx8vOx2uwYMGODxNVNWUCyzZcuWKi/6nXLKKXriiSckOYL2M888oz59+uinn35Samqqtm3bpr59+6pDhw6aNWuWmjVrpsjISH322Wd68sknPd6Oiho3bqw333xTkiNUzpkzRwMGDNA333yjk08++ZiXPXz4sOLi4vTJJ5/osssu04wZM47ZczsUyorq/sy7+Oijj8psNmvcuHFuC82W8eU1brPZdMEFFygjI0Pjx49Xhw4dFBcXp71792r48OE+PT7lZWZmqnfv3kpMTNS0adPUunVrRUdH66efftL48eM9Hq9scd59+/bpyJEjSk1N9fn6zjnnHJdRD+UlJiYqLS3NbaHbYynr/dWjRw+P52/fvt3txzkAqA5kf1fVmf0rqsrP1/Hjx6t///4677zz3BaGL+NrbrDb7brgggt07733ejy/4v3mz/Nl0qRJbvM8X3LJJR73ff7559WuXTsVFRXpq6++ci5g+sILL3hs88knn6xZs2Z5PFazZs08bg+F4uJi7d+/XxdccIFP+19//fW64YYbZLfbtX37dk2fPl0XX3yxli5d6uzkccMNN2jmzJn68MMPNXToUL311lu6+OKLvf5gctNNN+mGG27QHXfcoVWrVunVV1/V119/7dft2Lx5sz7//HMNHjxYd999t0tv50AFo13Ho0WLFnrllVdcti1cuFAvv/yy83TZa3D+/Pkes2fFDnHB/O4cyPejLl26qEuXLnrjjTe0adMmXXHFFW6F/so0atTI5Uetijp06CDJUZcov+6FN3/++ad++OEHSZ47iC1YsIAiOjyiiI5qt2DBAqWkpLgs+lFm0aJFWrx4sV588UWXYUJt27Z1e9Os2AOgefPm2rBhg+x2u8uvxWVD8D31DmnYsKEuvfRSjRo1SocOHdLgwYM9Dul7//33NWzYMGfBTXIMgfO0AvqePXuUk5Pj83QNL7zwgg4dOuS2EronEyZMUNeuXXX11Vf7dGx/L9+6dWt99913KikpOWZQt9vtGj58uBITEzVmzBg98sgjuvLKK10W6vP38Vi3bp1OO+00n37pt1gsbs+Hio9F2fH/+OMPt1/p//jjD796C5U/VvkiVHFxsXbs2HHMD/RAlAXU8l8QtmzZIunvLx3NmzfX0qVLlZOT49IbveL927p1a9ntdv3+++/q2rVrUNpX9uNJeVu2bHG27ejRo1q2bJmmTp3qsnCqp8uVqVhQrLjoZtn97k9RsTL169d3eez69OmjtLQ0zZ07VxMmTNAnn3yioqIiffzxxy5TyPgzHDc6OtrlOi699FI1aNBAzz33nF566aVjXjY2Nlb/+9//1KFDB91111165JFHNHjwYOd7S/nnZUWbN29Wo0aNFBcXp+joaMXGxnrdz2w2u32x+/PPP51D7iXHYlP79+93LgJWZt26dbJarT4/t/bt26enn35aM2bMUEJCgtciui+v8Y0bN2rLli16/fXXdcMNNzi3f/nllz61paKvvvpKR44c0aJFi3TOOec4t5fvNVneiy++qC+//FIPP/ywZsyYoVGjRumjjz4K6Lo9ufjii/Xyyy9r7dq1Ovvss4+5744dO7RmzRqNHj1avXv3djnPbrfr+uuv11tvveW1WAQAVYns76o6s39FVfX5+uGHH2rt2rUep7opz9fc0Lp1a+Xm5vqcsX15vpQ5+eST3fb1thDhP/7xD+dUbQMHDtT69ev1v//9z2uby6Y5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Aurevbvq16+vYcOG6d///rdMJpPmz5/vFsINw9BNN92kmJgYzZ49W5I0atQoffDBB7rzzjudi2sdr9atW+utt97S1VdfrY4dO+qGG25Q586dVVxcrDVr1mjhwoXOxfAWLFigrl27eh0qfumll+qOO+7QTz/9pNNOO+242wYAviL7u6qK7N+nTx+tXLkyaJ0K/P183bNnj3M6B2/8zQ3jxo3Txx9/rIsvvljDhw/X6aefrry8PG3cuFHvv/++du7c6XVKtGBau3atDh8+7JzOZdmyZc7vLRVdf/31eu+99/Svf/1LK1asUI8ePWSz2bR582a99957+uKLL/xagNyb4/lekpeXp+eff17PPPOM2rVrp6+++sp5Xm5uriTHY1VxFNyGDRv05ptvyjAMbdu2Tc8884yaNm3qdnuuueYa3XvvvVq8eLFuvfXWSqcgmj59usaNG6f69esHcE/8zWQy6dVXX1XXrl01efJkZ7b1N/8Gu11S1XyPTExM1OzZs3X99dfrtNNO05AhQ5ScnKzdu3fr008/VY8ePTx2iguGQL8f1a9fX/v375fFYqmyHwXHjRun3377TU888YRWrFihK6+8UqmpqTpw4IA+/PBDff/991qzZo2+++47bd26VaNHj/Z4nBNOOEGnnXaaFixYoPHjx1dJW1GDGUA1uuSSS4zo6GgjLy/P6z7Dhw83IiIijMOHDxs7duwwJBkzZ850269Tp05G7969XbYdPHjQuPHGG41GjRoZkZGRxsknn2zMnTvXZZ9jHdPb+UePHnUeNz4+3ujfv7+xefNmo3nz5sawYcMMwzCM1atXG23atDGmTJliFBUVeTxm+bb07t3bkGQ8+eSTLvtOnjzZqPjSlGSYTCbjxx9/dNneu3dvt/vAE38un5+fbzzwwANGy5YtjYiICCM1NdW48sorjW3bthmlpaXGmWeeaTRt2tTIzMx0udzTTz9tSDLeffdd5zZfHo+y+6GyvzLDhg0z4uLi3G7jwoULDUnGihUrXLa/++67xqmnnmpERUUZDRo0MK699lpjz549Lvt4O2ZFzz33nNGhQwcjIiLCaNy4sXHrrbcaR48erfRyZY9penq6y/YffvjB7XlR1pZt27YZ/fr1M2JjY43GjRsbkydPNmw2m8vlc3JyjLvuustIS0szIiIijLZt2xozZ8407Ha7WxvmzJnjvB/q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Y/ugV6R2/ULdSgAAUA2y8ktUXGpTdESUx/OjIyw6nFukrPySKmtDXFyc2rRp47Jtz549VXZ9I0eO1CuvvCLDMDRy5Ei38++55x59+eWXevzxx9WmTRvFxMToyiuvVHFxsct++/btU1pa2jGva9y4cRo+fLjy8vI0c+ZMXXLJJTpw4IAiIyMlSddee60eeOAB5/7PPPOMVq1a5XKMc889V7Nnz1ZJSYk+++wz3XLLLTr55JNd9snNzZUkvfLKK+rWrZvLeRYLPZrDFrkcAACUE+psTi6v2bmcInow2W3SsmmOoB6ZKJX9qmUxS2arVJwjLZ8utenLEFIAAOqApNgIRVotKiyxKS7KPXYVltgUabUoKTYiBK1z6Nixo1tPkdWrV6tdu3YuQfTbb7912efbb79Vx44d3Y53zTXX6P7775dhGHr11Ve1bNkyt2MPHz5cl19+uSRHEN65c6fLPna7XT/99JNuv/32Y7a9UaNGzi8iEyZM0IIFC7R7927ntqSkJJcvKg0aNHA7RvkvMx07dtR//vMfrV+/3mWfxo0bKy0tTdu3b9e11157zDYhTJDLAQBABeGezcnl4Z3LKaIH05510tEdjp4uFYaFyGSSrDFSxnbHfid283wMAABQa7RLSVCblHj9ti9LsZEWl2GjhmEoPbdIndOS1C4lIWRtvPvuu3XmmWdq+vTpuvrqq7V27Vo999xzbivcr169Wo899pguu+wyffnll1q4cKE+/fRTt+PFx8frxRdflN1uV0KC++1q27atFi1apEsuuUQmk0kTJ06U3W53nv/XX39pypQpOnTokK6++upjtr20tFSFhYXKy8vTnDlzlJSUpGbNmvl1++12uwoLC509Xo4cOaLOnTu7fTmZOnWq/v3vfyspKUkDBgxQUVGR1q1bp6NHj2rs2LF+XSeqAbkcAABUEO7ZnFwe3rmcOdGDKS9dMmzee7OYLZJhd+wHAABqPbPZpGHdmyspJkK7MvKVV1Qqm91QXlGpdmXkKykmQjd0b15li4r64rTTTtN7772nd955R507d9akSZM0bdo0l8WLJEeoX7dunU499VQ99NBDmjVrlvr37+/xmFdeeaUGDx7s8bxZs2apfv366t69uy655BL179/fZX7Gp59+Wlu3btWSJUt04oknHrPt48aNU0xMjJo1a6avv/5aixcvVlSU5+G53nzyySeKiYlRgwYN9OCDD+rZZ5/VWWed5bbfLbfcoldffVVz587VySefrN69e2vevHlq2bKlX9eHakIuBwAAFYR7NieXh3cuNxmGYVTpNYRYdna2kpKSlJWVpcTExKq9st3fORYrskRJFg9DP2wljiGl1y2ixwsAADVEYWGhduzYoZYtWyo6OjqgY/y4K0Ovr9mlrYdyVVzqGCbaNiVeN3RvrtObuw9lDDctWrTQmDFjNGbMmFA3pUbx9typ1nwaRsjlAADgeAQjl0s1O5uTywNzrOeOrxmV6VyCqekZUv2WjsWKzFbXoaOGIZUWSA3bOPYDAAB1xunNG+jUZvW15VCOsvJLlBQboXYpCSHtgQ7UauRyAADgBdkcgaCIHkxmi9R3krRohGOxImuMY5vd5gjqlkjpvIksXgQAQB1kNpvUIbXu9DoGQopcDgAAjoFsDn9RRA+2dv2kQa9Iy6Y5FjMqtUsms6Ony3kTHecDAADUIDt37gx1EwD/kcsBAEAtQy4PHYroVaFdP6lNX2nPOsdiRXHJjqGi9HQBAAAAqg+5HAAAAEFAEb2qmC0sUgQAAACEGrkcAAAAx8kc6gYAAAAAAAAAABCuKKIDAAAAAAAAAOAFRXQAAAAAAAAAALygiA4AAAAAAAAAgBcU0QEAAAAAAAAA8IIiOgAAQC22du1aWSwWDRw4MNRNAQAAAOo0snnNRREdAACgOtht0u7vpE3/dfxrt1XL1b722mu64447tGrVKu3bt69arhMAAAAIa2Rz+IkiOgAAQFXbskR6qbf05iBp0S2Of1/q7dhehXJzc/Xuu+/q1ltv1cCBAzVv3jzneV999ZVMJpMyMzNdLmMymfThhx86T2/cuFHnnXeeYmJi1LBhQ40cOVK5ubnO84cPHy6TyaRZs2a5HOfyyy+XyWRyuc7x48erXbt2io2NVatWrTRx4kSVlJS4XG7nzp0ymUxuf2XtnDJlirp27ercv7i4WG3atHHZZ968eapXr57Lcc855xyZTCb98ssvvtx1AAAAqK3I5pLI5v6iiA4AAFCVtiyRFo2QMrZKligpMsHxb8Y2x/YqDOvvvfeeOnTooPbt2+u6667TnDlzZBiGz5fPy8tT//79Vb9+ff3www9auHChli5dqtGjR7vsd8IJJ+iVV15xnt63b59Wr16t2NhYl/0SEhI0b948/f7773r66af1yiuv6Mknn3TZp6x9S5cu1f79+/XBBx8cs43PPfecDh48eMx9Fi1apJ9//rnS2wsAAIBajmzuRDb3D0V0AACAqmK3ScumSbYiKTJRskRIJrPj38gEyVYsLZ9eZcNHX3vtNV133XWSpAEDBigrK0srV670+fJvvfWWCgsL9cYbb6hz584677zz9Nxzz2n+/Pku4fiMM85QZGSkvv76a0nSnDlzNGTIEEVERLgc78EHH1T37t3VokULXXLJJbrnnnv03nvvuexT1vslNTVVqampatCggdf2ZWRk6KGHHtL48eO97lNSUqLx48cfcx8AAADUAWRzl+ORzf1DER0AAKCq7FknHd0hWWMlk8n1PJNJssZIGdsd+wXZH3/8oe+//15Dhw6VJFmtVl199dV67bXXXPZr2rSp4uPjnX/lbdq0SV26dFFcXJxzW48ePWS32/XHH3+47DtixAi9/PLLstvteu211zRixAi3Nr377rvq0aOHUlNTFR8frwcffFC7d+922Sc7O1uSXK7Tm2nTpuncc89Vz549ve7z/PPPKykpSddee22lxwMAAEAtRjZ3QTb3jzXUDQAAAKi18tIlwyaZLZ7PN1ukUrtjvyB77bXXVFpaqrS0NOc2wzAUFRWl5557zrnt66+/VkJCgvN027ZtA7q+6667TpMnT9Y777yj1NRUnXzyyS7nr127Vtdee62mTp2q/v37KykpSe+8846eeOIJl/327dsns9ms1NTUY17fn3/+qVdffVW//PKL9uzZ43Gfo0ePavr06Vq8eLFMFb8oAQAAoG4hmzuRzf0X0p7oM2bM0JlnnqmEhASlpKTosssuc/vlpLCwULfffrsaNmyo+Ph4XXHFFZXOrQMAABAW4pIlk8X7kFC7zTGENC45qFdbWlqqN954Q0888YR++eUX59/69euVlpamt99+27lvy5Yt1aZNG+dfeR07dtT69euVl5fn3LZ69WqZzWa1b9/eZd969erp0ksv1b/+9S+PPV3WrFmj5s2b64EHHtAZZ5yhtm3bateuXW77/fDDD+rQoYOio6OPeRvHjx+vW265xa3N5U2fPl29evXSOeecc8xjgVwOAADqALK5E9ncfyEtoq9cuVK33367vv32W3355ZcqKSlRv379XJ4Md911lz755BMtXLhQK1eu1L59+zRo0KAQthoAAMBHTc+Q6reUSgukiosGGYZje4NWjv2C6L///a+OHj2qm2++WZ07d3b5u+KKK9yGjXpz7bXXKjo6WsOGDdOvv/6qFStW6I477tD111+vxo0bu+1/33336f7779fVV1/tdl7btm21e/duvfPOO9q2bZueeeYZLV682Hl+cXGx5s+fr1mzZunGG288Zru2bt2qr776SpMmTfK6T35+vl5++WU99thjPt3Wuo5cDgAAaj2yuRPZ3H8hLaL/73//0/Dhw9WpUyd16dJF8+bN0+7du/Xjjz9KkrKysvTaa69p1qxZOu+883T66adr7ty5WrNmjb799ttQNh0AAKByZovUd5JkiZSKcyRbiWTYHf8W5zi2nzfR+5DSAL322ms6//zzlZSU5HbeFVdcoXXr1mnDhg2VHic2NlZffPGFMjIydOaZZ+rKK69U3759XYaclte+fXvdd999HudMvPTSS3XXXXdp9OjR6tq1q9asWaOJEyc6z9+4caOmTJmiiRMnauzYscdsV15enh544IFjLmxUUlKiG2+8Ue3atav0doJcDgAA6gCyuRPZ3H8mw6j400vobN26VW3bttXGjRvVuXNnLV++XH379tXRo0dVr149537NmzfXmDFjdNddd7kdo6ioSEVFRc7T2dnZatasmbKyspSYmFgdNwMAANQihYWF2rFjh1q2bFnpMEavtiyRlk1zLGRk2B3DRBu0coT0dv2C22CEDW/PnezsbCUlJYV1PiWXAwCAcBOUXC6RzeugYz13fM3mYbOwqN1u15gxY9SjRw917txZknTgwAFFRka6BHVJaty4sQ4cOODxODNmzNDUqVOrurkAAAC+a9dPatNX2rPOsVBRXLJjmGiQe7kAwUAuBwAAtRrZHAEImyL67bffrl9//VXffPPNcR1nwoQJLsMMynq8AAAAhJTZIp3YLdStACpFLgcAALUe2Rx+Cosi+ujRo/Xf//5Xq1atUtOmTZ3bU1NTVVxcrMzMTJdeLwcPHlRqaqrHY0VFRSkqKqqqmwwAAADUOuRyAAAAwF1IFxY1DEOjR4/W4sWLtXz5crVs2dLl/NNPP10RERFatmyZc9sff/yh3bt36+yzz67u5gIAAAC1ErkcAAAA8C6kPdFvv/12vfXWW/roo4+UkJDgnE8xKSlJMTExSkpK0s0336yxY8eqQYMGSkxM1B133KGzzz5bZ511ViibDgAAANQa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CCGEEEIIUYcsogshhBBCCCGEEEIIIYQQdcgi+jL57ne/y65du4jH47S1tXHTTTct9yGtasVikR07dmAYBnv27Fnuw1lVjhw5wm/+5m+yZcsW4vE4559/PnfeeSeu6y73oa0KX/jCF9i8eTOxWIxdu3bx+OOPL/chrSqf+tSnuOaaa0ilUnR1dXHTTTexb9++5T6sVe+uu+7CMAxuu+225T6UVamvr4+bb76ZNWvWEI/Hufzyy3niiSeW+7DEOU6y+cohuXz5SC5fXpLLl59k85VJsvnykVxeTRbRl8G9997LW9/6Vt7+9rfz9NNP89Of/pT/+T//53If1qr2gQ98gPPOO2+5D2NV2rt3L2EY8uUvf5nnnnuOz372s3zpS1/ij//4j5f70M5599xzD7fffjt33nknTz75JFdccQWve93r6O/vX+5DWzUefvhh3v3ud/Poo4/yox/9CM/zeO1rX0s2m13uQ1u1fv7zn/PlL3+Zl7zkJct9KKvS8PAwL3/5y3Ech+9///s8//zz/K//9b9oa2tb7kMT5zDJ5iuL5PLlI7l8+UguXxkkm688ks2Xj+TyqQyllFrug1hNfN9n8+bN/Omf/im/+Zu/udyHI4Dvf//73H777dx7771ceumlPPXUU+zYsWO5D2tV+/SnP80Xv/hFDh06tNyHck7btWsX11xzDX/zN38DQBiGbNy4kfe+97188IMfXOajW50GBgbo6uri4Ycf5pd/+ZeX+3BWnUwmw1VXXcXf/u3f8vGPf5wdO3bwuc99brkPa1X54Ac/yE9/+lN+8pOfLPehiFVCsvnKIrl85ZFcvjQkl69Mks2Xl2Tz5SW5fCqpRF9iTz75JH19fZimyZVXXsn69et5/etfz7PPPrvch7YqnT59mne961187WtfI5FILPfhiJLR0VHa29uX+zDOaa7rsnv3bl796ldX/s40TV796lfzyCOPLOORrW6jo6MA8vpfJu9+97v5lV/5lar3hVha//Zv/8bVV1/Nm970Jrq6urjyyiv5yle+styHJc5hks1XDsnlK5Pk8sUnuXzlkmy+vCSbLy/J5VPJIvoSK1/B/+hHP8qHP/xh7rvvPtra2rj++usZGhpa5qNbXZRSvO1tb+PWW2/l6quvXu7DESUHDhzg85//PL/927+93IdyThscHCQIAtauXVv192vXruXUqVPLdFSr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",
      "text/plain": [
       "<Figure size 1500x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "plot_df = pd.DataFrame({\n",
    "    \"component_1\": X_2d[:, 0],\n",
    "    \"component_2\": X_2d[:, 1],\n",
    "    \"anomaly_original\": is_anomaly_original,\n",
    "    \"anomaly_2d\": is_anomaly_2d,\n",
    "    country_col: df_raw[country_col].values\n",
    "})\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(15, 6))\n",
    "\n",
    "axes[0].scatter(\n",
    "    plot_df.loc[plot_df[\"anomaly_original\"] == 0, \"component_1\"],\n",
    "    plot_df.loc[plot_df[\"anomaly_original\"] == 0, \"component_2\"],\n",
    "    alpha=0.7,\n",
    "    label=\"Нормальные\"\n",
    ")\n",
    "axes[0].scatter(\n",
    "    plot_df.loc[plot_df[\"anomaly_original\"] == 1, \"component_1\"],\n",
    "    plot_df.loc[plot_df[\"anomaly_original\"] == 1, \"component_2\"],\n",
    "    alpha=0.9,\n",
    "    label=\"Аномалии\"\n",
    ")\n",
    "axes[0].set_title(\"Аномалии исходного пространства в координатах PCA\")\n",
    "axes[0].set_xlabel(\"component_1\")\n",
    "axes[0].set_ylabel(\"component_2\")\n",
    "axes[0].legend()\n",
    "\n",
    "axes[1].scatter(\n",
    "    plot_df.loc[plot_df[\"anomaly_2d\"] == 0, \"component_1\"],\n",
    "    plot_df.loc[plot_df[\"anomaly_2d\"] == 0, \"component_2\"],\n",
    "    alpha=0.7,\n",
    "    label=\"Нормальные\"\n",
    ")\n",
    "axes[1].scatter(\n",
    "    plot_df.loc[plot_df[\"anomaly_2d\"] == 1, \"component_1\"],\n",
    "    plot_df.loc[plot_df[\"anomaly_2d\"] == 1, \"component_2\"],\n",
    "    alpha=0.9,\n",
    "    label=\"Аномалии\"\n",
    ")\n",
    "axes[1].set_title(\"Аномалии, найденные по двум компонентам PCA\")\n",
    "axes[1].set_xlabel(\"component_1\")\n",
    "axes[1].set_ylabel(\"component_2\")\n",
    "axes[1].legend()\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3a72af5",
   "metadata": {},
   "source": [
    "## 14. Сводные таблицы для интерпретации результата\n",
    "\n",
    "Эти таблицы можно использовать при написании короткого итога после выполнения ноутбука."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "027c7c4d",
   "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>metric</th>\n",
       "      <th>original_space</th>\n",
       "      <th>reduced_2d</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>silhouette_score</td>\n",
       "      <td>0.428121</td>\n",
       "      <td>0.535111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>calinski_harabasz_score</td>\n",
       "      <td>13.127589</td>\n",
       "      <td>28.609320</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>davies_bouldin_score</td>\n",
       "      <td>2.874742</td>\n",
       "      <td>1.904779</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>mean_score_normal</td>\n",
       "      <td>0.399060</td>\n",
       "      <td>0.420948</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>mean_score_anomaly</td>\n",
       "      <td>0.523997</td>\n",
       "      <td>0.626800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>score_gap</td>\n",
       "      <td>0.124936</td>\n",
       "      <td>0.205853</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>anomaly_share</td>\n",
       "      <td>0.082051</td>\n",
       "      <td>0.082051</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                    metric  original_space  reduced_2d\n",
       "0         silhouette_score        0.428121    0.535111\n",
       "1  calinski_harabasz_score       13.127589   28.609320\n",
       "2     davies_bouldin_score        2.874742    1.904779\n",
       "3        mean_score_normal        0.399060    0.420948\n",
       "4       mean_score_anomaly        0.523997    0.626800\n",
       "5                score_gap        0.124936    0.205853\n",
       "6            anomaly_share        0.082051    0.082051"
      ]
     },
     "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>metric</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>accuracy_vs_original</td>\n",
       "      <td>0.948718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>precision_vs_original</td>\n",
       "      <td>0.687500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>recall_vs_original</td>\n",
       "      <td>0.687500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>f1_vs_original</td>\n",
       "      <td>0.687500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>jaccard_vs_original</td>\n",
       "      <td>0.523810</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  metric     value\n",
       "0   accuracy_vs_original  0.948718\n",
       "1  precision_vs_original  0.687500\n",
       "2     recall_vs_original  0.687500\n",
       "3         f1_vs_original  0.687500\n",
       "4    jaccard_vs_original  0.523810"
      ]
     },
     "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>Country</th>\n",
       "      <th>component_1</th>\n",
       "      <th>component_2</th>\n",
       "      <th>anomaly_score_2d</th>\n",
       "      <th>anomaly_2d</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>China</td>\n",
       "      <td>-6.061188</td>\n",
       "      <td>21.160516</td>\n",
       "      <td>0.832235</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>186</th>\n",
       "      <td>United States</td>\n",
       "      <td>-5.472201</td>\n",
       "      <td>10.671317</td>\n",
       "      <td>0.751637</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>India</td>\n",
       "      <td>-1.454311</td>\n",
       "      <td>12.067417</td>\n",
       "      <td>0.740562</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>Russia</td>\n",
       "      <td>-3.407737</td>\n",
       "      <td>5.785855</td>\n",
       "      <td>0.678986</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126</th>\n",
       "      <td>Nigeria</td>\n",
       "      <td>5.844181</td>\n",
       "      <td>2.860024</td>\n",
       "      <td>0.674378</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>163</th>\n",
       "      <td>South Sudan</td>\n",
       "      <td>6.512153</td>\n",
       "      <td>1.807443</td>\n",
       "      <td>0.667510</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113</th>\n",
       "      <td>Monaco</td>\n",
       "      <td>-4.017761</td>\n",
       "      <td>-2.152247</td>\n",
       "      <td>0.624152</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>Brazil</td>\n",
       "      <td>-1.626349</td>\n",
       "      <td>3.496162</td>\n",
       "      <td>0.603769</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>131</th>\n",
       "      <td>Pakistan</td>\n",
       "      <td>2.024238</td>\n",
       "      <td>2.606812</td>\n",
       "      <td>0.590210</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>Chad</td>\n",
       "      <td>6.194705</td>\n",
       "      <td>0.968427</td>\n",
       "      <td>0.586011</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>78</th>\n",
       "      <td>Indonesia</td>\n",
       "      <td>0.239051</td>\n",
       "      <td>2.879473</td>\n",
       "      <td>0.578641</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>Somalia</td>\n",
       "      <td>5.908173</td>\n",
       "      <td>0.972714</td>\n",
       "      <td>0.562088</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66</th>\n",
       "      <td>Greece</td>\n",
       "      <td>-4.174639</td>\n",
       "      <td>-1.205791</td>\n",
       "      <td>0.542756</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>Japan</td>\n",
       "      <td>-3.576397</td>\n",
       "      <td>1.632946</td>\n",
       "      <td>0.537675</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>Central African Republic</td>\n",
       "      <td>5.534218</td>\n",
       "      <td>0.560500</td>\n",
       "      <td>0.530670</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      Country  component_1  component_2  anomaly_score_2d  anomaly_2d\n",
       "36                      China    -6.061188    21.160516          0.832235           1\n",
       "186             United States    -5.472201    10.671317          0.751637           1\n",
       "77                      India    -1.454311    12.067417          0.740562           1\n",
       "143                    Russia    -3.407737     5.785855          0.678986           1\n",
       "126                   Nigeria     5.844181     2.860024          0.674378           1\n",
       "163               South Sudan     6.512153     1.807443          0.667510           1\n",
       "113                    Monaco    -4.017761    -2.152247          0.624152           1\n",
       "23                     Brazil    -1.626349     3.496162          0.603769           1\n",
       "131                  Pakistan     2.024238     2.606812          0.590210           1\n",
       "34                       Chad     6.194705     0.968427          0.586011           1\n",
       "78                  Indonesia     0.239051     2.879473          0.578641           1\n",
       "160                   Somalia     5.908173     0.972714          0.562088           1\n",
       "66                     Greece    -4.174639    -1.205791          0.542756           1\n",
       "85                      Japan    -3.576397     1.632946          0.537675           1\n",
       "33   Central African Republic     5.534218     0.560500          0.530670           1"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "summary_table = pd.DataFrame({\n",
    "    \"metric\": metrics_compare.index,\n",
    "    \"original_space\": metrics_compare[\"original_space\"].values,\n",
    "    \"reduced_2d\": metrics_compare[\"reduced_2d\"].values\n",
    "})\n",
    "\n",
    "display(summary_table)\n",
    "\n",
    "agreement_table = comparison_metrics.reset_index()\n",
    "agreement_table.columns = [\"metric\", \"value\"]\n",
    "display(agreement_table)\n",
    "\n",
    "top_compare = result_2d[[country_col, \"component_1\", \"component_2\", \"anomaly_score_2d\", \"anomaly_2d\"]].copy()\n",
    "display(top_compare.sort_values(\"anomaly_score_2d\", ascending=False).head(15))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b7c54676",
   "metadata": {},
   "source": [
    "Итог\n",
    "\n",
    "Аномалии найдены методом Isolation Forest по 28 непрерывным числовым признакам; доля аномалий составила 16/195 = 8.2%. В исходном пространстве качество разделения: silhouette = 0.428, Calinski–Harabasz = 13.13, Davies–Bouldin = 2.87.\n",
    "\n",
    "После снижения размерности методом PCA до 2 компонент (объяснённая дисперсия 40.93%) тот же метод дал более выраженное разделение: silhouette = 0.535, CH = 28.61, DB = 1.90. Согласованность с исходной разметкой аномалий высокая: accuracy = 0.949, F1 = 0.688, совпало 11 из 16 аномалий.\n",
    "\n",
    "Следовательно, 2 главные компоненты сохраняют основную аномальную структуру, но не полностью: часть аномалий изменилась после проекции."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
