洋食の日記

「だ・である」調ではなく「です・ます」調で書きはじめれば良かったなと後悔してる人のブログです

Pandasで「ビジネス活用事例で学ぶデータサイエンス入門」を勉強する(第6章)

はじめに

マーケティング寄りのデータ分析の知識を補うため、以下の本で勉強を始めた。事例ベースな内容で、とても読みやすい。 Pandasも習得したいので、Pandasに翻訳しながら読み進めている。今回は第6章を勉強した。

ビジネス活用事例で学ぶ データサイエンス入門

ビジネス活用事例で学ぶ データサイエンス入門

ちなみに、CSVファイルなどのデータは、本のサポートページ(SBクリエイティブ:ビジネス活用事例で学ぶ データサイエンス入門)で配布されている。

翻訳したコード

第6章では、重回帰分析を扱っている。作業はJupyter Notebook上で行った。回帰にはScikit-Learnを用いる。 本ではひとまず、散布図を出力して、テレビ広告・雑誌広告とアプリのインストール数との関係を見ている。

%matplotlib inline # Jupyter Notebookでmatplotlibの図が表示されないときにつけるおまじない
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression

# データを読み込む。
ad_data = pd.read_csv('ad_result.csv')
ad_data.head(2)

 

month tvcm magazine install
0 2013-01 6358 5955 53948
1 2013-02 8176 6069 57300

 

# 散布図の出力にはscatterメソッドを用いる。
# x軸とy軸は、データのヘッダにある列名で指定できる。
ad_data.plot.scatter(x='tvcm', y='install')
ad_data.plot.scatter(x='magazine', y='install')

f:id:yoshoku:20170716150546p:plain f:id:yoshoku:20170716150557p:plain

散布図から何かしらの相関があることが伺える。回帰分析によりモデル化する。

# Numpy形式でデータを取り出す。
X=np.array(ad_data[['tvcm', 'magazine']])
y=np.array(ad_data['install'])

# 回帰モデルを得る。
model=LinearRegression().fit(X, y)

# 回帰モデルの切片と係数を確認する。
#  インストール数とテレビ広告・雑誌広告には以下の関係があることがわかる。
#  「インストール数 = 188.174 + 1.361 x テレビ広告 +7.250 x 雑誌広告」
print(model.intercept_)
print(model.coef_)
# 188.17427483
# [ 1.3609213   7.24980915]

# 決定係数を確認する。
#  1に近いので、当てはまりが良いことがわかる。
print(model.score(X,y))
# 0.937901430104

別の選択肢としては、StatsModelのOLS(Ordinary Least Squares)を用いる方法がある。 StatsModelの回帰分析は、summaryメソッドを持っており、R言語のlm関数に似た結果を得られる。

from statsmodels.regression.linear_model import OLS
results=model = OLS(y, X).fit()
print(results.summary())
#                             OLS Regression Results                            
# ==============================================================================
# Dep. Variable:                      y   R-squared:                       1.000
# Model:                            OLS   Adj. R-squared:                  0.999
# Method:                 Least Squares   F-statistic:                     8403.
# Date:                Sun, 16 Jul 2017   Prob (F-statistic):           5.12e-14
# Time:                        16:15:12   Log-Likelihood:                -84.758
# No. Observations:                  10   AIC:                             173.5
# Df Residuals:                       8   BIC:                             174.1
# Df Model:                           2                                         
# Covariance Type:            nonrobust                                         
# ==============================================================================
#                  coef    std err          t      P>|t|      [0.025      0.975]
# ------------------------------------------------------------------------------
# x1             1.3540      0.405      3.347      0.010       0.421       2.287
# x2             7.2892      0.476     15.320      0.000       6.192       8.386
# ==============================================================================
# Omnibus:                        1.009   Durbin-Watson:                   0.876
# Prob(Omnibus):                  0.604   Jarque-Bera (JB):                0.804
# Skew:                           0.539   Prob(JB):                        0.669
# Kurtosis:                       2.123   Cond. No.                         14.0
# ==============================================================================

おわりに

6章から、機械学習に関係する話がでてくる。PandasというよりもScikit-Learnが活躍する感じ。7章にある「本当の意味での正解データがないなかで、なんらかの(ビジネス上意味のある)示唆を出さなければならない」という記述は、「うっ」という苦しい気持ちになる。