第五部分 · 量化研究如何产生可信结论 · 第 28 章

从问题到因子: 把投资判断变成可检验假设

量化研究不该从下载数据或挑模型开始,而该从一个足够小、能够被证伪的金融问题开始。因子只是把问题写成一列可重复计算的数字。这一章先问收益可能来自现金流、风险补偿、行为偏差还是市场摩擦,再把解释变成信号,用 IC、分层回测和失效条件检查它。

主线五 本部分第 1 / 10 章

本部分的问题:一个金融判断怎样变成可证伪假设,再经过数据、回测、模型和实盘约束?

读完后,你能从问题出发完成研究闭环,而不是先找模型、再给结果编故事。

读完这一章,你会明白

  • 因子是把投资判断变成一列有口径、可排序、可检验的数据。
  • IC、RankIC 和分层回测用于检验因子是否对未来收益有排序信息。

金融现场 1. 便宜的股票可以让你难受三年

2018 到 2020 年前后,许多传统价值策略经历了一段漫长的难熬期。昂贵的成长公司越涨越贵,低估值公司却迟迟不动;每隔几个月都有人宣布“价值投资已经死亡”。对因子研究者来说,最折磨人的不是一天大跌,而是逻辑似乎没坏、账户却连续多年被市场嘲笑。

后来风格发生反转,部分价值组合重新占优。这个过程并不能证明价值因子永远有效,却揭示了因子收益的真实形状:如果一项溢价毫不痛苦、人人都能坚持,竞争早就会把它挤没。所谓风险补偿,常常就是你必须先承受一段足以让人放弃的经历。

因此把投资判断变成因子时,要在开跑前写下失效条件。是连续三年跑输就算错,还是估值与未来现金流的关系消失才算错?没有预先定义,研究者会在亏损时随意改故事,盈利时又把运气包装成机制。

2. 因子不是魔法,是一列有口径的数据

读到这部分之前该知道什么

第五部分要把“判断有没有效”这件事引入数据、回测和真实交易这个完整循环。读这章时,关键是把每一条建议还原到实际规则——数据怎么对齐、成本怎么算、股票池包含哪些股票、结果有多可信、样本外能不能撑住。看懂这一部分,你才算真正进入了本书的世界。

在动手造因子之前,先看看这条路的天花板有多高。有个叫詹姆斯·西蒙斯的数学家,年轻时是顶尖的几何学家,拿过数学大奖,还给美国政府破译过密码。40 多岁时他离开学术界,创立了文艺复兴科技公司,办公室里招来的不是西装革履的交易员,而是一群数学家、物理学家和计算机科学家。他们做的事情,本质上就是本章要讲的事:把海量市场数据变成一列列数字,再用统计和模型,从中找出微弱但稳定的规律。

他们交出的成绩单是金融史上最夸张的那张:旗舰产品“大奖章”基金,从 1988 到 2018 年,在扣掉高得离谱的费用之后,年化收益仍约 39%,扣费前更是高达约 66%。更反直觉的细节是,据公开资料,他们单笔交易的胜率大概只有 50.75%——和抛硬币几乎没区别。秘诀不是每次都猜对,而是把那一点点微弱的优势,靠海量交易次数和严格风控,滚成惊人的复利。这就是量化的灵魂:不追求算准明天,只追求长期站在概率这一边。而这一切的起点却朴素得惊人——把一个投资想法,变成一列可以检验的数字。这列数字,就是因子。

来亲手翻译一句试试。你说“便宜的股票未来表现可能更好”——这话说给人听没问题,可量化系统听不懂“便宜”这种形容词,你得给它数字:市盈率 PE、市净率 PB、企业价值倍数 EV/EBITDA,或者它们的倒数。选定口径之后,每只股票每天都有了一个确定的数,这一列数,就是你的估值因子。

再翻译两句。“最近涨得强的股票可能继续强”——可以译成过去 20 个交易日收益率、过去 60 日收益率,或者剔除最近几天反转影响之后的动量因子。“质量好的公司更稳”——可以用 ROE、毛利率、负债率、现金流质量这些指标拼出一个质量因子。看到没有,投资界的每一句朴素判断,背后都能站出一列数据。

所以因子不是一张别人发给你的固定清单,而是一种把投资直觉数据化的方法。而数据化的关键永远是口径:用什么数据?在哪个时间点可见?缺失值和极端值怎么处理?每天怎么更新?适用于哪些股票?口径含糊的因子,翻译过来就是一句话都说不清的“投资感觉”,没法检验,更没法信任。

