LoginSignup
24
23

More than 5 years have passed since last update.

ロジスティック解析を使ったデータ分析の方法

Last updated at Posted at 2015-12-01

概要

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

24
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
23