Blog

pythonとパンダちゃんで重回帰分析

  • Update2016-08-30T16:54:35
  • Category
    • Internet
  • Other--
pythonとパンダちゃんで重回帰分析のサムネイル画像

こんばんわ、kote2です。

pythonで重回帰分析をやる方法について調べてわかったのでメモします。回帰分析はあったんですが重回帰分析はほとんど載ってなかったので。。あと重回帰分析について自分は統計学初心者で説明できるほどよくわかってないのでこちらをご参考ください・・。
http://xica.net/sxuwvhyx/

とは言え、重回帰分析って例えばどんなことに使えるのか?

これを考えるのが重要ですね。イメージしやすいし。

例えばあなたはあるソシャゲー会社のマーケティング担当で、WEB広告とCMや雑誌広告の出稿を主な業務としています。さて、WEB広告はお金をかけるだけゲームが売れるのはわかっていますがカバレッジの大きさに限界があり従来メディアへの出稿を余儀なくされています。ただCMや雑誌等は綿密な統計分析ができていません。以前まで行っていた施策のデータ(広告費と売上)がありますが、今回CMと雑誌について最適な予算配分をしたいと考えています。

WEBの担当者であればWEBの広告もAとBというメディアでどのような予算配分が一番効率がいいか考えることがあります。

今回は以下みたいなデータフレームを使用しました。

	        tvcm  	magazine install
month			
2015-01-01	6358	5955	53948
2015-02-01	8176	6069	57300
2015-03-01	6853	5862	52057
2015-04-01	5271	5247	44044
2015-05-01	6473	6365	54063
2015-06-01	7682	6555	58097
2015-07-01	5666	5546	47407
2015-08-01	6659	6066	53333
2015-09-01	6066	5646	49918
2015-10-01	10090	6545	59963

まず、実際お金をかければかけるほど新規インストール数って上がるのか?可視化するため散布図を作ってみます。

%matplotlib inline #jupyter用

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

#以下はおまじない
pd.set_option('display.mpl_style', 'default')
plt.rcParams['figure.figsize'] = (15, 3)
plt.rcParams['font.family'] = 'sans-serif'

CSVデータを読み込みます。

ad_data = pd.read_csv('ad_result.csv', index_col=0, parse_dates=True)
ad_data

	        tvcm  	magazine install
month			
2015-01-01	6358	5955	53948
2015-02-01	8176	6069	57300
2015-03-01	6853	5862	52057
2015-04-01	5271	5247	44044
2015-05-01	6473	6365	54063
2015-06-01	7682	6555	58097
2015-07-01	5666	5546	47407
2015-08-01	6659	6066	53333
2015-09-01	6066	5646	49918
2015-10-01	10090	6545	59963

そして散布図をプロットします。

ax = ad_data.plot(kind='scatter', x='tvcm', y='install',color='RED', label='TVCM',s=50);
ad_data.plot(kind='scatter', x='magazine', y='install', label='MAGAZINE',ax=ax,s=50);

TVCMは多少バラつきがありますがどちらも右肩上がりに直線を引けそうですね。
Chap6_Python

直線を引くとこのような感じになります。
Chap6_Python 2

で、ここから重回帰分析をしてみます。

公式は

新規インストール数 = (β1✕TVCM広告費 + β2✕雑誌広告費) + α

αとβを重回帰分析で明らかにしてみます。とは言っても簡単。

model_ols = pd.ols(y=ad_data['install'], x=ad_data.drop(['install'], axis=1))
print(model_ols)

-------------------------Summary of Regression Analysis-------------------------

Formula: Y ~  +  + 

Number of Observations:         10
Number of Degrees of Freedom:   3

R-squared:         0.9379
Adj R-squared:     0.9202

Rmse:           1387.3685

F-stat (2, 7):    52.8620, p-value:     0.0001

Degrees of Freedom: model 2, resid 7

-----------------------Summary of Estimated Coefficients------------------------
      Variable       Coef    Std Err     t-stat    p-value    CI 2.5%   CI 97.5%
--------------------------------------------------------------------------------
          tvcm     1.3609     0.5174       2.63     0.0339     0.3468     2.3751
      magazine     7.2498     1.6926       4.28     0.0036     3.9322    10.5674
     intercept   188.1743  7719.1308       0.02     0.9812 -14941.3222 15317.6707
---------------------------------End of Summary---------------------------------

はい、出ました。この部分。

tvcm 1.3609
magazine 7.2498
intercept 188.1743

何もやらなければ188インストールで、広告を使えば費用×上記の係数でインストール数が予測できます。

じゃあ、今回は6万人獲得したいということで
60279 = 1.361✕4200万円 + 7.250✕7500万円 + 188.174

ってな感じで計算できちゃうのでした。上記の広告費の数字はエクセルで計算式作ってしまえば調整が楽ですよ。

いじょ!