Technical Blog テクニカルブログ
  1. HOME
  2. テクニカルブログ
  3. ExcelとPythonでの重回帰分析の比較

ExcelとPythonでの重回帰分析の比較

投稿者:TE部#5 宮野

1.はじめに

こんにちは。NI+Cの宮野です。
今回は予測手法のなかでも基礎的な手法である「重回帰分析」について、Pythonで「pandas」「statsmodels」ライブラリを利用した場合とExcelの「分析ツール」アドインを使った場合の2つの実行方法やその違いについてご紹介します。

2.重回帰分析とは

回帰分析とはある予測対象(以降、目的変数)に対し、予測対象と関連のあるデータ(以降、説明変数)から目的変数を予測する手法となります。
回帰分析は単回帰分析、重回帰分析の2つがあり、目的変数に対し一つの説明変数で予測する手法が単回帰分析、複数の説明変数で予測する手法が重回帰分析となります。
今回は重回帰分析で予測モデルを作成します。
重回帰分析で作成されるモデルは以下の計算式となります。以下の計算式に説明変数のデータを入力することで予測することができます。
重回帰分析では予め、目的変数とそれに対応する説明変数を用意し、そのデータ群から下記式のA1~Ak(各説明変数にかかる重み)とB(切片(説明変数では説明しきれない要素))を出力し計算式を作成します。

Y= A1X1 + A2X2 +A3X3 + … + AkXk + B
Y:目的変数
X1~Xk:各説明変数
A1~Ak:各説明変数にかかる重み(係数)
k:説明変数総数
B:切片

3.例題

例としてある商品群の各種情報から売り上げを予測するモデルを作成してみます。
今回、「販売価格(円)」、「顧客満足度」(5段階評価)、「宣伝費用(万円)」、「TVCM有無(1をTVCM有、0をTVCM無)」(これらを説明変数とします)から「売上(万円)」(目的変数とします)を予測するモデルを作成します。

4.Excelでの重回帰分析

Excelで実際に重回帰分析を行ってみます。
事前準備として重回帰分析を行うのに必要なアドインがインストールされていることを確認します。
Excelを開き「ファイル」⇒「オプション」⇒「アドイン」の順で開き、「アクティブなアプリケーション アドイン」を確認します。画像のように「分析ツール」が表示されていれば、事前準備は完了です。
アクティブになっていない場合は同ウィンドウに表示されている「設定」から「分析ツール」にチェックを入れることでアクティブとなります。

事前準備が完了したら、実際に重回帰分析を行います。
まず下記画像のように「データ」タブから「データ分析」を選択します。

次に「回帰分析」を選択し、回帰分析の設定ウィンドウを開きます。

設定ウィンドウでは「入力Y範囲(Y)」が目的変数(今回は「売上(万円)」)、「入力Y範囲(X)」が説明変数(今回は「販売価格(円)」、「顧客満足度」、「宣伝費用(万円)」、「TVCM有無)」)を範囲指定します。また範囲指定にラベルが含まれる場合は、「ラベル(L)」にチェックを入れます。
上記設定完了後「OK」を選択することで重回帰分析が行われます。

重回帰分析後、以下画像のように新規シートで重回帰分析の結果が出力されます。
出力結果のなかで「係数」が上記で説明した各説明変数の重みとなり、予測モデルで使用するデータとなります。
また実際に重回帰分析を行う場合、回帰統計や分散分析表の結果を確認し作成したモデルが妥当か検証し修正します。
(今回はモデル作成とモデルの使用方法の説明のみ行うため、検証は割愛します)

実際に作成したモデルで予測を行う場合、下記画像赤枠のように重回帰分析の係数と説明変数の値を計算式に当てはめて計算を行うことでモデルによる予測を行うことができます。

5.Pythonでの重回帰分析

次にpythonで実際に重回帰分析を行ってみます。
まず事前準備として重回帰分析を行うのに必要なライブラリがインストールされていることを確認します。
コマンド「pip list」を実行しライブラリ「pandas」、「statsmodels」がインストールされていることを確認してください。
インストールされていない場合は、「pip install」から上記2つのライブラリをインストールしてください。
以上で事前準備は完了となります。

