1. 课程导论:组合风险归因与 AB 测试结合的意义
1.1 为什么需要将组合风险归因与 AB 测试结合?
在量化投资与金融科技领域,组合风险归因与 AB 测试长期处于“各自为战”的状态。风险归因关注的是“组合为什么亏/赚了多少钱”,而 AB 测试关注的是“某个策略改动是否带来了显著收益”。两者结合后,可以回答一个更关键的问题:“策略改动带来的收益,是否真正降低了风险暴露?还是仅仅增加了未被归因的隐性风险?”
核心痛点: 传统 AB 测试只关注收益指标的显著性,忽略了风险维度的结构性变化。一个策略可能提升了 5% 的收益,却增加了 20% 的尾部风险或行业集中度风险。组合风险归因提供了“风险显微镜”,AB 测试提供了“因果推断引擎”,两者结合才能做出稳健的决策。
1.2 课程目标与学习路径
本课程旨在培养学员同时掌握组合风险分解与人群切片 AB 测试两大核心能力,并能在实际业务中无缝衔接。课程目标分为三个层级:
| 层级 | 目标 | 核心产出 |
|---|---|---|
| 基础层 | 理解风险归因的数学原理与 AB 测试的统计框架 | 能独立计算 Brinson 归因、Barra 因子归因;能设计 A/B 实验 |
| 应用层 | 掌握人群切片(Segmentation)与多维度风险分解 | 能对用户/资产进行切片,并在每个切片内做风险归因与 AB 分析 |
| 实战层 | 构建端到端的“归因+实验”决策系统 | 完成一个完整的组合优化与策略评估项目 |
学习路径遵循“理论→工具→实战”的递进结构:
- 第 1-5 章: 风险归因基础(Brinson、Barra、边际贡献)
- 第 6-10 章: AB 测试核心(假设检验、MDE、多重比较)
- 第 11-15 章: 人群切片方法论(RFM、行为聚类、分层抽样)
- 第 16-20 章: 归因与 AB 测试的融合(切片内归因、风险调整后的实验评估)
- 第 21-25 章: 实战案例与代码实现(Python 全流程)
- 第 26-30 章: 高级专题与系统架构设计
学习建议: 每章结束后,建议用 Jupyter Notebook 复现代码示例。本课程所有代码均基于 Python 3.10+,依赖库包括 pandas、numpy、scipy、statsmodels、riskfolio-lib。
1.3 前置知识要求
本课程面向具备一定量化基础与统计背景的学员。具体前置要求如下:
| 领域 | 具体要求 | 推荐复习资料 |
|---|---|---|
| 概率统计 | 理解正态分布、t 分布、假设检验(p-value、置信区间)、方差分析 | 《概率论与数理统计》(茆诗松)第 5-8 章 |
| 投资组合理论 | 熟悉均值-方差模型、夏普比率、信息比率、因子模型(CAPM、Fama-French) | 《现代投资组合理论与投资分析》(Elton 等)第 1-6 章 |
| Python 编程 | 熟练使用 pandas 进行数据清洗、groupby 操作;了解 numpy 矩阵运算 | Pandas 官方文档 “10 Minutes to pandas” |
| 线性代数 | 矩阵乘法、逆矩阵、特征值分解(用于因子协方差矩阵) | 《线性代数及其应用》(Strang)第 1-4 章 |
注意: 如果对“因子暴露”、“协方差矩阵”、“p-value 多重比较校正”等概念完全陌生,建议先花 1-2 周补齐基础。本课程不会从零讲解微积分或基础语法。
1.4 课程知识体系总览
下图展示了本课程的核心知识模块及其关系。风险归因与 AB 测试通过“人群切片”这一桥梁实现融合,最终输出“风险调整后的策略评估报告”。
1.5 一个贯穿课程的案例场景
为了帮助学员建立直观理解,本课程将围绕一个虚拟量化投顾平台的实战场景展开:
- 背景: 某平台管理着 100 个不同风险偏好的投资组合,每个组合包含股票、债券、商品三类资产。
- 问题: 平台想测试“将 10% 的债券仓位切换为低波动股票”这一策略改动,是否真的提升了风险调整后收益?
- 传统做法: 直接做 AB 测试,对比改动组与对照组的总收益,发现 p=0.03,认为策略有效。
- 本课程做法: 先对组合做风险归因(发现原组合的行业集中度风险过高),再按“行业集中度高低”对组合切片,在每个切片内分别做 AB 测试。最终发现:策略只在“高集中度”切片中有效,在“低集中度”切片中反而增加了尾部风险。
关键启示: 没有风险归因的 AB 测试是“盲人摸象”,没有 AB 测试的风险归因是“纸上谈兵”。两者结合,才能做出真正可落地的投资决策。
1.6 课程配套代码与数据说明
所有实战章节均提供可运行的 Python 代码。以下是一个简化的风险归因与 AB 测试结合的数据结构示例:
# 示例:切片内风险归因与 AB 测试的数据结构
import pandas as pd
# 模拟数据:每个切片(segment)包含组合的收益、风险贡献、实验分组
data = {
'segment': ['高集中度', '高集中度', '低集中度', '低集中度'],
'portfolio_id': [1, 2, 3, 4],
'return': [0.05, 0.07, 0.03, 0.04],
'risk_contribution': [0.12, 0.15, 0.06, 0.07],
'treatment': [1, 0, 1, 0] # 1=实验组, 0=对照组
}
df = pd.DataFrame(data)
print(df)
本课程所有数据均为模拟生成或公开数据集(如 FF 因子数据),不涉及任何商业机密。学员可在 GitHub 仓库中获取完整代码与数据生成脚本。