Регрессионный анализ относится к сфере статистических выводов. Рассмотрим следующее уравнение:
y ≈ β0 + β1x + e
Знак приблизительного равенства указывает на то, что существует приблизительная линейная зависимость между x и y. Термин "ошибка" e указывает на то, что эта модель не будет полностью отражать реальность посредством простой линейной зависимости. Задача обучения состоит в том, чтобы оценить бета-параметры следующим образом:
ŷ = β̂0 + β̂1x
Обратите внимание, что благодаря аппроксимации бета-версий теперь можно вычислять прогнозы для ранее невидимых значений зависимой переменной y.
Распаковываем это немного:
- Возьмите некоторый набор данных с вектором признаков x и (помеченным) целевым вектором y.
- Разбить набор данных на секции поезда / теста случайным образом
- Обучите модель и найдите оценки (β̂0, β̂1) истинного бета-пересечения и наклона
- Посмотрите, как ваша модель обобщается, используя ваши обученные бета-параметры для прогнозирования значений ŷ на удерживаемых тестовых данных (которые сами по себе являются вектором).
- Вычислите остаточные ошибки между векторами y и ŷ и определите, насколько хорошо / плохо вы сделали что-то вроде средней абсолютной ошибки или среднеквадратичной ошибки.
Графически остатки (члены ошибки) - это расстояние между каждым «истинным» y (синие точки) и оцененной красной моделью:
Обычные наименьшие квадраты
Как модель определяет, какие параметры β̂ использовать в качестве оценок? Обычные наименьшие квадраты (OLS) - это метод, в котором решение находит все коэффициенты β̂, которые минимизируют сумму квадратов остатков, т.е. минимизируют сумму этих разностей: (y - ŷ ) ² для всех значений y и ŷ в обучающих наблюдениях. Думайте о y и ŷ как о векторах-столбцах с записями, равными количеству ваших общих наблюдений.
Интересно то, что OLS обеспечивает лучшую линейную несмещенную оценку (СИНИЙ) для y при наборе классических допущений. Это немного сложно, но учтите, что:
- «Лучший» = минимальная дисперсия оценки OLS истинных бета-версий (т. Е. ни одна другая линейная оценка не имеет меньшей дисперсии!)
- «Непредвзятый» = ожидаемое значение оценочных значений бета-версии равняется истинным значениям бета-версии.
Ясно, что СИНИЙ оценщик желателен, но он может быть труднодостижимым, как вы увидите ниже.
Выше я написал y как функцию одной пояснительной функции и одного перехвата, но на практике это будет многомерной проблемой. Чтобы сделать это более конкретным: предположим, вы хотели спрогнозировать индекс цен на жилье в США и у вас есть следующие данные:
Здесь ваш столбец данных ousing_price_index - это помеченный вектор y, а 7 столбцов от sp500 до ross_domestic_product - 7 векторы признаков, которые также можно рассматривать как матрицу признаков X. Это означает, что мы оценим 7 различных бета-коэффициентов для каждой функции плюс одно значение точки пересечения.
Это предположения OLS:
- Идентификатор остаточного (ошибочного) распределения: среднее значение 0, постоянная дисперсия -
a) ожидаемое значение каждого члена ошибки совокупности равно 0 ( напомним, мы оцениваем истинное y)!
b) дисперсия каждого члена ошибки совокупности является константой σ² (также называемой гомоскедастичностью)
c) Отсутствие автокорреляции - условия ошибки должны быть независимыми друг от друга (например, ежедневные цены на акции имеют автокорреляцию). - Матрица характеристик X имеет полный ранг столбца - количество наблюдений больше, чем количество функций, и не может быть точной линейной связи между любыми двумя функциями (без мультиколлинеарности) . Без полного ранга столбца матрица X не обратима, и оценка МНК не может быть вычислена.
- Регрессия линейна по параметрам - зависимая y является линейной функцией параметров β, и все релевантные независимые переменные должны быть там, чтобы избежать опущено смещение переменной.
- Функции не зависят от условий ошибки - это также называется экзогенными независимыми переменными. Это означает, что ни одна из функций не может содержать пояснительную информацию по каждому термину ошибки.
- (Необязательно из-за CLT) Остатки (члены ошибки генеральной совокупности) должны быть нормально распределены - причина, по которой это часто указывается как необязательное или опускается, заключается в том, что для больших размеров выборки CLT утверждает, что оценки коэффициентов будут быть в основном нормальным в любом случае (в пределе), даже если распределение членов ошибки не является нормальным. Однако для небольшого числа наблюдений CLT, возможно, еще не приблизился к чему-то нормально распределенному. В моем случае ниже у меня была очень маленькая выборка.
Когда дела идут наперекосяк
В реальной жизни ваши данные вряд ли полностью соответствуют этим предположениям. В этом разделе я покажу пример, в котором мой базовый набор данных явно нарушает предположения № 5 и № 1b выше, и то, что я сделал, чтобы это исправить.
Мои данные получены из уровней финансирования онлайн-краудсорсинговых проектов и различных характеристик, таких как продолжительность кампании, тональность описания (через NLTK Vader), количество онлайн-фотографий и многое другое. Если просто запустить OLS для функций и цели (выделенные доллары), вот как выглядели остатки:
Красная линия указывает на идеальную нормальность, и ясно, что остатки не распределены нормально в нарушение предположения № 5. В моем случае это имело значение, поскольку у меня было менее 250 наблюдений, поэтому я не был уверен, что мои оценки коэффициентов будут асимптотически нормально распределены.
Далее представлен график, позволяющий проверить, равномерно ли распределены остатки по диапазону предикторов (предположение № 1b для равной дисперсии):
Очевидно, что остаточные ошибки неравномерно распределены по диапазону предикторов, поэтому и здесь у нас есть проблемы.
Преобразование данных
Вот парный график моего нетрансформированного набора данных с несколькими избранными проблемными функциями:
В этом случае заложено было моей зависимой y, а num_gift_options и photo_cnt были двумя выбранными функциями. Хотя это и не является гарантией, иногда бывает так, что преобразование функций или целевого объекта в «более нормальное» распределение может помочь с проблемными предположениями OLS, упомянутыми выше.
В этом случае заложенная сумма y требует преобразования в размер журнала. Его индивидуальные значения y составляют от 2 до 80000 долларов. В моем случае pledged находился в Pandas DataFrame, поэтому я преобразовал весь столбец с помощью функции журнала numpy:
['y_log'] = np.log(df['pledged']) plt.ylabel('Count') plt.xlabel('LOG of Pledged Amount') plt.title('Dist. of Transformed Pledged Amount - Dependent Target') plt.hist(df['y_log'])
Это привело к следующему преобразованию:
Одно небольшое отступление: когда вы преобразуете y в пространство журнала, вы неявно в конечном итоге интерпретируете изменения единиц измерения в X как интерпретацию процентного изменения в исходном не-логарифмическом y в конце. Ответ в этом потоке StackOverflow дает очень четкое объяснение того, почему это так, с помощью свойства производной естественного журнала.
Теперь о функциях. Я обнаружил, что преобразование Бокса-Кокса очень помогает в исправлении остаточной нормальности. Если вы посмотрите на центральную рамку на графике для пар выше, вы увидите непреобразованное распределение количества вариантов подарков. Вот как запустить преобразование Бокса-Кокса taht с помощью scipy.stats:
lamb = ( stats.boxcox_normmax(df.num_gift_options, brack = (-1.9, 1.9)) ) print("Lambda:", lamb) num_gift_options_t = (np.power(df.num_gift_options,lamb)-1) / lamb df['num_gift_options_t'] = ( (np.power(df.num_gift_options,lamb)-1) / lamb )
Обратите внимание, что функция stats.boxcox_normax из scipy.stats найдет лучшую лямбду для использования в преобразовании мощности.
Вот как это выглядит после трансформации:
Если у рассматриваемого объекта есть нулевые или отрицательные значения, ни преобразование журнала, ни box-cox не будут работать. К счастью, преобразование мощности Йео-Джонсона решает этот случай явно. Удобно, что метод Йео-Джонсона используется по умолчанию в PowerTransformer sklearn.preprocessing:
pt = PowerTransformer() pt.fit(df['photo_cnt'].values.reshape(-1,1)) df['photo_cnt_t'] = ( pt.transform(df['photo_cnt'].values.reshape(-1,1)) ) plt.ylabel('Count') plt.xlabel('Box Cox Transformed Negative Sentiment') plt.title('Dist. of Transformed Negative Sentiment - Feature') plt.hist(df['all_sentiment_neg_t'])
Вот как это выглядит после преобразования:
Хотя преобразованные объекты сами по себе не имеют нормального распределения, посмотрите, что мы получаем для наших графиков остаточного распределения и дисперсии после преобразования:
Это день и ночь с того места, где мы начали, и теперь мы можем сказать, что у нас по существу нормально распределенные остатки и постоянная дисперсия между остатками. Следовательно, эти допущения OLS, и мы можем быть более уверены в оценке BLUE.
Модельное тестирование и интерпретация
Это ни в коем случае не конечная точка анализа. В этом конкретном случае я закончил тем, что провел трехкратную перекрестную проверку, проверяя линейную регрессию, регрессию гребня и регрессию Хубера на проверочном разделе моих обучающих данных, а затем, наконец, протестировал победителя на сохраненных тестовых данных, чтобы посмотрим, является ли модель обобщенной. Общий смысл состоит в том, что лучше всего убедиться, что вы выполнили предположения OLS, прежде чем переходить к полному циклу обучения / проверки / тестирования на ряде моделей для случая регрессии.
Одно замечание: когда вы трансформируете объект, вы теряете возможность интерпретировать влияние коэффициентов на y в конце. Например, я не преобразовывал функцию длины проекта в этом анализе, и в конце я смог сказать, что увеличение длины проекта на единицу (+1 день) привело к уменьшению суммы финансирования на 11%.
Поскольку я использовал эти преобразования для подсчета фотографий и количества функций подарков, я не могу сделать то же утверждение, учитывая увеличение единицы измерения X, поскольку прогнозы коэффициентов относятся к преобразованию. Таким образом, у преобразований есть обратная сторона, но стоит знать, что вы получаете СИНИЙ оценщик через OLS.