- Python機器學習之金融風險管理
- (土)阿卜杜拉·卡拉桑
- 826字
- 2025-05-19 16:26:05
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 風險和收益的關系