Time series forecasting improved
Внес несколько доработок в логику прогнозирования временных рядов.
Сейчас основной вариант применения такой: временной ряд преобразуется в lagged-представление и затем выполняется fit/predict на его train и test-частях. Пример:
Что изменено:
-
Длина предсказанного временного ряда равна длине test-данных. Те части, которые предсказать невозможно (первые window_size шагов, для которые нет предшествующих признаков), заполняются nan-ами. Это позволяет более удобно сравнивать obs с predicted.
-
Добавлен унаследованный от Chain класс TSChain, который добавляет новый метод forecast - пошаговое прогнозирование временного ряда "в будущее". Принцип тут такой:
- Модифицировал логику для композитных моделей для временных рядов.
Т.к. нет смысла предсказывать ряд повторно с помощью secondary-модели, то реализована логика ансамблирования: временные ряды преобразуются в табличные признаки и воспринимаются уже как features для обычной регресионной задачи.
Пример (здесь показан простейший случай взвешенной суммы двух рядов):
- Всякое разное
Что хорошо бы доделать:
- Задать idx как даты и сохранять их в ходе все преобразований.
- Довести до ума LSTM - сейчас его качество довольно низкое и для корректной работы нужно, чтобы windows_size был равен forecast_length.
- Проверить на реальных датасетах.
- Доделать ансамблирование для многомерных рядов
- Улучшить разбиение на масштабы, выявление периодичности и т.п (мб какие-то библиотеки для этого есть).
Но в целом на тестах и разных примерах (см ts_forecasting_examples) работает как будто бы корректно, например:
UPD: скетч по логике forecast