分拆上市事件 Alpha:母子公司拆分后的价格漂移
把真实持续 Alpha 精确设为 0,市场调整 CAR 照样开出 +16.96%(t=+14.82)。同一批 1500 个事件四种口径:原始 +25.17%、市场调整 +16.96%、规模匹配 +13.49%、三因子 +13.11%——光换基准就摆 3.85pp,没一个是 Alpha。分解锁死来源:强制抛售反弹 +13.16%、规模 +3.10%、价值 +0.38%、beta≠1 +0.37%,残差 −0.05%。两条硬对照:零压力零 Alpha 安慰剂里市场调整仍报 +3.80% 而三因子精确归零(−0.052%,t=−0.05);规模溢价传导斜率 1.1159 与平均 SMB 载荷 1.1159 比值精确为 1.0000——那个「超额」逐字就是规模溢价乘载荷。剩下的 13.11% 是流动性报酬而非 Alpha:51.8% 在 20 天内赚完,窗口滚离资金流后从 +11.85% 塌到 +1.91%。容量是真天花板:只有 14 个并发仓,2.5 亿美元时投放率已跌到 17.5%,半衰容量约 2.69 亿。样本量红线:单事件 SD 42.65%、36.7% 为负,需 42 个事件才够 t=2
问题:一个被引用了三十年的数字#
打开任何一本事件驱动策略的书,翻到「特殊situation」那一章,你会看到这句话:
分拆上市的子公司在上市后 1-3 年内显著跑赢市场。
这个结论来自 Cusatis、Miles 和 Woolridge 1993 年的论文,之后被无数篇文献重复验证。彼得·林奇在《One Up on Wall Street》里专门写过分拆股,乔尔·格林布拉特的《You Can Be a Stock Market Genius》整整一章都在讲这个。
数字通常长这样:三年累计超额收益 +10% 到 +20%。
看起来是白捡的钱。母公司把一块业务拆出来,指数基金因为持仓规则不能持有子公司股票(不在指数里、市值太小、行业不匹配),被迫在几天内抛掉。价格被砸下去,然后反弹。你只要在那里接着就行。
但这个数字里,有多少是 Alpha?
这不是修辞问题。它可以被精确回答——只要你有一个真值已知的世界。
方法:把真实 Alpha 精确设为零#
下面所有数字来自一个受控模拟,不是历史回测。这么做的原因很简单:在真实数据上,你永远不知道「真实 Alpha」是多少,所以你没法给估计量打分。你只能拿一个估计量去对比另一个估计量,而两个都可能是错的。
模拟里我把真实持续 Alpha 精确设为 0。子公司的收益完全由三因子 + 特质噪声 + 强制抛售的价格压力决定。没有任何持续的超额收益被植入。
然后我问:四种常见的「有没有跑赢」口径,会报出什么数字?
设定:
- 1500 个分拆事件,母公司市值中位数 59 亿美元,子公司中位数 13.19 亿美元
- 子公司越小,SMB(规模因子)载荷越高,平均载荷 1.116——这是污染的源头
- 指数基金持有母公司 22% 的股份,被迫在 5 天内抛售子公司股票
- 换手率随市值上升(小盘孤儿股相对成交更稀薄),所以抛压的冲击是规模依赖的
- 压价按 √(资金流/ADV) 建模,半衰期 18 天,平均峰值压价 13.17%
两个让数字可信的工程细节:
共同随机数(common random numbers)。所有随机冲击只抽一次,在所有场景里复用。这样场景之间的差异是精确的参数效应,不是抽样噪声。后面你会看到规模溢价扫描的传导斜率精确等于 1.0000——这只有在共同随机数下才可能。
横截面去均值。特质冲击在每一天做横截面中心化。每个事件的离散度完全不变(N=1500),但跨事件的平均特质项精确为 0。这一步让零 Alpha 的安慰剂读出精确的零,而不是一个运气不好的抽样假象。没有这一步,一次不走运的抽样看起来就像一个「发现」。
import numpy as np
TD, HORIZON, N = 252, 252, 1500
MKT_MU, MKT_VOL = 0.08, 0.16
SMB_MU, SMB_VOL = 0.03, 0.10 # 真实存在的规模溢价——污染源
HML_MU, HML_VOL = 0.02, 0.09
TRUE_ALPHA = 0.00 # 真值:零持续 Alpha
rng0 = np.random.default_rng(20260805)
parent_cap = np.exp(rng0.normal(np.log(6.0e9), 0.95, N))
frac = rng0.uniform(0.08, 0.42, N)
child_cap = parent_cap * frac
# 子公司越小,规模载荷越高
b_smb = np.clip(1.45 - 0.30 * (np.log10(child_cap) - 8.0), 0.15, 1.60)
b_mkt = rng0.normal(1.05, 0.18, N)
b_hml = rng0.normal(0.22, 0.35, N)
# 换手率随市值上升:小盘孤儿股相对成交更稀薄
turn = 0.0022 * (child_cap / 1e9) ** 0.28 * np.exp(rng0.normal(0, 0.25, N))
adv = child_cap * np.clip(turn, 2e-4, 2e-2)
# 共同随机数:只抽一次,所有场景复用
rngs = np.random.default_rng(20260805 + 7)
Z_MKT = rngs.normal(0, 1, (N, HORIZON))
Z_SMB = rngs.normal(0, 1, (N, HORIZON))
Z_HML = rngs.normal(0, 1, (N, HORIZON))
Z_IDI = rngs.normal(0, 1, (N, HORIZON))
# 横截面去均值:保留个体离散度,消掉跨事件平均的抽样噪声
Z_IDI = Z_IDI - Z_IDI.mean(axis=0, keepdims=True)python结果一:同一批数据,四个答案#

