{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Набор данных с ценами на мобильные устройства" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Вывод всех столбцов" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['Unnamed: 0', 'Name', 'Rating', 'Spec_score', 'No_of_sim', 'Ram',\n", " 'Battery', 'Display', 'Camera', 'External_Memory', 'Android_version',\n", " 'Price', 'company', 'Inbuilt_memory', 'fast_charging',\n", " 'Screen_resolution', 'Processor', 'Processor_name'],\n", " dtype='object')\n" ] } ], "source": [ "import pandas as pd \n", "df = pd.read_csv(\"..//static//csv//mobile phone price prediction.csv\")\n", "print(df.columns)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Бизнес-цели:\n", "1. Классифицировать мобильные устройства по ценовым категориям (например, бюджетные, средний класс, флагманы).\n", "2. Определить, какие характеристики мобильных устройств наиболее сильно влияют на их рейтинг." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Выполним разбиение на 3 выборки: обучающую, контрольную и тестовую" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Размер обучающей выборки: 671\n", "Размер контрольной выборки: 288\n", "Размер тестовой выборки: 411\n" ] } ], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "\n", "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//mobile phone price prediction.csv\")\n", "\n", "# Разделение на обучающую и тестовую выборки (например, 70% обучающая, 30% тестовая)\n", "train_df, test_df = train_test_split(df, test_size=0.3, random_state=42)\n", "\n", "# Разделение обучающей выборки на обучающую и контрольную (например, 70% обучающая, 30% контрольная)\n", "train_df, val_df = train_test_split(train_df, test_size=0.3, random_state=42)\n", "\n", "# Вывод размеров выборок\n", "print(\"Размер обучающей выборки:\", len(train_df))\n", "print(\"Размер контрольной выборки:\", len(val_df))\n", "print(\"Размер тестовой выборки:\", len(test_df))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Распределение классов в company:\n", "company\n", "Vivo 186\n", "Realme 186\n", "Samsung 181\n", "Motorola 127\n", "Xiaomi 90\n", "Honor 88\n", "Poco 75\n", "OnePlus 75\n", "Huawei 62\n", "iQOO 57\n", "OPPO 38\n", "Oppo 27\n", "TCL 26\n", "Google 23\n", "Asus 21\n", "POCO 19\n", "Lava 19\n", "Nothing 15\n", "Lenovo 14\n", "Tecno 13\n", "itel 12\n", "LG 6\n", "Gionee 5\n", "Itel 3\n", "IQOO 1\n", "Coolpad 1\n", "Name: count, dtype: int64\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAHHCAYAAAD3WI8lAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACIwklEQVR4nOzdeXwN1//48ddNyM2+WRIhRFZBEGsJYm1CbS0NmiKkqF1Rmo9dEUtttVaL0NprLa211tiXWCqIEKL2LSEqiWR+f/iZrytBRLhZ3s/HYx7NnTlz5n3mJu67Z849R6MoioIQQgghhPigDPQdgBBCCCFEXiRJmBBCCCGEHkgSJoQQQgihB5KECSGEEELogSRhQgghhBB6IEmYEEIIIYQeSBImhBBCCKEHkoQJIYQQQuiBJGFCCCGEEHogSZgQQgghhB5IEibEK4SFhaHRaNTN2NgYd3d3evbsyc2bN/UdnhBCiBwun74DECK7GzVqFCVLluTJkyfs3buX2bNn8+eff3L69GlMTU31HZ4QQogcSpIwId6gUaNGVK5cGYCvvvqKAgUKMHnyZNatW0fbtm31HJ0QQoicSh5HCvGW6tWrB8ClS5cAuHfvHgMGDMDLywtzc3MsLS1p1KgRJ06cSHPukydPGDFiBO7u7hgbG1OkSBE+++wzoqOjAYiJidF5BPryVqdOHbWunTt3otFoWL58Of/73/+wt7fHzMyMZs2aERsbm+baBw8exN/fHysrK0xNTfH19SU8PDzdNtapUyfd648YMSJN2d9++41KlSphYmKCra0tbdq0Sff6r2vbi1JTU5k6dSplypTB2NgYOzs7unbtyv3793XKOTk50aRJkzTX6dmzZ5o604t94sSJae4pQGJiIsOHD8fV1RWtVoujoyMDBw4kMTEx3Xv1ojp16qSpb8yYMRgYGLBkyZJM3Y8ffviBGjVqUKBAAUxMTKhUqRK///57utf/7bffqFq1KqamptjY2FC7dm22bNmiU+avv/7C19cXCwsLLC0tqVKlSprYVq5cqb6nBQsW5Msvv+Tff//VKRMUFKQTs42NDXXq1GHPnj1vvE/vci7A2bNnCQgIoFChQpiYmODh4cHgwYN1yhw/fpxGjRphaWmJubk59evX58CBAzplng852Lt3L71796ZQoUJYW1vTtWtXkpKSePDgAe3bt8fGxgYbGxsGDhyIoijq+c/fwx9++IEpU6ZQokQJTExM8PX15fTp0zrXOnnyJEFBQTg7O2NsbIy9vT2dOnXi7t27OuVGjBiBRqPhwoULBAUFYW1tjZWVFR07duTx48dqOV9fX8qXL5/u/fHw8MDPzy9D91Lol/SECfGWnidMBQoUAODixYusXbuWzz//nJIlS3Lz5k1++uknfH19OXPmDA4ODgCkpKTQpEkTtm/fTps2bejTpw8PHz5k69atnD59GhcXF/Uabdu2pXHjxjrXDQkJSTeeMWPGoNFoGDRoELdu3WLq1Kk0aNCAiIgITExMAPj7779p1KgRlSpVYvjw4RgYGLBgwQLq1avHnj17qFq1app6ixUrRmhoKACPHj2iW7du6V576NChBAQE8NVXX3H79m2mT59O7dq1OX78ONbW1mnO6dKlC7Vq1QJg9erVrFmzRud4165dCQsLo2PHjvTu3ZtLly4xY8YMjh8/Tnh4OPnz50/3PryNBw8eqG17UWpqKs2aNWPv3r106dIFT09PTp06xZQpUzh//jxr1659q+ssWLCAIUOGMGnSJL744ot0y7zpfkybNo1mzZoRGBhIUlISy5Yt4/PPP2fDhg188sknarmRI0cyYsQIatSowahRozAyMuLgwYP8/ffffPzxx8CzpKNTp06UKVOGkJAQrK2tOX78OJs2bVLje37vq1SpQmhoKDdv3mTatGmEh4eneU8LFizIlClTALh69SrTpk2jcePGxMbGpvvevyiz5548eZJatWqRP39+unTpgpOTE9HR0fzxxx+MGTMGgH/++YdatWphaWnJwIEDyZ8/Pz/99BN16tRh165dVKtWTafOXr16YW9vz8iRIzlw4ABz587F2tqaffv2Ubx4ccaOHcuff/7JxIkTKVu2LO3bt9c5f9GiRTx8+JAePXrw5MkTpk2bRr169Th16hR2dnYAbN26lYsXL9KxY0fs7e35559/mDt3Lv/88w8HDhxIk3wHBARQsmRJQkNDOXbsGL/88guFCxdm/PjxALRr147OnTtz+vRpypYtq553+PBhzp8/z5AhQ157/0U2oQgh0rVgwQIFULZt26bcvn1biY2NVZYtW6YUKFBAMTExUa5evaooiqI8efJESUlJ0Tn30qVLilarVUaNGqXumz9/vgIokydPTnOt1NRU9TxAmThxYpoyZcqUUXx9fdXXO3bs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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Распределение классов в Обучающей выборке:\n", "company\n", "Vivo 138\n", "Samsung 128\n", "Realme 125\n", "Motorola 89\n", "Xiaomi 66\n", "Honor 59\n", "OnePlus 56\n", "Poco 52\n", "Huawei 46\n", "iQOO 37\n", "Oppo 21\n", "OPPO 20\n", "Google 16\n", "Lava 16\n", "POCO 14\n", "TCL 14\n", "Asus 12\n", "Lenovo 12\n", "itel 10\n", "Nothing 8\n", "Tecno 8\n", "LG 5\n", "Gionee 4\n", "IQOO 1\n", "Itel 1\n", "Coolpad 1\n", "Name: count, dtype: int64\n" ] }, { "data": { "image/png": "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NDQUDQ0NSExMREJCAlpbWwEANTU1AIDi4mJ0dnYiPz//nu6PiOxDq3YBRET/JgMDA9i7dy9ycnJgNpsBAPPmzcOyZctw+PBh3Lx5E0eOHIGnpycAICcnB6tXr0ZWVhb0ev2YH+epp55CYmIiACA9PR179uxBWVkZ5s+fj+nTpwMAfHx8YDAY7vEOiche+EoYEdE4tLS04NatW4iIiBh1Ljg4WGnAACA8PBwWi0V5FWusFi1apPys0WhgMBjQ3d39vxdORBMOmzAionHQ6XT/6PZOTk4QEaux4eHhu9a5uLhYXddoNLBYLP/osYloYmETRkQ0Dv7+/tDpdCgpKblrLjAwEOfOncPg4KAy9s0338DJyQnz588HAEyfPh2dnZ3K/MjICJqamsZVg6urq3JbIvr3YhNGRDQO7u7uSE9Px9atW3HkyBF89913qKqqwvvvv4+YmBi4u7vDbDajqakJZWVlePXVVxEbG6u8H2zlypU4efIkTp48iYsXLyIhIQG9vb3jqsHX1xc6nQ5ffvklrl69ir6+PhvslIhsjU0YEdE4ZWRkYMuWLdi+fTsCAwPxwgsvoLu7Gx4eHjh9+jR6enrwyCOP4Nlnn0VERARycnKU28bFxcFsNmP9+vVYvnw55s6di8cee2xcj6/VarFv3z4cPHgQRqMRa9euvddbJCI70Midb04gIiIiIpvjK2FEREREKmATRkRERKQCNmFEREREKmATRkRERKQCNmFEREREKmATRkRERKQCNmFEREREKmATRkRERKQCNmFEREREKmATRkRERKQCNmFEREREKmATRkRERKSC/wNsDs63G6yqdQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Распределение классов в Контрольной выборке:\n", "company\n", "Realme 26\n", "Samsung 26\n", "Vivo 22\n", "Motorola 18\n", "Honor 15\n", "OPPO 13\n", "Poco 12\n", "Xiaomi 11\n", "iQOO 11\n", "OnePlus 8\n", "Huawei 7\n", "Asus 7\n", "TCL 6\n", "POCO 5\n", "Oppo 4\n", "Google 4\n", "Tecno 3\n", "Nothing 3\n", "itel 2\n", "Lava 1\n", "Lenovo 1\n", "Name: count, dtype: int64\n" ] }, { "data": { "image/png": "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tatgZmYmaGpqChUrVhS6du0q3L59W9lhlQhHjhwRAORYevXqJQjCu9tUTJw4UTAxMRGkUqnQrFkz4datW8oNWkXlda5TU1OFli1bCuXLlxc0NDQES0tLoV+/fsLjx4+VHbbKye0cAxDWrVsnlnn9+rUwaNAgwdDQUNDR0RG+/fZb4dGjR8oLWkV96lzfv39faNy4sWBkZCRIpVLB1tZWGDNmjCCXy5UbeCFIBEEQvmbSR0REREScE0ZERESkFEzCiIiIiJSASRgRERGREjAJIyIiIlICJmFERERESsAkjIiIiEgJmIQRERERKQGTMCIiIiIlYBJGRKRi4uLiIJFIxOflEZFqYhJGREREpARMwoiICigrKwtz586Fra0tpFIpKleujJkzZwIArl27hqZNm0JbWxvlypVD//79kZycLNb19PTE8OHDFdrr2LEj/Pz8xNdWVlaYNWsW+vTpA319fVSuXBmrV68Wt1epUgUA4OrqColEAk9Pzy92rET05TAJIyIqoMDAQMyePRsTJ07EjRs3sHHjRpiYmCAlJQVeXl4wNDTE+fPnsXXrVhw6dAiDBw8u8D7mz58PNzc3XL58GYMGDcLAgQNx69YtAMC5c+cAAIcOHcKjR4+wY8eOIj0+Ivo6yig7ACIiVfLq1SssXrwYwcHB6NWrFwDAxsYGDRs2xK+//oo3b95g/fr10NXVBQAEBwejXbt2mDNnDkxMTPK9n9atW2PQoEEAgHHjxmHhwoU4cuQIHBwcUL58eQBAuXLlYGpqWsRHSERfC3vCiIgKICoqCmlpaWjWrFmu21xcXMQEDADc3d2RlZUl9mLll7Ozs/izRCKBqakpnj59WvjAiajYYRJGRFQA2tran1VfTU0NgiAorMvIyMhRTkNDQ+G1RCJBVlbWZ+2biIoXJmFERAVgZ2cHbW1tHD58OMc2R0dHREZGIiUlRVwXEREBNTU1ODg4AADKly+PR48eidszMzNx/fr1AsWgqakp1iUi1cUkjIioALS0tDBu3DiMHTsW69evR2xsLM6cOYM1a9bA19cXWlpa6NWrF65fv44jR45gyJAh6NGjhzgfrGnTpvjrr7/w119/4ebNmxg4cCASExMLFEOFChWgra2N/fv348mTJ5DL5V/gSInoS2MSRkRUQBMnTsSoUaMwadIkODo6omvXrnj69Cl0dHQQHh6OhIQE1KlTB126dEGzZs0QHBws1u3Tpw969eqFnj17wsPDA9bW1mjSpEmB9l+mTBksWbIEq1atgrm5OTp06FDUh0hEX4FE+HByAhERERF9cewJIyIiIlICJmFERERESsAkjIiIiEgJmIQRERERKQGTMCIiIiIlYBJGREREpARMwoiIiIiUgEkYERERkRIwCSMiIiJSAiZhRERERErAJIyIiIhICZiEERERESnB/wH3dduN51rWOQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Распределение классов в Тестовой выборке:\n", "company\n", "Realme 35\n", "Samsung 27\n", "Vivo 26\n", "Motorola 20\n", "Honor 14\n", "Xiaomi 13\n", "Poco 11\n", "OnePlus 11\n", "Huawei 9\n", "iQOO 9\n", "TCL 6\n", "OPPO 5\n", "Nothing 4\n", "Google 3\n", "Lava 2\n", "Asus 2\n", "Oppo 2\n", "Tecno 2\n", "Itel 2\n", "Gionee 1\n", "Lenovo 1\n", "LG 1\n", "Name: count, dtype: int64\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//mobile phone price prediction.csv\")\n", "\n", "# Проверка распределения классов в столбце company\n", "class_distribution = df['company'].value_counts()\n", "print(\"Распределение классов в company:\")\n", "print(class_distribution)\n", "\n", "# Визуализация распределения классов\n", "sns.countplot(y='company', data=df, order=class_distribution.index)\n", "plt.title('Распределение классов в company')\n", "plt.show()\n", "\n", "# Проверка сбалансированности для каждой выборки\n", "def check_balance(df, title):\n", " class_distribution = df['company'].value_counts()\n", " print(f\"Распределение классов в {title}:\")\n", " print(class_distribution)\n", " sns.countplot(y='company', data=df, order=class_distribution.index)\n", " plt.title(f'Распределение классов в {title}')\n", " plt.show()\n", "\n", "# Разделение данных на обучающую, контрольную и тестовую выборки\n", "from sklearn.model_selection import train_test_split\n", "\n", "train_df, temp_df = train_test_split(df, test_size=0.3, random_state=42)\n", "val_df, test_df = train_test_split(temp_df, test_size=0.5, random_state=42)\n", "\n", "# Проверка сбалансированности для обучающей, контрольной и тестовой выборок\n", "check_balance(train_df, 'Обучающей выборке')\n", "check_balance(val_df, 'Контрольной выборке')\n", "check_balance(test_df, 'Тестовой выборке')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Данные по столбцу company являются несбалансированными. Некоторые компании, такие как Vivo, Realme, и Samsung, имеют значительно больше устройств, чем другие, такие как LG, Gionee, и Itel." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Размер обучающей выборки до upsampling: 671\n", "Размер контрольной выборки: 288\n", "Размер тестовой выборки: 411\n", "\n", "Распределение классов в всем датасете:\n", "Класс Vivo: 186 (13.58%)\n", "Класс Realme: 186 (13.58%)\n", "Класс Samsung: 181 (13.21%)\n", "Класс Motorola: 127 (9.27%)\n", "Класс Xiaomi: 90 (6.57%)\n", "Класс Honor: 88 (6.42%)\n", "Класс Poco: 75 (5.47%)\n", "Класс OnePlus: 75 (5.47%)\n", "Класс Huawei: 62 (4.53%)\n", "Класс iQOO: 57 (4.16%)\n", "Класс OPPO: 38 (2.77%)\n", "Класс Oppo: 27 (1.97%)\n", "Класс TCL: 26 (1.90%)\n", "Класс Google: 23 (1.68%)\n", "Класс Asus: 21 (1.53%)\n", "Класс POCO: 19 (1.39%)\n", "Класс Lava: 19 (1.39%)\n", "Класс Nothing: 15 (1.09%)\n", "Класс Lenovo: 14 (1.02%)\n", "Класс Tecno: 13 (0.95%)\n", "Класс itel: 12 (0.88%)\n", "Класс LG: 6 (0.44%)\n", "Класс Gionee: 5 (0.36%)\n", "Класс Itel: 3 (0.22%)\n", "Класс IQOO: 1 (0.07%)\n", "Класс Coolpad: 1 (0.07%)\n", "\n", "Распределение классов в Обучающей выборке до upsampling:\n", "Класс Vivo: 94 (14.01%)\n", "Класс Samsung: 89 (13.26%)\n", "Класс Realme: 82 (12.22%)\n", "Класс Motorola: 66 (9.84%)\n", "Класс Xiaomi: 46 (6.86%)\n", "Класс Honor: 40 (5.96%)\n", "Класс OnePlus: 40 (5.96%)\n", "Класс Poco: 37 (5.51%)\n", "Класс Huawei: 35 (5.22%)\n", "Класс iQOO: 28 (4.17%)\n", "Класс OPPO: 15 (2.24%)\n", "Класс Oppo: 14 (2.09%)\n", "Класс Lava: 12 (1.79%)\n", "Класс Google: 12 (1.79%)\n", "Класс TCL: 10 (1.49%)\n", "Класс Lenovo: 9 (1.34%)\n", "Класс POCO: 9 (1.34%)\n", "Класс Asus: 8 (1.19%)\n", "Класс itel: 7 (1.04%)\n", "Класс Nothing: 5 (0.75%)\n", "Класс Tecno: 5 (0.75%)\n", "Класс LG: 3 (0.45%)\n", "Класс Gionee: 3 (0.45%)\n", "Класс Coolpad: 1 (0.15%)\n", "Класс Itel: 1 (0.15%)\n", "Размер обучающей выборки после upsampling: 2350\n", "\n", "Распределение классов в Обучающей выборке после upsampling:\n", "Класс Realme: 94 (4.00%)\n", "Класс Motorola: 94 (4.00%)\n", "Класс Vivo: 94 (4.00%)\n", "Класс Lava: 94 (4.00%)\n", "Класс Lenovo: 94 (4.00%)\n", "Класс TCL: 94 (4.00%)\n", "Класс OPPO: 94 (4.00%)\n", "Класс Honor: 94 (4.00%)\n", "Класс Poco: 94 (4.00%)\n", "Класс itel: 94 (4.00%)\n", "Класс Oppo: 94 (4.00%)\n", "Класс iQOO: 94 (4.00%)\n", "Класс Samsung: 94 (4.00%)\n", "Класс Xiaomi: 94 (4.00%)\n", "Класс LG: 94 (4.00%)\n", "Класс Huawei: 94 (4.00%)\n", "Класс OnePlus: 94 (4.00%)\n", "Класс Google: 94 (4.00%)\n", "Класс Tecno: 94 (4.00%)\n", "Класс Asus: 94 (4.00%)\n", "Класс Gionee: 94 (4.00%)\n", "Класс POCO: 94 (4.00%)\n", "Класс Nothing: 94 (4.00%)\n", "Класс Coolpad: 94 (4.00%)\n", "Класс Itel: 94 (4.00%)\n", "\n", "Распределение классов в Контрольной выборке:\n", "Класс Vivo: 44 (15.28%)\n", "Класс Realme: 43 (14.93%)\n", "Класс Samsung: 39 (13.54%)\n", "Класс Motorola: 23 (7.99%)\n", "Класс Xiaomi: 20 (6.94%)\n", "Класс Honor: 19 (6.60%)\n", "Класс OnePlus: 16 (5.56%)\n", "Класс Poco: 15 (5.21%)\n", "Класс Huawei: 11 (3.82%)\n", "Класс iQOO: 9 (3.12%)\n", "Класс Oppo: 7 (2.43%)\n", "Класс POCO: 5 (1.74%)\n", "Класс OPPO: 5 (1.74%)\n", "Класс Google: 4 (1.39%)\n", "Класс Asus: 4 (1.39%)\n", "Класс TCL: 4 (1.39%)\n", "Класс Lava: 4 (1.39%)\n", "Класс itel: 3 (1.04%)\n", "Класс Nothing: 3 (1.04%)\n", "Класс Tecno: 3 (1.04%)\n", "Класс Lenovo: 3 (1.04%)\n", "Класс LG: 2 (0.69%)\n", "Класс Gionee: 1 (0.35%)\n", "Класс IQOO: 1 (0.35%)\n", "\n", "Распределение классов в Тестовой выборке:\n", "Класс Realme: 61 (14.84%)\n", "Класс Samsung: 53 (12.90%)\n", "Класс Vivo: 48 (11.68%)\n", "Класс Motorola: 38 (9.25%)\n", "Класс Honor: 29 (7.06%)\n", "Класс Xiaomi: 24 (5.84%)\n", "Класс Poco: 23 (5.60%)\n", "Класс iQOO: 20 (4.87%)\n", "Класс OnePlus: 19 (4.62%)\n", "Класс OPPO: 18 (4.38%)\n", "Класс Huawei: 16 (3.89%)\n", "Класс TCL: 12 (2.92%)\n", "Класс Asus: 9 (2.19%)\n", "Класс Google: 7 (1.70%)\n", "Класс Nothing: 7 (1.70%)\n", "Класс Oppo: 6 (1.46%)\n", "Класс POCO: 5 (1.22%)\n", "Класс Tecno: 5 (1.22%)\n", "Класс Lava: 3 (0.73%)\n", "Класс Lenovo: 2 (0.49%)\n", "Класс itel: 2 (0.49%)\n", "Класс Itel: 2 (0.49%)\n", "Класс LG: 1 (0.24%)\n", "Класс Gionee: 1 (0.24%)\n" ] } ], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from imblearn.over_sampling import RandomOverSampler\n", "\n", "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//mobile phone price prediction.csv\")\n", "\n", "# Разделение на обучающую и тестовую выборки (например, 70% обучающая, 30% тестовая)\n", "train_df, test_df = train_test_split(df, test_size=0.3, random_state=42)\n", "\n", "# Разделение обучающей выборки на обучающую и контрольную (например, 70% обучающая, 30% контрольная)\n", "train_df, val_df = train_test_split(train_df, test_size=0.3, random_state=42)\n", "\n", "# Вывод размеров выборок\n", "print(\"Размер обучающей выборки до upsampling:\", len(train_df))\n", "print(\"Размер контрольной выборки:\", len(val_df))\n", "print(\"Размер тестовой выборки:\", len(test_df))\n", "\n", "# Функция для проверки балансировки данных\n", "def check_balance(df, title):\n", " class_distribution = df['company'].value_counts()\n", " print(f\"\\nРаспределение классов в {title}:\")\n", " for cls, count in class_distribution.items():\n", " print(f\"Класс {cls}: {count} ({count / len(df) * 100:.2f}%)\")\n", "\n", "# Проверка балансировки для всего датасета\n", "check_balance(df, 'всем датасете')\n", "\n", "# Проверка балансировки для обучающей выборки до upsampling\n", "check_balance(train_df, 'Обучающей выборке до upsampling')\n", "\n", "# Применение upsampling к обучающей выборке\n", "X_train = train_df.drop('company', axis=1) # Отделяем признаки от целевой переменной\n", "y_train = train_df['company'] # Целевая переменная\n", "\n", "# Инициализация RandomOverSampler\n", "ros = RandomOverSampler(random_state=42)\n", "\n", "# Применение upsampling\n", "X_train_resampled, y_train_resampled = ros.fit_resample(X_train, y_train)\n", "\n", "# Создание нового DataFrame с балансированными данными\n", "train_df_resampled = pd.concat([X_train_resampled, y_train_resampled], axis=1)\n", "\n", "# Вывод размеров выборок после upsampling\n", "print(\"Размер обучающей выборки после upsampling:\", len(train_df_resampled))\n", "\n", "# Проверка балансировки для обучающей выборки после upsampling\n", "check_balance(train_df_resampled, 'Обучающей выборке после upsampling')\n", "\n", "# Проверка балансировки для контрольной и тестовой выборок (они не должны измениться)\n", "check_balance(val_df, 'Контрольной выборке')\n", "check_balance(test_df, 'Тестовой выборке')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Данные были сбалансированы. Теперь можно перейти к конструированию признаков. Поставлены следующие задачи:\n", "1. Классифицировать мобильные устройства по ценовым категориям (например, бюджетные, средний класс, флагманы).\n", "2. Определить, какие характеристики мобильных устройств наиболее сильно влияют на их рейтинг." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from imblearn.over_sampling import RandomOverSampler\n", "\n", "# Определение категориальных признаков\n", "categorical_features = [\n", " 'Rating', 'Ram',\n", " 'Battery', 'Display', 'Camera', 'External_Memory', 'Android_version',\n", " 'Price', 'company', 'Inbuilt_memory', 'fast_charging',\n", " 'Screen_resolution', 'Processor'\n", "]\n", "\n", "# Применение one-hot encoding к обучающей выборке\n", "train_df_resampled_encoded = pd.get_dummies(train_df_resampled, columns=categorical_features)\n", "\n", "# Применение one-hot encoding к контрольной выборке\n", "val_df_encoded = pd.get_dummies(val_df, columns=categorical_features)\n", "\n", "# Применение one-hot encoding к тестовой выборке\n", "test_df_encoded = pd.get_dummies(test_df, columns=categorical_features)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Дискретизация числовых признаков" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Размер обучающей выборки после балансировки: (5600, 22)\n", "Размер контрольной выборки: (288, 22)\n", "Размер тестовой выборки: (411, 22)\n" ] } ], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from imblearn.over_sampling import RandomOverSampler\n", "import re\n", "\n", "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//mobile phone price prediction.csv\")\n", "\n", "# Извлечение числовых значений из столбца Battery\n", "df['Battery'] = df['Battery'].apply(lambda x: int(re.search(r'\\d+', x).group()) if re.search(r'\\d+', x) else None)\n", "df['Ram'] = df['Ram'].apply(lambda x: int(re.search(r'\\d+', x).group()) if re.search(r'\\d+', x) else None)\n", "df['Camera'] = df['Camera'].apply(lambda x: int(re.search(r'\\d+', x).group()) if re.search(r'\\d+', x) else None)\n", "\n", "# Разделение на обучающую и тестовую выборки (например, 70% обучающая, 30% тестовая)\n", "train_df, test_df = train_test_split(df, test_size=0.3, random_state=42)\n", "\n", "# Разделение обучающей выборки на обучающую и контрольную (например, 70% обучающая, 30% контрольная)\n", "train_df, val_df = train_test_split(train_df, test_size=0.3, random_state=42)\n", "\n", "# Применение upsampling к обучающей выборке (если это необходимо)\n", "X_train = train_df.drop('Price', axis=1) # Отделяем признаки от целевой переменной\n", "y_train = train_df['Price'] # Целевая переменная\n", "\n", "# Инициализация RandomOverSampler\n", "ros = RandomOverSampler(random_state=42)\n", "\n", "# Применение upsampling\n", "X_train_resampled, y_train_resampled = ros.fit_resample(X_train, y_train)\n", "\n", "# Создание нового DataFrame с балансированными данными\n", "train_df_resampled = pd.concat([X_train_resampled, y_train_resampled], axis=1)\n", "\n", "# Определение числовых признаков для дискретизации\n", "numerical_features = ['Spec_score', 'Battery', 'Ram', 'Camera' ]\n", "\n", "# Функция для дискретизации числовых признаков\n", "def discretize_features(df, features, bins=5, labels=False):\n", " for feature in features:\n", " try:\n", " # Заполнение NaN значений, если они есть\n", " df[feature] = df[feature].fillna(df[feature].median())\n", " df[f'{feature}_bin'] = pd.cut(df[feature], bins=bins, labels=labels)\n", " except Exception as e:\n", " print(f\"Ошибка при дискретизации признака {feature}: {e}\")\n", " return df\n", "\n", "# Применение дискретизации к обучающей, контрольной и тестовой выборкам\n", "train_df_resampled = discretize_features(train_df_resampled, numerical_features)\n", "val_df = discretize_features(val_df, numerical_features)\n", "test_df = discretize_features(test_df, numerical_features)\n", "\n", "# Вывод размеров выборок\n", "print(\"Размер обучающей выборки после балансировки:\", train_df_resampled.shape)\n", "print(\"Размер контрольной выборки:\", val_df.shape)\n", "print(\"Размер тестовой выборки:\", test_df.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ручной синтез. Создание новых признаков на основе экспертных знаний и логики предметной области." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Размер обучающей выборки после балансировки: (5600, 19)\n", "Размер контрольной выборки: (288, 19)\n", "Размер тестовой выборки: (411, 19)\n" ] } ], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from imblearn.over_sampling import RandomOverSampler\n", "\n", "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//mobile phone price prediction.csv\")\n", "\n", "# Преобразование столбца Battery в числовой формат\n", "df['Battery'] = df['Battery'].apply(lambda x: int(re.search(r'\\d+', x).group()) if re.search(r'\\d+', x) else None)\n", "\n", "# Преобразование столбцов Camera и Display в числовой формат\n", "df['Camera'] = pd.to_numeric(df['Camera'], errors='coerce')\n", "df['Display'] = pd.to_numeric(df['Display'], errors='coerce')\n", "\n", "# Разделение на обучающую и тестовую выборки (например, 70% обучающая, 30% тестовая)\n", "train_df, test_df = train_test_split(df, test_size=0.3, random_state=42)\n", "\n", "# Разделение обучающей выборки на обучающую и контрольную (например, 70% обучающая, 30% контрольная)\n", "train_df, val_df = train_test_split(train_df, test_size=0.3, random_state=42)\n", "\n", "# Применение upsampling к обучающей выборке (если это необходимо)\n", "X_train = train_df.drop('Price', axis=1) # Отделяем признаки от целевой переменной\n", "y_train = train_df['Price'] # Целевая переменная\n", "\n", "# Инициализация RandomOverSampler\n", "ros = RandomOverSampler(random_state=42)\n", "\n", "# Применение upsampling\n", "X_train_resampled, y_train_resampled = ros.fit_resample(X_train, y_train)\n", "\n", "# Создание нового DataFrame с балансированными данными\n", "train_df_resampled = pd.concat([X_train_resampled, y_train_resampled], axis=1)\n", "\n", "# Создание нового признака \"Camera_to_Display_Ratio\" на основе признаков \"Camera\" и \"Display\"\n", "train_df_resampled['Camera_to_Display_Ratio'] = train_df_resampled['Camera'] / train_df_resampled['Display']\n", "val_df['Camera_to_Display_Ratio'] = val_df['Camera'] / val_df['Display']\n", "test_df['Camera_to_Display_Ratio'] = test_df['Camera'] / test_df['Display']\n", "\n", "# Вывод размеров выборок\n", "print(\"Размер обучающей выборки после балансировки:\", train_df_resampled.shape)\n", "print(\"Размер контрольной выборки:\", val_df.shape)\n", "print(\"Размер тестовой выборки:\", test_df.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Масштабирование признаков - это процесс преобразования числовых признаков таким образом, чтобы они имели одинаковый масштаб. Это важно для многих алгоритмов машинного обучения, которые чувствительны к масштабу признаков, таких как линейная регрессия, метод опорных векторов (SVM) и нейронные сети." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Размер обучающей выборки после балансировки: (5600, 19)\n", "Размер контрольной выборки: (288, 19)\n", "Размер тестовой выборки: (411, 19)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\sklearn\\utils\\extmath.py:1137: RuntimeWarning: invalid value encountered in divide\n", " updated_mean = (last_sum + new_sum) / updated_sample_count\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\sklearn\\utils\\extmath.py:1142: RuntimeWarning: invalid value encountered in divide\n", " T = new_sum / new_sample_count\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\sklearn\\utils\\extmath.py:1162: RuntimeWarning: invalid value encountered in divide\n", " new_unnormalized_variance -= correction**2 / new_sample_count\n" ] } ], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from imblearn.over_sampling import RandomOverSampler\n", "from sklearn.preprocessing import StandardScaler\n", "import re\n", "\n", "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//mobile phone price prediction.csv\")\n", "\n", "# Преобразование столбца Battery в числовой формат\n", "df['Battery'] = df['Battery'].apply(lambda x: int(re.search(r'\\d+', x).group()) if re.search(r'\\d+', x) else None)\n", "\n", "# Преобразование столбцов Camera и Display в числовой формат\n", "df['Camera'] = pd.to_numeric(df['Camera'], errors='coerce')\n", "df['Display'] = pd.to_numeric(df['Display'], errors='coerce')\n", "\n", "# Разделение на обучающую и тестовую выборки (например, 70% обучающая, 30% тестовая)\n", "train_df, test_df = train_test_split(df, test_size=0.3, random_state=42)\n", "\n", "# Разделение обучающей выборки на обучающую и контрольную (например, 70% обучающая, 30% контрольная)\n", "train_df, val_df = train_test_split(train_df, test_size=0.3, random_state=42)\n", "\n", "# Применение upsampling к обучающей выборке (если это необходимо)\n", "X_train = train_df.drop('Price', axis=1) # Отделяем признаки от целевой переменной\n", "y_train = train_df['Price'] # Целевая переменная\n", "\n", "# Инициализация RandomOverSampler\n", "ros = RandomOverSampler(random_state=42)\n", "\n", "# Применение upsampling\n", "X_train_resampled, y_train_resampled = ros.fit_resample(X_train, y_train)\n", "\n", "# Создание нового DataFrame с балансированными данными\n", "train_df_resampled = pd.concat([X_train_resampled, y_train_resampled], axis=1)\n", "\n", "# Создание нового признака \"Camera_to_Display_Ratio\" на основе признаков \"Camera\" и \"Display\"\n", "train_df_resampled['Camera_to_Display_Ratio'] = train_df_resampled['Camera'] / train_df_resampled['Display']\n", "val_df['Camera_to_Display_Ratio'] = val_df['Camera'] / val_df['Display']\n", "test_df['Camera_to_Display_Ratio'] = test_df['Camera'] / test_df['Display']\n", "\n", "# Определение числовых признаков для масштабирования\n", "numerical_features_to_scale = ['Spec_score', 'No_of_sim', 'Ram', 'Battery', 'Display', 'Camera', 'Inbuilt_memory', 'Screen_resolution', 'Camera_to_Display_Ratio']\n", "\n", "# Удаление строковых значений из числовых признаков\n", "for feature in numerical_features_to_scale:\n", " train_df_resampled[feature] = pd.to_numeric(train_df_resampled[feature], errors='coerce')\n", " val_df[feature] = pd.to_numeric(val_df[feature], errors='coerce')\n", " test_df[feature] = pd.to_numeric(test_df[feature], errors='coerce')\n", "\n", "# Инициализация StandardScaler\n", "scaler = StandardScaler()\n", "\n", "# Масштабирование числовых признаков в обучающей выборке\n", "train_df_resampled[numerical_features_to_scale] = scaler.fit_transform(train_df_resampled[numerical_features_to_scale])\n", "\n", "# Масштабирование числовых признаков в контрольной и тестовой выборках\n", "val_df[numerical_features_to_scale] = scaler.transform(val_df[numerical_features_to_scale])\n", "test_df[numerical_features_to_scale] = scaler.transform(test_df[numerical_features_to_scale])\n", "\n", "# Вывод размеров выборок\n", "print(\"Размер обучающей выборки после балансировки:\", train_df_resampled.shape)\n", "print(\"Размер контрольной выборки:\", val_df.shape)\n", "print(\"Размер тестовой выборки:\", test_df.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Конструирование признаков с применением фреймворка Featuretools" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Обучающая выборка после конструирования признаков:\n", " Unnamed: 0 Rating Spec_score No_of_sim Ram \\\n", "id \n", "0 305 4.70 86 Dual Sim, 3G, 4G, 5G, VoLTE, 12 GB RAM \n", "1 941 4.45 71 Dual Sim, 3G, 4G, VoLTE, 4 GB RAM \n", "2 800 4.20 68 Dual Sim, 3G, 4G, VoLTE, 4 GB RAM \n", "3 97 4.25 69 Dual Sim, 3G, 4G, VoLTE, 4 GB RAM \n", "4 1339 4.30 74 Dual Sim, 3G, 4G, VoLTE, 6 GB RAM \n", "\n", " Battery External_Memory Android_version company \\\n", "id \n", "0 5000 Android v12 NaN Realme \n", "1 5000 Memory Card Supported, upto 1 TB 12 Motorola \n", "2 5000 Memory Card Supported 12 Vivo \n", "3 5000 Memory Card Supported 12 Vivo \n", "4 5000 Memory Card Supported, upto 256 GB 12 Lava \n", "\n", " Inbuilt_memory fast_charging \\\n", "id \n", "0 256 GB inbuilt 65W Fast Charging \n", "1 64 GB inbuilt 10W Fast Charging \n", "2 64 GB inbuilt 10W Fast Charging \n", "3 128 GB inbuilt 10W Fast Charging \n", "4 128 GB inbuilt NaN \n", "\n", " Screen_resolution Processor \n", "id \n", "0 1080 x 2400 px Octa Core \n", "1 720 x 1600 px Octa Core \n", "2 720 x 1600 px Display with Water Drop Notch Octa Core \n", "3 720 x 1600 px Display with Water Drop Notch Octa Core \n", "4 1600 x 720 px Octa Core \n", "Контрольная выборка после конструирования признаков:\n", " Unnamed: 0 Rating Spec_score No_of_sim Ram \\\n", "id \n", "1028 NaN NaN NaN \n", "825 NaN NaN NaN \n", "900 NaN NaN NaN \n", "702 NaN NaN NaN \n", "230 1050 4.05 90 Dual Sim, 3G, 4G, 5G, VoLTE, 8 GB RAM \n", "\n", " Battery External_Memory Android_version company Inbuilt_memory \\\n", "id \n", "1028 NaN NaN NaN NaN \n", "825 NaN NaN NaN NaN \n", "900 NaN NaN NaN NaN \n", "702 NaN NaN NaN NaN \n", "230 4500 Android v12 NaN Motorola 128 GB inbuilt \n", "\n", " fast_charging Screen_resolution Processor \n", "id \n", "1028 NaN NaN NaN \n", "825 NaN NaN NaN \n", "900 NaN NaN NaN \n", "702 NaN NaN NaN \n", "230 125W Fast Charging 1080 x 2400 px Octa Core \n", "Тестовая выборка после конструирования признаков:\n", " Unnamed: 0 Rating Spec_score No_of_sim \\\n", "id \n", "427 187 4.40 91 Dual Sim, 3G, 4G, 5G, VoLTE, \n", "1088 NaN NaN \n", "668 592 4.45 91 Dual Sim, 3G, 4G, 5G, VoLTE, \n", "572 1130 4.60 75 Dual Sim, 3G, 4G, VoLTE, \n", "115 117 4.60 72 Dual Sim, 3G, 4G, VoLTE, \n", "\n", " Ram Battery External_Memory Android_version \\\n", "id \n", "427 12 GB RAM 5000 Memory Card Not Supported 14 \n", "1088 NaN NaN NaN \n", "668 12 GB RAM 4500 Android v12 NaN \n", "572 6 GB RAM 5000 Memory Card Supported, upto 1 TB 13 \n", "115 4 GB RAM 5000 Memory Card Supported, upto 1 TB 12 \n", "\n", " company Inbuilt_memory fast_charging \\\n", "id \n", "427 Vivo 256 GB inbuilt 120W Fast Charging \n", "1088 NaN NaN NaN \n", "668 Honor 256 GB inbuilt 100W Fast Charging \n", "572 Xiaomi 128 GB inbuilt 18W Fast Charging \n", "115 Vivo 64 GB inbuilt 18W Fast Charging \n", "\n", " Screen_resolution Processor \n", "id \n", "427 1260 x 2800 px Octa Core \n", "1088 NaN NaN \n", "668 1200 x 2652 px Octa Core \n", "572 720 x 1600 px Octa Core \n", "115 720 x 1612 px Display with Water Drop Notch Octa Core \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\entityset\\entityset.py:1733: UserWarning: index id not found in dataframe, creating new integer column\n", " warnings.warn(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", " pd.to_datetime(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\synthesis\\deep_feature_synthesis.py:169: UserWarning: Only one dataframe in entityset, changing max_depth to 1 since deeper features cannot be created\n", " warnings.warn(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\logical_types.py:841: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", " series = series.replace(ww.config.get_option(\"nan_values\"), np.nan)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\logical_types.py:841: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", " series = series.replace(ww.config.get_option(\"nan_values\"), np.nan)\n" ] } ], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "import featuretools as ft\n", "import re\n", "\n", "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//mobile phone price prediction.csv\")\n", "\n", "# Преобразование столбца Battery в числовой формат\n", "df['Battery'] = df['Battery'].apply(lambda x: int(re.search(r'\\d+', x).group()) if re.search(r'\\d+', x) else None)\n", "\n", "# Преобразование столбцов Camera и Display в числовой формат\n", "df['Camera'] = pd.to_numeric(df['Camera'], errors='coerce')\n", "df['Display'] = pd.to_numeric(df['Display'], errors='coerce')\n", "\n", "# Разделение на обучающую и тестовую выборки (например, 70% обучающая, 30% тестовая)\n", "train_df, test_df = train_test_split(df, test_size=0.3, random_state=42)\n", "\n", "# Разделение обучающей выборки на обучающую и контрольную (например, 70% обучающая, 30% контрольная)\n", "train_df, val_df = train_test_split(train_df, test_size=0.3, random_state=42)\n", "\n", "# Создание нового признака \"Camera_to_Display_Ratio\" на основе признаков \"Camera\" и \"Display\"\n", "train_df['Camera_to_Display_Ratio'] = train_df['Camera'] / train_df['Display']\n", "val_df['Camera_to_Display_Ratio'] = val_df['Camera'] / val_df['Display']\n", "test_df['Camera_to_Display_Ratio'] = test_df['Camera'] / test_df['Display']\n", "\n", "# Определение сущностей\n", "es = ft.EntitySet(id='mobile_data')\n", "es = es.add_dataframe(dataframe_name='train', dataframe=train_df, index='id')\n", "\n", "# Генерация признаков\n", "feature_matrix, feature_defs = ft.dfs(entityset=es, target_dataframe_name='train', max_depth=2)\n", "\n", "# Преобразование признаков для контрольной и тестовой выборок\n", "val_feature_matrix = ft.calculate_feature_matrix(features=feature_defs, entityset=es, instance_ids=val_df.index)\n", "test_feature_matrix = ft.calculate_feature_matrix(features=feature_defs, entityset=es, instance_ids=test_df.index)\n", "\n", "# Вывод первых нескольких строк для проверки\n", "print(\"Обучающая выборка после конструирования признаков:\")\n", "print(feature_matrix.head())\n", "print(\"Контрольная выборка после конструирования признаков:\")\n", "print(val_feature_matrix.head())\n", "print(\"Тестовая выборка после конструирования признаков:\")\n", "print(test_feature_matrix.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Оценка качества каждого набора признаков\n", "\n", "Предсказательная способность Метрики: RMSE, MAE, R²\n", "\n", "Методы: Обучение модели на обучающей выборке и оценка на контрольной и тестовой выборках.\n", "\n", "Скорость вычисления Методы: Измерение времени выполнения генерации признаков и обучения модели.\n", "\n", "Надежность Методы: Кросс-валидация, анализ чувствительности модели к изменениям в данных.\n", "\n", "Корреляция Методы: Анализ корреляционной матрицы признаков, удаление мультиколлинеарных признаков.\n", "\n", "Цельность Методы: Проверка логической связи между признаками и целевой переменной, интерпретация результатов модели." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Размер обучающей выборки: 671\n", "Размер контрольной выборки: 288\n", "Размер тестовой выборки: 411\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\entityset\\entityset.py:1733: UserWarning: index id not found in dataframe, creating new integer column\n", " warnings.warn(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\synthesis\\deep_feature_synthesis.py:169: UserWarning: Only one dataframe in entityset, changing max_depth to 1 since deeper features cannot be created\n", " warnings.warn(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Feature Importance:\n", " feature importance\n", "4 Price 0.999443\n", "2 Spec_score 0.000227\n", "3 Battery 0.000146\n", "0 Unnamed: 0 0.000146\n", "1 Rating 0.000039\n" ] } ], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from imblearn.over_sampling import RandomOverSampler\n", "import featuretools as ft\n", "from sklearn.ensemble import RandomForestRegressor\n", "import re\n", "\n", "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//mobile phone price prediction.csv\")\n", "\n", "# Преобразование столбца Battery в числовой формат\n", "df['Battery'] = df['Battery'].apply(lambda x: int(re.search(r'\\d+', x).group()) if re.search(r'\\d+', x) else None)\n", "\n", "# Преобразование столбца Display в числовой формат\n", "df['Camera'] = pd.to_numeric(df['Camera'], errors='coerce')\n", "df['Display'] = pd.to_numeric(df['Display'], errors='coerce')\n", "df['Inbuilt_memory'] = pd.to_numeric(df['Inbuilt_memory'], errors='coerce')\n", "df['fast_charging'] = pd.to_numeric(df['fast_charging'], errors='coerce')\n", "\n", "# Удаление запятых из столбца Price и преобразование в числовой формат\n", "df['Price'] = df['Price'].str.replace(',', '').astype(float)\n", "\n", "# Удаление столбцов с текстовыми значениями, которые не могут быть преобразованы в числа\n", "df = df.drop(columns=['Name', 'company', 'Android_version', 'Processor_name', 'External_Memory', 'No_of_sim', 'Ram', 'Screen_resolution', 'Processor' ])\n", "\n", "# Разделение на обучающую и тестовую выборки (например, 70% обучающая, 30% тестовая)\n", "train_df, test_df = train_test_split(df, test_size=0.3, random_state=42)\n", "\n", "# Разделение обучающей выборки на обучающую и контрольную (например, 70% обучающая, 30% контрольная)\n", "train_df, val_df = train_test_split(train_df, test_size=0.3, random_state=42)\n", "\n", "# Вывод размеров выборок\n", "print(\"Размер обучающей выборки:\", len(train_df))\n", "print(\"Размер контрольной выборки:\", len(val_df))\n", "print(\"Размер тестовой выборки:\", len(test_df))\n", "\n", "# Применение upsampling к обучающей выборке (если это необходимо)\n", "X_train = train_df.drop('Price', axis=1) # Отделяем признаки от целевой переменной\n", "y_train = train_df['Price'] # Целевая переменная\n", "\n", "# Инициализация RandomOverSampler\n", "ros = RandomOverSampler(random_state=42)\n", "\n", "# Применение upsampling\n", "X_train_resampled, y_train_resampled = ros.fit_resample(X_train, y_train)\n", "\n", "# Создание нового DataFrame с балансированными данными\n", "train_df_resampled = pd.concat([X_train_resampled, y_train_resampled], axis=1)\n", "\n", "# Определение сущностей\n", "es = ft.EntitySet(id='mobile_data')\n", "es = es.add_dataframe(dataframe_name='mobile', dataframe=train_df_resampled, index='id')\n", "\n", "# Генерация признаков\n", "feature_matrix, feature_defs = ft.dfs(entityset=es, target_dataframe_name='mobile', max_depth=2)\n", "\n", "# Преобразование признаков для контрольной и тестовой выборок\n", "val_feature_matrix = ft.calculate_feature_matrix(features=feature_defs, entityset=es, instance_ids=val_df.index)\n", "test_feature_matrix = ft.calculate_feature_matrix(features=feature_defs, entityset=es, instance_ids=test_df.index)\n", "\n", "# Оценка важности признаков\n", "X = feature_matrix\n", "y = train_df_resampled['Price']\n", "\n", "# Разделение данных на обучающую и тестовую выборки\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", "\n", "# Обучение модели\n", "model = RandomForestRegressor(n_estimators=100, random_state=42)\n", "model.fit(X_train, y_train)\n", "\n", "# Получение важности признаков\n", "importances = model.feature_importances_\n", "feature_names = feature_matrix.columns\n", "\n", "# Сортировка признаков по важности\n", "feature_importance = pd.DataFrame({'feature': feature_names, 'importance': importances})\n", "feature_importance = feature_importance.sort_values(by='importance', ascending=False)\n", "\n", "print(\"Feature Importance:\")\n", "print(feature_importance)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Размер обучающей выборки: 66\n", "Размер контрольной выборки: 29\n", "Размер тестовой выборки: 42\n", "Mean Squared Error: 13048795.366100002\n", "R2 Score: -0.23881710583662308\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\entityset\\entityset.py:1733: UserWarning: index id not found in dataframe, creating new integer column\n", " warnings.warn(\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\logical_types.py:841: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", " series = series.replace(ww.config.get_option(\"nan_values\"), np.nan)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\featuretools\\computational_backends\\feature_set_calculator.py:143: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n", " df = pd.concat([df, default_df], sort=True)\n", "d:\\ULSTU\\AIM2\\AIM-PIbd-32-Puchkina-A-A\\aimenv\\Lib\\site-packages\\woodwork\\logical_types.py:841: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", " series = series.replace(ww.config.get_option(\"nan_values\"), np.nan)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Cross-validated Mean Squared Error: 394482934.1724652\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5gAAAIjCAYAAABmsrS/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABGCElEQVR4nO3deVxV1f7/8fcB5ICMTgwagoRjaYam4axZOORQXc0hpxxuOZR59aopKk6Z6XXIpHKiwTRtHtQy0yy1LKfUHBGHTK0cQDRBYf/+6Of5dkJNcMERfD0fj/N4cNZee+3P3isu9+3aZx+bZVmWAAAAAAC4QW6uLgAAAAAAUDgQMAEAAAAARhAwAQAAAABGEDABAAAAAEYQMAEAAAAARhAwAQAAAABGEDABAAAAAEYQMAEAAAAARhAwAQAAAABGEDABAAAAAEYQMAEABU5iYqJsNtsVX8OGDcuTY65fv15jxozRmTNn8mT8G3H5evzwww+uLiXXZs+ercTERFeXAQC4QR6uLgAAgNwaO3asypUr59R255135smx1q9fr/j4eHXv3l2BgYF5coxb2ezZs1WyZEl1797d1aUAAG4AARMAUGA1b95cNWvWdHUZN+TcuXPy8fFxdRkuc/78eRUtWtTVZQAADOEWWQBAobV8+XLVr19fPj4+8vPzU8uWLbVz506nPj/++KO6d++uyMhIeXl5KSQkRI8//rhOnjzp6DNmzBgNGTJEklSuXDnH7bgHDx7UwYMHZbPZrnh7p81m05gxY5zGsdls+umnn9SpUycVK1ZM9erVc2x/8803VaNGDXl7e6t48eLq0KGDjhw5kqtz7969u3x9fXX48GE9+OCD8vX1VZkyZfTSSy9JkrZv364mTZrIx8dH4eHheuutt5z2v3zb7dq1a/Xvf/9bJUqUkL+/v7p27arTp09nO97s2bN1xx13yG63q3Tp0urXr1+224kbNWqkO++8U5s2bVKDBg1UtGhRPfvss4qIiNDOnTv11VdfOa5to0aNJEmnTp3S4MGDVbVqVfn6+srf31/NmzfXtm3bnMZes2aNbDablixZogkTJui2226Tl5eX7rvvPu3fvz9bvd99951atGihYsWKycfHR9WqVdOMGTOc+uzevVv/+te/VLx4cXl5ealmzZr66KOPcjoVAHBLYQUTAFBgpaSk6Pfff3dqK1mypCTpjTfeULdu3RQbG6vnn39e58+fV0JCgurVq6ctW7YoIiJCkrRy5UodOHBAPXr0UEhIiHbu3KlXX31VO3fu1LfffiubzaaHH35Ye/fu1aJFizRt2jTHMUqVKqXffvstx3W3a9dO5cuX18SJE2VZliRpwoQJiouLU/v27dWrVy/99ttvevHFF9WgQQNt2bIlV7flZmZmqnnz5mrQoIEmT56shQsXqn///vLx8dGIESPUuXNnPfzww3r55ZfVtWtXxcTEZLvluH///goMDNSYMWO0Z88eJSQk6NChQ45AJ/0ZnOPj49W0aVM9+eSTjn7ff/+91q1bpyJFijjGO3nypJo3b64OHTroscceU3BwsBo1aqQBAwbI19dXI0aMkCQFBwdLkg4cOKAPPvhA7dq1U7ly5XTixAm98soratiwoX766SeVLl3aqd5JkybJzc1NgwcPVkpKiiZPnqzOnTvru+++c/RZuXKlHnzwQYWGhurpp59WSEiIdu3apU8++URPP/20JGnnzp2qW7euypQpo2HDhsnHx0dLlixR27Zt9e677+qhhx7K8XwAwC3BAgCggFmwYIEl6Yovy7Kss2fPWoGBgVbv3r2d9jt+/LgVEBDg1H7+/Pls4y9atMiSZK1du9bR9sILL1iSrOTkZKe+ycnJliRrwYIF2caRZI0ePdrxfvTo0ZYkq2PHjk79Dh48aLm7u1sTJkxwat++fbvl4eGRrf1q1+P77793tHXr1s2SZE2cONHRdvr0acvb29uy2WzW4sWLHe27d+/OVuvlMWvUqGFlZGQ42idPnmxJsj788EPLsizr119/tTw9Pa0HHnjAyszMdPSbNWuWJcmaP3++o61hw4aWJOvll1/Odg533HGH1bBhw2ztFy5ccBrXsv685na73Ro7dqyjbfXq1ZYkq3LlylZ6erqjfcaMGZYka/v27ZZlWdalS5escuXKWeHh4dbp06edxs3KynL8fN9991lVq1a1Lly44LS9Tp06Vvny5bPVCQD4E7fIAgAKrJdeekkrV650ekl/rlCdOXNGHTt21O+//+54ubu7q3bt2lq9erVjDG9vb8fPFy5c0O+//657771XkrR58+Y8qfuJJ55wev/ee+8pKytL7du3d6o3JCRE5cuXd6o3p3r16uX4OTAwUBUrVpSPj4/at2/vaK9YsaICAwN14MCBbPv36dPHaQXy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448/FB0drYYNG6pDhw6qVq2apD9XMJ944gklJCQ49rn33nsVHR2t2bNn680339T48eO1a9cu2Ww2SX/eahoYGKgPPvhADzzwgMqUKaMePXpkC3f/5H//+59eeeUV7dixQ0WKFHHatnfvXlWsWFErV65U06ZNs+07YsQIvfvuu051zZ49W0OHDlVKSorc3NzUqFEjpaamavPmzY79xo8fr6+//lqfffaZo+3nn39WWFiY9uzZowoVKmQ7Vnp6ulNAT01NVVhYmO4a8LLc7d45OmcAAAAAubfpha6uLsFJamqqAgIClJKSIn9/f2Pj3pQrmNKfn8H85Zdf9NFHH6lZs2Zas2aNoqOjlZiY6OgTExPjtE9MTIxjBXPbtm3av3+//Pz8HCuixYsX14ULF5SUlKRff/1Vv/zyi+67774c19auXTv98ccfioyMVO/evfX+++87bnHdunWr3N3d1bBhwyvuu2vXLsXExDjCpSTVrVtXaWlp+vnnnx1tNWrUcNpv27ZtWr16teNcfH19ValSJUlSUlLSFY9lt9vl7+/v9AIAAACAvHLTPuRHkry8vHT//ffr/vvvV1xcnHr16qXRo0ere/fu/7hvWlqaatSooYULF2bbVqpUKbm55T5bX141/OKLL7Ry5Ur17dtXL7zwgr766it5e5tZGfTx8XF6n5aWplatWun555/P1jc0NNTIMQEAAADgRty0K5hXUqVKFZ07d87x/ttvv3Xa/u2336py5cqSpOjoaO3bt09BQUGKiopyegUEBMjPz08RERFatWpVrmrx9vZWq1atNHPmTK1Zs0YbNmzQ9u3bVbVqVWVlZemrr7664n6VK1fWhg0b9Nc7k9etWyc/Pz/ddtttVz1edHS0du7cqYiIiGzn8/cwCgAAAACucFMGzJMnT6pJkyZ688039eOPPyo5OVlLly7V5MmT1aZNG0e/pUuXav78+dq7d69Gjx6tjRs3Op4C27lzZ5UsWVJt2rTR119/reTkZK1Zs0ZPPfWU41bUMWPGaOrUqZo5c6b27dunzZs368UXX/zH+hITEzVv3jzt2LFDBw4c0Jtvvilvb2+Fh4crIiJC3bp10+OPP64PPvjAcdwlS5ZIkvr27asjR45owIAB2r17tz788EONHj1agwYNuuaqar9+/XTq1Cl17NhR33//vZKSkvTZZ5+pR48eyszMvJHL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pN9//1316tWTZVm6dOmSnnjiCT377LM5OjYBEwD+v0mTJmnx4sVas2YND9jIZ35+ftq6davS0tK0atUqDRo0SJGRkWrUqJGrSyv0zp49qy5dumjOnDkqWbKkq8u5JcXExCgmJsbxvk6dOqpcubJeeeUVjRs3zoWV3TqysrIUFBSkV199Ve7u7qpRo4aOHj2qF154gYDpAvPmzVPVqlVVq1YtV5dyS1mzZo0mTpyo2bNnq3bt2tq/f7+efvppjRs3TnFxcdc9DgGzkChZsqTc3d114sQJp/YTJ04oJCTkivuEhITkqD+uLTdzALNuZA6mTJmiSZMm6YsvvlC1atXyssxCLbdz4ObmpqioKElS9erVtWvXLj333HMEzFzI6RwkJSXp4MGDatWqlaMtKytLkuTh4aE9e/bo9ttvz9uiCxETfwuKFCmiu+++W/v378+LEgu93MxBaGioihQpInd3d0db5cqVdfz4cWVkZMjT0zNPay5sbuT34Ny5c1q8eLHGjh2blyUWermZg7i4OHXp0kW9evWSJFWtWlXnzp1Tnz59NGLECLm5Xd+nK/kMZiHh6empGjVqaNWqVY62rKwsrVq1yulfRf8qJibGqb8krVy58qr9cW25mQOYlds5mDx5ssaNG6cVK1aoZs2a+VFqoWXq9yArK0vp6el5UWKhl9M5qFSpkrZv366tW7c6Xq1bt1bjxo21detWhYWF5Wf5BZ6J34HMzExt375doaGheVVmoZabOahbt67279/v+McVSdq7d69CQ0MJl7lwI78HS5cuVXp6uh577LG8LrNQy80cnD9/PluIvPyPLpZlXf/Bc/gwItzEFi9ebNntdisxMdH66aefrD59+liBgYGOR5136dLFGjZsmKP/unXrLA8PD2vKlCnWrl27rNGjR/M1JTcop3OQnp5ubdmyxdqyZYsVGhpqDR482NqyZYu1b98+V51CgZfTOZg0aZLl6elpvfPOO06PRz979qyrTqHAy+kcTJw40fr888+tpKQk66effrKmTJlieXh4WHPmzHHVKRR4OZ2Dv+Mpsjcmp9c/Pj7e+uyzz6ykpCRr06ZNVocOHSwvLy9r586drjqFAi+nc3D48GHLz8/P6t+/v7Vnzx7rk08+sYKCgqzx48e76hQKvNz+71C9evWsRx99NL/LLZRyOgejR4+2/Pz8rEWLFlkHDhyw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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Train Mean Squared Error: 46662951.69621668\n", "Train R2 Score: 0.9411587287387594\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2QAAAIjCAYAAABswtioAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABxu0lEQVR4nO3deVxV1f7/8fdhRkZREXEAU1NxzBnNKU0stBwCbTC1wSyt1DLz3iabbM5uk9mgzcbJMWdzLilTQ8VZwyEVwQwQHJj27w9/7K8nSEGBDfh6Ph48rnutdfb57LM7XN+uvde2GYZhCAAAAABQ6pysLgAAAAAArlYEMgAAAACwCIEMAAAAACxCIAMAAAAAixDIAAAAAMAiBDIAAAAAsAiBDAAAAAAsQiADAAAAAIsQyAAAAADAIgQyAIBlbDabnnvuOavLsFy3bt3UrVs3c/vAgQOy2WyaMWOGZTX90z9rLCll8dgBoCQRyACggvjggw9ks9nUvn37y97H0aNH9dxzzykuLq74CivjVq9eLZvNZv64urrqmmuu0d13360//vjD6vKKZP369XruueeUkpJiWQ2hoaEOn2dgYKA6d+6sOXPmWFYTAJRlLlYXAAAoHl9//bVCQ0O1YcMG7du3T/Xr1y/yPo4ePapJkyYpNDRULVu2LP4iy7BHHnlEbdu2VVZWljZv3qxp06Zp4cKF2rZtm4KDg0u1lpCQEJ05c0aurq5Fet369es1adIkDRs2TP7+/iVTXCG0bNlSjz32mKTz/0199NFHGjBggD788EONHDnyoq+93GMHgPKKGTIAqAASEhK0fv16vfXWW6pWrZq+/vprq0sqdzp37qy77rpLw4cP17vvvqs33nhDJ0+e1Oeff/6vr8nIyCiRWmw2mzw8POTs7Fwi+y9pNWvW1F133aW77rpLTzzxhH7++Wd5eXnp7bff/tfXZGdnKzMzs9wfOwAUFYEMACqAr7/+WpUrV1ZkZKRuu+22fw1kKSkpGjt2rEJDQ+Xu7q5atWrp7rvv1okTJ7R69Wq1bdtWkjR8+HDzkrO8e3lCQ0M1bNiwfPv8571FmZmZeuaZZ9S6dWv5+fnJy8tLnTt31qpVq4p8XMePH5eLi4smTZqUr2/37t2y2Wx67733JElZWVmaNGmSGjRoIA8PD1WpUkXXX3+9li9fXuT3laQbbrhB0vmwK0nPPfecbDabduzYoTvuuEOVK1fW9ddfb47/6quv1Lp1a3l6eiogIECDBw/W4cOH8+132rRpqlevnjw9PdWuXTutW7cu35h/u49q165dio6OVrVq1eTp6amGDRvqv//9r1nf+PHjJUl169Y1z9+BAwdKpMaiCAoKUuPGjc3PMu/43njjDU2ZMkX16tWTu7u7duzYcVnHnufIkSO65557VL16dbm7u6tJkyb67LPPrqh2AChpXLIIABXA119/rQEDBsjNzU233367PvzwQ/32229mwJKk9PR0de7cWTt37tQ999yjVq1a6cSJE5o/f77+/PNPNW7cWM8//7yeeeYZjRgxQp07d5YkdezYsUi1pKWl6ZNPPtHtt9+u+++/X6dOndKnn36qiIgIbdiwoUiXQlavXl1du3ZVTEyMnn32WYe+7777Ts7OzoqKipJ0PpBMnjxZ9913n9q1a6e0tDRt3LhRmzdv1o033likY5Ck/fv3S5KqVKni0B4VFaUGDRro5ZdflmEYkqSXXnpJTz/9tKKjo3XfffcpOTlZ7777rrp06aLff//dvHzw008/1QMPPKCOHTtqzJgx+uOPP3TLLbcoICBAtWvXvmg9W7duVefOneXq6qoRI0YoNDRU+/fv1w8//KCXXnpJAwYM0J49e/Ttt9/q7bffVtWqVSVJ1apVK7Ua/01WVpYOHz6c77OcPn26zp49qxEjRsjd3V0BAQHKzc0t8rFL58N7hw4dZLPZNHr0aFWrVk2LFy/Wvffeq7S0NI0ZM+ayageAEmcAAMq1jRs3GpKM5cuXG4ZhGLm5uUatWrWMRx991GHcM888Y0gyZs+enW8fubm5hmEYxm+//WZIMqZPn55vTEhIiDF06NB87V27djW6du1qbmdnZxvnzp1zGPP3338b1atXN+655x6HdknGs88+e9Hj++ijjwxJxrZt2xzaw8LCjBtuuMHcbtGihREZGXnRfRVk1apVhiTjs88+M5KTk42jR48aCxcuNEJDQw2bzWb89ttvhmEYxrPPPmtIMm6//XaH1x84cMBwdnY2XnrpJYf2bdu2GS4uLmZ7ZmamERgYaLRs2dLh85k2bZohyeEzTEhIyHceunTpYvj4+BgHDx50eJ+8c2cYhvH6668bkoyEhIQSr/HfhISEGL169TKSk5ON5ORkY8uWLcbgwYMNScbDDz/scHy+vr5G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sggAKFcWLFigv//+W/fee6+aNm3q8DNw4EDzssVnn31W3377rZ599lnt3LlT27Zt06uvvmruJzQ0VGvXrtWRI0fMQNWtWzclJyfrtdde0/79+/X+++9r8eLFDu/foEEDffnll9q5c6d+/fVX3XnnnZc1G3elunbtqi5dumjgwIFavny5EhIStHjxYi1ZskSSNGHCBK1fv16jR49WXFyc9u7dq3nz5rGoBwCUMQQyAEC58umnn6pnz57y8/PL1zdw4EBt3LhRW7duVbdu3WS32zV//ny1bNlSN9xwgzZs2GCOff7553XgwAHVq1dP1apVkyQ1btxYH3zwgd5//321aNFCGzZs0OOPP57v/f/++2+1atVKQ4YM0SOPPKLAwMCSPeh/MWvWLLVt21a33367wsLC9MQTT5izfs2bN9eaNWu0Z88ede7cWdddd52eeeYZh8s8AQDWsxn/vFgeAAAAAFAqmCEDAAAAAIsQyAAAAADAIgQyAAAAALAIgQwAAAAALEIgAwAAAACLEMgAAAAAwCIEMgAAAACwCIEMAAAAACxCIAMAAAAAixDIAAAAAMAiBDIAAAAAsMj/A9PdDxWLOUtnAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.ensemble import RandomForestRegressor\n", "from sklearn.metrics import mean_squared_error, r2_score\n", "from sklearn.model_selection import cross_val_score\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import featuretools as ft\n", "import re\n", "\n", "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//mobile phone price prediction.csv\")\n", "\n", "# Уменьшение размера выборки для ускорения работы (опционально)\n", "df = df.sample(frac=0.1, random_state=42)\n", "\n", "# Преобразование столбца Battery в числовой формат\n", "df['Battery'] = df['Battery'].apply(lambda x: int(re.search(r'\\d+', x).group()) if re.search(r'\\d+', x) else None)\n", "\n", "# Преобразование столбца Display в числовой формат\n", "df['Camera'] = pd.to_numeric(df['Camera'], errors='coerce')\n", "df['Display'] = pd.to_numeric(df['Display'], errors='coerce')\n", "df['Inbuilt_memory'] = pd.to_numeric(df['Inbuilt_memory'], errors='coerce')\n", "df['fast_charging'] = pd.to_numeric(df['fast_charging'], errors='coerce')\n", "\n", "# Удаление запятых из столбца Price и преобразование в числовой формат\n", "df['Price'] = df['Price'].str.replace(',', '').astype(float)\n", "\n", "# Удаление столбцов с текстовыми значениями, которые не могут быть преобразованы в числа\n", "df = df.drop(columns=['Name', 'company', 'Android_version', 'Processor_name', 'External_Memory', 'No_of_sim', 'Ram', 'Screen_resolution', 'Processor' ])\n", "# Разделение на обучающую и тестовую выборки (например, 70% обучающая, 30% тестовая)\n", "train_df, test_df = train_test_split(df, test_size=0.3, random_state=42)\n", "\n", "# Разделение обучающей выборки на обучающую и контрольную (например, 70% обучающая, 30% контрольная)\n", "train_df, val_df = train_test_split(train_df, test_size=0.3, random_state=42)\n", "\n", "# Вывод размеров выборок\n", "print(\"Размер обучающей выборки:\", len(train_df))\n", "print(\"Размер контрольной выборки:\", len(val_df))\n", "print(\"Размер тестовой выборки:\", len(test_df))\n", "\n", "# Определение сущностей\n", "es = ft.EntitySet(id='mobile_data')\n", "es = es.add_dataframe(dataframe_name='mobile', dataframe=train_df, index='id')\n", "\n", "# Генерация признаков с уменьшенной глубиной\n", "feature_matrix, feature_defs = ft.dfs(entityset=es, target_dataframe_name='mobile', max_depth=1)\n", "\n", "# Преобразование признаков для контрольной и тестовой выборок\n", "val_feature_matrix = ft.calculate_feature_matrix(features=feature_defs, entityset=es, instance_ids=val_df.index)\n", "test_feature_matrix = ft.calculate_feature_matrix(features=feature_defs, entityset=es, instance_ids=test_df.index)\n", "\n", "# Удаление строк с NaN\n", "feature_matrix = feature_matrix.dropna()\n", "val_feature_matrix = val_feature_matrix.dropna()\n", "test_feature_matrix = test_feature_matrix.dropna()\n", "\n", "# Разделение данных на обучающую и тестовую выборки\n", "X_train = feature_matrix.drop('Price', axis=1)\n", "y_train = feature_matrix['Price']\n", "X_val = val_feature_matrix.drop('Price', axis=1)\n", "y_val = val_feature_matrix['Price']\n", "X_test = test_feature_matrix.drop('Price', axis=1)\n", "y_test = test_feature_matrix['Price']\n", "\n", "# Выбор модели\n", "model = RandomForestRegressor(random_state=42)\n", "\n", "# Обучение модели\n", "model.fit(X_train, y_train)\n", "\n", "# Предсказание и оценка\n", "y_pred = model.predict(X_test)\n", "\n", "mse = mean_squared_error(y_test, y_pred)\n", "r2 = r2_score(y_test, y_pred)\n", "\n", "print(f\"Mean Squared Error: {mse}\")\n", "print(f\"R2 Score: {r2}\")\n", "\n", "# Кросс-валидация\n", "scores = cross_val_score(model, X_train, y_train, cv=5, scoring='neg_mean_squared_error')\n", "mse_cv = -scores.mean()\n", "print(f\"Cross-validated Mean Squared Error: {mse_cv}\")\n", "\n", "# Анализ важности признаков\n", "feature_importances = model.feature_importances_\n", "feature_names = X_train.columns\n", "\n", "importance_df = pd.DataFrame({'Feature': feature_names, 'Importance': feature_importances})\n", "importance_df = importance_df.sort_values(by='Importance', ascending=False)\n", "\n", "plt.figure(figsize=(10, 6))\n", "sns.barplot(x='Importance', y='Feature', data=importance_df)\n", "plt.title('Feature Importance')\n", "plt.show()\n", "\n", "# Проверка на переобучение\n", "y_train_pred = model.predict(X_train)\n", "\n", "mse_train = mean_squared_error(y_train, y_train_pred)\n", "r2_train = r2_score(y_train, y_train_pred)\n", "\n", "print(f\"Train Mean Squared Error: {mse_train}\")\n", "print(f\"Train R2 Score: {r2_train}\")\n", "\n", "# Визуализация результатов\n", "plt.figure(figsize=(10, 6))\n", "plt.scatter(y_test, y_pred, alpha=0.5)\n", "plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=2)\n", "plt.xlabel('Actual Price')\n", "plt.ylabel('Predicted Price')\n", "plt.title('Actual vs Predicted Price')\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "aimenv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.5" } }, "nbformat": 4, "nbformat_minor": 2 }