- Python机器学习之金融风险管理
- (土)阿卜杜拉·卡拉桑
- 826字
- 2025-05-19 16:26:06
1.2 收益
所有金融投资都是为了获得利润,即收益(Return),又称回报。更严谨地说,收益是指在一段时期内投资所获得的利润。
风险和收益之间存在这样一种权衡:假设的风险越高,实现的收益就越大。由于在这方面很难得出最佳解决方案,所以这种权衡是金融学中最具争议的问题之一。然而,Markowitz(1952)对这个问题提出了一个直观的、令人兴奋的解决方案。他定义风险的方式精致、清晰,从而改变了金融研究的格局,因为在此之前对风险的定义是模糊不清的。Markowitz用标准差来量化风险。这个直观的定义使研究人员能够在金融领域中运用数学和统计学。该标准差定义如下(Hull,2012):

其中,R和分别指的是年收益率和预期收益(又称期望收益)。本书将在多处使用符号
来表示预期收益。涉及投资组合方差时,引入协方差,公式变为:

其中,w表示权重,表示方差,Cov表示协方差。
取得方差平方根后,得到投资组合标准差为:

换句话说,投资组合预期收益是个体收益的加权平均值,表示为:

接下来,将通过可视化来探索风险和收益的关系。我们将使用Python构建一个假定的投资组合以计算必要的统计值:
In [1]: import statsmodels.api as sm import numpy as np import plotly.graph_objs as go import matplotlib.pyplot as plt import plotly import warnings warnings.filterwarnings('ignore') In [2]: n_assets = 5❶ n_simulation = 500 ❷ In [3]: returns = np.random.randn(n_assets, n_simulation) ❸ In [4]: rand = np.random.rand(n_assets) ❹ weights = rand/sum(rand) ❺ def port_return(returns): rets = np.mean(returns, axis=1) cov = np.cov(rets.T, aweights=weights, ddof=1) portfolio_returns = np.dot(weights, rets.T) portfolio_std_dev = np.sqrt(np.dot(weights, np.dot(cov, weights))) return portfolio_returns, portfolio_std_dev ❻ In [5]: portfolio_returns, portfolio_std_dev = port_return(returns) ❼ In [6]: print(portfolio_returns) print(portfolio_std_dev) ❽ 0.012968706503879782 0.023769932556585847 In [7]: portfolio = np.array([port_return(np.random.randn(n_assets, i)) for i in range(1, 101)]) ❾ In [8]: best_fit = sm.OLS(portfolio[:, 1], sm.add_constant(portfolio[:, 0]))\ .fit().fittedvalues ❿ In [9]: fig = go.Figure() fig.add_trace(go.Scatter(name='Risk-Return Relationship', x=portfolio[:, 0], y=portfolio[:, 1], mode='markers')) fig.add_trace(go.Scatter(name='Best Fit Line', x=portfolio[:, 0], y=best_fit, mode='lines')) fig.update_layout(xaxis_title = 'Return', yaxis_title = 'Standard Deviation', width=900, height=470) fig.show() ⓫
❶ 指定资产数量。
❷ 指定模拟次数。
❸ 随机生成正态分布样本用作收益。
❹ 生成随机数并用于计算权重。
❺ 计算权重。
❻ 用于计算投资组合预期收益和标准差的函数。
❼ 调用函数的结果。
❽ 输出投资组合预期收益和标准差的结果。
❾ 重新运行函数100次。
❿ 通过线性回归绘制最佳拟合线。
⓫ 绘制交互式图表。
上述Python代码所生成的图表如图1-1所示,证实了风险和收益是相关的,但这种相关性的具体大小取决于个股和金融市场状况[2]。
[2] 译者注:代码使用了随机数,所以读者运行代码的结果可能与图1-1不一致,但是原理是一样的。

图1-1 风险和收益的关系