深圳融克迪特科技有限公司 Logo,金融科技,量化交易,软件开发

深圳融克迪特科技有限公司

RONG CREDIT TECHNOLOGY CO., LTD.

工具实战

【PyPortfolioOpt 系列 第2讲】收益与协方差估计三法对比

本讲承接第1讲已完成的数据清洗、频率对齐与基础依赖配置,系统展开PyPortfolioOpt中三大核心收益与协方差估计方法的实操落地。重点解析历史收益率计算的滚动窗口选择陷阱、指数加权衰减因子λ的经济含义与敏感性边界、Ledoit-Wolf收缩目标矩阵的构造逻辑与shrinkage参数调优策略,并通过A股+港股+美债三资产组合开展数值稳定性压力测试,覆盖缺失值分布不均、极端波动期协方差病态、低秩样本等典型边界条件。

2026-04-22 智铨研究 阅读时长 18 分钟

目录

PyPortfolioOpt · 工具实战

  1. 第 1 讲【PyPortfolioOpt 系列 第1讲】均值方差与稳健协方差入门
  2. 第 2 讲【PyPortfolioOpt 系列 第2讲】收益与协方差估计三法对比

一、为什么在 PyPortfolioOpt 里,收益率和协方差的估计方式比“求个平均数”更重要

很多人第一次接触 PyPortfolioOpt,会觉得这个库最关键的地方在优化器本身,比如最大夏普、最小方差、风险平价这些目标函数怎么配。真到实盘或像样一点的回测里,很快就会发现,组合优化出问题的源头,往往不是优化器,而是输入。尤其是两个输入最容易把结果带偏:预期收益率怎么估,协方差矩阵怎么估。

原因很简单。组合优化本质上是在回答两个问题:哪些资产值得多配,哪些资产组合在一起能把波动和回撤压下来。第一个问题依赖收益估计,第二个问题依赖协方差估计。如果你对收益的判断过于粗糙,模型就会把“最近涨得多”误当成“未来还会持续好”;如果你对风险结构的刻画过于乐观,模型就会把本来彼此联动很强的资产当成分散化来源。最后看上去是优化器给了一个奇怪的权重解,本质上却是输入已经偏掉了。

所以这一讲不从目标函数讲起,而是先把地基讲清楚。你要知道,历史平均收益、指数加权收益、样本协方差、指数加权协方差和收缩协方差分别在什么场景下更稳,为什么有时一个简单方法反而比复杂方法更可靠,以及哪些参数变化会让结果从“可解释”直接滑到“看起来很聪明,实际很脆弱”。只要这层立住,后面不管是用均值方差、黑利特曼还是风险预算方法,至少输入端不会一开始就失真。

二、先把边界讲清楚:PyPortfolioOpt 不替你判断资产逻辑,它只帮你把输入组织成可优化的形式

PyPortfolioOpt 很方便,但它不是研究判断的替代品。它能帮你把收益率序列、协方差矩阵和约束条件送进优化框架里,却不会替你判断某一类资产当前是否处在宏观拐点、某个行业收益率是否只是短期波动抬高、某个债券基金的净值路径里是否夹杂流动性冲击。换句话说,这个库负责的是“如何算”,不是“为什么这么算”。

这件事一定要先说清。因为很多人第一次跑出一个漂亮组合之后,会不自觉地把结果理解成“模型已经替我把最优资产配比找出来了”。但模型只是在你给它的世界观里找最优解。如果你的收益估计只是用过去一段时间的平均涨幅,如果你的协方差矩阵刚好来自一个异常平静的窗口期,那么再规范的优化过程,也只是在一个偏狭的假设里认真计算。

因此,收益与协方差估计这一步真正的任务,不是把函数跑通,而是把输入假设讲清楚。你得知道自己现在究竟是在相信“长期均值会回归”,还是相信“近期信息更重要”;是在相信“样本协方差足够描述联动关系”,还是认为“小样本下必须主动做稳健修正”。只要这些假设没有意识地选定,后面的权重结果就算再好看,也很难真正用得安心。

三、收益率估计的三种常见路径:历史平均、指数加权和保守收敛思路

在 PyPortfolioOpt 里,最直观的收益估计方式就是历史平均收益。写法简单,理解也直接:拿一段历史收益率,对每个资产求平均,再年化。这个方法的优点是透明,缺点也同样明显。它默认过去这段时间的平均表现,对未来仍然有参考意义。若样本窗口选得太短,容易把短期行情当成长期趋势;窗口选得太长,又可能把已经变化的市场状态一并平均掉。