3. 因子、信号和特征有什么区别

在量化圈子里,因子、信号、特征这三个词经常被混着用,不同公司甚至有不同习惯,新人听得云里雾里。入门阶段可以按这样一套分工来记:特征,是喂给模型的原始或加工变量;因子,通常带着金融解释,能描述某种收益来源或风险暴露;信号,则更靠近交易决策,告诉你现在该不该买卖、给多少仓位。

拿一个具体例子串起来看。过去 20 日收益率,扔进模型时它是个特征。如果你认为它代表动量效应——涨的还会再涨——它就成了动量因子。等模型把它和几十个其他变量揉在一起,输出一个股票预期收益分数,这个分数就是选股信号。同一个数字,在流水线的不同位置换了三个身份。

较真这三个词不是为了咬文嚼字,而是防止一个思维错误:把所有数字都当成 Alpha。一个变量可能只是风险暴露,带上它不等于有正向收益预测;一个特征可能在模型里确实有用,却给不出清晰的经济解释;一个交易信号可能短期很灵,但容量小到装不下多少资金。身份不同,信任等级就该不同。

4. 常见因子家族

股票量化里的因子虽多,大致能归成几个家族,先把户口本认全。估值因子看股票贵不贵:PB、PE、股息率。质量因子看公司经营得好不好:ROE、毛利率、现金流。成长因子看收入和利润的增长速度。动量因子跟着过去的价格趋势走。反转因子赌短期涨跌过度后的回摆。规模因子看市值大小。流动性因子盯成交额、换手率和买卖价差。七个家族,各有脾气。

记住

但请立刻记住:这些因子没有一个是天天发工资的印钞机。价值因子可能连续多年跑输大盘;动量因子会在市场急转弯时大亏一笔;小市值因子受监管政策和流动性的影响起伏很大;高股息因子往往集中在低成长行业。因子本质上是一组风险和行为模式的刻画,它们兑现收益的方式从不温柔准时。

所以成熟的量化研究员,问出“哪个因子收益最高”之后,紧接着还有一串问题:它和现有因子的相关性高不高?换手高不高?容量有多大?暴露明显落在哪些行业?计算时有没有用到未来数据?扣掉成本后还剩多少?能答完这一串,才算真正了解一个因子——收益数字只是它的简历,履历背调才是录取依据。

分层回测:把股票按因子值分成5组,看收益是否单调 未来收益 第1组(因子最低) 第2组 第3组 第4组 第5组(因子最高) 收益随分组单调上升 → 因子可能有效

把股票按因子值排序、平均分成几组,再看每组之后的平均收益。如果从低到高单调递增(或递减),说明这个因子可能真的携带信息,而不是随机噪声。

5. 同一天把股票排队

大量股票因子是在“横截面”上使用的。横截面这个词听着学术,动作却很形象:在同一天,把所有可投资股票拉到操场上,按某个因子值排成一队。比如今天全市场 4000 只股票,你按 PB 从低到高排队,最便宜的站队首,最贵的站队尾。排完这支队,再谈怎么用。

注意

注意横截面排序和时间序列预测是两回事。它不预测大盘明天涨还是跌,它预测的是在同一锅里,哪几只股票相对更好。指数增强和市场中性策略最爱的就是这种相对收益:同一个市场环境下,多买排名靠前的,少买或者卖空排名靠后的——大盘涨你跟着涨,但你涨得比它多一点就行。

这也解释了你实习时为什么天天和“矩阵”打交道:行是日期,列是股票,每个格子里是一个因子值。一张巨大的表横在眼前,研究员每天的工作就是追问:这张矩阵里,到底有没有稳定的横截面排序信息?有,则留;没有,则扔。简单粗暴,但很诚实。

6. 因子排序和未来收益是否同向

排好了队,自然要问:排得对不对?IC 就是给排队质量打分的指标。IC 是 Information Coefficient 的缩写,常见做法是计算因子值和未来收益之间的相关系数:今天得分高的股票,未来一段时间收益也更高,IC 就是正的;要是高分股反而普遍表现更差,IC 就是负的。正负之间,就是这个因子靠不靠谱的第一印象。

举个极简的例子感受一下。今天你按某因子给 5 只股票打分,明天高分股票普遍涨得多、低分股票涨得少甚至下跌,那这一天的 IC 就比较高。业内的做法是把成百上千个交易日的 IC 连成一条序列,再看它的平均值、稳定性和波动——单看一天的 IC 意义不大,长期的平均表现才开始说明问题。

