Метод сезонных трендов-лёссов для временных рядов в Python

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

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

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

2 ответа

Здесь вы можете найти пример разложения по сезонному тренду с использованием LOESS (STL), из statsmodels.

В основном это работает так:

       from statsmodels.tsa.seasonal import STL
stl = STL(TimeSeries, seasonal=13)
res = stl.fit()
fig = res.plot()

Я не пробовала 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, но у меня не было времени. Вполне готов принять тянуть запросы.;-)

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

Там действительно:

https://github.com/jrmontag/STLDecompose

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

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

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

Другие вопросы по тегам