Rを使っての一般化線形モデルをggplotで図示しながらやる
手を動かしながら学ぶ ビジネスに活かすデータマイニングの勉強第3回
- 作者: 尾崎隆
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
前回と似たような内容なるが,重回帰分析を一般化した一般化線形モデルについて取り組んだ.
一般化線形モデル
重回帰分析
- 目的変数:正規分布に従う
- 回帰方法:線形(直線的)
一般化線形モデル
カテゴリごとの価格帯と購入率の関係を分析する
カテゴリごとの価格帯にが購入率に関係していると仮説をたてる
↓
ただ,よくわからないので試験的に売っていみるかと価格帯を適当に定めて販売する
↓
結果を得る
> head(d1)
d11 d12 d13 cvr
1 4400 5600 2300 0.94
2 3000 3900 3900 0.05
3 2700 3900 5400 0.01
4 4400 4300 3700 0.88
5 3000 5200 3600 0.27
6 2800 4100 4500 0.83
可視化してみる
> md1 <- melt(d1)
> md1$num <- c(1:30)
> p <- ggplot(md1, aes(x=num, y=value, fill=variable, color=variable)) + geom_line()
> p + facet_grid(variable ~ ., scales = "free_y")
↓
回帰分析により,購入率とカテゴリごとの価格帯の関係を得る
> d1.glm <- glm(cvr~., d1, family=binomial)
警告メッセージ:
In eval(expr, envir, enclos) : 二項 glm で整数でない成功数がありました!
↓
結果,食品の価格帯が購入率に直結していると分かった
> summary(d1.glm)
Call:
glm(formula = cvr ~ ., family = binomial, data = d1)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.03739 -0.28188 -0.09022 0.21891 1.57252
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -4.2249329 4.5516014 -0.928 0.35329
d11 0.0025792 0.0009027 2.857 0.00427 ** #Estimateが正の値なので正の相関がある
d12 -0.0003517 0.0005721 -0.615 0.53867
d13 -0.0007600 0.0007121 -1.067 0.28581
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 26.0459 on 29 degrees of freedom
Residual deviance: 7.8531 on 26 degrees of freedom
AIC: 23.461
Number of Fisher Scoring iterations: 6
↓
つまり,食品を豪華にし,その他はそこそこで売れば儲かる
この問題の場合には重回帰分析でもよかったのでは?
ちなみに今回のデータに重回帰分析を行ってみる.
> d1.lm <- lm(cvr~., d1)
> summary(d1.lm)
Call:
lm(formula = cvr ~ ., data = d1)
Residuals:
Min 1Q Median 3Q Max
-0.43109 -0.11438 -0.02763 0.09701 0.62835
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.114e-01 4.396e-01 -0.708 0.4850
d11 3.613e-04 4.885e-05 7.396 7.47e-08 *** #ここ やっぱりd11が正の相関がある
d12 -8.797e-06 5.008e-05 -0.176 0.8619
d13 -1.028e-04 5.972e-05 -1.721 0.0971 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2488 on 26 degrees of freedom
Multiple R-squared: 0.6856, Adjusted R-squared: 0.6494
F-statistic: 18.9 on 3 and 26 DF, p-value: 1.031e-06
結果,d11が購入率に対して正の相関があるとなった. これは先程のロジスティック回帰の結果と同じだ. そこで,今回の目的変数である購入率(cvr)の分布を見る
> hist(d1$cvr)
> ggplot(d1, aes(x=d1$cvr)) + geom_histogram(binwidth = 0.1)
分布は0と1に偏っている. そのため重回帰分析では誤差が大きくなると思う. つまり,目的変数の分布を見て,最適な回帰モデルを選択するがあるのかと思う.
どのキャンペーンページが効果的だったのかを分析
キャンペーンページとそのコンバージョンのありなしのデータがある.
> head(d2)
d21 d22 d23 d24 d25 d26 cv
1 1 0 1 1 0 1 1
2 0 1 0 1 1 0 0
3 1 0 1 0 1 1 1
4 0 1 0 0 1 0 0
5 1 0 0 1 1 1 1
6 1 0 0 1 0 1 1
データと目的変数を図で見る.
> md2 <- melt(d2)
Using as id variables
> md2$num <- c(1:125)
> p <- ggplot(md2, aes(x=num, y=value, fill=variable, color=variable)) + geom_line()
> p + facet_grid(variable ~ ., scales = "free_y")
> hist(d2$cv)
> ggplot(d2, aes(x=d2$cv)) + geom_histogram()
stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
今回は思いっきり2値で二項分布に従うと思う. なのでロジスティック回帰を行う.
> d2.glm <- glm(cv ~ ., d2, family = binomial)
> summary(d2.glm)
Call:
glm(formula = cv ~ ., family = binomial, data = d2)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.3793 -0.3138 -0.2614 0.4173 2.4641
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.0120 0.9950 -1.017 0.3091
d21 2.0566 0.8678 2.370 0.0178 *
d22 -1.7610 0.7464 -2.359 0.0183 *
d23 -0.2136 0.6131 -0.348 0.7276
d24 0.2994 0.8368 0.358 0.7205
d25 -0.3726 0.6064 -0.614 0.5390
d26 1.4258 0.6408 2.225 0.0261 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 173.279 on 124 degrees of freedom
Residual deviance: 77.167 on 118 degrees of freedom
AIC: 91.167
Number of Fisher Scoring iterations: 5
d21, d24, d26に正の相関があるのでこのページがcvに結びついているとわかる.
一方重回帰分析では
> d2.lm <- lm(cv ~ ., d2)
> summary(d2.lm)
Call:
lm(formula = cv ~ ., data = d2)
Residuals:
Min 1Q Median 3Q Max
-0.94326 -0.02773 -0.00223 0.08225 0.97227
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.31032 0.11071 2.803 0.005919 **
d21 0.38937 0.10898 3.573 0.000512 ***
d22 -0.25934 0.09261 -2.800 0.005969 **
d23 -0.02325 0.05620 -0.414 0.679826
d24 0.06435 0.08912 0.722 0.471729
d25 -0.02550 0.05771 -0.442 0.659354
d26 0.17922 0.07185 2.494 0.014007 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3091 on 118 degrees of freedom
Multiple R-squared: 0.6393, Adjusted R-squared: 0.6209
F-statistic: 34.86 on 6 and 118 DF, p-value: < 2.2e-16
ロジスティック回帰と同様な結果が得られ,上手く行っているように見える. 重回帰分析ではいったい何がよくないのだろうか? 誤差が大きいのかな? もっと極端なデータを使って重回帰分析で上手く行ってない感を味わいたい.