Прогнозирование временных рядов методом SSA (пример)
Материал из MachineLearning.
(→Модельные данные) |
(→Модельные данные) |
||
Строка 70: | Строка 70: | ||
<tex>$$t = 1, 2, \ldots, 250$$</tex> | <tex>$$t = 1, 2, \ldots, 250$$</tex> | ||
- | Также во временные ряды добавлен шум со среднеквадратичным отклонением 0,5: | + | Кроме тренда (линейная, квадратичная функции и логарифм соответственно) в ряды добавлены две периодические составляющие (синусоиды с различными амплитудами и фазами). Также во временные ряды добавлен шум со среднеквадратичным отклонением 0,5: |
[[Изображение:model1.png|800px]] | [[Изображение:model1.png|800px]] | ||
Строка 77: | Строка 77: | ||
[[Изображение:model3.png|800px]] | [[Изображение:model3.png|800px]] | ||
+ | |||
+ | Исследуем главные компоненты данного временного ряда, используя гусеницу длины 50. | ||
+ | |||
+ | Логарифмы первых двадцати собственных чисел ковариационной матрицы: | ||
+ | |||
+ | [[Изображение:model4.png|800px]] | ||
+ | |||
+ | Из графика видно, что содержательный смысл несут, вероятно, первые семь главных компонент, а остальные, скорее всего, шум. | ||
+ | |||
+ | Обычно паре близких собственных чисел соответствуют главные компоненты, отвечающие одной частоте. Если отложить на одном графике главные векторы, отвечающие 3-му и 4-му собственным числам, становится очевидно, что они кореллируют и соответствуют периодической составляющей с периодом 11: | ||
+ | |||
+ | [[Изображение:model6.png|800px]] | ||
+ | |||
+ | Восстановив временной ряд (на рисунке изображён первый из трёх) по этим двум главным компонентам, убеждаемся в этом: | ||
+ | |||
+ | [[Изображение:model110.png|800px]] | ||
+ | |||
+ | 5-му и 6-му собственным числам соответствует периодическая составляющая с периодом 8: | ||
+ | |||
+ | [[Изображение:model5.png|800px]] | ||
+ | |||
+ | [[Изображение:model11.png|800px]] | ||
+ | |||
+ | 1-я, 2-я и 7-я главная компоненты отвечают за тренд: | ||
+ | |||
+ | [[Изображение:model7.png|800px]] | ||
+ | |||
+ | [[Изображение:model8.png|800px]] | ||
+ | |||
+ | [[Изображение:model9.png|800px]] | ||
+ | |||
+ | Убедимся, что остальные главные компоненты - это шум: | ||
+ | |||
+ | [[Изображение:model13.png|800px]] | ||
+ | |||
+ | Спрогнозируем временной ряд на 50 единиц вперёд по первым семи главным компонентам: | ||
+ | |||
+ | [[Изображение:model12.png|800px]] | ||
+ | |||
+ | [[Изображение:model14.png|800px]] | ||
+ | |||
+ | [[Изображение:model15.png|800px]] | ||
+ | |||
+ | Видим, что прогноз вполне адекватен. | ||
+ | |||
+ | Посмотрим, как отреагирует алгоритм на нарушение периодичности временного ряда. Во второй половине временного ряда изменим частоту, амплитуду и фазу одной из периодик: | ||
+ | |||
+ | <tex>$$f_1(t) = 0,08t + 0,6\sin (\frac{2\pi t}{14}) + 0,8\sin (\frac{2\pi (t+0,09)}{8})$$</tex> | ||
+ | |||
+ | <tex>$$f_2(t) = 0,0001t^2 - 0,05t + 0,45\sin (\frac{2\pi (t-0,14)}{14}) + \cos (\frac{2\pi t}{8})$$</tex> | ||
+ | |||
+ | <tex>$$f_3(t) = 36\log(t+100) - 0,8\sin (\frac{2\pi (t+0,24)}{14}) + 0,5\sin (\frac{2\pi (t-0,35)}{8})$$</tex> | ||
+ | |||
+ | <tex>$$t = 1, 2, \ldots, 250$$</tex> | ||
+ | |||
+ | В этом случае 2-я и 3-я главная компонента будет соответствовать той периодике, которую мы не изменили: (все графики соответствуют первому временному ряду) | ||
+ | |||
+ | [[Изображение:model21.png|800px]] | ||
+ | |||
+ | 5-я и 6-я - первой половине изменённой компоненты: | ||
+ | |||
+ | [[Изображение:model22.png|800px]] | ||
+ | |||
+ | 7-я и 8-я - второй её половине: | ||
+ | |||
+ | [[Изображение:model23.png|800px]] | ||
+ | |||
+ | 1-я, 2-я и 9-я отвечают тренду: | ||
+ | |||
+ | [[Изображение:model25.png|800px]] | ||
+ | |||
+ | Таким образом, алгоритм устойчив к нарушениям периодичности - разным участкам временного ряда соответствуют различные главные компоненты. | ||
+ | |||
+ | Посмотрим поведение алгоритма в случае наличия выбросов. Мы добавили выброс в среднем в каждую 50-ю точку временного ряда. Первое собственное число в этом случае на несколько порядков больше остальных, график логарифмов собственных чисел со 2-го по 20-е представлен ниже: | ||
+ | |||
+ | [[Изображение:model26.png|800px]] | ||
+ | |||
+ | Восстанавливая ряд по первым 16-ти главным компонентам, видим, что алгоритм работает некорректно: | ||
+ | |||
+ | [[Изображение:model27.png|800px]] |
Версия 09:43, 6 мая 2010
SSA (Singular Spectrum Analysis, "Гусеница") - метод анализа и прогноза временных рядов. Базовый вариант метода состоит в преобразовании одномерного ряда в многомерный с помощью однопараметрической сдвиговой процедуры (отсюда и название "Гусеница"), исследовании полученной многомерной траектории с помощью анализа главных компонент (сингулярного разложения) и восстановлении (аппроксимации) ряда по выбранным главным компонентам. Таким образом, результатом применения метода является разложение временного ряда на простые компоненты: медленные тренды, сезонные и другие периодические или колебательные составляющие, а также шумовые компоненты. Полученное разложение может служить основой прогнозирования как самого ряда, так и его отдельных составляющих. "Гусеница" допускает естественное обобщение на многомерные временные ряды, а также на случай анализа изображений. В данной статье рассмотрим вариант алгоритма, предназначенный для анализа многомерного временного ряда.
Содержание |
Постановка задачи
Наблюдается система функций дискретного аргумента {, где k = 1, ..., s}. Параметр s, таким образом, имеет смысл размерности многомерной числовой последовательности, а N - количество элементов в последовательности. Требуется разложить ряд в сумму компонент (используя метод главных компонент, см. описание алгоритма), интерпретировать каждую компоненту, и построить продолжение ряда по выбранным компонентам.
Описание алгоритма
Выберем n такое, что - время жизни многомерной гусеницы. Пусть - длина гусеницы. Построим последовательность из n векторов в , , следующего вида:
где . Обозначим
Будем называть нецентрированной матрицей наблюдений, порождённой гусеницей со временем жизни n. Проводимый в дальнейшем анализ главных компонент может проводиться как по центрированной, так и по нецентрированной выборкам. Для упрощения выкладок рассмотрим простейший нецентрированный вариант.
Рассмотрим ковариационную матрицу полученной многомерной выборки
Выполним её svd-разложение:
где - диагональная матрица собственных чисел, , - ортогональная матрица собственных векторов.
Далее рассмотрим систему главных компонент:
После проведения анализа главных компонент обычно предполагается проведение операции восстановления исходной матрицы наблюдений по некоторому поднабору главных компонент, т. е. для и вычисляется матрица . Далее восстанавливаются исходные последовательности:
Определим
и
Также положим
Будем считать, что прогнозируемые значения системы в точке вычисляются по формуле:
Численный эксперимент
Модельные данные
Рассмотрим трёхмерный временной ряд, заданный формулами:
Кроме тренда (линейная, квадратичная функции и логарифм соответственно) в ряды добавлены две периодические составляющие (синусоиды с различными амплитудами и фазами). Также во временные ряды добавлен шум со среднеквадратичным отклонением 0,5:
Исследуем главные компоненты данного временного ряда, используя гусеницу длины 50.
Логарифмы первых двадцати собственных чисел ковариационной матрицы:
Из графика видно, что содержательный смысл несут, вероятно, первые семь главных компонент, а остальные, скорее всего, шум.
Обычно паре близких собственных чисел соответствуют главные компоненты, отвечающие одной частоте. Если отложить на одном графике главные векторы, отвечающие 3-му и 4-му собственным числам, становится очевидно, что они кореллируют и соответствуют периодической составляющей с периодом 11:
Восстановив временной ряд (на рисунке изображён первый из трёх) по этим двум главным компонентам, убеждаемся в этом:
5-му и 6-му собственным числам соответствует периодическая составляющая с периодом 8:
1-я, 2-я и 7-я главная компоненты отвечают за тренд:
Убедимся, что остальные главные компоненты - это шум:
Спрогнозируем временной ряд на 50 единиц вперёд по первым семи главным компонентам:
Видим, что прогноз вполне адекватен.
Посмотрим, как отреагирует алгоритм на нарушение периодичности временного ряда. Во второй половине временного ряда изменим частоту, амплитуду и фазу одной из периодик:
В этом случае 2-я и 3-я главная компонента будет соответствовать той периодике, которую мы не изменили: (все графики соответствуют первому временному ряду)
5-я и 6-я - первой половине изменённой компоненты:
7-я и 8-я - второй её половине:
1-я, 2-я и 9-я отвечают тренду:
Таким образом, алгоритм устойчив к нарушениям периодичности - разным участкам временного ряда соответствуют различные главные компоненты.
Посмотрим поведение алгоритма в случае наличия выбросов. Мы добавили выброс в среднем в каждую 50-ю точку временного ряда. Первое собственное число в этом случае на несколько порядков больше остальных, график логарифмов собственных чисел со 2-го по 20-е представлен ниже:
Восстанавливая ряд по первым 16-ти главным компонентам, видим, что алгоритм работает некорректно: