3. 分层试验原理
分层试验(Grouping / Binning Test)是量化因子评价中最直观的截面验证手段。其核心思想是:在每一个截面上,将全部股票按因子值排序并划分为若干组,然后观察各组在未来一段持有期内的平均收益表现。如果因子具备预测能力,那么各组收益应当呈现单调递增或递减的规律。
3.1 分层试验的目的
分层试验主要回答以下三个问题:
- 单调性检验:因子值的高低是否对应着未来收益的高低?理想情况下,第1组(最小因子值)到第N组(最大因子值)的收益应严格单调。
- 区分度评估:相邻两组之间的收益差距是否显著?差距越大,因子对股票的区分能力越强。
- 极端组表现:多头组(最高因子值)与空头组(最低因子值)的收益差(多空收益差)是否稳定且显著?这是因子选股能力的直接体现。
关键指标:分层试验的输出通常包括各组平均收益、多空收益差(Long-Short Spread)及其t统计量。单调性越强、多空收益差越大且越稳定,因子的Rank IC质量越高。
3.2 分层方法
常见的分层方法有两种:等分法和分位数法。两者的核心区别在于分组边界的确定方式。
| 分层方法 | 分组规则 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| 等分法 | 将股票按因子值排序后,平均分成N组(如5组、10组) | 样本量充足、因子分布均匀 | 每组股票数量相同,统计稳定性好 | 因子值分布极端时,组内差异可能较大 |
| 分位数法 | 按因子值分布的分位点分组(如10%、20%、30%分位) | 因子值存在长尾或极端值 | 分组边界更贴合数据分布,减少极端值干扰 | 各组股票数量可能不均衡 |
实践建议:在A股市场,通常使用等分5组或10组。若因子存在明显的极端值(如小市值因子),建议先做MAD去极值处理,再使用等分法;若因子分布本身偏态严重,可考虑分位数法。
3.3 分层与IC的关系
Rank IC(秩相关系数)与分层试验是同一枚硬币的两面:
- IC是连续视角:Rank IC衡量因子值与未来收益在整个截面上的秩相关性,是一个连续的统计量。
- 分层是离散视角:分层试验将因子值离散化为若干组,通过组间收益差异来验证IC的单调性。
两者之间存在以下对应关系:
| Rank IC表现 | 分层试验表现 | 因子质量判断 |
|---|---|---|
| IC > 0 且显著 | 各组收益单调递增(从低到高) | 正向选股因子,有效 |
| IC < 0 且显著 | 各组收益单调递减(从低到高) | 反向选股因子,有效(可取反使用) |
| IC 不显著 | 各组收益无明显规律,多空收益差接近0 | 因子失效,需重新构造 |
| IC 显著但分层不单调 | 某几组收益跳跃或反转 | 因子存在非线性关系或噪声 |
常见误区:IC显著不等于分层单调。有时IC为正,但分层试验中第3组收益反而高于第4组,说明因子在中间区域存在“塌陷”。此时需要进一步检查因子是否在某些子样本中失效,或存在行业/市值暴露。
3.4 分层试验的Python实现框架
以下是一个标准的分层试验代码框架,使用等分5组为例:
import pandas as pd
import numpy as np
def factor_grouping(factor_series, n_groups=5, method='equal'):
"""
对因子值进行分层分组
Parameters:
-----------
factor_series : pd.Series
截面因子值,index为股票代码
n_groups : int
分组数量
method : str
'equal' 等分法, 'quantile' 分位数法
Returns:
--------
pd.Series : 分组标签,从0到n_groups-1
"""
if method == 'equal':
# 等分法:按排序位置平均分组
ranks = factor_series.rank(method='first')
groups = pd.qcut(ranks, q=n_groups, labels=range(n_groups))
elif method == 'quantile':
# 分位数法:按因子值分位数分组
groups = pd.qcut(factor_series, q=n_groups, labels=range(n_groups))
else:
raise ValueError("method must be 'equal' or 'quantile'")
return groups.astype(int)
# 示例:对某截面因子进行分层
factor_values = pd.Series(np.random.randn(1000))
group_labels = factor_grouping(factor_values, n_groups=5, method='equal')
print(group_labels.value_counts().sort_index())
代码说明:等分法先对因子值排序,再对排序后的秩进行等频切分;分位数法直接对因子值进行等频切分。两种方法在样本量足够大时结果接近,但在极端值存在时,分位数法更稳健。
3.5 分层试验的评估指标
完成分层后,通常计算以下指标来量化分层效果:
- 组内平均收益:每组内所有股票在持有期内的等权平均收益。
- 多空收益差:最高组平均收益减去最低组平均收益。
- 单调性得分:各组平均收益与组编号的Spearman秩相关系数,越接近1或-1越好。
- 组间收益差t统计量:相邻两组收益差异的显著性检验。
| 评估维度 | 指标 | 理想值 | 说明 |
|---|---|---|---|
| 单调性 | 组收益与组编号的Spearman ρ | |ρ| > 0.8 | 越接近1或-1,单调性越强 |
| 区分度 | 多空收益差 | 显著不为0 | t统计量 > 2 或 p值 < 0.05 |
| 稳定性 | 多空收益差的时间序列标准差 | 越小越好 | 标准差小说明因子表现稳定 |
进阶提示:在实盘环境中,除了关注多空收益差的均值,更要关注其稳定性。一个因子即使多空收益差很大,但如果波动剧烈(夏普比率低),在实际交易中可能难以执行。