IT/자격증

[빅분기] goorm 체험하기 제2유형 문제&풀이(R)-백화점 엑셀 데이터셋

꾼헨 2023. 8. 8. 11:47
728x90
반응형
아래는 백화점 고객의 1년 간 구매 데이터이다.
...
고객 3,500명에 대한 학습용 데이터(y_train.csv, X_train.csv)를 이용하여 성별예측 모형을 만든 후, 이를 평가용 데이터(X_test.csv)에 적용하여 얻은 2,482명 고객의 성별 예측값(남자일 확률)을 다음과 같은 형식의 CSV 파일로 생성하시오.(제출한 모델의 성능은 ROC-AUC 평가지표에 따라 채점)

 

library(randomForest)
library(caret)
library(dplyr)
library(e1071)

X_train = read.csv('sample_data/X_train.csv') 
y_train = read.csv('sample_data/y_train.csv')

X_test = read.csv('sample_data/X_test.csv') 


# head(X_train)
# head(y_train)
# head(X_test)

# summary(X_train) 

# 환불금액 결측치 제거 필요, 총구매액 0이상만 filter,최대구매액 0 이상filter
X_train$환불금액 <- ifelse(is.na(X_train$환불금액), 0, X_train$환불금액)
X_test$환불금액 <- ifelse(is.na(X_test$환불금액), 0, X_test$환불금액)

X_train$총구매액 <- ifelse(is.na(X_train$총구매액), 0, X_train$총구매액)
X_test$총구매액 <- ifelse(is.na(X_test$총구매액), 0, X_test$총구매액)

X_train <- X_train %>% filter(총구매액 >= 0)
X_train <-X_train %>% filter(최대구매액 >= 0)

X_test <- X_test %>% filter(총구매액 >= 0)
X_test <- X_test %>% filter(최대구매액 >= 0)

# str(X_train)


#factor형으로 변경
X_train <- X_train %>% mutate_if(is.character, as.factor)
X_test <- X_test %>% mutate_if(is.character, as.factor)

# str(X_train)

y_train$gender <- as.factor(y_train$gender)


train <- merge(X_train, y_train, by="cust_id")
test <- X_test

#head(train)
#head(test)

#summary(train)

# 분리
set.seed(123)
idx <- sample(1:nrow(train), nrow(train)*0.7)
train_data <- train[idx,]
valid_data <- train[-idx,]

# 정규화
train_pre <- preProcess(train_data, method="range")
valid_pre <- preProcess(valid_data, method="range")
train_scaled <- predict(train_pre, train_data)
valid_scaled <- predict(valid_pre, valid_data)

train_data <- train_scaled
valid_data <- valid_scaled


# 모델 생성
md.rf <- randomForest(gender~. -cust_id, data=train_data, ntree=300)
md.glm <- train(gender~. -cust_id, data=train_data, method="glm")
md.svm <- svm(gender~. -cust_id, data=train_data, cost=10, gamma=0.01)

# 예측
pred.rf <- predict(md.rf, newdata=valid_data)
pred.glm <- predict(md.glm, newdata=valid_data)
pred.svm <- predict(md.svm, newdata=valid_data)

# 정확도
acc.rf <- caret::confusionMatrix(valid_data$gender, pred.rf)$overall[1]
acc.glm <- caret::confusionMatrix(valid_data$gender, pred.glm)$overall[1]
acc.svm <- caret::confusionMatrix(valid_data$gender, pred.svm)$overall[1]

print(acc.rf)
print(acc.glm)
print(acc.svm)


# glm 채택. train 데이터셋 전체로 모델링
md.fit <- train(gender~. -cust_id, data=train, method="glm")
pred.fit <- predict(md.fit, newdata=test)

df <- data.frame(custid=test$cust_id, gender=pred.fit)

#head(df)

write.csv(df, "작업형2.csv",row.names=F)

 

다른 좋은 방법도 많겠지만 나는 이 방법으로 풀었다.

다양한 풀이 공유 차원에서 올려본다.

 

+ 엑셀은 구글링하면 다운로드 받을 수 있다.

+ 근데 문제에서는 성별의 예측값(남자일 확률)을 구하라고 했는데 결과값은 0, 1이다.. 확률이니 0.267 이런식으로 나와야 하는거 아닌가 싶은데 다른 분들도 이렇게 푸신 것 같아 일단 올린다.😓

 

 

[IT/자격증] - [빅분기]빅데이터 분석기사 6회 실기 후기(R/전공자/직장인/수험서/공부기간/후기/논란)

 

[빅분기]빅데이터 분석기사 6회 실기 후기(R/전공자/직장인/수험서/공부기간/후기/논란)

2023년 6월 24일(토) 에 빅데이터 분석기사 6회 실기시험이 시행되었다. 잘 본 것 같진 않지만 후회되지도 않는다 ! 👍 시험 공부 방법과 후기 등등(+논란)을 공유해보려고 한다. 수험서 2023 이기적

kkunhen.tistory.com

[IT/자격증] - [빅분기]빅데이터 분석 기사 6회 실기 합격 후기

 

[빅분기]빅데이터 분석 기사 6회 실기 합격 후기

빅분기 6회 실기 시험 후기 보기 >> https://kkunhen.tistory.com/2 빅데이터 분석기사 6회 실기 후기(R/전공자/직장인/수험서/공부기간/후기/논란) 2023년 6월 24일(토) 에 빅데이터 분석기사 6회 실기시험이

kkunhen.tistory.com

 

728x90
반응형