同一批 1500 个事件,一年期窗口:
| 口径 | 一年期超额 | t 值 |
|---|---|---|
| 原始 CAR | +25.17% | +20.57 |
| 市场调整 CAR | +16.96% | +14.82 |
| 规模匹配 CAR | +13.49% | +12.25 |
| 三因子 Alpha | +13.11% | +11.91 |
真实持续 Alpha 是 0。
四个数字全部显著为正,t 值最低的也有 11.91。光是换一个基准,结论就摆动 3.85 个百分点,而这三个数字没有一个是 Alpha。
分解告诉你那 +16.96% 到底是谁的钱:
| 来源 | 贡献 |
|---|---|
| 强制抛售反弹 | +13.16% |
| 规模(SMB)暴露 | +3.10% |
| 价值(HML)暴露 | +0.38% |
| 市场 beta ≠ 1 | +0.37% |
| 残差 | −0.05% |
残差 −0.05%。四个机械来源解释了这个数字的全部。
结果二:规模溢价的传导斜率精确等于 1.0000#
这是全文最硬的一条证据。

把强制抛售关掉,真实 Alpha 保持 0,然后扫描外生的规模溢价 SMB,看市场调整 CAR 怎么动:
| SMB 溢价 | 市场调整 CAR | 三因子 Alpha |
|---|---|---|
| 0%/年 | +0.45% | −0.052% |
| 1%/年 | +1.56% | −0.052% |
| 2%/年 | +2.68% | −0.052% |
| 3%/年 | +3.80% | −0.052% |
| 4%/年 | +4.91% | −0.052% |
| 6%/年 | +7.14% | −0.052% |
三因子那一列完全不动,锁死在 −0.052%(回到小数点后第六位都不变)。
而市场调整那一列的传导斜率是 1.1159,平均 SMB 载荷是 1.1159,比值 1.0000。
这不是「差不多」。这是恒等式:
你测出来的那个「分拆超额收益」,逐字就是规模溢价乘以规模载荷。 换个说法:如果那十年小盘股跑赢大盘,分拆研究就会「发现」超额收益;如果小盘股跑输,同一套方法会「发现」分拆股表现不佳。它测的从来不是分拆。
恢复检验从另一个方向确认了这一点。植入已知的非零 Alpha,看三因子估计量能不能捞回来(去掉安慰剂基线后):
| 植入真值 | 三因子原始读数 | 去基线后 | 误差 |
|---|---|---|---|
| +0.00% | −0.052% | +0.000% | — |
| +2.00% | +1.948% | +2.000% | ~0 |
| +4.00% | +3.948% | +4.000% | ~0 |
| +6.00% | +5.948% | +6.000% | ~0 |
最大绝对误差 5.55e-17——浮点精度级别。估计量本身没问题,问题在基准。
结果三:剩下的 13% 也不是 Alpha#
三因子 CAR 还有 +13.11%,真实 Alpha 却是 0。这不矛盾——它是流动性报酬,不是预测能力。
两条证据。

