로지스틱 회귀분석의 개념과 원리

  • 어떤 사건이 발생할지에 대한 직접 예측이 아니라 그 사건이 발생할 확률을 예측하는 것이다.

로지스틱 회귀분석이 사용되는 예를 보면,

  • 금융권에서는 고객의 신용도 평가를 통해 이 고객의 신용도가 우량이 될 것인지, 신용불량자가 될 것인지 미리 예측해 볼 수 있다. 또한 통신사의 경우 2년 약정 종료 후 번호이동으로 타 통신사로 갈 것인지, 기기변경으로 남을 것인지 판단할 수 있다.

  • 제과점에서는 전날 저녁에 다음날 팔게 될 빵의 수량을 예측해서 본사에 주문하거나 직접 만들게 되는데 이때 재고를 남기지 않고 모두 판매할 수 있을지 폐기하게 될지 등을 예측하는데 활용해 볼 수 있을 것이다.

  • 무엇보다 의학 분야에서는 다양한 원인을 파악하여 질병에 대한 예측을 하는데 더욱 효과적으로 활용해 볼 수 있을 것이다.

  • 종속변수 : 이분형(0 또는 1의 값을 가짐)

  • 독립변수 : 범주형 OR 연속형

  • 종속변수 값, 즉 확률이 0.5보다 크면 그 사건이 일어나며, 0.5보다 작으며 그 사건이 일어나지 않는 것으로 예측

log1

오즈(odds) 이란?

  • 일반적 비율(활률) = p/1 = 발생할확률/전체

  • 오즈 = p/(1-p) = 발생활확률/발생하지않을확률

소득구간 명수 소유자 미소유자 소유비율 오즈
100만원 미만 100 10 90 10/100 10/90
200만원 미만 100 18 82 18/100 18/82

확률이 아닌 오즈비로 계산하는 이유

  • 다른집단과의 비교값인 오즈비가 현실세계에서 더욱 타당한 의미를 가짐

로짓으로의 변환

  • 오즈에 자연로그(log)를 취하여 자료를 반환함

  • 로그변환시 자료가 선형적으로 안정화되며 음수와 양수 전체 구간에 무한대로 존재하게 됨

실습과 시각화

