MII/mai/lab2.ipynb

573 lines
162 KiB
Plaintext
Raw Normal View History

2024-12-14 15:49:48 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1. Цены на мобильные телефоны https://www.kaggle.com/datasets/dewangmoghe/mobile-phone-price-prediction\n",
"2. Цены на акции Starbucks https://www.kaggle.com/datasets/mayankanand2701/starbucks-stock-price-dataset\n",
"3. Цены на золото https://www.kaggle.com/datasets/sid321axn/gold-price-prediction-dataset"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Датасет 1. Цены мобильных телефонов**\n",
"1. **Name**: Название модели мобильного телефона.\n",
"2. **Rating**: Рейтинг мобильного телефона (по отзывам пользователей).\n",
"3. **Spec_score**: Оценка спецификаций телефона (возможно, по различным характеристикам).\n",
"4. **No_of_sim**: Количество SIM-карт, поддерживаемых телефоном.\n",
"5. **Ram**: Объем оперативной памяти (RAM) в гигабайтах.\n",
"6. **Battery**: Емкость батареи в мАч.\n",
"7. **Display**: Размер дисплея в дюймах.\n",
"8. **Camera**: Разрешение камеры (в мегапикселях).\n",
"9. **External_Memory**: Поддержка внешней памяти (да/нет).\n",
"10. **Android_version**: Версия операционной системы Android.\n",
"11. **Price**: Цена мобильного телефона в долларах США.\n",
"12. **Company**: Производитель телефона.\n",
"13. **Inbuilt_memory**: Объем встроенной памяти (в гигабайтах).\n",
"14. **Fast_charging**: Наличие быстрой зарядки (да/нет).\n",
"15. **Screen_resolution**: Разрешение экрана (в пикселях).\n",
"16. **Processor**: Тип процессора.\n",
"17. **Processor_name**: Наименование процессора.\n",
"\n",
"**Объект наблюдения**: Каждый объект представляет собой отдельный мобильный телефон.\\\n",
"**Связи между объектами**: Внутри одного объекта есть взаимосвязь между характеристиками и его ценой. Например, объем оперативной памяти, емкость батареи, качество камеры и поддержка быстрой зарядки могут влиять на цену.\\\n",
"**Бизнес-цель**: Оптимизация продаж мобильных телефонов, оценка цен в зависимости от характеристик.\\\n",
"**Эффект для бизнеса**: Более точная оценка стоимости мобильных телефонов может помочь производителям предлагать конкурентоспособные цены и максимизировать прибыль.\\\n",
"**Техническая цель**: Построение модели машинного обучения для прогнозирования цены мобильного телефона на основе его характеристик.\\\n",
"* **Вход**: Характеристики мобильного телефона (объем RAM, емкость батареи, качество камеры и т.д.).\\\n",
"* **Целевой признак**: Цена мобильного телефона. "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['id', 'Name', 'Rating', 'Spec_score', 'No_of_sim', 'Ram', 'Battery',\n",
" 'Display', 'Camera', 'External_Memory', 'Android_version', 'Price',\n",
" 'company', 'Inbuilt_memory', 'fast_charging', 'Screen_resolution',\n",
" 'Processor', 'Processor_name'],\n",
" dtype='object')\n",
"Зашумленные столбцы: []\n",
"Смещение: id 0.000000\n",
"Name -0.023604\n",
"Rating -0.066979\n",
"Spec_score -0.739377\n",
"No_of_sim 1.664627\n",
"Ram -0.899798\n",
"Battery -0.814522\n",
"Display -0.101507\n",
"Camera -0.259205\n",
"External_Memory -2.033547\n",
"Android_version 0.584967\n",
"Price 0.080087\n",
"company -0.760020\n",
"Inbuilt_memory 1.061234\n",
"fast_charging 0.217571\n",
"Screen_resolution 0.702418\n",
"Processor -5.671454\n",
"Processor_name -0.159994\n",
"dtype: float64\n",
"Сильно смещенные столбцы: ['No_of_sim', 'External_Memory', 'Inbuilt_memory', 'Processor']\n",
"Выбросы в столбце 'id':\n",
"Series([], Name: id, dtype: int64)\n",
"\n",
"Выбросы в столбце 'Name':\n",
"Series([], Name: Name, dtype: int64)\n",
"\n",
"Выбросы в столбце 'Rating':\n",
"Series([], Name: Rating, dtype: float64)\n",
"\n",
"Выбросы в столбце 'Spec_score':\n",
"91 42\n",
"99 54\n",
"122 51\n",
"125 53\n",
"214 58\n",
"234 58\n",
"651 57\n",
"713 54\n",
"719 49\n",
"802 53\n",
"803 54\n",
"1142 46\n",
"1231 57\n",
"1239 56\n",
"1344 55\n",
"1346 55\n",
"1348 57\n",
"Name: Spec_score, dtype: int64\n",
"\n",
"Выбросы в столбце 'No_of_sim':\n",
"394 8\n",
"628 8\n",
"644 7\n",
"951 8\n",
"967 8\n",
"971 8\n",
"1052 8\n",
"Name: No_of_sim, dtype: int64\n",
"\n",
"Выбросы в столбце 'Ram':\n",
"91 0\n",
"719 1\n",
"Name: Ram, dtype: int64\n",
"\n",
"Выбросы в столбце 'Battery':\n",
"0 86\n",
"1 20\n",
"3 85\n",
"6 86\n",
"9 86\n",
" ..\n",
"1344 8\n",
"1346 7\n",
"1349 8\n",
"1350 7\n",
"1364 20\n",
"Name: Battery, Length: 247, dtype: int64\n",
"\n",
"Выбросы в столбце 'Display':\n",
"76 87\n",
"78 84\n",
"91 2\n",
"122 6\n",
"125 7\n",
"197 86\n",
"198 87\n",
"199 86\n",
"200 86\n",
"201 86\n",
"202 85\n",
"204 86\n",
"205 86\n",
"264 3\n",
"397 80\n",
"538 1\n",
"600 83\n",
"607 83\n",
"608 83\n",
"609 82\n",
"610 82\n",
"612 84\n",
"628 8\n",
"629 9\n",
"648 88\n",
"650 85\n",
"662 10\n",
"663 10\n",
"665 11\n",
"688 6\n",
"715 9\n",
"719 5\n",
"923 84\n",
"1042 5\n",
"1118 80\n",
"1142 5\n",
"1226 81\n",
"1227 81\n",
"1228 82\n",
"1246 4\n",
"1369 0\n",
"Name: Display, dtype: int64\n",
"\n",
"Выбросы в столбце 'Camera':\n",
"Series([], Name: Camera, dtype: int64)\n",
"\n",
"Выбросы в столбце 'External_Memory':\n",
"45 3\n",
"55 3\n",
"56 3\n",
"66 3\n",
"72 18\n",
"76 8\n",
"77 15\n",
"78 16\n",
"79 15\n",
"80 15\n",
"81 15\n",
"83 15\n",
"84 15\n",
"85 15\n",
"192 19\n",
"198 6\n",
"202 12\n",
"203 7\n",
"204 17\n",
"211 19\n",
"264 13\n",
"388 29\n",
"391 28\n",
"392 1\n",
"396 0\n",
"597 20\n",
"600 25\n",
"603 27\n",
"606 26\n",
"612 2\n",
"644 10\n",
"649 9\n",
"650 14\n",
"672 22\n",
"924 28\n",
"1040 4\n",
"1045 4\n",
"1046 24\n",
"1048 21\n",
"1049 24\n",
"1051 24\n",
"1052 5\n",
"1268 11\n",
"1270 11\n",
"1291 23\n",
"1369 30\n",
"Name: External_Memory, dtype: int64\n",
"\n",
"Выбросы в столбце 'Android_version':\n",
"Series([], Name: Android_version, dtype: int64)\n",
"\n",
"Выбросы в столбце 'Price':\n",
"Series([], Name: Price, dtype: int64)\n",
"\n",
"Выбросы в столбце 'company':\n",
"Series([], Name: company, dtype: int64)\n",
"\n",
"Выбросы в столбце 'Inbuilt_memory':\n",
"2 7\n",
"3 7\n",
"4 7\n",
"6 7\n",
"7 7\n",
" ..\n",
"1357 7\n",
"1358 7\n",
"1359 7\n",
"1363 7\n",
"1365 7\n",
"Name: Inbuilt_memory, Length: 205, dtype: int64\n",
"\n",
"Выбросы в столбце 'fast_charging':\n",
"Series([], Name: fast_charging, dtype: int64)\n",
"\n",
"Выбросы в столбце 'Screen_resolution':\n",
"Series([], Name: Screen_resolution, dtype: int64)\n",
"\n",
"Выбросы в столбце 'Processor':\n",
"0 12\n",
"1 2\n",
"2 4\n",
"16 14\n",
"22 14\n",
" ..\n",
"1322 12\n",
"1342 12\n",
"1346 13\n",
"1348 14\n",
"1350 13\n",
"Name: Processor, Length: 133, dtype: int64\n",
"\n",
"Выбросы в столбце 'Processor_name':\n",
"Series([], Name: Processor_name, dtype: int64)\n",
"\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x800 with 18 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Просачивание данных: Высокая корреляция (-0.26) между столбцами 'id' и 'Name'\n",
"Просачивание данных: Высокая корреляция (-0.30) между столбцами 'id' и 'company'\n",
"Просачивание данных: Высокая корреляция (-0.26) между столбцами 'Name' и 'id'\n",
"Просачивание данных: Высокая корреляция (-0.21) между столбцами 'Name' и 'Android_version'\n",
"Просачивание данных: Высокая корреляция (0.96) между столбцами 'Name' и 'company'\n",
"Просачивание данных: Высокая корреляция (-0.44) между столбцами 'Spec_score' и 'No_of_sim'\n",
"Просачивание данных: Высокая корреляция (0.49) между столбцами 'Spec_score' и 'Display'\n",
"Просачивание данных: Высокая корреляция (0.22) между столбцами 'Spec_score' и 'Camera'\n",
"Просачивание данных: Высокая корреляция (-0.46) между столбцами 'Spec_score' и 'External_Memory'\n",
"Просачивание данных: Высокая корреляция (0.35) между столбцами 'Spec_score' и 'Android_version'\n",
"Просачивание данных: Высокая корреляция (-0.27) между столбцами 'Spec_score' и 'Inbuilt_memory'\n",
"Просачивание данных: Высокая корреляция (-0.47) между столбцами 'Spec_score' и 'Screen_resolution'\n",
"Просачивание данных: Высокая корреляция (-0.44) между столбцами 'No_of_sim' и 'Spec_score'\n",
"Просачивание данных: Высокая корреляция (-0.26) между столбцами 'No_of_sim' и 'Display'\n",
"Просачивание данных: Высокая корреляция (0.20) между столбцами 'No_of_sim' и 'External_Memory'\n",
"Просачивание данных: Высокая корреляция (-0.22) между столбцами 'No_of_sim' и 'Android_version'\n",
"Просачивание данных: Высокая корреляция (0.26) между столбцами 'No_of_sim' и 'Inbuilt_memory'\n",
"Просачивание данных: Высокая корреляция (0.30) между столбцами 'No_of_sim' и 'Screen_resolution'\n",
"Просачивание данных: Высокая корреляция (-0.26) между столбцами 'Ram' и 'Display'\n",
"Просачивание данных: Высокая корреляция (0.22) между столбцами 'Ram' и 'External_Memory'\n",
"Просачивание данных: Высокая корреляция (-0.22) между столбцами 'Ram' и 'Android_version'\n",
"Просачивание данных: Высокая корреляция (-0.36) между столбцами 'Ram' и 'Inbuilt_memory'\n",
"Просачивание данных: Высокая корреляция (-0.23) между столбцами 'Ram' и 'Screen_resolution'\n",
"Просачивание данных: Высокая корреляция (0.23) между столбцами 'Battery' и 'Display'\n",
"Просачивание данных: Высокая корреляция (0.23) между столбцами 'Battery' и 'External_Memory'\n",
"Просачивание данных: Высокая корреляция (0.49) между столбцами 'Display' и 'Spec_score'\n",
"Просачивание данных: Высокая корреляция (-0.26) между столбцами 'Display' и 'No_of_sim'\n",
"Просачивание данных: Высокая корреляция (-0.26) между столбцами 'Display' и 'Ram'\n",
"Просачивание данных: Высокая корреляция (0.23) между столбцами 'Display' и 'Battery'\n",
"Просачивание данных: Высокая корреляция (0.24) между столбцами 'Display' и 'Camera'\n",
"Просачивание данных: Высокая корреляция (-0.45) между столбцами 'Display' и 'External_Memory'\n",
"Просачивание данных: Высокая корреляция (0.21) между столбцами 'Display' и 'Android_version'\n",
"Просачивание данных: Высокая корреляция (0.22) между столбцами 'Camera' и 'Spec_score'\n",
"Просачивание данных: Высокая корреляция (0.24) между столбцами 'Camera' и 'Display'\n",
"Просачивание данных: Высокая корреляция (-0.34) между столбцами 'Camera' и 'External_Memory'\n",
"Просачивание данных: Высокая корреляция (-0.46) между столбцами 'External_Memory' и 'Spec_score'\n",
"Просачивание данных: Высокая корреляция (0.20) между столбцами 'External_Memory' и 'No_of_sim'\n",
"Просачивание данных: Высокая корреляция (0.22) между столбцами 'External_Memory' и 'Ram'\n",
"Просачивание данных: Высокая корреляция (0.23) между столбцами 'External_Memory' и 'Battery'\n",
"Просачивание данных: Высокая корреляция (-0.45) между столбцами 'External_Memory' и 'Display'\n",
"Просачивание данных: Высокая корреляция (-0.34) между столбцами 'External_Memory' и 'Camera'\n",
"Просачивание данных: Высокая корреляция (-0.63) между столбцами 'External_Memory' и 'Android_version'\n",
"Просачивание данных: Высокая корреляция (-0.21) между столбцами 'External_Memory' и 'Processor_name'\n",
"Просачивание данных: Высокая корреляция (-0.21) между столбцами 'Android_version' и 'Name'\n",
"Просачивание данных: Высокая корреляция (0.35) между столбцами 'Android_version' и 'Spec_score'\n",
"Просачивание данных: Высокая корреляция (-0.22) между столбцами 'Android_version' и 'No_of_sim'\n",
"Просачивание данных: Высокая корреляция (-0.22) между столбцами 'Android_version' и 'Ram'\n",
"Просачивание данных: Высокая корреляция (0.21) между столбцами 'Android_version' и 'Display'\n",
"Просачивание данных: Высокая корреляция (-0.63) между столбцами 'Android_version' и 'External_Memory'\n",
"Просачивание данных: Высокая корреляция (0.21) между столбцами 'Android_version' и 'Price'\n",
"Просачивание данных: Высокая корреляция (-0.24) между столбцами 'Android_version' и 'company'\n",
"Просачивание данных: Высокая корреляция (0.21) между столбцами 'Price' и 'Android_version'\n",
"Просачивание данных: Высокая корреляция (-0.30) между столбцами 'company' и 'id'\n",
"Просачивание данных: Высокая корреляция (0.96) между столбцами 'company' и 'Name'\n",
"Просачивание данных: Высокая корреляция (-0.24) между столбцами 'company' и 'Android_version'\n",
"Просачивание данных: Высокая корреляция (-0.27) между столбцами 'Inbuilt_memory' и 'Spec_score'\n",
"Просачивание данных: Высокая корреляция (0.26) между столбцами 'Inbuilt_memory' и 'No_of_sim'\n",
"Просачивание данных: Высокая корреляция (-0.36) между столбцами 'Inbuilt_memory' и 'Ram'\n",
"Просачивание данных: Высокая корреляция (0.29) между столбцами 'Inbuilt_memory' и 'Screen_resolution'\n",
"Просачивание данных: Высокая корреляция (-0.47) между столбцами 'Screen_resolution' и 'Spec_score'\n",
"Просачивание данных: Высокая корреляция (0.30) между столбцами 'Screen_resolution' и 'No_of_sim'\n",
"Просачивание данных: Высокая корреляция (-0.23) между столбцами 'Screen_resolution' и 'Ram'\n",
"Просачивание данных: Высокая корреляция (0.29) между столбцами 'Screen_resolution' и 'Inbuilt_memory'\n",
"Просачивание данных: Высокая корреляция (-0.21) между столбцами 'Processor_name' и 'External_Memory'\n",
"@data Ram Price company\n",
"0 10 442 19\n",
"1 6 440 19\n",
"2 10 79 19\n",
"3 10 79 19\n",
"4 10 79 19\n",
"... ... ... ...\n",
"1365 10 158 20\n",
"1366 14 207 20\n",
"1367 12 199 20\n",
"1368 12 189 20\n",
"1369 2 18 20\n",
"\n",
"[1370 rows x 3 columns]\n",
"Обучающая выборка: (819, 3)\n",
"Ram\n",
"14 327\n",
"10 151\n",
"2 151\n",
"12 115\n",
"9 25\n",
"4 20\n",
"6 14\n",
"3 5\n",
"5 4\n",
"8 4\n",
"11 2\n",
"15 1\n",
"Name: count, dtype: int64\n",
"Контрольная выборка: (273, 3)\n",
"Ram\n",
"14 98\n",
"10 56\n",
"12 49\n",
"2 43\n",
"4 10\n",
"9 8\n",
"6 4\n",
"11 1\n",
"8 1\n",
"1 1\n",
"7 1\n",
"13 1\n",
"Name: count, dtype: int64\n",
"Тестовая выборка: (273, 3)\n",
"Ram\n",
"14 101\n",
"2 52\n",
"12 49\n",
"10 45\n",
"4 11\n",
"9 5\n",
"6 3\n",
"8 3\n",
"3 2\n",
"7 1\n",
"0 1\n",
"Name: count, dtype: int64\n"
]
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn.feature_selection import mutual_info_regression\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import LabelEncoder\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"df = pd.read_csv(\"data/mobile_prices.csv\")\n",
"print(df.columns)\n",
"\n",
"# Кодируем все строковые столбцы в числовые\n",
"label_encoders = {}\n",
"for col in df.select_dtypes(include=[\"object\"]).columns:\n",
" le = LabelEncoder()\n",
" df[col] = le.fit_transform(df[col])\n",
" label_encoders[col] = le\n",
"\n",
"# Проверка на пропуски и \"зашумленные\" столбцы\n",
"noisy_features = []\n",
"for col in df.columns:\n",
" if df[col].isnull().sum() / len(df) > 0.1: # Если более 10% пропусков\n",
" noisy_features.append(col)\n",
"print(f\"Зашумленные столбцы: {noisy_features}\")\n",
"\n",
"# Проверка на смещение\n",
"skewness = df.skew()\n",
"print(f\"Смещение: {skewness}\")\n",
"\n",
"skewed_features = skewness[abs(skewness) > 1].index.tolist()\n",
"print(f\"Сильно смещенные столбцы: {skewed_features}\")\n",
"\n",
"# Поиск выбросов\n",
"for col in df.select_dtypes(include=[\"number\"]).columns:\n",
" Q1 = df[col].quantile(0.25)\n",
" Q3 = df[col].quantile(0.75)\n",
" IQR = Q3 - Q1\n",
" lower_bound = Q1 - 1.5 * IQR\n",
" upper_bound = Q3 + 1.5 * IQR\n",
" outliers = df[col][(df[col] < lower_bound) | (df[col] > upper_bound)]\n",
" print(f\"Выбросы в столбце '{col}':\\n{outliers}\\n\")\n",
"\n",
"# Визуализация выбросов\n",
"numeric_cols = df.select_dtypes(include=[\"number\"]).columns\n",
"\n",
"plt.figure(figsize=(12, 8))\n",
"for i, col in enumerate(numeric_cols, 1):\n",
" plt.subplot(len(numeric_cols) // 3 + 1, 3, i)\n",
" sns.boxplot(data=df, x=col)\n",
" plt.title(f\"Boxplot for {col}\")\n",
"plt.tight_layout()\n",
"plt.show()\n",
"\n",
"if len(df.columns) >= 2:\n",
" for col1 in df.columns:\n",
" for col2 in df.columns:\n",
" if col1 != col2:\n",
" correlation = df[col1].corr(df[col2])\n",
" if abs(correlation) > 0.2:\n",
" print(f\"Просачивание данных: Высокая корреляция ({correlation:.2f}) между столбцами '{col1}' и '{col2}'\")\n",
"\n",
"# Логарифмирование признака 'Battery'\n",
"df[\"log_Battery\"] = np.log(df[\"Battery\"] + 1)\n",
"\n",
"# Заполнение пропусков\n",
"df[\"Battery\"] = df[\"Battery\"].fillna(df[\"Battery\"].mean())\n",
"\n",
"\n",
"# Функция для разбиения на train/val/test\n",
"def split_stratified_into_train_val_test(\n",
" df_input,\n",
" stratify_colname=\"y\",\n",
" frac_train=0.6,\n",
" frac_val=0.15,\n",
" frac_test=0.25,\n",
" random_state=None,\n",
"):\n",
" if frac_train + frac_val + frac_test != 1.0:\n",
" raise ValueError(\n",
" \"fractions %f, %f, %f do not add up to 1.0\"\n",
" % (frac_train, frac_val, frac_test)\n",
" )\n",
"\n",
" if stratify_colname not in df_input.columns:\n",
" raise ValueError(\"%s is not a column in the dataframe\" % (stratify_colname))\n",
"\n",
" X = df_input\n",
" y = df_input[[stratify_colname]]\n",
"\n",
" df_train, df_temp, y_train, y_temp = train_test_split(\n",
" X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n",
" )\n",
" relative_frac_test = frac_test / (frac_val + frac_test)\n",
" df_val, df_test, y_val, y_test = train_test_split(\n",
" df_temp,\n",
" y_temp,\n",
" stratify=y_temp,\n",
" test_size=relative_frac_test,\n",
" random_state=random_state,\n",
" )\n",
"\n",
" assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n",
"\n",
" return df_train, df_val, df_test\n",
"\n",
"\n",
"# Разбиение на train/val/test\n",
"data = df[[\"Ram\", \"Price\", \"company\"]].copy()\n",
"\n",
"print(\"@data\", data)\n",
"\n",
"data = data.groupby(\"company\").filter(\n",
" lambda x: len(x) > 4\n",
") # убираем классы с одним элементом\n",
"\n",
"df_train, df_val, df_test = split_stratified_into_train_val_test(\n",
" data, stratify_colname=\"company\", frac_train=0.60, frac_val=0.20, frac_test=0.20\n",
")\n",
"\n",
"print(\"Обучающая выборка: \", df_train.shape)\n",
"print(df_train[\"Ram\"].value_counts())\n",
"\n",
"print(\"Контрольная выборка: \", df_val.shape)\n",
"print(df_val[\"Ram\"].value_counts())\n",
"\n",
"print(\"Тестовая выборка: \", df_test.shape)\n",
"print(df_test[\"Ram\"].value_counts())"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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
}