非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python】Scikit-learnで始める回帰分析の基礎と実装例

   

Scikit-learnを使った回帰分析について解説します。回帰は数値データを予測するための手法で、例えば株価や売上や気温などの数値を予測する場面でよく使用されます。

回帰分析とは?

回帰分析とは、入力データ(特徴量)と出力データ(目的変数)の関係をモデル化し未来のデータを予測するための手法です。

例えば、過去の広告費(特徴量)と売上(目的変数)のデータから今後の広告費に基づいて売上を予測することができます。

Scikit-learnには、以下のような代表的な回帰モデルが用意されています:

  • 線形回帰(Linear Regression):最も基本的な回帰手法で、データの傾向を直線で表します。
  • リッジ回帰(Ridge Regression):線形回帰に正則化(ペナルティ)を加え、過学習を防止します。
  • ランダムフォレスト回帰(RandomForestRegressor):複数の決定木を使用したアンサンブル学習により、高い精度を実現します。
  • サポートベクター回帰(SVR):サポートベクターマシンを用いた回帰手法で、非線形な関係も扱うことが可能です。

今回は、最もシンプルな線形回帰を用いたプログラムを紹介します。

線形回帰のプログラム例

Scikit-learnLinearRegressionを使用して簡単な線形回帰モデルを作成します。サンプルデータとして架空の「広告費と売上」の関係を使用します。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# データの準備
# 広告費(万円)に対する売上(万円)のデータを準備
X = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100]).reshape(-1, 1)
y = np.array([25, 45, 65, 75, 95, 105, 130, 150, 160, 180])

# データの分割
# データを学習用(80%)とテスト用(20%)に分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# モデルの作成と学習
# 線形回帰モデルを作成し学習用データを使用してモデルを訓練
model = LinearRegression()
model.fit(X_train, y_train)

# 予測と評価
# テストデータを使用して予測
y_pred = model.predict(X_test)
# モデルの性能を評価するために平均二乗誤差(MSE)の計算
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")

# 回帰直線を描画して結果を可視化
# 散布図
plt.scatter(X, y, color='blue', label='Actual Data')
# 回帰直線
plt.plot(X, model.predict(X), color='red', label='Regression Line')

plt.xlabel('Advertising Cost (10,000 JPY)')
plt.ylabel('Sales (10,000 JPY)')
plt.title('Relationship Between Advertising Cost and Sales')
plt.legend()
plt.grid(True)
plt.show()
 
  • データの準備:Xとyで広告費と売上のデータを準備しています。
  • データの分割:train_test_splitで、データを学習用とテスト用に分割しています。
  • モデルの訓練:LinearRegression()でモデルを作成し、fit()メソッドで学習を行います。
  • 評価:mean_squared_error()で、予測結果と実際のデータの誤差を計算しています。
  • 可視化:matplotlibを使って、散布図と回帰直線を描画しています。

出力結果

出力結果は以下のようなチャートになります。

青い点(Actual Data)は実際の観測データ、赤い線は線形回帰モデルによって予測された売上を表しています。与えられた広告費に対して予測される売上の傾向を示しています。グラフを見る限り青い点(実際のデータ)は赤い線(回帰直線)にかなり近く分布しています。これはモデルが実際のデータをよく予測していることを示唆します。モデルの性能をより正確に評価するには平均二乗誤差(MSE) などの指標を用いることが一般的ですが、このグラフから視覚的に見ても、精度の高いモデルであると考えられます。

 

まとめ

今回はScikit-learnの線形回帰を使ってシンプルな予測モデルを作成しました。

線形回帰はシンプルながらも基本的な分析や予測には非常に役立つ手法です。Scikit-learnには他にも様々な回帰手法が用意されているのでデータの特徴に応じて使い分けることが重要です。

 

スポンサーリンク

 - Python