Alpha-Online
踩坑复盘

随机扰动与不可复现

为防 rank() / correlation() 分母为零而引入的极小随机扰动,让因子结果每次都不一样。#33 事故档案。

层级 DWS · 因子计算  严重度 中  关联 #33 · commit 2ebb979 · operators.py

现象

同一份数据、同一段代码,跑两次因子计算,结果对不上。回测无法复现,调参实验失去意义——你永远不知道指标变化是改动带来的,还是随机噪声带来的。

定位

为了避免 rank() / correlation() 在分母为零或全相等时崩溃,早期代码引入了一点极小的随机扰动来「打破平局」。扰动没有固定随机种子,于是每次运行的微小差异,经过截面排序被放大成了不同的持仓。

根因

为保证数值稳定而引入随机性,代价是牺牲可复现性。可复现性是量化研究的基本要求——不满足此条件,任何 A/B 对比实验均无法获得有效结论。

修复

固定随机种子收口,保证扰动可复现;同时改进 NaN 处理策略,从源头减少对扰动的依赖。此后「同输入 → 同输出」重新成立。

教训:研究系统中,确定性优先于便利性。任何引入随机性的环节都必须支持固定种子,否则无法区分策略改进与随机噪声。

关联

On this page