Skip to content

第30章:识别无效和伪因子 ​

第29章给了一整套检验:分组、单调性、IC、ICIR、覆盖率、换手率、分层、分阶段、衰减、显著性。清单本身没有问题,问题在于这份清单是可以被打勾打得很漂亮的。同一份历史数据,换一个股票池、换一段样本期、换一组参数、换一种预处理,总有一版能让所有指标同时好看——因为看结果的人不知道这是第几个版本。

所以这一章不教新因子,也不教新检验,而是给一套审查动作:拿到一份漂亮的结果,先查什么、怎么查、查出来说明什么、什么情况下可以放行。它的目标不是让你怀疑一切,而是让"不信任"变成有顺序、有数字、能复述的动作。

本章围绕三个问题展开:一个漂亮回测的超额收益可能从哪里来;哪些问题的方向是确定的、哪些只是让数字碰巧变好;试过的版本越多,门槛该抬多高。

这一章是第六部分(因子研究方法)的收尾。第31章要把多个因子合成一个评分,而合成会放大每个因子的毛病:一个因子上偏一点点,合进总分就变成整个组合的系统性上偏。

本章讨论因子研究本身,所以主体仍然是个股因子。ETF 产品没有因子值,但有两处会完整地遇到这一章的全部问题:① 用指数或板块信号做 ETF 轮动时,被检验的信号会经历同样的一轮挑选;② ETF 的历史数据里,清盘、合并、改名造成的幸存者偏差比个股更严重(第18章、第32章),而折溢价与成交额不足则是"不可成交价格"的另一种形式(第41章)。

一、先分清两类问题:一类让数字一定偏高,一类只是碰巧变好 ​

现象。 同一个策略、同一份数据、同一个时间段,两个团队跑出年化 25% 和年化 5%。这不是谁算错了,而是他们在很多地方做了不同的选择:股票池用全A还是中证1000,样本从 2015 年还是 2016 年开始,形成期取 6 个月还是 12 个月,成本按 0.25% 还是按 0.1% 估。

把这些选择列出来,就是研究者手里的自由度——所有能自由决定的开关。它们大致是这几组:

  • 样本:股票池怎么生成、样本期从哪天到哪天、退市和停牌股票怎么处理;
  • 时间:每条数据什么时候算可用、信号在哪一天形成、在哪一天成交;
  • 口径:因子用水平值还是变化值、用什么预处理、要不要中性化(第28章);
  • 参数:窗口长度、分组数量、持有期、阈值;
  • 交易:成本按多少估、买不到的时候怎么办。

自由度不是坏事,研究本来就要做选择。问题在于每做一次选择,就制造了一次"看一眼结果再改"的机会,而这些机会不会留下痕迹。所以要审查一份结果,第一步不是看它的指标,而是分清它可能坏在哪里。这一章讲的所有毛病可以分成两类,它们的性质和应对方式完全不同。

第一类:用了不真实的东西。 当时还不知道的信息、当年不存在的股票、从来没有成交过的价格、从来没有付过的成本。这一类问题的方向基本确定是让结果偏高,道理很简单:所有被漏掉的部分——还没公布的差业绩、退市股票的大跌、买不进去的涨停板、没交出去的交易费——恰恰都是会拉低结果的那些东西。方向确定的意思是:只要它存在,你不需要再看任何统计指标,那个数字已经不能用了。

第二类:研究过程本身在挑选。 反复改设计直到结果好看、同时试了很多个版本只报最好的那个、参数刚好卡在一个奇怪的点上、几个因子其实是同一件事。这一类问题不一定让结果偏高——如果你事先有明确逻辑、只试了两三次、参数在邻域里都成立,它可能完全没有发生。但它也不需要篡改任何数据就能发生,因此没法靠"看数据"发现,只能靠记录自己做过什么来约束。

落到决策: 审查一份漂亮结果,先做第一类检查,因为它便宜、有明确的查法、而且能一票否决;再做第二类,因为它需要研究者自己交代,你只能通过追问和补做检验来降低不确定性。下面几节按这个顺序展开。

二、前视偏差:用了当时还不知道的信息,数字想不高都难 ​

现象。 有个策略每年 4 月特别准,其余月份平平。这种"季节性"很少是真实的规律,更常见的原因是它用了当时还看不到的财报数据。

前视偏差定义在第27章:在回测的某一时点上,用了那一天之后才会公开的信息。那里给的是怎么防(每条数据按公告日算可用、有公告日用公告日、没有才用法定截止日)。这里补的是怎么在结果里认出它。

