С момента последней записи о функции es() прошло уже достаточно времени, и, конечно же, я не бездельничал, а она не стояла на месте. Что же нового появилось? Давайте посмотрим.
- Построение прогнозных интервалов. Пока что с помощью функции можно получать полупараметрические и непараметрические интервалы. Первые используют ковариационную матрицу многошаговых ошибок (см. Продвинутые методы оценки), вторые используют идею с квантильными регрессиями Taylor and Bunn, 1999. По умолчанию в es() используется первый метод, так как второй оказывается не очень точным в случае с небольшим числом наблюдений. До параметрических интервалов пока руки не дошли — слишком муторные формулы.
- Построение комбинированной модели экспоненциального сглаживания. Для построения такой модели нужно использовать параметр model=»CCC». В этом случае функция оценит все возможные модели ETS, рассчитает информационные критерии и на основе них построит комбинацию. В основе комбинации лежит известный метод весов Акайке (AIC Weights), подробно о котором в контексте экспоненциального сглаживания написал Stephan Kolassa, 2011. В моей функции не обязательно перебирать все модели ETS. Можно их ограничить, например, вот так: model=»CCN» (скомбинировать все несезонные модели) — или так: model=»ACC» (скомбинировать все модели с аддитивной ошибкой). В общем, любой каприз за ваши деньги…
- В качестве целевых функций добавлены «MAE» и нечто под названием «HAM» — «Half Absolute Moment» (Половинный абсолютный момент). Оба они позволяют получить более робастные оценки, чем использующаяся по умолчанию «MSE«. HAM при этом ещё более робастен, чем MAE, причём настолько, что даёт модальные оценки, а не медианные. Помимо этого скорость вычислений с HAM на порядок выше скорости MAE, которая в свою очередь выше скорости MSE. Пока что, правда, оптимизатор не всегда находит глобальный минимум HAM, но я постараюсь это исправить… когда-нибудь… в будущем…
- Выбор модели при использовании любой целевой функции. Делается это на основе всё тех же информационных критериев (и расчёта выборочной дисперсии), что не совсем корректно (так как функция правдоподобия получается не максимизированной), но это хоть какое-то решение на данный момент.
- Ну, и, конечно же, как всегда, код оптимизирован, скорость вычислений увеличена, баги исправлены.
Отдельное спасибо Dmytro Perepolkin за интересные предложения и отловленные баги.