【ウーバーイーツ】配達データでランダムフォレスト【沖縄市】

ウーバーイーツ×沖縄市

ウーバーイーツ】配達データでランダムフォレスト【沖縄市

これまでにバギングとブースティングを用いて予測モデルを作成し、誤判別率を算出してみた。

【ウーバーイーツ】配達データでバギング【沖縄市】
【ウーバーイーツ】配達データでバギング【沖縄市】 前回、配達データで作成した決定木で判別を行ってみた。 結果、誤判別率が0.39となり、良くない数値となった。 今回は、この誤判別率を改善できるかやってみる。 参考...
【ウーバーイーツ】配達データでブースティング【沖縄市】
【ウーバーイーツ】配達データでブースティング【沖縄市】 前回、バギングモデルを作成して、誤判別率の改善を試みた。 結果、誤判別率が0.4となり、前々回の数値より悪くなった。 今回も前回同様、誤判別率を改善できるかやって...

結果は、バギングモデルの誤判別率が0.4、ブースティングモデルの誤判別率が0.36となった。

今回もこれまでと同様に、誤判別率を改善できるかやってみる。

参考書籍・資料

Rによるデータサイエンス(第2版):データ解析の基礎から最新手法まで | 金 明哲 |本 | 通販 - Amazon.co.jp
Amazonで金 明哲のRによるデータサイエンス(第2版):データ解析の基礎から最新手法まで。アマゾンならポイント還元本が多数。金 明哲作品ほか、お急ぎ便対象商品は当日お届けも可能。またRによるデータサイエンス(第2版):データ解析の基礎から最新手法までもアマゾン配送商品なら通常配送無料。

主な参考箇所 16 集団学習

概要

扱うデータの確認

ランダムフォレストについて調べる

ランダムフォレストを用いて予測モデルを作成

使用するデータ

使用するデータは、私の配達データ。

期間は、2021年5月10日~10月31日。

上記期間の総配達件数は、1528件。※ ダブルピックも1件とカウント。

扱うデータの確認

前回同様に、3店舗の配達データを学習用データとテストデータに分ける。

合計配達単価ベース料金配達調整金店舗
1301127207マクドナルド コザ十字路店(A)
2329132219マクドナルド コザ十字路店(A)
62406150284らあめん花月嵐 美里(B)
135632185230A&W 美里店(C)

学習用データ↓

storeベース料金配達調整金店舗
1A127207マクドナルド コザ十字路店
3A135373マクドナルド コザ十字路店
5A115272マクドナルド コザ十字路店

テスト用データ↓

storeベース料金配達調整金店舗
2A132219マクドナルド コザ十字路店
4A126181マクドナルド コザ十字路店
6A125378マクドナルド コザ十字路店

ランダムフォレストについて

今回は、ランダムフォレスト(RF)という手法を用いて、モデルの精度向上を目指す。

バギングとRFの大きな違いは、バギングではすべての変数を用いるが、RFでは変数をランダムサンプリングしたサブセットを用いるので、多次元データ解析に向いている点である。ランダムサンプリングする変数の数Mは、ユーザが自由に設定することができる。ブレイマンは、M としては変数の数の正の平方根をとることを勧めている。

Rによるデータサイエンス(第2版)

ランダムフォレストの説明文を見ると、「RFでは変数をランダムサンプリングしたサブセットを用いるので……」とある。今回のデータの説明変数は2つしかないため、ランダムフォレストを使う利点はなさそうに見える。

が、せっかくなので、やってみる。

ランダムフォレストで予測モデルを作成

書籍にならって、ランダムフォレストで予測モデルを作成してみる。

install.packages("randomForest")
library(randomForest)
set.seed(20) 
data.train <- read.table("clipboard",header = TRUE)
data.train$store <- as.factor(data.train$store)
data.test <- read.table("clipboard",header = TRUE)
data.test$store <- as.factor(data.test$store)
data.rf <- randomForest(store ~ .,data=data.train) 
data.rfp <- predict(data.rf,data.test[,-1]) 
(data.rft<-table(data.test[,1],data.rfp)) 
(1-sum(diag(data.rft))/sum(data.rft))

結果↓

ABC
A16311
B3295
C9118

Aと判別したデータが、実際にAだった場合が28個中16個。
Bと判別したデータが、実際にBだった場合が43個中29個。
Cと判別したデータが、実際にCだった場合が24個中8個。

正しく判別できた個数が53個、正しく判別できなかった個数が42個となった。誤判別率は0.44となった。

今まで一番悪い結果になった。

 

追記

ランダムフォレストを用いた予測モデルの詳細を見てみる。

木の数と誤判別率の関係を確認する。

用いた木の数と誤判別率との関係は、関数plotのグラフから読み取ることができる。横軸が木の数で、縦軸が誤り率である。次のコマンドで作成した図16.1から、木の数が200前後を超えると誤判別率は比較的安定することが読み取れる。

Rによるデータサイエンス(第2版)

plot(data.rf)

木の数約100以降から、誤り率が安定してきているのが分かる。

 

変数の重要度を確認してみる(2つしかないが、)。

RFは、判別・回帰における変数の重要度としてジニ分散指標を計算する。重要度は$importanceで呼び出す。また、関数varImpPlotを用いてグラフで示すことができる。

Rによるデータサイエンス(第2版)

> data.rf$importance

 MeanDecreaseGini
ベース料金 31.32463
配達調整金 29.90371

> varImpPlot(data.rf)

ベース料金の方が重要と分かる。

まとめ

今回は、ランダムフォレストを用いることで、予測モデルの誤判別率の改善を目指した。

結果、今まで最も悪い結果となった。おそらく、データセットが今回の手法に合っていなかったのだろう。

コメント

タイトルとURLをコピーしました