みなさん、こんにちは。
本記事では、私の米国株ポートフォリオのリスク状況を評価してみます。
具体的には今までの株価の値動き、分散、株同士の相関から、このポートフォリオでこの先どこまでやっていくかを考えていきます。
スポンサーリンク
ポートフォリオのリスクを分析する
いつものようにpandas-datareaderで株価データを取得します。
今回は、2016/1/1〜2017/9/22までのデータを、複数銘柄同時に取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import pandas as pd import datetime as dt import numpy as np import pandas_datareader.data as web # 期間設定 start = dt.date(2016,1,1) end = dt.date(2017, 9, 23) # ダウンロードリスト tickerList = ['AMZN','AMBA','BA','CSCO','NVDA','PFE','PM','VYM'] df= pd.DataFrame(index=[]) for tick in tickerList: stock = web.DataReader(tick,'yahoo',start,end) df[tick] = stock['Adj Close'] |
次に、取得したデータを可視化していきます。
そのままプロットしても良いのですが、AMZNだけ単元あたりの株価が高いので、株価のスケールを標準化しておきます。
1 2 3 4 5 |
# 株価を標準化 ndf = df.apply(lambda x: (x-x.mean())/x.std(), axis=0).fillna(0) ndf.plot(figsize=(12,6)) plt.show() |
こんな感じになりました。
ここまでは、綺麗だね程度ですね。
保有株のボラティリティの度合いが感覚的に把握できます。
ここで、ボラティリティを定量的に評価するために、株価を前日との変化率に変換してみましょう。
pandasにpct_changeという関数が備わっているため、一発変換です。
1 2 3 4 5 6 7 |
# 変化率に変換 dfpct = df.pct_change() # プロット dfpct.plot(label = True ,figsize = (12,6),marker = 'o') plt.legend(loc = "upper left") plt.show() |
パッと見でNVDAとAMBAの分散(リスク)が高そうです。
pct_change後の値で標準偏差を求めます。
ボラティリティが大きい銘柄は標準偏差が大きくなります。
1 2 3 |
# 標準偏差をプロット dfpct.std().plot(marker = 'o') plt.show() |
結果を見ると、AMBAとNVDAが0.03近いということは、約7割が±3%以内の変化に入り、95%が±6%以内ということですね。
逆にいうと5%の確率で±6%以上の変化率となるという解釈ができます。
つまり、AMBA,NVDAはかなり高いボラティリティ、AMZN,BAは中程度のボラティリティ、CSCO,PFE,PM,は低いボラティリティ、VYMはかなり低いボラティリティということがわかります。
Seabornで株の相関関係を可視化する
次に個別株の相関関係を見ていきましょう。
理論上、ボラティリティが高くても、ポートフォリオ全体で相関、逆相関がバランスよく組み込めていればリスクは低減できているはずです。
使うパッケージはseabornです。綺麗でオシャレなグラフが作れます。
1 2 3 4 5 6 7 8 9 |
import seaborn as sns # NAを落とす dfpct = dfpct.dropna() # 株同士の散布図を描きます。 sns.set(style="ticks") sns.pairplot(dfpct) plt.show() |
ということで、小ぎれいな散布図を作って見ました。
ぱっと見ですが、あんまり相関関係なさそうな銘柄が多いです。
VMYはETFなので組み入れ銘柄とは正の相関があるように見えます。
このままだとわかりにくいため、次は相関係数をダイレクトに可視化します。
一般に0.8以上が強い相関、0.6程度で中程度の相関があると言われています。
1 2 3 4 5 6 7 8 9 10 11 |
import seaborn as sns dfpct = dfpct.dropna() sns.set(style="white") # 三角形の上半分をマスクする mask = np.zeros_like(dfpct.corr(), dtype=np.bool) mask[np.triu_indices_from(mask)] = True sns.heatmap(dfpct.corr(),annot = True,mask = mask) plt.show() |
VYMとBA,CSCOの正の相関が高いことがわかりました。
全体的に見ると、PFEは全体的に相関が低くディフェンシブと言えそうです。
他の銘柄は全体的に弱い正の相関があるため、好調の時はいいですが、下げる時は全体的に下がるリスクがあります。
まとめ
本記事ではpythonを使い、ポートフォリオのボラティリティと相関関係について調べました。
最近、ポートフォリオに組み込み集中投資中のNVDA,AMBAが高ボラティリティなため、攻撃力が高いが防御力が弱いポートフォリオだということがわかりました。
相関関係では、全体的に正の相関があり、PFEのみが低相関傾向にあることがわかります。
今後はPFEを買い増すか、現在のポートフォリオと逆相関になりそうな銘柄を探していくことを考えます。