使用月度数据训练DeepAR时间序列模型出现单位不支持错误如何解决
为什么月度数据不被支持?
这个报错来自Pandas 2.0及以上版本的规则调整:M(月末)、Y(年末)这类时间单位的长度不固定,比如不同月份天数在28-31天不等,2月还会随闰年变化,无法对应唯一的固定时长,因此Pandas废弃了这类单位在timedelta计算中的使用。而SageMaker DeepAR的底层逻辑依赖Pandas做时间偏移计算,传入freq="M"时就会触发该报错。
如何在DeepAR上训练月度数据?
直接将freq参数替换为Pandas当前支持的月度偏移量别名即可:
- 如果你的数据是按月末统计的,设置
freq = "ME" - 如果你的数据是按月初统计的,设置
freq = "MS"
这两个参数和原"M"的业务逻辑完全一致,不需要修改其他的数据集结构、prediction_length、context_length等配置,仅替换freq值就能正常运行。如果后续运行仍有索引对齐问题,可以提前把数据集的时间索引统一转换为pd.PeriodDtype(freq="ME")(对应月末)或者对齐到固定月末/月初的datetime64类型。
是否可以通过设置日度等效参数适配月度数据?
不建议这么操作。月度的天数没有固定值,强行设置等效天数会导致时间偏移计算错误,出现预测窗口错位、时间序列对齐偏差的问题,会严重影响模型预测效果。DeepAR本身原生支持月度频率训练,仅需替换正确的freq参数即可,无需用日度参数绕路,反而增加不必要的出错概率。
内容的提问来源于stack exchange,提问作者Cybernetic
相关产品推荐
相关产品推荐