动手算一遍 RankIC 到底是什么

“动量因子”按过去 20 天收益排出 A>B>C>D>E 五只股。下周实际收益排出 A>E>B>D>C。把因子名次和收益名次对齐:因子名次 (1,2,3,4,5),收益名次 (1,3,5,4,2),差值 d = (0,-1,-2,0,3),平方和刚好 14。塞进 Spearman 公式:ρ = 1 − 6×14 ÷ (5×24) ≈ 0.30——这就是这一天的 RankIC。不算高,但方向对了:高分股整体更靠前。用 5 只股票在 Excel 里自己复算一遍,十五分钟就能把“IC 是相关系数”这句话从名词变成手感。

实战中更常用 RankIC,也就是用排名算相关性,而不是用原始数值。原因很实际:因子值里常有极端值捣乱,排名的抗干扰能力更强。另外千万别觉得 IC 要大才有用——股票横截面的噪声极强,一个长期平均 RankIC 只有 0.03 的因子,如果稳定、成本低、容量大,一样可能有商业价值。在这个行业,微弱但稳定,胜过耀眼但抽风。

IC 实验台:拖动相关性强度 ρ,看散点从雾变成斜线——这就是书里说的“因子排序和未来收益同向”。

RankIC:因子排序与未来收益排序是否同向 本例用排名相关来衡量 当月按可见因子给股票排序; 持有期结束后,按实现收益再排序; 计算两个名次表的相关系数 RankIC ∈ [-1, 1] 正值:高分股未来收益倾向更高 负值:高分股未来收益倾向更低 零值:本期没有排名相关性 相关性不是涨跌保证,也不是可交易证明 多期 RankIC 会波动(示意) 零相关 月份 RankIC 观察多期均值、波动和样本外表现,再结合成本与风险暴露判断

先给因子排队,等持有期结束再核对收益排名,不能把过去的收益当成未来答案。单期相关性只是一次观察;多期均值、样本外表现、成本和风险暴露都需要检验,曲线向上或某个数值达标都不是入选策略的充分条件。

7. 高分组是不是真的更好

IC 给了一个相关系数,但你的直觉更想看真章:如果真按这个因子下注,能赚吗?分层回测就把这件事演给你看。做法是:按因子值把股票分成几组,常见五组或十组,第一组装因子最高的,最后一组装最低的,然后看各组未来一段时间的真实收益。因子要是有效,通常希望高分组长期跑赢低分组。

举个例子。把股票按股息率从高到低分成五组,每月调仓一次,跑出几年数据,如果最高股息组的长期收益持续高过最低股息组——而且不是靠某几年极端行情撑起来的——那这个因子八成有点真东西。但别急着收工,还得看多空收益、回撤、换手、行业暴露和市值暴露,确认赚的不是“碰巧重仓了某个行业”的钱。

分层回测的价值,在于它比干巴巴的 IC 直观:IC 告诉你排序的相关性,分层收益告诉你照着买会得到一条什么样的净值路径。当然它也不是免死金牌,交易成本、涨跌停约束、停牌、容量限制和数据偏差,都能让纸面上漂亮的多空曲线在实盘里走形。直观归直观,检验归检验。

分层回测:按股息率分 5 组,未来收益是否单调 口径沿用本节:第 1 组装股息率最高的股票、第 5 组装最低的,每月调仓、连跑数年取平均 年均收益↑ +5.1% 第 1 组 股息率最高 +4.0% 第 2 组 +3.3% 第 3 组 +2.8% 第 4 组 +2.1% 第 5 组 股息率最低 单调递减 = 因子值越大,未来收益越好 多空差 +5.1% - 2.1% ≈ +3.0 个百分点/年 反过来,要是第 3 组反超第 1 组、顺序乱跳——先怀疑运气和行业暴露,别急着下注;单调才算有用

把股票按股息率排队分五组、每月调仓跑上几年:高分组 +5.1% 一路降到低分组 +2.1%,单调才算有用——说明因子分数和未来收益同向。顺序一旦乱跳,先怀疑运气或行业暴露,别急着下注。

8. 别把别人的风险当成自己的能力

