Основы регрессии

Задний план

Недавно я участвовал в семинаре о применении регрессии в бизнесе. Я был несколько удивлен тем, что было включено, а что не учтено. Многие курсы / учебники по прикладной статистике уделяют много внимания (возможно, слишком много) доверительным интервалам оценок коэффициентов, но не тратят много времени на объяснение доверительных интервалов, которые вы можете построить для прогнозов модели! Есть много информации, которую мы можем извлечь из остатков регрессионной модели. Метрика, на которой мы сосредоточимся сегодня, - это оценочное стандартное остаточное отклонение, σ ^ («шляпа» должна быть выше сигмы, но среда не имеет сильной поддержки для математических выражений).

Сигма шляпа

Расчетное остаточное стандартное отклонение не просто определяет коэффициент R-Squared. Фактически, это может сказать нам о точности наших прогнозов. Допустим, мы регрессируем результаты стандартизированных тестов учащихся по семейному доходу и обнаруживаем, что стандартное отклонение остатков составляет 7 баллов. Это говорит нам о том, что мы можем предсказать результаты теста учащегося, плюс-минус 7 баллов. Это также помогает нам построить доверительный интервал для прогнозов нашей модели. Чтобы объяснить это дальше, мы должны поговорить о выборочном распределении оцененной остаточной дисперсии σ ^ ².

Вышеупомянутое распределение выборки сосредоточено вокруг остаточной дисперсии совокупности, σ², и напоминает распределение хи-квадрат с числом наблюдений минус число степеней свободы предикторов. Зная это, мы можем утверждать, что 95 процентов остатков выборки должны находиться в пределах плюс-минус 2σ ​​^ ², а около 67 процентов - в пределах плюс-минус σ ^ ². Давайте воспользуемся Python и некоторыми реальными данными, чтобы увидеть, как эти знания могут быть полезны.

Пример

Здесь мы регрессируем результаты тестов студентов k-8 (из Калифорнии) по количеству компьютеров на одного студента. Набор данных - это довольно известный набор данных среди студентов-эконометристов, который называется каскул.

import pandas as pd
from statsmodels.formula.api import ols
data = pd.read_csv('/Users/vincentshields/desktop\
/econometrics/caschool.csv')
reg = ols('testscr ~ comp_stu', data=data).fit\
(cov_type = 'HC3')

мы можем получить доступ к остаткам модели через statsmodels.formula.api.ols.regressionresults.resid, что означает, что мы можем получить σ ^ следующим образом:

reg.resid.std()

В нашем случае эта команда выводит 18,34194887504922 (намного больше десятичных знаков, чем необходимо). Во-первых, давайте напишем настраиваемую функцию прогнозирования:

def predict(data,reg):
    
    """Takes an array-like object and
    returns regression predictions for 
    each element"""
    
    output = []
    for x in data:
        output.append(reg.params[0] + x*reg.params[1])
    return output
predict([0.35,0.41,0.22],reg)

Отсюда получаем

[671.1550136421824, 675.9193047688409, 660.8323828677557]

Насколько мы уверены в этих прогнозах? Мы можем узнать так:

print("We are 95\
 percent confident that\
 the true value falls within +-{:.4f} points\
 from our prediction.".format(2*reg.resid.std()))
# outputs
We are 95 percent confident that the true value falls within +-36.6839 points from our prediction.

Следует отметить, что то, что мы делаем здесь, предполагает, что наша подогнанная регрессия является истинной моделью, а не оценочной моделью. Таким образом, мы рассматриваем σ ^ как стандартную ошибку предсказаний. В действительности истинная стандартная ошибка, вероятно, будет немного выше σ ^.

Этот метод может быть полезен, особенно при финансовом прогнозировании с использованием ols. Модель не обязательно должна быть линейной; вы можете применить тот же метод к экспоненциальным или логарифмическим моделям. В любом случае, спасибо за чтение! Надеюсь, эта информация кому-то будет полезна.