因子投资-实验02-用回归估计Alpha和Beta
给定一列市场超额收益和一列资产超额收益,怎样用时序回归估计月度 Alpha、市场 Beta、置信区间和残差?本实验先用已知生成过程造数据,再用 OLS 反向估计。因为真参数已知,我们能判断代码是否恢复了正确对象。
问题
给定一列市场超额收益和一列资产超额收益,怎样用时序回归估计月度 Alpha、市场 Beta、置信区间和残差?本实验先用已知生成过程造数据,再用 OLS 反向估计。因为真参数已知,我们能判断代码是否恢复了正确对象。
数据生成式是:
0.001 是真实月度 Alpha,1.2 是真实 Beta,ε 是人为给定的小噪声。真实研究看不到这些真值,所以更需要时间对齐、模型诊断和稳健标准误。
输入数据
使用 12 个月确定性市场收益与噪声,全部用小数:
| 月份 | market | epsilon |
|---|---|---|
| 1 | -0.030 | 0.0010 |
| 2 | 0.020 | -0.0010 |
| 3 | 0.010 | 0.0005 |
| 4 | -0.010 | -0.0005 |
| 5 | 0.040 | 0.0010 |
| 6 | 0.015 | -0.0010 |
| 7 | -0.025 | 0.0005 |
| 8 | 0.030 | -0.0005 |
| 9 | 0.000 | 0.0000 |
| 10 | 0.010 | 0.0005 |
| 11 | -0.015 | -0.0005 |
| 12 | 0.025 | 0.0000 |
asset 由已知公式计算,不从外部下载。这里 market 与 asset 都被解释为超额收益;若输入的是原始收益,截距含义会不同。
逐步实现
第一步:构造可审计数据
1 | |
数据生成时保留 epsilon 列只是教学需要。真实数据中残差只能在估计模型后得到,不能把未来残差当特征。
第二步:显式加入常数项
1 | |
statsmodels 不会在所有接口里自动加常数。不加常数相当于强迫 Alpha 为零,并会改变 Beta。X 的列是 const、market,维度为 12×2;y 是 12×1。
第三步:提取参数、置信区间与残差
1 | |
默认 fit 使用经典同方差标准误。本教学噪声很小且人为确定,适合验证接口;金融月收益中仍应检查异方差和自相关,并考虑 model.get_robustcov_results(cov_type=”HAC”, maxlags=L)。
完整代码
1 | |
预期输出
关键结果允许最后几位随数值库版本略有差异:
| 项目 | 估计值 | 95% 经典置信区间 |
|---|---|---|
| 月度 Alpha | 0.001032458 | [0.000545274, 0.001519641] |
| 市场 Beta | 1.194435858 | [1.172275866, 1.216595850] |
| R² | 0.999307168 | 不适用 |
估计 Alpha 接近真值 0.001,Beta 接近真值 1.2。R² 接近 1 是因为我们刻意设置了很小噪声,不代表现实资产回归应有如此高拟合。
残差约为 0.000801、-0.000921、0.000523、-0.000588、0.001190、-0.000949、0.000328、-0.000366、-0.000032、0.000523、-0.000616、0.000107。它们不是原始 epsilon 的逐项复制,因为 OLS 会重新选择截距与斜率,使样本残差与常数和 market 正交。
断言
- Beta 范围: 估计值必须落在 [1.1,1.3];这能捕捉漏加常数、列顺序错位或收益单位错误等大问题。
- Alpha 邻域: 估计月 Alpha 与 0.001 的差小于 0.0002。
- 残差和为零: 含截距 OLS 的样本残差与常数列正交。
- 残差与市场正交: market 与残差内积在浮点误差内为零。
这些是代数和实现断言,不证明 CAPM 正确。真实研究还要断言日期完全对齐、收益频率一致、市场因子定义可追溯、样本长度足够以及数据没有未来函数。
结果解释
Beta 约 1.194 表示:在这个线性模型和样本中,市场超额收益每增加 1 个百分点,资产超额收益条件均值约增加 1.194 个百分点。它是敏感度,不表示资产“有 119.4% 的风险”,也不是相关系数。
月度 Alpha 约 0.1032%。精确复合年化为:
年化不增加统计证据;月度 Alpha 的标准误和置信区间也必须按正确方法变换。不能只把置信区间端点乘 12 后声称是精确年区间。
默认 95% 区间在本例不包含零,但数据是人为按正 Alpha 生成且噪声极小。现实中显著 Alpha 还可能来自遗漏规模、价值、动量、行业或流动性暴露;更丰富因子模型会改变截距。
残差是模型没有线性解释的样本部分。它可能包含真正特质冲击、遗漏因子、测量误差和非线性;“特质”不等于“可忽略”。
常见故障
- 没有常数项: Beta 会吸收平均收益差异,模型无法估计 Alpha。
- 原始收益与超额收益混用: CAPM 左右两边应使用同期限无风险收益调整后的口径。
- 百分数和小数混用: 2 表示 200% 还是 2% 必须统一;Beta 可能因两边单位不一致放大 100 倍。
- 日期错一位: market(t) 与 asset(t+1) 错位会把同期风险暴露回归变成预测回归。
- 看错 params 顺序: 使用列名访问,不要默认 params[0] 永远是 Alpha。
- 把高 R² 当成高收益: R² 衡量样本内线性拟合,和 Alpha 大小、未来收益不是同一对象。
- 默认标准误万能: 月度收益若有异方差或自相关,应使用与研究设计一致的稳健协方差。
- 样本太短: 12 个月只有 10 个残差自由度,置信区间对假设敏感;真实估计应报告更长样本与滚动稳定性。
练习
- 删除常数项重新回归,比较 Beta、残差和 R²,解释模型问题发生了什么变化。
- 把 epsilon 放大 10 倍,观察参数置信区间和 R²;点估计与精度谁变化更明显?
- 将 asset 和 market 都乘 100,再回归。Alpha 和 Beta 分别如何变化?只乘一边又会怎样?
- 加入一个与 market 高度相关的第二因子,观察共线性对两个斜率标准误的影响。
- 把 12 个月复制成 10 年但加入序列相关噪声,比较经典标准误与 Newey–West 标准误。
- 在真实 A 股实验设计中写出 market 的候选定义:全市场价值加权、沪深 300 或 CH-3 市场因子。说明每个定义对应的投资总体。
完成练习后,你应能把回归输出翻译成经济语言,同时明确它没有回答的因果、模型遗漏和可交易性问题。