Classification / Prediction (분류/예측 : 이산형)
<font size=3 color='green'>용어의 유례 : 어리아이가 말을 배우는 과정 ( 엄마가 Supervisor ) </font>
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
A | B | C | D | E |
- ABCD : 학습 , E : 검증
- BCDE : 학습 , A : 검증
와 같은 방법으로 5가지의 경우의 수를 모두 입력
한 은행이 새로운 개인연금상품(PEP)을 신설하여 기존 고객들을 대상으로 가능한 많은 계좌를 유치하고자 한다.
고객의금융상품(PEP: Personal Equity Plan, 연금보험) 구매여부 예측에 의한 신규고객 창출
- 고객 프로파일 개발
- 다이렉트 메일 광고 효율성 제고
- 타겟 메일링에 의한 응답률 제고
분석 절차
- 1) 기존 고객 DB로부터 시험 메일 발송을 위한 표본 고객 목록을 추출
- 2) 새로운금융상품(PEP)의 제안 메일을 발송
- 3) 고객의 반응을 기록
- 4) R을 이용하여 캠페인 결과를 분석
학습용 데이터 300건 (pepTrainSet.csv)
검증용 데이터 200건 (pepTestSet.csv)
신규 고객 데이터 200건 (pepNewCustomers.csv)
train <- read.csv("pepTrainSet.csv", stringsAsFactors=F)
train <- subset(train, select=-c(id))
test <- read.csv("pepTestSet.csv", stringsAsFactors=F)
newd <- read.csv("pepNewCustomers.csv", stringsAsFactors=F)
train$pep <- factor(train$pep)
test$pep <- factor(test$pep)
str(train)
install.packages("caret",repos = "http://cran.us.r-project.org") #데이너 전처리 / 모델
install.packages("ROCR",repos = "http://cran.us.r-project.org") # 모형의 그래프 생성과 평가
install.packages("C50",repos = "http://cran.us.r-project.org") # 분류 분석, 의사결정나무 (Decision Tree)
library(caret)
library(ROCR)
library(C50)
?C5.0Control
c5_options <- C5.0Control(winnow = FALSE, noGlobalPruning = FALSE)
c5_model <- C5.0(pep ~ ., data=train, control=c5_options, rules=FALSE)
summary(c5_model)
## plot(c5_model, cex=1.0)
# 결과가 그림으로 찌그러져 나온다.
plot(c5_model, cex=1.0)
lm_model <- glm(pep~.,data=train,family=binomial)
summary(lm_model)
install.packages("e1071",repos = "http://cran.us.r-project.org")
library(e1071)
test$c5_pred <- predict(c5_model, test, type="class")
test$c5_pred_prob <- predict(c5_model, test, type="prob")
head(test)
str(test)
confusionMatrix(test$c5_pred, test$pep) # .No, .Yes생성하는
#pred.prob.No -> NO 의 확률
#pred.prob.Yes -> Yes의 확률
test$lm_pred <- ifelse(predict(lm_model, test, type="response") > 0.5, "YES", "NO")
test$lm_pred_prob <- predict(lm_model, test, type="response")
confusionMatrix(test$lm_pred, test$pep)
options(repr.plot.width = 5, repr.plot.height=5)
c5_pred <- prediction(test$c5_pred_prob[, "YES"], test$pep)
c5_model.perf <- performance(c5_pred, "tpr", "fpr")
lm_pred <- prediction(test$lm_pred_prob, test$pep)
lm_model.perf <- performance(lm_pred, "tpr", "fpr")
plot(c5_model.perf, col="red")
plot(lm_model.perf, col="blue", add=T)
legend(0.7, 0.7, c("C5","LM"), cex=0.9, col=c("red", "blue"), lty=1)
newd$c5_pred <- predict(c5_model, newd, type="class")
newd$c5_pred_prob <- predict(c5_model, newd, type="prob")
target <- subset(newd, c5_pred=="YES" & c5_pred_prob[ ,"YES"] > 0.8)
head(target[order(target$c5_pred_prob[,"YES"], decreasing=T),])
# write.csv(target[order(target$c5_pred_prob[,"YES"], decreasing=T), ], "dm_target.csv", row.names=FALSE)