Copula 系列函数介绍及应用案例
投资组合研究不仅需要分析单项资产自身的收益和风险,还需要描述多项资产如何共同变化。投资组合风险计算、压力测试和联合情景模拟等任务,都需要对资产收益率的联合分布进行建模。仅掌握各项资产的边缘分布,无法完整确定投资组合风险。传统投资组合模型通常使用协方差或 Pearson 相关系数描述资产之间的关系,但这类指标主要反映线性相关性,难以完整刻画非线性、非对称和尾部依赖。此外,金融资产收益率常表现出尖峰、厚尾等特征,预设的多元分布模型可能无法准确描述极端行情下资产的共同变化。
Copula 是一种用于描述多变量之间依赖结构的统计工具。与传统线性相关系数相比,Copula 可以将变量的边缘分布与变量之间的相关结构分离建模,因此能够更加灵活地刻画非线性相关、尾部相关以及极端情形下的联合变化特征,在金融风险管理、资产定价、量化投资和保险精算等领域具有广泛应用。DolphinDB 提供了 Copula 系列函数,支持 Gaussian Copula、Student Copula、Clayton Copula、Frank Copula 和 Gumbel Copula 等常用模型,并覆盖模型拟合(copulaFit)、随机数生成(copulaRand)、概率密度计算(copulaPdf)和累积分布计算(copulaCdf)等主要建模环节。用户可以在 DolphinDB 中完成依赖结构估计、模型比较和联合情景生成,并将结果进一步用于投资组合风险分析和压力测试。
本教程首先介绍 Copula 的基本原理、主要类型及其适用场景;随后以选股因子构建、压力测试和投资组合风险管理为例,展示 Copula 的实际应用;最后系统介绍 DolphinDB 中各类 Copula 拟合、随机数生成、概率密度及累积分布函数计算接口及其使用方法,帮助用户根据不同的数据特征和业务需求选择合适的 Copula 模型。
1. Copula 函数的背景介绍
本章从数学原理、常用的 Copula 函数及适用场景展开介绍。
1.1 数学原理
Copula 建模的基本过程可以概括如下:
- 利用边缘分布将不同变量映射到统一的 (0, 1) 概率空间;
- 通过 Copula 描述变量之间的依赖关系;
- 完成模型拟合后,可以计算联合概率特征或生成具有特定依赖结构的随机样本,并利用边缘分布的逆函数将样本映射回各变量的原始尺度。
Sklar 定理是 Copula 函数的理论基础。假设 X1, X2, ..., XN 是 N 个随机变量,其边缘分布分别为 F1(x1), F2(x2), ..., FN(xN),联合分布为 H(x1, x2, ..., xN),则存在一个 Copula 函数 C(·),使得
,
当所有的边缘分布连续时,对应的 Copula 函数唯一。令 ,有 ,Copula 函数可表示为:
,
其中, 表示第 i 个边缘分布的广义逆分布函数。
Sklar 定理说明,多维联合分布可以分解为边缘分布和 Copula 依赖结构,边缘分布描述各随机变量自身的分布特征,Copula 则描述变量之间的依赖关系。
在金融研究中,假设有 N 项资产,Ri,t 为第 i 项资产在第 t 个时点的收益率,所有资产的收益率可以表示为随机向量
,
对每项资产的收益率分别建立边缘分布:
,
其中, 表示第 i 项资产边缘分布的参数。
估计边缘分布参数后,对每项资产收益率进行概率积分变换:
。
若边缘分布连续,则理论上有 ,其中, 表示收益率 在该资产自身分布中的分位数。该变换可将不同资产都映射至统一的概率尺度,将资产自身的分布特征与资产之间的依赖关系分开。
转换后的均匀变量组成:
,
Copula 函数为这些均匀变量的联合分布:
,
其中, 为 Copula 的依赖参数,不同的 Copula 函数有不同的参数形式。假设 Copula 的概率密度函数为 ,可根据变换后的样本采用极大似然估计来求得参数:
。
求出参数后,可从 Copula 函数中生成具有特定依赖关系的均匀随机变量
,
再根据各边缘分布的广义逆函数还原为资产收益率:
,
由此可得到同时保留各资产边缘分布特征和资产间依赖关系的联合模拟情景。
DolphinDB V3.00.6 提供了与上述过程相对应的 Copula 系列接口,copulaFit 系列函数用于估计 Copula 参数,copulaPdf 和 copulaCdf 系列函数分别用于计算概率密度和累积分布值,copulaRand 系列函数则用于生成具有指定依赖结构的随机样本。详细的接口语法和用法示例见 第 5 章 中的相关链接。
1.2 常用的 Copula 函数及适用场景
各类 Copula 在刻画资产依赖关系时各有侧重,可根据具体需求选择。DolphinDB 提供 Gaussian、Student、Clayton、Frank 和 Gumbel 五类常用 Copula 函数。下面结合各类模型的依赖特征和适用场景进行介绍。
1.2.1 椭圆 Copula
椭圆 Copula 由椭圆分布构造,适合描述较为对称的依赖关系。DolphinDB 支持 Gaussian Copula 和 Student Copula。
Gaussian Copula
Gaussian Copula 的表达式为
,
其中, 为相关系数, 为标准正态分布的逆累积分布函数, 为相关参数为 的二元标准正态分布函数。
Gaussian Copula 可以描述对称的整体依赖关系,但不具有尾部依赖性,适合依赖结构较为稳定、极端联动不明显的场景,也常作为风险建模和模型比较的基准模型。
Student Copula
Student Copula,也称 t-Copula,其表达式为
,
其中, 为相关系数, 为自由度, 为一元 Student-t 分布的逆累积分布函数, 为二元 Student-t 分布函数。
与 Gaussian Copula 相比,Student Copula 能够描述对称的上下尾依赖,即两个变量在分布两端同时出现极端值的概率较高。在相关参数不变的情况下,自由度越小,尾部依赖通常越强;当自由度趋于无穷大时,Student Copula 逐渐接近 Gaussian Copula。因此,该模型常用于极端风险分析、投资组合风险计量和联合压力情景模拟。
1.2.2 阿基米德 Copula
阿基米德 Copula 通过生成函数构造,形式相对简洁,并能描述不同方向的尾部依赖。DolphinDB 支持 Clayton、Gumbel 和 Frank Copula。
Clayton Copula
Clayton Copula 的表达式为
,
当 趋近于 0 时,Clayton Copula 趋于独立 Copula。DolphinDB 接口允许形状参数取 ,用于表示独立情形。
Clayton Copula 具有下尾依赖,适合描述两个变量在低分位区域同时出现极端值的情形。对于资产收益率,下尾通常对应共同下跌,因此该模型可用于分析多项资产在市场下行期间同时承受损失的风险。DolphinDB 当前实现支持非负形状参数,不支持负相关的 Clayton Copula。
Gumbel Copula
Gumbel Copula 的表达式为
,
当 时,Gumbel Copula 退化为独立 Copula;随着 增大,上尾依赖逐渐增强。
Gumbel Copula 具有上尾依赖,适合描述两个变量在高分位区域同时出现极端值的情形,可用于高分位联合风险、极值分析和保险精算等场景。需要注意的是,如果研究变量为损失值,上尾依赖通常表示多个风险对象同时出现较大损失。
Frank Copula
Frank Copula 的表达式为
,
当 时,Frank Copula 表示正相关;当 时,表示负相关;当 趋近于 0 时,模型趋于独立 Copula。
Frank Copula 可以描述较为对称的依赖结构,但不具有明显的上尾或下尾依赖,适合变量之间存在整体依赖,但没有明显尾部偏向的场景。与 DolphinDB 提供的 Clayton 和 Gumbel Copula 不同,Frank Copula 可以描述正相关和负相关。
1.3 小结
本章介绍了 Copula 的基本原理、常用函数以及 DolphinDB 提供的相关接口。接下来将通过选股、债券压力测试和投资组合风险管理三个应用场景,展示 Copula 接口的实际应用。
2. 选股因子构建
本案例从选股因子构建方面展示 Copula 接口的实际应用。
2.1 案例参考
本案例参考《基于 Copula 的尾部相关性研究:上尾异常相关系数因子》[1],利用 DolphinDB 的 Copula 系列接口,研究个股收益率与市场收益率在极端行情下的依赖关系,并据此构建上尾异常相关系数因子。该因子旨在识别与市场上尾相关性相对较强、下尾相关性相对较弱的股票,即股票在市场大幅上涨时具有较强的同步性,而在市场大幅下跌时受到的影响相对有限。
2.2 数据说明
实验选取当前中证全指成分股作为股票池,并以中证全指指数的日收益率作为市场收益率。原始数据区间为 2012 年 6 月 8 日至 2018 年 9 月 28 日。因子采用 60 个交易日滚动窗口计算,因此最终因子区间为 2012 年 9 月 28 日至 2018 年 9 月 28 日,回测检验区间为 2012 年 9 月 28 日至 2018 年 8 月 31 日。
2.3 实现流程
在每个滚动窗口内,首先将个股收益率和市场收益率转换为伪观测值,再使用 DolphinDB 的 copulaFit 系列接口拟合二者的依赖结构,并根据模型参数计算上尾相关系数和下尾相关系数。上尾相关系数衡量个股与市场同时处于较高分位的可能性,下尾相关系数则衡量二者同时处于较低分位的可能性。
本实验选用 Gumbel Copula 和 Clayton Copula,分别度量股票和市场的上下尾相关性,其中,Gumbel Copula 估计的上尾相关系数为:
Clayton Copula 估计的下尾相关系数为:
为 Copula 函数的参数。
为了剔除上下尾相关性中的共同信息,本案例在每个交易日进行截面回归:
是上尾相关系数剔除掉下尾相关系数后的残差。该因子值越大,说明该股票在市场普遍水平下的上尾相关系数相对于其下尾相关系数越大。
完成因子构建后,按照因子值对股票进行排序和分组,并通过秩相关信息系数(Rank Correlation Coefficient,RankIC)、信息系数信息比率(Information Coefficient Information Ratio,ICIR)、TOP 组合年化收益率、TOP 组合夏普比率以及多空组合最大回撤等指标,评价因子的收益预测能力、稳定性和风险特征。
本案例将 Copula 参数拟合与 DolphinDB 的滚动计算、截面回归、分组统计和回测分析相结合,展示了从历史行情处理、尾部依赖估计到因子检验的完整实现流程。需要说明的是,本实验主要用于展示 DolphinDB 新增的 Copula 接口在选股中的应用,使用当前成分股回溯历史数据可能产生一定的存续偏差,本实验结果不用于严格复现参考文献 [1] 中的结果。
2.4 结果解读
指标的结果如下表所示。
| 指标 | 结果 |
|---|---|
| meanRankIC | 0.0282 |
| stdRankIC | 0.1003 |
| ICIR | 0.2809 |
| annualizedICIR | 0.9731 |
| avgLongShortRet | 0.0119 |
| stdLongShortRet | 0.0557 |
| longShortAnnualReturn | 0.1332 |
| longShortInfoRatio | 0.7410 |
| longShortMaxDrawdown | -0.1345 |
| topAnnualReturn | 0.2263 |
| topSharpe | 0.8032 |
因子的月度平均 RankIC 为 0.0282,表明该因子与未来收益保持稳定的正向关系,年化 ICIR 为 0.9731,说明该因子能够在一定程度上刻画股票未来收益的截面差异。高因子组年化收益达到 22.63%,Sharpe 比率为 0.8032;多空组合年化收益为 13.32%,最大回撤为 -13.45%。整体来看,上尾异常相关系数因子具有一定的收益预测能力,且因子排序能够较好地转化为组合收益。
多空净值整体呈明显上升趋势,说明上尾异常相关系数因子具有较好的收益区分能力。虽然前期存在一定震荡,且部分阶段回撤较为明显,但长期上涨趋势清晰,与多空组合 13.32% 的年化收益和 -13.45% 的最大回撤相一致。
多空组合多数月份取得正收益,说明因子具有较好的收益预测能力。
分组收益整体随因子值提高而上升,高因子组明显优于低因子组,说明因子具有较好的选股区分能力。
累计 RankIC 整体呈明显上升趋势,表明因子具有持续的正向收益预测能力。
月度 RankIC 整体以正值为主,尤其是在样本期后半段,因子的正向预测能力较为突出,说明上尾异常相关系数因子具有较好的选股有效性。
从整体结果看,该因子具有一定的正向选股能力,因子值与下一期收益整体呈正相关,因子值较高的股票整体表现优于因子值较低的股票,说明基于 Copula 构造的上尾异常相关系数因子能够捕捉具有一定预测能力的尾部依赖信息。
2.5 局限
需要注意的是,研报指出该模型未来可能失效。因此,本案例参照研报的回测区间,对 2012—2018 年的历史数据进行回测。此外,极端市场环境可能造成剧烈冲击,导致亏损。用户在使用 DolphinDB 复现时需注意数据的选择对因子有效性的影响。
2.6 小结
在该案例中,DolphinDB 提供的 Copula 系列接口是因子构建的重要基础。通过相关接口可以直接完成 Copula 模型拟合及尾部相关结构刻画,从股票与市场的联合分布中进一步区分上尾和下尾依赖,并提取上尾异常相关特征。与仅使用普通相关系数的方法相比,这种方法能够识别市场极端上涨情况下股票与市场之间更细致的联动关系。借助 DolphinDB 的数据处理与计算能力,还可以快速完成 Copula 建模、因子计算和回测,提高整个因子研究流程的实现效率。
3. 压力测试
本案例从压力测试方面展示 Copula 接口的实际应用。
3.1 案例参考
参考《基于关键利率久期的利率风险管理实践》[2] 的压力测试思路,本案例使用 DolphinDB 构造模拟收益率变化数据,并通过其中的 Copula 接口模拟在给定关键利率冲击条件下多种利率的联合变动情景。随后,将联合情景与债券组合的关键利率久期(KRD)相结合,测算组合在压力情景下的潜在损失。
3.2 数据说明
首先通过共同因子模型生成 2,500 个收益率变化样本,覆盖国债、国开债和企业债的 1Y、3Y、5Y、10Y、20Y 五个关键期限,收益率变化单位统一为 BP。数据生成过程考虑了收益率曲线的水平、斜率和曲率变化,以及政策性金融债利差、信用利差和压力状态下的额外利差冲击。前 2,000 个样本作为训练集,用于 Copula 模型拟合;后 500 个样本作为测试集,用于检验模型的情景生成和损失预测效果。
3.3 实现流程
完成模型拟合后,本案例将 10 年期国债收益率上行 60 BP 设为核心压力条件,并利用 Copula 模型刻画其他期限的收益率和其他券种的收益率之间的联动变化,而不是简单假设整条收益率曲线等幅平行上移。最后,根据各只债券在不同关键期限上的 KRD 暴露,将收益率变动情景转换为单券和组合层面的潜在损失,从而分析压力情景下的主要风险来源。
3.4 结果解读
结果如下表所示。
| 关键期限 | 国债 | 国开债 | 企业债 |
|---|---|---|---|
| 1Y | 24.5949 | 24.5575 | 19.5440 |
| 3Y | 26.1653 | 35.1617 | 55.7005 |
| 5Y | 41.6823 | 41.4207 | 40.7975 |
| 10Y | 60.0000 | 37.7271 | 39.3782 |
| 20Y | 56.1000 | 48.3034 | 28.2141 |
KRD-Copula 模型将组合中各持仓债券的 KRD 与 Copula 模型模拟生成的收益率上行幅度逐一匹配,从而测算组合的潜在损失,具体公式如下:
其中, 为组合持仓债券的潜在损失, 为债券市值, 为债券在期限 上的 KRD, 为期限 上的收益率上行幅度。
| 债券名称 | 对应曲线 | 市值 | 潜在损失值 |
|---|---|---|---|
| 国债 A | 中债国债到期收益率曲线 | 25,000,000 | 2,215,479.5268 |
| 国开债 B | 中债国开债到期收益率曲线 | 35,000,000 | 534,801.0113 |
| 国债 C | 中债国债到期收益率曲线 | 25,000,000 | 470,951.4749 |
| 企业债 D | 中债企业债到期收益率曲线 | 15,000,000 | 136,337.5076 |
| 总计 | - | 100,000,000 | 3,357,569.5207 |
| 债券名称 | 实际损失率 | 修正久期模型预测损失率 | 修正久期模型预测相对误差 | KRD-Copula 模型预测损失率 | KRD-Copula 模型预测相对误差 |
|---|---|---|---|---|---|
| 国债 A | -2.8535 | -3.9500 | 38.4265% | -3.5335 | 23.8304% |
| 国开债 B | -0.7031 | -0.9625 | 36.8938% | -0.8644 | 22.9413% |
| 国债 C | -0.8950 | -1.1625 | 29.8883% | -1.0040 | 12.1788% |
| 企业债 D | -0.4660 | -0.5125 | 9.9785% | -0.4592 | 1.4592% |
实验结果表明,KRD-Copula 模型能够在给定关键利率冲击的条件下,生成不同期限、不同券种的差异化联动情景,并结合 KRD 将这些情景进一步转化为单券和组合层面的潜在损失。相比仅假设收益率曲线平行移动的修正久期模型,该方法能够同时反映期限结构、券种差异和利率之间的依赖关系,回测结果也显示,该方法对组合损失的预测值更接近实际值。
3.5 小结
借助 DolphinDB,用户可以在同一平台内完成数据处理、依赖关系建模、压力情景生成、损失测算和结果汇总,减少跨工具的数据传递与重复处理,使债券组合压力测试流程更加完整、高效,也更便于扩展到多期限、多券种的风险分析场景。
4. 投资组合风险管理
本案例从投资组合风险管理方面展示 Copula 接口的实际应用。
4.1 案例目标
本案例比较独立抽样模型与 Student Copula 模型在投资组合风险分析中的表现。在两种模型使用相同边缘分布的条件下,独立模型不考虑资产之间的依赖关系,Copula 模型则进一步描述资产的相关性和尾部联动。本案例据此分析依赖结构对组合 VaR、CVaR 估计及资产配置结果的影响。
4.2 数据说明
实验数据包含资产 A 和资产 B 共 2,500 期模拟收益率。该数据由共同市场因子和资产自身的随机波动生成,其中前 2,000 期作为训练集,后 500 期作为测试集。首先利用训练数据建立两项资产的经验边缘分布,并通过样本排名构造位于 (0, 1) 区间内的伪观测值。随后,利用 copulaFitStudent 接口估计 Student Copula 的相关系数矩阵和自由度,并通过 copulaRandStudent 生成具有相应依赖结构的联合随机样本。独立模型则分别生成相互独立的均匀随机变量。两类随机变量均通过相同的经验逆分布映射为资产收益率,因此模型之间的差异仅来自依赖关系的设定。
4.3 实现流程
在 95% 置信水平下,本案例先比较两种模型对等权组合 VaR 和 CVaR 的预测结果,再以最小化 CVaR 为目标,分别确定两种模型下的资产权重。最后,将所得权重应用于测试集,通过样本外 VaR 和 CVaR 评价组合的尾部风险。实验结果用于比较两种建模方法,不预设 Copula 模型一定能够降低风险。
本案例主要用于展示 DolphinDB Copula 系列接口在投资组合风险分析中的实际应用,包括伪观测值构造、Copula 参数拟合、联合情景生成以及 VaR、CVaR 计算等环节。实验采用模拟收益率数据,便于统一控制数据和模型参数,并使用相同的数据与计算口径在 DolphinDB、MATLAB 和 Python 中完成实验。实验结果主要用于说明相关接口的功能、精度及 Copula 方法在投资组合风险管理中的应用,不代表真实市场中的投资表现。
4.4 结果解读
本案例分别使用 MATLAB、Python 和 DolphinDB 完成实验,实验结果如下图和表所示。
| 指标 | MATLAB | Python | DolphinDB | |
|---|---|---|---|---|
| 拟合结果 | 0.4823 | 0.4823 | 0.4823 | |
| 22.2177 | 22.2242 | 22.2177 | ||
| 固定组合 CVaR 预测误差对比 | Independent 误差 | 0.0038 | 0.0039 | 0.0037 |
| Copula 误差 | 0.0002 | 0.0003 | 0.0004 | |
| 误差改善值 | 0.0037 | 0.0037 | 0.0033 | |
| 优化组合测试集 CVaR 对比 | Independent 测试集 CVaR | 0.0217 | 0.0217 | 0.0217 |
| Copula 测试集 CVaR | 0.0214 | 0.0214 | 0.0214 | |
| 样本外 CVaR 改善值 | 0.0003 | 0.0003 | 0.0003 | |
实验结果表明,在保持边缘分布一致的条件下,引入 Student-t Copula 后,模型能够更充分地描述资产之间的相关性和尾部联动,从而提高组合尾部风险估计的准确性。与独立抽样模型相比,Copula 模型在固定权重组合的风险预测和优化组合的样本外检验中均表现出更好的适用性,说明资产依赖结构是投资组合风险管理中不可忽略的重要因素。
4.5 小结
DolphinDB 的 Copula 系列接口覆盖模型拟合、联合随机样本生成、概率密度计算和累积分布计算等核心环节,并可与平台内的数据清洗、向量化计算和组合分析功能直接衔接。用户无需在多个工具之间频繁传递数据,即可完成从收益率处理、Copula 建模到 VaR、CVaR 计算和权重优化的完整流程。该方案更适合大规模金融数据分析和一体化研究场景。
同时,DolphinDB 的拟合结果与 MATLAB、Python 的拟合结果高度一致,验证了相关接口的计算可靠性。总体而言,本案例既展示了 Copula 方法在投资组合风险管理中的实际作用,也体现了 DolphinDB 在接口完整性、流程集成和金融数据处理效率方面的优势。
5. Copula 系列函数介绍
上文三个应用案例均使用了 Copula 系列函数接口。本章将汇总介绍 DolphinDB 提供的 Copula 函数。
| 函数名 | 参数 | 返回值 | 用法说明 |
|---|---|---|---|
| copulaFitGaussian | X | rho, logLikelihood | 拟合参数估计 |
| copulaFitStudent | method, alpha, X | rho, nu, nuCI, logLikelihood, converged | |
| copulaFitClayton | alpha, X | alpha, alphaCI, logLikelihood, converged | |
| copulaFitFrank | alpha, X | alpha, alphaCI, logLikelihood, converged | |
| copulaFitGumbel | alpha, X | alpha, alphaCI, logLikelihood, converged | |
| copulaRandGaussian | rho, count | MATRIX (count × 2) | 生成随机向量 |
| copulaRandStudent | rho, nu, count | MATRIX (count × 2) | |
| copulaRandClayton | alpha, count | MATRIX (count × 2) | |
| copulaRandFrank | alpha, count | MATRIX (count × 2) | |
| copulaRandGumbel | alpha, count | MATRIX (count × 2) | |
| copulaPdfGaussian | rho, X | VECTOR | 评价概率密度函数 |
| copulaPdfStudent | rho, nu, X | VECTOR | |
| copulaPdfClayton | alpha, X | VECTOR | |
| copulaPdfFrank | alpha, X | VECTOR | |
| copulaPdfGumbel | alpha, X | VECTOR | |
| copulaCdfGaussian | rho, X | VECTOR | 评价分布函数 |
| copulaCdfStudent | rho, nu, X | VECTOR | |
| copulaCdfClayton | alpha, X | VECTOR | |
| copulaCdfFrank | alpha, X | VECTOR | |
| copulaCdfGumbel | alpha, X | VECTOR |
当前版本仅支持二元变量,后续版本将支持 Gaussian Copula 和 Student Copula 函数在多元变量场景中的应用。多元分析是 Copula 函数的核心应用领域之一。通过将多元联合分布分解为边际分布与依赖结构,Copula 函数能够灵活刻画变量间非线性、非对称等复杂依赖关系,适用于具有异质性特征的多元系统。
参考
[1] 朱剑涛.基于 Copula 的尾部相关性研究:上尾异常相关系数因子——因子选股系列研究之四十五[R].东方证券,2018.
[2] 吴佳保.基于关键利率久期的利率风险管理实践[J].债券,2026,(4):82-88.
