Узнал я о линейной регрессии после того, как встретил деревья, нейронные сети. Когда мы с другом повторно изобретали велосипед, обучая с нуля word2vec и использовали логистическую регрессию с векторами из обученной модели для задачи NER – я активно кричал о том, что линейная регрессия – прошлый век, никому она уже совсем не нужна.
Да, проблема была в том, что я совсем не разобрался в вопросе и полез в бой. Но практику в универе нужно было как-то закрывать.
После семестра мат. статистики ко мне пришло прозрение.
В статье мы попробуем применить линейную регрессию к классическим данным с помощью statsmodels и посмотреть на все значения summary. Стоит упомянуть, что линейная регрессия из sklearn ничем не хуже, но в statsmodels есть функция summary, где уже посчитаны все необходимые коэффициенты для диагностики.
Statsmodels – это библиотека Python, которая предоставляет возможность оценить множество различных моделей, а также провести статистические тесты и исследования данных.
Небольшие пояснения
Остатки - это то же самое, что и ошибка, т.е. отклонение предсказания от истинного значения. В статьях приведен термин remains.
В тексте может встречаться цифра из списка (в круглых скобках), представленного ниже. Таким образом я отсылаю к источнику. Там вы найдете интересующую вас информацию, которая по тем или иным причинам не приведена здесь.
Это в основном является переводом статьи (в источниках вторая ссылка) с небольшими пояснениями.
Источники
Оригинальные статьи/справочники, которые очень помогли мне разобраться с вопросом.
https://medium.com/swlh/interpreting-linear-regression-through-statsmodels-summary-4796d359035a – кратко расшифровывает summary.
http://work.thaslwanter.at/Stats/html/statsModels.html – глубоко описывает summary.
https://stepik.org/course/76/syllabus – отличный курс по основам математической статистики, брал информацию по условиям применения линейной регрессии.
https://gallery.shinyapps.io/slr_diag/ – посмотреть на поведение ошибки в зависимости от характера данных.
https://www.statsmodels.org/0.6.1/examples/notebooks/generated/ols.html – пример применения OLS из документации statsmodels (в частности там есть про мультиколлинеарность, как оно влияет на число обусловленности).
https://towardsdatascience.com/simple-explanation-of-statsmodel-linear-regression-model-summary-35961919868b#:~:text=Covariance%20type%20is%20typically%20nonrobust,with%20respect%20to%20each%20other – отсюда виды covariance type в statsmodels.
https://www.lib.tsu.ru/mminfo/2016/Dombrovski/book/chapter-3/chapter-3-3.htm – отсюда взял пояснения по ковариационной матрице параметров.
http://math-info.hse.ru/math-ml/chapter/label/chap:6:linear-reg2/#label_subsection_number_5_3_2 – отсюда взял пояснения по ковариации признаков линейной регрессии (здесь в целом пояснение про ковариационную матрицу).
https://cran.r-project.org/web/packages/HistData/HistData.pdf – описание используемого датасета Guerry можно найти здесь.
Используемый датасет
Используется классический датасет Guerry (9). В данном случае мы будем использовать переменные Region, Literacy, Wealth для предсказания зависимой переменной Lottery.
import statsmodels.formula.api as smf
import statsmodels.api as sm
df = sm.datasets.get_rdataset("Guerry", "HistData").data
model = smf.ols(formula='Lottery ~ Literacy + Wealth + Region', data=df).fit()
print(model.summary())
Про загадочное 'Lottery ~ Literacy + Wealth + Region'
и как это может угрожать вашему психическому здоровью можно почитать здесь https://patsy.readthedocs.io/en/latest/formulas.html.
Графики зависимостей предикторов от Lottery:
Условия применения регрессии (2)
Слабая экзогенность. Т.е. переменная является фиксированным значением, а не случайной величиной и не подвергнута ошибкам измерения.
Линейность признаков к зависимой переменной. Это не такое сильное условие, учитывая, что мы можем преобразовывать и/или комбинировать наши фичи.
Гомоскедастичность. Разные ответы модели выдают одну и ту же ошибку из нормального распределения, с центром в 0. Часто в практике она гетероскедастична.
Небольшие пояснения
Под ‘разными ответами модели’ имеется ввиду ее отклик на разные данные. Игрушечный пример: представим себе линейную регрессию с одним признаком для описания квадратичной зависимости.
Нетрудно заметить, что чем больше значение признака, тем больше будет ошибка. Она будет выглядеть ожидаемо плохо:
Это говорит о том, что ошибка гетероскедастична.
Независимость ошибок.
В данном случае предполагается, что два вектора ошибки, где один из них смещен на один элемент влево, не коррелируют друг с другом. Это требование проверяется с помощью критерия Durbin-Watson.
Отсутствие мультиколлинеарности в предикторах.
Мультиколлинеарность - термин для описания двух или более независимых переменных, которые сильно связаны друг с другом и плохо влияют на наш таргет из-за избыточности. Вследствие мультиколлинеарности признаков число обусловленности сильно возрастает.
Если требования 2, 3, 4 не выполнены, то применение линейной регрессии не оправдано (скорее всего, зависимость нелинейная) (3). Также вполне вероятен случай, когда на одном отрезке модель объясняет данные хорошо, а на остальных модель не работает. В случае невыполнения 5-го пункта можно, например, применить регуляризацию.
Summary в statsmodels можно разделить на четыре части - описание данных и модели, результаты модели (насколько хорошо модель описывает данные), коэффициенты модели, анализ остатков.
Описание данных и модели
Dep. Variable - имя зависимой переменной.
Model - вид обученной модели.
Method - используемый метод обучения.
Date, Time - дата обучения
No. Observations - количество наблюдений в выборке (n).
Df Residuals - степень свободы (количество наблюдений (n) - количество переменных (k) - 1).
Df Model - количество переменных (регрессоров) (k).
Covariance Type - по умолчанию используется ковариация, которая неустойчива к гетероскедастичности ошибки. Чтобы воспользоваться устойчивой версией, необходимо передать cov_type=HC0/HC1/HC2/HC3 (6). Используется для построения матрицы ковариации параметров модели (чтобы её посмотреть, можно вызвать функцию .cov_params()). На диагонали матриц будет стоять дисперсия оценок коэффициентов, а числа вне главной диагонали равна их ковариациям (7). С помощью этой матрицы мы можем сделать вывод о линейной зависимости коэффициентов регрессии друг от друга (8).
Результаты модели (2)
R-squared - сколько процентов дисперсии зависимой переменной объяснено вариацией признаков.
где:
— предсказание нашей модели, — это среднее по нашему таргету, — наш таргет.
Adj. R-squared - та же метрика, но со штрафом за большое количество зависимых переменных. При добавлении новых признаков значение R-Squared будет таким же или расти, даже если они совсем не влияют на результат. Данная метрика штрафует за использование каждого дополнительного признака в модели.
F-statistic - критерий Фишера - статистика, значение которой необходимо для проверки гипотезы о равенстве дисперсий. В данном случае сравнивается модель с нулевыми параметрами (кроме интерсепта) с текущей.
где
Prob. (F-statistic) - вероятность того, что коэффициенты при всех переменных равны нулю (кроме интерсепта).
Log-likelihood - насколько хорошо данные описываются моделью. Википедия говорит:
Важно понимать, что по абсолютному значению правдоподобия нельзя делать никаких вероятностных суждений. Правдоподобие позволяет сравнить несколько вероятностных распределений с разными параметрами и оценить в контексте какого из них наблюдаемые события наиболее вероятны.
То есть абсолютные значения можно сравнивать между моделями. Мы функцию максимизируем - значит чем больше значение, тем лучше модель описывает данные.
- функция распределения вероятностей стандартного нормального распределения.
AIC BIC - используется для сравнения моделей. Как таковое значение не несёт в себе никакой информации, его можно использовать как критерий для отбора модели, который определяет на сколько сильно модель переобучена. Чем меньше значение - тем лучше модель. BIC отличается от AIC тем, что он больше штрафует за дополнительные (и не влияющие ни на что) параметры модели.
- значение функции правдоподобия (likelihood), — количество наблюдений, —количество параметров (предикторов).
Коэффициенты модели (2)
Intercept - все переменные обнуляются и подбирается константа, наилучшим образом описывающая данные.
Все коэффициенты можно вычислить по формуле:
где — параметры модели, — матрица признаков, — наш таргет.
Здесь Region была строкой - её statsmodel представил с помощью one hot encoding
Коэффициент - если отрицательный, то при росте переменной таргет уменьшается.
std err - дисперсия коэффициента по точкам данных.
Вычисляется с помощью матрицы ковариаций по параметрам модели:
где — среднеквадратичная ошибка (MSE) остатков. Дисперсия каждого из коэффициентов будет стоять на диагонали данной матрицы.
t - статистика t-Стьюдента, чем больше — тем лучше измерен коэффициент (чем меньше стандартное отклонение, тем лучше коэффициент описывает зависимость). Обычно t-критерий позволяет нам оценить важность различных предикторов, предполагая, что остатки модели нормально распределены около нуля. Если остатки не ведут себя таким образом, то это говорит о наличии некоторой нелинейности между переменными и о том, что их t-тесты не следует использовать для оценки важности отдельных предикторов.
Рассчитывается следующим образом:
— std err -го коэффициента.
P>|t| - если < 0.05, то гипотеза о значимости коэффициента принимается. Например, переменная Literacy не влияет на зависимую переменную Loterry с вероятностью 37.8% и наши результаты получены случайно.
Доверительные интервалы коэффициента. Меньший доверительный интервал предполагает, что мы уверены в значении оцениваемого коэффициента или постоянного члена. И наоборот.
В данном случае показываются значения, при которых гипотеза о значимости коэффициента не будет отвергнута.
Рассчитывается следующим образом:
где — std err i-го коэффициента, — критическое значение t-Стьюдента, перед или после которого гипотеза отвергается (при заданном уровне значимости (обычно 5%).
Анализ остатков (2)
Omnibus описывает нормальность распределения наших остатков (остатки необъяснённой дисперсии), используя в качестве измерений перекос (skew) (коэффициент симметрии распределения) и эксцесс (kurtosis) (мера остроты случайной величины в горбу). 0 означает полную нормальность.
Prob (Omnibus) - это статистический тест, измеряющий вероятность нормального распределения остатков. Значение 1 означает совершенно нормальное распределение.
Skew (Перекос) - это мера симметрии распределения остатков, где 0 означает идеальную симметрию.
Рассчитывается следующим образом:
Kurtosis (Эксцесс) - измеряет остроту распределения остатков (в горбу) или его концентрацию около 0 на нормальной кривой. Более высокий эксцесс означает меньшее количество выбросов.
Рассчитывается следующим образом:
Durbin-Watson - это измерение гомоскедастичности или равномерного распределения ошибок в наших данных. Гетероскедастичность будет означать неравномерное распределение, например, когда точка данных растет, то относительная ошибка тоже увеличивается. Идеальная гомоскедастичность находится между 1 и 2.
Рассчитывается следующим образом:
На следующих графиках приведена хорошая (значение критерия между 1 и 2), и плохие (значение критерия около 0 и около 4) гомоскедастичности. В заголовке указано значение коэффициента.
Хорошее распределение ошибки
Левая грань
Ошибка представляет собою прямую линию, т.е. вектор ошибки коррелирует с собой же со сдвигом влево.
Правая грань
В данном случае на графике изображена функция вида .
Jarque-Bera (JB) и Prob (JB) - альтернативные методы измерения того же значения, что и Omnibus и Prob (Omnibus), с использованием асимметрии (перекос) и эксцесса. Нулевая гипотеза – распределение является нормальным, асимметрия равна нулю, а эксцесс равен трем. При небольших выборках тест Jarque-Bera склонен отклонять нулевую гипотезу когда она верна.
где— перекос, — эксцесс.
Cond. No (число обусловленности) — это мера чувствительности нашей модели по отношению к входящим данным. То есть при малейшем изменении данных коэффициенты (соответственно и отклик модели) сильно меняется (5). Мультиколлинеарность следует из большого числа обусловленности.
Вычисляется c помощью собственных значений матрицыследующим образом:
Заключение
После того, как вы познали Дзен, предлагаю пути дальнейшего копания:
Логистическая регрессия;
GLM - обобщение линейной регрессии;
Байесовская линейная регрессия;
Факторный анализ.
P.S.
Пожалуйста, если есть какие-то неточности, ошибки, дополнения и т.д. — дайте знать, сделаем статью лучше и интереснее!