前回はサイキットラーンで単回帰分析を行う方法を解説しましたが、1つの要因を決める因子が1つだけというのは、実際はあまりありません。
1つの結果を決めるのに、因子がいくつもある場合があります。
たとえば、雨の日の売り上げ価格を求めたい時に、降水量と売り上げ金額だけではなく、降水時間や、商品の価格、それこそ、祝日なのか、平日なのかも影響するかもしれません。そんなときには、重回帰分析を行うと便利です。
データの重回帰分析は、複数の説明変数が目的変数に与える影響を理解し、予測モデルを構築するための有用な手法です。この記事では、Pythonの機械学習ライブラリであるサイキットラーンを使って、データの重回帰分析を行う手順を紹介します。
〇pythonによる実装
1. 必要なライブラリのインポート
最初に、必要なライブラリをインポートします。
from sklearn.model_selection import
train_test_split
from sklearn.linear_model import
LinearRegression
from sklearn.metrics import
mean_squared_error, r2_score
2. データの読み込みと理解
サンプルデータを読み込み、データの基本的な情報を確認します。
data =
pd.read_csv("sample_data.csv")
print(data.head())
print(data.describe())
3. 説明変数と目的変数の選択
データから説明変数と目的変数を選択します。
X = data[['feature1', 'feature2',
'feature3']]
y = data['target']
4. データの分割
データをトレーニングセットとテストセットに分割します。
X_train, X_test, y_train, y_test =
train_test_split(X, y, test_size=0.2, random_state=42)
サイキットラーンのLinearRegressionモデルを使ってトレーニングし、テストデータで予測を行います。
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
6. モデルの評価
モデルの性能を評価します。
r2 = r2_score(y_test, y_pred)
print(f"R^2 Score: {r2}")
7. 結果の解釈
モデルの係数や切片を取得して、結果を解釈します。
intercept = model.intercept_
print(f"Intercept: {intercept}")
これで、サイキットラーンを使用してデータの重回帰分析が完了しました。分析結果をもとに、選択した説明変数が目的変数にどのような影響を与えているかを理解できます。
〇コードをまとめると
import pandas as pd
from sklearn.model_selection import
train_test_split
from sklearn.linear_model import
LinearRegression
from sklearn.metrics import
mean_squared_error, r2_score
data =
pd.read_csv("sample_data.csv")
print(data.head())
print(data.describe())
X = data[['feature1', 'feature2',
'feature3']]
y = data['target']
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 = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"Mean Squared Error:
{mse}")
print(f"R^2 Score: {r2}")
〇AIC(赤池の情報量基準)
重回帰分析の実装方法は上記になりますが、そもそも説明変数はどのように決めたらいいでしょうか?
一つ一つ説明変数と目的変数で相関係数を算出して、相関性の高いのを選べばいいのでしょうか?
重回帰分析の説明変数の組み合わせモデルをつくる基準に赤池の情報量基準AICというものがあります。
ExcelでAICを算出しようとするととても大変なのですが、pythonなら簡単です。
PythonのStatsmodels.Formula
APIは、統計モデルを構築する際に便利な方法を提供しています。ここからは、Formula APIを使用してAIC(赤池情報量基準)を計算する手順を紹介します。
1. Statsmodelsのインストール
まず、Statsmodelsをインストールします。
pip install statsmodels
2. 必要なライブラリのインポート
Statsmodelsとデータ操作に必要なライブラリをインポートします。
import statsmodels.formula.api as smf
3. データの読み込みと理解
サンプルデータを読み込み、基本的な情報を確認します。
data =
pd.read_csv("sample_data.csv")
print(data.head())
print(data.describe())
4. 統計モデルの構築とAICの計算
Formula APIを使用して統計モデルを構築し、AICを計算します。
formula = "target ~ feature"
model = smf.ols(formula=formula, data=data)
result = model.fit()
aic = result.aic
print(f"AIC: {aic}")
ormula = "target ~ feature + feature2+
feature3 "
と「+」で追加していけばOKです。
赤池の情報量基準は相関係数と違って、かならず+1~-1の間になるという基準ではありません。
モデルによってはけた違いの数字が出たりします。
しかし、モデル事に見ていき、AICが小さいもでるがよりよいモデルだという基準にすることができます。
たとえば、目的変数yに対して、
説明変数 a + b+ c のモデルのAIC
が1500
説明変数 a + b+ d のモデルのAIC
が1100
だとすると、説明変数 a + b+ dのモデルの方が良いと思われ、
ではこれで、一回重回帰分析をやってみようかという流れになります。
〇まとめ
この記事ではpythonで重回帰分析のモデルを実装する方法とその基準となる赤池の情報量基準AICを算出する方法を解説しました。
重回帰分析は、なにかの予測したい時に、使いこなせると非常に便利なツールです。
赤池の情報量基準の他にもベイズ情報量基準BICというものもありますが、これも紹介したコードのaicの部分をbicにすると算出することができます。
こちらも小さいほうがいいとされている基準です。
bicの方は、最大尤度にn数の影響も掛け合わせたとされているとかいないとか・・・
大体そんな感じです。
興味のある人は調べてみてください。
でも通常はAICを使って、モデルの選定を行って大丈夫です。
0 件のコメント:
コメントを投稿