実際にランダムフォレストを使って、クレームの重要度予測モデルを作成していきます。
フロー
https://www.kaggle.com/vatsal2020/to-the-top-v33
# ライブラリの読み込み
#library(data.table)
library(dplyr)
library(ggplot2)
library(randomForest)
# データの読み込み
#data <- fread("./data/case08_train.csv", showProgress = FALSE, data.table = FALSE)
data <- read.csv("./data/case08_train.csv",stringsAsFactors = F)
# IDは除外
data <- select(data, -id)
# カテゴリデータをダミー変数に置き換え
feature.names <- names(data)[1: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))
}
}
# すべてのデータを使うと時間がかかるので調整
model.dat <- data[1:50000,]
#model.dat <- data
# トレーニング用にサンプルをランダムに抽出
train.index <- sort(sample(1:nrow(model.dat), size = 40000))
#モデリング用と検証用にデータセットを分離
train <- model.dat[train.index,]
test <- model.dat[-train.index,]
ランダムフォレストでモデリング
# この処理は時間がかかります
# チューニング
train.tune <- tuneRF(train[,feature.names], train$loss, doBest = T)
## mtry = 43 OOB error = 4223181
## Searching left ...
## mtry = 22 OOB error = 4141152
## 0.01942364 0.05
## Searching right ...
## mtry = 86 OOB error = 4274765
## -0.01221453 0.05
# モデリング
train.rf <- randomForest(loss ~., data = train, mtry = train.tune$mtry )
# 検証用データにモデルを適用
test$pred <- predict(train.rf, test)
ggplot(test, aes(x = pred, y = loss)) +
geom_point(alpha = 0.6) +
xlim(0,25000) +
ylim(0,25000)
## Warning: Removed 8 rows containing missing values (geom_point).
「データから価値を創造する」一般社団法人データマーケティングラボラトリー
Copyright© DML All Rights Reserved.