top of page
  • 執筆者の写真bookloveru2

相関係数を視覚化して、理解してみました。pythonで応用して、米国株の相関を調べます。

更新日:2021年11月1日

皆様、こんにちは。

今日は【相関係数】について記述します。


 

目次

 

❶相関係数とは何か❓

相関係数とは、2 種類のデータの関係を示す指標を意味します。
相関係数は-1~1までの値を取り、数字が大きければ大きいほど、つまり1に近づくほど、2種類のデータの関係性が高くなります



早速、簡単な例で見ていきます!(^^)!


まず、2種類のデータを用意します。

ここでは、XとYというデータです。


Xには(1,2,3,4,5)という5個の数字データが入っています。

Yにも(1,2,3,4,5)という5個の数字データが入っています。

つまり、XとYはまったく同じ値です。


この場合、計算しなくても、直感的に、同じデータだから、2種類のデータの関係性はまったく同じなんじゃないの?と、感じます。

その直感はまったく正しいです\(◎o◎)/!

つまり、相関係数は1になります

では、早速見ていきましょう。

上図の通り、見事相関係数は1になりました。


線形モデルでも、Xが1増加するごとに、Yが1増加するという、直線が見られます。

R^2決定係数も1で、すべてのことを(2種類のデータの関係性)、【Y=X】で説明できています。(^_-)-☆


 

では、次に、XとYの値が完全に逆の場合を見ていきましょう。

つまり、相関係数は-1になる2種類のデータです。




Xには(1,2,3,4,5)という5個の数字データが入っています。

Yには(5,4,3,2,1)という5個の数字データが入っています。

つまり、XとYはまったく逆の値です。


上図の通り、見事相関係数は-1になりました。




線形モデルでも、Xが1増加するごとに、Yが-1増加するという、直線が見られます。

R^2決定係数も1で、すべてのことを(2種類のデータの関係性)、【Y=-X+6】で説明できています。(^_-)-☆



 

最後に、XとYが全然違う数値の場合です。

Xには(1,2,3,4,5)という5個の数字データが入っています。

Yには(100,200,200,400,0)という5個の数字データが入っています。

つまり、XとYは全然違う数字です。


上図の通り、見事相関係数は0になりました。


線形モデルでも、Xが増加しても、Yが増加するとは限らない。という、直線が見られます。

R^2決定係数も0で、すべてのことが【Y=180】という直線が出てきており、2種類のデータの関係性を、何一つ説明することが出来ていません。( 一一)



 

❷pythonでマイクロソフトとテスラの相関を調べてみる

では、次に、少し応用して、

pythonで株価の相関係数を見ていきましょう。


ここでは2018-12-1から現在までの

マイクロソフト社とテスラ社の株価を比較します。


まずはじめに、米国ヤフーファイナンスから、ローデータを取得します。

いつもどおり、グーグルコラボで実行しています。

※@paramにアップルとAMDが表記されていますが、

 マイクロソフト「MSFT]とテスラ「TSLA」に変更してください。



では、コードです。

はい。ドン!


import datetime
import fix_yahoo_finance as yf
import matplotlib.pyplot as plt
import requests
import argparse
import numpy as np
import seaborn as sns
import pandas as pd
 
#スタート日を決める
number = "2018-12-1" #@param {type:"string"}
 
#銘柄コード
start = number
end = datetime.date.today()
code1 = "MSFT" #@param ["AAPL"] {allow-input: true}
code2 = "TSLA" #@param ["AMD"] {allow-input: true}

codelist = [code1,code2]
#終値取得(data2に終値を取り込み))
data2 = yf.download(codelist, start=start, end=end)
data2

実行結果です。

これは、2018-12-1~2020-10-02までの期間の、

マイクロソフトとテスラの株価の、

OPEN「始値」、High「高値」、Low「安値」、Close「終値」、Adj Close「調整後終値」、Volume「出来高」です。



次に、線形回帰モデルと株価推移グラフ、基本統計量と相関係数グラフを表示します。


