Использование SARIMA от statsmodels для моделирования среднего значения дома по почтовому индексу.

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

Что ж, в этом посте я расскажу, как моделировать, прогнозировать и прогнозировать стоимость недвижимости с течением времени, используя методы машинного обучения временных рядов и немного разбираясь в технических вопросах. Сначала мне поручили проект - выбрать 5 лучших почтовых индексов для инвестиционной компании в сфере недвижимости, чтобы сделать наилучшие инвестиции. Для этого мне нужно было бы определить, что означает наш «лучший» почтовый индекс, а затем использовать эти показатели, чтобы сузить более 14 000 почтовых индексов до 5, подходящих для надежного инвестиционного решения, используя моделирование временных рядов.

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

Краткий обзор моделирования временных рядов:

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

Тенденции существенно уменьшаются до тех пор, пока они не будут иметь постоянное среднее значение и постоянную дисперсию. По сути, это сводится к «шуму» — случайности во времени.

Модель statsmodels SARIMA представляет собой очень эффективную комбинацию нескольких моделей: авторегрессионного (AR) моделирования, моделирования скользящего среднего (MA) и интеграции (I).

Быстрое объяснение:

Модели AR берут значение из временного ряда и регрессируют его на основе предыдущих значений из того же временного ряда. Формула АР выглядит так:

Модели MA регрессируют на основе взвешенной суммы сегодняшнего и вчерашнего шума или ошибки. Формула MA немного отличается:

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

Именно здесь в игру вступает Сезонная АРИМА (САРИМА). SARIMA учитывает сезонность для трендов со значительной зависимостью от их прошлых значений и делает для нас детрендинг! Да! Экономит время.

Подготовка нашего лучшего почтового индекса

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

Затем следующие несколько строк, чтобы удалить наш столбец с почтовым индексом и установить новый индекс:

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

Модели SARIMA имеют несколько параметров, которые необходимо ввести:

p’: количество условий авторегрессии (часть модели AR), включающих прошлые значения тенденций для предоставления прогнозов.

«d» — это количество различий (I, интегрированное), которое наша модель вычитает из текущего наблюдения.

q’ – это количество членов скользящего среднего (часть скользящей средней), которое задает ошибку как линейную комбинацию значений ошибок, наблюдаемых в предыдущие моменты времени.

Эти три попадают в параметр «заказ». Затем есть второй набор p, d, q с «s» — та же концепция, но для учета сезонности в «сезонном порядке». Что мы собираемся сделать, так это определить диапазон для каждого из трех параметров и сгенерировать все возможные комбинации с помощью itertools. Затем мы напишем цикл for для запуска модели для каждой комбинации потенциальных параметров и посмотрим, что дает нам наилучшее значение AIC. AIC означает информационный критерий Акаике и является оценкой качества статистической модели для заданного набора данных по сравнению с другими моделями. (*Примечание. Также можно использовать другие показатели для определения наиболее эффективной модели.) Нам нужно самое низкое значение AIC, поскольку модели, использующие больше параметров для точного соответствия данным, получат более высокое значение. значение AIC, чем модель, которая достигает соответствия с меньшим количеством параметров. Чем проще, тем лучше, если посадка одинакова!

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

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

Оптимальная AIC-проверка. Теперь я подставлю эти значения в новую модель и распечатаю сводную статистику.

Здесь следует отметить две вещи:

  1. значения coef — это коэффициенты; значение важности каждой функции.
  2. P›|z| наши p-значения; является значимостью каждого веса признака.

Значения ar.S, ma.S и sigma (для сезонности) превышают 0,05, что означает, что модель плохо подходит и требует некоторой корректировки.

Давайте распечатаем графики диагностической визуализации и проверим, не нарушили ли мы предположения модели:

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

Верхний правый график: кривая оценки плотности ядра и распределение наших данных по сравнению с нормальным распределением. Наша кривая KDE и гистограмма показывают, что наши данные в основном нормально распределены, но не со стандартным отклонением 1 [в N (0,1)].

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

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

Давайте теперь получим контрольную среднеквадратичную ошибку прогнозов за последний год (с 2017 года), чтобы сравнить наши предстоящие корректировки с:

Хорошо, RMSE сейчас составляет 958, и наша модель не очень подходит. Наши параметры сезонности особенно выходили за пределы p-значений. Попробуем убрать параметризацию сезонности, а также расширить диапазон значений p, d, q:

Теперь давайте подставим наши лучшие параметры (2, 2, 2) в новую модель:

Все компоненты, кажется, теперь находятся под контролем с p-значениями ниже 0,05 - хороший знак! Давайте проведем диагностику для этого и посмотрим, верны ли предположения.

Здесь не так уж много изменилось. Наша кривая KDE немного ближе к кривой нормального распределения (обратите внимание на ось Y), но пока не совсем там, где нам хотелось бы. График остатков Q-Q ближе, но все же немного отклоняется от нормальной линии. Некоторая корреляция с запаздывающими значениями все еще сохраняется. Давайте проверим RMSE:

Наши корректировки на самом деле немного снизили наш RMSE! Это шаг в правильном направлении. Однако предположения нашей модели по-прежнему нарушаются, поэтому мы не можем использовать эту модель.

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

Подключим лучшие параметры к новой модели и загрузим сводку.

Здорово! Наши p-значения теперь все ниже порога значимости 0,05. Проведем диагностику еще раз.

Основные улучшения здесь. Наши стандартизированные остатки были уменьшены (сравните оси Y). Наша кривая KDE теперь очень хорошо соответствует кривой нормального распределения. Наше упорядоченное распределение остатков точно соответствует нормальному. Это хорошие признаки того, что наши данные теперь нормально распределены. Корреляция с небольшим отставанием на уровне 10, но мы могли бы оставить нашу модель как есть.

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

Выглядит очень хорошо. Обратите внимание, что мы построили преобразованный журнал для проверки. Это нормально, но теперь, чтобы получить RMSE, было бы неплохо иметь это число в нашей исходной шкале. Мы просто получим инверсию np.log, которая является np.exp, для наших прогнозируемых значений и используем исходный набор для наших истинных значений (*использование ‘np.exp(log_toppick)’ также сработает).

Интересно, что наш RMSE ниже нашего базового уровня (958), что хорошо, но выше, чем в нашей последней итерации. На данный момент, поскольку предположения нашей модели подтверждены, это более сильная модель. Давайте пойдем с этим и построим 5-летний прогноз этой модели!

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

Используя нашу лучшую модель, мы можем предсказать 82,2% положительной пятилетней окупаемости инвестиций для нашего почтового индекса! Время двигаться.

А если серьезно, обратите внимание на доверительный интервал, выделенный серым цветом. По мере продвижения прогноза в будущее эта мера становится намного больше. Трудно получить такую ​​уверенность так далеко в будущем, поэтому я бы предложил постоянно создавать новую модель для проверки. Еще одно важное замечание заключается в том, что наш набор данных был только до 2018 года и, следовательно, не учитывает влияние текущей пандемии COVID-19. Будущие исследования требуют более свежего набора данных, однако это упражнение предназначено для того, чтобы провести вас через процесс моделирования временных рядов, предсказания/проверки и прогнозирования.

Я надеюсь, что вы смогли что-то вынести из этого поста, и, конечно же, если у вас есть какие-либо вопросы или советы, связанные с моим процессом или методологией, отправьте мне сообщение!