Экспоненциальное сглаживание

Теория экспоненциального сглаживания

Я тут было собрался написать еще одну статью о технических индикаторах и рассказать про экспоненциальное скользящее среднее (exponential moving average, EMA), однако получилось так, что, изучая теорию этого индикатора, я наткнулся на довольно интересные вещи, относящиеся все-таки больше к статистике, нежели к рынку акций или forex.

Поскольку на этом сайте статистика уже затрагивалась, я решил написать отдельную статью на эту тему, а именно, статью, посвященную методу экспоненциального сглаживания (exponential smoothing) в анализе рядов динамики (time series)

Тема рядов динамики уже затрагивалась в статье Сезонные колебания. Индексы сезонности. Метод постоянной средней, и там было сказано, в частности, что расчет средних индексов сезонности методов постоянной средней может применяться для рядов динамики, где отсутствуют какие-либо тенденции повышения/понижения, либо же они незначительны. Иными словами, наблюдаемая величина колеблется около какого-то постоянного значения.

Что это значит? Это значит, что постоянное среднее, оно постоянное, и поэтому не может захватить тенденцию.
Проиллюстрируем это графиком

PLANETCALC, Постоянная средняя - график

Постоянная средняя - график

Постоянная средняя
Файл очень большой, при загрузке и создании может наблюдаться торможение браузера.
Фактическое значение
Среднее
24681012141618102030405060708090100

Ряд динамики

Значение
50
52
95
59
52
45
38
10
47
40
Записей:
1-10 из 19

Вообще говоря, все методы усреднения направлены на то, чтобы исключить «шум» от случайного разброса данных, что позволяет более явно выявить тенденцию, либо же сезонные или циклические изменения, то есть внутреннюю структуру данных, кажущихся случайными, и использовать это для построения модели с последующим анализом и прогнозированием будущих значений — но, как видим, метод простого усреднения не работает при наличии явно выраженной тенденции, и спрогнозировать с его помощью ничего нельзя.

Нужно уметь получать не одно, постоянное, среднее, а, опять-таки, ряд средних, который бы пытался отражать тенденцию изменения данных. Ну и самым популярным (и простым) методом для получения таких рядов стал метод экспоненциального сглаживания.

На словах его можно описать так — При прогнозировании, более новым значениям наблюдаемой величины присваивается больший вес по сравнению с более старыми значениями. При этом более старым значениями присваиваются экспоненциально убывающие веса.

Теперь опишем это определение формулами.
Традиционно обозначим наблюдаемую величину как y, а сглаженное среднее как S.
Тогда,
S_1 не определено
S_2 = y_1
S_3 = \alpha y_2 + (1-\alpha)S_2

и, обобщенно

S_t = \alpha y_{t-1} + (1-\alpha)S_{t-1}

где, \alpha принимает значение из диапазона [0;1)

Откуда берется экспонента — раскроем предыдущие средние

S_t = \alpha y_{t-1} + (1-\alpha)S_{t-1} = \alpha y_{t-1} + (1-\alpha)[\alpha y_{t-2} + (1-\alpha)S_{t-2}] = \alpha y_{t-1} + (1-\alpha)[\alpha y_{t-2} + (1-\alpha)[\alpha y_{t-3} + (1-\alpha)S_{t-3}]]
S_t = \alpha y_{t-1} + \alpha(1-\alpha)y_{t-2} + \alpha(1-\alpha)^{2}y_{t-3} + (1-\alpha)^{3}S_{t-3}

и, обобщенно

S_t=\alpha\sum_{i=1}^{t-2}(1-\alpha)^{i-1}y_{t-i} + (1-\alpha)^{t-2}S_2, для t > 2

Таким образом, веса перед y — это бесконечно убывающая геометрическая прогрессия с множителем 1-\alpha
И чем дальше S, тем меньше на нее влияют начальные значения.

Предположим, что y_1=1000, посмотрим, как меняется его вклад для различных S.

PLANETCALC, Изменение веса значения при экспоненциальном сглаживании

Изменение веса значения при экспоненциальном сглаживании

Знаков после запятой: 4
Значение y1
1000
Изменение веса значения при экспоненциальном сглаживании
Файл очень большой, при загрузке и создании может наблюдаться торможение браузера.
S3S4S5S6S7S8S9S10S11S12020406080100120140160180200220240260

