我希望通过在时间序列数据集上使用 statsforecast 实施扩展窗口交叉验证来评估不同经典时间序列预测模型的准确性,该数据集具有许多唯一 ID,这些 ID 具有不同的时间长度(范围在 1 到 48 个月之间)。我想预测每个窗口结束月份后的接下来七个月,并使用一些误差指标(例如 sMAPE)评估准确性。不同的时间序列存在潜在的季节性和趋势,所以我也想在交叉验证过程中捕获这些。但是,我有困难并且没有完全理解包的交叉验证功能中的不同参数(
step_size
,n_windows
,test_size
)。
有人可以建议我设置正确的参数吗?我正在寻找的功能是否可以通过包中提供的功能实现?如何确定
step_size
、test_size
和 n_windows
的最佳值?
仅供参考,我的数据如下所示:
df=
唯一_id | ds | y | |
---|---|---|---|
0 | 111111 | 2000-01-01 | 9 |
1 | 111111 | 2000-02-01 | 9 |
2 | 111111 | 2000-03-01 | 10 |
3 | 111111 | 2000-04-01 | 4 |
... | ... | ... | ... |
999999 | 111269 | 2003-10-01 | 32532 |
1000000 | 111269 | 2003-11-01 | 0 |
1000001 | 111269 | 2003-12-01 | 984214 |
明确地说,各个 unique_id 的历史记录可能会有所不同(即,时间序列的长度在 unique_ids 之间不相等。)
我已经使用必要的模型实例化了我的 StatsForecast 对象:
sf = StatsForecast(
df=df,
models=[AutoARIMA(season_length=12), AutoETS(error_type='zzz'), Naive()],
freq='MS',
n_jobs=-1,
fallback_model=Naive()
)
然后,我调用cross_validation方法:
results_cv = sf.cross_validation(
h=7 # Predict each of the future seven months
step_size=?,
n_windows=?
)
我已经尝试了step_size和n_windows的各种参数值,也尝试了单独的test_size(例如,7,因为我想比较每个窗口中过去7个月的实际值和预测值),但我总是留下出现以下错误:
我希望最终结果看起来与 statsforecast 教程中提供的数据框类似:
或向下滚动到“crossvaldation_df.head()”
任何指点将不胜感激。谢谢!
我遇到了与使用大于系列尺寸的
step_size
相关的类似问题。您可以尝试过滤掉较小的系列或尝试在这些系列的开头添加零。
您可以通过以下方式检查:
df.groupby('unique_id').agg({'y': 'count'}).sort_values(by='y')
希望有帮助!
根据我的理解/实验,对地平线、截止/n_windows 和步长的各种值进行:https://github.com/moj-analytical-services/splink/discussions/2087#discussion-6404591