概要
Wantedlyの場合、トライアルとビジネスのプランがあり、トライアルの企業が満足するとビジネス(有料)のプランを使ってもらってます
トライアルの企業が満足したかどうかは、アップグレードしたかどうかで判断することができ、アップグレードするためにはどのようなことをすればアップグレードするのか、どの数字が影響しているか調べています
例えば、応募数が多い、ソーシャルへの拡散が多い、電話でのサポートをしている、社員を登録しているなど、いろいろな数字があります
それぞれの数字がどのくらいアップグレードすることに対して影響があるか、判断する方法のひとつとして、ロジスティク解析を使った判断方法を紹介します
ロジスティック回帰とはなにか
いくつかのパラメータと、結果が0か1になるものになります
そのときに、それぞれのパラメータの何が結果にどのように影響を与えているか調べることができます
例えばパラメータが3つ(x, y, z)で、結果(result 0 1)がのときは、log(p/(1-p)) = a0 + a1 * X1 + a2 * X2 + a3 * X3
になる
インプットするデータ(パラメータと結果)
[3, 1, 40, ...] => 0
[1, 4, 30, ...] => 1
[3, 4, 20, ...] => 0
アウトプットされるデータは先ほどの数式のa0, a1, a2, a3が分かる
準備
install.packages("aod")
データのインポートとどのようなデータか確認する方法
- 今回分析のために、実際のデータでなく、適当なデータを作ってテストしています。
>
> data <- read.table("input.txt") # space区切りの場合
> data <- read.csv("input.txt") # csv区切りの場合
> data <- read.csv("http://www.xxxx.com") # urlでもよい
> data <- read.table("input", header=T) # 1行目に列名がある場合は、headerのオプションをつける
> data <- read.table("input", skip=1) # 1行目をスキップする場合は、skipオプションをつける
> head(data) # 最初のデータを見る
V1 V2 V3 V4
1 0 1 9 6
2 1 6 28 64
3 0 2 7 8
4 0 1 3 2
5 0 1 8 5
6 0 2 7 1
> summary(data) # データがどのような分布か確認できる
V1 V2 V3 V4
Min. :0.0000 Min. : 1.00 Min. : 0.000 Min. : 0.000
1st Qu.:0.0000 1st Qu.: 1.00 1st Qu.: 1.000 1st Qu.: 0.000
Median :0.0000 Median : 1.00 Median : 2.000 Median : 3.000
Mean :0.1651 Mean : 1.42 Mean : 6.712 Mean : 8.736
3rd Qu.:0.0000 3rd Qu.: 1.00 3rd Qu.: 8.250 3rd Qu.: 8.250
Max. :1.0000 Max. :11.00 Max. :60.000 Max. :82.000
> sapply(data, sd) # それぞれの項目の標準偏差
V1 V2 V3 V4
0.3721444 1.0522753 10.5828817 14.4089242
ロジスティック解析
> mylogit <- glm(V1 ~ V2 + V3 + V4, data = mydata, family = "binomial")
> summary(mylogit)
Call:
glm(formula = V1 ~ V2 + V3 + V4, family = "binomial", data = mydata)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.1410 -0.3622 -0.2913 -0.2613 2.5080
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.40434 0.46586 -7.308 2.72e-13 ***
V2 0.04438 0.23737 0.187 0.851679
V3 0.12144 0.03290 3.692 0.000223 ***
V4 0.04583 0.01924 2.382 0.017212 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 189.96 on 211 degrees of freedom
Residual deviance: 113.82 on 208 degrees of freedom
AIC: 121.82
Number of Fisher Scoring iterations: 5
- 今回の数字の場合だとV2はp値も高く、パラメータの意味はもっとも低い
- V3とV4ではV3のほうが3倍くらい影響が大きい
さらに
e^(a0 + a1 * X1 + a2 * X2 ..)
と式を変換するとよりオッズ比(p/(1-p))が分かりやすい
> exp(coef(mylogit))
(Intercept) V2 V3 V4
0.0332289 1.0453831 1.1291271 1.0468976
epiDisplayのパッケージを使うと、Wald型の信頼区間などさまざまな検定結果のデータを出力してくれる
> require("epiDisplay")
> logistic.display(mylogit)
Logistic regression predicting V1
crude OR(95%CI) adj. OR(95%CI) P(Wald's test) P(LR-test)
V2 (cont. var.) 2.14 (1.43,3.19) 1.05 (0.66,1.66) 0.852 0.849
V3 (cont. var.) 1.18 (1.12,1.25) 1.13 (1.06,1.2) < 0.001 < 0.001
V4 (cont. var.) 1.1 (1.07,1.14) 1.05 (1.01,1.09) 0.017 0.015
Log-likelihood = -56.9092
No. of observations = 212
AIC value = 121.8185
参考
* [UCLA] R Data Analysis Examples: Logit Regression http://www.ats.ucla.edu/stat/r/dae/logit.htm