第一,钱在前 20 天就赚完了。
| 时点 | 三因子 CAR | 占全年比例 |
|---|---|---|
| 第 5 日 | +1.87% | 14.3% |
| 第 20 日 | +6.79% | 51.8% |
| 第 60 日 | +11.85% | 90.4% |
| 第 126 日 | +13.02% | 99.3% |
| 第 252 日 | +13.11% | 100% |
一半在 20 天内,九成在 60 天内。这条曲线的形状就是强制抛售压力的衰减形状(半衰期 18 天),不是任何「持续三年的价值发现」。
那些报告「三年超额收益」的研究,测到的是同一笔钱——只是把窗口拉长了,让它看起来像是长期的。
第二,把窗口滚离资金流,它就消失了。
伪事件日检验:同一批股票、同一批数据,但假装分拆发生在另一个随机日期,重算 60 日窗口。
| 窗口 | 60 日三因子 CAR |
|---|---|
| 真实事件日对齐 | +11.85% |
| 伪事件日(滚离资金流) | +1.91% |
塌了 84%。如果那是子公司的某种内在质量(管理层激励改善、业务聚焦),它不该关心你从哪天开始数。它关心——所以它是资金流。
结果四:容量才是真天花板#
你不是在收割 Alpha,你是在给被迫抛售的人提供流动性。这意味着你自己的钱会把这笔收益吃掉。

