Contents
- 1 Временные ряды. Прогнозирование и модели. Библиотеки Python
- 2 Оценка и тестирование модели
- 3 Анализ временных рядов statsmodels.tsa в Python
- 4 Регрессия
- 5 Рекомендованная литература и видео
- 6 GitHub репозитории по теме временных рядов
Временные ряды. Прогнозирование и модели. Библиотеки Python
Временной ряд — это последовательность наблюдений за некоторым показателем, которая зафиксирована во времени с регулярными интервалами. Примеры временных рядов включают ежемесячные данные о продажах, ежедневные курсы валют, годовые показатели температуры и так далее. Временные ряды могут анализироваться для обнаружения тенденций, циклов, сезонных колебаний и других закономерностей.
Модель временного ряда — это набор точек данных, упорядоченных во времени, где время является независимой переменной. Эти модели используются для анализа и прогнозирования будущего.
Чтобы понять модели временных рядов и как их анализировать, полезно знать их три основные характеристики:
- автокорреляцию,
- сезонность и
- стационарность.
Какими бывают данные
- Межобъектные (cross-sectional) — несколько объектов, один момент времени: цены на квартиры в Москве сегодня.
- Временные ряды (time series) — один объект, различные моменты времени: курс рубля, возвращаемость пользователей, цена акции.
- Панельные данные (panel data) — несколько объектов в разные моменты времени: выборки по нескольким странам/фирмам за несколько лет.
Задачи, связанные с временными рядами:
- Прогнозирование — хотим узнать, что будет дальше
- Поиск аномалий — хотим проанализировать, что было в прошлом
- Кластеризация — хотим сегментировать пользователей по их поведению
- Поиск разладок — хотим во-время увидеть, что какая-то метрика стала вести себя по-новому
- Использование временных рядов в качестве признаков в обычных моделях
Особенности временных рядов:
- упорядоченность во времени (хронологический порядок);
- зависимость от прошлого (“память”, серийная или автокорреляция);
- различаются краткосрочные и долгосрочные зависимости и модели;
- часто встречается феномен “ложной регрессии”;
- бывает небольшое число наблюдений (как правило при работе с макроданными), которое невозможно увеличить (т.к. изменяется вид или структура зависимости).
Наиболее распространённые модели временных рядов (одномерные и многомерные):
- Стационарные ряды;
- Стационарные относительно тренда или TS-ряды;
- Ряды с единичным корнем или DS-ряды;
- Ряды с переменной волатильностью или с условной гетероскедастичностью.
Основные компоненты временного ряда
Анализ временных рядов требует понимания их основных составляющих. Каждый временной ряд можно разложить на несколько ключевых компонентов, которые помогают лучше понять структуру данных и сделать более точные прогнозы.
Trend — Тренд (временной ряд тренд)
Тренд отражает долгосрочную тенденцию изменения значений временного ряда. Он показывает общее направление движения данных: возрастающее, убывающее или стабильное. Тренд может быть линейным или нелинейным, и его выделение важно для анализа общей динамики. Например, увеличение числа пользователей интернет-услуг со временем может указывать на возрастающий тренд.
Примеры трендов:
- Линейный тренд: когда значения увеличиваются или уменьшаются с постоянной скоростью.
- Экспоненциальный тренд: когда скорость роста или падения ускоряется со временем.
Seasonal — Сезонность
Сезонность — это повторяющиеся и предсказуемые колебания значений временного ряда, связанные с определенными периодами времени (день, неделя, месяц, год). Сезонные колебания часто обусловлены внешними факторами, такими как погодные условия, праздничные периоды или изменение потребительских предпочтений.
Примеры сезонности:
- Рост продаж кондиционеров в летние месяцы.
- Увеличение количества поисковых запросов на подарки перед Новым годом.
Cyclical — Цикличность
Цикличность характеризуется более долгосрочными колебаниями значений, которые не имеют строго определенного периода, в отличие от сезонности. Циклы могут быть вызваны экономическими условиями, деловыми циклами или другими факторами, влияющими на данные на протяжении нескольких лет. Анализ циклов помогает понять влияние глобальных макроэкономических факторов на временной ряд.
Примеры цикличности:
- Экономические кризисы, которые происходят каждые 7-10 лет.
- Периоды подъема и спада на фондовых рынках.
Irregular — Случайность (случайные временные ряды)
Случайная компонента — это остаток временного ряда после устранения тренда, сезонности и цикличности. Она представляет собой шум или непредсказуемые колебания, вызванные случайными событиями. Случайность невозможно предсказать или моделировать, но она важна для понимания общей структуры данных и улучшения точности прогнозов.
Примеры случайности:
- Неожиданные изменения курса валют из-за внезапных политических событий.
- Колебания цен на акции в результате случайных новостей или слухов.
То есть временной ряд можно разложить на компоненты:
В Python в модуле statsmodels
есть функция seasonal_decompose()
, с помощью которой можно выделить и визуализировать компоненты временного ряда.
Статистические меры временных рядов
- Математическое ожидание E[X] или M[X] — среднее значение случайной величины (взвешенное по вероятностям возможных значений).
- Дисперсия случайной величины — мера разброса значений случайной величины относительно её математического ожидания. Обозначается D[X] в русской литературе и Var(X) в зарубежной. Квадратный корень из дисперсии, равный σ, называется стандартным отклонением.
- Ковариация (cov) это мера совместной изменчивости двух случайных величин. Нормализованная версия ковариации — коэффициент корреляции — это сила линейной зависимости.
Автокорреляция
Автокорреляция — это статистическая мера, которая описывает, насколько текущие значения временного ряда связаны с его предыдущими значениями. Проще говоря, автокорреляция показывает, есть ли закономерность в данных, то есть повторяются ли значения ряда на каком-то временном интервале (лаге).
Положительная автокорреляция: означает, что высокие значения временного ряда имеют тенденцию следовать за высокими значениями, а низкие — за низкими. Например, если температура в один день высокая, то с высокой вероятностью она будет высокой и на следующий день.
Отрицательная автокорреляция: означает, что высокие значения временного ряда имеют тенденцию следовать за низкими значениями и наоборот.
Автокорреляция может варьироваться от -1 до 1. Значение 1 говорит о полной положительной зависимости, -1 — о полной отрицательной зависимости, а значение 0 указывает на отсутствие автокорреляции.
Автокорреляция помогает определить, есть ли паттерны или циклы в данных, что важно для прогнозирования.
В статистическом моделировании временных рядов автокорреляция остатков (ошибок модели) используется для проверки качества модели. Если остатки модели имеют значимую автокорреляцию, это может указывать на то, что модель недостаточно хорошо описывает данные.
Чем отличается автокорреляция от ковариации?
Ковариация измеряет степень линейной зависимости между двумя случайными переменными. Она показывает, как изменения одной переменной связаны с изменениями другой.
Автокорреляция измеряет зависимость значений одного и того же временного ряда, но с разными временными отрезками (лагами). Это мера того, насколько текущее значение ряда связано с его прошлыми значениями.
Ковариация применяется для оценки зависимости между двумя разными переменными, тогда как автокорреляция используется для оценки зависимости между значениями одного и того же временного ряда на разных лагах.
Ковариация изучает взаимосвязь между двумя переменными, а автокорреляция — взаимосвязь между значениями одной переменной, но в разные моменты времени.
Ковариация даёт представление о линейной зависимости между двумя переменными в общем случае, автокорреляция — о повторяемости паттернов во временном ряду.
Стационарный временной ряд
Стационарным называют временной ряд, статистические свойства которого не изменяются со временем.
Временной ряд {xt} называется стационарным (в широком смысле), если
1. E[xt] ≡ const (среднее постоянно во времени);
2. cov(xt, xt+h) = γ(h) (ковариация зависит только от лага h).
Понятие стационарного временного ряда означает, что его среднее значение не изменяется во времени, т.е. временной ряд не имеет тренда.
Кроме того, ковариация между разными элементами временного ряда (как между случайными величинами) зависит только от того, насколько сильно они отдалены друг от друга во времени. Величина h, характеризующая разницу во времени между элементами временного ряда, называется лаговой переменной или запаздыванием. Так как
γ(0) = cov(xt, xt) = Var(xt)
то дисперсия стационарного временного ряда также не меняется со временем.
Слабая стационарность
Ряд слабо стационарен (стационарен в широком смысле), если характеристики этого ряда не зависят от времени.
Свойства слабой стационарности:
- Дисперсия и матожидание не меняются во времени
- Внутри наблюдаются одинаковые паттерны
- Судя по всему, ряд стационарен
- Есть формальные статистические тесты на стационарность
Как проверить, является ли процесс стационарным (Тест Дики-Фуллера)
Тест Дики-Фуллера — это статистический тест, используемый для оценки стационарности временного ряда. Он оценивает нулевую гипотезу, чтобы определить, присутствует ли единичный корень. Если уравнение возвращает p>0, то процесс не является стационарным. Если p=0, то процесс считается стационарным.
Процесс ниже не является стационарным. Обратите внимание, что среднее значение не является постоянным во времени.
Если p > 0, то процесс не является стационарным.
При p = 0 процесс считается стационарным.
Нестационарный временной ряд
Нестационарным называют временной ряд, свойства которого изменяются со временем. Это может проявляться в виде трендов, изменения дисперсии, сезонных колебаний или изменения автокорреляции. Нестационарные ряды чаще всего встречаются в реальной жизни. Примеры таких рядов:
- Тренд — длительное изменение среднего значения, например, рост температуры с течением времени.
- Сезонность — повторяющиеся изменения с фиксированной периодичностью, например, ежемесячные колебания продаж.
- Изменяющаяся дисперсия — колебания, амплитуда которых изменяется с течением времени.
Для анализа и прогнозирования временных рядов часто требуется преобразование нестационарного ряда в стационарный.
Методы преобразования нестационарного ряда в стационарный
1. Дифференцирование — это процесс вычисления разностей между последовательными значениями временного ряда. Оно помогает устранить тренды и сделать ряд стационарным.
Y′t = Y_t − Y_t−1
2. Логарифмирование
Если временной ряд имеет экспоненциальный рост или изменяющуюся дисперсию, можно применить логарифмирование. Это стабилизирует дисперсию и может помочь удалить экспоненциальные тренды.
Логарифм — это математическая операция, которая отвечает на вопрос: «Во сколько раз нужно умножить число, называемое основанием логарифма, чтобы получить другое число?». Логарифм — это обратная операция по отношению к возведению в степень.
Y′t = log(Y_t)
Логарифмирование также может быть полезным перед дифференцированием.
3. Декомпозиция — разбивает временной ряд на компоненты: тренд, сезонность и остатки (шум). После этого тренд и/или сезонность могут быть удалены для получения стационарного ряда.
4. Удаление тренда: Если временной ряд содержит только тренд (без сезонности), можно просто вычесть трендовую линию из данных. Это может быть сделано путем регрессии на временной компоненте и вычитания прогнозируемых значений.
5. Сезонное дифференцирование: Если в данных присутствует сезонность, её можно удалить с помощью сезонного дифференцирования, где вычитается значение ряда, наблюдавшееся в предыдущем сезоне.
6. Применение скользящего среднего: может использоваться для сглаживания временного ряда и удаления краткосрочных колебаний. Однако это может быть полезно для устранения сезонных колебаний, но не для устранения трендов.
7. Преобразование Бокса-Кокса — это метод нелинейного преобразования данных, который может использоваться для стабилизации дисперсии и улучшения нормальности временного ряда.
8. Преобразование разностного ряда с помощью комбинации методов
Часто несколько методов могут применяться последовательно или в комбинации, например, логарифмирование и затем дифференцирование, или дифференцирование и затем удаление тренда.
Зачем нестационарный временной ряд преобразовывать в стационарный?
Преобразование нестационарного временного ряда в стационарный является важным этапом анализа временных рядов по нескольким причинам:
Математическая стабильность моделей:
Многие стандартные методы анализа и моделирования временных рядов, такие как авторегрессионные модели (AR), модели скользящего среднего (MA), и их комбинации (ARIMA), предполагают, что данные стационарны. Стационарность позволяет применять эти модели корректно и надежно.
В стационарных рядах средние значения, дисперсия и автокорреляция постоянны во времени, что упрощает моделирование и интерпретацию.
Улучшение прогнозируемости:
Стационарные ряды обычно легче прогнозировать, так как их характеристики стабильны и не изменяются со временем.
В нестационарных рядах, где могут наблюдаться тренды, сезонные эффекты или изменение дисперсии, точность прогнозов может быть снижена.
Выявление реальных зависимостей:
Преобразование ряда к стационарности помогает лучше выявить истинные зависимости между переменными. Например, в нестационарных рядах могут возникать ложные корреляции между переменными, которые исчезают при переходе к стационарности.
Устранение ложных трендов:
В нестационарных рядах могут присутствовать тренды, которые создают видимость зависимости, которая на самом деле отсутствует. Преобразование ряда в стационарный позволяет устранить такие тренды и сконцентрироваться на реальных колебаниях и взаимосвязях.
Устранение проблемы изменчивости дисперсии:
В нестационарных рядах дисперсия может изменяться с течением времени, что затрудняет анализ. Преобразование в стационарный ряд стабилизирует дисперсию и делает анализ более надежным.
Преобразование нестационарного ряда в стационарный — это ключевой шаг, который позволяет применять стандартные методы анализа временных рядов, улучшает прогнозы и позволяет выявлять реальные закономерности и зависимости в данных.
Кросс-валидация на временных рядах
Кросс-валидация на временных рядах — это метод оценки моделей на данных с временной зависимостью, который учитывает временную структуру данных. В отличие от стандартной кросс-валидации, где данные перемешиваются и случайно делятся на обучающие и тестовые наборы, в временных рядах важно сохранять хронологический порядок, чтобы модель учитывала временные зависимости и правильно прогнозировала будущее.
Временные ряды имеют временную зависимость: прошлые значения влияют на будущие. Это означает, что мы не можем просто перемешать данные, как в классической кросс-валидации. Поэтому кросс-валидация должна быть адаптирована к таким данным.
! При моделировании временных рядов, мы должны быть аккуратными с их структурой.
Основные методы кросс-валидации на временных рядах:
1. Расширяющаяся (разрастающаяся) кросс-валидация (Expanding Window)
Модель обучается на увеличивающемся наборе данных, начиная с минимального объёма и добавляя новые данные на каждом шаге.
Например, сначала модель обучается на первых двух годах данных, затем на трёх годах и так далее. Каждый новый набор включает предыдущие данные плюс новый временной отрезок.
Это имитирует реальный процесс, где мы прогнозируем будущее, опираясь на весь доступный прошлый опыт.
Пример:
Первый шаг: обучающая выборка: [данные за 1-й год], тестовая выборка: [данные за 2-й год].
Второй шаг: обучающая выборка: [данные за 1-й и 2-й годы], тестовая выборка: [данные за 3-й год].
И так далее.
2. Скользящее окно (Rolling Window)
Модель обучается на фиксированном объёме данных, который «скользит» по временной шкале, каждый раз оставляя самые старые данные и добавляя новые.
Например, если окно длиной в два года, то на первом шаге модель обучается на данных за 1-й и 2-й годы и тестируется на данных за 3-й год. На втором шаге обучающая выборка сдвигается на один год: обучающая выборка: [данные за 2-й и 3-й годы], тестовая выборка: [данные за 4-й год].
Этот метод полезен, если предполагается, что данные могут изменяться со временем, и старые данные могут быть менее релевантными.
Пример:
Первый шаг: обучающая выборка: [данные за 1-й и 2-й годы], тестовая выборка: [данные за 3-й год].
Второй шаг: обучающая выборка: [данные за 2-й и 3-й годы], тестовая выборка: [данные за 4-й год].
И так далее.
3. Блочная кросс-валидация (Blocked Cross-Validation)
В этом подходе данные разбиваются на несколько блоков, и каждый блок поочередно используется в качестве тестовой выборки, в то время как остальные блоки служат обучающей выборкой. Важно, чтобы блоки шли последовательно во времени.
Например, если данные разбиты на пять блоков, первый блок может быть тестовым, а остальные четыре — обучающими. Затем второй блок становится тестовым, а остальные — обучающими и так далее.
Пример:
Первый шаг: обучающая выборка: [данные за 1-й, 2-й, 3-й и 4-й блоки], тестовая выборка: [данные за 5-й блок].
Второй шаг: обучающая выборка: [данные за 1-й, 2-й, 3-й и 5-й блоки], тестовая выборка: [данные за 4-й блок].
И так далее.
Применение и важность кросс-валидации на временных рядах
Кросс-валидация позволяет:
Оценить стабильность и точность модели прогнозирования.
Выявить, как хорошо модель справляется с предсказанием будущих значений на основе доступных данных.
Минимизировать риски переобучения и проверить, не слишком ли модель ориентирована на определённые части данных.
Модели в анализе временных рядов
ARIMA (Autoregressive Integrated Moving Average): Это популярная модель временных рядов, которая сочетает в себе авторегрессию (AR), скользящее среднее (MA) и интеграцию (I) для работы с нестационарными рядами. Она хорошо подходит для данных с трендами и сезонностью.
В ARIMA «интеграция» фактически означает количество дифференцирований, необходимых для того, чтобы преобразовать нестационарный ряд в стационарный.
- AR (Autoregressive) — авторегрессия, где текущее значение временного ряда зависит от нескольких предыдущих значений.
- I (Integrated) — интегрированная часть, которая позволяет моделировать разности ряда для устранения тренда.
- MA (Moving Average) — скользящее среднее, учитывающее ошибки предыдущих прогнозов.
Модель ARIMA(p,d,q)
ARIMA комбинирует все три компонента и описывается тремя параметрами:
- p — порядок авторегрессии (количество лагов),
- d — порядок дифференцирования (количество примененных дифференцирований для стационарности),
- q — порядок скользящей средней (количество лагов ошибок предсказания).
Пример: ARIMA(2, 1, 1) означает, что используется авторегрессия второго порядка (зависимость от двух предыдущих значений), ряд был дифференцирован один раз для достижения стационарности, и используется модель скользящей средней первого порядка.
Применение:
ARIMA используется для предсказания временных рядов, таких как экономические показатели, уровень инфляции, продаж, спроса на продукты и другие.
Перед построением модели часто необходимо убедиться, что временной ряд стационарен, и определить оптимальные параметры p, d и q.
SARIMA (Seasonal ARIMA): Это расширение модели ARIMA, которая включает сезонные компоненты, чтобы учитывать повторяющиеся паттерны, возникающие в определенные временные интервалы.
Exponential Smoothing (Экспоненциальное сглаживание): Модель, которая использует экспоненциальные весовые коэффициенты для учета прошлых данных, при этом более поздние наблюдения имеют больший вес. Примеры таких моделей включают Holt-Winters, который учитывает тренды и сезонность.
Prophet: Модель, разработанная компанией Facebook, которая ориентирована на данные с сильной сезонностью и трендами. Эта модель автоматически определяет и учитывает такие особенности в данных.
LSTM (Long Short-Term Memory): Нейронная сеть, которая используется для прогнозирования временных рядов, особенно когда существует сложная нелинейная зависимость в данных.
XGBoost, Random Forest и другие алгоритмы машинного обучения: Эти алгоритмы могут быть адаптированы для работы с временными рядами, используя подходы, такие как генерация временных признаков, чтобы лучше моделировать зависимости.
Основные модели стационарных временных рядов
Модель скользящего среднего MA (Moving Average)
Модель авторегрессии AR (AutoRegression)
Общая смешанная модель ARMA авторегрессии-скользящего среднего
1. Авторегрессионная модель (AR) — описывает временной ряд как линейную комбинацию его прошлых значений с добавлением случайного шума.
Библиотека: statsmodels
Модуль: statsmodels.tsa.ar_model.AutoReg
1 2 3 4 5 |
from statsmodels.tsa.ar_model import AutoReg model = AutoReg(data, lags=lag_order) model_fit = model.fit() predictions = model_fit.predict(start, end) |
2. Модель скользящего среднего (MA) — описывает текущее значение временного ряда как линейную комбинацию прошлых ошибок (шумов).
Библиотека: statsmodels
Модуль: statsmodels.tsa.arima.model.ARIMA
1 2 3 4 5 |
from statsmodels.tsa.arima.model import ARIMA model = ARIMA(data, order=(0, 0, q)) model_fit = model.fit() predictions = model_fit.predict(start, end) |
3. Автогрегрессионная модель со скользящим средним (ARMA) — объединяет свойства авторегрессионной модели (AR) и модели скользящего среднего (MA). Она используется для моделирования стационарных временных рядов, которые зависят как от своих предыдущих значений, так и от предыдущих ошибок.
Библиотека: statsmodels
Модуль: statsmodels.tsa.arima.model.ARIMA
1 2 3 4 5 |
from statsmodels.tsa.arima.model import ARIMA model = ARIMA(data, order=(p, 0, q)) model_fit = model.fit() predictions = model_fit.predict(start, end) |
4. Автогрегрессионная модель с условной гетероскедастичностью (ARCH) — используется для моделирования временных рядов, где дисперсия меняется с течением времени. Это особенно полезно в финансовых данных, где волатильность может быть непостоянной.
Библиотека: arch
Модуль: arch.arch_model
1 2 3 4 5 |
from arch import arch_model model = arch_model(data, vol='ARCH', p=lag_order) model_fit = model.fit() predictions = model_fit.forecast(horizon=horizon) |
5. Обобщенная автогрегрессионная модель с условной гетероскедастичностью (GARCH) — расширяет модель ARCH, добавляя авторегрессионные компоненты в дисперсию. Она учитывает как прошлые значения дисперсии, так и прошлые ошибки.
Библиотека: arch
Модуль: arch.arch_model
1 2 3 4 5 |
from arch import arch_model model = arch_model(data, vol='GARCH', p=lag_order, q=lag_order) model_fit = model.fit() predictions = model_fit.forecast(horizon=horizon) |
6. Сезонная ARMA (SARMA) — добавляет сезонные компоненты к стандартной ARMA модели, позволяя учитывать цикличность в данных.
Библиотека: statsmodels
Модуль: statsmodels.tsa.statespace.SARIMAX
1 2 3 4 5 |
from statsmodels.tsa.statespace.sarimax import SARIMAX model = SARIMAX(data, order=(p, 0, q), seasonal_order=(P, 0, Q, S)) model_fit = model.fit() predictions = model_fit.predict(start, end) |
Дополнительные библиотеки:
- pmdarima — библиотека для автоматизации выбора лучшей модели ARIMA/SARIMA.
- scikit-learn — для предобработки данных и создания дополнительных признаков.
Что такое гетероскедастичность?
Гетероскедастичность — это термин, используемый в статистике и эконометрике для описания ситуации, когда вариация (разброс) ошибок модели или зависимой переменной изменяется при изменении значений независимых переменных. Проще говоря, это когда величина шума или разброс данных отличается в разных частях данных.
Пример:
Предположим, у вас есть набор данных, описывающий доход людей и их расходы. Если при увеличении дохода людей разброс расходов становится более значительным (например, одни люди с высоким доходом тратят много, а другие — мало), то в таком случае данные будут демонстрировать гетероскедастичность.
Почему это важно?
Гетероскедастичность нарушает одно из основных предположений классической линейной регрессии, которое утверждает, что ошибки (остатки) модели должны иметь постоянную дисперсию (гомоскедастичность). Если это предположение нарушено, оценки модели могут быть неэффективными и ненадежными. Например, стандартные ошибки могут быть некорректными, что приведет к неправильным выводам о значимости коэффициентов.
Типы гетероскедастичности:
- Увеличение дисперсии: Когда разброс увеличивается с увеличением значения независимой переменной.
- Уменьшение дисперсии: Когда разброс уменьшается с увеличением значения независимой переменной.
- Систематические изменения: Когда вариация ошибок зависит от какого-то другого фактора.
Как выявить гетероскедастичность?
- Графический анализ: Построение графика остатков модели против предсказанных значений. Если вы видите, что остатки разбросаны по диагонали или образуют какой-то паттерн, это может быть признаком гетероскедастичности.
- Тесты на гетероскедастичность: Например, тест Бреуша-Пагана (Breusch-Pagan) или тест Уайта (White test).
Методы коррекции гетероскедастичности:
- Моделирование ошибок: Использование моделей, таких как ARCH или GARCH, которые учитывают изменяющуюся дисперсию ошибок.
- Взвешенная регрессия (WLS): Взвешивание данных так, чтобы уменьшить влияние областей с большой дисперсией.
- Преобразования переменных: Логарифмирование или другие нелинейные преобразования данных для стабилизации дисперсии.
Оценка и тестирование модели
Подход Бокса-Дженкинса
Методологию работы со стационарными рядами можно представить в следующем виде:
1. Выбор порядка модели
2. Оценка модели выбранного порядка
3. Проверка “адекватности”
4. Прогнозирование
Для выбора порядка модели традиционно вычисляют выборочные автокорреляционную и частную автокорреляционную функции.
Далее необходимо проверить их значимость. Для этого тестируем гипотезу при фиксированном лаге.
Предварительное тестирование на белый шум
Для построения моделей необходимо провести предварительный анализ стационарного ряда
Информационные критерии
Для сравнения моделей и выбора порядка используются стандартные информационные критерии, которые определяются через ошибку регрессии
— Информационный критерий Акаике
— Информационный критерий Шварца
— Информационный критерий Хеннана-Куина
Алгоритм выбора порядка модели ARMA можно записать следующим образом:
1. оцениваем несколько альтернативных моделей разного порядка (p, q);
2. выбираем модель с минимальным информационным критерием.
Замечание. Эмпирически критерий Акаике имеет тенденцию к завышению порядка при больших выборках поэтому Байесовский критерий или критерий Шварца считается предпочтительнее для оцениванию порядка. Критерий Хеннана-Куина может недооценивать порядок при небольших объемах выборки.
Проверка адекватности модели
Проверка адекватности, т.е. проверка согласованности выбранной и оцененной модели с наблюдениями, как и в регрессионном анализе, основано на исследовании остатков. А именно, остатки должны моделировать процесс нормально распределенного белого шума.
Тесты на автокорреляцию
Тесты на автокорреляцию позволяют проверить “адекватность” выбранного порядка модели. Идея состоит в том, что если порядок модели “правильный”, то остатки uˆt “моделируют” белый шум (в частности, отсутствует автокорреляция).
Так как модель содержит лаговые значения зависимой переменной, то критерий Дарбина–Уотсона для исследования ошибок на автокорреляцию неприменим. Статистика DW будет смещенной в сторону уменьшения.
Анализ временных рядов statsmodels.tsa
в Python
statsmodels.tsa
содержит классы моделей и функции, которые полезны для анализа временных рядов.
Базовые модели включают:
- одномерные авторегрессионные модели (AR),
- векторные авторегрессионные модели (VAR)
- и одномерные авторегрессионные модели скользящего среднего (ARMA).
Нелинейные модели включают:
- динамическую регрессию с переключением Маркова и авторегрессию
- описательную статистику для временных рядов (например, автокорреляцию, частичную автокорреляционную функцию и периодограмму)
- а также соответствующие теоретические свойства ARMA или связанных процессов.
методы для работы с авторегрессионными и скользящими средними лаг-полиномами. - Кроме того, доступны связанные статистические тесты и некоторые полезные вспомогательные функции.
Оценка выполняется либо с помощью точного или условного метода максимального правдоподобия, либо с помощью условных наименьших квадратов, либо с использованием фильтра Калмана или прямых фильтров.
Функции и классы statsmodels.tsa:
stattools
: эмпирические свойства и тесты, ACF, PACF, Granger-Causality, ADF Unit root test, KPSS test, BDS test, Ljung-Box test и другие.ar_model
: одномерный авторегрессионный процесс, оценка с использованием условного и точного максимального правдоподобия и условных наименьших квадратовarima.mode
l: одномерный процесс ARIMA, оценка альтернативными методамиstatespace
: Полная спецификация и оценка модели statespace.vector_ar, var
: векторный авторегрессионный процесс (VAR) и модели коррекции векторных ошибок, оценка, анализ импульсного отклика, разложение дисперсии ошибки прогноза и инструменты визуализации данных.arma_process
: свойства процессов arma с заданными параметрами, сюда входят инструменты для преобразования между представлениями ARMA, MA и AR, а также acf, pacf, спектральной плотностью, функцией импульсного отклика и т.п.sandbox.tsa.fftarma
: похоже на arma_process, но работает в частотной областиtsatools
: дополнительные вспомогательные функции для создания массивов запаздывающих переменных, построения регрессоров для тренда, детренда и т.п.filters
: вспомогательная функция для фильтрации временных рядовmode_switching
: Динамическая регрессия и авторегрессионные модели с переключением Маркова
Как используется анализ временных рядов
Анализ временных рядов изучает данные, собранные через регулярные интервалы в течение определенного периода времени. Этот метод фокусируется на изучении закономерностей в последовательно упорядоченных наблюдениях, а не на анализе спорадических или произвольно собранных точек данных. Последовательно записывая измерения через заданные интервалы времени, аналитики могут определять тенденции, циклы и другие временные характеристики в наборе данных.
Как анализировать временные ряды?
Для проведения анализа временных рядов нам необходимо выполнить следующие шаги:
- Сбор данных и их очистка
- Подготовка визуализации с учетом времени и ключевых особенностей
- Наблюдение за стационарностью ряда
- Разработка диаграмм для понимания его природы.
- Построение моделей – AR, MA, ARMA и ARIMA
- Извлечение информации из прогнозов
С помощью Временных рядов мы можем выполнить
- Прогнозирование: предсказание любого значения на будущее.
- Сегментация: объединение схожих элементов.
- Классификация: классификация набора элементов по заданным классам.
- Описательный анализ: анализ заданного набора данных с целью выяснить, что в нем содержится.
- Анализ вмешательства: влияние изменения заданной переменной на результат.
Примеры прогнозирования с использованием моделей временных рядов
Многие различные секторы полагаются на модели временных рядов для стимулирования роста бизнеса и инноваций. Вот некоторые из отраслей, на которые этот метод оказал наибольшее влияние.
Здравоохранение
Модели временных рядов можно использовать для мониторинга распространения заболеваний путем наблюдения за тем, сколько людей передают болезнь и сколько людей умирают после заражения.
Сельское хозяйство
Модели временных рядов учитывают сезонные температуры, количество дождливых дней в каждом месяце и другие переменные на протяжении многих лет, что позволяет сельскохозяйственным работникам оценивать условия окружающей среды и обеспечивать успешный сбор урожая.
Финансы
Финансовые аналитики могут использовать модели временных рядов для регистрации показателей продаж за каждый месяц и прогнозирования потенциального поведения фондового рынка.
Кибербезопасность
ИТ-специалисты и специалисты по кибербезопасности могут выявлять закономерности поведения пользователей с помощью моделей временных рядов, что позволяет им определять, когда поведение не соответствует нормальным тенденциям.
Розничная торговля
Розничные торговцы могут применять модели временных рядов для изучения того, как со временем меняются цены других компаний и количество покупок клиентов, что помогает им оптимизировать цены.
Регрессия
Регрессия — это статистический метод, который используется для изучения зависимости одной переменной (называемой зависимой или объясняемой) от одной или нескольких других переменных (независимых или объясняющих).
Цель регрессии — построить модель, которая позволит прогнозировать значения зависимой переменной на основе значений независимых переменных.
Основные виды регрессии:
- Линейная регрессия — самый простой вид регрессии, где предполагается, что зависимость между переменными линейна.
- Логистическая регрессия — используется, когда зависимая переменная бинарна (например, 0 или 1, да или нет).
- Полиномиальная регрессия — расширение линейной регрессии, которая может моделировать нелинейные зависимости.
- Множественная регрессия — когда используется несколько независимых переменных для прогнозирования зависимой.
Где применяется регрессия?
Анализ спроса и ценообразование:
Регрессия помогает понять, как изменение цены влияет на спрос на продукт. Это особенно важно при определении оптимальной цены для максимизации доходов.
Анализ влияния факторов на продажи:
Например, можно использовать регрессию для анализа влияния рекламы, скидок, времени года и других факторов на объемы продаж.
Прогнозирование оттока клиентов:
С помощью логистической регрессии можно предсказать вероятность того, что клиент прекратит пользоваться продуктом, и принять меры для его удержания.
Оценка эффективности продуктов и фич:
Регрессия позволяет анализировать, какие изменения в продукте или какие новые функции приводят к росту вовлеченности пользователей, увеличению времени использования или других метрик успеха.
Рекомендованная литература и видео
- Вводный курс ML — dmitrymakarov.ru (в том числе отдельный раздел по Временным рядам)
- Плейлист на YouTube «Прикладная статистика» — курс от ВШЭ
- Временные ряды Яндекс обучение (из полного курса Учебник по машинному обучению от ШАД)
GitHub репозитории по теме временных рядов
- Time Series Analysis and Forecasting in Python
- Time Series Forecasting in Python
- Practical guidance for time series analysis in Python
- time-series-forecasting-wiki: A use-case focused tutorial for time series forecasting with python
- Time Series Library (TSLib): A Library for Advanced Deep Time Series Models.
Leave a Reply