Метод сезонных трендов-лёссов для временных рядов в 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.