Понимание термина разницы

📚 Введение

В предыдущей статье этой серии мы видели влияние термина тренда на результат модели ARIMA. В этой статье будет рассмотрен термин «разница» «d» и показано, как он моделируется и что он представляет.

📖 Предлагаемые предыдущие чтения

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

Практическое руководство по моделям ARIMA с использованием PyCaret — Часть 1

Практическое руководство по моделям ARIMA с использованием PyCaret — Часть 2

1️⃣ Обзор «Разница — d» в моделях ARIMA

На очень высоком уровне дифференцирование означает, что значение временного ряда в любой данный момент времени зависит от значения (значений) в предыдущий момент времени. Разница «d = 1» означает, что значение в любой момент времени зависит от предыдущего момента времени (задается уравнением 1). Член эпсилон представляет шумовой член, который не может быть смоделирован.

Важное примечание. Процесс, который генерирует временной ряд с использованием уравнения 1, также называется «Случайное блуждание». Большинство биржевых данных следуют этому образцу. Если вы внимательно посмотрите, то поймете, что при правильном моделировании наилучшее предсказание будущей точки совпадает с последней известной точкой. Следовательно, модели цен на акции, использующие традиционные подходы, такие как ARIMA, не дают «полезных» моделей. Нужна ли нам модель, чтобы сказать нам, что завтрашняя цена акции будет такой же, как сегодняшняя?

2️⃣️ Понимание термина разницы с использованием PyCaret

👉 Шаг 1. Настройка эксперимента с временными рядами PyCaret

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

#### Get data from data playground ----
y = get_data("1", folder="time_series/random_walk")
exp = TimeSeriesExperiment()
exp.setup(data=y, seasonal_period=1, fh=30, session_id=42)
exp.plot_model()

👉 Шаг 2. Выполните EDA

Классический способ диагностировать, был ли временной ряд сгенерирован с использованием процесса случайного блуждания, — это посмотреть на графики ACF и PACF. Графики ACF будут показывать расширенные автокорреляции [1]. Графики PACF должны показывать пик при задержке = 1, и пик должен быть очень близок к 1 по величине. Все остальные лаги будут незначительными. Вы можете думать о величине PACF как о коэффициенте запаздывающего значения y(t-1) в уравнении 1. Я напишу об этом больше в другой статье.

exp.plot_model(plot="acf")
exp.plot_model(plot="pacf")

👉 Шаг 3. Теоретические расчеты

Для модели случайного блуждания мы можем использовать уравнение 1, которое поможет нам вычислить теоретические значения. По сути, следующий момент времени прогнозируется как последний «известный» момент времени. Для внутривыборочных прогнозов (т. =1 и t=10 находятся в выборке).

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

👉 Шаг 4. Создайте модель с помощью PyCaret

#### Random Walk Model (without trend) ----
model3a = exp.create_model(
    "arima",
    order=(0, 1, 0),
    seasonal_order=(0, 0, 0, 0),
    trend="n"
)

👉 Шаг 5. Анализ результатов

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

summarize_model(model3a)

Статистическая сводка показывает, что созданная модель является моделью SARIMAX(0,1,0), что соответствует нашему желанию построить модель с d=1. Остаточная сигма2 (необъяснимая дисперсия) составляет 0,9720 и представляет член epsilon в уравнении 1.

get_residual_properties(model3a)

Глядя на остатки модели, мы видим, что остатки действительно имеют дисперсию 0,9720, что соответствует статистической сводке. Далее, давайте построим прогнозы и сравним их с нашей теоретической основой.

plot_predictions(model3a)

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

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

👉 Шаг 6. Проверка соответствия модели

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

exp.check_stats(model3a, test="white_noise")

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

🚀 Заключение

Надеемся, что эта простая модель заложила для нас хорошую основу для понимания внутренней работы «разностного члена — d» в модели ARIMA. В следующей статье мы увидим, как мы можем объединить термин «разница» «d» с компонентом «тренд», о котором мы узнали в предыдущей статье этой серии. До тех пор, если вы хотите связаться со мной в моих социальных сетях (я часто публикую сообщения об анализе временных рядов), вы можете найти меня ниже. Это все на данный момент. Удачных прогнозов!

🔗 ЛинкедИн

🐦 Твиттер

📘 Гитхаб

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



📗 Ресурсы

  1. Jupyter Notebook, содержащий код этой статьи.

📚 Ссылки

[1] Исследовательский анализ временных рядов | Автокорреляционная функция (АКФ)