1
a <- read.csv('cosmetics.csv',header = T)
1
a
gendermarriageedujobmincomeawarecountamountdecisionpropensityskinpromolocationsatisf_bsatisf_isatisf_alrepurchase
1 1 4 1 2 2 1 110002 1 1 1 2 5 2 2 2
2 1 4 9 2 1 4 300001 1 3 2 3 2 3 3 4
2 2 4 4 3 1 6 1000003 2 3 2 2 4 5 4 4
2 2 4 7 5 2 6 650003 2 5 2 3 3 4 4 4
1 2 6 6 5 2 2 500002 2 3 2 3 3 3 3 3
2 2 2 7 3 1 2 1000002 1 4 2 3 3 4 4 3
2 1 6 4 5 1 5 1000003 2 5 2 3 2 2 3 4
1 1 6 4 5 4 10 390003 2 2 1 2 4 4 4 4
2 2 4 5 2 2 2 400003 2 3 2 3 3 4 4 4
2 2 4 5 2 1 2 1000003 3 3 1 3 2 3 4 4
2 1 7 4 3 10 3 500001 3 1 2 3 3 3 4 4
1 1 2 5 3 2 1 300003 2 3 2 2 3 3 3 3
2 2 4 4 3 4 4 3200002 3 3 3 2 4 4 4 4
2 2 4 4 2 3 2 2000001 2 3 1 3 3 3 3 3
1 2 4 4 6 2 2 600003 2 1 2 5 3 3 3 4
2 1 4 5 2 2 3 500001 2 4 1 3 3 4 3 3
1 2 8 3 2 5 3 10000001 3 1 2 2 3 3 3 3
2 1 3 8 5 1 6 15000003 3 2 4 1 4 4 4 4
1 2 2 6 2 4 1 800002 3 1 2 3 3 3 4 4
1 1 4 4 3 8 3 300002 2 3 2 3 3 3 3 3
2 2 2 4 2 8 4 3500003 2 3 2 2 3 4 4 4
2 2 4 7 6 1 4 2500003 3 2 2 3 2 3 4 4
2 2 4 7 3 1 25 500002 2 1 2 3 3 4 4 4
2 2 2 9 1 1 1 200001 1 5 1 3 3 3 3 3
1 1 3 8 4 2 3 420001 2 3 1 3 3 3 4 4
1 1 4 8 4 2 3 420003 3 2 1 3 3 4 4 4
2 1 4 4 3 2 20 400003 1 5 2 3 2 4 4 4
2 2 4 4 6 1 6 700003 3 5 2 1 3 4 4 4
2 2 8 4 5 5 6 2000002 1 4 1 1 4 4 4 3
1 2 4 2 6 2 1 2000003 2 1 2 2 3 4 4 4
...................................................
2 2 4 5 2 1 10 300002 2 2 4 3 3 4 4 4
1 2 4 6 6 7 5 500003 2 4 2 2 3 4 4 4
1 2 4 1 4 1 1 100001 3 1 1 1 5 1 3 1
1 1 4 4 3 2 1 100001 1 4 3 2 2 3 3 3
1 1 4 4 3 2 3 500003 2 5 2 3 2 4 4 4
1 2 2 5 4 2 1 600001 1 1 4 5 3 3 3 3
1 1 6 1 3 2 2 500003 2 5 1 2 4 4 3 4
2 2 6 4 6 1 3 5000003 3 5 2 1 3 4 4 4
1 2 4 1 3 2 1 500003 2 1 2 3 2 3 3 3
2 2 6 3 4 1 1 1000003 2 1 2 1 3 3 3 3
2 2 4 7 4 1 2 500003 1 5 2 2 3 2 3 4
2 2 4 4 2 2 12 200002 2 3 2 3 3 3 3 3
1 1 4 4 4 2 4 350002 2 1 3 2 3 3 4 4
1 1 4 4 4 2 4 300002 2 1 2 3 3 4 4 3
2 2 4 7 1 2 2 500001 1 3 2 5 3 4 4 4
2 2 4 7 1 2 3 500001 2 3 2 5 3 3 3 3
2 1 4 4 2 2 7 800003 2 3 2 2 3 3 3 3
1 1 4 1 3 2 6 200003 1 3 1 3 2 3 4 4
1 1 4 10 2 2 2 250003 1 3 2 3 3 4 4 4
2 1 3 8 1 1 7 1000002 1 5 2 3 3 3 1 2
1 2 4 4 3 2 2 500001 2 5 2 2 3 4 3 3
1 2 4 4 5 2 1 800002 2 1 2 3 3 3 3 3
2 2 6 7 5 1 2 3000003 3 2 3 2 3 4 3 3
2 2 7 7 4 1 2 2000002 2 4 3 2 3 3 3 3
1 1 2 1 2 2 5 30001 1 2 1 1 1 1 1 1
1 1 4 2 3 2 6 40001 1 1 1 4 2 1 1 1
2 2 4 4 2 1 10 1500003 2 2 1 2 3 4 4 4
2 2 7 8 1 2 3 1000001 2 1 1 5 2 5 4 4
1 1 4 6 1 3 2 200003 1 1 1 3 4 3 3 2
2 2 6 10 1 1 10 10000003 2 3 1 3 2 3 3 3
1
attach(a)
1
library(car)
1
Loading required package: carData
1
a$repurchase_re <- recode(a$repurchase, "lo:3=0; 4:hi=1")
1
a
gendermarriageedujobmincomeawarecountamountdecisionpropensityskinpromolocationsatisf_bsatisf_isatisf_alrepurchaserepurchase_re
1 1 4 1 2 2 1 110002 1 1 1 2 5 2 2 2 0
2 1 4 9 2 1 4 300001 1 3 2 3 2 3 3 4 1
2 2 4 4 3 1 6 1000003 2 3 2 2 4 5 4 4 1
2 2 4 7 5 2 6 650003 2 5 2 3 3 4 4 4 1
1 2 6 6 5 2 2 500002 2 3 2 3 3 3 3 3 0
2 2 2 7 3 1 2 1000002 1 4 2 3 3 4 4 3 0
2 1 6 4 5 1 5 1000003 2 5 2 3 2 2 3 4 1
1 1 6 4 5 4 10 390003 2 2 1 2 4 4 4 4 1
2 2 4 5 2 2 2 400003 2 3 2 3 3 4 4 4 1
2 2 4 5 2 1 2 1000003 3 3 1 3 2 3 4 4 1
2 1 7 4 3 10 3 500001 3 1 2 3 3 3 4 4 1
1 1 2 5 3 2 1 300003 2 3 2 2 3 3 3 3 0
2 2 4 4 3 4 4 3200002 3 3 3 2 4 4 4 4 1
2 2 4 4 2 3 2 2000001 2 3 1 3 3 3 3 3 0
1 2 4 4 6 2 2 600003 2 1 2 5 3 3 3 4 1
2 1 4 5 2 2 3 500001 2 4 1 3 3 4 3 3 0
1 2 8 3 2 5 3 10000001 3 1 2 2 3 3 3 3 0
2 1 3 8 5 1 6 15000003 3 2 4 1 4 4 4 4 1
1 2 2 6 2 4 1 800002 3 1 2 3 3 3 4 4 1
1 1 4 4 3 8 3 300002 2 3 2 3 3 3 3 3 0
2 2 2 4 2 8 4 3500003 2 3 2 2 3 4 4 4 1
2 2 4 7 6 1 4 2500003 3 2 2 3 2 3 4 4 1
2 2 4 7 3 1 25 500002 2 1 2 3 3 4 4 4 1
2 2 2 9 1 1 1 200001 1 5 1 3 3 3 3 3 0
1 1 3 8 4 2 3 420001 2 3 1 3 3 3 4 4 1
1 1 4 8 4 2 3 420003 3 2 1 3 3 4 4 4 1
2 1 4 4 3 2 20 400003 1 5 2 3 2 4 4 4 1
2 2 4 4 6 1 6 700003 3 5 2 1 3 4 4 4 1
2 2 8 4 5 5 6 2000002 1 4 1 1 4 4 4 3 0
1 2 4 2 6 2 1 2000003 2 1 2 2 3 4 4 4 1
......................................................
2 2 4 5 2 1 10 300002 2 2 4 3 3 4 4 4 1
1 2 4 6 6 7 5 500003 2 4 2 2 3 4 4 4 1
1 2 4 1 4 1 1 100001 3 1 1 1 5 1 3 1 0
1 1 4 4 3 2 1 100001 1 4 3 2 2 3 3 3 0
1 1 4 4 3 2 3 500003 2 5 2 3 2 4 4 4 1
1 2 2 5 4 2 1 600001 1 1 4 5 3 3 3 3 0
1 1 6 1 3 2 2 500003 2 5 1 2 4 4 3 4 1
2 2 6 4 6 1 3 5000003 3 5 2 1 3 4 4 4 1
1 2 4 1 3 2 1 500003 2 1 2 3 2 3 3 3 0
2 2 6 3 4 1 1 1000003 2 1 2 1 3 3 3 3 0
2 2 4 7 4 1 2 500003 1 5 2 2 3 2 3 4 1
2 2 4 4 2 2 12 200002 2 3 2 3 3 3 3 3 0
1 1 4 4 4 2 4 350002 2 1 3 2 3 3 4 4 1
1 1 4 4 4 2 4 300002 2 1 2 3 3 4 4 3 0
2 2 4 7 1 2 2 500001 1 3 2 5 3 4 4 4 1
2 2 4 7 1 2 3 500001 2 3 2 5 3 3 3 3 0
2 1 4 4 2 2 7 800003 2 3 2 2 3 3 3 3 0
1 1 4 1 3 2 6 200003 1 3 1 3 2 3 4 4 1
1 1 4 10 2 2 2 250003 1 3 2 3 3 4 4 4 1
2 1 3 8 1 1 7 1000002 1 5 2 3 3 3 1 2 0
1 2 4 4 3 2 2 500001 2 5 2 2 3 4 3 3 0
1 2 4 4 5 2 1 800002 2 1 2 3 3 3 3 3 0
2 2 6 7 5 1 2 3000003 3 2 3 2 3 4 3 3 0
2 2 7 7 4 1 2 2000002 2 4 3 2 3 3 3 3 0
1 1 2 1 2 2 5 30001 1 2 1 1 1 1 1 1 0
1 1 4 2 3 2 6 40001 1 1 1 4 2 1 1 1 0
2 2 4 4 2 1 10 1500003 2 2 1 2 3 4 4 4 1
2 2 7 8 1 2 3 1000001 2 1 1 5 2 5 4 4 1
1 1 4 6 1 3 2 200003 1 1 1 3 4 3 3 2 0
2 2 6 10 1 1 10 10000003 2 3 1 3 2 3 3 3 0
1
install.packages("ROCR")
1
2
3
4
package 'ROCR' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\MyCom\AppData\Local\Temp\RtmpM1usDv\downloaded_packages
1
install.packages("aod")
1
2
3
4
package 'aod' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\MyCom\AppData\Local\Temp\RtmpM1usDv\downloaded_packages
1
library(ROCR)
1
2
Warning message:
"package 'ROCR' was built under R version 3.6.3"
1
library(aod)
1
2
Warning message:
"package 'aod' was built under R version 3.6.3"
1
logit.model<-glm(repurchase_re ~ factor(propensity)+ factor(decision)+satisf_al, family = binomial, data=a)
1
summary(logit.model)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Call:
glm(formula = repurchase_re ~ factor(propensity) + factor(decision) +
    satisf_al, family = binomial, data = a)

