AutoGluon时间序列预测遇序列长度错误的解决方法及可行性咨询
问题背景
你使用AutoGluon处理730行(2年每日)的时间序列数据,数据包含date和total字段(total为预测目标),尝试构造TimeSeriesDataFrame并初始化TimeSeriesPredictor时,出现以下报错:
ValueError: Detected time series with length <= 2 in data. Please remove them from the dataset.
同时你想确认:单序列每日total数据是否可以用AutoGluon预测?
报错原因与解决方法
报错原因
你在构造TimeSeriesDataFrame时,将id_column设为了"index",这会把原DataFrame的每一行索引当作一个独立的时间序列ID,导致每个序列仅包含1条数据,触发了AutoGluon对序列长度的校验(要求每个序列长度至少大于2)。
解决步骤
统一单序列的item_id
因为你的数据是单序列,需要给所有行设置同一个item_id值,比如:# 在原DataFrame中添加item_id列,所有行使用同一个ID df['item_id'] = 'daily_total_series'正确构造TimeSeriesDataFrame
指定正确的id_column(你创建的item_id列)、timestamp_column(原数据的date字段)和value_column(原数据的total字段):train_data = TimeSeriesDataFrame.from_data_frame( df, id_column="item_id", timestamp_column="date", value_column="total" )构造完成后,
train_data会是一个以item_id和timestamp为多层索引、value为目标列的DataFrame,单序列的所有数据会归属到同一个item_id下,序列长度为730,满足要求。修正TimeSeriesPredictor初始化参数
- 将
target改为"value"(TimeSeriesDataFrame默认的目标列名为value) - 移除
ignore_time_index=True(时间序列预测需要保留时间索引信息) - 调整路径名更贴合你的任务场景(可选)
predictor = TimeSeriesPredictor( prediction_length=48, path="autogluon-daily-total-prediction", target="value", eval_metric="MASE" )- 将
单序列数据适配性说明
你的单序列每日total数据完全可以使用AutoGluon的TimeSeriesPredictor进行预测。AutoGluon支持单序列与多序列的时间序列预测任务,只要按照上述方法正确构造TimeSeriesDataFrame,保证单序列的长度足够(你的730行数据远大于预测长度48,满足模型训练要求),即可正常训练和预测。
内容的提问来源于stack exchange,提问作者Mark

