- 新規登録ユーザー500人の属性データから、未知データをあてはめて、1カ月後アクティブかどうか予測する
というお題をやってみました。
今回は、同じことを教師あり学習の代表格、ランダムフォレストでやってみたいと思います。
ランダムフォレスト(英: random forest, randomized trees)は、2001年に Leo Breiman によって提案された[1]機械学習のアルゴリズムであり、分類、回帰、クラスタリングに用いられる。決定木を弱学習器とする集団学習アルゴリズムであり、この名称は、ランダムサンプリングされたトレーニングデータによって学習した多数の決定木を使用することによる。対象によっては、同じく集団学習を用いるブースティングよりも有効とされる。
尾崎 隆
技術評論社
売り上げランキング: 141,877
技術評論社
売り上げランキング: 141,877
ランダムフォレストとは
- 計算機シミュレーションで作り出された多数の決定木や回帰木を組み合わせることで構成されるメソッド(木がたくさん揃うから森になる)
- いくつかのメソッドを組み合わせることによって、総合的なパフォーマンスをあげていくスタンス
- アンサンブル学習(集団学習)を扱う
- 学習データから何百~何千回もランダムサンプリングしたデータに対して、「弱学習機」と呼ばれる計算負荷の低い機械学習メソッドをあてはめる
- それらの複数の結果を平均することによって、ノイズに強くかつパフォーマンスに図くれた機械学習モデルを得ることができる
- 汎化性能では、SVMに比べてやや劣るものの、分類の正確さなどではSVMと同等もしくは場合によっては上回ることもある
新規ユーザーの属性データから、一か月後のアクティブユーザーを予測する
サポートベクターマシンの時と同様、同じことをランダムフォレストでやってみる。
- あるソーシャルゲームにおけるある日付の新規ユーザーの属性データから、一カ月後もゲームをプレーしてくれるユーザー数がどれくらいになるかを予測する
- 手元には、10000人分の過去ユーザーの属性データがあることを想定
- 年齢(age)
- 性別(sex)
- 新規登録当日にチュートリアルを突破したか(act1)
- ガチャを引いたか(act2)
- 流入経路(influx)
- 一か月後もアクティブか(label)
> install.packages("randomForest") #パッケージのインストール > require("randomForest") > d.rf <- randomForest(label~.,d.train) > print(d.rf) Call: randomForest(formula = label ~ ., data = d.train) Type of random forest: classification Number of trees: 500 No. of variables tried at each split: 2 OOB estimate of error rate: 6.29% Confusion matrix: No Yes class.error No 8819 181 0.02011111 Yes 448 552 0.44800000
- OOB(Out of Bag)errorは、このランダムフォレスト機械学習モデルにたいして交差検証法による性能検証をおこなった 結果得られた誤答率のこと
> d.test.rf.pred <- predict(d.rf, newdata=d.test) > summary(d.test.rf.pred) No Yes 472 28
- 前回、サポートベクターマシンで得られた予測結果と、ほとんど一緒の効果が得られている
> d.test.svm.pred <- predict(d.svm,newdata=d.test) > summary(d.test.svm.pred) No Yes 471 29
- 説明変数の重要度を算出できるimportance関数を使うと確認できる
> importance(d.rf) MeanDecreaseGini age 141.10899 sex 41.32354 act1 435.75920 act2 103.30706 influx 109.03018
- データの型が違うので、単純に比較することは難しいが、同じカテゴリ型の説明変数同士で比べると、チュートリアル突破、ガチャは、性別より重要であることがわかる
尾崎 隆
技術評論社
売り上げランキング: 141,877
技術評論社
売り上げランキング: 141,877