halo 的技术博客

返回

做量化的人几乎都踩过同一个坑:特征用错了差分阶数

  • 直接用价格 PtP_t 喂给模型?价格是 I(1)I(1)(单位根),均值、方差都随时间漂移,模型会学到一堆「伪相关」——价格和自己的滞后项高度相关,只是因为它俩都在往上爬。
  • 那用收益率 Rt=PtPt1R_t = P_t - P_{t-1}(一阶差分,d=1d=1)?平稳了,可你把记忆也一起差分没了。收益率几乎不携带「价格现在处在历史什么位置」这种长周期信息,很多慢变量信号就这样被洗掉。

中间地带是 分数阶差分(fractional differentiation) (1L)d(1-L)^ddd 不必是整数:用 0<d<10<d<1 把序列从 I(1)I(1) 降到 I(1d)I(1-d),在「足够平稳」和「保留记忆」之间取平衡。

上一篇专栏《分数阶差分 fracdiff》讲了特征工程视角(权重公式、ADF 权衡曲线、ACF、叠加图)。本文换一个应用视角:我们不去训练模型,而是直接用 fracdiff 选 dd 来服务样本外预测——在差分序列上拟合 AR(1) 并外推,看预测误差如何随 dd 变化。这个视角更贴近「我到底该用多大 dd 才最会预测未来」的真实问题。

一、分数差分的权重公式#

一阶差分 xt=xtxt1\nabla x_t = x_t - x_{t-1},权重为 [1,1][1,-1]。分数阶差分把「减去一阶」推广成无限阶 MA 权重,递归定义为:

w0=1,wk=wk1k1dk,k=1,2,w_0 = 1,\qquad w_k = w_{k-1}\cdot\frac{k-1-d}{k},\qquad k=1,2,\dots

对序列做 (1L)d(1-L)^d 就是 yt=k0wkxtky_t = \sum_{k\ge 0} w_k\,x_{t-k}dd 越大,权重衰减越快——更大的 dd 把越久远的历史「稀释」得越狠,记忆越短d=0d=0 退化成原序列,d=1d=1 退化为一阶差分。

二、实验设计:用 fracdiff 选 d 服务「样本外预测」#

我们造一段「类资产价格」:随机游走 I(1)I(1) + 轻微慢周期(3000 点里取 1500 点,前 75% 训练、后 25% 测试)。对网格 d[0,1]d\in[0,1]

  1. 做 fracdiff 得 ydy_d
  2. ydy_d 上拟合 AR(1) y^t+1=ϕy^t\hat y_{t+1}=\phi \hat y_t,用最后 HH 个点算样本外 MSPE
  3. 同时对该 ydy_dADF 检验,记录平稳性 pp 值。

关键假设:一个好的差分阶数,应该既让序列够平稳(ADF p<0.05p<0.05),又不把可预测结构洗掉(OOS MSPE 尽量小)

预测误差随 d 呈 U 形:太小非平稳、太大丢记忆

曲线是清晰的 U 形

  • d=0d=0(原价格):MSPE = 3.16,最差——非平稳让 AR(1) 外推完全失效(均值漂移、方差爆炸)。
  • d=1d=1(收益率):MSPE = 1.07,平稳了,但把慢周期记忆洗没了,外推只能靠短期自相关。
  • d0.65d\approx0.65:MSPE = 1.04,最优——既消除了单位根,又保留了足够的外推结构。

真实数字(本文合成序列):最优 d=0.65d=0.65、OOS MSPE=1.045;d=0d=0 的 MSPE 是其 3 倍;d=1d=1 的 MSPE 仅比最优高 2.7%。U 形的右臂很浅、左臂很陡——这说明「不够平稳」的代价,远大于「稍微多差分一点」的代价。

三、平稳性增益:d 一越过阈值,单位根即被消除#

把 ADF pp 值随 dd 画出来(对数轴):

平稳性增益:d 一越过阈值,单位根即被消除

  • d=0d=0:ADF p=0.104p=0.104非平稳(典型单位根)。
  • dd 一越过约 0.15–0.2,ADF pp 直接塌到 <0.001——单位根被干净消除。

