728x90
#https://www.datamanim.com/dataset/03_dataq/typetwo.html
#분류
#서비스 이탈예측 데이터
#데이터 설명 : 고객의 신상정보 데이터를 통한 회사 서비스 이탈 예측 (종속변수 : Exited)

#데이터 불러오기
x_train = read.csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/churnk/X_train.csv",
                   stringsAsFactors = T)
y_train = read.csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/churnk/y_train.csv",
                   stringsAsFactors = T)
x_test = read.csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/churnk/X_test.csv",
                   stringsAsFactors = T)
x_label = read.csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/churnk/y_test.csv",
                   stringsAsFactors = T)

library(dplyr)
library(caret)
library(car)
library(lmtest)
#install.packages("ModelMetrics")
#install.packages("randomForest")
#install.packages("rpart")
library(ModelMetrics)
library(randomForest)
library(rpart)
library(e1071)


# 결측치 확인
#apply(is.na(x_train), 2, sum)
#apply(is.na(x_test), 2, sum)
#apply(is.na(y_train), 2, sum)

#학습데이터, 테스트데이터 전처리
x_train = merge(x_train, y_train, by='CustomerId')
x_test = merge(x_test, x_label, by='CustomerId')
x_test = x_test[, c(3, 6, 7, 8, 9, 10, 11, 12, 13)]
x_train = x_train[, c(3, 6, 7, 8, 9, 10, 11, 12, 13)]

#모델 생성
m1 = rpart(Exited~., data=x_train) #의사결정나무(rpart)
m2 = glm(Exited~., data=x_train, family="binomial") #로지스틱 회귀분석(glm)
m3 = randomForest(Exited~., data=x_train, ntree=100) #랜덤포레스트
m4 = svm(Exited~., data=x_train) #SVM

#예측
pd1 = predict(m1, newdata=x_test)
pd2 = predict(m2, newdata=x_test)
pd3 = predict(m3, newdata=x_test, type = "response")
                                      # - response: 예측값
                                      # - prob: 예측 확률의 행렬
                                      # - vote: 투표 결과 행렬
pd4 = predict(m4, newdata=x_test)

#AUC로 모델 평가
auc1 = auc(x_train$Exited, pd1)
auc2 = auc(x_train$Exited, pd2)
auc3 = auc(x_train$Exited, pd3)
auc4 = auc(x_train$Exited, pd4)
#우수한 AUC 값을 가진 모델을 테스트데이터 예측에 활용한다.

#ROCR 패키지를 사용하는 경우 아래와 같이 수행한다.

library(ROCR) #prediction, performance 평가를 위한 라이브러리 불러오기
prd1 = prediction(pd1, x_test$Exited)
prd2 = prediction(pd2, x_test$Exited)
prd3 = prediction(pd3, x_test$Exited)
prd4 = prediction(pd4, x_test$Exited)

#AUC로 모델 평가
pf1 = performance(prd1, measure = "auc")
pf2 = performance(prd2, measure = "auc")
pf3 = performance(prd3, measure = "auc")
pf4 = performance(prd4, measure = "auc")

cat("ctree auc:", pf1@y.values[[1]], '\n')
cat("glm auc:", pf2@y.values[[1]], '\n')
cat("randomForest auc:", pf3@y.values[[1]], '\n')
cat("svm auc:", pf4@y.values[[1]], '\n')
728x90