Повышение устойчивости модели регрессии с помощью анализа временных рядов — Часть 2

Увеличение устойчивости модели регрессии с помощью анализа временных рядов — Часть 2

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

Фото от Robbie Down на Unsplash

Ранее…

Добро пожаловать во вторую часть этой статьи!

В первой части нам удалось успешно построить модель временных рядов, а именно, с использованием SARIMA (Сезонная авторегрессия с интегрированным скользящим средним). Более того, мы оценили построенную модель, проведя визуальное исследование и оценив ее среднюю абсолютную ошибку (МАЕ).

Улучшение устойчивости модели регрессии с помощью анализа временных рядов – часть 1

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

pub.towardsai.net

(Для полного кода от начала и до конца этого анализа, от извлечения данных до построения моделей регрессии, не стесняйтесь, проверьте мои репозитории GitHub здесь)

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

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

cleandata.head()
Очищенный набор данных - Изображение от автора

Инженерия признаков

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

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

Категориальные признаки

Исходя из нашего анализа категориальных признаков, явно видно, что ‘flat_type’ и ‘storey_range’ обладают упорядоченными характеристиками. Хотя упорядоченные признаки имеют естественный порядок, важно отметить, что числовые различия между классами не обязательно несут конкретную информацию. Интересно, что когда мы исследуем ‘flat_type’ и ‘storey_range’ вместе с ‘resale_price’, мы наблюдаем почти линейные отношения.

Средние цены по типам квартир - Изображение от автора
Средние цены по диапазону этажей - Изображение от автора

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

np.sort(cleandata['flat_type'].unique())
flat_type после порядкового кодирования — Рисунок автора
np.sort(cleandata['storey_range'].unique())
storey_range после порядкового кодирования — Рисунок автора

Временные характеристики

Временные характеристики – это группа характеристик, связанных с временными рядами данных. Эти характеристики могут быть представлены в виде даты и времени, числовых или категориальных данных. В предыдущем сегменте, конкретно на этапе предварительной обработки, мы создали новые характеристики ‘resale_year’ и ‘resale_month’ на основе ‘resale_date’. В отличие от ‘flat_type’ и ‘storey_range’, мы выяснили, что ‘resale_month’, которая также является порядковой, не имеет линейной связи с ‘resale_price’. Вместо этого ‘resale_month’ отражает сезонность нашего набора данных. Поэтому мы должны преобразовать ‘resale_month’ из числовой в категориальную. Из ‘resale_month’ мы также создали новую характеристику ‘resale_quarter’.

Другие временные характеристики – это новые характеристики, которые мы получаем из анализа временных рядов. Эти характеристики – это прогноз, тренд и запаздывающие переменные. Для характеристик прогноза и тренда мы можем получить их напрямую из нашей модели SARIMA. Для запаздывающих переменных мы создали их на основе прогноза. Хотя оптимальное количество запаздывающих переменных равно трем, на основе параметра ARIMA p = 3, мы решили создать четыре запаздывающих переменных. Добавив дополнительную переменную, мы хотели исследовать, как это влияет на поведение нашей регрессионной модели.

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

Числовые характеристики

Числовые характеристики находятся в хорошей форме. Поэтому им не нужно подвергаться никаким изменениям.

Выбор характеристик

Фото от Edu Grande на Unsplash

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

Сначала мы группируем числовые столбцы в нашем наборе данных вместе и выполняем корреляционный тест. С помощью этого теста мы можем выполнить выбор в два этапа. Первый – сравнение характеристик с целевой переменной, в данном случае – ‘resale_price’.

Из тепловой карты ниже мы видим, что ‘resale_price’ имеет некоторую степень взаимосвязи с этими числовыми характеристиками, от умеренной до сильной связи. Однако мы также замечаем, что некоторые характеристики имеют сильные взаимосвязи друг с другом, что указывает на мультиколлинеарность.

Мы знаем, что ‘remaining_lease’ является функцией ‘lease_commence_year’. Поэтому мы можем просто удалить одну из этих характеристик. Так что мы удалили ‘remaining_lease’. Кроме того, мы также замечаем, что ‘floor_area_sqm’ и ‘flat_type’ очень сильно скоррелированы, поэтому мы можем удалить ‘flat_type’ из набора данных.

