1.数据预处理
时间序列预测的数据集千差万别,比如最小值0,最大值10000000的情况,因此需要做一些数据预处理操作例如归一化。如果数据差异很大,通常是先取对数缩小scale,再进行归一化处理。
2.窗口选择
一般会选择历史N天作为Encoder输入,预测未来M天的。M是问题事先定义好的,若预测未来15天的结果,那么M就是15。在N的选择上,需注意N要比M长,一般是M的1.5倍以上。另一方面,要注意数据的周期性。若数据呈现明显的以365天为周期的年周期性,那么N至少应涵盖一年,才能让模型预测出接下来的事情。此外,还需注意N的选择不能太长,会导致模型训练慢或收敛困难的问题。
3.模型
如果是单点预测,LSTM就能取得非常好的效果。如果是长周期预测,就必须加入一些Attention才能更好的进行对齐,这个时候可以考虑LSTM+Attention,或者直接上Transformer模型。另一个考虑因素是你的数据噪音大不大,一个经验是,噪音越大的数据集,用越简单的模型往往能取得更好的效果,而用了复杂模型反而会因为过拟合导致效果较差。
4.指标
时间序列预测的评价指标可分为两类,一类是scale无关的(如smape、rmsle、mape等),一类是scale相关的(如mse、rmse、mae、nd等)。Scale无关的,即不管每个样本点的取值多大,对最终loss的贡献都是差不多的,因为这些指标计算的都是预测值相对于真实值的偏差百分比。而scale相关的指标,数值越大对loss的贡献就越大,因为它们直接计算预测值和真实值的差值。
在选择指标时,如果更关注大值样本的效果,可以用scale相关的指标;如果更关注全局所有样本的效果,可以用scale无关的指标。对于scale无关的指标还要注意一点,在一些场景中,小值样本比大值样本多得多,数据呈现长尾部分。这种情况下使用scale无关指标,则更偏向于看小值样本效果。同时,小值样本可能存在更大的误差,比如真实值是1,预测值是2,这偏差就是100%了,小样本本来就噪声大。如果用scale无关指标在这类数据上评估,很可能反映的是拟合噪声的效果。因此更合适的做法是对测试集做一个采样,小值样本、大值样本保留差不多的数量,才能更科学的评价模型效果。
参考资料:知乎 fareise https://www.zhihu.com/question/68422363/answer/2676654789