3. 收益率口径详解:绝对收益率、对数收益率、超额收益率、累计收益率

在量化回测中,收益率的口径选择直接影响标签的分布形态、统计推断的有效性以及模型训练的目标设定。不同口径的收益率适用于不同的分析场景,混淆使用会导致回测结果失真。本节将系统梳理四种核心收益率口径的定义、计算公式、适用场景及相互转换关系。

3.1 四种收益率口径对比

口径 定义 计算公式 取值范围 核心特性
绝对收益率 资产价格变动的百分比 \( R_{abs} = \frac{P_t - P_{t-1}}{P_{t-1}} \) [-1, +∞) 直观,可解释性强,但分布右偏
对数收益率 价格取自然对数后的差分 \( R_{log} = \ln(P_t) - \ln(P_{t-1}) \) (-∞, +∞) 时间可加性,近似正态分布
超额收益率 资产收益率减去无风险利率 \( R_{ex} = R_{asset} - R_f \) (-∞, +∞) 剥离资金成本,衡量主动收益
累计收益率 多期收益率的复合乘积 \( R_{cum} = \prod_{i=1}^{n}(1+R_i) - 1 \) [-1, +∞) 反映真实财富变化,不可直接加总
关键提示:在回测标签构建中,对数收益率是机器学习模型的首选输入口径,因其统计特性更接近正态分布,有利于梯度下降和损失函数收敛;而累计收益率常用于最终绩效评估和资金曲线绘制。

3.2 绝对收益率与对数收益率:核心差异与转换

绝对收益率(简单收益率)和对数收益率是量化分析中最基础的两种口径,二者之间存在明确的数学转换关系,但在统计特性和应用场景上有本质区别。

3.2.1 数学转换关系

# 绝对收益率 → 对数收益率
R_log = np.log(1 + R_abs)

# 对数收益率 → 绝对收益率
R_abs = np.exp(R_log) - 1

# 多期转换(假设收益率较小)
R_abs ≈ R_log + 0.5 * R_log^2  # 二阶泰勒展开近似

3.2.2 统计特性对比

特性 绝对收益率 对数收益率
分布形态 右偏,下限-1,上限无界 近似对称,接近正态分布
时间可加性 不可直接相加(需复利) 可直接相加(对数差分)
横截面可加性 可加权平均(组合收益) 不可直接加权平均
小收益率近似 与对数收益率接近 与绝对收益率接近
极端值影响 对暴跌敏感(-100%封顶) 对暴涨暴跌均敏感
模型训练建议:当收益率绝对值小于5%时,绝对收益率与对数收益率差异可忽略;当日收益率超过10%(如加密货币、杠杆ETF),必须使用对数收益率以避免标签分布严重偏态。
绝对收益率 vs 对数收益率:分布与转换关系 绝对收益率分布 右偏分布,下限 -1 上限 +∞(无界) 不可时间加总 组合收益可加权平均 对数收益率分布 近似正态分布 取值范围 (-∞, +∞) 可时间加总 不可直接加权平均 R_log = ln(1+R_abs) R_abs = exp(R_log)-1 小收益率近似规则 当 |R| < 5% 时:R_abs ≈ R_log 当 |R| > 10% 时:必须使用对数收益率 二阶近似:R_abs ≈ R_log + 0.5 × R_log²

3.3 超额收益率:剥离无风险收益

超额收益率是资产收益率与无风险利率之间的差值,用于衡量投资组合或策略相对于无风险资产的主动收益。在回测标签构建中,超额收益率是评估策略α能力的关键口径。

3.3.1 计算方式

# 日频超额收益率
R_excess_daily = R_asset_daily - R_f_daily

# 年化超额收益率(CAPM框架)
R_excess_annual = (R_asset_annual - R_f_annual)

# 使用对数收益率的超额计算(推荐)
R_excess_log = R_log_asset - R_log_f

3.3.2 无风险利率选择标准

市场 常用无风险利率代理 频率 注意事项
A股 SHIBOR 隔夜 / 国债回购利率 日频 注意节假日调整
美股 US Treasury Bill 3个月 日频 使用插值获取日频数据
加密货币 USDT 借贷利率 / 0(无风险) 日频 市场无统一标准,建议注明假设
期货 保证金利率 / 国债利率 日频 考虑保证金占用成本
常见陷阱:在回测中直接使用资产绝对收益率作为标签,而未扣除无风险利率,会导致模型在高利率环境下高估策略表现。建议在构建分类标签(涨/跌)时,使用超额收益率的符号作为类别依据。

