Как стать автором
Обновить

Интерпретация summary из statsmodels для линейной регрессии

Время на прочтение7 мин
Количество просмотров20K
Автор оригинала: Thomas Haslwanter

Узнал я о линейной регрессии после того, как встретил деревья, нейронные сети. Когда мы с другом повторно изобретали велосипед, обучая с нуля word2vec и использовали логистическую регрессию с векторами из обученной модели для задачи NER – я активно кричал о том, что линейная регрессия – прошлый век, никому она уже совсем не нужна.

Да, проблема была в том, что я совсем не разобрался в вопросе и полез в бой. Но практику в универе нужно было как-то закрывать.

После семестра мат. статистики ко мне пришло прозрение.

В статье мы попробуем применить линейную регрессию к классическим данным с помощью statsmodels и посмотреть на все значения summary. Стоит упомянуть, что линейная регрессия из sklearn ничем не хуже, но в statsmodels есть функция summary, где уже посчитаны все необходимые коэффициенты для диагностики.

Statsmodels – это библиотека Python, которая предоставляет возможность оценить множество различных моделей, а также провести статистические тесты и исследования данных.

Небольшие пояснения

Остатки - это то же самое, что и ошибка, т.е. отклонение предсказания от истинного значения. В статьях приведен термин remains.

В тексте может встречаться цифра из списка (в круглых скобках), представленного ниже. Таким образом я отсылаю к источнику. Там вы найдете интересующую вас информацию, которая по тем или иным причинам не приведена здесь.

Это в основном является переводом статьи (в источниках вторая ссылка) с небольшими пояснениями.

Источники

Оригинальные статьи/справочники, которые очень помогли мне разобраться с вопросом.

  1. Статья кратко расшифровывает summary.

  2. Статья глубоко описывает summary.

  3. Отличный курс по основам математической статистики, брал информацию по условиям применения линейной регрессии.

  4. Симулятор, чтобы посмотреть на поведение ошибки линейной регрессии в зависимости от характера данных.

  5. Пример применения OLS из документации statsmodels (в частности там есть про мультиколлинеарность, как оно влияет на число обусловленности).

  6. Статья, откуда взяты виды covariance type в statsmodels.

  7. Из этой статьи взял пояснения по ковариационной матрице параметров.

  8. Отсюда взял пояснения по ковариации признаков линейной регрессии (здесь в целом пояснение про ковариационную матрицу).

  9. Здесь можно найти описание используемого датасета 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' и как это может угрожать вашему психическому здоровью можно почитать здесь.

Графики зависимостей предикторов от Lottery:

Условия применения регрессии

  1. Слабая экзогенность. Т.е. переменная является фиксированным значением, а не случайной величиной и не подвергнута ошибкам измерения.

  2. Линейность признаков к зависимой переменной. Это не такое сильное условие, учитывая, что мы можем преобразовывать и/или комбинировать наши фичи.

  3. Гомоскедастичность. Разные ответы модели выдают одну и ту же ошибку из нормального распределения, с центром в 0. Часто в практике она гетероскедастична. 

Небольшие пояснения

Под ‘разными ответами модели’ имеется ввиду ее отклик на разные данные. Игрушечный пример: представим себе линейную регрессию с одним признаком для описания квадратичной зависимости.

Нетрудно заметить, что чем больше значение признака, тем больше будет ошибка. Она будет выглядеть ожидаемо плохо:

Это говорит о том, что ошибка гетероскедастична.

  1. Независимость ошибок.

В данном случае предполагается, что два вектора ошибки, где один из них смещен на один элемент влево, не коррелируют друг с другом. Это требование проверяется с помощью критерия Durbin-Watson.

  1. Отсутствие мультиколлинеарности в предикторах.

Мультиколлинеарность - термин для описания двух или более независимых переменных, которые сильно связаны друг с другом и плохо влияют на наш таргет из-за избыточности. Вследствие мультиколлинеарности признаков число обусловленности сильно возрастает.

Если требования 2, 3, 4 не выполнены, то применение линейной регрессии не оправдано (скорее всего, зависимость нелинейная) (3). Также вполне вероятен случай, когда на одном отрезке модель объясняет данные хорошо, а на остальных модель не работает. В случае невыполнения 5-го пункта можно, например, применить регуляризацию.

Summary в statsmodels можно разделить на четыре части - описание данных и модели, результаты модели (насколько хорошо модель описывает данные), коэффициенты модели, анализ остатков. 

Описание данных и модели

Первая часть вывода summary
Первая часть вывода summary

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).

Результаты модели

Первая часть вывода summary
Первая часть вывода summary

R-squared - сколько процентов дисперсии зависимой переменной объяснено вариацией признаков.

R^2 = \frac{SS_\text{mod}}{SS_\text{tot}},

где:

SS_\text{mod} = \sum_{i=1}^n (\hat{y}_i-\bar{y})^2SS_\text{tot} = \sum_{i=1}^n (y_i-\bar{y})^2

