一列因子为什么不能直接丢进模型?

因子研究流水线

约 11 分钟1 个动手实验4 道小题

学完你能说清楚先固定时间和顺序,再去极值、统一尺度、控制暴露,最后删掉重复信息。

01学完这一课,你能做到什么

一张表可能同时包含价格、、估值和财务数据。它们的单位不同,极端值的影响也不同。直接把原始列送进模型,模型可能学到单位差异、异常记录或行业暴露,而不是你想研究的关系。

学完这一课,你应该能:

  1. 按固定顺序完成因子处理,并记录每一步配置;
  2. 用 MAD 缩尾极端值,解释为什么是截断而不是删除整行;
  3. 用 Z-score 统一尺度,区分横截面处理和时间序列处理;
  4. 用行业和规模回归得到残差,理解去掉了什么;
  5. 在训练集内识别冗余特征,并留下可复核的处理前后统计。

这套流程改善的是数据条件,不会凭空制造预测规律。

因子从原始表到模型输入
  1. 1核对数据日期、缺失、可用时间
  2. 2去极值限制异常影响
  3. 3中性化控制行业和规模暴露
  4. 4标准化统一比较尺度
  5. 5删冗余减少重复信息
  6. 6训练模型只用当时可见数据

一句话记住处理顺序固定,参数可追溯。

02先固定处理顺序和时间边界

一个可解释的教学顺序是:核对数据 → → 行业与规模中性化 → 对残差标准化 → 筛选冗余 → 训练模型。不同项目可以有不同顺序,但必须提前写明,不能每次实验暗中改变。

每天的横截面处理,只能使用当天真正可见的股票和数据。比如在某个交易日计算因子,不能把后来才公布的财报提前填进去。跨时间估计的均值、标准差或回归系数,也只能用训练区间拟合,验证和测试阶段沿用已经保存的参数。

处理前先做四项检查:

  • 日期是否排序,是否有重复记录;
  • 股票和行业标识是否一致;
  • 缺失值到底是缺失,还是确实为零;
  • 基本面数据的披露时间是否早于决策时间。

正常的极端行情是风险的一部分,不能为了让分布好看就删掉整天或整只股票。每一步都应保存样本数、参数、缺失数量和输出统计。

流水线每一步回答什么问题
异常影响

去极值

极端值是否把尺度和回归结果拉偏?

共同暴露

中性化

因子结果是否主要来自行业或规模?

单位比较

标准化

不同量纲能不能放在一起比较?

重复信息

删冗余

多个特征是否在重复表达同一件事?

一句话记住先检查可用时间,再讨论算法。

03MAD:用稳健尺度处理极端值

均值和标准差容易被极端值拉动。假设一列因子是 1、2、3、4、100。均值是 22,样本标准差约为 43.6。用均值加减三倍标准差,仍可能把 100 留在范围里。

MAD 是中位数绝对离差,计算分三步:

  1. 先找中位数 m。这里 m=3;
  2. 计算每项到中位数的绝对偏差:2、1、0、1、97;
  3. 再取这些绝对偏差的中位数,所以 MAD=1。

在正态分布参考下,1.4826×MAD 可以作为稳健尺度估计。若缩尾倍数 k=5,边界为:

下边界 = m − k×1.4826×MAD = 3 − 5×1.4826×1 ≈ −4.41上边界 = m + k×1.4826×MAD = 3 + 5×1.4826×1 ≈ 10.41

因此 100 会被截到约 10.41。这里是保留这条股票记录、只修改该列的值,不是删除整行。实验里把 k 调到 3 以下,可以看到 100 被截断;调回 5,边界约为 −4.41 到 10.41。

k 是待验证参数,不是固定真理。1.4826 只是正态参考下的尺度换算,不能据此说金融数据一定服从正态分布。三倍标准差覆盖约 99.7% 也只在相应分布条件下成立。

如果 MAD=0,不能除以零,也不能把不同数值强行截到同一点。可以按事先规则保留原值并标记、改用其他稳健尺度,或移除没有区分度的列。

MAD 缩尾边界