关键约束是并发仓位数。假设一年 60 个分拆事件、每个持有 60 天,那么任何时点你手上只有 14 个并发仓——你的 AUM 必须塞进这 14 只孤儿小盘股里。
限制单只不超过 5 日 ADV 的 10%,自身冲击按 √参与率 建模,进出各付一次:
| AUM | 实际投放 | 投放率 | 毛超额 | 自身冲击 | 净超额 |
|---|---|---|---|---|---|
| $10M | $9M | 85.6% | +11.22% | 3.58% | +7.64% |
| $25M | $17M | 68.1% | +10.61% | 4.39% | +6.22% |
| $50M | $26M | 51.0% | +10.41% | 4.86% | +5.55% |
| $100M | $34M | 34.4% | +9.96% | 5.22% | +4.73% |
| $250M | $44M | 17.5% | +9.35% | 5.51% | +3.83% |
| $1B | $50M | 5.0% | +9.32% | 5.67% | +3.65% |
| $10B | $52M | 0.5% | +9.36% | 5.69% | +3.67% |
半衰容量约 2.69 亿美元。
但真正的信息在「投放率」那一列。到 2.5 亿美元时,你只能投出去 17.5%;到 100 亿,只有 0.5%。净超额看起来稳在 +3.67% 不再恶化,但那是因为你 99.5% 的钱根本没进场——它算的是那 0.5% 的收益率。按全部 AUM 算,100 亿美元规模下这个策略的贡献接近于零。
这是一个只有小资金能做的策略,而且「小」的量级是几千万美元,不是几十亿。
加权方式也在讲同一件事:等权 +13.11%,市值加权 +11.90%,等权是 1.1 倍。差距不大,但方向明确——效应偏向小市值那一端,而小市值恰恰是你放不进钱的地方。
对抗式检验:我怀疑过什么#
(a) 零压力零 Alpha 安慰剂。 同时关掉强制抛售和 Alpha。市场调整 CAR 报 +3.80%——依然像个发现;三因子 −0.05%(t=−0.05),精确归零。这是判定性的:naive 口径在一个什么都没有的世界里也能造出显著结果。
(b) 只开压力。 Alpha 仍为 0,只打开强制抛售,三因子从 −0.05% 跳到 +13.11%,增量 +13.16% 精确等于压力项的真值贡献。收益来源被锁死。
(c) 规模溢价扫描。 传导斜率 1.1159 / 平均载荷 1.1159 = 1.0000(见上文)。
(d) 恢复检验。 最大误差 5.55e-17。估计量无偏。
(e) 幸存者偏差。 剔除表现最差的 8%(模拟「退市所以不在样本里」),三因子从 +13.11% 抬到 +20.06%,凭空多出 6.95 个百分点。这是很多真实数据集的默认状态。
(f) 伪事件日。 +11.85% → +1.91%,塌 84%。
(g) 宇宙稳定性。 12 个独立宇宙,均值 +13.36%,变异系数 0.104。结论不依赖某一次抽样。
(h) 样本量红线。 单事件标准差 42.65%,36.7% 的事件收益为负,需要 42 个独立事件才能达到 t=2。
最后一条值得停一下。真实市场一年有多少个像样的分拆?几十个。也就是说,你需要接近一整年的全部分拆事件,才能把这个效应从噪声里分离出来——而那时你还没解决基准问题、幸存者问题和容量问题。任何基于十几个案例的「分拆策略有效」的说法,在统计上不成立。
五分位那张图故意保留了一个不好看的结果:真实压价梯度是单调的(Q1 15.85% → Q5 10.71%,跨度 5.14pp),但实测 CAR 梯度是 −1.05%,非单调。因为每档只有 300 个事件,桶内标准误就有 2.46%——和整个梯度同量级。真值单调,实测测不出来。这不是模型的失败,这是样本量的诚实读数,我把它画进图里而不是抹平。
三段式总结#
A. 实现细节#
- 信号与执行:事件日为分拆完成日,收益从 T+1 开始累计,无前视
- 基准构造:三因子基准逐事件匹配该事件自己的 β_mkt / β_smb / β_hml,不是用组合平均载荷
- 压力建模:峰值压价 = min(0.030 × √(资金流/5日ADV), 18%),指数衰减半衰期 18 交易日;收益贡献取压价路径的逐日差分,不是一次性计入
- 股价漂移:GBM 漂移项含跳跃违约补偿,保证无套利
- 容量口径:并发仓位 = 年事件数 × 持有期/252 = 14 个;单只上限 5 日 ADV 的 10%;自身冲击 0.09 × √参与率,进出各一次;200 次抽样取均值
- 共同随机数:全部场景复用同一批冲击,场景差异为精确参数效应
- 横截面去均值:特质冲击逐日横截面中心化,保留个体离散度,消除跨事件平均的抽样噪声
B. 已知偏差#
- 模拟不是历史:这里量化的是「估计量在已知真值下的行为」,不是「真实分拆股赚了多少」。真实世界的压力幅度、衰减速度、事件频率都可能不同,结论的方向(基准选择主导结果、收益前置、容量受限)比具体数值更可搬运。
- 三因子不是全部:真实数据里还有动量、质量、流动性因子。这里只植入了三个因子,所以三因子基准恰好能完全剥离。现实中你剥不干净,残差里还会剩下别的东西——这意味着真实的「Alpha」比这里更难认定,不是更容易。
- 单期压力模型:假设所有指数基金在 5 天内抛完,且冲击函数是平方根形式。真实抛售可能拖更久、更分散,或者被做市商提前定价。若市场已经预期到抛压,反弹幅度会小于这里的 13.16%。
- 忽略融券与借券成本:如果你想对冲市场敞口做纯事件暴露,还要付借券费和保证金成本,净收益会进一步下降。
C. 结果解读#
结论先行:「分拆股跑赢」这个结论在受控世界里可以被完整复现,而那个世界的真实 Alpha 恰好是零。
第一,基准选择不是技术细节,它就是结论本身。 同一批数据四个口径摆动 3.85 个百分点,而规模溢价的传导斜率精确等于平均载荷(1.0000)。这意味着市场调整 CAR 在机械地把规模溢价重新贴上「事件 Alpha」的标签。任何只报市场调整收益的分拆研究,报告的是那段时期小盘股相对大盘的表现,不是分拆本身。
第二,剩下的 13% 是真钱,但它是流动性报酬,不是预测能力。 52% 在 20 天内实现,伪事件日检验让它塌掉 84%。这个区别在实操上是决定性的:流动性报酬要求你在特定时点有钱、有仓位额度、能承受小盘股的成交摩擦;预测能力则可以慢慢建仓。把前者当后者,你会在错误的时间以错误的规模进场。
第三,容量是硬约束,而且比看上去更早触发。 14 个并发仓、2.5 亿美元时投放率只剩 17.5%。净超额曲线在大 AUM 端看起来平稳(+3.67%),这是个陷阱——那是没投出去的钱不产生成本造成的假象。按全部资金计算,规模一上去这个策略就接近失效。
第四,样本量让「验证」变得几乎不可能。 42 个事件才够 t=2,36.7% 的事件亏钱。真实市场一年几十个分拆,意味着你至少要攒一年才有一个勉强显著的读数——而市场环境早就变了。这也解释了为什么这个「效应」在文献里反复出现又反复被质疑:样本量根本不足以定论。
第五,什么情况下这个策略还成立? 三个条件同时满足:资金规模在几千万美元量级、能在分拆后 20 个交易日内完成建仓、且愿意接受 36.7% 的单笔亏损率。缺一个都不行。如果你管着 10 亿美元、或者你的流程需要三个月尽调、或者你的 LP 看不了三分之一的仓位亏钱——这个策略不适合你,无论文献怎么说。