はじめに
マーケティング寄りのデータ分析の知識を補うため、以下の本で勉強を始めた。事例ベースな内容で、とても読みやすい。 Pandasも習得したいので、Pandasに翻訳しながら読み進めている。今回は第6章を勉強した。
- 作者: 酒巻隆治,里洋平
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/06/25
- メディア: 単行本
- この商品を含むブログ (1件) を見る
ちなみに、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')
散布図から何かしらの相関があることが伺える。回帰分析によりモデル化する。
# 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章にある「本当の意味での正解データがないなかで、なんらかの(ビジネス上意味のある)示唆を出さなければならない」という記述は、「うっ」という苦しい気持ちになる。