Deviance Residuals:
    Min       1Q   Median       3Q      Max
-2.7048  -0.8706   0.3504   0.6925   3.1756

Coefficients:
                    Estimate Std. Error z value Pr(>|z|)
(Intercept)         -7.15812    1.13359  -6.315 2.71e-10 ***
factor(propensity)2  0.04172    0.38248   0.109   0.9131
factor(propensity)3  1.20851    0.52581   2.298   0.0215 *
factor(decision)2    0.09932    0.49970   0.199   0.8425
factor(decision)3    0.38632    0.44657   0.865   0.3870
satisf_al            2.08071    0.30725   6.772 1.27e-11 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 330.95  on 246  degrees of freedom
Residual deviance: 241.91  on 241  degrees of freedom
AIC: 253.91

Number of Fisher Scoring iterations: 5

satisf_al(전반만족도)가 높을수록 재구매 할 확률이 높다

log2

factor(propensity)3 ,구매성향이 비교적 고가의 제품을 선호하는 구매자들이 재구매 할 확률이 높다. (저가의 제품을 선호하는 구매자들보다)

1
2
exp(cbind(OR=coef(logit.model),confint(logit.model))) #신뢰구간 : confint
# OR : 오즈비로 변경해줌
1
Waiting for profiling to be done...
OR2.5 %97.5 %
(Intercept)0.00077851817.572483e-05 0.006469474
factor(propensity)21.04260406534.898358e-01 2.207607940
factor(propensity)33.34848421681.224880e+00 9.775048167
factor(decision)21.10441826354.125024e-01 2.952278838
factor(decision)31.47154840166.096242e-01 3.542608278
satisf_al8.01014456334.512294e+0015.057682143

결론 : satisf_al, 전반만족도가 1 정도 증가할때 재구매 확률이 8.0101445633배 증가한다.

factor(propensity)3 , 저가의 제품을 선호하는 구매자에 비해 고가의 제품을 선호하는 구매자가 3배 더 많이 구매할 의향이 있다,

1
install.packages('pscl')
1
2
3
4
package 'pscl' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\MyCom\AppData\Local\Temp\RtmpM1usDv\downloaded_packages
1
library(pscl)
1
2
3
4
5
6
7
Warning message:
"package 'pscl' was built under R version 3.6.3"Classes and Methods for R developed in the
Political Science Computational Laboratory
Department of Political Science
Stanford University
Simon Jackman
hurdle and zeroinfl functions by Achim Zeileis
1
pR2(logit.model) # 로지스틱회귀에서 R -squared 값으로만 모델이 적합한지 판단하기 어려움
1
fitting null model for pseudo-r2
1
2
3
4
5
6
	llh      -120.956334814774
	llhNull  -165.476660117844
	G2       89.0406506061402
	McFadden 0.269042928902269
	r2ML     0.30266438047444
	r2CU     0.410044303247615
1
a$pre<-logit.model$fitted.values #예측값 컬럼 만들어줌
1
a
gendermarriageedujobmincomeawarecountamountdecisionpropensityskinpromolocationsatisf_bsatisf_isatisf_alrepurchaserepurchase_repre
1 1 4 1 2 2 1 11000 2 1 1 1 2 5 2 2 2 0 0.05228313
2 1 4 9 2 1 4 30000 1 1 3 2 3 2 3 3 4 1 0.28577527
2 2 4 4 3 1 6 100000 3 2 3 2 2 4 5 4 4 1 0.83100316
2 2 4 7 5 2 6 65000 3 2 5 2 3 3 4 4 4 1 0.83100316
1 2 6 6 5 2 2 50000 2 2 3 2 3 3 3 3 3 0 0.31540893
2 2 2 7 3 1 2 100000 2 1 4 2 3 3 4 4 3 0 0.77972003
2 1 6 4 5 1 5 100000 3 2 5 2 3 2 2 3 4 1 0.38037538
1 1 6 4 5 4 10 39000 3 2 2 1 2 4 4 4 4 1 0.83100316
2 2 4 5 2 2 2 40000 3 2 3 2 3 3 4 4 4 1 0.83100316
2 2 4 5 2 1 2 100000 3 3 3 1 3 2 3 4 4 1 0.94044987
2 1 7 4 3 10 3 50000 1 3 1 2 3 3 3 4 4 1 0.91476263
1 1 2 5 3 2 1 30000 3 2 3 2 2 3 3 3 3 0 0.38037538
2 2 4 4 3 4 4 320000 2 3 3 3 2 4 4 4 4 1 0.92219445
2 2 4 4 2 3 2 200000 1 2 3 1 3 3 3 3 3 0 0.29436649
1 2 4 4 6 2 2 60000 3 2 1 2 5 3 3 3 4 1 0.38037538
2 1 4 5 2 2 3 50000 1 2 4 1 3 3 4 3 3 0 0.29436649
1 2 8 3 2 5 3 1000000 1 3 1 2 2 3 3 3 3 0 0.57261194
2 1 3 8 5 1 6 1500000 3 3 2 4 1 4 4 4 4 1 0.94044987
1 2 2 6 2 4 1 80000 2 3 1 2 3 3 3 4 4 1 0.92219445
1 1 4 4 3 8 3 30000 2 2 3 2 3 3 3 3 3 0 0.31540893
2 2 2 4 2 8 4 350000 3 2 3 2 2 3 4 4 4 1 0.83100316
2 2 4 7 6 1 4 250000 3 3 2 2 3 2 3 4 4 1 0.94044987
2 2 4 7 3 1 25 50000 2 2 1 2 3 3 4 4 4 1 0.78680230
2 2 2 9 1 1 1 20000 1 1 5 1 3 3 3 3 3 0 0.28577527
1 1 3 8 4 2 3 42000 1 2 3 1 3 3 3 4 4 1 0.76966815
1 1 4 8 4 2 3 42000 3 3 2 1 3 3 4 4 4 1 0.94044987
2 1 4 4 3 2 20 40000 3 1 5 2 3 2 4 4 4 1 0.82506274
2 2 4 4 6 1 6 70000 3 3 5 2 1 3 4 4 4 1 0.94044987
2 2 8 4 5 5 6 200000 2 1 4 1 1 4 4 4 3 0 0.77972003
1 2 4 2 6 2 1 200000 3 2 1 2 2 3 4 4 4 1 0.83100316
.........................................................
2 2 4 5 2 1 10 30000 2 2 2 4 3 3 4 4 4 1 0.786802301
1 2 4 6 6 7 5 50000 3 2 4 2 2 3 4 4 4 1 0.831003156
1 2 4 1 4 1 1 10000 1 3 1 1 1 5 1 3 1 0 0.572611941
1 1 4 4 3 2 1 10000 1 1 4 3 2 2 3 3 3 0 0.285775270
1 1 4 4 3 2 3 50000 3 2 5 2 3 2 4 4 4 1 0.831003156
1 2 2 5 4 2 1 60000 1 1 1 4 5 3 3 3 3 0 0.285775270
1 1 6 1 3 2 2 50000 3 2 5 1 2 4 4 3 4 1 0.380375375
2 2 6 4 6 1 3 500000 3 3 5 2 1 3 4 4 4 1 0.940449868
1 2 4 1 3 2 1 50000 3 2 1 2 3 2 3 3 3 0 0.380375375
2 2 6 3 4 1 1 100000 3 2 1 2 1 3 3 3 3 0 0.380375375
2 2 4 7 4 1 2 50000 3 1 5 2 2 3 2 3 4 1 0.370592284
2 2 4 4 2 2 12 20000 2 2 3 2 3 3 3 3 3 0 0.315408929
1 1 4 4 4 2 4 35000 2 2 1 3 2 3 3 4 4 1 0.786802301
1 1 4 4 4 2 4 30000 2 2 1 2 3 3 4 4 3 0 0.786802301
2 2 4 7 1 2 2 50000 1 1 3 2 5 3 4 4 4 1 0.762188740
2 2 4 7 1 2 3 50000 1 2 3 2 5 3 3 3 3 0 0.294366491
2 1 4 4 2 2 7 80000 3 2 3 2 2 3 3 3 3 0 0.380375375
1 1 4 1 3 2 6 20000 3 1 3 1 3 2 3 4 4 1 0.825062743
1 1 4 10 2 2 2 25000 3 1 3 2 3 3 4 4 4 1 0.825062743
2 1 3 8 1 1 7 100000 2 1 5 2 3 3 3 1 2 0 0.006840090
1 2 4 4 3 2 2 50000 1 2 5 2 2 3 4 3 3 0 0.294366491
1 2 4 4 5 2 1 80000 2 2 1 2 3 3 3 3 3 0 0.315408929
2 2 6 7 5 1 2 300000 3 3 2 3 2 3 4 3 3 0 0.663477744
2 2 7 7 4 1 2 200000 2 2 4 3 2 3 3 3 3 0 0.315408929
1 1 2 1 2 2 5 3000 1 1 2 1 1 1 1 1 1 0 0.006197395
1 1 4 2 3 2 6 4000 1 1 1 1 4 2 1 1 1 0 0.006197395
2 2 4 4 2 1 10 150000 3 2 2 1 2 3 4 4 4 1 0.831003156
2 2 7 8 1 2 3 100000 1 2 1 1 5 2 5 4 4 1 0.769668153
1 1 4 6 1 3 2 20000 3 1 1 1 3 4 3 3 2 0 0.370592284
2 2 6 10 1 1 10 1000000 3 2 3 1 3 2 3 3 3 0 0.380375375
  • 0.5 기준(50%)으로 구매할지 안할지 예측한다,

  • pre 컬럼값 중 0.5 보다 크면 구매 할 확률이 높고 0.5 보다 낮으면 구매 할 확률이 낫다,

1
a$preCroup <-recode(a$pre, "lo:0.5=0; 0.5:hi=1")
1
table(a$preCroup)
1
2
  0   1
105 142
1
a
gendermarriageedujobmincomeawarecountamountdecisionpropensityskinpromolocationsatisf_bsatisf_isatisf_alrepurchaserepurchase_reprepreCroup
1 1 4 1 2 2 1 11000 2 1 1 1 2 5 2 2 2 0 0.052283130
2 1 4 9 2 1 4 30000 1 1 3 2 3 2 3 3 4 1 0.285775270
2 2 4 4 3 1 6 100000 3 2 3 2 2 4 5 4 4 1 0.831003161
2 2 4 7 5 2 6 65000 3 2 5 2 3 3 4 4 4 1 0.831003161
1 2 6 6 5 2 2 50000 2 2 3 2 3 3 3 3 3 0 0.315408930
2 2 2 7 3 1 2 100000 2 1 4 2 3 3 4 4 3 0 0.779720031
2 1 6 4 5 1 5 100000 3 2 5 2 3 2 2 3 4 1 0.380375380
1 1 6 4 5 4 10 39000 3 2 2 1 2 4 4 4 4 1 0.831003161
2 2 4 5 2 2 2 40000 3 2 3 2 3 3 4 4 4 1 0.831003161
2 2 4 5 2 1 2 100000 3 3 3 1 3 2 3 4 4 1 0.940449871
2 1 7 4 3 10 3 50000 1 3 1 2 3 3 3 4 4 1 0.914762631
1 1 2 5 3 2 1 30000 3 2 3 2 2 3 3 3 3 0 0.380375380
2 2 4 4 3 4 4 320000 2 3 3 3 2 4 4 4 4 1 0.922194451
2 2 4 4 2 3 2 200000 1 2 3 1 3 3 3 3 3 0 0.294366490
1 2 4 4 6 2 2 60000 3 2 1 2 5 3 3 3 4 1 0.380375380
2 1 4 5 2 2 3 50000 1 2 4 1 3 3 4 3 3 0 0.294366490
1 2 8 3 2 5 3 1000000 1 3 1 2 2 3 3 3 3 0 0.572611941
2 1 3 8 5 1 6 1500000 3 3 2 4 1 4 4 4 4 1 0.940449871
1 2 2 6 2 4 1 80000 2 3 1 2 3 3 3 4 4 1 0.922194451
1 1 4 4 3 8 3 30000 2 2 3 2 3 3 3 3 3 0 0.315408930
2 2 2 4 2 8 4 350000 3 2 3 2 2 3 4 4 4 1 0.831003161
2 2 4 7 6 1 4 250000 3 3 2 2 3 2 3 4 4 1 0.940449871
2 2 4 7 3 1 25 50000 2 2 1 2 3 3 4 4 4 1 0.786802301
2 2 2 9 1 1 1 20000 1 1 5 1 3 3 3 3 3 0 0.285775270
1 1 3 8 4 2 3 42000 1 2 3 1 3 3 3 4 4 1 0.769668151
1 1 4 8 4 2 3 42000 3 3 2 1 3 3 4 4 4 1 0.940449871
2 1 4 4 3 2 20 40000 3 1 5 2 3 2 4 4 4 1 0.825062741
2 2 4 4 6 1 6 70000 3 3 5 2 1 3 4 4 4 1 0.940449871
2 2 8 4 5 5 6 200000 2 1 4 1 1 4 4 4 3 0 0.779720031
1 2 4 2 6 2 1 200000 3 2 1 2 2 3 4 4 4 1 0.831003161
............................................................
2 2 4 5 2 1 10 30000 2 2 2 4 3 3 4 4 4 1 0.7868023011
1 2 4 6 6 7 5 50000 3 2 4 2 2 3 4 4 4 1 0.8310031561
1 2 4 1 4 1 1 10000 1 3 1 1 1 5 1 3 1 0 0.5726119411
1 1 4 4 3 2 1 10000 1 1 4 3 2 2 3 3 3 0 0.2857752700
1 1 4 4 3 2 3 50000 3 2 5 2 3 2 4 4 4 1 0.8310031561
1 2 2 5 4 2 1 60000 1 1 1 4 5 3 3 3 3 0 0.2857752700
1 1 6 1 3 2 2 50000 3 2 5 1 2 4 4 3 4 1 0.3803753750
2 2 6 4 6 1 3 500000 3 3 5 2 1 3 4 4 4 1 0.9404498681
1 2 4 1 3 2 1 50000 3 2 1 2 3 2 3 3 3 0 0.3803753750
2 2 6 3 4 1 1 100000 3 2 1 2 1 3 3 3 3 0 0.3803753750
2 2 4 7 4 1 2 50000 3 1 5 2 2 3 2 3 4 1 0.3705922840
2 2 4 4 2 2 12 20000 2 2 3 2 3 3 3 3 3 0 0.3154089290
1 1 4 4 4 2 4 35000 2 2 1 3 2 3 3 4 4 1 0.7868023011
1 1 4 4 4 2 4 30000 2 2 1 2 3 3 4 4 3 0 0.7868023011
2 2 4 7 1 2 2 50000 1 1 3 2 5 3 4 4 4 1 0.7621887401
2 2 4 7 1 2 3 50000 1 2 3 2 5 3 3 3 3 0 0.2943664910
2 1 4 4 2 2 7 80000 3 2 3 2 2 3 3 3 3 0 0.3803753750
1 1 4 1 3 2 6 20000 3 1 3 1 3 2 3 4 4 1 0.8250627431
1 1 4 10 2 2 2 25000 3 1 3 2 3 3 4 4 4 1 0.8250627431
2 1 3 8 1 1 7 100000 2 1 5 2 3 3 3 1 2 0 0.0068400900
1 2 4 4 3 2 2 50000 1 2 5 2 2 3 4 3 3 0 0.2943664910
1 2 4 4 5 2 1 80000 2 2 1 2 3 3 3 3 3 0 0.3154089290
2 2 6 7 5 1 2 300000 3 3 2 3 2 3 4 3 3 0 0.6634777441
2 2 7 7 4 1 2 200000 2 2 4 3 2 3 3 3 3 0 0.3154089290
1 1 2 1 2 2 5 3000 1 1 2 1 1 1 1 1 1 0 0.0061973950
1 1 4 2 3 2 6 4000 1 1 1 1 4 2 1 1 1 0 0.0061973950
2 2 4 4 2 1 10 150000 3 2 2 1 2 3 4 4 4 1 0.8310031561
2 2 7 8 1 2 3 100000 1 2 1 1 5 2 5 4 4 1 0.7696681531
1 1 4 6 1 3 2 20000 3 1 1 1 3 4 3 3 2 0 0.3705922840
2 2 6 10 1 1 10 1000000 3 2 3 1 3 2 3 3 3 0 0.3803753750
  • 두번째 행은 예측하는데 실패함 (1으로 실제 구매했는데 (0.28577527 확률) 0으로 예측함)
