Как использовать подходы моделирования ARIMA для построения собственных финансовых моделей

Вступление

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

Если вы еще не сделали этого, настройте среду, как описано в этом сообщении!

ARIMA

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

Прежде чем продолжить, важно иметь хотя бы базовое понимание.

Хорошо… давайте перейдем к делу. Следует отметить, что цена AAPL Close не является постоянной. Существует четкая тенденция и потенциальные вариации со временем. Один быстрый и грязный способ определить, насколько сильно мы должны «стационаризовать» наши данные, - это посмотреть на уровень дифференцирования с минимальной дисперсией:

# check for minimum variance
print(aapl_split_week.Close.std())
print(aapl_split_week.Close.diff().std())
print(aapl_split_week.Close.diff().diff().std())
print(aapl_split_week.Close.diff().diff().diff().std())

24.67813156581174

4.136784064890053

6.000855950552649

10.430941061905392

Основываясь на этих результатах, мы отмечаем самую низкую дисперсию на одном уровне различия. Мы будем использовать эту информацию при определении i в нашей модели ARIMA. Однако, прежде чем мы продолжим, мы должны взять на себя обязательство использовать SARIMAX, который добавляет компонент S для сезонности (вероятно, важный аспект движения фондового рынка) и X, который мы при желании можно использовать для экзогенных переменных.

# we might need to install dev version for statespace functionality
#!pip install git+https://github.com/statsmodels/statsmodels.git
import statsmodels.api as sm
# fit SARIMA on weekly data
sar = sm.tsa.statespace.SARIMAX(aapl_split_week.Close, order=(1,0,0), seasonal_order=(1,1,0,52), trend='c').fit()
sar.summary()

Я принял здесь ряд решений, основанных на дедуктивных рассуждениях:

  1. Еженедельные данные могут иметь 4-, 13- или 52-периодную цикличность.
  2. Нам нужен один уровень дифференцирования, и, согласно правилам SARIMA, он сначала применяется к сезонной составляющей.
  3. Компоненты авторегрессии - отличное место для инициализации подгонки нашей модели.
  4. Мы можем предположить постоянный c тренд, основываясь на быстром взгляде на недельную дату на нашем временном интервале:
aapl_split_week.Close.plot();

Теперь мы можем использовать метод gridsearch или auto-ARIMA, если вы используете пакет, который его поддерживает, для оптимизации параметров нашей модели. Вот несколько полезных ресурсов, которые помогут вам в подходе к поиску сетки. Также существует Метод Бокса-Дженкинса, который использует немного черной магии и анализ графиков ACF и PACF, чтобы понять, какие ручки повернуть.

При использовании Box-Jenkins ниже представлена ​​вспомогательная функция для графиков ACF и PACF; Далее я рассмотрю некоторые из моих методик настройки модели:

import statsmodels.tsa.api as smt
def plots(data, lags=None):
    layout = (1, 3)
    raw  = plt.subplot2grid(layout, (0, 0))
    acf  = plt.subplot2grid(layout, (0, 1))
    pacf = plt.subplot2grid(layout, (0, 2))
    
    data.plot(ax=raw)
    smt.graphics.plot_acf(data, lags=lags, ax=acf)
    smt.graphics.plot_pacf(data, lags=lags, ax=pacf)
    sns.despine()
    plt.tight_layout()
# plot resids
plots(sar.resid, lags=55);

Анализ

Мы замечаем несколько вещей в остаточных результатах слева направо:

  • Остатки имеют определенный образец: нам нужна более сложная модель, чтобы извлечь закономерности.
  • ACF выглядит как качающийся подвесной мост.
  • PACF имеет значительные значения (за пределами синей полосы) для задержек 1, 2, 6 и 7. Другие задержки в будущем действительно не могут быть «достигнуты» и поэтому не вызывают особого беспокойства.
  • Наконец, PACF показывает большой скачок с отставанием в 52 недели, что идеально! Об этом позаботится сезонный компонент SARIMAX.

Кроме того, в отношении того, какие метрики использовать для определения «улучшения», AIC и BIC лучше (отраслевой консенсус), чем такие метрики, как RMSE, потому что они обеспечивают внутреннюю регуляризацию, штрафуя модели за количество и размер параметров.

Отсюда вы можете использовать Метод Бокса-Дженкинса или предпочтительные подходы авто-ARIMA, которые поддерживают несколько пакетов, чтобы найти правильную структуру модели и значения гиперпараметров.

Заключение

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

Удачного моделирования!