先讲影响方向:一定偏高,而且经常是数倍而不是百分之几。 原因是它删掉的不只是几个数字,而是整段"坏消息尚未公开"的时间。用报告期数据代替公告日的例子最清楚:年报的报告期是 12 月 31 日,但披露集中在次年 4 月(第27章:82% 的年报在 4 月披露,其中 4 月最后一周占 43.6%)。用报告期数据等于在 1 月初就知道全年业绩,平均提前了一个季度。业绩差的公司会拖到后面披露(第27章:2022 年报里业绩差的公司延后披露更明显),被提前知道的那一批,恰好是最容易带来"超额收益"的那一批。

常见的入口有五个,都值得逐一核对:

  1. 财务数据用了报告期而不是公告日(上面这个);
  2. 分析师一致预期用了回填的历史值,而不是当天的预测快照(第26章、第23章);
  3. 指数成分用了今天的名单,而不是当时的名单(第18章:调样有公告日与生效日,中间还有时间差);
  4. 复权价格用了后来才公布的分红送股方案(第27章:复权因子是随时点变化的);
  5. 财务数据用的是后来修订的版本,而不是当时公布的那一版(第27章:追溯重述与覆盖式写入)。

怎么查(三问): 这条数据哪一天才能知道?回测里把它连到哪一天?按当时可见的那一版重跑一遍,收益变化多少?第三问是关键——不用争论,直接做一次对比,差异就是这类错误的量级。

边界。 不是所有"未来的信息"都能彻底消除。例如分红方案在董事会预案公布之前,任何人都不知道会分多少,回测里就只能用假设;这时正确的做法不是假装没有影响,而是写出影响的方向(这个假设是偏乐观还是偏保守),让读结果的人知道这份数字的偏差朝哪边。

三、幸存者偏差与样本选择偏差:回测里活着的股票,不是当年全部的股票 ​

现象。 一个"专挑困境公司"的策略,回测收益相当漂亮。但仔细看它 2016 年的持仓,十几只股票里有一半今天已经不在行情数据库里了——它们退市了。这个策略在回测里从来没有真正持有过那些股票跌到底的过程,因为跌到底的那一段,随着退市一起从数据里消失了。

幸存者偏差的方向是确定的:偏高。 它的意思是:回测用的那份历史数据里,只留下了活到今天的公司,而当年失败的公司已经连同它们的失败记录一起消失了。

先给它一个量级,你才知道什么时候该重视它。A 股 2024 年退市 52 家,其中 40 家是因为连续 20 个交易日收盘价低于 1 元(面值退市),占七成以上;2023 年是 47 家;而 2015—2020 年年均退市不足 20 家。2020 年退市改革以来累计 179 家公司退出,是改革之前十年总和的近四倍。

这两个阶段要分开看:

  • 近年这 52 家相对于全市场五千多家,大约只占 1%。 单看比例不大,所以它不会把所有因子的结果都抬高一大截。
  • 但它会在两个地方被放大。 一是低分组:面值退市意味着这些股票在退市前跌了绝大部分,而它们恰恰是"最低估值、最差财务、最高风险"这几类因子的常客。漏掉它们,等于把低分组里最惨的那一段删掉了,多空差会被拉大(第29章讲过,不少因子的多空差正是靠低分组下跌贡献的)。二是专挑困境公司的策略:它被删掉的,正是自己当年真实发生的损失。

还有一个更隐蔽的时间问题:这个偏差的严重程度随年份变化。 2015—2020 年退市极少,那段数据几乎不受影响;2022 年之后退市数量翻倍,同一套规则在近三年的数据上受的影响明显更大。所以"用同一套规则回测二十年"这句话本身要打个折:这二十年里,不同年份的数据质量并不一样。

样本选择偏差是它的邻居,但方向不总是确定的。 幸存者偏差说的是"只保留了活着的样本",样本选择偏差说的是更宽的一件事:检验只在你能拿到数据的那一部分公司上做。

  • 只在有分析师覆盖的公司上检验盈利预测修正因子——覆盖本身偏向大市值、被关注的公司(第26章);
  • 只在沪深300 成分股内检验——那是 300 只大公司,结论不能直接搬到全市场(第18章);
  • ETF 候选池只保留今天还在交易的产品——清盘和合并的产品从历史里消失了(第32章);
  • 数据从某一年开始才有,于是检验实际上是在"有数据的那几年"上做的(第27章:覆盖率随时间变化)。