\hat{y}_i— предсказание нашей модели, \bar{y}— это среднее по нашему таргету, y — наш таргет.

Adj. R-squared - та же метрика, но со штрафом за большое количество зависимых переменных. При добавлении новых признаков значение R-Squared будет таким же или расти, даже если они совсем не влияют на результат. Данная метрика штрафует за использование каждого дополнительного признака в модели.

F-statistic - критерий Фишера - статистика, значение которой необходимо для проверки гипотезы о равенстве дисперсий. В данном случае сравнивается модель с нулевыми параметрами (кроме интерсепта) с текущей.

F = \frac{(SS_\text{mod}/\sigma^2)/DF_\text{mod}}{(SS_\text{res}/\sigma^2)/DF_\text{res}} = \frac{SS_\text{mod}/DF_\text{mod}}{SS_\text{res}/DF_\text{res}} = \frac{MS_\text{mod}}{MS_\text{res}},

где

MS_\text{mod} = SS_\text{mod} / DF_\text{mod}MS_\text{res} = SS_\text{res} / DF_\text{res}DF_\text{res} = n - kDF_\text{mod} = k - 1SS_\text{res} = \sum_{i=1}^n (y_i-\hat{y}_i)^2

Prob. (F-statistic) - вероятность того, что коэффициенты при всех переменных равны нулю (кроме интерсепта).

Log-likelihood - насколько хорошо данные описываются моделью. Википедия говорит:

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

То есть абсолютные значения можно сравнивать между моделями. Мы функцию максимизируем - значит чем больше значение, тем лучше модель описывает данные. 

\epsilon = y_i - \sum_{k=1}^n \beta_k x_{ik} = y_i - \hat{y}_i \; in \; N(0, \sigma^2)p(\epsilon_i) =  \Phi (\frac{y_i - \hat{y}_i}{\sigma})\Pi_{total} = \prod_{i=1}^n p(\epsilon_i)\begin{split}\begin{aligned}   ln(\mathfrak{L}) &=& ln(\Pi_{total}) \\   &=& ln\left[\prod_{i=1}^n \frac{1}{\sigma\sqrt{2 \pi}} \exp \left(\frac{(y_i - \hat{y}_i)^2}{2 \sigma^2}\right)\right] \\   &=& \sum_{i=1}^n\left[log\left(\frac{1}{\sigma \sqrt{2 \pi}}\right)- \left(\frac{(y_i - \hat{y}_i)^2}{2 \sigma^2}\right)\right]\end{aligned}\end{split}

\Phi(z)- функция распределения вероятностей стандартного нормального распределения.

AIC BIC - используется для сравнения моделей. Как таковое значение не несёт в себе никакой информации, его можно использовать как критерий для отбора модели, который определяет на сколько сильно модель переобучена. Чем меньше значение - тем лучше модель. BIC отличается от AIC тем, что он больше штрафует за дополнительные (и не влияющие ни на что) параметры модели.

AIC = 2*k - 2*ln(\mathfrak{L})BIC = k*ln(N) - 2*ln(\mathfrak{L})

\mathfrak{L}- значение функции правдоподобия (likelihood), N— количество наблюдений, k—количество параметров (предикторов).

Коэффициенты модели

Вторая часть вывода summary
Вторая часть вывода summary

Intercept - все переменные обнуляются и подбирается константа, наилучшим образом описывающая данные.

Все коэффициенты можно вычислить по формуле:

\beta = (X^{T}X)^{-1}X^{T}y

где \beta— параметры модели, X— матрица признаков, y— наш таргет.

Здесь Region была строкой - её statsmodel представил с помощью one hot encoding

Коэффициент - если отрицательный, то при росте переменной таргет уменьшается.

std err - дисперсия коэффициента по точкам данных.

Вычисляется с помощью матрицы ковариаций по параметрам модели:

C = cov(\beta) = \sigma^{2} ( X X^{T} )^{-1}

где \sigma^{2}— среднеквадратичная ошибка (MSE) остатков. Дисперсия каждого из коэффициентов будет стоять на диагонали данной матрицы.

t - статистика t-Стьюдента, чем больше — тем лучше измерен коэффициент (чем меньше стандартное отклонение, тем лучше коэффициент описывает зависимость). Обычно t-критерий позволяет нам оценить важность различных предикторов, предполагая, что остатки модели нормально распределены около нуля. Если остатки не ведут себя таким образом, то это говорит о наличии некоторой нелинейности между переменными и о том, что их t-тесты не следует использовать для оценки важности отдельных предикторов.

Рассчитывается следующим образом:

t_{i} = \beta_{i} / SE_{i,i}

SE_{i,i}std err i-го коэффициента.

P>|t| - если < 0.05, то гипотеза о значимости коэффициента принимается. Например, переменная Literacy не влияет на зависимую переменную Loterry с вероятностью 37.8% и наши результаты получены случайно.

