社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

擅长机器学习的CFA3级好友小豪开号啦!

kaggle竞赛宝典 • 2 年前 • 368 次点击  


↑↑↑关注后"星标"kaggle竞赛宝典
   kaggle竞赛宝典  
作者:小豪

结构化多因子风险模型的前世今生

简介

小豪是一名擅长机器学习,同时也是三级CFA,最近他也开号了,对量化机器学习感兴趣的朋友可以关注他的公众号。

本系列希望为读者建立对“结构化风险模型”的感性认知,而不牵涉太多的细节内容,我们在许多地方看到过Barra模型,但如果想要了解Barra模型,往往这些介绍都默认了读者有一定的金融知识基础。因此本系列将介绍与Barra模型相关的先验金融知识,通过串讲,相信你再阅读与“结构化多因子风险模型”或者“Barra CNE 模型”相关内容时,会得心应手。

这个系列会涵盖以下内容:

  • 马科维茨 均值-方差理论 Markowitz Mean-Variance Model
  • 有效前沿 Efficient Frontier
  • 资本配置线 Capital Allocation Line
  • 资本市场线 Capital Market Line
  • 方差-协方差矩阵 Variance Co-variance Matrix
  • 专题:结合Barra CNE5 模型案例分析
    • 概述
    • 框架
    • 推导
    • 运用

每个章节都会配一个小的Takeaway作为记忆点, 只要对这个记忆点理解就行啦,一些常用的英文表达也会贯穿于文中,方便大家记忆。


马科维茨 均值方差理论 Markowitz Mean-Variance Model

背景

1952年哈里马科维茨发表了一篇题为“证券组合选择”的论文,标志着现代证券组合理论的开端。

在单期投资中,投资者分别以预定资金比例(weights)购买并持有的一个证券组合(portfolio)到期末,马科维茨模型试图通过优化(optimization)投资组合, 来获取风险(risk)和收益(return)的最佳点。

Takeaway:比例(weights),风险(risk),收益(return),优化(optimization),我们常说的MPT(Markowitz Portfolio Theory)其实就是这一套理论。

三大假设

在马科维茨的这套理论中,蕴含了以下三种假设:

  • 单一投资期:即这些投资是单期的(如一年期),如果要做多期的,那么这套理论并不适合,我们需要借助蒙特卡洛来实现(以后也会讲到);
  • 流动性高:无交易成本,且投资者可以买到任何想投资的产品;
  • 理性人:投资者基于最优均值方差选择,我们知道方差用于衡量资产的波动率(即收益不确定性),即投资者在波动率相同的情况下,选择收益最大的产品。(关于波动率的介绍可以参考作者另外一篇文章)

其实若要深究,MPT理论背后的假设还有很多:例如资产无限可分、允许无限做空等等,这里不做过分展开,但是记住在这里的假设中,我们的投资资产不包括无风险资产(如国债),这里做一点强调。到后面的环节中我们会做说明。

理论基础

有了上述概念,我们就知道了MPT理论在做什么:给我们一堆资产(或者说金融产品), , ...

用最简单的收益均值和方差来刻画每一个资产

那么每个资产该投多少钱,或者说每个资产配置多少权重,构建一个投资组合,我们才能追求风险最小的时候,收益最大呢?这就是马科维茨均值方差理论(Markowitz Mean Variance Model。下面我们用数学符号来表达一下,会更加清晰

考虑一个投资组合,其中每种资产的权重为,期望收益分别 ,组合期望收益为 其中 代表第种资产的随机变量。

因此在假设条件下,组合期望收益为

,其中, 该组合的风险用收益的方差衡量,收益方差可以表示为
,其中矩阵 为资产之间的收益协方差矩阵,可以表示为


Takeaway:这个组合的收益均值为,所要承担的风险,即收益方差为,优化的目标就在收益均值和收益方差之间做平衡(trade off), 做不同的目标优化,如:

  • 1、给定最小要求收益率,最小化风险

    s.t.


  • 2、给定最高风险承受,最大化收益

    s.t.


  • 3、多目标问题: 给风险和收益的比例参数后,最小化它们的混合

s.t.

如果追求收益,可以把设置的更大,如果追求稳定,可以把设置的更小,让优化目标更侧重于最小化风险项。

Takeaway:至此上述三个优化目标,希望读者已经有了认知,因为后面到结构化风险因子模型、Barra模型我们会围绕这三个目标展开。

举例说明

说了这么多,我们用两个简单的例子来强化对MPT理论的认知

  • 有且仅有两个可投资产

    假设资产A,B收益率分别为, , 方差分别为, , 两个资产相关性的为, 两个资产投资权重分别, 那么很简单的可以得到这个组合的期望收益,期望方差分别为:

    当然要满足

    带入具体数字,假设资产A,B收益率分别为5%,8%,波动率分别为10%,20%,对于资产A的投资权重为 ,相关系数取值从-1到1,资产A权重从0到1,研究不同的资产相关性下,投资组合的收益与风险情况。

import numpy as np
import pandas as pd
def portfolio1(ra,rb,sa,sb,rho,wa):
    wb = 1 - wa
    rp = wa*ra + wb*rb
    sp = ((wa**2)*(sa**2) + (wb**2)*(sb**2) + 2*wa*wb*sa*sb*rho)**0.5
    return rp,sp

ra = 0.05
rb = 0.08
sa = 0.1
sb = 0.2
rho = np.arange(-10,11,2)/10
wa = np.arange(101)/100

result = pd.DataFrame(columns = ['rho','wa','rp','sp'])
for rhos in rho:
    for was in wa:
        rp,sp = portfolio1(ra,rb,sa,sb,rhos,was)
        x = pd.DataFrame([rhos,was,rp,sp]).T
        x.columns = ['rho','wa','rp','sp']
        result = result.append(x)
result = result.reset_index(drop = True)

plt.figure(figsize=(16,9))
for i in rho:
    datas = result.loc[result.rho ==i]
    plt.scatter(datas.sp,datas.rp,marker = 'o',label = 'rho = '+ str(i))
plt.legend()
plt.xlabel('sigma',fontsize = 20)
plt.ylabel('r',fontsize = 20)
plt.show()

从我们看到每一条曲线的拐点上半部分都是一个有效的可投资点,因为在相同的风险性(标准差)下,理性人会选择期望收益大的组合投资。这就是我们所谓的有效前沿Efficient Frontier。

Takeaway: 从图中观察两个资产完全正相关时,有效前沿退化成直线;当两个资产完全负相关时,有效前沿退化成双直线。随着两资产相关性的降低,同样的期望收益下,最优组合的风险越来越低,这就是我们常说的投资分散化带来的优势。

  • 有多个可投资产(待续)

    固定多个可投资产的收益期望,收益协方差矩阵,我们通过调整资产配置的权重,继续绘制收益与风险的二维散点图,我们即将深化”有效前沿 Efficient Frontier“的概念。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/135071
 
368 次点击