2017-11-26

Rで機械学習:ランダムフォレストを使って、新規ユーザーの属性データから、1カ月後のアクティブユーザー数を予測する

前回、Rで機械学習:サポートベクターマシン(SVN)を使って、新規ユーザーの属性データから、1カ月後のアクティブユーザー数を予測するで、サポートベクターマシンを使い、


  • 新規登録ユーザー500人の属性データから、未知データをあてはめて、1カ月後アクティブかどうか予測する


というお題をやってみました。
今回は、同じことを教師あり学習の代表格、ランダムフォレストでやってみたいと思います。

ランダムフォレスト(英: random forest, randomized trees)は、2001年に Leo Breiman によって提案された[1]機械学習のアルゴリズムであり、分類、回帰、クラスタリングに用いられる。決定木を弱学習器とする集団学習アルゴリズムであり、この名称は、ランダムサンプリングされたトレーニングデータによって学習した多数の決定木を使用することによる。対象によっては、同じく集団学習を用いるブースティングよりも有効とされる。

手を動かしながら学ぶ ビジネスに活かすデータマイニング
尾崎 隆
技術評論社
売り上げランキング: 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


注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...