Как использовать подходы моделирования ARIMA для построения собственных финансовых моделей
Вступление
За последние пару лет у меня была возможность применить методы машинного обучения в финансовом секторе. В этом обзоре я покажу вам, как использовать подходы моделирования ARIMA для построения ваших собственных финансовых моделей!
Если вы еще не сделали этого, настройте среду, как описано в этом сообщении!
ARIMA
Глубокое понимание того, как работает ARIMA, выходит за рамки этой статьи. В качестве отличных теоретических ресурсов я рекомендую:
- Моя мастерская на ODSC East 2017
- ПРОШИВКА ВЫ CANalytics
- Исчерпывающий путеводитель по герцогу
- Этот ответ Quora для быстрого обзора
Прежде чем продолжить, важно иметь хотя бы базовое понимание.
Хорошо… давайте перейдем к делу. Следует отметить, что цена 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()
Я принял здесь ряд решений, основанных на дедуктивных рассуждениях:
- Еженедельные данные могут иметь 4-, 13- или 52-периодную цикличность.
- Нам нужен один уровень дифференцирования, и, согласно правилам SARIMA, он сначала применяется к сезонной составляющей.
- Компоненты авторегрессии - отличное место для инициализации подгонки нашей модели.
- Мы можем предположить постоянный
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 и ее разновидности были полностью превзойдены по точности благодаря глубокому обучению и другим продвинутым методам прогнозирования, он продолжает процветать благодаря своей простоте, быстрому расчету прогнозов и легкости интерпретации. Последнее преимущество дает представление о запаздывающих корреляциях, окнах спада и других взаимосвязях данных. Это делает его отличной отправной точкой для начинающих прогнозировать.
Удачного моделирования!