3.4 累计收益率:真实财富变化曲线

累计收益率反映从初始时刻到当前时刻的总收益,是回测绩效评估的最终输出口径。与单期收益率不同,累计收益率通过复利计算,真实反映资金的时间价值。

3.4.1 累计收益率计算

import numpy as np

# 方法1:从绝对收益率序列计算
def cumulative_return(returns_abs):
    """returns_abs: 绝对收益率序列(小数形式)"""
    cum_ret = np.cumprod(1 + np.array(returns_abs)) - 1
    return cum_ret

# 方法2:从对数收益率序列计算
def cumulative_return_from_log(log_returns):
    """log_returns: 对数收益率序列"""
    cum_ret = np.exp(np.cumsum(log_returns)) - 1
    return cum_ret

# 示例
daily_returns = [0.01, -0.005, 0.02, 0.015, -0.01]
cum_ret = cumulative_return(daily_returns)
print(f"累计收益率: {cum_ret[-1]:.4f}")  # 输出: 0.0301

3.4.2 累计收益率 vs 平均收益率

指标 计算方式 适用场景 局限性
累计收益率 复利乘积 资金曲线、绩效归因 受初始时间点影响大
算术平均收益率 单期收益率简单平均 单期收益估计 忽略复利效应,高估收益
几何平均收益率 累计收益率的年化 年化收益比较 计算复杂,需多期数据
四种收益率口径关系与转换流程 绝对收益率 R_abs = (Pt-Pt-1)/Pt-1 对数收益率 R_log = ln(Pt)-ln(Pt-1) 超额收益率 R_ex = R_asset - R_f 累计收益率 R_cum = Π(1+Ri)-1 ln(1+R) exp(R)-1 减去无风险利率 减去 R_f cumprod(1+R) exp(cumsum(R)) 模型训练标签推荐:对数收益率 → 超额对数收益率 → 标准化后作为回归目标 绩效评估推荐:累计收益率 → 年化几何平均收益率

3.5 回测标签口径选择策略

在回测标签构建中,收益率口径的选择需要根据模型类型、预测目标和数据频率综合决策。以下给出不同场景下的推荐口径:

模型类型 预测目标 推荐收益率口径 理由
回归模型 预测收益率大小 对数收益率(标准化) 分布对称,利于MSE损失
二分类模型 预测涨/跌方向 超额收益率(符号) 剥离无风险收益,聚焦α
多分类模型 预测收益区间 绝对收益率(分箱) 分箱边界直观可解释
时序模型 预测多期收益 累计对数收益率 时间可加性,便于序列建模
强化学习 优化累计回报 累计收益率(折扣) 与奖励函数设计一致
最佳实践:在回测框架中,建议同时保留绝对收益率和对数收益率两个字段。绝对收益率用于组合权重计算和绩效展示,对数收益率用于模型训练和统计检验。超额收益率应在模型训练前动态计算,避免使用固定无风险利率导致标签偏移。

3.6 常见口径错误与修正

  1. 混淆绝对收益率与对数收益率的可加性:将多期绝对收益率直接相加计算累计收益,导致结果偏差。修正:使用 np.cumprod(1 + R_abs) - 1 或 np.exp(np.cumsum(R_log)) - 1。
  2. 超额收益率中无风险利率频率不匹配:使用年化无风险利率直接减去日频资产收益率。修正:将无风险利率按交易日换算为日频:R_f_daily = (1 + R_f_annual)^(1/252) - 1。
  3. 累计收益率回填时忽略分红和拆股:使用复权价格计算收益率时,需确认是前复权还是后复权,不同复权方式影响累计收益率的绝对值。
  4. 对数收益率在组合层面错误加权:组合的对数收益率不等于成分对数收益率的加权平均。修正:先计算组合的绝对收益率,再转换为对数收益率。
# 错误示例:组合对数收益率直接加权
# 错误:portfolio_log_return = w1 * log_r1 + w2 * log_r2
# 正确做法:
portfolio_abs_return = w1 * (np.exp(log_r1) - 1) + w2 * (np.exp(log_r2) - 1)
portfolio_log_return = np.log(1 + portfolio_abs_return)
模型训练警告:当使用绝对收益率作为回归标签时,若数据包含极端值(如单日涨幅超过20%),建议进行截尾处理(winsorize)或使用Huber损失函数,避免异常值主导梯度更新。对数收益率天然对极端值有压缩作用,是更稳健的选择。