이번에는 EDA를 한다음 의미있는 결과가 있으면 파생변수를 추가한후 랜덤포레스트 분석을 시행해보겠습니다.
> library(dplyr, caret, randomForest,pROC)
> set.seed(1234)
> x_train <- read.csv("C:/R/[Dataset] 작업형 제2유형/X_train.csv")
> y_train <- read.csv("C:/R/[Dataset] 작업형 제2유형/Y_train.csv")
> full <- left_join(x_train, y_train, id="cust_id")
Joining, by = "cust_id"
> full$최대구매액 <- full$최대구매액/10000
> full$총구매액 <- full$총구매액/10000
> full$환불금액 <- full$환불금액/10000
> full$환불금액 <- ifelse(is.na(full$환불금액),0,full$환불금액)
> full$주구매상품 <- as.factor(full$주구매상품)
> full$주구매지점 <- as.factor(full$주구매지점)
> full$gender <- as.factor(full$gender)
> full <- full[,-1] #cust_id 삭제
> full %>%
+ filter(총구매액 > quantile(full$총구매액, 0.8)) %>%
+ group_by(gender) %>%
+ summarise(count=n())
# A tibble: 2 x 2
gender count
<fct> <int>
1 0 545
2 1 155
> full %>%
+ filter(최대구매액 > quantile(full$최대구매액, 0.8)) %>%
+ group_by(gender) %>%
+ summarise(count=n())
# A tibble: 2 x 2
gender count
<fct> <int>
1 0 514
2 1 186
> full %>%
+ filter(환불금액 > quantile(full$환불금액, 0.8)) %>%
+ group_by(gender) %>%
+ summarise(count=n())
# A tibble: 2 x 2
gender count
<fct> <int>
1 0 555
2 1 145
> full %>%
+ filter(내점일수 > quantile(full$내점일수, 0.8)) %>%
+ group_by(gender) %>%
+ summarise(count=n())
# A tibble: 2 x 2
gender count
<fct> <int>
1 0 539
2 1 155
> full %>%
+ filter(내점당구매건수 > quantile(full$내점당구매건수, 0.8)) %>%
+ group_by(gender) %>%
+ summarise(count=n())
# A tibble: 2 x 2
gender count
<fct> <int>
1 0 459
2 1 240
> full %>%
+ filter(주말방문비율 > quantile(full$주말방문비율, 0.8)) %>%
+ group_by(gender) %>%
+ summarise(count=n())
# A tibble: 2 x 2
gender count
<fct> <int>
1 0 346
2 1 329
> full %>%
+ filter(구매주기 > quantile(full$구매주기, 0.8)) %>%
+ group_by(gender) %>%
+ summarise(count=n())
# A tibble: 2 x 2
gender count
<fct> <int>
1 0 383
2 1 303
분석결과 상위 20%기준으로 내점일수, 환불금액, 최대구매액, 총구매액 에서 큰차이를 보입니다. 따라서 이변수를 이용하여 파생변수를 만든후 랜덤포레스트를 통한 예측을 해보겠습니다.
> full$"파생변수" <- ifelse(full$내점일수 > quantile(full$내점일수, 0.8) |
+ full$환불금액 > quantile(full$환불금액, 0.8) |
+ full$최대구매액 > quantile(full$최대구매액, 0.8) |
+ full$총구매액 > quantile(full$총구매액, 0.8),0,1)
> full$"파생변수" <- as.factor(full$"파생변수")
> full$총구매액 <- scale(full$총구매액)
> full$최대구매액 <- scale(full$최대구매액)
> full$환불금액 <- scale(full$환불금액)
> full$내점일수 <- scale(full$내점일수)
> full$내점당구매건수 <- scale(full$내점당구매건수)
> full$주말방문비율 <- scale(full$주말방문비율)
> full$구매주기 <- scale(full$구매주기)
> idx <- sample(1:nrow(full), 0.7*nrow(full), replace=F)
> train <- full[idx,]
> test <- full[-idx,]
> rf.model <- randomForest(gender~.,
+ data=train,
+ ntree=50,
+ mtry=sqrt(10),
+ importance=T)
> pred.rf <- predict(rf.model, test[,-10],type="prob")
> auc(test$gender, pred.rf[,1]) # 남자로 예측할 확률 auc 값 확인
Setting levels: control = 0, case = 1
Setting direction: controls > cases
Area under the curve: 0.652
파생변수를 추가한후 결과는 0.652로 그냥 단순히 표준화만 했을때보다 auc가 약간 하락하였네요 ... 이 방법은 좋지 않은거같습니다.
'R' 카테고리의 다른 글
[빅분기 실기] 주석처리 주의!! (0) | 2021.06.16 |
---|---|
[빅분기 실기] 이상치 정제후 AUC 0.6688 (0) | 2021.06.12 |
[빅분기 실기] 작업형 2번 표준화후 RF AUC 0.6719 (0) | 2021.06.11 |
[빅분기 실기] 작업형 2번문제 EDA(데이터 뜯어보기) (2) | 2021.06.11 |
[빅분기 실기] pROC, ROCR의 차이점 (0) | 2021.06.11 |