Визуализация данных

Статистическое прогнозирование данных временных рядов, часть 4: Прогнозирование волатильности с использованием GARCH

В этой серии статей рыночный индекс S&P 500 анализируется с использованием популярной статистической модели: SARIMA (сезонная авторегрессионная интегрированная скользящая средняя) и GARCH (обобщенная авторегрессионная условная гетероскедастичность).

В первой части серия была удалена из yfinance API на python. Он был очищен и использован для расчета доходности S&P 500 (процентное изменение последовательных цен) и волатильности (величина доходности). Во второй части был использован ряд методов исследования временных рядов для получения информации на основе данных о таких характеристиках, как тенденция, сезонность, стационарность и т. Д. На основе этих идей в третьей части был исследован класс моделей SARIMA.

В этой статье модель GARCH построена для моделирования волатильности доходности S&P 500. Код, используемый в этой статье, взят из записной книжки Volatility Models / GARCH for SPX Volatility.ipynb в этом репозитории.

Оглавление

  1. Импорт данных
  2. Поезд-тестовый сплит
  3. Модель GARCH
  4. Волатильность доходности S&P 500
  5. Оценка параметров для GARCH
  6. Подбираем GARCH для доходности S&P 500
  7. Прогнозирование волатильности
  8. Оценка производительности
  9. Заключение
  10. Ссылки на другие части этой серии
  11. использованная литература

Импорт данных

Здесь мы импортируем набор данных, который был забракован и предварительно обработан в первой части этой серии. Обратитесь к части 1, чтобы подготовить данные, или загрузите файл data.csv из этого репозитория.

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

Поезд-тестовый сплит

Теперь мы разделим данные на обучающие и тестовые наборы. Здесь все наблюдения 2019–01–01 и из 2019–01–01 образуют набор тестов, а все наблюдения до него - набор поездов.

Модель GARCH

GARCH означает Обобщенная авторегрессивная условная гетероскедастичность. Условная гетероскедастичность равносильна условной дисперсии (или условной изменчивости) во временном ряду. Модель GARCH использует концепцию кластеризации волатильности для моделирования волатильности ряда. Кластеризация волатильности по существу означает, что сегодняшняя волатильность зависит от волатильности на последних временных шагах. Модель GARCH задается с помощью двух параметров: GARCH (p, q). Модель GARCH сформулирована, как показано ниже.

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

Волатильность доходности S&P 500

В этой статье волатильность доходности S&P 500 моделируется с использованием GARCH. Чтобы проверить, соответствует ли прогнозируемая волатильность волатильности доходности в будущем, мы рассчитываем величину доходности S&P 500 и сохраняем ее в серии spx_vol.

Таким образом, модель соответствует ряду spx_ret, а прогнозируемая волатильность сравнивается с spx_vol.

Оценка параметров для GARCH

График PACF (функция частичной автокорреляции) используется для получения начальной оценки параметров: p и q модели GARCH. Количество значительных лагов на этом графике используется в качестве исходных параметров. Затем сводная таблица модели (отображается после подбора модели) используется, чтобы понять, какие коэффициенты в модели являются значимыми. Исходя из этого, модель доводится до тонкой настройки.

Теперь сгенерирован график PACF для доходности S&P 500:

С помощью функции plot_pacf() в пакете statsmodels.graphics.tsaplots строится график PACF для серии spx_ret. При изучении сюжета первые 2 лага значительны. Следовательно, модель GARCH (2, 2) подходит в качестве начальной отправной точки.

Подбираем GARCH для доходности S&P 500

Теперь модель GARCH (2, 2) подходит для серии S&P 500 Returns.

Функция arch_model() в пакете arch используется для реализации модели GARCH. Упомянутая здесь реализация основана на той, что упоминается в официальной документации здесь. Перед подгонкой модели подготавливается новый фрейм данных. Этот фрейм данных состоит из всех временных шагов в исходном наборе данных (до разделения на поезд-тест). Временные шаги обучения заняты доходностями S&P 500. Они фактически используются для обучения модели GARCH. Периоды тестирования заняты возвратами, наблюдавшимися на один временной шаг ранее. Это равносильно утверждению, что модель прогнозирует волатильность доходности завтра, используя доходность, наблюдаемую сегодня.

Модель определяется методом arch_model(). Функция принимает в качестве входных данных упомянутый выше набор данных и параметры: p=2 и q=2. Аргумент vol= “GARCH” указывает, что используемая модель - GARCH. Определение модели сохраняется в переменной model, и для нее вызывается метод fit() для обучения модели. Аргумент last_obs используется, чтобы гарантировать, что модель обучается только на данных поезда. Подгонянная модель сохраняется в model_results переменной, и сводка этого отображается путем вызова summary() на подобранной модели.

Первые несколько строк перед сводной таблицей в выходном изображении показывают информацию о подгонке, отображаемую после каждой итерации функцией fit(). Аргумент update_freq=5 в функции fit() ограничивает отображение этой информации после каждых 5 итераций. Далее в сводной таблице есть 3 раздела: Постоянное среднее - результаты модели GARCH, Средняя модель и Модель волатильности. В разделе модели волатильности P ‹| Z | столбец четко указывает, что все коэффициенты значимы на уровне достоверности 5%.

Прогнозирование волатильности

Здесь подобранная модель используется для прогнозирования волатильности доходности S&P 500 в тестовом наборе.

Метод forecast() используется на подобранной модели: model_results. Это выводит объект ARCHModelForecast, который содержит прогнозы для модели среднего и модели волатильности. Затем вызывается атрибут residual_variance для получения прогнозов волатильности. Прогнозы хранятся в кадре данных с тем же количеством периодов, что и в data. Все периоды, на которых обучается модель, имеют NaN значений, и фактически заполняются только периоды, для которых модель должна генерировать прогнозы. В этом случае все периоды тестового набора имеют действительные числа, а периоды набора - NaN. Затем прогнозы наносятся на график в зависимости от волатильности (величины доходности), рассчитанной эвристически.

Оценка производительности

Изображение выше показывает, что всякий раз, когда прогнозируемая волатильность модели резко возрастает, величина доходности (волатильность, рассчитанная эвристически) также сильно колеблется. С другой стороны, когда прогнозируемая волатильность стабильна, величина доходности также относительно стабильна. Таким образом, наша модель может четко определять периоды высокой и низкой волатильности в S&P 500 Returns.

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

Заключение

В этой статье волатильность доходности S&P 500 была проанализирована и спрогнозирована с использованием модели GARCH. В следующей статье сначала будет использована модель ARIMA для соответствия доходности S&P 500. Затем модель GARCH будет использоваться для моделирования остатков ARIMA. Это позволит нам генерировать гораздо более надежные доверительные интервалы, чем те, которые генерируются только моделью ARIMA.

Ссылки на другие части этой серии

использованная литература

[1] Курс 365DataScience по анализу временных рядов

[2] блоги Machinelearningmaster по анализу временных рядов

[3] Статья в Википедии о GARCH

[4] Видео ritvikmath на YouTube о модели GARCH.

[5] арочная документация для прогнозирования с использованием модели GARCH.