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组,说明因子在中间区域存在“塌陷”。此时需要进一步检查因子是否在某些子样本中失效,或存在行业/市值暴露。
分层试验与Rank IC关系流程图 分层试验与Rank IC关系流程图 全市场股票 按因子值排序 分层处理 等分法 / 分位数法 划分为 N 组 各组平均收益 多空收益差 单调性检验 Rank IC 计算 因子秩 vs 收益秩 两者互补验证 IC连续 vs 分层离散

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
稳定性 多空收益差的时间序列标准差 越小越好 标准差小说明因子表现稳定
进阶提示:在实盘环境中,除了关注多空收益差的均值,更要关注其稳定性。一个因子即使多空收益差很大,但如果波动剧烈(夏普比率低),在实际交易中可能难以执行。