Прогнозирование временных рядов методом SSA (пример)

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Описание алгоритма)
(Модельные данные)
Строка 69: Строка 69:
<tex>$$t = 1, 2, \ldots, 250$$</tex>
<tex>$$t = 1, 2, \ldots, 250$$</tex>
 +
 +
Также во временные ряды добавлен шум со среднеквадратичным отклонением 0,5:
 +
 +
[[Изображение:model1.png|thumb]]
 +
[[Изображение:model2.png|thumb]]
 +
[[Изображение:model3.png|thumb]]

Версия 08:32, 6 мая 2010

SSA (Singular Spectrum Analysis, "Гусеница") - метод анализа и прогноза временных рядов. Базовый вариант метода состоит в преобразовании одномерного ряда в многомерный с помощью однопараметрической сдвиговой процедуры (отсюда и название "Гусеница"), исследовании полученной многомерной траектории с помощью анализа главных компонент (сингулярного разложения) и восстановлении (аппроксимации) ряда по выбранным главным компонентам. Таким образом, результатом применения метода является разложение временного ряда на простые компоненты: медленные тренды, сезонные и другие периодические или колебательные составляющие, а также шумовые компоненты. Полученное разложение может служить основой прогнозирования как самого ряда, так и его отдельных составляющих. "Гусеница" допускает естественное обобщение на многомерные временные ряды, а также на случай анализа изображений. В данной статье рассмотрим вариант алгоритма, предназначенный для анализа многомерного временного ряда.


Содержание

Постановка задачи

Наблюдается система функций дискретного аргумента {$(f_i^{(k)})_{i=1}^N$, где k = 1, ..., s}. Параметр s, таким образом, имеет смысл размерности многомерной числовой последовательности, а N - количество элементов в последовательности. Требуется разложить ряд в сумму компонент (используя метод главных компонент, см. описание алгоритма), интерпретировать каждую компоненту, и построить продолжение ряда $(f_i^{(k)})_{i=1}^{N+M}$ по выбранным компонентам.


Описание алгоритма

Выберем n такое, что $0 < n \le N - 1$ - время жизни многомерной гусеницы. Пусть $\sigma = N - n + 1$ - длина гусеницы. Построим последовательность из n векторов в $R^{\tau}$, $\tau = s*\sigma$, следующего вида:

$$Y^{(l)} \in R^\tau, Y^{(l)} = (X^{(l,1)}, \ldots, X^{(l,s)})^T,$$

где $X^{(l,k)} = (f_{i+l-1}^{(k)})_{i=1}^{\sigma}$. Обозначим

$$Z = (Y^{(1)}, \ldots, Y^{(n)}).$$

Будем называть $Z$ нецентрированной матрицей наблюдений, порождённой гусеницей со временем жизни n. Проводимый в дальнейшем анализ главных компонент может проводиться как по центрированной, так и по нецентрированной выборкам. Для упрощения выкладок рассмотрим простейший нецентрированный вариант.

Рассмотрим ковариационную матрицу полученной многомерной выборки

$$C = \frac1n ZZ^T.$$

Выполним её svd-разложение:

$$C = V\Lambda V^T,$$

где $\Lambda = diag(\lambda_1, \ldots, \lambda_{\tau})$ - диагональная матрица собственных чисел, $V = (v^{(1)}, \ldots, v^{(\tau)})$, $(v^{(i)})^T v^{(j)} = \delta_{ij}$ - ортогональная матрица собственных векторов.

Далее рассмотрим систему главных компонент:

$$U = V^T Z, U = (U^{(1)}, \ldots, U^{(\tau)})^T.$$

После проведения анализа главных компонент обычно предполагается проведение операции восстановления исходной матрицы наблюдений по некоторому поднабору главных компонент, т. е. для $V' = (v^{(i_1)}, \ldots, v^{(i_r)})$ и $U' = V'^T Z$ вычисляется матрица $Z' = V'U'$. Далее восстанавливаются исходные последовательности:

$$f'_m^{(k)} = \left\{ \begin{array}{ll} \frac1m \sum_{i=1}^m x_i^{(m-i+1,k)}&1\le m\le \sigma,\\ \frac{1}{\sigma} \sum_{i=1}^{\sigma} x_i^{(m-i+1,k)}&\sigma \le m \le n,\\ \frac{1}{N-m+1} \sum_{i=1}^{N-m+1} x_{i+m-n}^{(n-i+1,k)}&n \le m \le N.\end{array} \right$$

Определим

$$w = \left ( \begin{array}{cccc} v_{\sigma}^{(i_1)}&v_{\sigma}^{(i_2)}&\ldots&v_{\sigma}^{(i_r)}\\ v_{2\sigma}^{(i_1)}&v_{2\sigma}^{(i_2)}&\ldots&v_{2\sigma}^{(i_r)}\\ \vdots& \vdots &\ddots & \vdots\\ v_{\tau}^{(i_1)}&v_{\tau}^{(i_2)}&\ldots&v_{\tau}^{(i_r)}\end{array} \right ) $$

и

$$ V_* = \left ( \begin{array}{cccc} v_1^{(i_1)}&v_1^{(i_2)}&\ldots&v_1^{(i_r)}\\ \vdots& \vdots &\ddots & \vdots\\ v_{\sigma - 1}^{(i_1)}&v_{\sigma - 1}^{(i_2)}&\ldots&v_{\sigma - 1}^{(i_r)}\\ v_{\sigma + 1}^{(i_1)}&v_{\sigma + 1}^{(i_2)}&\ldots&v_{\sigma + 1}^{(i_r)}\\ \vdots& \vdots &\ddots & \vdots\\ v_{2\sigma - 1}^{(i_1)}&v_{2\sigma - 1}^{(i_2)}&\ldots&v_{2\sigma - 1}^{(i_r)}\\ \vdots& \vdots &\ddots & \vdots\\ v_{\tau - 1}^{(i_1)}&v_{\tau - 1}^{(i_2)}&\ldots&v_{\tau - 1}^{(i_r)}\end{array} \right ) $$

Также положим

$$Q = \left (f_{N-\sigma+2}^{(1)}, \ldots, f_N^{(1)}, f_{N-\sigma+2}^{(2)}, \ldots, f_N^{(2)}, \ldots, f_{N-\sigma+2}^{(s)}, \ldots, f_N^{(s)}\right )^T$$

Будем считать, что прогнозируемые значения системы в точке $N+1$ вычисляются по формуле:

$$f_{N+1} = w(V_*^T V_*)^{-1} V_*^T Q.$$


Численный эксперимент

Модельные данные

Рассмотрим трёхмерный временной ряд, заданный формулами:

$$f_1(t) = 0,08t + 0,9\sin (\frac{2\pi t}{11}) + 0,8\sin (\frac{2\pi (t+0,09)}{8})$$

$$f_2(t) = 0,0001t^2 - 0,05t + 0,6\sin (\frac{2\pi (t-0,14)}{11}) + \cos (\frac{2\pi t}{8})$$

$$f_3(t) = 36\log(t+100) - 1,2\sin (\frac{2\pi (t+0,24)}{11}) + 0,5\sin (\frac{2\pi (t-0,35)}{8})$$

$$t = 1, 2, \ldots, 250$$

Также во временные ряды добавлен шум со среднеквадратичным отклонением 0,5:

Личные инструменты