
做量化这几年我抽屉里最厚的一摞打印稿永远是各种关于市场“异象”的论文。动量、低波动、小市值、高盈利……这些一开始被学术界当成“数据挖掘错误”的怪现象后来被统称为 Anomalies再后来演变成了 Factors最终被装进了 MultiFactor Models 这套框架里。可以说多因子模型的整个前世今生就是一部异象被“招安”的历史。这篇文章想跟你聊聊的正是这条从异象到因子、再到多因子模型的完整链条。我会把背后的原理掰开揉碎也会把实盘中构建一个多因子模型的完整流程、常用参数、以及那些论文里不会告诉你的坑一并讲清楚。无论你是刚入行的量化研究员还是自己管钱的投资人这篇内容应该都能帮你把脑子里那些零散的“选股逻辑”梳理成一套能落地的体系。1. 先搞清楚市场异象到底在说什么1.1 异象不是鬼故事是统计事实我第一次看到“异象”这个词的时候以为是某种金融市场的玄学名词。后来读多了文献才发现这个词其实非常严谨。学术上异象指的是那些无法被主流定价模型解释的、系统性且持续存在的收益预测模式。主流定价模型是谁最基础的就是CAPM资本资产定价模型。CAPM告诉我们一只股票的预期收益只取决于它对市场组合的敏感度也就是Beta。Beta高的股票预期收益高Beta低的股票预期收益低除此之外没有别的因素能系统性地影响预期回报。然而实证研究一跑出来CAPM就尴尬了。学者们发现光靠一个Beta根本解释不了股票收益的横截面差异。比如小市值股票的历史平均收益显著高于大市值股票但前者的Beta并没有显著更高再比如账面市值比Book-to-Market Ratio高的股票也就是所谓的价值股长期跑赢成长股。这些现象用CAPM解释不了于是被统称为“异象”。注意这里的“异象”和日常生活中的“异象”——比如天降流星、六月飞雪——不是一回事。金融异象是统计学意义上的“异常”指的是“模型预测之外的显著规律”本质上是模型错了或者模型不完整而不是市场真的闹鬼。做这个区分很重要。很多初学者一听到“异象”就觉得市场是非理性的、可以轻松套利的。其实异象背后往往有经济逻辑可能是对风险的补偿也可能是投资者行为偏差的体现还可能只是数据挖掘的产物。你连“异象”到底是哪一类都不知道就去上杠杆赌它未来继续存在这跟赌博没有区别。1.2 异象清单学术界几十年挖出的“宝藏”学术界从二十世纪七十年代开始就疯狂地筛异象。现在主流文献里被反复验证过的异象至少有几百个。我捡几个最经典的说规模异象Size Effect小市值股票长期跑赢大市值股票。最早由Banz在1981年系统提出。价值异象Value Effect低估值高账面市值比、低市净率、低市盈率的股票长期跑赢高估值股票。Fama和French的工作把这个异象抬进了殿堂级。动量异象Momentum过去3-12个月涨幅居前的股票未来3-12个月大概率继续跑赢。Jegadeesh和Titman在1993年正式发表但在这之前很多交易员就已经在用了。盈利异象Profitability高盈利能力的公司未来收益显著更高。投资异象Investment总资产增长过快的公司未来收益反而偏低。这个和中国散户喜欢的“高送转”“大扩张”直觉完全相反。低波动异象Low Volatility波动率低的股票长期收益居然比波动率高的股票更高。这个直接打脸“高风险高收益”的传统直觉。盈余漂移PEADPost-Earnings-Announcement Drift财报公布超预期的公司股价会朝超预期方向漂移好几个月而不是立刻一步到位。这些异象单拿出来每一个都是对有效市场假说的有力冲击。但它们不是孤立的。你会发现异象和异象之间经常共享某些底层逻辑。1.3 异象为什么会存在或消失理解异象的成因比记住异象本身更重要。我认为异象的来源可以粗分成三类第一类是风险补偿。小市值、高波动的股票流动性差、基本面脆弱熊市里跌起来没底所以长期需要有更高的平均收益来补偿持有者。这类异象的“超额收益”本质上是风险的另一种说法。第二类是行为偏差。动量效应、盈余漂移很大程度上来自投资者的反应不足和过度自信。人不是机器看到利好会犹豫、看到连续上涨会追涨这些行为会留下系统性的收益模式。第三类是制度和结构限制。很多机构投资者有最低评级要求、有市值门槛、有卖空限制某些股票即便被低估也没人去买从而留下了价格洼地。但请注意异象是会消失的。学术界一发表、媒体一报道、资金一涌入套利空间就被磨平了。最典型的例子是规模异象——在很长一段时间内式微直到最近几年小盘风格回归才又抬头。所以研究异象时如果你脑子里没有“生命周期”这个概念迟早会被市场上一轮轮的异象失效教育到怀疑人生。2. 因子从学术概念到可投资的工具2.1 因子与异象一枚硬币的两面如果说异象是“现象”那因子就是“原因”。一个异象被学术界反复验证后研究者就会想能不能把这个异象抽象成一个可以持续使用的信号这个信号就是因子。举个例子。账面市值比异象成立我就构造一个因子每月末把所有股票按账面市值比排序买入最高的那一组卖空最低的那一组。这个多空组合的收益序列就是“价值因子”的收益。以后任何一只股票只要我对它在价值因子上的暴露是多少就能用这个因子来解释它的预期收益。所以你可以这样理解因子是异象的“产品化”。异象是学术发现因子是可交易的策略逻辑。一个合格的因子必须具备三条特质逻辑清晰能说清楚为什么它未来能赚钱不管是风险补偿还是行为偏差得有个故事。统计显著历史上回测的IC信息系数要稳定为正换手率、容量、覆盖度都要说得过去。可解释因子收益和哪些已知风险敞口高度相关能不能被其他因子替代这些都要能追溯。2.2 主流因子全景哪些还在用哪些已经失效我在实盘中接触过的因子按风格可以大致分成以下几大类。这里给你一张我常用的速查表因子类别典型因子背后的逻辑实盘评价价值账面市值比、盈利收益率、现金流收益率市场对基本面过度悲观或过度乐观长期有效但可能长期失效价值陷阱需要耐心动量过去12个月收益率剔除最近一个月反应不足与趋势自我强化与市场风格冲突时回撤极大但长期ROI极高质量/盈利ROE、毛利率、盈利稳定性好公司有护城河盈利可持续和低波动组合使用效果更好成长营收增速、盈利增速业绩增长推动估值扩张和动量有重合注意高估值风险低波动历史波动率、Beta彩票偏好与机构限仓行为长期夏普好但牛市容易跑输规模市值小盘股长期溢价有效性起伏大且换手和冲击成本高红利股息率稳定现金回报 价值属性在低利率环境吸引力强但成长性不足是不是发现这些因子听起来都“太简单”了没错真正有效的因子核心逻辑都很朴素。复杂的是怎么处理数据、怎么控制风险、怎么避免被其他因素污染。2.3 因子生命周期为什么好因子也会“死”几乎每个做多因子研究的人都会遇到同一个困惑我复现出来的因子在历史上表现好得吓人但一上实盘就不灵了为什么原因之一就是上面提到的生命周期。一个因子的典型生命周期是这样的学术沉默期因子藏在数据里只有极少数的交易员在用超额收益最肥美。学术发表期论文发表异象被公开量化机构开始批量复现并上实盘。资金涌入期因子拥挤度急剧上升超额收益开始变薄、波动加大。拥挤交易期一旦遇到这类因子回撤踩踏极其惨烈典型就是2020年全球动量因子的剧烈反转。失效或衰减期部分因子彻底失效被套利磨平部分因子衰减到不如一个纯指数基金。所以研究因子的第一性原理不是找到“永远有效”的圣杯而是搞清楚当前因子处在生命周期的哪个阶段从而决定仓位和风控。3. 多因子模型的核心设计从单因子到组合的演进3.1 从CAPM到Fama-French五因子模型是怎么长胖的有了若干单因子下一步的挑战就是怎么把它们组合在一起成为一个多因子模型。CAPM是最基础的单因子模型只有市场因子。后来Fama和French在1993年提出著名的三因子模型在CAPM的基础上加入了规模因子SMB和价值因子HML。这个模型一出来立刻成了学术界标定“超额收益”的基准——如果一个策略在三因子模型之下还有显著的Alpha那才是真本事。2015年Fama和French又把模型升级成五因子加入了盈利因子RMW和投资因子CMA。五因子模型的信息解释力更强但代价是模型更复杂、因子之间相关性更高、对长历史样本的拟合争议也更大。至此你可以看到一条清晰的脉络多因子模型不是“多多益善”而是为了解释市场收益截面不断在追求一个“尽量完备”的定价模型。但学术上的完备和实盘上的可用是两码事。3.2 三种主流的多因子模型框架实盘中你见到最多的多因子模型框架无非以下三种Fama-French体系以学术因子为基础市场、规模、价值、盈利、投资再加上动量等作为风险调整基准和风格暴露控制模板。优点是经过长期学术验证、透明、易解释缺点是不够灵活因子数量少难以精细刻画风险。Barra体系这是MSCI Barra公司开发的商业风险模型把股票收益拆成国家因子、行业因子、风格因子三个部分。风格因子包括市值、动量、波动率、流动性、价值、成长、杠杆等十来个大类。国内很多券商的选股模型都参考了Barra框架因为它对风险的控制最细致。自定义多因子体系投研团队根据自己对市场的理解选出一组因子自己定义权重、自己构建风险模型。优点是完全定制、灵活性强缺点是开发成本高、对团队的数据能力要求极高。对于大多数个人投资者或小型团队我不建议一上来就上Barra那种重型框架。除非你管理的资金量大到需要精细控制行业和风格暴露否则“Fama-French加几个自己验证过的特色因子”完全够用。把大量的精力花在因子本身的质量和逻辑上比一开始就纠结风险模型精度要重要得多。3.3 因子权重等等权、IC加权还是最优化多因子模型的核心问题有两个一是选哪些因子进来二是这些因子各占多大权重。第一个问题上面基本说了第二个问题我展开讲讲。最朴素的方案是等权。不管什么因子进来就各给一半或各给三分之一。好处是稳健、少调参、基本不会过拟合坏处是如果一个因子明显更强、信息更足等权会稀释它的作用。进阶一点的方案是IC加权。先算每个因子过去一段时间比如12个月的Rank IC均值再按IC值的大小来分配权重。IC高的因子权重大IC低的因子权重小。这个方案比等权更贴合市场的动态变化而且实现也不难。更复杂的方案是最大化组合信息比率的最优化权重本质上是个带约束的优化问题。听起来高大上但实盘中非常容易出现一个问题优化器为了讨好历史数据会把权重集中到少数几个因子上面一旦因子的表现出现波动组合净值就会剧烈起伏。所以哪怕是机构也很少会完全信任最优化权重通常会在优化结果上加上权重上限和行业中性约束。实战提示我做因子权重时一般会跑一套“等权、IC加权、最优化”三者对比。如果三者的历史表现差异巨大我会怀疑因子数据里有过拟合或幸存者偏差这时候优先信等权和IC加权的结果而不是最优化结果。4. 实操构建一个多因子模型的完整过程4.1 数据准备这一步就筛掉一半人做多因子模型80%的时间都在和数据搏斗。数据质量决定了模型质量这不是一句空话。你需要准备的最基础的数据包括日线或月线的价格、复权因子、市值、财报数据ROE、毛利率、营收增速等、估值数据PB、PE、PS、分析师预期数据等。这里必须强调几个和数据相关的致命细节未来函数用到的基本面数据必须是“当时已经公告”的数据而不是之后修正过的数据。比如你要用年报数据构建因子必须考虑到年报到实际披露日之间有几个月的时滞。我在实践中会让财报数据强制延迟6个月使用宁可用滞后的数据也不冒未来函数的风险。幸存者偏差很多免费数据源只保留当前仍在上市的公司退市的公司数据没了。这样回测出来的结果必然虚高。正确的做法是使用包含退市股票的“全市场历史数据”。复权处理分红送转会让价格出现非市场性断裂必须用复权后的价格计算收益率否则动量因子会失真。4.2 因子计算标准化、去极值和中性化选定了因子、数据也准备好了接下来就是因子计算的几个标准工序。第一步是去极值。因子值里总有极端异常值如果不处理后面算相关系数和分组时会被几个极端值带跑。常用的方法是MADMedian Absolute Deviation法也就是用中位数加减N倍的中位数绝对偏差来剔除极端值。我一般设N5。第二步是标准化。不同因子的量纲不一样ROE可能是个百分比市值的量级是几百万直接比较没有意义。所以要先把每个因子转换成均值为0、标准差为1的标准分布。常用的是Z-Score方法。第三步是中性化。这一步容易被忽略但实盘里极其重要。比如市值因子和动量因子天然存在相关——小盘股往往动量更强。如果你不把这两个因子互相剥离最后算出来的组合暴露可能和你想的不一样。常用的做法是用横截面回归把因子值对市值、行业等变量做回归取残差作为“纯净”的因子值。做完这三步一个因子才能进入下一步的有效性检验。下面放一段我用的Python处理伪代码结构你可以参考import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression def factor_preprocess(factor_df, industry_df, cap_df, n5): # factor_df: 每一列是一个因子index是股票代码 # industry_df: 股票的行业哑变量 # cap_df: 股票的市值对数 processed pd.DataFrame(indexfactor_df.index) for col in factor_df.columns: # 1. MAD 去极值 med factor_df[col].median() mad (factor_df[col] - med).abs().median() upper med n * 1.4826 * mad lower med - n * 1.4826 * mad z factor_df[col].clip(lower, upper) # 2. Z-Score 标准化 z (z - z.mean()) / z.std() # 3. 行业与市值中性化取残差 X pd.concat([industry_df, cap_df], axis1) model LinearRegression().fit(X, z) resid z - model.predict(X) processed[col] resid return processed代码很简单但每一步都有讲究。去极值的1.4826是正态分布下MAD和标准差的换算系数行业中性化是为了让因子不在行业上偏配这些细节你都可以在实际使用中慢慢体会。4.3 因子有效性检验用IC和分组回测说话因子算好了怎么判断它有没有用两个常规动作IC分析和分组回测。ICInformation Coefficient是因子值和未来收益之间的相关系数。最常见的是Rank IC也就是Spearman秩相关。每个月末算一次因子值和下月收益的Rank IC然后看IC的均值、标准差、IC0的胜率以及ICIRIC均值除以IC标准差。ICIR是衡量因子稳定性的核心指标我在实践中会把ICIR大于0.5作为因子“值得用”的基本门槛。分组回测则是把股票按因子值从低到高分成10组或5组看每一组未来的平均收益。理想的多因子选股因子分组收益应该是单调的——因子值越高的一组未来收益越高。如果中间有交叉说明因子在某些区间失效要谨慎使用。这里提醒一句单看全样本IC高没用还要看因子的分年份或分市场状态的稳定性。有些因子牛市IC很高、熊市IC为负这种周期性的因子不是不能用但你要知道它什么时候会失灵。4.4 组合构建和回测把因子变成真金白银因子处理好了、也验证过有效性了下一步就是把多因子合成一个总分然后按总分选股。合成的方法很简单把每个股票的各个因子值按权重加权求和得到综合因子得分。然后按综合得分排序买入排名靠前的股票。这里有两个细节值得展开权重来源可以是等权、IC加权或优化权重。如果你用IC加权建议用滚动过去12个月的IC均值而不是全历史IC。市场风格会变因子的相对强弱也会变让权重跟随市场动起来更合理。调仓频率和成本月度调仓是最常见的。调仓频率越高因子换手率越高交易成本对收益的侵蚀越严重。我做回测时会额外估计一个双边冲击成本——A股普通小票双边千分之二到千分之三大票低一些。如果扣掉成本后策略的阿尔法没了那这个策略就没有实盘价值。回测的输出不仅仅是净值曲线和夏普比率更要关注的是分年度的收益、最大回撤、以及相对基准的超额收益稳定性。很多策略五年年化跑赢基准20%结果一看收益全靠其中两年贡献另外三年在挨打。这种策略实盘的体验和回测数字是两回事。5. 常见问题与排查技巧实录5.1 因子拥挤、失效了怎么办每个做多因子的人都会遇到“因子突然不灵了”的恐慌。我的经验是先区分这是状态波动还是永久失效。如果因子只是连续几个月回撤但基本面逻辑没有受损、IC虽然为负但在历史正常波动范围内我倾向于继续持有甚至在情绪最恐慌的时候适度加仓。如果因子连续两三年失效并且你能看到市场结构发生改变比如套利工具普及了、信息披露更透明了那就要认真考虑降权或替换。判断因子失效别凭感觉做一个简单的滚动IC监控把最近12个月的IC均值和更长期的历史均值对比偏离超过两个标准差就该警觉了。5.2 因子之间的多重共线性多因子模型最头疼的问题之一就是因子之间高度相关。动量因子和成长因子相关性高价值和红利相关性高。如果不处理合成后的得分会在某些维度上过度暴露。解决办法就是我前面说的中性化处理——在计算因子值时就把行业、市值等已知风险变量回归掉取残差作为因子值。另外在最终合成前我会习惯性地看一眼因子相关系数矩阵如果某两个因子相关系数超过0.7我会在逻辑上审视它们是否在讲同一个故事如果是就保留一个。5.3 过拟合你看到的是规律还是噪声接下来这个问题我觉得是量化研究里最阴险的陷阱——过拟合。一个典型的过拟合案例长这样你在100个因子里筛出了10个历史表现最好的形成一个多因子模型回测美如画实盘惨如狗。为什么因为如果你尝试的因子足够多总有一些因子在历史上恰好表现好但它们并没有真实的预测能力。这在统计学上叫“多重检验谬误”。我的几条保命经验每次增加一个因子必须问它的逻辑是什么它为什么未来还能有效样本外测试是必须的留出最近2-3年的数据不参与任何调参等模型定型后再验证。尽量减少因子数量。五个逻辑扎实、相关性低的因子远好过二十个相关性高、逻辑含糊的因子。5.4 一些避坑经验总结最后我把自己踩过的一些坑整理成了一张速查表供你参考问题常见症状排查方法未来函数回测收益高得离谱检查财报是否延迟、价格是否用了复权后的未来值幸存者偏差策略在历史回测中几乎不亏钱确认数据源是否包含退市股流动性幻觉理论收益好实盘无法成交对小市值股票按成交额百分比估计冲击成本过拟合样本内夏普4.0样本外夏普0.5增加样本外测试减少参数因子数量精简风格漂移超额收益来自某一牛市中分年份看收益计算相对于基准的跟踪误差我个人在实际操作中的体会是多因子模型本质上不是“发明”出来的而是“理解”出来的。你得持续不断地阅读最新的学术文献、追踪市场结构的变化、理解每一条异象背后的行为逻辑或者风险逻辑然后把它们翻译成代码、放进模型里接受市场的检验。最后再分享一个小技巧建立一个你自己的“因子研究清单”每遇到一个新的异象或因子都按照“逻辑假设—数据构造—统计检验—实盘观察”四步走一遍记录在一张表里。时间长了这张表就是你最宝贵的知识资产比任何现成的代码库都值钱。