1
2
model.fit1<-predict(logit.model, type='response')
# response 는 결과 종속변수를 저장하라는 의미임
1
model.fit2<-ifelse(model.fit1 >0.5,1,0)
1
model.fit3<-data.frame(model.fit2)
1
model.fit3
model.fit2
0
0
1
1
0
1
0
1
1
1
1
0
1
0
0
0
1
1
1
0
1
1
1
0
1
1
1
1
1
1
...
1
1
1
0
1
0
0
1
0
0
0
0
1
1
1
0
0
1
1
0
0
0
1
0
0
0
1
1
0
0
1
library(gmodels) #교차분석하기위해 사용함
1
2
Warning message:
"package 'gmodels' was built under R version 3.6.3"
1
CrossTable(x=a$repurchase_re, y=model.fit3$model.fit2, chisq=T)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
   Cell Contents
|-------------------------|
|                       N |
| Chi-square contribution |
|           N / Row Total |
|           N / Col Total |
|         N / Table Total |
|-------------------------|


Total Observations in Table:  247


                | model.fit3$model.fit2
a$repurchase_re |         0 |         1 | Row Total |
----------------|-----------|-----------|-----------|
              0 |        77 |        20 |        97 |
                |    31.021 |    22.938 |           |
                |     0.794 |     0.206 |     0.393 |
                |     0.733 |     0.141 |           |
                |     0.312 |     0.081 |           |
