単線形回帰をやってみた。

2021年10月20日

KDDIの株価でNTTの株価を推定する単線形回帰をやってみた。

ライブラリのインポート

In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
import seaborn as sns
sns.set()

データのインポート

今回は、2020年10月1日から2021年9月30日のモバイル関係銘柄の株価(NTT、KDDI、ソフトバンク、楽天)のインポート

In [2]:
data = pd.read_csv('mibile_company_stock_price_2020-10-01_2021-09-30.csv')
In [3]:
data.head()
Out[3]:
date NTT KDDI softbank rakuten
0 2019-10-01 2590.5 2839 1471 1093
1 2019-10-02 2633.5 2924 1500 1041
2 2019-10-03 2624.5 2918 1494 1019
3 2019-10-04 2617.5 2942 1496 1023
4 2019-10-07 2642.0 2939 1496 1036
In [4]:
data.describe()
Out[4]:
NTT KDDI softbank rakuten
count 485.000000 485.000000 485.000000 485.000000
mean 2679.663918 3240.731959 1413.777320 1068.929897
std 223.262123 243.764303 85.015676 159.731409
min 2150.000000 2655.000000 1178.000000 672.000000
25% 2511.000000 3096.000000 1372.000000 949.000000
50% 2720.000000 3244.000000 1431.000000 1030.000000
75% 2835.000000 3391.000000 1471.000000 1183.000000
max 3285.000000 3897.000000 1615.000000 1545.000000

回帰の作成

従属変数と独立変数の定義

今回の場合は、KDDIの株価からNTTの株価を算出するので、NTTが従属変数、KDDIが独立変数

In [5]:
y = data['NTT']
x1 = data['KDDI']

データの確認

In [6]:
plt.scatter(x1,y)
plt.xlabel('NTT',fontsize=20)
plt.ylabel('KDDI',fontsize=20)
plt.show()

この結果を見る限り、NTTとKDDIの株価はかなり相関が高そう。

回帰の実行

In [7]:
x = sm.add_constant(x1)
results = sm.OLS(y,x).fit()
results.summary()
Out[7]:
OLS Regression Results
Dep. Variable: NTT R-squared: 0.727
Model: OLS Adj. R-squared: 0.727
Method: Least Squares F-statistic: 1288.
Date: Sat, 16 Oct 2021 Prob (F-statistic): 2.16e-138
Time: 14:39:36 Log-Likelihood: -2995.6
No. Observations: 485 AIC: 5995.
Df Residuals: 483 BIC: 6004.
Df Model: 1
Covariance Type: nonrobust
coef std err t P>|t| [0.025 0.975]
const 148.3029 70.722 2.097 0.037 9.342 287.264
KDDI 0.7811 0.022 35.894 0.000 0.738 0.824
Omnibus: 46.188 Durbin-Watson: 0.082
Prob(Omnibus): 0.000 Jarque-Bera (JB): 14.505
Skew: -0.035 Prob(JB): 0.000708
Kurtosis: 2.156 Cond. No. 4.34e+04

1番目の表(回帰の結果)の見方

Dep. Variable:予測する値、今回の場合はNTT
Model: 回帰モデル、OLS(Ordinary Least Square)は最小二乗回帰
Method: 回帰モデルの最適化方法、Least Squaresは残差が最も小さくなるように最適化
R-squared: 決定係数、この結果を見て従属変数と独立変数のマッチ度を確認する。1だと回帰のばらつきについて完全に説明している。0だと何も説明していない。ということで1に近ければ近いほど良い。0.727は悪くない値らしい

2番目の表(変数の結果)の見方

constの行が切片、それ以降の行は独立変数の結果を示している。

coef: constが切片、それ以降の行(今回はKDDIだけ)は傾きを表している
std err: 標準誤差
t: t値
P>|t|: P値、これが重要。一般的には、0.05以上だとその独立変数は意味がないと判断してよいらしいので除外した方が良い。今回の場合は、全て0.05以下なので問題なし。

Follow me!