Datawhale&Git-Model:概率论

数学建模综合案例分析:投资组合风险分析

📋任务

GitModel公司是一家专业的投资银行,志在帮助客户更好地管理资产。客户手头上有一笔100万的资金,希望将这笔钱投入股票市场进行投资理财,投资人看中了两个股票 A A A B B B,股票分析师通过对股票 A A A B B B的历史数据分析发现:股票 A A A的平均收益近似服从 N ( 0.1 , 0.01 ) N(0.1,0.01) N(0.1,0.01),股票B的平均收益近似服从 N ( 0.3 , 0.04 ) N(0.3,0.04) N(0.3,0.04)。现在客户希望通过分析得出投资股票 A A A B B B的最佳组合(在预期收益确定情况下最小风险时,需要投资 A A A B B B的份额)。

分析:

首先,我们先来分析投资组合的收益应该如何计算:设 A A A B B B的投资收益率为随机变量 X X X Y Y Y,因此 X ~ N ( 0.1 , 0.01 ) X~N(0.1,0.01) XN(0.1,0.01) Y ~ N ( 0.3 , 0.04 ) Y~N(0.3,0.04) YN(0.3,0.04)。设 x 1 x_1 x1为投资A的份额, y 1 = 1 − x 1 y_1=1-x_1 y1=1x1为投资B的份额,因此投资组合的收益率为: Z = x 1 ∗ X + y 1 ∗ Y Z = x_1*X + y_1*Y Z=x1X+y1Y,投资组合的平均收益率为: E ( Z ) = x 1 ∗ E ( X ) + y 1 ∗ E ( Y ) E(Z) = x_1*E(X) + y_1*E(Y) E(Z)=x1E(X)+y1E(Y)

接下来,我们来分析投资组合的风险应该如何计算:何为风险,最简单来说就是收益的不确定性,如果收益是确定且固定的,就无所谓的风险可言。根据对风险的直观描述,我们可以定义风险为收益率的方差,因此:股票A的风险为 σ x 2 = 0.01 \sigma_x^2 = 0.01 σx2=0.01,股票B的风险为 σ y 2 = 0.04 \sigma_y^2 = 0.04 σy2=0.04,而投资组合的风险为
V a r ( Z ) = V a r ( x 1 ∗ X + y 1 ∗ Y ) = x 1 2 Var ⁡ ( X ) + y 1 2 Var ⁡ ( Y ) + 2 x 1 y 1 Cov ⁡ ( X , Y ) \begin{aligned} Var(Z) &= Var(x_1*X + y_1*Y)\\ &=x_{1}^{2} \operatorname{Var}(X)+y_{1}^{2} \operatorname{Var}(Y)+2 x_{1}y_{1} \operatorname{Cov}(X, Y) \end{aligned} Var(Z)=Var(x1X+y1Y)=x12Var(X)+y12Var(Y)+2x1y1Cov(X,Y)
因此,最佳的投资组合应该是风险最小时的投资组合,即:
m i n V a r ( Z ) = m i n x 1 2 Var ⁡ ( X ) + y 1 2 Var ⁡ ( Y ) + 2 x 1 y 1 Cov ⁡ ( X , Y ) = d ( V a r ( Z ) ) d ( x 1 ) = 0 \begin{aligned} &min \quad Var(Z) \\ &= min \quad x_{1}^{2} \operatorname{Var}(X)+y_{1}^{2} \operatorname{Var}(Y)+2 x_{1}y_{1} \operatorname{Cov}(X, Y)\\ &=\frac{d(Var(Z))}{d(x_1)} = 0 \end{aligned} minVar(Z)=minx12Var(X)+y12Var(Y)+2x1y1Cov(X,Y)=d(x1)d(Var(Z))=0

from scipy.stats import norm # 正态分布
from sympy import *
							 							  
# 寻找最佳投资组合,假设corr_xy = 0.4

x = symbols('x')
y = symbols('y')

y = 1-x
corr_xy = 0.4

## 请根据var_Z的定义写出相应的公式代码
Var_X = norm(loc=0.1,scale=0.01).var()
Var_Y = norm(loc=0.3,scale=0.04).var()
var_Z = (x**2)*Var_X + (y**2)*Var_Y + 2*x*y*corr_xy

## 请根据相应的优化分析写出代码
expr_diff = Derivative((var_Z), x).doit()  
A = solve(expr_diff, x)

print(A) 

代码输出:

0.133900000000000

参考资料

[1] GitModel,数学建模的基石 https://github.com/Git-Model/__init_Modeling__
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.小林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值