简介《中国版的 Fama-French 三因子模型1》是一份面向金融、量化和资产定价方向毕业设计及研究者的专题资料聚焦 A 股市场特有的壳价值污染问题以及 Liu et al. (2018) 对经典三因子模型的本地化改进。资源为单个 PDF 文件压缩包约 1.35MB内容集中、便于检索适合论文选题、因子构建与实证复现参考已有 1133 人学习。资料围绕剔除市值最小 30% 的股票、比较 EP、BM、AM、CP 等价值指标并用 Fama-MacBeth 回归确定以 EP 构建价值因子展开同时说明 MKT、SMB 与 VMG 因子的组合方式并将中国版三因子与 Fama-French 三因子进行解释力对比涉及 GRS 检验等资产定价方法。读者可据此理解 A 股因子模型的设定逻辑、实证流程与结果解读尤其适合需要复现中国版三因子构造步骤、理解因子暴露与因子收益关系并完成毕业设计实证章节的读者。1. 中国版三因子先删 30% 的股票为什么减法是第一步中国版 Fama-French 三因子模型最反直觉的一步不是增加因子而是删除股票。做 factor regression 的人往往认为A 股因子效果不佳是因为噪声大、散户多更具体的原因其实出在市值排序的末端市值最小的那 30% 股票被壳价值撑住了价格它们的收益率与盈利、净资产之间的关系已经断裂在截面回归中会把规模因子和价值因子的系数带偏。先去掉这一部分剩余 70% 的股票才能让模型按照资产定价的逻辑工作。这种做减法也是做毕业设计时最容易踩坑的地方——复现一遍就能看出同一个模型换一个股票池结果会差多少。2. 壳价值污染小市值股票如何把截面定价带偏要搞懂中国版三因子的第一个改动得先明白“壳”到底是不是一种资产。它不是抽象概念有明确价格、有季节性变化还会随 IPO 通道的松紧起落。理解了它的定价机制才能明白为什么小市值股票不能像美股那样直接进入样本池。2.1 壳价值的来源与经济学含义A 股 IPO 通道常年排队直接上市耗时以年计一些企业转而收购已上市的存量公司来取得上市身份这就是借壳。上市身份因此有了市场价格即壳价值。它的核心特征是与公司自身业务脱钩市值越小、业务越差壳价值在总市值中的占比越高价格就越由借壳预期而非现金流决定。一家主业几乎停摆、年收入只有几千万的空壳公司市值仍可能维持在几十亿量级——这部分市值不是业务估出来的而是“上市身份”的期权价值。关键在于它不稳定而且会整体起落。IPO 审核节奏的松紧、借壳政策口径的调整、发行制度改革的推进都会改变壳价值的重心。这种由制度驱动的波动恰恰是 asset pricing 模型最不擅长的部分。模型假设收益率差异能被市场、规模、价值等系统性因子解释但壳价值带来的收益差异来自制度变化不属于这三者中的任何一个。于是这些股票在截面回归里表现为一个别扭的样态期望收益与盈利、净资产关系极弱但方差和偏度都很大排序时它们被分到市值最小端点贡献了大量与价值溢价无关的尾部收益。这就是壳价值污染的字面含义——模型假设并没有错问题在于样本里混进了不服从模型定价逻辑的观测。2.2 污染如何在因子组合里被放大污染对截面回归的破坏是双重的。第一层在价格层面最小市值股票的市盈率、市净率长期偏离同类基本面公司排序时它们会被错误地归入“极低估值”端点。第二层在收益层面这些股票的月度收益驱动来自借壳公告、监管口径、停复牌事件而不是盈利变化。结果就是 HML 或 VMG 组合两端混进了大量与价值定价无关的股票算出来的组合收益是事件溢价而非价值溢价。具体到 2×3 分组的计算里这种污染会被放大。Small 组因为包含大量壳股平均收益被借壳事件拉高波动也巨大Value 组如果混入了基本面很差、但价格因壳预期被推高的小市值股其价值属性就被反向扭曲——本来应该是“便宜的好公司”结果变成了“被壳预期撑着的差公司”。一个典型后果是 SMB 因子表现不稳定小市值溢价有时显著、有时消失很大程度上是壳价值强度在时间上变化造成的。同样的污染也让价值因子的 t 统计量偏低因为在部分子样本里价值组和小市值壳股高度重叠。更隐蔽的一层是 size 与 value 的相关性被推高。壳价值本身既与小市值相关又与“低估值”相关相当于给两个因子同时注入了一个共同的、与基本面无关的变异源。如果不剔除做 Fama-MacBeth 回归时两个因子的 factor loading 会相互干扰回归系数的符号和显著性都会变得不稳定。很多研究在 A 股复现三因子时发现 HML 的符号会翻一部分原因就在这里。2.3 30% 阈值为什么不是 10% 或 50%阈值选择是工程与统计的折中。10% 剔除不干净借壳预期会外溢到市值排名 15% 到 25% 的股票50% 样本损失太大会把真实的规模效应和大量中小盘股砍掉反而稀释掉因子本应捕捉的信号。实证里 30% 在样本外检验下最稳定因此成为通行做法。这个数字没有理论上的“正确值”更像一个经验边界——把污染压到模型能工作的程度同时保留足够的截面样本来估计因子。工程实现上还有几处需要注意。剔除不是一次性的每一期通常是月度都要按当期总市值重新排序切掉后 30% 再进入后续计算这样壳价值强度随时间的变化才能被自动响应。更严格的做法会叠加 ST、次新股、停牌、退市整理期等过滤避免极端样本进入排序。剔除之后每家公司的权重还要重新归一否则等权组合的分散度会随剩余股票数量漂移。一个常见的误解是“剔除后就变成小盘模型了”。恰恰相反剩余 70% 的市值分布更接近真实可投资域中证 500、中证 800 的成分股大部分都落在里面对做指数增强策略的人反而更有实操意义。另一层要清醒认识的是剔除只是压低了污染没有消除。借壳预期可能外溢到排名 30% 到 40% 的股票只是强度弱一些剩余池里仍要警惕个别大市值公司的事件驱动波动。3. 价值指标换血Fama-MacBeth 回归怎么挑出 EP剔除只是第一步。真正决定中国版三因子和美股三因子分道扬镳的是价值指标的替换用 EP 换掉 BM。这个选择不是拍脑袋而是通过 Fama-MacBeth 回归把四个候选指标放在同一张桌子上比较出来的。3.1 Fama-MacBeth 两步法在截面定价里的作用Fama-MacBeth 回归是 asset pricing 里最常用的两步估计法也是理解后续指标比较的钥匙。第一步在每一个横截面上用股票收益对因子暴露做回归得到该期的因子收益估计第二步把每一期的因子收益序列在时间维度上求均值和 t 统计量判断该因子是否显著不为零。这种两步法的好处在于绕开了 pooled OLS 里对残差相关结构的强假设。横截面回归在每期独立进行时间维度上只对因子收益序列做推断不需要假定不同股票残差之间如何相关。血泪经验是很多人把第一步的右侧放错了——Fama-MacBeth 第一步的右侧应该是 factor loadingβ 或特征值本身而不是因子收益。在中国版三因子的实证里研究团队直接把 EP 这类特征值当作 loading 放进截面回归这种 characteristics-based 的做法在因子研究里被广泛采用。3.2 四个候选指标的同台对比研究团队选了四个价值指标做同台对比EP盈利/价格、BM净资产/市值、AM总资产/市值和 CP现金流/价格。处理上有几处细节值得说清楚BM 和 AM 取对数得到 logBM、logAM原因是市净率的量纲跨度极大极端值会把排序拉偏取对数后分布更接近对称EP 和 CP 做非负截断——正值保留原值负值统一置零并加一个 dummy variable 区分避免亏损公司在排序时被错误地分到“最价值”端点。指标定义处理方式实证结论EP盈利 / 价格非负截断 dummy显著其余变量加入后不再显著BM净资产 / 市值取对数单独显著被 EP 吸收后不显著AM总资产 / 市值取对数不显著CP现金流 / 价格非负截断 dummy弱显著被 EP 吸收回归结果的关键一行在第 8 列当回归右侧的 regressors 里加入 EP 之后其他价值变量都不再显著。这个结论意味着在中国 A 股的价值维度上EP 是信息含量最高的代理变量BM 等其他指标的价值信息基本被它覆盖。于是价值因子改用 EP 来排序这是中国版三因子相对美股版的第二个改动。3.3 EP 胜出的经济学解释EP 显著性强于 BM背后有会计和市场结构上的原因。BM 依赖净资产的账面值而 A 股上市公司的账面净资产受增发、配股、资产重组、会计政策变更影响较大同一家公司的 BM 在不同年份之间可比性差EP 直接进入利润表与股价的比值更贴近“为每一元盈利支付多少钱”这个朴素直觉对会计口径调整的敏感度低。另外A 股长期存在大量绩差小盘股被壳预期托底的现象BM 在这些股票上反映的“低估”其实不是真低估EP 因为分母是盈利亏损公司会被截断到零反而过滤掉了一部分这类污染。从因子构造角度EP 还带来一个施工上的便利排序稳健。BM 在净资产接近零或为负的公司上会爆出极端值即便取对数仍会污染分组EP 在盈利为负时截断到零分组边界更稳定。这就是为什么最终价值因子用 EP 排序而不是沿用美股的 BM。4. 2×3 分组与因子构造从排序到 VMG 的计算细节指标定下来之后剩下的就是施工步骤怎么把股票分成 2×3 六个组合怎么从组合收益里算出 SMB 和 VMG以及怎么用 GRS 检验判断两个模型的解释力高下。这一段是一篇实证论文里最容易被跳过、但复现时最容易翻车的部分。4.1 分组与组合收益的计算流程标准流程是先按剔除后的股票池每个月末按总市值中位数把股票分成 Small 和 Big 两组再按 EP 的 30% 和 70% 分位数分成 Growth、Middle、Value 三组交叉得到六个组合。每个组合按等权或市值加权计算下个月的收益。这一步看着简单实现时却有几个细节决定结果分位数的计算要在当期截面上做不是用全样本分位数EP 为负的股票统一落在 Growth 组的极端端每个组合至少要有一定数量的股票否则收益会被单只股票主导。下面是一段可复现的骨架代码把“剔除最小 30%”到“输出三因子”的流程串起来import numpy as np import pandas as pd def build_cn_three_factors(df, drop_pct0.30): df: 月度面板至少包含列 date, code, mktcap, ep, ret drop_pct: 每期剔除的市值最小比例 返回: 每个月的 MKT / SMB / VMG 因子收益 records [] for dt, g in df.groupby(date): # 1) 剔除市值最小的 30%得到工作股票池 g g.sort_values(mktcap).reset_index(dropTrue) k int(np.floor(len(g) * drop_pct)) pool g.iloc[k:].copy() if len(pool) 30: # 样本太薄就跳过避免极端月份 continue # 2) 2x3 分组市值中位数 x EP 的 30/70 分位 size_cut pool[mktcap].median() ep_lo, ep_hi pool[ep].quantile([0.3, 0.7]) pool[size_grp] np.where(pool[mktcap] size_cut, B, S) pool[ep_grp] np.where( pool[ep] ep_lo, G, np.where(pool[ep] ep_hi, V, M) ) # 3) 六个组合的等权月收益 r pool.groupby([size_grp, ep_grp])[ret].mean() # 4) 三个因子的组合定义 smb r[[S]].mean() - r[[B]].mean() vmg r[[V]].mean() - r[[G]].mean() mkt pool[ret].mean() # 这里用股票池等权实际可用市值加权 records.append({date: dt, MKT: mkt, SMB: smb, VMG: vmg}) return pd.DataFrame(records)这段代码做了四件事按当期总市值排序、切掉尾部 30%、做 2×3 交叉分组、从六个组合收益里提取三个因子。参数drop_pct是壳价值剔除的比例中国实证里一般取 0.30size_cut用中位数而非均值避免右偏的市值分布把分界点拉偏EP 分组用 30/70 分位而不是等距切分是为了在 Growth 和 Value 两端各保留约 30% 的股票Middle 组居中。第 1 步末尾那段样本数检查看起来多余但有经验的实现者都会加因为某些早期月份的可用样本可能只有几十只不设阈值会让因子收益被单只股票主导。真实实现里 MKT 通常还要减去一年期定存利率这里为了代码紧凑先省略成原始收益进入回归之前再做超额化处理。4.2 SMB 与 VMG 的符号定义中国版三因子的 SMB 和 VMG 与美股版的 SMB、HML 在构造思路上一一对应区别只在价值指标。SMB 是小市值组合相对大市值组合的平均收益差VMG 是价值组相对成长组的平均收益差。符号约定必须统一SMB 为正代表小盘跑赢大盘VMG 为正代表价值股跑赢成长股。看似是废话但复现论文时最常见的 bug 就是符号搞反导致后面 GRS 检验的结论完全颠倒。需要注意 VMG 和 HML 的差别不只是名字。由于价值组用 EP 排序VMG 里混入的“成长股”很多是亏损公司EP 被截断到零VMG 多头的股票是盈利能力强的公司空头是盈利弱甚至亏损的公司。这意味着 VMG 除了价值溢价还隐含了一部分 profitability 信息。研究里能看到 VMG 的收益均值和 t 统计量比美股版 HML 更稳一部分原因就是这个隐含的盈利筛子。如果在别的市场抄这套构造要清楚它的经济含义已经不是纯粹的价值溢价。4.3 GRS 检验怎么判断两个模型谁解释力更强因子建好之后要回答一个绕不开的问题中国版三因子和 Fama-French 三因子谁对 A 股的截面收益解释得更好这里用到的工具是 GRS 检验。GRS 检验的原假设是给定一组资产或组合用某个因子模型回归后所有资产的定价误差即截距 α联合为零。统计量服从 F 分布p 值越小越倾向于拒绝原假设说明模型解释不了。比较两个模型时采用“交叉检验”的玩法先用中国版三因子的 SMB 和 VMG 去解释 Fama-French 版因子的定价误差再反过来用后者的 FFSMB 和 FFHML 解释中国版因子的定价误差。结果是不对称的用 SMB 和 VMG 解释 FFSMB 和 FFHML 时p 值在 0.41 这个量级无法拒绝“定价误差联合为零”说明考虑了 SMB 和 VMG 后美式因子的定价误差可以认为为零反过来用 FFSMB 和 FFHML 解释 SMB 和 VMG 时p 值掉到 10 的负 13 次方量级强烈拒绝。这个不对称就是“中国版更贴近 A 股”的统计证据。GRS 检验的关键在于它检验的是联合显著性而不是逐个组合看 t 值因此比逐项比较更克制也更难被单项异常值糊弄过去。5. 中国版三因子落地中的五个坑数据、分组与检验从原理走到可复现的实现中间隔着一堆会让人反复翻车的小细节。下面五条是复现这类模型时最常遇到的现象按“现象 → 原因 → 解决”整理。5.1 数据层面的坑坑 1剔除 30% 后早期样本股票池骤减。现象是回测期前几年的股票池不足 100 只分组后某些组合甚至只有个位数股票。原因是早期 A 股上市公司数量本来就少再砍掉 30% 后有效样本极薄。解决方式是在每个截面设最小样本阈值例如少于 50 只就跳过该月或者在报告里明确标注样本稀疏的区间避免把噪声当信号。坑 2EP 为负的股票被错误地分到“极便宜”端点。现象是价值组合里混进大量亏损公司VMG 的收益反而被拉高或变得极不稳定。原因是直接用 EPS/Price 排序时负值在数值上排在最前面被当成了最便宜的股票。解决方式是先做非负截断——负 EP 统一置零或归到 Growth 端点再加一个 dummy 标记让回归里能控制住亏损公司的影响。坑 3市值口径不统一剔除名单随时间漂移。现象是同一只股票在不同月份反复进出样本池。原因是用了总市值、流通市值、自由流通市值混着算或者没有用当月月末的市值。统一口径规定按月末总市值排序并在参数文档里写清楚是避免这类漂移最直接的办法。5.2 因子计算与检验的坑坑 4MKT 用原始收益还是超额收益没跟收益率口径对齐。现象是三个因子的量级对不上回归出来的截距符号反直觉。原因是 MKT 定义成股票池收益减一年期定存但被解释变量的收益率又是原始月收益两边的基准不一致。统一做法是把个股收益、组合收益、因子收益全部先减去同频的无风险利率再用超额收益做回归保证分子分母用同一把尺子。坑 5GRS 检验 p 值异常却没有回头看因子相关性。现象是交叉检验里 p 值大起大落结论不稳健。原因是三个因子之间存在较强的相关性尤其 SMB 和 VMG 在 A 股样本里相关性被壳价值推高联合检验对相关结构很敏感。解决办法是先把因子相关矩阵打出来相关高于 0.6 的因子对要单独看同时用不同的子样本期做稳健性单看全样本的 p 值容易得出过于乐观的结论。6. 走上四因子换手率 PMO 与剔除 30% 的代价三因子能解释 size、value、profitability、volatility 四类异象但解释不了 reversal 和 turnover。这两类异象在 A 股尤其顽固反转几乎在任何时间窗口排序下都能观察到换手率高的股票往往被散户和舆情驱动的交易者过度关注价格被推高后未来收益走低而做空受限意味着这种非理性没法被套利抹平。研究团队因此在三因子之外加入换手率因子 PMOPessimistic Minus Optimistic核心逻辑是低换手率组合跑赢高换手率组合得到四因子模型。加入 PMO 之后那十个显著性异象基本都能被解释掉。代价是要算清楚剔除 30% 到底损失了什么。一方面剩余 70% 股票池里仍然有污染只是密度降低事件驱动的收益残余会让因子的方差被低估另一方面对做沪深 300、中证 500 指数增强的团队这个池子的边界反而更友好因为真实可投资域本来就排除了尾部壳股。这里存在一个隐含的设计取舍模型精度和工作域之间的权衡。还有一个常被忽略的点PMO 和三因子不完全正交。换手率高的股票往往也是小市值、近期涨幅大的股票PMO 里天然混入了规模效应和反转信息。如果把四因子当作真理容易把 PMO 的收益误读为“换手率溢价”实际上一部分是小盘和反转在起作用。查看因子相关矩阵、做正交化处理或者在报告中把 PMO 解释为“换手率代理的综合信号”比单纯叫它换手率因子更诚实。从那以后我每次跑因子检验都会先查看股票池最末端的市值分布和 EP 截断情况再决定是否开跑跳过这一步结果再好也不敢直接用。希望帮到你。本文还有配套的精品资源点击获取