Таблица корреляции 1 — Рисунок автора

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

Таблица корреляции 2 — изображение автора

Тем временем, для категориальных признаков мы используем более простой подход. Изображение ниже показывает, что «block» и «street_name» имеют крайне большое количество уникальных классов – 2671 и 565, соответственно. Следует отметить, что категориальные признаки, содержащие очень большое количество классов, способны увеличить сложность модели и склонны к переобучению. Поэтому мы решаем отбросить эти признаки.

cat = newdata.select_dtypes(exclude = 'number') #категориальные/качественныеfor i, column in enumerate(cat.columns):    print(f'{column}'.title(), ': содержит', cat[column].nunique(), 'значений')
Размер класса категориальных признаков — изображение автора

Как только мы определили, какие признаки попадут в регрессионную модель, мы можем перейти к следующей фазе – построению регрессионной модели.

Линейная регрессия

Фото Clément Hélardot на Unsplash

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

В нашем случае мы строим модель линейной регрессии для прогнозирования значений “resale_price” на основе их взаимосвязи с признаками (“floor_area_sqm”, “storey_range” и т.д.). Чтобы получить надежную прогностическую модель, сначала нам нужно построить базовую модель. Базовая модель – это важная отправная точка и ориентир, как должна работать модель и как ее можно улучшить.

Базовая модель

Как мы все знаем, нашей целью является определение того, как комбинация временного анализа помогает улучшить прогнозы регрессии. В результате мы создаем базовую модель, не включающую временные компоненты, за исключением тех, которые присутствуют в исходном наборе данных, которые в нашем случае включают “resale_date” и ее прямые производные, т.е. “resale_year”, “resale_month” и “resale_quarter”. Таким образом, с базовой моделью мы фактически создаем сценарий, в котором мы полагаемся только на обычную линейную регрессию.

Ниже приведена комбинация признаков и целевой переменной, используемая в нашей базовой модели:

feat.head()
Признаки базовой модели — изображение автора

Построение модели

Отметим, что поскольку наш набор данных содержит категориальные признаки, нам нужно создать фиктивные переменные. В нашем случае мы создали фиктивные переменные с помощью кодирования one-hot encoding из Pandas.

Как видно на скриншоте ниже, количество признаков увеличилось с 9 до потрясающих 62 благодаря созданию фиктивных переменных.

dummies = pd.get_dummies(feat, drop_first= True, prefix_sep= '--')dummies.head()
Включая фиктивные переменные — Изображение автора

После создания фиктивных переменных мы переходим к разделению данных на обучающую и тестовую выборки. Критерием разделения является тот же, что и в анализе временных рядов, где последние 12 месяцев составляют тестовую выборку, а предыдущие являются обучающей выборкой. В нашем конкретном случае эта разбивка приводит к примерно 20:80 соотношению тестовой и обучающей выборок. После разделения данных мы можем построить модель.

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

import statsmodels.api as smLinearRegression = sm.OLS(y_train, sm.add_constant(X_train)).fit()

Оценка модели

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

Для начала оценки нам необходимо проверить график остатков регрессионной модели для изучения гомоскедастичности модели. Сначала мы оцениваем остатки обучающей выборки. Как видно на изображении ниже, мы можем видеть, что в нижнем ценовом диапазоне фактические данные равномерно разбросаны вокруг регрессионной линии. Однако по мере увеличения цены фактические данные более неоднородно разбросаны относительно регрессионной линии. С другой стороны, гистограмма остатков следует колоколообразной форме нормального распределения с близким к нулю средним значением, равным -1,13e-11 после стандартизации.

Анализ остатков обучающей выборки базовой модели — Изображение автора

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

Анализ остатков тестовой выборки базовой модели — Изображение автора

Тем временем, ключевыми метриками, которые мы используем для оценки эффективности регрессионной модели, являются скорректированный R-квадрат, средняя абсолютная ошибка (mean absolute error, MAE) обучающей выборки и MAE тестовой выборки. Эти метрики существенны для измерения точности модели и ее способности к обобщению.

Значения этих метрик следующие:

  • скорректированный R-квадрат: 86.19%

