第二章 基准选择与构建:如何选择合理的业绩基准?
做绩效归因,第一步不是跑代码,而是选基准。
我见过太多团队,模型跑得飞起,归因结果一塌糊涂。为什么?基准选错了。你想想看,拿沪深300去衡量一个中小盘基金,那归因出来的超额收益,说白了就是风格错配,根本不是基金经理的能力。
这一章,我们就来聊聊基准这件事。我会把我在实战中踩过的坑、总结的经验,都摊开来讲。
2.1 基准的本质:你究竟在和谁比?
基准,就是一把尺子。你用它来量你的投资组合跑赢了多少,跑输了多少。
但这里有个关键问题:这把尺子本身得对。你不能拿一把歪尺子去量东西,对吧?
我个人习惯把基准分为三类:
- 市场指数:比如沪深300、中证500、标普500。这是最常用的,代表整个市场的平均表现。
- 自定义基准:根据你的投资策略,自己构建一个组合。比如“50%沪深300 + 50%中证500”。
- 无风险利率:通常用国债收益率或SHIBOR。用来衡量你的组合是否跑赢了“躺平”的收益。
这三类基准,各有各的适用场景。我们一个一个来看。
2.2 市场指数:最省事,但最危险
市场指数是新手最爱用的基准。为什么?因为现成的,不用动脑子。
但我在项目中遇到过一个问题:一个做消费行业轮动的私募,拿沪深300做基准。结果归因出来,超额收益全是负的。后来一查,沪深300里金融和白酒权重太高,消费轮动策略根本跑不赢它。这不是策略的问题,是基准选错了。
所以,用市场指数做基准,你得先确认两件事:
- 风格匹配:你的组合是偏大盘、中盘还是小盘?基准指数必须对应。
- 行业分布:你的组合行业权重和基准是否接近?如果偏离太大,超额收益可能来自行业赌注,而不是选股能力。
2.3 自定义基准:更精准,但更麻烦
当市场指数无法满足你的需求时,就该自己动手了。
我习惯的做法是:先确定你的投资策略暴露了哪些风险因子,然后根据这些因子来构建基准。
举个例子:
- 你的策略是“低波动 + 高股息”。
- 那么基准可以是“50%中证红利指数 + 50%中证低波动指数”。
- 或者更精细一点,用多因子模型算出每个因子的权重,然后构建一个因子模拟组合。
构建自定义基准时,有几点要注意:
| 步骤 | 说明 | 我的经验 |
|---|---|---|
| 1. 确定因子暴露 | 分析你的策略主要依赖哪些因子(市值、价值、动量等) | 我习惯用Barra模型跑一遍,看看因子载荷 |
| 2. 选择底层指数 | 为每个因子选一个对应的指数或ETF | 别选太冷门的,流动性差的数据容易失真 |
| 3. 确定权重 | 可以用回归法,也可以用等权或市值加权 | 我建议用滚动回归,每季度调整一次权重 |
| 4. 定期再平衡 | 基准也需要定期调整,保持和策略一致 | 再平衡频率要和策略保持一致,别偷懒 |
2.4 无风险利率:最基础,但最容易被忽略
无风险利率,说白了就是你什么都不做,把钱放银行能赚多少。
在绩效归因里,无风险利率通常用来计算超额收益和夏普比率。但很多人会忽略一个问题:无风险利率的期限选择。
我遇到过的情况:
- 一个做短期交易的策略,用10年期国债收益率做无风险利率。
- 结果夏普比率算出来特别高,因为短期利率和长期利率差太多了。
- 这明显不合理。短期策略应该用SHIBOR 1周或1个月,而不是长期国债。
所以,选择无风险利率时,记住一个原则:匹配你的投资期限。
| 投资期限 | 推荐无风险利率 | 原因 |
|---|---|---|
| 日内/高频 | 隔夜拆借利率 | 资金成本按天算 |
| 短期(1-3个月) | SHIBOR 1M/3M | 匹配资金占用周期 |
| 中期(6-12个月) | 国债收益率 1Y | 流动性好,风险低 |
| 长期(1年以上) | 国债收益率 10Y | 长期资金成本参考 |
2.5 基准选择的完整流程
说了这么多,到底该怎么选?我总结了一个流程,你可以照着做。
这个流程看起来简单,但每一步都有坑。我重点说两个:
- 回测验证:构建好基准后,一定要回测。看看基准的历史表现是否合理,有没有出现极端值。我遇到过基准在某个时间段突然暴涨,后来发现是数据源出了问题。
- 定期再平衡:基准不是一成不变的。你的策略在进化,基准也得跟着调整。我习惯每季度检查一次,看看因子暴露有没有漂移。
2.6 一个实战案例
最后,我分享一个真实的案例。
之前帮一个量化团队做归因分析。他们的策略是“多因子选股 + 行业中性”。
一开始,他们用沪深300做基准。结果归因出来,超额收益波动很大,而且行业贡献总是负的。
我一看,问题出在基准上。沪深300的行业权重和他们的组合差异太大。比如,他们超配了医药,低配了金融,但沪深300里金融权重很高。
后来,我帮他们构建了一个自定义基准:
# 自定义基准构建示例(Python伪代码)
import pandas as pd
# 确定因子暴露
factor_exposure = {
'市值': 0.3,
'价值': 0.2,
'动量': 0.2,
'质量': 0.15,
'低波': 0.15
}
# 选择底层指数
indices = {
'市值': '中证500',
'价值': '中证价值',
'动量': '中证动量',
'质量': '中证质量',
'低波': '中证低波'
}
# 构建基准
benchmark_weights = factor_exposure
# 实际代码会涉及指数收益率获取、加权计算等
# 这里只展示逻辑
调整基准后,归因结果变得清晰了。超额收益主要来自选股能力,而不是行业赌注。团队终于能放心地根据归因结果调整策略了。
嗯,这一章就到这里。基准选好了,下一步才能谈归因。记住,基准是你的锚,锚稳了,船才不会偏。