为什么它的方向不总是确定的? 因为结果取决于你漏掉的那部分在原策略里是赚还是亏。有个公开的例子能说明这一点:有研究把几百个已发表的异象放在统一口径下重跑,做的第一件修正就是剔除市值最小的那批股票并改用市值加权,结果大部分异象明显变弱甚至消失。这说明在原来的检验里,最小市值的那批股票贡献了很多收益——把它们漏掉,会让结果变低,而不是变高。方向恰好和漏掉退市股相反。

怎么查: 问三个具体问题。股票池是按哪一天的名单生成的?退市、长期停牌、暂停上市、改过名的股票在不在里面?把近三年退市的那几十只股票拿出来,反查它们有没有进过股票池?

边界。 早期 A 股退市极少,所以在 2015 年以前的数据上,幸存者偏差通常不是主要矛盾。这反而带来一个容易忽略的后果:当你用"很长的历史"来证明一个策略稳健时,不同区间受到的影响不一样,靠长样本取得的信心有一部分是借来的。

四、不可成交价格与成本遗漏:回测买到的价格,可能从来没有出现过 ​

现象。 一个策略每年换手六倍,回测年化 25%。扣掉真实成本、再扣掉那些买不进去的涨停板,剩下的比指数还少。

先说方向:没有成交过的价格和没有付出的成本,都只会让数字偏高。 这一点没有例外,所以这类检查不需要争论,只需要核对。

"不可成交"有三个常见来源:

  • 一字板。 第24章讲过:信号最强的那一批股票,往往正是连续涨停、开盘即封死的那种,回测按收盘价买入,实盘是买不到的。
  • 停牌。 停牌期间你既不能买也不能卖,但很多回测会用停牌前的价格继续持有、甚至按停牌前的价格在信号变化时换掉(第3章)。
  • 信号与成交的时点错位。 如果信号用当天收盘价算出来,成交也按当天收盘价,那就等于"在知道自己排名之后才决定买什么"。第35章会把该用的规则一条条定下来,这里只需要记住:时点错位是一种前视偏差,只不过它藏在成交规则里,不在数据里。

成本遗漏更容易被忽略,因为它看起来"只是几项小钱"。 用第29章的口径(一次完整换手——卖掉一只再买进另一只——约 0.25%,含双边佣金、卖出印花税 0.05%、双向过户费 0.001% 和滑点,为示意值,真实值取决于你的佣金合同和股票流动性):

  • 月换手 50% → 一年换手 6 倍 → 成本约 6×0.25%=1.5%;
  • 如果策略做的是小微盘,单次成本按 0.5% 估更接近现实 → 成本约 3%。

一个毛超额收益 6% 的策略,前一种情形被吃掉四分之一,后一种被吃掉一半。而这两个数字都还没有算冲击成本——第41章会说明资金规模变大之后,成本会怎么跟着涨。

怎么查: 看报告里有没有这四样东西——成交价假设、费用假设、买不到时的处理方式、换手率。少任何一样,任何"扣完成本仍然有效"的结论都不成立。

边界。 成本假设本身也是估计值,写 0.25% 不代表精确,写 0.5% 也不代表保守。要区分两种问题:"完全不计成本"是错误,"成本按 0.25% 估但实际可能 0.4%"是乐观。前者必须改,后者要做敏感性检查——把成本乘 1.5 倍、2 倍,看结论还在不在。

五、数据窥探与过拟合:参数稍微一动就崩的结果,通常是被挑出来的 ​

现象。 你有个想法:股价"连续三天收红"之后会不会继续涨。第一次试,IC 0.01,看不出什么。把观察窗口从 3 天改成 5 天,IC 0.02。股票池从中证1000 换到全A,IC 0.04。再试一次 2 天,IC 0.05、t 值 2.3。你没有篡改任何数据,只是试了几次——但你已经不知道这 0.05 是市场规律,还是这四次尝试里的最好运气。

这个过程叫数据窥探。 它不需要故意作弊,准确的定义是:在看到结果之后修改设计。每改一次设计,就产生一次新的检验;而检验次数一旦增加,每一次检验的含义就被稀释(下一节会把这件事量化)。数据窥探最麻烦的地方是它不留痕迹——除了研究者自己,没有人知道他试过多少个版本。

它和过拟合是同一件事的两面。 过拟合是"把历史数据里的偶然波动当成了规律"。判断它有没有发生,有个很朴素的算法:数一数你可以自由调的东西有多少个,再看你有多少数据。 第29章强调过"N 是期数不是股票数"——在时间维度上,60 个月的数据就是 60 个观测。如果策略里有 6 个可以自由调的参数,等于每个参数只分到 10 期观测。这时候把参数调到最好,几乎必然是在拟合噪声。

