{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"\n",
"# Домашка №5: регрессия\n",
"\n",
"Давайте выясним, как профиль вк помогает нам предугадывать число лайков студента первого курса в вышкинском паблике с мемасами.\n",
"\n",
"По ходу кода ниже будет довольно много пустых строк. Нужно заполнить их своим кодом."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd # уже знакомый вам пакет для работы с таблицами\n",
"import numpy as np # смутно знакомый вам пакет для работы с матрицами\n",
"import matplotlib.pyplot as plt # уже смутно знакомый вам пакет для картинок :3\n",
"import seaborn as sns # ещё один пакет для картинок \n",
"plt.style.use('ggplot') # правильный (очень красивый) стиль у графиков\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Полезная функция для визуализации результатов модели."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# Функция для визуализации прогнозов \n",
"\n",
"def plot_yreal_ypred(y_test, y_train, X_test, X_train, model, margin=0.3):\n",
" \"\"\"\n",
" Рисует картинку для прогнозов\n",
" modelt - модель \n",
" y_train, X_train - обучающая выборка\n",
" y_test, X_test - тестовая выборка\n",
" margin - граница рисунка \n",
" \"\"\"\n",
" \n",
" plt.figure(figsize=(16,7))\n",
" plt.subplot(121)\n",
" plt.scatter(y_train, model.predict(X_train), color=\"red\", alpha=1)\n",
" plt.xlim(min(y_train) - margin, max(y_train) + margin)\n",
" plt.ylim(min(y_train) - margin, max(y_train) + margin)\n",
" plt.title('Train set', fontsize=20)\n",
" plt.xlabel('y', fontsize=14)\n",
" plt.ylabel('Estimated y', fontsize=14)\n",
"\n",
" plt.subplot(122)\n",
" plt.scatter(y_test, model.predict(X_test), color=\"red\", alpha=1)\n",
" plt.xlim(min(y_test) - margin, max(y_test) + margin)\n",
" plt.ylim(min(y_test) - margin, max(y_test) + margin)\n",
" plt.title('Test set', fontsize=20)\n",
" plt.xlabel('y', fontsize=14)\n",
" plt.ylabel('Estimated y', fontsize=14)\n",
" pass"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"На семинаре мы разобрали пример с рейтингами видеоконтента. Давайте вспомним, какие шаги мы проходили:\n",
"\n",
"1. Обрабатываем данные\n",
"2. Строим константный прогноз\n",
"3. Строим линейную регрессию c MSE в качестве функции ошибки\n",
"4. Находим лучшие гиперпараметры по сетке и строим случайный лес\n",
"5. Сравниваем качество прогнозов и делаем выводы\n",
"\n",
"\n",
"Подгружаем данные."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Размерность таблицы: (425, 98)\n"
]
},
{
"data": {
"text/html": [
"
| \n", " | city | \n", "country | \n", "first_name | \n", "home_town | \n", "in_hse_memes_group | \n", "is_bmm | \n", "is_closed | \n", "last_name | \n", "likes_memes | \n", "uid | \n", "... | \n", "photo_month_mean | \n", "photo_repost_cnt | \n", "photo_repost_max | \n", "photo_repost_mean | \n", "photo_repost_median | \n", "photo_text_len_cnt | \n", "photo_ava_change_cnt | \n", "photo_text_url_len_cnt | \n", "friends_from_course_cnt | \n", "friends_mail_from_course_pct | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "Москва | \n", "Россия | \n", "Александра | \n", "Москва | \n", "True | \n", "True | \n", "False | \n", "Абашкова | \n", "60.0 | \n", "182152789 | \n", "... | \n", "1.333333 | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "42.0 | \n", "0.428571 | \n", "
| 1 | \n", "Рязань | \n", "Россия | \n", "Анастасия | \n", "Рязань | \n", "True | \n", "True | \n", "False | \n", "Чуфистова | \n", "0.0 | \n", "148020433 | \n", "... | \n", "2.375000 | \n", "2.0 | \n", "1.0 | \n", "0.105263 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "32.0 | \n", "0.281250 | \n", "
| 2 | \n", "Москва | \n", "Россия | \n", "Александр | \n", "Омск | \n", "False | \n", "True | \n", "False | \n", "Головачев | \n", "0.0 | \n", "138413935 | \n", "... | \n", "1.400000 | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "32.0 | \n", "0.406250 | \n", "
| 3 | \n", "NaN | \n", "NaN | \n", "Анна | \n", "NaN | \n", "False | \n", "True | \n", "False | \n", "Лобанова | \n", "0.0 | \n", "366261055 | \n", "... | \n", "4.166667 | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "45.0 | \n", "0.333333 | \n", "
| 4 | \n", "NaN | \n", "Россия | \n", "Алексей | \n", "NaN | \n", "True | \n", "True | \n", "False | \n", "Пузырный | \n", "21.0 | \n", "111252392 | \n", "... | \n", "3.181818 | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "41.0 | \n", "0.341463 | \n", "
5 rows × 98 columns
\n", "| \n", " | country | \n", "first_name | \n", "in_hse_memes_group | \n", "is_bmm | \n", "is_closed | \n", "last_name | \n", "likes_memes | \n", "uid | \n", "male_dummy | \n", "facebook_dummy | \n", "... | \n", "photo_repost_cnt | \n", "photo_repost_max | \n", "photo_repost_mean | \n", "photo_repost_median | \n", "photo_text_len_cnt | \n", "photo_ava_change_cnt | \n", "photo_text_url_len_cnt | \n", "friends_from_course_cnt | \n", "friends_mail_from_course_pct | \n", "ln_likes_memes | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "Россия | \n", "Александра | \n", "True | \n", "True | \n", "False | \n", "Абашкова | \n", "60.0 | \n", "182152789 | \n", "0 | \n", "0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "3.761200 | \n", "0.428571 | \n", "4.110874 | \n", "
| 1 | \n", "Россия | \n", "Анастасия | \n", "True | \n", "True | \n", "False | \n", "Чуфистова | \n", "0.0 | \n", "148020433 | \n", "0 | \n", "0 | \n", "... | \n", "2.0 | \n", "1.0 | \n", "0.105263 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "3.496508 | \n", "0.281250 | \n", "0.000000 | \n", "
| 2 | \n", "Россия | \n", "Александр | \n", "False | \n", "True | \n", "False | \n", "Головачев | \n", "0.0 | \n", "138413935 | \n", "1 | \n", "0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "3.496508 | \n", "0.406250 | \n", "0.000000 | \n", "
| 3 | \n", "NaN | \n", "Анна | \n", "False | \n", "True | \n", "False | \n", "Лобанова | \n", "0.0 | \n", "366261055 | \n", "0 | \n", "0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "3.828641 | \n", "0.333333 | \n", "0.000000 | \n", "
| 4 | \n", "Россия | \n", "Алексей | \n", "True | \n", "True | \n", "False | \n", "Пузырный | \n", "21.0 | \n", "111252392 | \n", "1 | \n", "0 | \n", "... | \n", "0.0 | \n", "0.0 | \n", "0.000000 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "3.737670 | \n", "0.341463 | \n", "3.091042 | \n", "
5 rows × 83 columns
\n", "