bookloveru2

2020年10月3日5 分

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

最終更新: 2021年11月1日

皆様、こんにちは。

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


目次

相関係数とは何か❓

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

まとめ及び数式


❶相関係数とは何か❓

相関係数とは、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年)など。
 
無料で、お試しもできますので安心です。
 
お時間ある方は下記リンクを覗いてみてはいかがでしょうか(*'ω'*)

    3230
    4