使用季节分解()时如何计算频率(频率)



我试图将季节性、趋势和残差与时间序列"XYZ.csv"(在 2 年内收集的销售数据(分开。

[XYZ.csv 包含 2 列 - 日期和销售额。日期已设置为代码中的索引。

import pandas as pd
import statsmodels.api as sm
df = pd.read_csv('XYZ.csv')
df.date=pd.to_datetime(df.date)
df.set_index('date',inplace=True)
res = sm.tsa.seasonal_decompose
(df.colA.interpolate(),freq=?, model='additive')
resplot= res.plot()
observed = res.observed
seasonality = res.seasonal

此代码工作正常。唯一的麻烦是了解如何计算此时间序列的频率?如果有任何预定义的方式可以做到这一点。提前感谢您的任何帮助/建议!

一种非常粗暴的方法包括通过探索所有潜在周期来搜索最小化残差的周期:

res_vs_lag = {}
for p in range(1, 250):
    res = sm.tsa.seasonal_decompose(df.colA, period=p, model='additive')
    res_vs_lag[p] = res.resid.abs().sum()

然后,您可以绘制生成的序列:

pd.Series(res_vs_lag).plot()

一种优雅的方法依赖于自相关或光谱分析(https://www.statsmodels.org/dev/generated/statsmodels.tsa.stattools.pacf.html(。

最新更新