Значение скорректированного R-квадрата представляет собой меру того, насколько хорошо наша прогностическая модель может объяснить изменчивость данных, учитывая сложность модели. Практически это означает, насколько хорошо независимые переменные (функции) в нашей модели могут объяснить значения зависимой переменной (цель). Значение скорректированного R-квадрата 86.19% можно считать высоким значением, учитывая то, что мы пытаемся моделировать цены на жилье, что может быть сложно предсказать, так как оно неизбежно связано с человеческим поведением. Более высокое значение скорректированного R-квадрата (ближе к 100%) в модели регрессии обычно является желательной характеристикой.

  • MAE обучающей выборки: 47 453 S$
  • MAE тестовой выборки: 59 158 S$

Тем временем, для значений MAE, как и в анализе временных рядов, нам необходимо сравнить их с средним значением ежемесячной средней цены, которое составляет 483 783 S$. Это означает, что значения MAE составляют от 9,8% до 12,2% от среднего значения ежемесячной средней цены. Хотя эти значения относительно малы по сравнению со средним значением ежемесячной средней цены, было бы лучше, если бы мы могли еще больше сократить эти значения ошибки.

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

Прогноз против фактического, базовая модель — Изображение автора

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

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

Улучшенная модель

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

Эта лучшая модель включает в себя внедрение определенных характеристик, полученных из анализа временных рядов с использованием SARIMA, а также тренда и третьего лага. Более того, модель может работать более надежно, используя преобразование данных на целевую переменную (‘resale_price’) с использованием преобразования Бокса-Кокса.

feat.head()
Характеристики улучшенной модели — Изображение автора

Построение модели

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

Оценка модели

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

Анализ остатков обучения улучшенной модели — Изображение автора

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

Анализ остатков тестирования улучшенной модели — Изображение автора

Тем временем, значения метрик оценки следующие:

  • скорректированный R-квадрат: 89,61%
  • MAE для обучающего набора данных: S$ 40,114
  • MAE для тестового набора данных: S$ 42,432

Значение скорректированного R-квадрата улучшенной модели выше, чем у базовой. В то же время значения MAE для обучающего набора данных и тестового набора данных улучшенной модели меньше, чем у базовой. Эти изменения также указывают на улучшение модели.

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

Prediction vs Actual, Improved Model — Image by Author

Сравнение метрик

Чтобы облегчить сравнение, я подвел итоги метрик в этих таблицах:

Comparison of regression metrics — Image by Author
Comparison of time-series metrics — Image by Author

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

Это довольно круто. И что?

Нам, наконец, удалось построить модель линейной регрессии, которая может улавливать временную природу данных, включая SARIMA. С этим связано несколько миллионов долларов вопросов — Зачем это вообще важно? Как мы можем использовать прогностическую модель в реальных ситуациях?

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

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

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

Поэтому эта модель лучше всего использовать в течение короткого периода времени, например, от 6 до 12 месяцев вперед. После этого периода рекомендуется обновить модель, обновив тренировочные данные.

Ключевые моменты

  1. Одна из самых базовых техник машинного обучения, линейная регрессия, может стать более надежной, если использовать классический метод анализа временных рядов, такой как SARIMA.
  2. Владельцы квартир HDB могут использовать эту модель для помощи в установлении правильных цен, если они решили продать свои единицы.
  3. Из-за своих ограничений эта модель следует использовать в течение короткого периода времени, например, 6 или 12 месяцев.
  4. Если намерено использовать эту модель в течение более продолжительного периода времени, важно периодически обновлять тренировочные данные.

Наконец, большое спасибо за чтение до конца! Я надеюсь, что моя статья окажется полезной и вдохновляющей.

Дополнительная литература:

[1] М. Бадоле, Освоение нескольких линейных моделей регрессии: Подробное руководство, 2021. [Online]. Доступно по адресу: https://www.rupython.com/linear-algebra-1-equations-and-systems.html [Дата обращения: 30 октября 2023 г.].

[2] Geeks for Geeks, Линейная регрессия в Python с использованием Statsmodels, 2022. [Онлайн]. Доступно: https://www.geeksforgeeks.org/linear-regression-in-python-using-statsmodels/ [Доступно: 30 октября 2023 г.]