这是因子研究里最容易自我感动的一个坑。你发现某个指标选出的股票收益很高,兴奋得不行,仔细一看:选出来几乎全是小市值股票。那它赚的很可能不是你这个指标的钱,而是小市值风格的钱——你只是站在别人的风口上,误以为自己会飞。

中性化就是把不想蹭的暴露剥离掉,让因子裸泳给你看。常见做法有行业中性、市值中性、风格中性。比如在每个行业内部单独排序,行业涨跌就干扰不到因子选股;或者用回归把市值暴露从因子值里抽走,剩下那部分如果还能预测收益,才算你有真本事。

但也别把中性化当成越多越好。剥得太狠,可能连因子真实的收益来源一起剥没了,剩下一个干干净净但毫无预测力的空壳。关键是想清楚自己要赚什么钱:如果你对外宣称做的是选股 Alpha,就不能主要靠押行业和押市值;如果你本来就想做风格轮动,那风格暴露本身就是策略的一部分,不用剥,大方承认就好。

9. 因子为什么会失效

因子不是永动机,它哪天躺平了,通常逃不出四种死因。第一,它本来就是噪声,只是历史上碰巧表现好——回测里的明星,数据挖掘的幽灵。第二,市场结构变了,过去支撑它的机制不再成立。第三,用的人太多,收益被蜂拥的交易挤没了。第四,交易成本上升或流动性变差,纸面收益根本落不了地。

除了彻底死亡,还有一种更磨人的情况:周期性失效。价值因子可能在成长股的大行情里难受好几年,动量因子会在市场急转弯时突然崩给你看,低波因子会在风险偏好暴涨的牛市里跑输得让人怀疑人生。这不一定说明因子永久死了,但你的资金能不能扛到它复活,是个现实问题——长期信仰,短期要命。

所以判断失效绝不能只看一个月亏损就掀桌子。先查一串东西:亏损是不是超出了历史分布的正常范围?市场环境变没变?因子的拥挤度是不是在上升?交易成本是不是变高了?数据口径是不是出了毛病?组合约束是不是放大了某类风险?失效诊断是功夫活,它和当初发现因子一样,都是研究的一部分。

10. 好因子需要同时过四关

不要先背四关,先看一个因子走完四关的全程——就拿最普通的“低估值”因子:每个调仓日,按当时可见的 PB 排队,最低的 10% 股票在未来持有期内,是不是比最高的 10% 涨得多?下面的收益、相关性和换手数字都是教学假设,用来演示检查方法,不代表某段真实历史的回测结果。

第一关:这个因子有没有经济解释?先提出两种可能:低 PB 可能意味着公司经营有风险,也可能是市场过度悲观。前者让你去检验风险补偿,后者让你去检验定价偏差。有了这两条线索,才知道接下来该查什么;它们还不是低估值一定赚钱的证明。

第二关:统计证据够不够。假设一份分层回测里,低 PB 组合年化 12.5%,高 PB 组合年化 8.2%,两组年化收益相差 4.3 个百分点,平均 IC 约 0.04。先别把数字当结论:收益是不是集中在少数年份?换一段未参与调参的数据,方向还在不在?如果成长风格占优时连续跑输,也要把那段难受的曲线摆出来。历史结果只能提供证据,不能证明因子以后必然有效。

第三关:交易能不能落地。先查行业是否过度集中,再查停牌、涨跌停和成交量会不会挡住调仓。成本要拿实际成交额算,不能只数调仓次数。假设一年调仓 12 次(月调),每次卖出净值的 50%、再买入 50%,全年买卖成交额合计约为净值的 12 倍。按每边 0.12% 的教学成本率,净值大致不变时全年成本约为 12 × 0.12% = 1.44%。季调则是一年 4 次;调仓频率和每次换掉多少仓位,得分开写清楚。

第四关:它能给现有组合增加什么?假设低 PB 因子与已有低波因子的相关性是 0.6,这提醒你检查信息重叠,但不代表它们完全一样。比较加入前后的样本外净收益、风险、换手和失效阶段:能改善组合,才算有边际贡献。多讲了一个好听的故事,不能算过关。

所以四关要一起过:解释说得通、统计有证据、交易做得到、组合有增量。看起来便宜的股票,可能被低估,也可能是经营恶化还没结束。在数据和账本把这两种情况分清之前,别先把预期超额记成自己的收入。

11. 个人如何做第一个因子研究