from sklearn import linear_model #線形モデル関係
import statsmodels.api as smf #統計量計算
data3 = data2["Adj Close"]
X = data3["MSFT"]
Y = data3["TSLA"]
print(data3)
#単回帰分析モデルの作成
model = smf.OLS(X ,Y)
result = model.fit()
print(result.summary())
#描画
fig = plt.figure()
ax = fig.add_subplot(111, xlabel=data3.index.name, ylabel='price')
ax.plot(X)
ax.plot(Y, marker='^', linestyle='-.')
sns.pairplot(data3)


#データを対前日比の株価変動率に変換しstdpctに格納
stdpct = data3.pct_change().dropna() * 100


#株価変動率の基本統計量を取得 
stastics = round(stdpct.describe(),2)

#統計量をグラフ化
fig, ax = plt.subplots(figsize=(8,6))
ax.axis('off')
ax.axis('tight')
ax.table(cellText=stastics.values,
         colLabels=stastics.columns,
         rowLabels=stastics.index,
         loc='center',
         bbox=[0,0,1,1])
#バイオリンプロット
plt.figure(figsize=(156))
ax = sns.violinplot(data=stdpct, fliersize = 6, width = 1.6, inner=None, color="0.7", linewidth=0.3)
ax = sns.swarmplot(data=stdpct) 
plt.grid(True)

#ここで、重ね過ぎたfigファイルがダブって、グラフが二重になるのを防ぐため、clf()で削除。
plt.clf()

 

#ヒートマップにて相関関係を表示
stdpct1 = stdpct.dropna()
sns.set(style="white")
#三角形の上半分をマスクする
mask = np.zeros_like(stdpct1.corr(), dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
 
sns.heatmap(stdpct1.corr(),annot = True,mask = mask)

ここで、美しいバイオリンプロットが犠牲になっていますが、

気にせず、結果だけ説明します(´・ω・`)


まず、先程取得したローデータから、株価のAdj Close「調整後終値」

のみを抽出し、data3に格納しています。


そして、それを単回帰分析した結果が、上図です。



その後、株価の期間推移をグラフ化したものが下図です。

青い株価がマイクロソフト。

オレンジ色の株価がテスラ社です。

テスラ社の2020年の爆上げがよく表れています。


その👇は散布図です。


そして、最後に基本統計量と相関係数です。



はい。やっと相関係数が出てきました。(´・ω・`)

基本統計量の説明ですが、値は、変動率に変換されています。

count=株価の個数(つまり461日分の株価データ)

mean=平均

std=標準偏差

min=最小値

25%=四分位の1/4点

50%=四分位の2/4点

75%=四分位の3/4点

max=最大値

です。


最後にようやく本記事のメインである相関係数です。

結果は、0.48でした。


つまり、マイクロソフトとテスラの株価は、この期間中、

それなりに強い(若干の)相関があったことが分かりました( ..)φメモメモ


 

❸まとめ及び数式

相関係数とは、相関係数は-1~1までの値を取り、数字が大きければ大きいほど、つまり1に近づくほど、2種類のデータの関係性が高くなるもの。指標として利用できます(*'▽')


詳しい計算手法は、他社サイト様から引用致します👇


下記図は、sci-pursuit.com様からの引用です。

sci-pursuit.com様 は、科学(Science)を追求(pursuit)したいと考える人々に向けて、化学に関する内容を、小・中・高の各レベルに合わせて解説することを目標とされています。

https://sci-pursuit.com/math/statistics/correlation-coefficient.html

て、ことでした(´∀`*)ウフフ



では、ばいちゃ。



pythonでプログラミングがしたい!! 
pythonを学びたい!という方には、
オンラインプログラミング教室『Aidemy アイデミー』がお勧めです。ご自身でプログラム環境を用意する必要は無く、サイトへアクセスするだけです。  
創業者は東京大学工学部卒の石川聡彦さん。
著書に『人工知能プログラミングのための数学がわかる本』(KADOKAWA/2018年)など。  
無料で、お試しもできますので安心です。
お時間ある方は下記リンクを覗いてみてはいかがでしょうか(*'ω'*)




閲覧数:322回0件のコメント
bottom of page