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

Обычно мы используем следующие основные шаги в задачах регрессионного анализа.

1. Начните с исследовательской гипотезы. Затем мы определяем переменные ответа и переменные-предикторы. Затем мы собираем и очищаем данные.

2. Когда у нас есть несколько переменных-предикторов, мы можем начать с проверки корреляции между этими переменными. Когда некоторые из этих пар переменных сильно коррелированы, регрессионный анализ может не использовать эффект любой из этих переменных. В таких случаях следует рассмотреть возможность удаления одной из этих пар коррелированных переменных. Этот шаг бесполезен в простой линейной регрессии, потому что он имеет только одну переменную-предиктор.

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

4. Затем мы реализуем регрессионную модель для этого набора данных. Мы можем оценить адекватность подобранной модели.

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

В следующих разделах мы увидим использование и полезность каждого из этих шагов для различных вариантов использования.

Простая линейная регрессия

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

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

+--------------------------+----------------------+
| Farm Sizes (in Hectares) | Crop Yield (in Tons) |
+--------------------------+----------------------+
| 1                        | 6.9                  |
| 1                        | 6.7                  |
| 2                        | 13.8                 |
| 2                        | 14.7                 |
| 2.3                      | 16.5                 |
| 3                        | 18.7                 |
| 3                        | 17.4                 |
| 3.5                      | 22                   |
| 4                        | 29.4                 |
| 4.5                      | 34.5                 |
+--------------------------+----------------------+

Мы можем начать с визуализации этих данных в Python, используя диаграмму рассеяния matplotlib.

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> X=[1,1,2,2,2.3,3,3,3.5,4,4.3]
>>> Y=[6.9,6.7,13.8,14.7,16.5,18.7,17.4,22,29.4,34.5]
>>> plt.scatter(X,Y)
>>> plt.show()

Приведенный выше фрагмент кода генерирует диаграмму разброса, как показано на рисунке 2, выборочных данных с урожайностью по оси Y и размерами ферм по оси X.

В этом примере мы попытаемся установить линейную зависимость между размером фермы и урожайностью. Наши отношения можно описать в виде уравнения прямой.

y = a (x) + b

Таких строк может быть несколько с разными значениями параметров a и b, которые можно охарактеризовать как соответствующие данным. Нам нужны некоторые статистические критерии, чтобы найти наиболее подходящую прямую.

Для измерения наилучшего соответствия в простой линейной регрессии одним из основных методов является обыкновенный метод наименьших квадратов (OLS). Он минимизирует сумму квадратов вертикальных расстояний между наблюдаемыми точками данных и линией модели. Эта модельная линия используется как функция для прогнозирования значений для новостных наблюдений. Метод OLS широко используется в различных приложениях для анализа промышленных данных. Подробности обыкновенного наименьшего квадрата и его реализации представлены в следующем разделе.

Мы можем использовать пакет statsmodels для нашей задачи простой линейной регрессии, поскольку он предоставляет несколько различных вариантов линейной регрессии, и с ним довольно легко выполнить OLS.

>>> import numpy as np
>>> import statsmodels.api as sm
>>> X=[1,1,2,2,2.3,3,3,3.5,4,4.3]
>>> Y=[6.9,6.7,13.8,14.7,16.5,18.7,17.4,22,29.4,34.5]

В приведенном выше фрагменте кода мы загрузили области фермы как массив X и yield как массив Y. Мы можем использовать другие методы загрузки данных и различные структуры данных, которые мы подробно опишем в следующей главе. Кроме того, в этой главе мы представляем примеры из одного сеанса консоли Python, поэтому некоторые операции импорта или объявления переменных, используемые в разделе, могут не повторяться в следующих разделах этой главы.

По умолчанию реализация statsmodels OLS не включает перехват в модели, если мы не используем формулы.

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

>>> import statsmodels.api as sm
>>> X_1=sm.add_constant(x)
>>> print X_1
[[ 1.   1. ]
[ 1.   1. ]
[ 1.   2. ]
[ 1.   2. ]
[ 1.   2.3]
[ 1.   3. ]
[ 1.   3. ]
[ 1.   3.5]
[ 1.   4. ]
[ 1.   4.3]]

Таким образом, мы добавили один столбец с постоянными значениями 1 в массив предикторов. Теперь наша модель примет вид

y = b.1 + a.x

Где a и b называются параметром или коэффициентами модели, которые будут оцениваться методом OLS ниже.

>>> model = sm.OLS(Y,X_1)
>>> results = model.fit()
>>> print results.params
[-1.32137039  7.42581241]

Мы получили значения коэффициентов регрессии как a = 7,42581241 и b = -1,32137039. Мы также можем визуализировать регрессионную модель, построив линию регрессии, используя предсказанные значения Y для наших данных в выборке.

>>> Y_predicted=results.predict(X_1)
>>> plt.scatter(X,Y)
>>> plt.xlabel("Farm size in hectares")
>>> plt.ylabel("Crop yield in tons")
>>> plt.plot(X,Y_predicted, "r")
>>> plt.show()

В предыдущем примере мы использовали постоянный термин для обозначения точки пересечения. Теперь мы рассмотрим использование api формулы statsmodels, чтобы использовать формулу вместо добавления постоянного члена для определения перехвата. В формуле api имя класса - ols вместо OLS, а входными параметрами являются фрейм данных и параметр формулы в форме:

Переменная ответа ~ Комбинация переменных-предикторов

>>> import statsmodels.formula.api as sm1
>>> import pandas as pd
>>> df1=pd.DataFrame(X,columns=['X'])
>>> df1['Y']=Y
>>> results_formula = sm1.ols(formula='Y ~ X', data=df1).fit()
>>> print results_formula.params
Intercept   -1.321370
X            7.425812

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

>>> results_without_intercept = sm1.ols(formula='Y ~ X - 1', data=df1).fit()
>>> results_without_intercept.params
X    6.994877

Прогноз

Проверка адекватности и пригодности моделей будет рассмотрена в следующей главе. Для простоты давайте рассмотрим, что если мы найдем модель адекватной, то мы можем использовать изученную модель для прогнозирования переменной Y для переменных X вне выборки. Теперь, используя нашу изученную модель для ферм, мы можем предсказать значения ожидаемой урожайности для новых размеров ферм.

Если мы не используем формулу, тогда для прогнозирования требуется создать массив новых значений X, а затем повторить тот же метод добавления константы для перехвата.

>>> new_X=[5,5.5,6,7]
>>> new_X_1 = sm.add_constant(new_X)
>>> results.predict(new_X_1)
array([ 35.80769166,  39.52059787,  43.23350407,  50.65931648])

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

>>> df_new = pd.DataFrame([5,5.5,6,7],columns=['X'])
>>> df_new
>>> results_formula.predict(df_new)
array([ 35.80769166,  39.52059787,  43.23350407,  50.65931648])

Таблица 2: прогнозируемая урожайность для новых размеров ферм.

+--------------------------+-----------------------+
| Out of sample farm sizes | Predicted crops yield |
+--------------------------+-----------------------+
| 5                        | 35.80769166           |
| 5.5                      | 39.52059787           |
| 6                        | 43.23350407           |
| 7                        | 50.65931648           |
+--------------------------+-----------------------+

В следующей части 3 мы рассмотрим реализацию обыкновенных наименьших квадратов (OLS).