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

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

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

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

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

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

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

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

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

Источники

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

  1. https://medium.com/swlh/interpreting-linear-regression-through-statsmodels-summary-4796d359035a – кратко расшифровывает summary.

  2. http://work.thaslwanter.at/Stats/html/statsModels.html – глубоко описывает summary.

  3. https://stepik.org/course/76/syllabus – отличный курс по основам математической статистики, брал информацию по условиям применения линейной регрессии.

  4. https://gallery.shinyapps.io/slr_diag/ – посмотреть на поведение ошибки в зависимости от характера данных.

  5. https://www.statsmodels.org/0.6.1/examples/notebooks/generated/ols.html – пример применения OLS из документации statsmodels (в частности там есть про мультиколлинеарность, как оно влияет на число обусловленности).

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

  7. https://www.lib.tsu.ru/mminfo/2016/Dombrovski/book/chapter-3/chapter-3-3.htm – отсюда взял пояснения по ковариационной матрице параметров.

  8. http://math-info.hse.ru/math-ml/chapter/label/chap:6:linear-reg2/#label_subsection_number_5_3_2 – отсюда взял пояснения по ковариации признаков линейной регрессии (здесь в целом пояснение про ковариационную матрицу).

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

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

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

Первая часть вывода 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—количество параметров (предикторов).

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

Вторая часть вывода 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%).

Анализ остатков (2)

Вторая часть вывода 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 - это измерение гомоскедастичности или равномерного распределения ошибок в наших данных. Гетероскедастичность будет означать неравномерное распределение, например, когда точка данных растет, то относительная ошибка тоже увеличивается. Идеальная гомоскедастичность находится между 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.

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

Комментарии (0)