参数敏感性检验是这一类问题里最便宜的工具。 做法是把参数在最优值附近展开成一条线,看结果是不是连续变化:好的信号,参数动了以后表现会缓慢变差;被挑出来的信号只有一个点好看,两边立刻塌下去。

参数邻域:稳定信号是平原,挑出来的信号是针尖

读图:横轴是同一个参数取不同值,纵轴是 IC(均为示意数据)。蓝色那条线随参数变化缓慢起伏,最低的一端也还有 0.033;橙色那条线只有一个点站在 0.048,左右两侧立刻塌到 0.005 和 −0.003。只看峰值,橙色那条线更高;但蓝色那条线才是能用的——因为你不可能保证实盘时的参数正好落在最优点,而且这个"最优"本身就是历史数据的产物。图要说明的是:参数邻域的形状比参数的最优值信息量大得多。

真实的因子应该是什么形状?看一个公开实例。 华泰金工在一份单因子测试报告里测过一批"历史分位数因子"。这类因子的取值不是"这家公司的毛利率是多少",而是"当前的毛利率在它自己过去 n 个季度里排第几"——它比的不是谁现在毛利率高,而是谁离自己的历史高位更近。n 就是那个可以自己选的参数,报告取了 6、8、12 三个值。以单季度销售毛利率为例,全 A 股口径下的结果是:

回看期数(季度)6812
因子收益率均值0.88%0.85%0.73%
Rank IC 均值5.63%5.37%4.69%
多空组合夏普比率2.011.821.52

三个指标同向、幅度不大、没有跳变——这才是参数应该有的样子。同向,说明三个口径在讲同一件事,不是某个指标被极值带偏;幅度不大,说明换个参数不至于从有效掉到无效;没有跳变,说明相邻参数之间是平滑过渡,而不是"只有这一格好用"。(这三个数是按该因子的调仓频率算的:它随财报更新,报告每年只在 4 月末、8 月末、10 月末各取一个截面,所以 0.88% 是单次截面的收益,不能乘 12 当作月频。)报告作者也在文末写明这个因子"具有参数敏感性",这是老老实实的交代——敏感就承认敏感,而不是只留一句"因子有效"。

落到决策: 报告任何因子,给出的应该是参数邻域上的结果表,而不是一个最优点。凡是"只有最优参数才有效"的因子,直接从候选里删掉,不必争论。

边界。 参数敏感性检验只能筛掉一部分明显的挑选:一个在邻域上平滑、但背后没有任何经济逻辑(第19章)的因子,仍然可能是噪声。平滑只说明它不是"针尖式"地挑出来的,不说明它是真的。

六、多重检验:同一个 t 值,试过的版本越多越不算数 ​

现象。 你手上这个因子的 t 值是 2.1,刚刚越过了 2。但它是从 20 个版本里挑出来的——窗口长度 5 种 × 股票池 2 种 × 要不要中性化 2 种。注意你不是随便挑了一个版本,你是把 20 个都跑完,然后留下最好的那个。 第29章说 |t| 大于 2 可以认为"不太可能是纯噪声",可当"最好的那个"是靠挑选得来的时候,那条线就守不住了。上一节查的是参数邻域像不像针尖,可那只覆盖"参数"这一种挑选——换成挑股票池、挑预处理、挑持有期,邻域图上什么也看不出来,得换一套算法。

t = 2.1 回答的是"随便测一个"的概率,不是"20 个里挑最好"的概率 ​

同一个 2.1、同一个门槛,问法换一下,答案就从 3.6% 变成 51.7%——一半以上的研究都会挑出一个这样的结果。 要看清这个差别,先得知道 2.1 是怎么算出来的。

先说 t 值在算什么。 你有 4 年月度数据(约 49 个月),每个月算一次 IC,平均 0.03。你想知道的其实是:这 0.03 代表因子真有预测力,还是 49 个随机数碰巧平均成 0.03?检验的做法是反过来问一句——假设这个因子完全没用(每月 IC 纯粹乱跳、长期平均为 0),那么"碰巧凑出平均 0.03"的概率有多大? 算出来是 3.6%。

t = 2.1 就是 3.6% 的另一种写法。 两者说的是同一件事,只是刻度和习惯不同。3.6% 小于我们事先定下的 5% 这条线,所以判"不太可能是噪声";而 5% 换成 t 恰好是 1.96——这就是第29章"t 大于 2"的来处。顺带澄清一个常见误读:5% 不是"准确率",不能读成"有 95% 的把握"。 它说的是"纯噪声下出现这么好看的结果的概率",是一份允许自己偶尔看错的尺度。