Изменение веса значения при экспоненциальном сглаживании

SВклад значения y1Весовой коэффициент перед y1
S32500.25
S41250.125
S562.50.0625
S631.250.0313
S715.620.0156
S87.810.0078
S93.90.0039
S101.950.0020
S110.970.0010
S120.480.0005

Для S2 берется как есть, а вот в S3 при коэффициенте альфа равном 0.5, вклад y1 будет всего только 250, в S4 — 125, и так далее.

При этом большое значение имеет выбор коэффициента \alpha. Если поиграться с параметром «a» в калькуляторе (см. выше), то становится ясно, что чем выше его значение, тем быстрее отсчет фактически перестает влиять на сглаженное среднее, и наоборот - чем ниже, тем дольше сохраняется его влияние.

Соответственно, при малых \alpha, метод получения S2 оказывает большое влияние на результат. Присвоение S_2=y_1 это только один из методов. В качестве альтернативы начальным значением может выступать простое среднее по первым нескольким значениям y, например.

Но как же выбрать \alpha? Какой показатель больше всего подходит для моделирования данного ряда динамики? Никаких математических формул по точному расчету \alpha нет. Этот показатель чаще всего выбирается методом подбора, или методом «проб и ошибок» (англ. trial and errors). Я еще пару раз видел название «метод научного тыка» :)

Метод заключается в том, что берется несколько значений \alpha и потом среди них выбирается одно лучшее. Что же является критерием «лучшести» в нашем случае?

Таким критерием является минимизация среднеквадратической ошибки (mean of squared errors). Ошибка — это отклонение фактического значения от прогнозного. Для каждого значения S ее возводят в квадрат, чтобы избавиться от влияния знака, и затем вычисляют среднее по всем значениям. Тот показатель \alpha, для которого среднее значение минимально и является лучшим из нескольких.

Теперь пару слов про прогнозирование.

Следующее значение ряда прогнозируется прямо по формуле
S_{forecast} = \alpha y_{last} + (1-\alpha)S_{last}

В случае если надо получить прогноз на большее число отсчетов, используется техника под названием bootstrapping (даже не знаю, какой адекватный русский термин здесь подойдет). Последнее известное значение «y» принимается за константу, и используется в рекурсивной формуле

S_{forecast+n} = \alpha y_{origin} + (1-\alpha)S_{forecast+n-1}

Теперь применим полученные знания при расчете сглаженного среднего для графика, приведенного в начале статьи. Чтобы было интереснее, рассчитаем сглаженное среднее сразу для трех значений \alpha, и заодно посчитаем среднеквадратическую ошибку.

На графике для справки показано следующее прогнозируемое значение, т. е. сглаженные средние продлены на один отсчет дальше фактических данных.

PLANETCALC, Расчет экспоненциально сглаженного среднего

Расчет экспоненциально сглаженного среднего

Ряд динамики

Значение
50
52
95
59
52
45
38
10
47
40
Записей:
1-10 из 19

Знаков после запятой: 2
Среднеквадратическая ошибка 1
493.63
Среднеквадратическая ошибка 2
355.80
Среднеквадратическая ошибка 3
342.00
Экспоненциальное сглаживание
Файл очень большой, при загрузке и создании может наблюдаться торможение браузера.
Фактическое значение
Сглаженное 1
Сглаженное 2
Сглаженное 3
2468101214161820102030405060708090100

Экспоненциальное сглаживание

НомерФактическое значениеСглаженное 1Сглаженное 2Сглаженное 3
150000
252505050
39550.45151.6
45959.327386.32
55259.256664.46
64557.85954.49
73855.245246.89
81051.794539.77
94743.4327.515.95
104044.1437.2540.79

Кстати, замечу, что для данных по умолчанию в калькуляторе выше лучшим значением \alpha будет 0.7
При \alpha равном 1 (вообще это выколотый случай) сглаживание вырождается в повтор предпоследнего значения, что при большом разбросе соседних значений далеко не всегда дает минимум среднеквадратической ошибки.

Ссылка скопирована в буфер обмена
PLANETCALC, Экспоненциальное сглаживание

Комментарии