如何去除时间序列中不断增大的波动率以适配RL算法训练需求
时间序列振幅归一化处理方案

处理目标
对该时间序列做变换,使得整段序列的最大、最小振幅大体一致。
背景说明
该数据用于训练RL算法,不断增大的振幅会额外提升问题复杂度,而算法仅需要用到序列的趋势和归一化后的振幅,序列本身的振幅增长趋势没有实际作用。
可落地的实现方法
- 滑动窗口归一化
该方法适配RL实时推理的场景,不需要提前获取全量数据,只需要设定和序列波动周期匹配的滑动窗口长度,每次仅对窗口内的数据做归一化处理,即可保留局部趋势,同时把所有窗口的振幅统一到相同范围。
示例代码:
import pandas as pd # window参数根据你的序列波动周期调整 window_size = 30 df['norm_series'] = df['origin_series'].rolling(window=window_size, min_periods=1).apply( lambda x: (x - x.min()) / (x.max() - x.min()) if x.max() != x.min() else 0.5 )
- 趋势分离归一化
先通过HP滤波或者n次多项式拟合,把序列拆分为趋势项和波动项两部分,仅对波动项做全局的min-max归一化,之后再把趋势项加回归一化后的波动项,即可在完全保留原始序列趋势的前提下,把所有时间段的振幅拉平到同一区间。 - 对数变换+标准化
如果序列振幅是指数级递增的,可以先对序列取自然对数压缩增长幅度,再做全局Z-score标准化,操作最简单,适合振幅增长均匀的场景。
内容的提问来源于stack exchange,提问作者twilker
相关产品推荐
相关产品推荐