现在看这个 3.6% 成立的前提。 它算的是"随便测一个因子,它碰巧好看的概率"。可你做的事不是随便测一个——你把 20 个版本都跑了,然后留下最好的那个。这时候你手上那个"最好的",已经从 20 个里被挑过一遍了。 它碰巧好看的概率不再是 3.6%:

你试了几个版本其中至少有一个超过 2.1(看绝对值)的概率
1 个3.6%
20 个51.7%
100 个97.4%
1000 个几乎必然

换句话说:哪怕你测的 20 个版本全是没用的噪声,也有一半以上的机会(51.7%)挑出一个绝对值超过 2.1、看起来很显著的结果报出来。而你会把它当成果。 为什么会这样?把三种情形的分布画在一起就清楚了:

同一个 t = 2.1 在不同尝试次数下的常见程度

读图:横轴是 t 值,纵轴是"这个 t 值出现的相对频繁程度"。三条曲线的高度各自做过归一化——不同情形下的量级差得远,不归一就没法放在一张图上比位置,所以只看它们的左右位置,不要比较高低。蓝线是只测 1 个版本的情形,最高点在 0,2.1 落在最右侧的尾巴上——确实稀有。紫线是把 20 个版本都跑完、留下最好的那个的情形,整条曲线向右移,最常见的 t 值变成 1.8 左右,2.1 落在曲线中段,属于"多半能挑到"的高度。灰线是把 1000 个版本都跑完的情形,最常见的位置继续右移到 3.1,2.1 已经落到曲线左端之外,比典型值还低一大截。图要说明的是:同一个 t 值,参照物从"一个"换成"一批里最好的",它的含义就完全变了——要判断 2.1 够不够,必须先知道它是从几个版本里挑出来的。

这不是作弊。 你没有改数据、没有删样本,只是做了研究者最自然的事:换几个设置试一试,留下最好看的。问题出在"留下最好看的"这个动作本身——一旦经过挑选,报出来的那个就不再是随机的一个,而是被运气筛过一遍的结果。 这件事的名字叫多重检验:在同一份数据上做了很多次检验,却只报最好的那一次。

药方:把每个版本的门槛从 5% 收到 0.05/M ​

药方只有一条:把每个版本的门槛从 5% 收到 0.05/M(这套做法叫 Bonferroni 修正)。在说明它为什么管用之前,先看清不管它会漏掉多少:每个版本都独立地"有 5% 的机会被纯噪声冤枉成显著",试 M 个版本,平均放过的假显著个数就是 0.05M——试 20 个平均 1 个,试 100 个平均 5 个。

"平均 1 个"不等于"风险很小"。 这两个数经常被混为一谈:平均个数说的是长期平均能漏掉几个,至少冤枉一次的概率说的是你这一次研究会不会撞上假显著。后者远不是 5%——20 个版本里至少出现一个假显著的概率是 64.2%。(它比上面的 51.7% 还高,因为卡的门槛不同:51.7% 卡在 2.1,64.2% 卡在 5% 那条线 1.96。门槛放低一点,概率就高一截。)

这个药方压住的就是"至少冤枉一次"的概率。 为什么是除以 M?因为出错的总机会要摁在 5% 以内,M 个版本就得平摊,每个版本各自只留这 5% 的 1/M。这样"至少冤枉一次"的整体概率仍不超过 5%,粗糙地理解就是——要求它运气好到连试 M 次都难得一见。 门槛收紧,等价于要求更高的 t 值。把这几件事排在一起看:

试过的版本数 M平均冤枉个数至少冤枉一次的概率要求的 t 门槛门槛夏普(10 年样本)
10.055%1.96无
100.540.1%2.810.50
20164.2%3.020.60
100599.4%3.480.80
100050约 100%4.061.03

每一行从左读到右就是这一节的逻辑:试得越多,噪声里白白冒出来的"显著"越多,所以 t 门槛和夏普门槛都被推高。第 1 行是第29章的情形(只试一次,t 大于 1.96 就够);你那种"20 个版本里挑一个"的情况是第 3 行,t 要到 3.02 才算数——你的 2.1 不是"刚过线",是差得很远。

第四列是第29章那个 t 值(IC 序列的均值除以标准误)抬高的新线。第五列最容易被当成多余的,解释一下。 t 门槛管的是 IC 序列,夏普管的是组合收益(第29章说过,两者的读法本来一样),而同一个问题在组合层面照样成立:如果你试了 1000 个组合,纯噪声里表现最好的那一个也能做出 1.0 左右的夏普——所以拿"夏普 1.0"当有本事的证据是站不住的。门槛夏普说的就是:只靠运气,试 M 次能挑出的最高夏普大约是多少,你的策略必须超过它。样本长度也在里面:样本越短、估计越不准,噪声里能冒出来的最高夏普就越高。表里按 10 年算,如果只有 5 年,M=1000 时门槛升到约 1.46;有 20 年则降到约 0.73。样本长度的影响有多大,看下面这张图比读数字快:

