Методы анализа временных рядов: сглаживание
Временным рядом называется последовательность значений, изменяемых во времени. О некоторых простых, но эффективных подходах к работе с подобными последовательностями я попробую рассказать в данной статье. Примеров таких данных можно встретить очень много – котировки валют, объемы продаж, обращения клиентов, данные в различных прикладных науках (социология, метеорология, геология, наблюдения в физике) и многое другое.
Ряды являются распространенной и важной формой описания данных, так как позволяют наблюдать всю историю изменения интересующего нас значения. Это даёт нам возможность судить о «типичном» поведении величины и об отклонениях от такого поведения.
Передо мной встала задача выбрать набор данных, на котором можно было бы наглядно продемонстрировать особенности временных рядов. Я решил воспользоваться статистикой пассажиропотока на международных авиалиниях, поскольку этот набор данных весьма нагляден и стал своего рода стандартным (http://robjhyndman.com/tsdldata/data/airpass.dat, источник Time Series Data Library, R. J. Hyndman). Ряд описывает количество пассажиров международных авиалиний в месяц (в тысячах) за период с 1949 по 1960 года.
Поскольку у меня всегда под рукой Prognoz Platform, в которой есть интересный инструмент «Анализ временных рядов» для работы с рядами, я воспользуюсь именно им.
Перед импортом данных в файл нужно добавить столбец с датой, чтобы была привязка значений ко времени, и столбец с именем ряда для каждого наблюдения.
Ниже видно, как выглядит мой исходный файл, который я импортировал в Prognoz Platform с помощью мастера импорта непосредственно из инструмента анализа временных рядов.
Первое, что мы обычно делаем с временным рядом, это отображаем его на графике. Prognoz Platform позволяет построить график, просто «перетащив» ряд в рабочую книгу.
Символ ‘M’ в конце имени ряда означает, что ряд имеет месячную динамику (интервал между наблюдениями равен одному месяцу).
Уже из графика мы видим, что ряд демонстрирует две особенности:
- тренд – на нашем графике это долгосрочный рост наблюдаемых значений. Видно, что тренд практически линейный.
- сезонность – на графике это периодические колебания величины.
Наш ряд достаточно «аккуратный», однако часто встречаются ряды, которые помимо двух описанных выше характеристик демонстрируют ещё одну – наличие «шума», т.е. случайных вариаций в той или иной форме. Пример такого ряда можно увидеть на графике ниже. Это синусоидальный сигнал, смешанный со случайной величиной.
При анализе рядов нас интересует выявление их структуры и оценка всех основных компонентов – тренда, сезонности, шума и других особенностей, а также возможность строить прогнозы изменения величины в будущих периодах.
При работе с рядами наличие шума часто затрудняет анализ структуры ряда. Чтобы исключить его влияние и лучше увидеть структуру ряда, можно использовать методы сглаживания рядов.
Скользящее среднее
Самый простой метод сглаживания рядов – скользящее среднее. Идея заключается в том, что для любого нечётного количества точек последовательности ряда заменять центральную точку на среднее арифметическое остальных точек:
где xi – исходный ряд, si – сглаженный ряд.
Ниже можно увидеть результат применения данного алгоритма к двум нашим рядам. Prognoz Platform по умолчанию предлагает использовать сглаживание с размером окна в 5 точек (k в нашей формуле выше будет равно 2). Обратите внимание, что сглаженный сигнал уже не так подвержен влиянию шума, однако вместе с шумом, естественно, пропадает и часть полезной информации о динамике ряда. Также видно, что у сглаженного ряда отсутствуют первые (и также последние) k точек. Это связано с тем, что сглаживание выполняется для центральной точки окна (в нашем случае для третьей точки), после чего окно сдвигается на одну точку, и вычисления повторяются. Для второго, случайного ряда, я использовал сглаживание с окном равным 30, чтобы лучше выявить структуру ряда, так как ряд «высокочастотный», точек очень много.
Метод скользящего среднего имеет определённые недостатки:
- Скользящее среднее неэффективно в вычислении. Для каждой точки среднее необходимо перевычислять по новой. Мы не можем переиспользовать результат, вычисленный для предыдущей точки.
- Скользящее среднее нельзя продлить на первые и последние точки ряда. Это может вызвать проблему, если нас интересуют именно эти точки.
- Скользящее среднее не определено за пределами ряда, и как следствие, не может использоваться для прогнозирования.
Экспоненциальное сглаживание
Более продвинутый метод сглаживания, который также можно использовать для прогнозирования – экспоненциальное сглаживание, также иногда называемое методом Хольта-Уинтерса (Holt-Winters) в честь имён его создателей.
Существует насколько вариантов данного метода:
- одинарное сглаживание для рядов, у которых нет тренда и сезонности;
- двойное сглаживание для рядов, у которых есть тренд, но нет сезонности;
- тройное сглаживание для рядов, у которых есть и тренд, и сезонность.
Метод экспоненциального сглаживания вычисляет значения сглаженного ряда путём обновления значений, рассчитанных на предыдущем шаге, используя информацию с текущего шага. Информация с предыдущего и текущего шагов берётся с разными весами, которыми можно управлять.
В простейшем варианте одинарного сглаживания соотношение такое:
Параметр α определяет соотношение между несглаженным значением на текущем шаге и сглаженным значением с предыдущего шага. При α=1 мы будем брать только точки исходного ряда, т.е. никакого сглаживания не будет. При α=0 ряд мы будем брать только сглаженные значения с предыдущих шагов, т.е. ряд превратится в константу.
Чтобы понять, почему сглаживание называется экспоненциальным, нам нужно раскрыть соотношение рекурсивно:
Из соотношения видно, что все предыдущие значения ряда вносят вклад в текущее сглаженное значение, однако их вклад угасает экспоненциально за счёт роста степени параметра α.
Однако, если в данных есть тренд, простое сглаживание будет «отставать» от него (либо придётся брать значения α близкими к 1, но тогда сглаживание будет недостаточным). Нужно использовать двойное экспоненциальное сглаживание.
Двойное сглаживание использует уже два уравнения – одно уравнение оценивает тренд как разницу между текущим и предыдущим сглаженным значениями, потом сглаживает тренд простым сглаживанием. Второе уравнение выполняет сглаживание как в случае простого варианта, но во втором слагаемом используется сумма предыдущего сглаженного значения и тренда.
Тройное сглаживание включает ещё один компонент – сезонность, и использует ещё одно уравнение. При этом различаются два варианта сезонного компонента – аддитивный и мультипликативный. В первом случае амплитуда сезонного компонента постоянна и со временем не зависит от базовой амплитуды ряда. Во втором случае амплитуда меняется вместе с изменением базовой амплитуды ряда. Это как раз наш случай, как видно из графика. С ростом ряда амплитуда сезонных колебаний увеличивается.
Так как наш первый ряд имеет и тренд, и сезонность, я решил подобрать параметры тройного сглаживания для него. В Prognoz Platform это довольно просто сделать, потому что при обновлении значения параметра платформа сразу же перерисовывает график сглаженного ряда, и визуально можно сразу увидеть, насколько хорошо он описывает наш исходный ряд. Я остановился на следующих значениях:
Как я вычислил период, мы рассмотрим в следующей статье о временных рядах.
Обычно в качестве первых приближений можно рассматривать значения между 0,2 и 0,4. Prognoz Platform также использует модель с дополнительным параметром ɸ, который дэмпфирует тренд так, что он приближается к константе в будущем. Для ɸ я взял значение 1, что соответствует обычной модели.
Также я сделал прогноз значений ряда данным методом на последние 2 года. На рисунке ниже я пометил точку начала прогноза, проведя через неё черту. Как видно, исходный ряд и сглаженный весьма неплохо совпадают, в том числе и на периоде прогнозирования – неплохо для такого простого метода!
Prognoz Platform также позволяет автоматически подобрать оптимальные значения параметров, используя систематический поиск в пространстве значений параметров и минимизируя сумму квадратов отклонений сглаженного ряда от исходного.
Описанные методы весьма просты, их легко применять, и они являются хорошей отправной точкой для анализа структуры и прогнозирования временных рядов.