Как проверить нормальность распределения остактов и дисперсию остатков для модели sklearn.linear_model?
Имеются следующие данные:
date_trunc mentor mentee
0 2021-02-01 3 3
1 2021-03-01 3 3
2 2021-04-01 7 7
3 2021-05-01 18 19
4 2021-06-01 24 27
5 2021-07-01 37 35
6 2021-08-01 53 56
7 2021-09-01 63 70
8 2021-10-01 86 89
9 2021-11-01 102 114
10 2021-12-01 135 149
11 2022-01-01 154 169
12 2022-02-01 174 202
13 2022-03-01 232 287
14 2022-04-01 298 386
15 2022-05-01 343 475
16 2022-06-01 384 552
17 2022-07-01 446 684
18 2022-08-01 509 883
19 2022-09-01 469 757
Я использую следующие библиотеки:
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
Код для построения линейной регрессии:
# подготовка данных
x = df['mentee'].to_numpy().reshape(-1, 1)
y = df['mentor'].to_numpy()
# разделение данных на тренировочные и тестовые
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
# обучение модели и прогнозирование
model = LinearRegression().fit(x_train, y_train)
y_pred = model.predict(x_test)
# проверка модели
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
print('mse: %.3f, sqrt(mse): %.3f, mae: %.3f' % (mse, np.sqrt(mse), mae))
print("Coefficients: \n", model.coef_)
print('Independent: \n', model.intercept_)
Мне осталось только проверить нормальность распределения остатков и однородность дисперсии остатков. Как это сделать?
Ответы (1 шт):
Нормальность распределения остатков проверяется любым алгоритмом проверки на нормальность. Например, реализованными в scipy.stats критерием Колмогорова-Смирнова, критерием хи-квадрат Пирсона, критерием Крамера-фон Мизеса, критерем Харке-Берра, критерием д'Агустинио, специализированным критерием Шапиро-Уилка.
Однородность дисперсии остатков Проверяется любым параметрическим или непараметрическим критерием сравнения дисперсии с заданным значением. Начиная от критерия ранговой корреляции Спирмана, критерия Ансари-Бредли, критерия Барлета, критерия Левене.
Крое того, существуют и другие тесты, не реализованные в scipy.stats, но реализовать которые достаточно просто.
А еще часто используют критерий Дарбина—Уотсона, реализованный в statsmodels для анализа наличия автокорреляции в остатках, что есть признаком зависимости (а следовательно и неоднородности) остатков.
Как видите, вариантов много, выбирайте.