试过的版本数与门槛:样本越短、试得越多,要求越高

读图:横轴是试过的版本数(1 到 10000,等距排布对应的是成倍增长),纵轴是纯噪声下"最高夏普"的期望值,也就是你的策略必须超过的门槛;三条线分别是 5 年、10 年、20 年样本。同一个回测夏普 1.0:用 20 年数据、只试过 1 个版本,它远超门槛;用 5 年数据、试了 1000 个版本,它连门槛都够不到。 图要说明的是:判断一个夏普值值不值得相信,必须同时知道样本有多长、试过多少次,缺任何一个都无法判断。

落到决策: 以后拿到任何一个 t 值或夏普,先问一句"这是第几个版本试出来的"。答不上来的时候,不要按"只试了一次"放行,而要按"试过很多次"处理——门槛往高里设。报告那一侧也一样:写清楚试过的版本数,是让门槛能被算出来的唯一办法;不写,读的人只能自己猜一个更严的数。

抬高的门槛管到哪里、管不到哪里 ​

抬高门槛不是免费的:它要求更长的样本,而且只管"是不是噪声"这一件事。 先看样本——接回第29章的 t=ICIR×N(ICIR 是 IC 均值除以 IC 标准差,N 是期数):ICIR 0.3 的因子要 t=2 需要 44 期,要 t=3 就涨到 100 期(月频八年多);ICIR 0.5 的因子从 16 期变成 36 期(三年)。这就是券商因子报告普遍用十年以上样本的原因——不是为了好看,是因为门槛在那里。

学术界的线也画在 3 附近。 Harvey、Liu 和 Zhu(2016)把 1967—2014 年间发表在主要期刊上的因子数了一遍,共 316 个,结论正是"新因子应当要求 t 大约超过 3",并估计其中约 27% 属于伪发现。Hou、Xue 和 Zhang(2020)把 452 个已发表的异象用统一口径重跑,剔掉最小市值股票、改用市值加权后,大部分结果消失(第20章讲的微盘问题)。也有更严格的估计把门槛提到 3.4 以上、把伪发现率算到 45%,说明"门槛该多高"本身还有争论;但 "2 太低"这件事没有争论。对你的用处是:有人递来一份因子报告却没交代试过几次,就按 3 来要求它。

边界。 ① Bonferroni 假设各次检验互不相关,而真实的因子之间相关性很高(价值类因子彼此尤其如此),所以它偏保守。保守的方向是"更难通过",对资金有限、成本比机构高的个人投资者来说,这个方向是安全的。② 它有一条重要例外:已经被多个市场、多个年代独立复现的因子,不该按"新发现"来罚。 动量在几十个市场上被反复验证过(第24章),不需要再证明自己不是第 400 个被试出来的东西;而你自己上周拼出来的那个组合因子,需要。③ 门槛只回答"是不是噪声",不回答"值不值得做"。 第29章把它们分成两关:成本吃掉多少、只做多拿不到低分组,这两件事抬高门槛一件也管不了。

七、因子重复与共线性:名字不同的两个因子,很可能是同一个因子 ​

现象。 你已经有价值、质量、成长、动量四个分数。现在加进第五个——"经营现金流除以总市值"。回测结果几乎没变,选出来的股票换了不到五只。你以为这是"信息被确认"的好消息,其实更可能说明:你加的不是一个新因子,而是把"便宜"这个方向又加了一遍权重。

重复通常来自三种情况:

  1. 同一份原始数据的两种写法。 盈利收益率 EP 与市盈率 PE 是同一个比率的倒数,在利润为正的区间里一一对应;第21章把它们统一成 EP,正是为了不重复计算。
  2. 同一个事实的不同代理。 第26章提示过两处:业绩预告因子和成长因子测的是同一件事(未来利润会变好),机构持仓因子和规模、质量因子测的也是同一件事(大公司、好公司更容易被机构持有)。
  3. 一个因子是另一个的线性组合。 "总市值最小的一批"和微盘因子是同一个东西;动量的 12 个月形成期和 6 个月形成期高度重叠(第24章)。

这种"数值同步"的关系叫共线性:一个因子动,另一个跟着动,两者在评分里实际上是同一个方向的两次入场。

