数学建模综合案例分析:投资组合风险分析
📋任务
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) X~N(0.1,0.01), Y ~ N ( 0.3 , 0.04 ) Y~N(0.3,0.04) Y~N(0.3,0.04)。设 x 1 x_1 x1为投资A的份额, y 1 = 1 − x 1 y_1=1-x_1 y1=1−x1为投资B的份额,因此投资组合的收益率为: Z = x 1 ∗ X + y 1 ∗ Y Z = x_1*X + y_1*Y Z=x1∗X+y1∗Y,投资组合的平均收益率为: E ( Z ) = x 1 ∗ E ( X ) + y 1 ∗ E ( Y ) E(Z) = x_1*E(X) + y_1*E(Y) E(Z)=x1∗E(X)+y1∗E(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(x1∗X+y1∗Y)=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