边界 = 中位数 ± k × 1.4826 × MAD

1、2、3、4、100,k=5 时约为 −4.41 到 10.41。

一句话记住缩尾改数值,不删除整行。

动手试试

MAD 参数探索

调节 MAD 倍数 k,观察极端值缩尾边界、被截断数量和处理后样本分布。

动手试试

调节 MAD 倍数 k,观察极端值如何被缩尾

教学样本
下边界-18.45
上边界33.45
MAD3.50
被截断的值1
处理后范围32.45
处理后的样本分布
30113.57142857142857197.14285714285714280.71428571428567364.2857142857143447.8571428571429531.4285714285713615
完成条件
把 k 调到 3 以下,看到 100 被截断
把 k 调回 5,边界约为 −4.41 到 10.41

教学样本包含 1、2、3、4、100 及扩展值;数字只用于理解 MAD 缩尾机制。

04Z-score:统一尺度,不改变分布形状

的范围常在 0 到 100, 的绝对值可能很小。直接把两列相加,单位较大的列可能影响更大。Z-score 把每个值改写成“离本组均值多少个标准差”。

公式是:

z_i = (x_i − μ) ÷ σ

假设一组数的均值 μ=10、标准差 σ=2,某个值 x_i=14:

z_i = (14−10) ÷ 2 = 2

它表示这个值高于该组均值 2 个标准差。z 接近 0 表示接近均值,正值在均值上方,负值在均值下方。对这组处理过的数据,均值通常接近 0,标准差通常接近 1。

标准化不会把任意分布自动变成正态分布。它也不会消除缺失值,更不会自动修复未来数据泄漏。要区分两种口径:

  • 同一天多只股票的横截面标准化,回答谁在当天相对更高或更低;
  • 同一只股票跨日期的时间序列标准化,回答今天相对它自己的历史位置。

如果标准差 σ=0,这一列没有区分度,不能直接相除,应按预先规则处理。训练阶段拟合出的 μ 和 σ 要保存,后续验证、测试和新数据沿用,不能把测试期重新算进去。

两种标准化回答不同问题
横截面

今天谁更高

同一天比较多只股票,适合做相对排名。

时间序列

今天处在什么位置

一只股票跨日期比较,适合观察自身历史偏离。

一句话记住Z-score 统一尺度,不保证正态。

05中性化:把共同暴露从因子里拆出来

银行和科技公司的经营结构不同,、 的常见水平也可能不同。只按低 PB 排名,结果可能主要是在买银行或小盘股,而不是在行业和规模相近的公司里寻找相对便宜。

原始因子可以写成一个横截面回归:

BP_i = β0 + 行业贡献_i + β_size×规模特征_i + 残差_i

这里 BP 是 PB 的倒数,代表账面价值与的比值。规模特征可以选对数市值,但必须把具体定义写进配置。行业通常用类别虚拟变量表示。

假设某股票的模型预期 BP 是 0.8,实际 BP 是 0.7:

残差 = 实际值 − 预测值 = 0.7 − 0.8 = −0.1

在这个回归口径下,负残差表示 BP 比行业和规模模型预期更低,也就是相对更贵;正残差表示比预期更高。残差只是去除了模型覆盖的共同成分,不等于提取出纯粹因果意义上的 。

几个示例:大银行 A 预期 0.8、实际 0.8,残差为 0;大银行 B 预期 0.8、实际 0.7,残差为 −0.1;小银行预期 1.0、实际 0.9,残差也为 −0.1。小银行的绝对 BP 更高,却仍然低于它自己的模型预期。

中性化会降低简单估值排名的行业集中,但如果研究目标本来就是行业轮动,把行业暴露全部去掉可能损害研究目标。先写清楚要研究什么,再决定控制哪些变量。

残差的方向

残差 = 实际因子值 − 行业与规模模型预测值

实际 0.7、预测 0.8,残差为 −0.1。

一句话记住中性化去暴露,不等于得到因果 alpha。

06减少冗余:别让重复因子制造虚假信心