为什么它属于这一章? 因为它其实是多重检验的另一种形式。你以为自己做了 5 次不同的检验,实际是把同一个方向检验了 5 遍。如果这个方向本身是噪声,重复检验不会让它变成真的,只会让你更相信它;而合成评分的时候,这个方向的权重被悄悄放大了 5 倍——第31章要处理的正是这件事。

怎么查。 三个动作,从便宜到贵:

  • 算因子值的截面相关矩阵。第29章的分层检验查不出这一类问题,因为那是"因子与股票属性"之间的关系,而共线性是"因子与因子"之间的关系;
  • 算排序重叠率:各取前 10% 的股票,看有多少重合。这个工具第29章已经用过一次(那是因子换手率的算法),换个用法就看出了重复;
  • 把两个因子放进同一个分组或回归,看新加入的那个还有没有增量贡献。

边界。 相关系数高不等于冗余。两个相关系数 0.7 的因子仍可能各自带着不同的信息,判断标准是"加进去之后结论有没有变",而不是"相关系数有没有超过某个阈值"。另外相关系数本身会变:第28章说过中性化会改变因子之间的相关性结构,所以相关矩阵必须在最终采用的那套预处理之后再算一遍,否则查的不是你真正要用的那组因子。

八、最后一关是没看过的那段数据,而且得是真正的没看过 ​

现象。 前面所有检查你都过了:数据可用日对,股票池保留了退市股,成本算进去了,参数邻域平滑,因子之间也不重复。上实盘半年,超额收益是零。

这是最常见、也最不能用"检查"补救的一种失败:样本内有效、样本外失效。 这里两个词说的都是数据的用法——样本内是你研究时反复看过、用来调整设计的那一段,样本外是你留在一边、事先不看的那一段。

先给一个通常的量级,你就知道它有多普遍。McLean 和 Pontiff 研究过 97 个已发表的股票异象,把它们分成三段看:在原始论文用的样本期里,效果是 100%;样本期结束、但论文还没发表的那几年(真正的样本外)剩下约 73%;论文发表之后再往后,剩下约 42%。两个结论:一是样本内效果里大约有三成会在样本外消失;二是效果公开之后还会再少将近一半。

第一段掉的三成,说明样本内确实有被拟合进去的成分;后一段的变化,说明真正有效的那部分会因为资金涌入而被抹平(第19章的拥挤)。这个量级值得记住:不是"样本外就完全失效",而是平均剩七成、公开后再剩四成——所以拿到一份样本内年化 25% 的结果,先在心里换成十七八,再往下扣成本。

但也要接受另一件事:真有经济逻辑的因子同样会整段失效。 华泰金工在回顾自己团队的量化行业轮动研究时写道:传统基本面因子在 2024 年"几乎全军覆没",其改进的残差动量策略在 2024 年三季度到 2025 年二季度也出现了较大幅度的持续回撤,之后才修复。专业团队、有逻辑、有长期样本的因子尚且如此。区别在于:真因子失效之后常常还能修复,伪因子失效之后不会回来——这也是为什么本章要花这么大力气区分这两类。

所以最后一关必须留一段真正没看过的数据,它有三条纪律:

  1. 先切分,再看结果。 训练段、验证段、测试段的边界要在研究开始前定好,不能等看到结果再决定"从哪一年开始算测试"。
  2. 测试段只能用一次。 反复地"测试"它,它就已经变成了新的样本内数据——这是样本外检验里最常见、也最容易被自己骗过去的错误。
  3. 划分方式各有用途,前向切分、滚动窗口、留一段完全没碰过的数据,分别适合不同的研究阶段,第37章展开。

边界。 样本外也不保证未来。一段没看过的历史数据仍然是历史数据,它和真正的未来之间隔着制度变化、参与者结构变化和资金规模变化。样本外是必要的关卡,不是保证书。

九、把这些检查排成一条顺序 ​

现象。 前面几节把毛病分开讲了,但真拿到一份报告的时候,你不可能把七八个问题挨个问一遍,也不知道该从哪个开始。

答案是按 "能不能一票否决"和"查起来贵不贵" 排序:先查那些便宜、又可能直接否掉结果的,最后才动用只能用一次的那一项。

审查一份漂亮回测的顺序

读图:审查分五步,按"能不能一票否决"分成三组。第一组是数据与样本、成交与成本(第 1、2 步):它们便宜、能一票否决,所以最先做——第 1 步只需要改一次股票池的生成方式,第 2 步只需要读一遍回测规则里写了什么。第二组是研究过程(第 3、4 步):试过多少次、参数稳不稳、因子之间是否重复,这三样没有一个能靠"查数据"得出结论,只能靠研究者交代,或者由你补做检验。第三组只有一步,就是样本外:它放在最后不是因为最不重要,而是因为它只能用一次,前面没查清的毛病会白白浪费掉这次机会。

