aimclub / Fedot.Industrial

Python framework for automated time series classification, regression and forecasting
https://fedotindustrial.readthedocs.io
BSD 3-Clause "New" or "Revised" License
83 stars 7 forks source link

Implement time series forecasting #56

Closed nicl-nno closed 9 months ago

nicl-nno commented 1 year ago

TSF functionality should be implemented using FEDOT as a core.

The DL models for forecasting should be added as candidate operations.

They can be obtained from: https://github.com/jdb78/pytorch-forecasting

valer1435 commented 1 year ago

SSA - like method was implemented.

Here results obtained with n_components=5, and n_components=50 image image

v1docq commented 1 year ago

Касательно группировки компонент. Есть "простой" и "сложный" вариант. Простой вариант - Группировка на основе матрицы взаимных корреляций. Выглядит она так. image Это матрица размером KxK, где k - число компонент. Каждый элемент матрица - метрика близости собственных векторов. Сам алгоритм: image Функции для реализации алгоритма лежат здесь Вариант посложнее - группировка на основе частного анализа и анализа регулярности угла между собственными векторами. Статья. Мини разбор отправил ввиде пдф файла.

v1docq commented 1 year ago

Касательно группировки компонент матрицы V. Вижу здесь два подхода. Первый это мы проводим анализ компонент матрицы U (матрицы в которой вектора это "типовые" временные подпоследовательности). Тут идея в том что мы группируем между собой "типовые" временные подпоследовательности (тренды, колебания и прочее). Допустим мы знаем что вектора Un и Un+1 коррелируют между собой, тогда мы домножаем каждый из них на соотвестующие им собственные числа, складываем получившиеся вектора и потом каким то образом "усредняем". Таким образом у нас получится набор из типовых "трендов", "циклик" и прочего. Возникает вопрос - а какие тогда брать вектора Vn (вектора которые описывают временную динамику каждой из типовых компонент)? Первая стратегия - брать вектор Vn, который соотвествует наибольшему собственному значению вектора Un из которого был получен соотвествующий "типовой" вектор. Вторая стратегия - "усреднять" динамики (брать взвешенную комбинацию или использовать "более слабые" динамикак как экзогенные переменные) image

valer1435 commented 11 months ago

Добавил модель, использующую ансамбль предсказаний моделей autoTheta, autoETS, autoARIMA для предсказания динамик VT

v1docq commented 11 months ago

https://giotto-ai.github.io/gtda-docs/0.5.1/notebooks/time_series_forecasting.html

В этом блокноте показано, как с помощью giotto-tda можно создавать топологические признаки для задач прогнозирования временных рядов. Топологические признаки создаются на основе последовательных скользящих окон по данным. В моделях скользящих окон единый массив временных рядов X формы (n_timestamps, n_features) превращается во временной ряд окон по данным, имеющий новую форму (n_windows, n_samples_per_window, n_features). При построении моделей прогнозирования со скользящими окнами возникают две основные проблемы.

Целевая переменная должна быть правильно "выровнена" с каждым окном, чтобы задача прогнозирования была осмысленной и, например, не происходила "утечка" информации из будущего. В частности, необходимо "передискретизировать" y так, чтобы она тоже имела длину n_окон.

Для решения этих проблем предоставляет набор трансформаторов с методами resample, transform_resample и fit_transform_resample.