指数加权收益率是在这个基础上做了一步现实修正。它承认“越近的数据通常越有信息量”,于是给近期收益更高权重,给较远样本更低权重。这种方法在风格切换较快、宏观环境变化较明显时,通常比简单历史平均更灵敏。问题是,灵敏不等于稳定。权重衰减设得太快,模型会被短期噪声牵着走;设得太慢,又会退化得接近普通历史平均。很多人第一次用指数加权收益时,会因为它更像“顺着市场走”而感觉更合理,但如果没有配套观察窗口和回测复盘,它一样可能把短期反弹误读成新趋势。

还有一种更实务化的思路,并不是继续在收益估计公式上做复杂化,而是主动保守。比如对历史平均收益率做缩尾、截断,或者直接把收益预测的权重弱化,让协方差结构在优化中承担更大作用。因为在多资产配置里,收益预测通常比风险估计更难做稳。你可以在研究上继续尝试更复杂的预期收益模型,但在组合落地时,必须接受一个现实:收益估计往往比你想象得更脆弱,尤其在资产数量多、样本窗口有限时更是如此。

四、协方差矩阵为什么总是看起来“能算出来”,却不一定真的能用

协方差矩阵在纸面上很好理解,就是看资产之间怎么一起波动。可一到实际配置里,它常常比收益估计更棘手。原因之一,是协方差矩阵不是简单的一列数,而是一整个结构。只要其中某些联动关系估错,优化器就会迅速放大这种误差,把权重推到你事后很难接受的位置。

最常见的问题,是样本不够长、资产又不少。比如你要配十几类 ETF,窗口只有六十个交易日,看起来每个资产都有六十个收益点,似乎已经够用了,但协方差矩阵要估的是成对关系。资产一多,联动关系就会迅速变复杂。此时样本协方差虽然能算出来,但容易带着很重的小样本噪声。优化器读到这些噪声时,会误以为某些资产之间的相关性真的很低,于是给出非常激进的分散化结果。等你实际跟踪,就会发现这些“低相关”只是在样本窗口里暂时没撞上而已。

另一个问题,是市场状态会变。某些阶段股债相关性很低,看起来分散效果很好;某些阶段风险偏好共振,股债、商品、海外权益可能同时受宏观变量影响,相关性突然抬高。如果你仍把旧窗口里的协方差矩阵直接喂进模型,那么模型优化出来的并不是当前市场里的最优组合,而是上一阶段市场里的最优答案。

所以,协方差矩阵真正重要的,不只是能不能算,而是它是否足够稳,是否反映了当前状态,又是否不会因为一点点样本噪声就把权重结果带偏。也正因为如此,PyPortfolioOpt 里围绕协方差估计提供的不同方法,不是“锦上添花的功能选项”,而是你是否能把优化结果真正拿来用的关键分水岭。

五、历史协方差、指数加权协方差和收缩协方差,各自适合什么场景

样本协方差最大的优点是直白。你拿历史收益率矩阵,按定义计算协方差,再做年化,逻辑透明、复盘也容易解释。若资产数量不多、样本窗口足够长、市场状态比较平稳,它并不是不能用。问题在于,一旦市场切换加快,或者你开始做跨资产配置、跨市场配置,这种方法的脆弱性就会迅速暴露出来。

指数加权协方差与指数加权收益率的思路类似,核心都是“近期更重要”。它的好处是能更快反映最新波动结构。比如某段时间美债波动显著放大、权益内部行业相关性迅速提高,指数加权协方差通常会比样本协方差更早反映这一变化。缺点同样存在。如果衰减太快,某几天的异常波动可能被赋予过高权重,导致整个风险结构显得过于紧张;如果衰减太慢,又起不到及时反应的作用。

收缩协方差是更适合实务落地的一类方法。它承认样本协方差在小样本、多资产场景下容易带噪,于是主动把估计结果往一个更稳定、更保守的结构拉一点。最常见的就是 Ledoit-Wolf 这一类收缩方法。它并不是把协方差“算得更复杂”,而是试图在样本信息和结构稳定性之间找到平衡。对配置研究来说,这类方法最大的价值不是让回测指标更漂亮,而是让权重解不至于因为一点点输入波动就完全变形。很多时候,组合管理最怕的不是收益略低一点,而是权重极不稳定、每次重平衡都像在推翻上一次判断。收缩协方差正是在帮你压这种不必要的抖动。

六、参数不是越多越专业,真正重要的是知道参数改变后,你到底在相信什么

很多初学者在用 PyPortfolioOpt 时,会很自然地把注意力放到参数上,比如指数加权的 span 应该设多少,收缩目标该怎么选,年化频率用 252 还是别的。参数当然重要,但更重要的不是数值本身,而是这些数值背后代表的信念。

