
# 처음부터 8009 건을 학습 데이터 (X_train.csv) 로 정시도착 가능여부 예측모델을 만들고,
# 학습 데이터 외의 평가 데이터 (X_test.csv)에 대하여 정시도착 여부를 예측
# 데이터 전처리
## 필요없는 변수 제거
df <- read.csv("sample_data/Train.csv")
df <- df[,-1] # ID 변수 제거
# 종속변수 factor 전환
df$Reached.on.Time_Y.N <- as.factor(df$Reached.on.Time_Y.N)
# 범주형 변수 factor 전환 (Warehouse_block, Mode_of_Shipment, Product_importance, Gender)
df$Warehouse_block <- as.numeric(as.factor(df$Warehouse_block), levels=c("D","F","A","B","C"))
df$Mode_of_Shipment <- as.numeric(as.factor(df$Mode_of_Shipment), levels=c('Flight','Ship','Road'))
df$Product_importance <- as.numeric(as.factor(df$Product_importance), levels=c('low','medium','high'))
df$Gender <- as.numeric(as.factor(df$Gender),levels=c('F','M'))
# train, test 분리
train <- df[1:8009,]
test <- df[8010:nrow(df),]
# df_train, df_val 분리 (7:3)
idx <- sample(1:nrow(train),0.7*nrow(train))
df_train <- train[idx,]
df_val <- train[-idx,]
CSV 파일을 읽을 때 stringsAsFactor 옵션을 True 로 설정하면 문자변수가 Factor로 모두 변환된다.
→ Factor 변환 전처리를 따로 할 필요가 없음 !
# 모델 훈련 및 예측
library(randomForest)
library(e1071)
library(caret)
library(ModelMetrics)
library(ggplot2)
set.seed(1234)
m1 <- randomForest(Reached.on.Time_Y.N~., data=df_train, probability=T) # 랜덤포레스트
m2 <- svm(Reached.on.Time_Y.N ~., data=df_train, probability=T) # SVM
pred1 <- predict(m1,df_val,probability = T, type="response")
pred2 <- predict(m2,df_val,probability=T)
caret::confusionMatrix(df_val$Reached.on.Time_Y.N,pred1)$overall[1] # 랜덤포레스트 accuracy : 0.71
caret::confusionMatrix(df_val$Reached.on.Time_Y.N,pred2)$overall[1] # SVM accuracy : 0.70
# 최종모델 - 랜덤포레스트
model <- randomForest(Reached.on.Time_Y.N~., data=train, probability=T)
pred <- predict(model,test,probability = T,type="prob")
head(pred)
# 정시도착 여부를 예측값을 CSV 로 저장하기
result <- data.frame(c(1:nrow(test)),pred[,2])
colnames(result) <- c("index","y_pred")
# head(result)
write.csv(result,"수험번호.csv",row.names=F)
read.csv("수험번호.csv")
ID 변수도 분석에 포함하여 CSV 파일로 저장한다면
# X_result <- cbind(test$ID, pred_prob)
# colnames(X_result) <- c("ID","pred")
# write.csv(X_result,"수험번호.csv",row.names=F)
# result <- read.csv("수험번호.csv")
# print(result)
'자격증 > 빅데이터 분석기사' 카테고리의 다른 글
| 변수 스케일링 함수 preProcess : Min-Max 정규화 in R (0) | 2022.12.02 |
|---|---|
| [회귀] 1. 회귀모델 구현하기 - mtcars 데이터셋 (0) | 2022.12.02 |
| [분류] 1. 분류 모델 구현해보기 in R (랜덤포레스트,SVM) (1) | 2022.12.02 |
| 연관분석 in R (0) | 2022.11.26 |
| K-means in R (0) | 2022.11.26 |