时间序列标准化中的一些问题

  • 2021 年 1 月 4 日
  • AI

关于标准化这里提两点经验:

1、使用log变换之后,如果使用nn可能会出现loss不下降或者时收敛非常慢的问题,之前在做电商序列预测的时候就出现过这样的问题,因为对数变换有一个比较大的问题就是变换之后所有的数据都是非负的,这可能会导致使用rnn或者cnn的时候,出现loss没法收敛,预测的时候大部分的预测结果都差不多的问题,后来采用了standardscaler的方法就没有这个问题了,主要原因之一都是非负数据可能会导致dead relu problem,因为很多时候我们习惯会直接用relu来作为大部分层的激活函数,cnn中更是默认使用relu;(当然这种这种问题不一定会出现,有时候合理的网络设置或者合适的数据场景不会出现这样的问题,比如kaggle web traffic的数据集就莫得这个问题)

2、分层标准化的问题,简单的标准化方法就是直接对所有的sku的数据同时进行标准化,这样做可能存在的问题就是数据本身的量纲差异还是会比较大,比如有一些商品的销量是[0,1,2,3,4,…10],有一些爆款商品的销量是[10000,20000,30000….100000],这样进行标准化之后,可以看一个例子:

可以看到,使用standarscaler整体的量纲差异较小,不过仍旧是存在一定的差距,而使用minmaxscaler则没有消除量纲的差异。

因此,分层标准化的问题,也就是每一个sku单独进行一个标准化处理。比如上面的[0,1….6]对应的sku 单独做一个标准化,然后[10000,20000,30000,40000]对应的sku单独做一个标准化,或者就是序列数据相似的序列一起做标准化,不过这个就涉及到时间序列的相似性的衡量会麻烦一些。这种方法其实也比较好理解:

比如红色和黑色是两个量纲不同的sku的拟合,最佳曲线大概是二者之间,但是二者如果分别进行标准化之后量纲统一了,则:

对于模型来说,大大降低了拟合的难度,收敛的会更快。

Exit mobile version