Полное руководство по линейной регрессии в 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: Нормальность остатков.
- Визуально проверьте это предположение, используя график QQ .
- Проверьте эту гипотезу с помощью формальных тестов, таких как тест Жара-Бера или тест Андерсона-Дарлинга .
Допущение №5: Убедитесь, что между переменными-предикторами нет мультиколлинеарности.
- Проверьте эту гипотезу, рассчитав значение VIF каждой переменной-предиктора.
Если эти предположения выполняются, вы можете быть уверены, что результаты вашей модели множественной линейной регрессии надежны.
Полный код Python, используемый в этом уроке, вы можете найти здесь .