今回は以下のサンプルコードでPythonでの重回帰分析を実行し、予測モデルを作成してみます。
こちらのプログラムでは入力データとなるxlsxファイルを読み込み、目的変数と説明変数を別々のデータフレームに分割し、stastsmodelsのOLSの引数に分割したデータフレームを入力することでモデルを作成しています。
またこちらのプログラムではpklファイルとしてモデルを出力し、csvファイルでモデルの作成結果を出力します。

import pandas as pd
import statsmodels.api as sm
import pickle

# Excelデータ読み込み
df=pd.read_excel("入力データ.xlsx")

# 説明変数用データフレーム作成
X=df[["販売価格(円)","顧客満足度","宣伝費用(万円)","TVCM有無"]]
# 目的変数用データフレーム作成
Y=df[["売上(万円)"]]

# 切片項追加
X=sm.add_constant(X)

# 重回帰モデル作成
model=sm.OLS(Y,X).fit()

# モデルをpklファイルで保存
with open("model.pkl","wb") as f:
    pickle.dump(model,f)

# モデル作成結果を表示
print(model.summary())

# モデル作成結果をcsvファイルで出力
# モデル作成結果を文字列に変換
summary_txt=model.summary().as_text()
# 作成結果の文字列を改行で分割しリスト化
summary_lines=summary_txt.split("\n")
# 作成結果のリストをデータフレーム化
summary_df=pd.DataFrame(summary_lines)
# 作成結果のcsvファイルとして出力
summary_df.to_csv("summary.csv",index=False,header=False,encoding="utf-8-sig")

プログラムを実行すると以下のcsvファイルが出力されます。
このcsvファイルからExcelと同じようにモデルの内容の確認や精度評価を行うことができます。

さらに作成したモデルから実際に予測を行う場合、以下のようなプログラムを作成します。
こちらのプログラムでは入力となるxlsxファイル、モデルとなるpklファイルを読み込み、読み込んだモデルの引数に入力データを指定することで予測結果が出力されます。予測結果はxlsxファイルとして出力されます。

import pandas as pd
import statsmodels.api as sm
import pickle

# 作成したモデルファイル読み込み
with open("model.pkl","rb") as f:
    load_model=pickle.load(f)

# 予測対象のxlsxファイル読み込み
df=pd.read_excel("入力データ.xlsx")

# 説明変数用データフレーム作成
X=df[["販売価格(円)","顧客満足度","宣伝費用(万円)","TVCM有無"]]

# 切片項追加
X=sm.add_constant(X)

# 作成したモデルファイルによる予測
pred=load_model.predict(X)
 
# 予測結果出力
# 説明変数用データフレーム作成に予測結果追加
X["予測結果"]=pred
# 切片項作成
X=X.drop(columns=["const"])
# Excelファイルに予測結果出力
X.to_excel("result.xlsx",index=False)

上記プログラムを実行すると下記画像のように予測結果を出力することができます。
こちらもExcelでの実行と同じように各種説明変数、切片項と係数を計算式を当てはめた結果が予測結果として出力されます。

7.比較

Excel、Pythonの重回帰分析の実装を比較したときの特徴を以下の表にまとめてみました。
まずモデルの精度についてですが、どちらのツールで実装しても手法は同じため精度に違いはありません

簡易的に重回帰分析を行いたい場合はExcel、大容量のデータに対してサービス(AWS等)による実運用をする場合はPythonが推奨されます。

8.まとめ

今回はExcelとPythonでの重回帰分析を比較してみました。
実際に重回帰分析を行う場合はモデル作成時に出力された回帰統計や分散分析表などの指標を基に説明変数の取捨選択や加工、さらなる追加を行い予測モデルの精度を上げていきます。
どちらの実行方法でも算出はできますが、データ量や使い勝手で選んでいただくとよいと思います。

ページのトップへ