检查项属于哪一类问题数字会怎么变怎么查
股票池按哪天的名单生成第一类:样本偏高(漏掉的是退市等失败者)反查近三年退市股票是否进过池
每条数据的可用日第一类:信息时间一定偏高,常是数倍抽查记录,用当时可见版本重跑
成交价与费用假设第一类:交易一定偏高看报告有没有写、成本翻倍后结论是否还在
买不到时怎么处理第一类:交易一定偏高看规则是否允许"买不到就跳过一次"
试过多少个版本第二类:研究过程不确定,靠门槛约束看有没有记录;按第六节抬高门槛
参数在邻域上的表现第二类:研究过程不确定补一张参数邻域表,找针尖
因子之间的相关性第二类:研究过程不确定算相关矩阵与排序重叠率
没看过的那段数据样本外约剩七成事先切分,只用一次

一条最重要的纪律:把"试过的版本数"当成和 IC、换手率一样必须报告的数字。 它不需要精确,但必须诚实——写上"大约试过 30 个版本",比什么都不写有用得多,因为有了它,门槛才谈得清楚。

落到决策: 你在这一章学到的能力,说到底是读报告的能力。以后看到"IC 0.06、回测年化 25%"这样的结论,你应该能在一分钟内把它拆开:数据哪一天可用、股票池怎么来的、成本算没算、试了几次、因子和已有的重不重、样本外留没留。这几个问题答不上来的结果,不是"不可信",而是"还不知道可不可信"。

本章小结 ​

  • 漂亮结果的可能来源分两类:用了不真实的东西(方向一定偏高,能一票否决)与研究过程在挑选(方向不确定,只能靠记录和门槛约束)。审查顺序从第一类开始。
  • 前视偏差一定偏高,而且常常是数倍。 用报告期代替公告日,等于提前一个季度知道业绩(年报 82% 集中在 4 月披露)。
  • 幸存者偏差一定偏高,但严重程度随年份变化。 A 股 2024 年退市 52 家(40 家面值退市),2023 年 47 家,而 2015—2020 年年均不足 20 家——近三年的数据比十年前的更受影响。
  • 样本选择偏差的方向取决于漏掉谁。 漏掉退市股会偏高;而统一口径重跑时剔除最小市值股票,会让很多异象明显变弱,方向反而向下。
  • 不可成交价格和成本遗漏都只会偏高。 月换手 50% 对应年成本约 1.5%,小微盘按 0.5% 单次成本估算则约 3%;信号与成交的时点错位,本质是藏在成交规则里的前视偏差。
  • 数据窥探=看到结果之后改设计,它不留痕迹。判断过拟合可以数两个数:可自由调的参数个数、时间维度上的期数(不是股票数)。
  • 参数邻域的形状比最优值更重要。 稳定信号是"平原",被挑出来的信号是"针尖"。华泰金工的实例里,同一因子在回看期数 6/8/12 时 Rank IC 均值 5.63%/5.37%/4.69%,三个指标同向缓慢下降——这才是正常的形状。
  • 多重检验把门槛抬高。 单个版本有 5% 的冤枉机会,试 M 个版本平均冒出 0.05M 个假显著(20 个版本平均 1 个,而"至少冒出一个"的概率高达 64%)。真正的问题不是"平均几个",而是你报的是挑出来的那个——它服从最大值的分布,试 20 个版本时最高 t 的常见水平已经移到 1.8 上下,出现 2.1 这么高(看绝对值)的概率超过一半。t 门槛因此从 1.96(1 次)升到 2.81(10 次)、3.02(20 次)、3.48(100 次)、4.06(1000 次)。结合第29章的 t=ICIR×N,ICIR 0.3 的因子要过 t=3 需要 100 期;学术界统计 316 个已发表因子后给出的线同样是"新因子要 t 超过 3"。
  • 重复的因子是多重检验的另一种形式。 查相关矩阵、查排序重叠率(各取前 10% 看重合)、查加进去之后有没有增量。相关系数高不等于冗余,标准是"结论有没有变"。
  • 样本外平均剩七成,公开后再剩四成(97 个异象:100% → 73% → 42%)。真因子也会整段失效,区别是它还可能修复。测试段只能看一次,反复看就成了新的样本内数据。

下一章开始把因子组装起来:当你手上有价值、质量、成长、动量这些通过检验的分数时,怎样合成一个排序,而不把这一章讲的毛病在合成环节重新引进来。