Метод сезонных трендов-лёссов для временных рядов в Python - PullRequest
0 голосов
/ 26 июня 2018

Кто-нибудь знает, существует ли основанная на Python процедура для разложения временных рядов с использованием метода STL (Seasonal-Trend-Loess)?

Я видел ссылки на программу-оболочку для вызова функции stl в R, но я обнаружил, что это нестабильно и громоздко с точки зрения настройки среды (Python и R вместе). Также ссылке было 4 года.

Может ли кто-нибудь указать на что-то более новое (например, sklearn, spicy и т. Д.)?

Ответы [ 3 ]

0 голосов
/ 01 августа 2018

Я не пробовал STLDecompose, но я взглянул на него, и я считаю, что он использует лёсс общего назначения. Это трудно сделать правильно и имеет тенденцию быть неэффективным. См. Несуществующий STL-Java репо .

Пакет pyloess предоставляет оболочку Python для того же базового Фортрана, который используется в исходной версии R. Вам определенно не нужно проходить через мост к R, чтобы получить такую ​​же функциональность! Этот пакет активно не поддерживается, и у меня иногда возникали проблемы с его сборкой на некоторых платформах (таким образом, здесь разветвление). Но однажды построенный, он работает и является самым быстрым, который вы, вероятно, найдете. Я испытывал желание изменить его, чтобы включить некоторые новые функции, но просто не могу заставить себя модифицировать Fortran (который является предварительно обработанным RATFOR - очень ассемблерным языком, как Fortran, и я нигде не могу найти препроцессор RATFOR ).

Я написал нативную реализацию Java, stl-decomp-4j, которую можно вызывать из python с помощью пакета pyjnius . Это началось как прямой порт оригинального Fortran, подвергнутого рефакторингу в более современный стиль программирования. Затем я расширил его, чтобы разрешить квадратичную интерполяцию Лёсса и поддержать сглаживание сезонного компонента после разложения, особенности, которые описаны в исходной статье, но не были включены в реализацию Fortran / R. (По-видимому, они находятся в реализации S-plus, но немногие из нас имеют к этому доступ.) Ключ к тому, чтобы сделать это эффективным, заключается в том, что сглаживание лесса упрощается, когда точки равноудалены, а сглаживание по точкам выполняется простым изменение весов, которые используются для интерполяции.

Примеры stl-decomp-4j включают один блокнот Jupyter, демонстрирующий, как вызвать этот пакет из python. Я, вероятно, должен формализовать это как пакет python, но у меня не было времени. Вполне готов принять тянуть запросы. ; -) * 1 021 *

Я бы хотел увидеть прямой порт такого подхода к python / numpy. Еще одна вещь в моем списке «если бы у меня было немного свободного времени».

0 голосов
/ 13 декабря 2018

RSTL - это порт Python STL R: https://github.com/ericist/rstl. Он работает довольно хорошо, за исключением того, что, по мнению автора, он в 3 ~ 5 раз медленнее, чем STL R.

Если вы просто хотите получить линию тренда lowess, вы можете просто использовать функцию lowess Statsmodels https://www.statsmodels.org/dev/generated/statsmodels.nonparametric.smoothers_lowess.lowess.html.

0 голосов
/ 26 июня 2018

Действительно есть:

https://github.com/jrmontag/STLDecompose

В репо вы найдете блокнот Jupyter для использования пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...