以指数加权为例,span 设得短,意味着你更相信近期市场状态;设得长,意味着你更愿意保留较长时间的历史记忆。没有哪一个数字能在所有环境里都最优,关键是它是否与你当前配置场景匹配。如果你做的是波动变化很快的资产组合,过长的 span 往往会让风险感知滞后;如果你做的是更偏中长期的战略配置,过短的 span 又容易让组合被短期噪声反复推着调仓。

收缩协方差也是类似道理。你选择收缩,意味着你承认样本估计不够稳,愿意牺牲一点“贴近样本”的程度,换取更稳的结构。这个决定不是技术细节,而是配置哲学。因为你本质上是在说:我不完全相信历史窗口里看到的一切,我更关心权重结果在未来一段时间内不要失真得太快。只要从这个角度去理解参数,很多原本看起来抽象的设定会变得清楚得多。

七、实际使用时最容易犯的错,不是公式错,而是把估计结果当成确定答案

收益与协方差估计最容易让人掉进去的坑,是一旦数值算出来,就默认它们已经是“可用事实”。但这些结果本质上只是基于一组样本、一种窗口、一套权重规则下得到的近似表达,不是未来世界的确定描述。

最常见的错误有几类。第一类,是窗口期过度主观。你刚好在一段顺风行情里取样,预期收益就会明显偏高;你刚好在波动收敛阶段取样,协方差结构就会显得过于温和。第二类,是把同一种方法硬套到所有资产上。权益、债券、商品、海外资产对样本长度和波动记忆的适配度并不一样。第三类,是忽略结果稳定性,只看某一次回测年化或夏普。若权重对输入变化极其敏感,那么这个最优解通常不值得信任。

实务里更稳的做法,是把收益与协方差估计视作一组需要反复交叉检查的输入,而不是一次性拍板的最终答案。你可以比较不同窗口、不同方法下的权重差异,看哪些资产的配置比例始终较稳,哪些资产一换参数就完全翻脸。真正值得高信任的,不是某个单点结果,而是那些在不同合理设定下仍保持方向一致的配置判断。

八、在 PyPortfolioOpt 里更推荐什么顺序去做这件事

如果你现在要真正开始用 PyPortfolioOpt 做组合,而不是只把文档跑通,一个更稳的起步顺序通常是这样的。先用历史平均收益和收缩协方差做第一版基线,因为它们既不算过于迟钝,也不至于对样本噪声太敏感。然后再引入指数加权收益或指数加权协方差,比较权重变化是否明显偏向近期行情。如果差异很大,就不要急着选“更聪明”的那个版本,而是先回头看:近期市场是否真的发生了结构变化,还是只是短期波动放大。

接下来,再做稳定性检查。不是只看回测收益,而是看参数稍微变动时,组合是否仍保留大致相同的配置骨架。若一个组合在 span=60span=90 之间几乎完全换脸,说明它对输入非常敏感,这时通常不适合直接上线。相反,若某些资产不管是历史法还是指数加权法,都持续保持核心权重,那它们往往更值得你提高信任等级。

这个顺序的核心,不是先把方法堆满,而是先立住一个稳的基线,再让更灵敏的方法来补充,而不是一开始就拿最灵活的估计方式去支配整个组合。对绝大多数配置研究来说,这比一上来追求“最先进”的输入方案更有效。

九、总结:组合优化真正先要优化的,不是目标函数,而是你对输入稳定性的判断

PyPortfolioOpt 当然是一个做组合优化的库,但真正决定结果质量的,往往不是优化目标本身,而是你如何估计收益率与协方差。历史平均法简单透明,但容易忽略状态变化;指数加权法更灵敏,但也更容易被短期噪声带偏;样本协方差直观,但在小样本、多资产场景下常常不够稳;收缩协方差更保守,却往往更接近实务需要。

这一讲最该留下来的,不是哪种方法“绝对更好”,而是一条判断顺序。先问自己当前更担心什么,是错过近期变化,还是被短期噪声误导;再问自己资产数量和样本长度是否足以支撑样本法;最后看不同估计方式下,权重结果是否足够稳定。只要把这个顺序建立起来,PyPortfolioOpt 才会真正从一个“能跑出结果的工具”,变成一个“能帮你持续做出可解释配置决策的框架”。

十、系列衔接

本讲是《PyPortfolioOpt资产配置完整学习计划》的第 2/9 讲,当前主题是《收益与协方差估计:历史法、指数加权与稳健估计比较》。上一讲已经把输入数据准备和基本框架立住,这一讲进一步把最关键的两个输入讲清楚。下一讲将进入真正的组合求解层,讨论最大夏普与最小方差组合在约束条件变化下为什么会给出完全不同的权重风格,以及怎样判断这些差异是合理表达,还是输入失稳带来的假象。

十一、风险揭示与免责声明

风险揭示与免责声明

本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。

本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。

市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。

读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。