Доверительные интервалы коэффициента. Меньший доверительный интервал предполагает, что мы уверены в значении оцениваемого коэффициента или постоянного члена. И наоборот.

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

Рассчитывается следующим образом:

CI =  \beta_{i} \pm z \cdot SE_{i,i}

где  SE_{i,i}std err i-го коэффициента, z— критическое значение t-Стьюдента, перед или после которого гипотеза отвергается (при заданном уровне значимости (обычно 5%).

Анализ остатков

Вторая часть вывода summary
Вторая часть вывода summary

Omnibus описывает нормальность распределения наших остатков (остатки необъяснённой дисперсии), используя в качестве измерений перекос (skew) (коэффициент симметрии распределения) и эксцесс (kurtosis) (мера остроты случайной величины в горбу). 0 означает полную нормальность.

F = \frac{\sum_{i=1}^n (\hat{y}_i - \bar{y})^2 / k}{\sum_{j=1}^k \sum_{i=1}^{n_j} (y_{ij}-\hat{y}_i)^2/(n-k-1)}

Prob (Omnibus) - это статистический тест, измеряющий вероятность нормального распределения остатков. Значение 1 означает совершенно нормальное распределение.

Skew (Перекос) - это мера симметрии распределения остатков, где 0 означает идеальную симметрию.

Рассчитывается следующим образом:

S = \dfrac{\hat{\mu}_{3}}{\hat{\sigma}^{3}} = \dfrac{ \frac{1}{N} \displaystyle \sum_{i=1}^{N} ( y_{i} - \hat{y}_{i} )^{3} }{ \biggl( \frac{1}{N} \displaystyle \sum_{i=1}^{N} ( y_{i} - \hat{y}_{i} )^{2} \biggr)^{3/2}}

Kurtosis (Эксцесс) - измеряет остроту распределения остатков (в горбу) или его концентрацию около 0 на нормальной кривой. Более высокий эксцесс означает меньшее количество выбросов.

Рассчитывается следующим образом:

K = \dfrac{\hat{\mu}_{4}}{\hat{\sigma}^{4}} = \dfrac{ \frac{1}{N} \displaystyle \sum_{i=1}^{N} ( y_{i} - \hat{y}_{i} )^{4} }{ \biggl( \frac{1}{N} \displaystyle \sum_{i=1}^{N} ( y_{i} - \hat{y}_{i} )^{2} \biggr)^{2}}

Durbin-Watson - это критерий для проверки наличия автокорреляции (спасибо @promsoftза поправку) При отсутствии автокорреляции значение критерия находится между 1 и 2.

Рассчитывается следующим образом:

DW = \dfrac{ \displaystyle \sum_{i=2}^{N} ( ( y_{i} - \hat{y}_i ) - ( y_{i-1} - \hat{y}_{i-1} ) )^{2} }{ \displaystyle \sum_{i=1}^{N} ( y_{i} - \hat{y}_{i} )^{2}}

На следующих графиках приведены нормальное значение критерия (значение критерия между 1 и 2), и граничные значения (около 0 и около 4) . В заголовке указано значение коэффициента.

Автокорреляция отсутствует

Левая грань

Ошибка представляет собою прямую линию, т.е. вектор ошибки коррелирует с собой же со сдвигом влево.

Правая грань

В данном случае на графике изображена функция вида y(n)=(-1)^n, n \in N.

Jarque-Bera (JB) и Prob (JB) - альтернативные методы измерения того же значения, что и Omnibus и Prob (Omnibus), с использованием асимметрии (перекос) и эксцесса. Нулевая гипотеза – распределение является нормальным, асимметрия равна нулю, а эксцесс равен трем. При небольших выборках тест Jarque-Bera склонен отклонять нулевую гипотезу когда она верна.

JB = \dfrac{N}{6} \biggl( S^{2} + \dfrac{1}{4}(K-3)^{2} \biggr)

гдеS— перекос, K— эксцесс.

Cond. No (число обусловленности) — это мера чувствительности нашей модели по отношению к входящим данным. То есть при малейшем изменении данных коэффициенты (соответственно и отклик модели) сильно меняется (5). Мультиколлинеарность следует из большого числа обусловленности. 

Приблизительно вычисляется c помощью собственных значений матрицыXследующим образом:

\mu(X) = \frac{\lambda_{max}}{\lambda_{min}}

Заключение

После того, как вы познали Дзен, предлагаю пути дальнейшего копания:

  1. Логистическая регрессия;

  2. GLM - обобщение линейной регрессии;

  3. Байесовская линейная регрессия;

  4. Факторный анализ.

P.S.

Пожалуйста, если есть какие-то неточности, ошибки, дополнения и т.д. — дайте знать, сделаем статью лучше и интереснее!

Теги:
Хабы:
Всего голосов 1: ↑0 и ↓1-1
Комментарии5

Публикации

Истории

Работа

Python разработчик
121 вакансия
Data Scientist
78 вакансий

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань