実際にランダムフォレストを使って、DMへの反応予測モデルを作成していきます。
フロー
参考:
https://www.kaggle.com/hmboxwala/trying-glmnet-1
# ライブラリの読み込み
library(readr)
library(dplyr)
library(ggplot2)
library(randomForest)
# データの読み込み
data <- read_csv("./data/case05_train.csv")
# 欠損値の処理
data[is.na(data)] <- -1
# データ型の変換
feature.names <- names(data)[2:ncol(data)-1]
for (f in feature.names) {
if (class(data[[f]])=="character") {
levels <- unique(c(data[[f]]))
data[[f]] <- as.integer(factor(data[[f]], levels=levels))
}
}
# すべてのデータを使うと時間がかかるので調整
data <- data[sample(nrow(data), 20000),]
#モデリング用と検証用にデータセットを分離
train.index <- sort(sample(1:nrow(data), size = 15000))
train <- data[train.index,]
test <- data[-train.index,]
ランダムフォレストでモデリング
# この処理は時間がかかります
# チューニング
train.tune <- tuneRF(train[,feature.names], factor(train$target), doBest = T)
## mtry = 43 OOB error = 23.5%
## Searching left ...
## mtry = 22 OOB error = 23.29%
## 0.008794326 0.05
## Searching right ...
## mtry = 86 OOB error = 23.59%
## -0.003687943 0.05
# モデリング
train.rf <- randomForest(as.factor(target) ~., data = train, mtry = train.tune$mtry )
# 検証用データにモデルを適用
test$pred <- predict(train.rf, test)
group_by(test,pred,target) %>%
summarise(count = n()) %>%
ggplot(aes(x = as.factor(target), y = count, fill = as.factor(pred))) +
geom_bar(stat = "identity")
「データから価値を創造する」一般社団法人データマーケティングラボラトリー
Copyright© DML All Rights Reserved.