多个窗口、距离和技术指标,可能高度相关。它们不是完全相同,但如果把一组相近变量都放进模型,模型会获得很多看似不同、实际重复的信息,参数也更不稳定。

一个示例是:从 52 个技术特征中识别出 24 个冗余特征,保留 28 个。这个数字只说明一次研究过程,不能变成所有数据都保留 28 项的固定规则。

筛选前要固定:

  • 相关系数类型,是 Pearson、Spearman 还是其他方法;
  • 相关阈值;
  • 遇到一组高度相关特征时,按稳定性、缺失率、解释性还是训练期表现保留谁;
  • 这些规则只在训练集内拟合。

不要用测试集收益决定删掉哪一列。删完以后,仍要在同一时间切分上比较未经处理的基准和处理后的版本。结果不能只看输入分布是否更漂亮,还要看表现、交易成本、和风险。

如果有五只股票、少数行业,行业和规模回归的自由度可能不足。小样本可以用来演示公式,但不能证明整套流程已经有效。建议导出每列处理前后的最小值、最大值、中位数、均值、标准差、缺失数和被截断数。

输入更漂亮,不等于策略更好
分布检查

处理后更规整

均值、标准差和极值更容易比较。

策略检查

样本外仍有效

还要统一区间、成本和交易规则比较。

一句话记住删冗余只能用训练信息做决定。

07验收:把处理过程变成可审计记录

完成下面的验收:

  1. 手算 1、2、3、4、100 的中位数、MAD 和 k=5 的边界,说明 100 为什么被截断而不是删除整行;
  2. 对两组量纲不同的数据计算 Z-score,检查排序是否保持;
  3. 构造实际 BP 和预测 BP,分别手算正、负、零三种残差;
  4. 对一列 MAD=0、标准差=0 和缺失值,写出明确处理规则;
  5. 保存一份基准流水线和一份完整处理流水线,用相同训练、验证、测试区间比较;
  6. 检查行业虚拟变量是否完全共线,确认所有处理参数只由训练期拟合;
  7. 导出处理前后的统计表,并记录被截断数量、样本数和每步配置。

完成标准不是“处理后的分布最漂亮”,而是你能回答:每一个值怎么变的、参数从哪里来、有没有使用未来数据、删掉的信息是否有依据。下一课才进入建模。

一句话记住每一步都要能复算、解释和回退。

检验
检验一下

4 道小题

全部答对,这一课就算真正读懂了。答错了会告诉你为什么。

01数据 1、2、3、4、100,中位数为 3、MAD 为 1,k=5 时上边界约是多少?
02均值 10、标准差 2 的一组数据中,值 14 的 Z-score 是多少?
03实际 BP 为 0.7、模型预测 BP 为 0.8,残差是多少?
04哪种做法会造成处理参数泄漏?
知识卡

这一课,浓缩成一张卡

学完可以保存或分享给朋友。保存成图片的功能会在下一版加上。

AI+金融投资训练营 · 因子研究流水线因子进入模型前最重要的流程原则是什么?

固定时间边界和处理顺序,每一步都记录参数并能从处理前数据复算。

  • 先检查可用时间
  • MAD 缩尾不删行
  • 测试集不能参与拟合
quant.jtxaionline.com
这一课的要点

记住这 5 句话

  1. 01因子流水线要固定顺序,并把数据可用时间和处理参数记录下来。
  2. 02MAD 用中位数和绝对偏差抗极端值,缩尾修改数值而不是删除整行。
  3. 03Z-score 统一尺度,但不把任意分布变成正态,训练参数要保存复用。
  4. 04中性化通过行业和规模回归取残差,去除共同暴露不等于得到因果 alpha。
  5. 05冗余筛选只能使用训练信息,处理后的输入仍要用样本外结果和成本检验。
完成这一课

完成这一课

读完讲义、动手做一次实验、答对小题,这一课就算学完了。

  • 读完讲义
  • 完成一次 MAD 参数探索
  • 通过随堂自测

实验数据AI+金融投资训练营教学样本。固定教学样本

固定教学样本只用于解释量化研究方法,不代表任何真实标的未来表现,也不构成投资建议。