理论铺垫够了,该挽袖子了。个人入门的第一个因子研究,用最简单的日频因子就够:选一个股票池,比如沪深 300 或中证 500 成分股;选一个再平衡频率,比如每月一次调仓;选一个朴素因子,比如过去 20 日收益率或 PB;然后把时点数据、排序、分组、调仓、扣成本这一整套流程走通。

郑重提醒

郑重提醒:别一上来就上深度学习,先把最朴素的流程做对。数据日期不能错位,停牌的股票不能随便成交,未来的财报不能提前用,指数成分不能用现在的名单回填历史,交易费用要老老实实扣,涨跌停要正确处理。这套流程的严谨程度,比你模型的名字响亮程度重要一百倍——流程错了,模型越聪明,自欺越高效。

走完第一遍,你应该能交出一份像样的研究报告:因子定义、数据来源、股票池、回测区间、调仓频率、IC、分层收益、换手、成本、最大回撤、失效阶段和可能的解释。每一项都有出处,每一个数字都经得起追问。做到这一步,恭喜你,才算真正站到了量化研究的大门口。

光说不练假把式。本书 examples/ 目录里有四个零依赖、纯 Python 标准库的教学脚本,这一章对应的是 ex01_factors.py,核心函数长这样:

examples/ex01_factors.py
def factors_at(stocks, t):
    # 只用 [0, t] 内可见的数据——这是纪律,不是习惯。                    1
    value, momentum, low_vol, quality = [], [], [], []
    for s in stocks:
        value.append((s, book_like(s, t) / s.prices[t]))          2
        momentum.append((s, s.prices[t] / s.prices[t - 60] - 1))
        low_vol.append((s, -vol_60(s, t)))
        quality.append((s, s.quality))
    zs = [zscore(x) for x in (value, momentum, low_vol, quality)]  3
    return {c: sum(z[c] for z in zs) / 4 for c in zs[0]}           4
  1. 函数签名先锁数据边界:只取 [0, t] 区间。写因子代码,第一件事不是写公式,而是声明“我在 t 时刻到底能看到什么”——以后每加一列数据,都被这个 t 管着。
  2. 四个方向不同的东西先各自打分:“底子/价格”越高越便宜、动量越大越强、波动越小越稳、质量越高越好。同一行只能看到它们各自的得分,别急着相加。
  3. zscore 是度量统一:四个因子单位完全不同,直接相加等于拿米、斤、摄氏度比大小。减去均值、除以标准差,先拉到同一量纲——前文因子合成示例里“四个分数怎么拧成一个”,拧的就是这一步。
  4. 等权 1/4 是刻意朴素:第一版别优化权重。先看等权合成是否仍有排序信息(本章的 IC、分层),再谈怎么配权——样本内调出来的“最优权重”,十有八九是噪声。

跑一遍 `python3 ex01_factors.py`,你会看到五组分层收益是否单调、四个单因子 IC 各是多少。注意一个诚实的提醒:这是合成数据上的教学。真实研究中,即便多期平均 IC 在 0.03-0.05,也要结合样本长度、样本外表现、成本和风险判断能否使用,别被示例里的好数字惯坏了眼睛。

小结

这一章的正文不是让你记住几个孤立名词,而是要把它们放回同一条因果链里。读完后,先用自己的话复述下面几条判断,再顺着“小节回看”检查是否能解释每一步。

  • 因子是把投资判断变成一列有口径、可排序、可检验的数据。
  • IC、RankIC 和分层回测用于检验因子是否对未来收益有排序信息。

小节回看

  • 1. 便宜的股票可以让你难受三年
  • 2. 因子不是魔法,是一列有口径的数据
  • 3. 因子、信号和特征有什么区别
  • 4. 常见因子家族
  • 5. 同一天把股票排队
  • 6. 因子排序和未来收益是否同向
  • 7. 高分组是不是真的更好
  • 8. 别把别人的风险当成自己的能力
  • 9. 因子为什么会失效
  • 10. 好因子需要同时过四关
  • 11. 个人如何做第一个因子研究

自测

因子为什么不能只理解成“能赚钱的数字”?

因为因子也可能只是风险暴露、解释变量或历史噪声,必须检验它的预测能力、交易成本和风险来源,才能确认是不是有真金白银。

RankIC 大致衡量什么?

它衡量因子排序和未来收益排序之间是否同向;用的是排名相关,比直接用原始数值相关更抗极端值的干扰。

下一章为什么接在这里

数据、标签和样本切分: 量化模型从哪里学

讲清行情、财务、另类数据、标签定义、点时数据和训练验证切分。