Повний посібник із лінійної регресії в python


Лінійна регресія – це метод, який ми можемо використати для розуміння зв’язку між однією або декількома змінними предиктора та змінною відповіді.

Цей посібник пояснює, як виконувати лінійну регресію в Python.

Приклад: лінійна регресія в Python

Припустімо, ми хочемо знати, чи впливає кількість годин, витрачених на навчання, і кількість складених практичних іспитів на оцінку, яку студент отримує на даному іспиті.

Щоб дослідити цей зв’язок, ми можемо виконати наступні кроки в Python для виконання множинної лінійної регресії.

Крок 1: Введіть дані.

Спочатку ми створимо pandas DataFrame для зберігання нашого набору даних:

 import pandas as pd

#create data
df = pd.DataFrame({'hours': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4, 3, 6, 5, 3, 4, 6, 2, 1, 2],
                   'exams': [1, 3, 3, 5, 2, 2, 1, 1, 0, 3, 4, 3, 2, 4, 4, 4, 5, 1, 0, 1],
                   'score': [76, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90, 75, 96, 90, 82, 85, 99, 83, 62, 76]})

#view data 
df

        hours exam score
0 1 1 76
1 2 3 78
2 2 3 85
3 4 5 88
4 2 2 72
5 1 2 69
6 5 1 94
7 4 1 94
8 2 0 88
9 4 3 92
10 4 4 90
11 3 3 75
12 6 2 96
13 5 4 90
14 3 4 82
15 4 4 85
16 6 5 99
17 2 1 83
18 1 0 62
19 2 1 76

Крок 2: Виконайте лінійну регресію.

Далі ми використаємо функцію OLS() із бібліотеки statsmodels, щоб виконати звичайну регресію методом найменших квадратів, використовуючи «години» та «іспити» як змінні прогностики та «оцінку» як змінну відповіді:

 import statsmodels.api as sm

#define response variable
y = df['score']

#define predictor variables
x = df[['hours', 'exams']]

#add constant to predictor variables
x = sm.add_constant(x)

#fit linear regression model
model = sm.OLS(y, x).fit()

#view model summary
print(model.summary())

                            OLS Regression Results                            
==================================================== ============================
Dept. Variable: R-squared score: 0.734
Model: OLS Adj. R-squared: 0.703
Method: Least Squares F-statistic: 23.46
Date: Fri, 24 Jul 2020 Prob (F-statistic): 1.29e-05
Time: 13:20:31 Log-Likelihood: -60.354
No. Observations: 20 AIC: 126.7
Df Residuals: 17 BIC: 129.7
Df Model: 2                                         
Covariance Type: non-robust                                         
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 67.6735 2.816 24.033 0.000 61.733 73.614
hours 5.5557 0.899 6.179 0.000 3.659 7.453
exams -0.6017 0.914 -0.658 0.519 -2.531 1.327
==================================================== ============================
Omnibus: 0.341 Durbin-Watson: 1.506
Prob(Omnibus): 0.843 Jarque-Bera (JB): 0.196
Skew: -0.216 Prob(JB): 0.907
Kurtosis: 2,782 Cond. No. 10.8
==================================================== ============================

Крок 3: Інтерпретація результатів.

Ось як інтерпретувати найбільш відповідні числа в результаті:

R у квадраті: 0,734 . Це називається коефіцієнтом детермінації. Це частка дисперсії у змінній відповіді, яку можна пояснити змінними предиктора. У цьому прикладі 73,4% розбіжностей в результатах іспитів пояснюється кількістю вивчених годин і кількістю складених підготовчих іспитів.

F-статистика: 23,46 . Це загальна F-статистика регресійної моделі.

Вірогідність (F-статистика): 1.29e-05. Це p-значення, пов’язане із загальною статистикою F. Це говорить нам про те, чи є модель регресії в цілому статистично значущою чи ні. Іншими словами, це повідомляє нам, чи мають об’єднані дві прогностичні змінні статистично значущий зв’язок зі змінною відповіді. У цьому випадку p-значення менше 0,05, що вказує на те, що змінні-прогнози «навчальні години» та «здані підготовчі іспити» разом мають статистично значущий зв’язок із оцінкою за іспит.

coef: Коефіцієнти кожної змінної предиктора говорять нам про очікувану середню зміну змінної відповіді, припускаючи, що інша змінна предиктора залишається постійною. Наприклад, за кожну додаткову годину, витрачену на навчання, очікується, що середній бал іспиту збільшиться на 5,56 , припускаючи, що складені практичні іспити залишаються незмінними.

Ось інший спосіб поглянути на це: якщо учень А та учень Б складають однакову кількість підготовчих іспитів, але учень А навчається на годину довше, тоді учень А має набрати на 5,56 бала більше, ніж учень Б.

Ми інтерпретуємо коефіцієнт перехоплення так, що очікуваний іспитовий бал для студента, який навчається без годин і не складає підготовчих іспитів, становить 67,67 .

P>|t|. Індивідуальні p-значення говорять нам, чи кожна змінна предиктора є статистично значущою чи ні. Ми бачимо, що «години» є статистично значущими (p = 0,00), тоді як «іспити»   (p = 0,52) не є статистично значущим при α = 0,05. Оскільки термін «іспити» не є статистично значущим, ми можемо вирішити видалити його з моделі.

Розрахункове рівняння регресії: ми можемо використати коефіцієнти з вихідних даних моделі, щоб створити наступне оцінюване рівняння регресії:

екзаменаційний бал = 67,67 + 5,56*(години) – 0,60*(підготовчі іспити)

Ми можемо використати це розраховане рівняння регресії, щоб обчислити очікуваний іспитовий бал для студента на основі кількості годин навчання та кількості практичних іспитів, які він складає. Наприклад, студент, який займається три години і складає підготовчий іспит, повинен отримати оцінку 83,75 :

Майте на увазі, що оскільки минулі підготовчі іспити не були статистично значущими (p = 0,52), ми можемо вирішити видалити їх, оскільки вони не покращують загальну модель. У цьому випадку ми могли б виконати просту лінійну регресію, використовуючи лише досліджувані години як змінну предиктора.

Крок 4: Перевірте припущення моделі.

Виконавши лінійну регресію, ви можете перевірити кілька припущень, щоб переконатися, що результати регресійної моделі надійні. Ці припущення включають:

Припущення №1: існує лінійний зв’язок між змінними прогнозу та змінною відповіді.

  • Перевірте це припущення, створивши графік залишків , який відображає підігнані значення проти залишків для моделі регресії.

Гіпотеза №2: Незалежність залишків.

Гіпотеза №3: гомоскедастичність залишків.

Припущення № 4: Нормальність залишків.

Припущення №5: перевірте, чи немає мультиколінеарності серед змінних предиктора.

  • Перевірте цю гіпотезу, обчисливши значення VIF кожної змінної предиктора.

Якщо ці припущення виконуються, ви можете бути впевнені, що результати вашої моделі множинної лінійної регресії надійні.

Ви можете знайти повний код Python, використаний у цьому посібнику, тут .

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *