【Scikit-learn】重回帰分析を行う方法

Pythonライブラリ「scikit-learn」で重単回帰分析を行う方法についてサンプルコード付きで解説します。

重回帰分析(Multiple Linear Regression)とは

重回帰分析は、複数の特徴量(説明変数)を用いて、1つのターゲット変数(目的変数)を予測するモデルを作成する統計的手法です。

単回帰分析では1つの特徴量 $x$ のみを使用しましたが、重回帰分析では、例えばVTuberの「チャンネル登録者数」だけでなく、「動画の平均再生時間」など、予測したい値に影響を与えると考えられる複数の要因をモデルに組み込みます。
重回帰分析の予測値を計算する式は、以下のように表されます。

$$\hat{y} = a_1 x_1 + a_2 x_2 + \dots + a_n x_n + b = aX + b$$
実測値の関係:$ y = aX + b + \varepsilon $

変数 説明
$\hat{y}$ ターゲット変数(目的変数)の推定値 視聴者数(予測値))
$y$ ターゲット変数(目的変数)の実測値 視聴者数(実測値)
$x_1, x_2, \dots, x_n$ 特徴量(説明変数) チャンネル登録者数、動画の平均再生時間など
$a_1, a_2, \dots, a_n$ 傾き(重み、回帰係数) それぞれの特徴量が1単位増えたときの $y$ の変化量
$b$ 切片 すべての $x$ が0のときの $y$ の理論的な値
単回帰分析で高い予測精度を出すには、例えば登録者数が2倍になったら視聴者数も2倍になるような比例関係があることが前提となります。

重回帰分析では、特徴量 $X$ は2つ以上の列を持つ2次元配列として準備する必要があります。

サンプルデータ(例) チャンネル登録者数($x_1$) 動画の平均再生時間($x_2$) 視聴者数($y$)
VTuber A 150,000 25分 4,000
VTuber B 120,000 20分 3,100

このデータをNumPy配列として用意する場合、特徴量 $X$ の配列は以下のようになります。

$$X = \begin{pmatrix} 150000 & 25 \ 120000 & 20 \ 100000 & 15 \ 80000 & 10 \end{pmatrix}$$

重回帰モデルの作成

Pythonライブラリ「Scikit-learn」を用いて、重回帰分析によりVTuberの「チャンネル登録者数」「平均再生時間」から「視聴者数」を予測してみましょう。

from sklearn.linear_model import LinearRegression
import numpy as np

# 特徴量(チャンネル登録者数, 平均再生時間)
X = np.array([
    [150000, 25],
    [120000, 20],
    [100000, 15],
    [80000, 10]
])

# 目的変数(視聴者数)
y = np.array([4000, 3100, 2500, 1800])

# モデル作成
model = LinearRegression()
model.fit(X, y)

print("回帰係数:", model.coef_)
print("切片:", model.intercept_)

サンプルコード② CSVファイルを読み込んで学習

サンプルコード③ 相関係数

サンプルコード④ 訓練用データに対する適合性

サンプルコード⑤ 残差分析

サンプルコード⑥ 汎化性能の検証

サンプルコード⑦ 交差検証

【その他】t値などを計算する場合は

Scikit-learnにはt値を計算する機能がないようなので、t値を計算したい場合はPythonモジュール「statsmodels」を用いましょう。

301 Moved Permanently
【Python超入門】基礎から応用例まで幅広く解説
PythonについてPythonは、統計処理や機械学習、ディープラーニングといった数値計算分野を中心に幅広い用途で利用されているプログラミング言語です。他のプログラミング言語と比較して「コードが短くて読みやすい、書きやすい」「ライブラリが豊...

コメント