Полное руководство по линейной регрессии в python


Линейная регрессия — это метод, который мы можем использовать, чтобы понять взаимосвязь между одной или несколькими переменными-предикторами и переменной отклика.

В этом руководстве объясняется, как выполнить линейную регрессию в Python.

Пример: линейная регрессия в Python

Предположим, мы хотим знать, влияет ли количество часов, потраченных на обучение, и количество сданных практических экзаменов на оценку, которую студент получает на данном экзамене.

Чтобы изучить эту взаимосвязь, мы можем выполнить в Python следующие шаги для выполнения множественной линейной регрессии.

Шаг 1: Введите данные.

Сначала мы создадим DataFrame pandas для хранения нашего набора данных:

 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, используемый в этом уроке, вы можете найти здесь .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *