library(randomForest)
library(dplyr)
library(pROC)
set.seed(1234)
x_train <- read.csv("data/X_train.csv")
y_train <- read.csv("data/y_train.csv")
x_test <- read.csv("data/X_test.csv")
full_train <- left_join(x_train,y_train, by="cust_id")
full_train$환불금액 <- ifelse(is.na(full_train$환불금액),0,full_train$환불금액)
full_train$gender <- as.factor(full_train$gender)
full_train$총구매액 <- scale(full_train$총구매액)
full_train$최대구매액 <- scale(full_train$최대구매액)
full_train$환불금액 <- scale(full_train$환불금액)
full_train$내점일수 <- scale(full_train$내점일수)
full_train$내점당구매건수 <- scale(full_train$내점당구매건수)
full_train$주말방문비율 <- scale(full_train$주말방문비율)
full_train$구매주기 <- scale(full_train$구매주기)
idx <-sample(1:nrow(full_train), 0.7*nrow(full_train), replace=F)
pre_train <- full_train[idx,]
pre_test <- full_train[-idx,]
rf.model <- randomForest(gender~.,
data=pre_train,
ntree=50,
mtry=sqrt(10),
importance=T)
pred.rf <- predict(rf.model, pre_test[,-11],type="prob")
auc(pre_test[,11], pred.rf[,2])
##############test 데이터 전처리시작
x_test$gender <- NA
final_test <- rbind(full_train[1,], x_test)[-1,]
final_test$환불금액 <- ifelse(is.na(final_test$환불금액),0,final_test$환불금액)
final_test$총구매액 <- scale(final_test$총구매액)
final_test$최대구매액 <- scale(final_test$최대구매액)
final_test$환불금액 <- scale(final_test$환불금액)
final_test$내점일수 <- scale(final_test$내점일수)
final_test$내점당구매건수 <- scale(final_test$내점당구매건수)
final_test$주말방문비율 <- scale(final_test$주말방문비율)
final_test$구매주기 <- scale(final_test$구매주기)
final_pred <- predict(rf.model, final_test[,-11], type="prob")
final <- data.frame(custid=final_test$cust_id,
gender=final_pred[,2])
write.csv(final,"1234.csv",row.names=F)
aaa <- read.csv("1234.csv")
head(aaa)
랜덤포레스트는 소수점이 둘째짜리까지 밖에 안나오는 단점이 있으며 중간에 rbind를 이용하여 수준수를 맞춰줘야한다
pre_test, pre_train을 나눠서 auc를 산출한 결과 약 0.65가 나옵니다. 조금더 높이기 위해서는 시험날에는 전체 데이터를 이용하여 학습한다음에 예측하는것도 괜찮을거같습니다.
library(randomForest)
library(dplyr)
library(pROC)
set.seed(1234)
x_train <- read.csv("data/X_train.csv")
y_train <- read.csv("data/y_train.csv")
x_test <- read.csv("data/X_test.csv")
full_train <- left_join(x_train,y_train, by="cust_id")
full_train$환불금액 <- ifelse(is.na(full_train$환불금액),0,full_train$환불금액)
full_train$gender <- as.factor(full_train$gender)
full_train$총구매액 <- scale(full_train$총구매액)
full_train$최대구매액 <- scale(full_train$최대구매액)
full_train$환불금액 <- scale(full_train$환불금액)
full_train$내점일수 <- scale(full_train$내점일수)
full_train$내점당구매건수 <- scale(full_train$내점당구매건수)
full_train$주말방문비율 <- scale(full_train$주말방문비율)
full_train$구매주기 <- scale(full_train$구매주기)
idx <- sample(1:nrow(full_train), 0.7 * nrow(full_train), replace=F)
pre_test <- full_train[-idx,]
glm.model <- glm(gender~.,
data=full_train,
family="binomial")
pred.glm <- predict(glm.model, pre_test[,-11], type="response")
auc(pre_test[,11], pred.glm)
### 전체 데이터를 가지고 학습할수밖에없다...
##test 전처리
x_test$gender <-NA
final_test <- rbind(full_train[1,], x_test)[-1,]
final_test$환불금액 <- ifelse(is.na(final_test$환불금액),0,final_test$환불금액)
final_test$주구매상품 <- as.factor(final_test$주구매상품)
final_test$주구매지점 <- as.factor(final_test$주구매지점)
final_test$총구매액 <- scale(final_test$총구매액)
final_test$최대구매액 <- scale(final_test$최대구매액)
final_test$환불금액 <- scale(final_test$환불금액)
final_test$내점일수 <- scale(final_test$내점일수)
final_test$내점당구매건수 <- scale(final_test$내점당구매건수)
final_test$주말방문비율 <- scale(final_test$주말방문비율)
final_test$구매주기 <- scale(final_test$구매주기)
pred_final <- predict(glm.model, final_test[,-11], type="response")
final <- data.frame(custid=x_test$cust_id,
gender=pred_final)
write.csv(final, "exam.csv", row.names=F)
aaa <- read.csv("exam.csv")
head(aaa)
tail(aaa)
로지스틱 회귀분석으로 분석할때는 사전에 pre_train, pre_test를 나눠서 하면 sample할때 수준수가 일정하게 추출되지 않아 에러가 뜨게 됩니다. 따라서 그냥 전체 데이터를 이용해 학습한 다음에 예측 하는 코드입니다. 이거는 전체데이터를 이용해서 학습한다음 예측한거라서 auc는 0.69정도 나오게 됩니다.
'R' 카테고리의 다른 글
[빅분기 실기] 주석처리 주의!! (0) | 2021.06.16 |
---|---|
[빅분기 실기] 이상치 정제후 AUC 0.6688 (0) | 2021.06.12 |
[빅분기 실기] 작업형2번 파생변수 추가후 랜덤포레스트 (0) | 2021.06.12 |
[빅분기 실기] 작업형 2번 표준화후 RF AUC 0.6719 (0) | 2021.06.11 |
[빅분기 실기] 작업형 2번문제 EDA(데이터 뜯어보기) (2) | 2021.06.11 |