84
правки
Изменения
Нет описания правки
#NNETAR
#LSTM
Будем предсказывать 12 месяцев, соответсвтенно, значение t+1, t+2, …, t + 12.
Будем использовать Среднюю абсолютную ошибку(MAE) для оценки работы модели.<br>
===Наивная===
Предсказания для каждого горизонта соотвествуют последнему наблюдаему значению
<code>Y(t + h|t) = Y(t)</code>.
Такие предскания предполагают, что стохастическая модель генерирует случайное блуждание.
Расширирение наивной модели - SNAIVE - сезонно-наивная модель предполагает, что временной ряд имеет сезонную компоненту, и что переиод сезонности T. Прогнозы SNAIVE - модели описываются формулой
<code>Y*(t+h|t) = Y(t+h-T) </code>.
Получаемые прогнозы следующий T шагов совпадают с предыдущими T шагами.
Эти модели часто используются как ориентировочные модели. Следующий график показывает предсказания двух моделей для 2007 года.<br>
[[Файл:NaiveElectricalEquipmentManufacturing.png]]
[[Файл:SeasonalNaiveElectricalEquipmentManufacturing.png]]
Модели были имплементированы с помощью встроенных функций naive и snaive из пакета forecast в R.
===Разделение по сезонам + любая модель===
Если данные показывают, что они воспроиимчивы к периодическим-сезонным изменениям(ежедневно, еженедельно, ежеквартально, ежегодно), то будет полезным разложить исходный временной ряд на сумму трёх компонентов.<br>
<code>Y(t) = S(t) + T(t) + R(t)</code><br>
S(t) - сезонный компонент
T(t) - компонент трендового цикла
R(t) - остаток
Существуют несколько способов для такого разложения, но наиболее простой называется классическим разложением и заключается в том, чтобы
Оценить тренд T(t) через скользящее среднее
Посчитать S(t), как среднее без тренда Y(t) - T(t) для каждого сезона
Посчитать остаток, как
R(t) = Y(t) - T(t)-S(t)
Классическое разложение можно расширить несколькими способами
Расширение позволяет использовать данный метод при:
*непостоянной величине сезона
*посчитать начальные и конечные значение декомпозиции
*избежать лишнего сглаживания
Обзор методов разложений ряда можно увидеть по ссылке***ссылка***. Мы воспользуемся реализацией из стандартной библиотеки, которая достаточно универсальна и надёжна.<br>
[[Файл:STL_docompositionOnIndustrialProductionIndexData.png]]<br>
Одним из способов использования декомпозиции для прогнозирования будет:
1)разложить обучающий набор алгоритмом из STL
2)посчитать сезонное отклонение ряда Y(t)-S(t), используя любую модель для прогнозирования сезоно-чувствительного временного ряда
3)Добавить прогнозам сезонность последнего временного периода во временном ряду(в нашем случае S(t) для прошлого года)
На следующем графике показаны сезонные индексы ряда с учётом сезонности:<br>
[[Файл:SeasonallyAdjustedIndustrial.png]]<br>
Следующий график показывает предсказания полученные для 2007 года с использованием STL декомпозиции и наивной модели для сезонно-изменяемого временного ряда:<br>
[[Файл:SeasonallyAdjustedTimeSeries.png]]<br>
Декомпозиция была исплементирована с помощью встроенной в стандартную либу функции.
===Экспоненциальное сглаживание ===
Экспоненциальное сглаживание {{---}} один из наиболее успешных классических методов предсказаний. В своей базовой форме оно называется простым экспоненциальный сглаживанием и его прогнозы описываются формулами:
<code>Ŷ(t+h|t) = ⍺y(t) + ⍺(1-⍺)y(t-1) + ⍺(1-⍺)²y(t-2) + …</code>
'''''with 0<⍺<1.'''''<br>
Заметим, что прогнозы равны взвешеному среднему от старых наблюдений, и что соответствующие веса убывают экспоненциально по мере хода времени
Некоторые методы для расширения алгоритма позволяют добавить тренд, его затухание и сезонность.
Экспоненциальное сглаживание состоит из 9 моделей, которые подробно описаны здесь(ссылка)
Следующие графики описывают прогнозы данные полученные для 2007 года с использованием модели экспоненциального сглаживания(выбраны автоматически), которые подходили исходному и сезонно-чувствительному временному ряду.
[[Файл:ExpSmoothing.png]]
[[Файл:ExpSmoothing+Decomposition.png]]
Модели были имплементированы с помощью функции ets в forecast пакете R.<br>
===ARIMA, SARIMA===
Также как и экспоненциальное сглаживание, ARIMA также часто используются для прогноза временных рядов. Название является акронимом AutoRegressive Integrated Moving Average Саморегрессивное интегрированное скользящее среднее
Саморегрессивность {{---}} линейная комбинация старых значений.
Скользящее среднее {{---}} линейная комбинация прошлых ошибок.
ARIMA {{---}} комбинация этих двух подходов. Так как эти подходы требуют стационарности временного ряда, может понадобится продифференциировать/проинтегрировать ряд
То есть рассматировать ряд разностей, а не исходный ряд
SARIMA учитывает сезонность, добавляя линейную комбинацию прошлых сезонных значений и/или прошлых ошибок прогноза
Для полного ввода в ARIMA, SARIMA читайте по ссылке
Данные графики показывают предсказания полученные для 2007 года с использованием модели SARIMA:<br>
[[Файл:SARIMA.png]]
[[Файл:SARIMA_Decomposition.png]]
Имплементация с помощью встроенной в R функции auto.arima.<br>
===Garch===
В предыдущих моделях мы считали, что слагаемое ошибки в стохастическом процессе генерации временного ряды имели одинаковую дисперсию.
В GARSH-модели мы преполагаем, что слагаемое ошибки следуют ARMA процессу(саморегрессирующее скользящее среднее), соответственно слагаемое меняется по ходу времени. Это особенно полезно при модели[[Файл:Пример.jpg]]ровании финансовых временных рядов, так как диапазон изменений тоже постоянно меняется.
Обычно ARMA используется и для учёта среднего, для подробного введения в Garsh модели смотри здесь:
[[Файл:GARCH.png]]<br>
===Динамические линейные модели===
Динамические линейные модели представляют другой класс моделей предсказания временных рядов
Идея заключается в том, что каждый моменты времени t эти модели соответствуют линейной модели, но коэффициент регрессии постоянно меняется. <br>Пример динамической линейной модели ниже:<br>
<code>y(t) = ⍺(t) + tβ(t) + w(t)</code><br>
<code>⍺(t) = ⍺(t-1) + m(t)</code><br>
<code>β(t) = β(t-1) + r(t)</code><br>
<code>w(t)~N(0,W) , m(t)~N(0,M) , r(t)~N(0,R)</code><br>
В предыдущей модели коэффициенты a(t) и b(t) следуют случайному блужданию.
Динамические линейные модели могут быть построены в рамках Байесовской системы. Тем не менее и этот метод можно улучшить, подробности читайте [https://cran.r-project.org/web/packages/dlm/vignettes/dlm.pdf тут].<br>
[[Файл:DLM+Decomposition.png]]<br>
===TBATS===
Это модели, которые основаны на экспоненциальном сглаживании. Главной особенностью TBATS является возможность взаимодействия с несколькими сезонностями. Моделируя каждую функцию сезонности отдельным тригонометрическим отображением построенным на рядах Фурье. Классическим примером комплексной сезонности будет отображение ежедневных объемов продаж, которые имеет, как еженедельные колебания, так и ежегодные.<br>
Больше информации можно прочиать [https://robjhyndman.com/papers/ComplexSeasonality.pdf тут].<br>
[[Файл:DLM+Decomposition.png]]<br>
===Prophet===
Ещё одна модель, способная взаимодействовать с несколькими сезонностями.
Это ПО с открытым исходным кодом от Фейсбука.<br>
Prophet считает, что временной ряд может быть расложен следующим образом:
<code>y(t) = g(t) + s(t) + h(t) + ε(t)</code>
g(t) - тренд
s(t) - сезонность
h(t) - каникулы
ε(t) - ошибки
Подгонка модели представляет собой упражнение по подгонке кривой, поэтому она явно не учитывает структуру временной зависимости в данных. Это также позволяет проводить наблюдения с нерегулярным интервалом.<br>
Есть два варианта временных рядов тренда: модель насыщающего роста и кусочно-линейная модель. Модель многопериодной сезонности основана на рядах Фурье. Эффект известных и заказных выходных дней может быть легко включен в модель.<br>
Модель пророка вставлена в байесовскую структуру и позволяет сделать полный апостериорный вывод, чтобы включить неопределенность параметров модели в неопределенность прогноза.<br>
[[Файл:Prophet.png]]
===NNETAR===
Модель NNETAR представляет собой полностью связанную нейронную сеть. Аббревиатура расшифровывается как Neural NETwork AutoRegression.
Модель NNETAR принимает на вход последние элементы последовательности до момента времени t и выводит прогнозируемое значение в момент времени t + 1. Для выполнения многоэтапных прогнозов сеть применяется итеративно.
===LSTM===
Модели LSTM могут использоваться для прогнозирования временных рядов (а также других рекуррентных нейронных сетей). <br>LSTM {{---}} это аббревиатура от Long-Short Term Memories.<br>
Состояние сети LSTM представлено через вектор пространства состояний. Этот метод позволяет отслеживать зависимости новых наблюдений от прошлых (даже очень далеких).<br>
Вообще говоря, LSTM представляют собой сложные модели, и они редко используются для прогнозирования одного временного ряда, поскольку для их оценки требуется большой объем данных.<br>Однако они обычно используются, когда необходимы прогнозы для большого количества временных рядов(проверьте [https://arxiv.org/abs/1704.04110 здесь]).
==Оценка==
Мы выполнили выбор модели с помощью процедуры перекрестной проверки, описанной ранее. Мы не рассчитывали его для динамических линейных моделей и моделей LSTM из-за их высокой вычислительной стоимости и низкой производительности.<br>
На следующем рисунке мы показываем MAE с перекрестной проверкой для каждой модели и для каждого временного горизонта:
[[Файл:Evaluation.png]]
Мы видим, что для временных горизонтов больше 4 модель NNETAR с сезонно скорректированными данными работает лучше, чем другие. Давайте проверим общую MAE, вычисленную путем усреднения по разным временным горизонтам.<br><br>
Модель NNETAR по сезонно скорректированным данным была лучшей моделью для этого приложения, поскольку она соответствовала самому низкому значению MAE, прошедшему перекрестную проверку.<br>
Чтобы получить объективную оценку наилучшей производительности модели, мы вычислили MAE на тестовом наборе, получив оценку, равную 5,24. На следующем рисунке мы можем увидеть MAE, оцененную на тестовой выборке для каждого временного горизонта.<br>
[[Файл:Cross-validated MAE.png]]<br>
===Как еще больше повысить производительность===
Другие методы повышения производительности моделей:
*Использование разных моделей для разных временных горизонтов
*Объединение нескольких прогнозов (например, с учетом среднего прогноза)
*''Агрегация начальных данных''
<br><br>
Последний метод у можно резюмировать следующим образом:
*Разложите исходный временной ряд (например, используя STL)
*Создайте набор похожих временных рядов путем случайного перемешивания фрагментов оставшейся компоненты.
*Подбирайте модель для каждого временного ряда
*Средние прогнозы каждой модели
==Заключительные замечания==
Целью этого проекта было не подобрать наилучшую возможную модель прогнозирования индекса промышленного производства, а дать обзор моделей прогнозирования. В реальном приложении много времени следует тратить на предварительную обработку, разработку функций и выбор функций.<br><br>
Большинство ранее описанных моделей позволяют легко включать изменяющиеся во времени предикторы. Они могут быть извлечены из одного и того же временного ряда или могут соответствовать внешним предикторам (например, временному ряду другого индекса). В последнем случае мы должны обратить внимание на то, чтобы не использовать информацию из будущего, которая могла бы быть удовлетворена путем прогнозирования предикторов или использования их лаговых версий.<br>
Наконец, обратите внимание, что в этой статье мы рассмотрели только случай, когда у нас есть один временной ряд для прогнозирования. Когда у нас много временных рядов, может быть предпочтительнее глобальный подход, поскольку он позволяет нам оценивать более сложную и потенциально более точную модель. Чтобы ознакомиться с глобальным подходом, щелкните здесь.