タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

サイキットラーンでの重回帰分析モデルを実装する方法[赤池の情報量基準も]

AI Python

t f B! P L

 

パソコンの画像

前回はサイキットラーンで単回帰分析を行う方法を解説しましたが、1つの要因を決める因子が1つだけというのは、実際はあまりありません。

1つの結果を決めるのに、因子がいくつもある場合があります。

たとえば、雨の日の売り上げ価格を求めたい時に、降水量と売り上げ金額だけではなく、降水時間や、商品の価格、それこそ、祝日なのか、平日なのかも影響するかもしれません。そんなときには、重回帰分析を行うと便利です。

データの重回帰分析は、複数の説明変数が目的変数に与える影響を理解し、予測モデルを構築するための有用な手法です。この記事では、Pythonの機械学習ライブラリであるサイキットラーンを使って、データの重回帰分析を行う手順を紹介します。

〇pythonによる実装 

1. 必要なライブラリのインポート

最初に、必要なライブラリをインポートします。

 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

2. データの読み込みと理解

サンプルデータを読み込み、データの基本的な情報を確認します。

 # サンプルデータの読み込み(CSVファイルなどから適切な形式で読み込む)

data = pd.read_csv("sample_data.csv")

 # データの最初の数行を表示

print(data.head())

 # データの統計情報を表示

print(data.describe())

3. 説明変数と目的変数の選択

データから説明変数と目的変数を選択します。

 # 説明変数と目的変数の選択(例として、'feature1', 'feature2', 'feature3'が説明変数、'target'が目的変数と仮定)

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)

 5. モデルのトレーニングと予測

サイキットラーンのLinearRegressionモデルを使ってトレーニングし、テストデータで予測を行います。

 model = LinearRegression()

model.fit(X_train, y_train)

 # テストデータでの予測

y_pred = model.predict(X_test)

6. モデルの評価

モデルの性能を評価します。

 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}")

7. 結果の解釈

モデルの係数や切片を取得して、結果を解釈します。

 coefficients = model.coef_

intercept = model.intercept_

 print(f"Coefficients: {coefficients}")

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というものがあります。

ExcelAICを算出しようとするととても大変なのですが、pythonなら簡単です。

PythonStatsmodels.Formula APIは、統計モデルを構築する際に便利な方法を提供しています。ここからは、Formula APIを使用してAIC(赤池情報量基準)を計算する手順を紹介します。

1. Statsmodelsのインストール

まず、Statsmodelsをインストールします。

pip install statsmodels

2. 必要なライブラリのインポート

Statsmodelsとデータ操作に必要なライブラリをインポートします。

 import pandas as pd

import statsmodels.formula.api as smf

3. データの読み込みと理解

サンプルデータを読み込み、基本的な情報を確認します。

 # サンプルデータの読み込み(CSVファイルなどから適切な形式で読み込む)

data = pd.read_csv("sample_data.csv")

 # データの最初の数行を表示

print(data.head())

 # データの統計情報を表示

print(data.describe())

4. 統計モデルの構築とAICの計算

Formula APIを使用して統計モデルを構築し、AICを計算します。

 # Formulaを使った単回帰モデルの構築(例として、'feature'が説明変数、'target'が目的変数と仮定)

formula = "target ~ feature"

model = smf.ols(formula=formula, data=data)

 # モデルのフィッティング

result = model.fit()

 # AICの取得

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を使って、モデルの選定を行って大丈夫です。

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