简介:面向毕业设计与中国A股资产定价研究的一份PDF文档(共1个文件,压缩包约1.35MB),系统梳理中国版三因子模型的构建与验证思路。文档以Liu等学者2018年的研究为核心,首先剖析中国股市特有的壳价值污染问题——由于IPO管制,小市值公司壳资源具有极高经济价值,导致市值最小的30%股票即使业绩不佳也易被高估,因此研究剔除这部分股票以净化样本。随后介绍Fama-MacBeth回归在价值因子筛选中的应用,分别考察盈利价格比、账面市值比、资产市值比、现金流价格比四类指标,通过横截面回归确定盈利价格比解释A股收益差异的效果最佳,并以其为基础构造价值因子。文中还对比中国版三因子(含规模因子和价值减成长因子)与经典三因子在中国市场的实证表现,包括因子间的回归分析、解释力度差异等,清晰展示改进模型的优势。已有1131人学习下载,适合金融工程、量化投资或资产定价方向的学生作为毕业设计参考,对理解新兴市场因子模型修正逻辑也有帮助。
1. 在 A 股做截面收益研究,先回答一个问题:为什么美版三因子一上 A 股就失灵
在 A 股做截面的预期收益率研究,最容易碰到的现象是:Fama-French 三因子模型在美股是铁打不动的基准,放到 A 股就跑不动了。市场因子、规模因子、价值因子全都在,回归做了,GRS 检验也做了,定价错误就是压不下去。一篇刊发于顶级金融学期刊的研究给出了一个反直觉的诊断:问题不在因子本身,而在 A 股最小的那批上市公司。由于 IPO 监管严格、上市资格稀缺,小公司的股价里天然含着一层壳价值——哪怕主业亏损,上市身份本身就值一大笔钱。这层价值像一张看涨期权,把真实经营信息搅得稀碎。在一个被壳价值污染的样本上拟合任何定价模型,结果都不会干净。这就是为什么直到剔除市值最小的 30% 的股票、重选价值因子之后,A 股的截面定价结构才第一次看得清楚。做资产定价方向毕业设计或实证研究的人,大概都有过这种翻车体验。
2. 壳价值污染:为什么最小的 30% 的股票必须被剔除
2.1 壳价值的本质:一张无法对冲的看涨期权
壳价值的根源在于 IPO 的审核供给。A 股的上市资格是一种稀缺牌照,而借壳上市曾经是拿到这张牌照最现实的路径。一家企业想上市,IPO 排队的时间成本和过会的不确定性都太高,直接买一家已上市公司、把资产装进去,流程要短得多。买壳的钱,本质上就是对这张牌照的定价。壳资源一旦被装入资产,价值就兑现了;而还没被装资产的公司,股价里就含着一个等待行权的期权——不知道哪一天会被借壳,但市场知道这件事大概率会发生。
这个机制解释了壳价值的两个关键性质。第一,壳价值大致是一个绝对数而不是相对数——在监管环境稳定的时期,一个干净壳的估值落在几十亿量级,跟壳里装了什么资产关系不大。第二,它是期权性质的,只跟"事件是否发生"相关,跟公司当期经营业绩基本无关。把这两点合起来看,就得到一个残酷的推论:市值越小的公司,壳价值在股价里占的比重越大。市值 20 亿的公司,壳可能占掉一半;市值 200 亿的公司,壳只占 5%。这也就是为什么研究者最终选择了市值最小的 30% 作为"污染区",而不是按行业、按盈利能力去划界——壳价值污染的强度,几乎完全由市值这一个变量决定。
2.2 壳价值如何破坏资产定价模型
壳价值对三因子模型最直接的破坏,发生在排序环节。Fama-French 的 HML 因子靠 BM(账面市值比)把股票分成价值和成长两组,这个排序依赖账面值和市值的比值。壳公司通常经营恶化、净资产缓慢消耗,市值里却含着一大块壳期权,BM 被壳价值推到高位,于是被分类器贴上了"价值股"的标签。可它的高账面市值比并不代表真实的经营价值,而是壳期权的厚度。用这样的标签去构建多空组合,买到的是一篮子"看似便宜、实则随时可能被借壳"的公司。
SMB 同样被污染。小市值组里混入大量壳公司后,SMB 的收益率构成就变了:真实的小市值溢价来自对规模风险的风险补偿,而壳公司的"溢价"来自期权价值的均值回归和事件驱动波动。这两者混在同一个投资组合里,会让 SMB 的收益序列带上强烈的反转和跳跃特征。更麻烦的是,壳价值污染不是一个稳定项——借壳事件发生的时候,期权一次性兑现,股价翻倍;预期落空的时候,股价阴跌。结果就是模型残差里出现持续且显著的 α,而这个 α 的来源既不是市场风险也不是规模或价值风险,而是监管制度制造的定价噪声。
2.3 剔除 30% 之后,股票池发生了什么
剔除市值最小的 30% 并不是简单地把样本砍掉一段,而是主动放弃信息换取纯度。剩下的 70% 股票,壳价值在市值中的占比已经低到不再主导定价信号。一个直接的实证效果是:如果在这 70% 的股票上重新做 Fama-MacBeth 回归,价值类指标的截面显著性会大幅改善。另一个效果是实用性——沪深 300 和中证 500 的成分股几乎全部落在剩余股票池里,指数增强和主动选股的研究者不需要额外清洗就能直接使用这个范围做因子测试。
用一个简单的代码示意这个过滤逻辑,市值分位数是分水岭:
import numpy as np import pandas as pd def filter_shell_contamination(market_cap: pd.Series, quantile: float = 0.30) -> np.ndarray: """剔除市值最小的 30% 的股票,降低壳价值污染。 参数 ----- market_cap : 每只股票的市值序列,需要按月频截面传入 quantile : 分位数阈值,论文默认 0.30 返回 ----- mask : 布尔数组,True 表示保留该股票 """ threshold = market_cap.quantile(quantile) # 截面分位数,不能用全样本分位数 mask = market_cap >= threshold return mask.values这段代码最关键的是注释里那一条:分位数必须按截面计算。市值分布每个月都在变,如果拿全样本的分位数一刀切,早期大量股票会被错误剔除,后期又混入不该进的小盘股。按截面逐月计算分位数,才能保证每个月剔除的都是当期市值最小的 30%。这个细节在做毕业设计复现时特别容易踩到,很多人第一版回测结果对不上,原因往往就在这一行。
3. 价值因子换血:EP 如何通过 Fama-MacBeth 回归胜出
3.1 从 BM 到 EP:四个候选指标的横截面比拼
确定了股票池之后,下一个问题是谁来做价值因子。Fama 和 French 当年在美股比较过 EP、BM、AM 等多个指标,最后因为 BM 效果最好而选了它。但 A 股的壳价值污染主要扭曲的是市值信号,BM 的分母里带着壳价值,天然处于劣势。研究者没有直接拍脑袋换指标,而是用 Fama-MacBeth 回归把四个候选指标放在一起做了一次横截面比拼。
这里需要理清 Fama-MacBeth 回归在这个场景下的用法。常见的教材版本是两步走:第一步用时间序列回归估计每只股票的因子暴露,第二步在每个截面上用收益率对暴露做回归,得到因子收益率的时间序列。但原文的处理方式有个变体——直接把指标取值当成 factor loading,用截面回归来确定 factor return。换句话说,对每个月 t,把全市场股票的 EP 值作为自变量、个股收益率作为因变量做一次截面回归,回归系数就是当月 EP 因子的收益率;然后把所有月份的因子收益率取均值,用 t 统计量判断它是否显著。这是一种更接近"按指标排序"的检验方式,好处是它不预设因子模型的结构,纯粹看哪个指标对截面收益率的解释力最强。
预处理方式也暗藏玄机。BM 和 AM 本身是正数但有极端值,取对数压缩尺度;EP 和 CP 可能出现负值,直接取对数没有意义,于是做了非负处理:盈利为正的公司指标取原值,为负的公司指标取零,再用 dummy 变量区分正负。回归结果里最有信息量的是加入 EP 之后,其他价值指标的显著性全部掉下去,而 EP 自己的 t 值稳居第一。这意味着在 A 股,EP 对价值溢价的信息含量已经把 BM、AM、CP 覆盖掉了。
3.2 非负处理与 dummy 变量:亏损公司的价值信号
EP 的非负处理值得展开,因为它不是简单的"负值置零"这种数据清洗,而是一种变量构造。EP 为正时,它是一个连续变量,度量盈利收益率的强度;EP 为负时,亏损幅度本身不再进入模型,取而代之的是一列 dummy,标记"这家公司是否亏损"。这么做的经济学含义是:在 A 股,亏损状态比亏损幅度更有信息量。壳公司往往微亏或巨亏,亏损多少对预测未来收益率的边际贡献很小,但"亏损"这个标签本身与壳价值高度相关。
用代码示意这个处理逻辑会非常直观:
def construct_ep(earnings: pd.Series, price: pd.Series) -> pd.DataFrame: """ 构造 EP 因子及对应的 dummy 变量。 - 盈利为正:EP = earnings / price - 盈利为负:EP = 0,同时 dummy = 1 - dummy 用于在回归中单独估计亏损公司的截距偏移 """ ep = earnings / price dummy = (earnings < 0).astype(int) ep_clean = ep.clip(lower=0) return pd.DataFrame({"EP": ep_clean, "EP_neg_dummy": dummy})这段构造直接决定了 Fama-MacBeth 回归的输入形式:EP 和 EP_neg_dummy 作为两个 regressors 进入截面回归。EP 系数度量的是"盈利收益率每高一个单位,预期收益率高多少";dummy 系数度量的是"亏损公司相对盈利公司在收益率上的固定偏移"。后者在 A 股通常显著为正,因为它捕捉的其实是壳价值的信号——亏损公司被当成潜在借壳标的,有额外的预期收益。如果只做简单置零而不加 dummy,这只信号会被并进截距项,全模型的价值因子都会失真。
3.3 为什么是 EP:壳价值选出了盈利这个锚
EP 在四个候选指标里胜出,背后有一个非常自洽的解释:壳价值污染对 BM 的破坏远大于对 EP 的破坏。BM 的分母是市值、分子是账面净资产,壳价值抬升市值的同时,壳公司的净资产往往已经在缩水,分子分母一个向下一个向上,BM 被双倍扭曲。EP 的分子是盈利,壳公司的盈利通常极低或为负,不管市值怎么被壳价值灌水,EP 天然把壳公司压到最低档。换句话说,EP 排序本身就是一种对壳价值的天然对冲。
这个取舍还反映了 A 股和美股定价机制的结构性差异。美股的价值溢价主要来自 BM 所代表的账面风险,而 A 股的"价值"在实证上更接近盈利收益率驱动——A 股投资者对当期盈利的敏感度远高于对账面资产的敏感度。研究者最终选择 EP 构建 VMG 因子,而不是继续沿用 BM 构建 HML,既是对统计证据的服从,也是对市场制度环境的响应。这个选择可以用一张对比表看清:
| 维度 | 美版三因子(FF-3) | 中国版三因子(CH-3) |
|---|---|---|
| 股票池 | 全部上市公司 | 剔除市值最小 30% |
| 价值因子 | HML,基于 BM | VMG,基于 EP |
| 规模因子 | SMB,2×3 分组 | SMB,2×3 分组 |
| 市场因子 | MKT,市值加权超额收益 | MKT,市值加权超额收益,基准为一年期存款利率 |
4. 中国版三因子的构建与双重验证:交叉回归与 GRS 检验
4.1 SMB 与 VMG 的分组构造:2×3 交叉排序的细节
中国版三因子的 SMB 和 VMG 用的是 2×3 交叉分组:市值分成 Small 和 Big 两组,EP 分成 Value、Middle、Growth 三组,交叉得到六个格子。SMB 是大市值三组和小市值三组收益率的均值差,VMG 是 Value 组减 Growth 组、在大小市值内分别做后再取平均。2×3 而不是 2×2 或 2×3×3,是一个权衡:EP 分成三档能拉开 Value 和 Growth 的差距,市值只分两档保证大小市值组内股票数量足够,避免组合过度集中在个别股票上。
VMG 的命名也值得注意——它不叫 HML,因为构成指标从 BM 换成了 EP,名称必须跟着变。Value Minus Growth 直白地表达了它在多空两端持有的对象:做多高盈利收益率(低 EP 值之外的"便宜且有盈利")的公司,做空低盈利收益率(昂贵且盈利弱)的公司。在构建代码时,分位数切点必须按截面计算,这一点和市值过滤一样关键:
def build_smb_vmg(returns: pd.DataFrame, market_cap: pd.DataFrame, ep: pd.DataFrame, size_groups: list, ep_groups: list): """ 按市值和 EP 做 2×3 交叉分组,返回 SMB 和 VMG 因子收益率序列。 切点按月频截面计算:市值按 50% 分位分两组, EP 按 30%/70% 分位分三组,保证每组都有稳定的股票数量。 """ smb_list, vmg_list = [], [] for date in returns.index: # 截面切点 size_cut = market_cap.loc[date].quantile(0.5) ep_cut_low, ep_cut_high = ep.loc[date].quantile([0.3, 0.7]) # 六个格子 cells = {} for size_label, size_mask in [("S", market_cap.loc[date] <= size_cut), ("B", market_cap.loc[date] > size_cut)]: for ep_label, ep_mask in [("V", ep.loc[date] <= ep_cut_low), ("M", (ep.loc[date] > ep_cut_low) & (ep.loc[date] <= ep_cut_high)), ("G", ep.loc[date] > ep_cut_high)]: cells[f"{size_label}{ep_label}"] = returns.loc[date, size_mask & ep_mask] # SMB = 小市值三组均值 - 大市值三组均值 smb_list.append( sum(cells[f"S{lab}"].mean() for lab in ["V", "M", "G"]) / 3 - sum(cells[f"B{lab}"].mean() for lab in ["V", "M", "G"]) / 3 ) # VMG = 两组内 Value 减 Growth 后取平均 vmg_list.append( (cells["SV"].mean() - cells["SG"].mean() + cells["BV"].mean() - cells["BG"].mean()) / 2 ) return pd.Series(smb_list, index=returns.index), pd.Series(vmg_list, index=returns.index)这段代码的机制要点在均值差的计算方式。SMB 不是简单地"小市值减大市值",而是在每个 EP 组内部先做市值差再平均,这样剥离了 EP 分组对规模因子的干扰。VMG 同理,在每个市值组内部做价值差再平均,剥离了市值对价值因子的干扰。这就是交叉排序的意义——两个因子各自保持对另一个因子的中性。
4.2 第一回合 PK:交叉回归中谁解释了谁
模型构建完毕,剩下的问题是:中国版三因子和原版 Fama-French 三因子,到底谁更能解释 A 股?第一回合用的是交叉回归——拿一个模型的因子去解释另一个模型的因子,看截距 α 是否显著。如果中国版的 SMB 和 VMG 能吸收掉 FFSMB 和 FFHML 的绝大多数收益,而反过来做不到,说明中国版因子的信息集更完整。
实际操作上,每两个因子之间做一次时间序列回归。以"用 VMG 解释 FFHML"为例:把 FFHML 的收益率序列作为因变量,VMG 和 MKT 作为自变量,回归后的截距就是 FFHML 在中国版因子面前无法被解释的部分。原文的回归结果显示,FFSMB 和 FFHML 在考虑了 SMB 和 VMG 之后,截距 α 的 t 值完全掉了下来;而反向回归中,SMB 和 VMG 的 α 依然显著。这个不对称的结果非常干净地说明了中国版因子的增量信息。
这里的判断逻辑可以通过一个简化的检验代码来理解:
import statsmodels.api as sm def check_alpha(target: pd.Series, factors: pd.DataFrame): """ 目标因子对给定因子做时序回归,返回截距 alpha 的 t 检验结果。 若 alpha 不显著(|t| < 2),说明目标因子能被这些因素解释; 若 alpha 显著为正,说明目标因子含有这些因素无法覆盖的超额收益。 """ X = sm.add_constant(factors) model = sm.OLS(target, X).fit() alpha_tstat = model.tvalues["const"] return round(alpha_tstat, 2)对回归结果做解读时,有一个容易被新手忽略的点:α 不显著在因子检验里是"好事"。目标因子作为被解释变量,它的 α 不显著意味着它没有独立于解释因子的收益来源,可以被现有因子体系吸收。反过来,当你用某个模型检验异象组合时,α 显著为正是"坏事"——它说明模型没有解释干净。同一个统计量在两套语境下的意义完全相反,这一点在做毕业设计分析时极易搞混。
4.3 第二回合 PK:GRS 检验的联合检验逻辑
交叉回归看的是两两因子之间的关系,GRS 检验则把视野拉回到整个资产集合:给定一组测试资产,因子模型的定价错误是否联合为零。GRS 检验的原假设是 n 个资产的 α 同时等于零,检验统计量把每个资产回归后的 α 估计值和它们的协方差结构组装成一个二次型。如果模型定价正确,所有 α 应该联合接近零;只要有一个资产被系统性地错误定价,统计量就会被放大。
原文的比较结果非常有戏剧性:用中国版的 SMB 和 VMG 作为解释因子去检验 FFSMB 和 FFHML 时,p 值达到 0.41,远远无法拒绝原假设——意味着中国版因子的信息集确实覆盖了美版因子;反过来用美版因子检验中国版因子时,p 值小到 10 的 -13 次方量级,原假设被以极高的置信度拒绝。两组检验的方向不对称,构成了一条完整的证据链:美版三因子在中国市场上的定价错误是系统性的,而中国版三因子把这些错误吸收掉了。
GRS 检验的统计量其实可以写得很短,逻辑内核非常紧凑:
def grs_stat(alphas, residual_cov, factor_mean, factor_cov, T): """ GRS 统计量:检验 N 个资产定价错误是否联合为零。 alpha_hat 是各资产回归截距向量,Sigma 是残差协方差矩阵。 统计量服从 F(N, T-N-K) 分布。p 值越大越好——不拒绝原假设 说明模型的定价错误可视为零。 """ N = len(alphas) K = factor_mean.shape[0] Sigma_inv = np.linalg.inv(residual_cov) omega_inv = np.linalg.inv(factor_cov) inner = alphas.T @ Sigma_inv @ alphas scale = (T - N - K) / (N * (T - K - 1)) grs = scale * inner / (1 + factor_mean.T @ omega_inv @ factor_mean) return grs代码里的alphas.T @ Sigma_inv @ alphas是核心二次型:它把每个资产的 α 用协方差的逆加权,等价于在做一种多变量版本的"标准化"。除以1 + factor_mean.T @ omega_inv @ factor_mean是为了调整因子均值对检验功效的影响——因子均值越大,模型定价误差的可检验性越强。整个统计量在对 α 的量级和不确定性做了双重校正之后,才被放到 F 分布里去判断显著性。
4.4 解释异象的边界:哪些能被解释,哪些不能
检验因子的最终标准是它对异象的解释能力。研究者选取了学术界在 A 股发现的多类异象,其中六个大类、十个指标能获得显著 CAPM-α。在使用中国版三因子对这些异象组合做时序回归时,出现了清晰的分界:size、value、profitability、volatility 这几类异象的 α 可以被三因子吸收,三因子模型的解释力覆盖了基本面类和波动率类异象;但 reversal(反转)和 turnover(换手率)异象的 α 依然显著,三因子无能为力。
这两类无法解释的异象有共同的心理和市场结构根源:散户主导的交易结构下,换手率高的股票往往聚集了大量非理性关注,短期内价格被舆情推高;而做空限制让理性投资者无法入场纠偏,高换手股票的价格只能靠时间慢慢消化,于是产生反转。换手率因子对 A 股的定价有独特的信息增量,这是基本面因子无法替代的。这个边界直接引出了第四因子 PMO 的必要性——中国版三因子解决的是壳价值和价值指标的问题,但行为层面的定价偏差需要单独的因子来承载。
5. 常见问题:构建与检验中国版三因子时的五个易错点
5.1 剔除 30% 之后,SMB 变得不显著就怀疑阈值选错了
现象:按原文剔除市值最小的 30% 后重做 SMB 因子,发现 t 值不高,于是想试 50%、70% 的剔除比例,最后挑出一个数据上最漂亮的。
原因:SMB 的显著性取决于股票池里是否还有足够的规模溢价信息。剔除比例太高,把小市值组的有效样本切掉了,规模因子的变异度下降,显著性自然变弱;但这不是模型错了,而是你在主动筛选结果。30% 这个阈值来自壳价值污染的诊断,不是来自因子显著性的调参。
解决:先把剔除比例当成固定参数,用原文的 30% 复现结果;敏感性分析单独做,把 20%、30%、40% 的结论并排展示,而不是挑一个最好看的写进正文。复现的第一目标是逻辑一致,不是漂亮的 t 值。
5.2 EP 非负处理时只截断、不加 dummy,回归结果和原文对不上
现象:EP 负值直接置零后进 Fama-MacBeth 回归,EP 因子的 t 值明显偏弱,价值组和成长组的收益差也变小了。
原因:截断之后,所有亏损公司的 EP 都等于 0,方差被压缩,EP 排序里大量股票挤在同一个值上,截面回归对 EP 载荷的估计被稀释。原文的构造里,dummy 变量承载的是"是否亏损"这层信号,它和截断后的 EP 变量共同构成完整的信息集。
解决:严格按原文的构造:EP_clean = EP.clip(lower=0),同时生成EP_neg_dummy,两个变量一起进截面回归。单独用截断 EP 而不加 dummy,等于把壳价值信号丢掉了一半。
5.3 GRS 检验把 p 值看反,以为越小越好
现象:做完 GRS 检验,看到 p 值 0.41,觉得太大、不显著,认为模型效果不好。
原因:GRS 的原假设是"定价错误联合为零"。p 值大意味着不能拒绝原假设,也就是没有任何统计证据说模型定价错了——这恰恰是模型通过检验的标志。p 值极小才说明模型留下了大量显著的 α,是失败的证据。
解决:写结论前先确认原假设方向。GRS 检验里,p 值大是"安全通过",p 值是 10 的 -13 次方才是"重大事故"。可以在论文的检验结果表里显式标注"原假设:α 联合为零",避免自己和读者反向解读。
5.4 用全样本分位数做市值过滤,导致早期股票池大幅偏差
现象:用一段 15 年的日频市值数据算了一个固定阈值,一次性过滤掉市值最小的 30%,结果早期股票的存活率明显偏低,SMB 和 VMG 的序列和历史复盘的差异很大。
原因:市值分布随市场扩容和通货膨胀整体抬升,2010 年的 30% 分位可能只有几十亿,2020 年已经涨到上百亿。拿全样本一刀切,早期阈值过低,大量当时的中小市值股票被当作"大股票"保留,只有尾部被剔除;后期阈值过高,三分之一的中型公司被误伤。
解决:严格按截面分位数过滤——每个月份单独计算当月市值分布的 30% 分位,只剔除当月市值最小的 30%。这就是第一节代码里market_cap.quantile(quantile)必须放进截面循环的原因。
5.5 因子共线性过强,VMG 和 SMB 的回归系数互相打架
现象:回归里同时放 SMB 和 VMG 时,两个因子的系数符号不稳定,标准误异常放大,和单独检验时判若两人。
原因:A 股市值因子和价值因子在部分时期高度相关。小市值组合里 EP 高的公司占比大,导致 SMB 和 VMG 的多头端重叠;尤其剔除壳价值之后,股票池的异质性下降,因子之间的结构相关性上升。
解决:先输出三因子的相关系数矩阵,检查 SMB 与 VMG 的相关性是否超过 0.5;如果相关性过高,用正交化处理后的因子做稳健性检验。数据里因子相关高不是数据错了,而是 A 股风格切换剧烈下的常态,应如实呈现而不是强行回避。
6. 四因子扩展与设计取舍:PMO 补位与模型方法论启示
PMO 因子的设计是全篇最值得咀嚼的部分。它做多低换手率股票、做空高换手率股票,名称 Pessimistic Minus Optimistic 本身就带着行为金融的味道:低换手的"悲观"投资者在交易基本面信息,高换手的"乐观"投资者在追逐舆情和热度。在三因子无法解释 reversal 和 turnover 异象之后,研究者没有引入更复杂的基本面因子,而是选择了换手率这个行为指标。这说明在 A 股,定价偏差的很大一部分来自交易结构而非基本面风险,做空限制放大了这个偏差,所以需要一个直接度量交易过热程度的因子来吸收它。
加入 PMO 之后,十个异象全部被覆盖。这背后的设计取舍非常有意思:基本面因子负责解释公司层面的定价,换手率因子负责解释交易层面的定价,两者互补而不是竞争。相比美版五因子模型靠投资和盈利因子做增量,中国版四因子的第四条腿完全是行为维度的,这是对 A 股"散户主导+做空受限"制度环境的直接响应。
从方法论角度看,这篇研究给我的最大启示是:一个资产定价模型的好坏,不只是选对了多少个因子,而是是否对市场制度做了诊断。壳价值污染的识别、30% 分位数的取舍、EP 对 BM 的替代、PMO 的补位,每一步都是先把制度约束放到台面上,再决定模型怎么改。这比直接套用美版框架做一版"本土化调参"要难,但结论的可靠性不可同日而语。从那以后我每次做 A 股截面研究,都会先画一张市值分布图,看看样本里有没有类似壳价值的结构性污染,再决定因子怎么构建。这个过程虽然慢,但省掉了后面无数个对着不显著结果发呆的夜晚。希望帮到你。
本文还有配套的精品资源,点击获取