----------------|-----------|-----------|-----------|
              1 |        28 |       122 |       150 |
                |    20.060 |    14.833 |           |
                |     0.187 |     0.813 |     0.607 |
                |     0.267 |     0.859 |           |
                |     0.113 |     0.494 |           |
----------------|-----------|-----------|-----------|
   Column Total |       105 |       142 |       247 |
                |     0.425 |     0.575 |           |
----------------|-----------|-----------|-----------|


Statistics for All Table Factors


Pearson's Chi-squared test
------------------------------------------------------------
Chi^2 =  88.8528     d.f. =  1     p =  4.253117e-21

Pearson's Chi-squared test with Yates' continuity correction
------------------------------------------------------------
Chi^2 =  86.38583     d.f. =  1     p =  1.480422e-20
  • 실제 값과 예측 값의 교차표이다.

  • 구매안했는데 구매할 것으로 예측한 비율이 대략 20%이다.

  • 전체 값 247중에 예측으로 맞은 값 77+122 = 199 이다. 199/247 = 0.805668016194332, 대략 80%의 정확도를 보여준다.

1
library(ROCR)
1
pr <- prediction(model.fit1, a$repurchase_re)
1
prf<-performance(pr,measure = 'tpr', x.measure = 'fpr')
1
plot(prf) #ROC 커브를 그려줌

output_50_0

  • 볼록 뛰어나올수록 예측확률이 높다는 것이다. 위그래프는 볼록 뛰어나왔다.
1
auc<-performance(pr,measure = 'auc')
1
auc<-auc@y.values[[1]]
1
auc # 대략적으로 0.7이상이면 예측 확률이 좋다는 것이다.

0.848213058419244

Meta Info

Categories:

Published At:

Modified At:

Leave a comment