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