注意这条曲线几乎是「阶跃」而非「斜坡」:平稳化不需要很大的 dd。一旦越过平稳阈值,再加 dd 主要在做「丢记忆」而不是「增平稳」,这正好解释了第二节 U 形左臂陡、右臂浅的形状——右臂那一段(dd 从 0.2 到 1.0)已经平稳,额外加的 dd 纯粹在牺牲记忆,所以 MSPE 只缓慢上升。

四、外推越远,平稳化的优势越明显#

我们对比三种 dd 在多个外推步数 hh 上的表现,以 d=0.3d=0.3(平稳且高记忆)为基准算相对 OOS R²:

外推越远,平稳化 d 的优势越明显

  • 原序列 d=0d=0(红):每期都最差,且外推越远越崩——非平稳的漂移随 hh 累积,R² 一路掉到深度负值。
  • 收益率 d=1d=1(蓝):短期还行,但中长 hh 因丢记忆而落后。
  • 平稳 d=0.3d=0.3(绿):在所有 hh 上稳定为正,且外推越远,相对优势越大

这给了实操一个明确结论:如果你的预测要外推多步(比如月频预测未来 N 期),平稳化的收益会被放大;只差一步的日内短线,收益没那么显著。

五、完整 Python 实现#

代码自包含(ADF 自己实现,不依赖 statsmodels),可直接复现本文全部图表与数字。

跑出来:最优 d=0.65d=0.65、OOS MSPE=1.045;d=0d=0 的 MSPE 是它 3 倍;d=1d=1 仅高 2.7%;ADF ppdd 越过约 0.2 后塌到 <0.001。

六、五个必须知道的坑#

  1. ADF 对分数根功率很低。当真实积分阶数接近 0.5,ADF 常常「分不清」I(0.6)I(0.6)I(1)I(1)。本文用 ADF 作指示性信号——真正该问的是「我的下游预测/检验的平稳性假设是否被满足」,fracdiff 给的是连续可调的旋钮,不是魔法数字。
  2. 权重要截断。理论上 wkw_k 无限长,取 L=50120L=50\sim120 足够,前 LL 个点因边界效应设为 NaN(预热),别拿去训练或预测。
  3. U 形最优 dd 对你的数据要重扫。本文最优 d=0.65d=0.65 来自「随机游走+慢周期」合成;真实资产价格常带结构断点、趋势、均值回复,最优 dd 可能更靠近 0.3–0.5,务必对你的数据重新扫描。不要把本文数字当默认值。
  4. AR(1) 外推只测「线性短期记忆」。本文用最简单的 AR(1) 当预测器,只为隔离「差分阶数」这一变量。真实预测会用更复杂模型,但 U 形结论(太小的 dd 因非平稳崩、太大的 dd 因丢记忆钝)是结构性的,与预测器选择无关。
  5. OOS MSPE 依赖切分。本文 75/25 切分,若数据有结构断点,切分点会强烈影响数值。严谨做法是用滚动/Purged 窗口重算 MSPE,看最优 dd 是否稳定。

七、小结#

分数差分的精髓就一句话:差分不是只有 0 和 1 两个档位dd 从 0 到 1 是一条连续光谱——0 端「有记忆但不平稳」、1 端「平稳但失忆」。

从「样本外预测」这个应用视角看,最优 dd 落在中间(d0.65d\approx0.65),预测误差随 ddU 形:左臂陡(不够平稳的代价极大),右臂浅(多差分一点主要丢记忆)。而且外推越远,平稳化的优势越被放大——这对月频、多期预测尤其重要。

把它当成预测前标准动作:先扫 dd、看 OOS 误差的 U 形、选谷底附近的折中值,再上复杂模型。这比无脑丢收益率进去,往往在外推时少踩一大截非平稳的坑。

所有图表均由本文代码在合成数据上真实生成,数字可复现;换成你的真实价量数据,只需替换「第三步」的数据源即可。

分数差分平稳化:在保留记忆与消除单位根之间取平衡
https://blog.halo26812.eu.org/blog/fractional-differentiation-stationary
Author halo
Published at 2026年7月19日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