量化金融基础:常见评估指标
无风险收益不存在?
最近又开始研究股票和因子数据了,复现了一下东方证券研报上的模型。这里把一些金融的知识总结一下,顺便把实现代码结合一下。一部分使用ChatGPT进行生成,然后人工审核修改。
PCC(Pearson Correlation Coefficient)
Pearson 相关系数(Pearson Correlation Coefficient),是用于衡量两个变量之间线性相关程度的统计量,常记作 $ r $。它的取值范围为 $[-1, 1]$,具体描述如下:
- 1:表示两个变量完全正线性相关,即一个变量增大,另一个变量按比例增大。
- -1:表示两个变量完全负线性相关,即一个变量增大,另一个变量按比例减小。
- 0:表示两个变量没有线性相关性,但可能存在非线性关系。
Pearson 相关系数的计算公式为: \(r = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n} (x_i - \bar{x})^2} \cdot \sqrt{\sum_{i=1}^{n} (y_i - \bar{y})^2}}\)
公式中:
- $x_i, y_i$:第 $i $个样本的两个变量的值。
- $\bar{x}, \bar{y}$:变量 $x$ 和 $ y$ 的均值。
- $n$:样本数量。
该公式也可以简化为协方差与标准差的形式:
\[r = \frac{\text{Cov}(x, y)}{\sigma_x \cdot \sigma_y}\]- $\text{Cov}(x, y)$:变量 $x$ 和 $ y$ 的协方差。
- $\sigma_x, \sigma_y$:变量 $ x$ 和 $ y$ 的标准差。
适用场景
Pearson 相关系数主要用于评估两个变量的线性关系,在以下场景中应用广泛:
- 经济学:分析股票价格与市场指数之间的相关性。
- 生物学:评估两个基因表达水平之间的关系。
- 社会科学:研究教育水平与收入之间的关系。
- 机器学习:用于特征选择时,衡量特征与目标变量之间的相关性。
使用方法与注意事项
1. 数据条件
- Pearson 相关系数适用于连续变量。
- 数据应符合正态分布,如果数据显著偏离正态分布,建议使用其他非参数相关性方法(如 Spearman 或 Kendall)。
2. 线性关系
- Pearson 相关系数只能衡量线性相关性,对于非线性关系的变量,其值可能接近 0,但不代表变量完全无关。
3. 缺失值处理
- 数据中存在缺失值时,应进行合理的处理(如删除、插值等)后再计算相关系数。
例子
手工计算示例 假设有以下两组数据: $x = [1, 2, 3, 4, 5] $ $ y = [2, 4, 6, 8, 10]$
手动计算 $r $:
- 均值:$\bar{x} = 3$,$\bar{y} = 6$。
- 协方差:$\text{Cov}(x, y) = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{n} = 10$。
- 标准差:$\sigma_x = 1.58$,$\sigma_y = 3.16$。
- Pearson 相关系数: \(r = \frac{\text{Cov}(x, y)}{\sigma_x \cdot \sigma_y} = \frac{10}{1.58 \cdot 3.16} \approx 1\)
结论:变量 $ x$ 和$ y $完全正相关。
Python 示例
import numpy as np
# 数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])
# 计算 Pearson 相关系数
r = np.corrcoef(x, y)[0, 1]
print("Pearson 相关系数:", r)
输出
Pearson 相关系数: 1.0
优缺点
优点
- 简单直观,结果范围固定在 $[-1, 1]$。
- 高效计算,适合大规模数据。
- 能反映变量间的线性关系强度和方向。
缺点
- 仅能衡量线性关系,非线性相关性无法反映。
- 对异常值敏感,异常值可能显著影响结果。
- 需要假设变量为正态分布。
扩展
- Spearman 相关系数:用于评估变量的单调相关性(非线性也可适用)。
- Kendall 相关系数:用于评估变量排序一致性的相关性。
零标准差情况
在数据中出现标准差为0的情况下,输出会是无穷大。
CCC(Concordance Correlation Coefficient)
一致性相关系数,是一种统计指标,用于量化两个变量之间的一致性程度。它评估了数据对的偏离程度,不仅考虑线性相关性,还考虑了两组数据之间的平均值和方差是否一致。
CCC 的取值范围为 $[-1, 1]$:
- 1:表示完全一致,两组数据的数值完全相同。
- 0:表示两组数据之间没有一致性。
- -1:表示完全负一致,即两组数据呈反向且不一致。
公式
CCC 的计算公式为:
\[\rho_c = \frac{2 \cdot \rho \cdot \sigma_x \cdot \sigma_y}{\sigma_x^2 + \sigma_y^2 + (\mu_x - \mu_y)^2}\]参数解释:
- $\rho_c$:一致性相关系数。
- $\rho$:Pearson 相关系数,衡量两组数据的线性相关性。
- $\sigma_x^2, \sigma_y^2$:两组数据的方差。
- $\mu_x, \mu_y$:两组数据的均值。
- $\sigma_x, \sigma_y$:两组数据的标准差。
分解公式:
可以拆解为两个部分:
- 线性相关性部分:$\rho$。
- 偏离一致性的修正因子: \(\text{Correction Factor} = \frac{2 \cdot \sigma_x \cdot \sigma_y}{\sigma_x^2 + \sigma_y^2 + (\mu_x - \mu_y)^2}\)
与 Pearson 相关系数的区别
- Pearson 相关系数 ($\rho$):只衡量两组数据的线性相关性,但不考虑数值是否在同一范围。
- 一致性相关系数 ($\rho_c$):不仅衡量线性相关性,还考虑数据的一致性(包括均值和方差的偏离)。
示例:
假设两组数据:
- $x = [1, 2, 3, 4, 5]$
-
$y = [2, 3, 4, 5, 6]$
- Pearson 相关系数 ($\rho$) = 1,因为 $y$ 是 $x$ 的线性变换。
- CCC = 小于 1,因为 $x$ 和 $y$ 的均值和方差不同。
适用场景
- 模型评估:
- 在机器学习中,用于比较预测值与实际值的一致性。
- 医学研究:
- 评估生物测量数据的一致性,例如不同设备或实验条件下的结果比较。
- 图像分析:
- 衡量不同评估方法对同一图像的评分一致性。
实现方法
1. 手动计算
根据公式逐步计算 CCC:
import numpy as np
def concordance_correlation_coefficient(y_true, y_pred):
"""
Calculate Concordance Correlation Coefficient (CCC).
"""
mean_true = np.mean(y_true)
mean_pred = np.mean(y_pred)
var_true = np.var(y_true)
var_pred = np.var(y_pred)
covariance = np.cov(y_true, y_pred)[0, 1]
numerator = 2 * covariance
denominator = var_true + var_pred + (mean_true - mean_pred) ** 2
ccc = numerator / denominator
return ccc
# 示例数据
y_true = np.array([1, 2, 3, 4, 5])
y_pred = np.array([1.1, 2.0, 2.9, 4.0, 5.1])
print("CCC:", concordance_correlation_coefficient(y_true, y_pred))
2. 使用 Python 库
目前,没有专门计算 CCC 的标准库,但一些统计包可能包含类似的功能。
如果 CCC 需要频繁使用,建议手动封装函数,如上示例。
优点与局限性
优点
- 综合衡量:
- 同时评估线性相关性和一致性,比 Pearson 相关系数更全面。
- 可解释性强:
- 结果直接反映两个变量的一致性程度。
局限性
- 计算复杂:
- 相较于简单的 Pearson 相关系数,计算公式更复杂。
- 对异常值敏感:
- 和许多相关性指标一样,异常值会显著影响结果。
扩展与对比
- Spearman 相关系数:评估单调关系(适合非线性关系)。
- Kendall 相关系数:适合小样本和排序一致性分析。
- Mean Squared Error (MSE):直接衡量预测值与实际值的偏差大小,但无法反映相关性。
IC(Information Coefficient)
IC(Information Coefficient,信息系数)是金融领域中用于衡量预测能力的指标,主要用于评估投资者或模型的预测准确性。它表示预测值与实际结果之间的相关性,通常取值范围在 -1 到 1 之间:
- IC = 1 表示完美正相关,即预测完全准确。
- IC = -1 表示完美负相关,即预测完全错误,但仍然有预测能力(反向)。
- IC = 0 表示无相关性,即预测与实际情况无关。
计算公式:
IC(信息系数)用于衡量因子值(预测收益)与实际收益之间的线性相关性,通常使用 Pearson 相关系数 计算。
IC 计算公式如下:
\[IC = \frac{\sum_{i=1}^{N} (X_i - \bar{X}) (Y_i - \bar{Y})}{\sqrt{\sum_{i=1}^{N} (X_i - \bar{X})^2} \cdot \sqrt{\sum_{i=1}^{N} (Y_i - \bar{Y})^2}}\]其中:
- $X_i$:第 iii 个资产的因子值(预测收益)
- $Y_i$ :第 iii 个资产的实际收益
- $\bar{X}$ :因子值的均值
- $\bar{Y}$ :实际收益的均值
- $N$ :样本数量(资产数量)
该公式计算的是因子值和实际收益之间的 Pearson 相关系数,即衡量它们之间的线性相关性。
IC 的应用:
- 量化因子筛选:IC 用于衡量某个因子的有效性,IC 越高,该因子对未来收益的预测能力越强。
- 因子绩效评估:长期 IC 均值较高且稳定(如 > 0.03),表明因子具有较好的预测能力。
- IC 信息比率(IR):IR = IC 均值 / IC 标准差,用于衡量因子稳定性,IR 越高,表明因子更稳定。
经验法则:
- IC > 0.05 具有一定预测能力
- IC > 0.1 预测能力较强
- IC 在 0.02 - 0.05 之间 可以通过优化组合或杠杆放大
- IC < 0 可能因子方向错误,需要反向使用或修正
IC 是量化投资中因子选取和策略评估的重要工具,尤其在因子选股和资产定价中应用广泛。
RankIC(Rank Information Coefficient)
RankIC是对IC(Information Coefficient)的改进,IC是因子值和股票下期收益率的Pearson相关系数。RankIC先计算排序,然后对两列排名计算Pearson相关系数。Rank IC 是衡量因子值与实际收益之间的秩(Rank)相关性的指标,通常使用 Spearman 秩相关系数(Spearman Rank Correlation Coefficient) 计算。它反映了因子对收益的单调性关系,而不是线性关系。
Rank IC 计算公式
Rank IC 计算的是因子值(Factor)与未来收益(Return)之间的秩相关系数,公式如下: \(\text{Rank IC} = 1 - \frac{6 \sum_{i=1}^{N} d_i^2}{N(N^2 - 1)}\) 其中:
- $d_i = R(X_i) - R(Y_i)$是因子值和收益排名之间的差距
- $R(X_i)$和 $R(Y_i)$是因子值和实际收益的秩次(从小到大排序后的排名)
- $N$ 是样本数(资产数量)
Rank IC 计算步骤
-
对因子值 XXX 进行排名,得到 $R(X)$。
-
对收益值 YYY 进行排名,得到 $R(Y)$。
-
计算因子值排名与收益排名的 Spearman 相关系数:
\[Rank\ IC = \frac{\sum (R(X_i) - \bar{R}_X)(R(Y_i) - \bar{R}_Y)}{\sqrt{\sum (R(X_i) - \bar{R}_X)^2} \cdot \sqrt{\sum (R(Y_i) - \bar{R}_Y)^2}}\]
Rank IC 的应用
-
因子有效性测试:
- 若 Rank IC 长期大于 0(如 > 0.02),因子具有预测能力。
- 若 Rank IC 接近 0,说明因子对未来收益没有预测作用。
- 若 Rank IC 为负值,因子可能需要反向使用。
经验法则
- Rank IC > 0.05:因子有较强预测能力
- 0.02 < Rank IC < 0.05:因子有效,但可能需要优化
- Rank IC < 0.02:因子预测能力较弱或无效
- Rank IC < 0:因子方向可能错误,应考虑反向使用
ICIR(IC Information Ratio)
ICIR(IC 信息比率)用于衡量因子的稳定性,即因子预测能力在不同时间窗口的稳定程度。它定义为 IC(信息系数)的均值与其标准差之比。
ICIR 计算公式
\[ICIR = \frac{\mathbb{E}[IC]}{\sigma_{IC}}\]其中:
- $\mathbb{E}[IC]$:IC 的均值(通常是多期 IC 的均值)
- $\sigma_{IC}$:IC 的标准差(衡量 IC 的波动性)
解释:
- ICIR 越高,说明因子的预测能力越稳定,即 IC 的波动较小。
- ICIR 低,说明因子 IC 变化较大,可能在某些时间有效,某些时间无效。
计算步骤
-
计算多期 IC 值(通常按日、周、月计算)
-
计算 IC 的均值 \(\mathbb{E}[IC] = \frac{1}{T} \sum_{t=1}^{T} IC_t\)
-
计算 IC 的标准差 \(\sigma_{IC} = \sqrt{\frac{1}{T-1} \sum_{t=1}^{T} (IC_t - \mathbb{E}[IC])^2}\)
-
计算 ICIR \(ICIR = \frac{\mathbb{E}[IC]}{\sigma_{IC}}\)
ICIR 的解读
| ICIR 取值 | 因子稳定性解读 |
|---|---|
| ICIR > 1 | 因子预测能力稳定,长期有效 |
| 0.5 < ICIR < 1 | 因子有预测能力,但稳定性一般 |
| ICIR < 0.5 | 因子预测能力不稳定,可能受市场环境影响 |
ICIR 的应用
- 因子筛选:剔除 ICIR 过低的因子,保留预测能力稳定的因子。
- 因子优化:如果 ICIR 低但 IC 均值高,可能需要降低因子波动性(如对因子进行去噪处理)。
- 量化投资策略评估:用于判断策略是否具有长期稳定的预测能力。
结论
- ICIR 衡量的是因子的稳定性,ICIR 高说明因子长期有效,ICIR 低说明因子波动较大。
- ICIR > 1 是优秀因子,ICIR < 0.5 说明因子预测能力不稳定。
- ICIR 是因子选取、优化和评估的重要指标,通常用于量化投资研究中。
Standardization
标准化是数据预处理的一种方法,主要用于消除数据的尺度影响,使不同特征的数据具有相同的均值和方差,从而提高模型的稳定性和收敛速度。标准化后的数据通常服从均值为 0,标准差为 1 的分布(即标准正态分布)。
标准化公式
标准化一般使用 Z-score(Z 分数)标准化 方法:
\[X' = \frac{X - \mu}{\sigma}\]其中:
- $X’$:标准化后的数据
- $X$:原始数据
- $\mu$:数据的均值
- $\sigma$:数据的标准差
作用:
- 去除量纲影响,适用于不同尺度的数据,如股票收益率和市值。
- 适用于线性模型,如回归、PCA(主成分分析)。
- 加速优化收敛,减少梯度下降的震荡,提高模型稳定性。
标准化 vs 归一化
| 方法 | 标准化(Standardization) | 归一化(Normalization) |
|---|---|---|
| 公式 | $X’ = \frac{X - \mu}{\sigma}$ | $X’ = \frac{X - X_{\min}}{X_{\max} - X_{\min}}$ |
| 结果 | 数据均值为 0,标准差为 1 | 数据缩放到 [0,1][0,1] 或 [−1,1][-1,1] |
| 适用场景 | 适用于正态分布数据,如回归分析 | 适用于有固定范围的数据,如神经网络 |
| 影响 | 保留数据的相对分布 | 可能会改变数据的分布 |
应用场景
- 金融量化:因子标准化(如股票市值、波动率、换手率)。
- 机器学习:用于逻辑回归、SVM、K-means 聚类等模型。
- 深度学习:在神经网络中通常使用 Batch Normalization 进行归一化。
结论
- 标准化的核心目标是让数据均值为 0,标准差为 1,消除尺度影响,提高模型性能。
- 适用于正态分布的数据,特别是在回归和机器学习模型中。
- 与归一化不同,标准化不会限制数据范围,而是让数据具有标准正态分布的特性。
夏普比率(Sharpe Ratio)
夏普比率(Sharpe Ratio)是衡量投资组合或资产风险调整后收益的关键指标,由诺贝尔经济学奖得主威廉·夏普(William F. Sharpe)于1966年提出。它帮助投资者判断:在承担一定风险的情况下,获得的超额回报是否合理。
核心公式
\[\text{夏普比率} = \frac{R_p - R_f}{\sigma_p}\]- $R_p$:投资组合的预期收益率(或历史平均收益率)
- $R_f$:无风险利率(通常用国债收益率等近似)
- $\sigma_p$:投资组合收益率的波动率(标准差,代表风险)
如何理解?
-
分子($R_p - R_f$):
表示投资组合超过无风险收益的超额回报。例如,若某基金年化收益10%,无风险利率3%,则超额回报为7%。 -
分母($\sigma_p$):
代表投资组合的波动性(风险)。波动越大,标准差越高,风险也越高。
结论:
夏普比率越高,表明单位风险下获得的超额收益越高,投资性价比越好。
实际应用
- 横向比较:对比不同基金、股票或策略的表现。
- 例:基金A夏普比率1.5,基金B夏普比率0.8 → 在相同风险下,A的收益更高。
- 优化投资组合:通过调整资产配置,最大化夏普比率,实现风险与收益的平衡。
案例
假设两个投资组合:
- 组合A:年化收益12%,波动率10%,无风险利率3%
→ 夏普比率 = (12% - 3%) / 10% = 0.9 - 组合B:年化收益15%,波动率20%,无风险利率3%
→ 夏普比率 = (15% - 3%) / 20% = 0.6
虽然B收益更高,但A的夏普比率更高,说明其风险调整后的收益更优。
局限性
- 假设正态分布:夏普比率假设收益呈正态分布,但现实中市场可能出现极端波动(如“黑天鹅”事件)。
- 仅反映波动风险:波动率衡量的是双向风险(涨跌),但投资者可能更关注下跌风险(此时可用索提诺比率)。
- 依赖历史数据:过去的高夏普比率不代表未来表现。
总结
夏普比率是投资者评估“风险与收益是否匹配”的重要工具,尤其适合以下场景:
- 对比不同资产或策略的风险调整后收益;
- 优化投资组合配置;
- 长期投资或风险厌恶型投资者的决策参考。
最大回撤(Maximum Drawdown,MDD)
最大回撤(Maximum Drawdown,MDD)是衡量投资组合或资产在特定时间段内从最高点到最低点的最大亏损幅度的风险指标。它反映了投资者可能面临的最坏情况下的损失,是评估投资风险的重要工具。
核心定义
- 最大回撤 = 某一时间段内,资产净值从峰值到谷底的最大跌幅(用百分比表示)。
- 本质:衡量投资的“抗跌能力”和潜在风险。
如何计算?
- 步骤:
- 确定时间段内的峰值(历史最高点);
- 找到峰值后出现的最低点(谷底);
-
计算跌幅:
\[\text{最大回撤} = \frac{\text{峰值} - \text{谷底}}{\text{峰值}} \times 100\%\]
- 示例:
- 某基金净值从100元涨到150元(峰值),随后跌至80元(谷底),最终回升到120元。
- 最大回撤 = (150 - 80) / 150 × 100% = 46.67%(即使最终回升,期间的最大亏损仍为46.67%)。
为什么重要?
- 反映极端风险:
夏普比率衡量波动风险,而最大回撤直接体现“最坏情况”下的损失,帮助投资者评估心理承受能力。- 例如:最大回撤50%,意味着投资可能腰斩,多数人难以承受。
- 评估策略稳健性:
- 高收益策略若伴随高回撤(如量化杠杆策略),可能在极端市场中被清盘,实际不可持续。
- 辅助决策:
- 对保守型投资者,优先选择低最大回撤的资产;
- 对基金经理,控制回撤是风控能力的体现。
实际案例
假设两个基金:
- 基金A:5年内净值从100元升至200元,期间最大回撤为20%(跌至160元后反弹)。
- 基金B:5年内净值同样从100元升至200元,但期间最大回撤为60%(跌至80元后反弹)。
结论:
虽然两者最终收益相同,但基金B的最大回撤远高于A,说明其风险更高,可能不适合风险厌恶型投资者。
与夏普比率的区别
| 指标 | 夏普比率 | 最大回撤 |
|---|---|---|
| 关注点 | 单位风险下的超额收益 | 最坏情况下的亏损幅度 |
| 计算方式 | (收益 - 无风险利率)/ 波动率 | (峰值 - 谷底)/ 峰值 |
| 适用场景 | 平衡收益与波动风险 | 评估极端风险承受能力 |
局限性
- 依赖历史数据:过去的最大回撤无法预测未来,尤其在市场结构变化时。
- 忽略恢复时间:未体现从回撤中恢复的时长(如回撤50%需涨100%才能回本)。
- 单一维度:需结合夏普比率、索提诺比率等指标全面分析风险。
如何应用?
- 产品选择:
- 对比同类产品时,优先选择收益相近但最大回撤更小的。
- 风险控制:
- 设定自身可承受的最大回撤阈值(如30%),避免投资超出承受能力的产品。
- 组合优化:
- 通过分散投资(如股债混合)降低整体组合的最大回撤。
总结
最大回撤是衡量投资极端下行风险的核心指标,尤其适合:
- 风险厌恶型投资者;
- 评估策略的抗风险能力;
- 市场剧烈波动时期的资产检视。
但需结合其他指标(如夏普比率、夏农比率)和自身风险偏好综合决策。
参考链接
https://lightning.ai/docs/torchmetrics/stable/regression/concordance_corr_coef.html
https://www.cnblogs.com/duduheihei/articles/14088547.html
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.spearmanr.html
https://www.cnblogs.com/Asp1rant/p/16379666.html
https://zhuanlan.zhihu.com/p/494010639
https://pytorch.org/docs/stable/generated/torch.optim.lr_scheduler.ReduceLROnPlateau.html#reducelronplateau
https://pytorch.org/tutorials/beginner/saving_loading_models.html#saving-loading-a-general-checkpoint-for-inference-and-or-resuming-training
https://www.joinquant.com/view/community/detail/43992fbdf84e054aa317aa0fa6f253bb
https://github.com/microsoft/qlib/blob/main/examples/benchmarks/README.md
| 微信(WeChat Pay) | 支付宝(AliPay) |
|
|
| 比特币(Bitcoin) | 以太坊(Ethereum) |
|
|
| 以太坊(Base) | 索拉纳(Solana) |
|
|