Pandas⑪ (線形単回帰分析)

線形単回帰分析

機械学習ライブラリの scikit-learn を使って線形回帰モデルを作成い、単回帰分析 を行います。

線形回帰に予測を行うクラスとして linear_model.LinearRegression が用意されています。

このクラスの主なメソッドは下記の通りです。

メソッド 内容
fit(X, y [, sample_weight]) 線形回帰モデルの当てはめを実行。
get_params([deep]) 推定に用いたパラメータを取得
predict(X) 作成したモデルを利用して予測を実行
score(X, y [, sample_weight]) 決定係数R2 を出力。
set_params(**params) パラメータを設定

サンプルコード

csvファイルをデータフレームに読み込み、気温と売上数の 単回帰分析 を行うサンプルコードは次の通りです。

x に代入されるデータは、データフレームの Seriesオブジェクト から Numpyの配列(ndarray) に変換する必要があります。

定数 np.newaxis を、インデックスを指定するブラケットの中に置くことで、1次元配列やベクトルに対して 列次元が1の行列 にすることができます。(10行目)

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
# 線形単回帰分析を実行
import pandas as pd
import numpy as np
from sklearn import linear_model

df = pd.read_csv('data1.csv')
x = df['最高気温'] # 説明変数のデータをxに代入
y = df['売上数'] # 目的変数のデータをyに代入
model = linear_model.LinearRegression() # LinearRegressionオブジェクトを生成
model.fit(x[:, np.newaxis], y) # 線形回帰分析を実行

print(model.coef_, model.intercept_) # 係数aと切片bを取得

読み込むCSVファイルは以下の通りです。

30日間の最高気温とその日の売上数がまとめられています。

data1.csv (文字コードUTF-8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
最高気温,売上数
26,84
25,61
26,85
24,63
25,71
24,81
26,98
26,101
25,93
27,118
27,114
26,124
28,156
28,188
27,184
28,213
29,241
29,233
29,207
31,267
31,332
29,266
32,334
33,346
34,359
33,361
34,372
35,368
32,378
34,394

[実行結果]

回帰係数 a切片 b が表示されました。

直線の傾きを示す回帰係数は 33.7408 という正の値なので、最高気温が高くなれば売上数が増加するという 正の相関 があることが分かります。

y軸との切片 を表す定数項は -760.877 と負の値となっており、x軸の最高気温が0度のときは y の値が大きくマイナスになることを示しています。

予測

最高気温が 25度、35度 のときの 売上数を予測 してみます。

[Google Colaboratory]

1
2
3
4
x1 = [[25]]
x2 = [[33]]
print(model.predict(x1)) # 気温が25度のときの売上予測
print(model.predict(x2)) # 気温が35度のときの売上予測

[実行結果]

気温が25度のとき 82.642、気温が35度のときは 352.569売上数の予測 を行うことができました。