こんにちは、弊社で2ヶ月間インターンとして働いているr_konumaです。
この記事では、2ヶ月間のインターンでやったことをまとめようと思います。
モデルを変えると精度は大きく変化するのか?
現状、弊社でCTR予測に使われている機械学習モデルがあるのですが、
他のモデルを使うことで精度が大きく変化するのかを検証しました。
2ヶ月間でやったこと
1. 大規模なデータベースへのアクセス
まず、CTR予測をするためのデータの取得します。
Treasure Dataにjupyter notebookから接続し、データをローカルの環境に引っ張ってきます。
ここで、初めてHive, Prestoに触れました。
(それぞれの言語に特徴があるので、処理したいクエリーに合わせて使い分ける必要がありました。)
CTR予測をするに当たって、クリックされたデータとクリックされなかったデータの割合には偏りがあったので、
そのまま訓練データとして扱うのには適していませんでした。
そこで、クリックされなかったデータをダウンサンプリングし、
訓練データとしました。
2. データ整形
引っ張ってきたままのデータでは学習することができないので、次にデータの整形をします。
ここは地道な作業になるので、もくもくとデータを綺麗にします。
具体的には、ダミー変数に置換したり、正規化を行ったりしました。
この段階では、データを綺麗にしつつ、
・どういうデータがあるのか
・あるデータはどういう形式で格納されているのか
・変数の値はどのようなものか, etc....
を見てたりしました。
3. データ中身を眺めてみる
せっかくデータを綺麗にしたので、少し中身を見てみました。
pythonのライブラリにはpandasがあるので、データを可視化が簡単にできました。
具体的には、デバイス比と報酬型広告かどうかの比率をみました。
デバイスはiPhoneが一番多く、また報酬型広告の方が多いことがわかりました。
さらに中身をみてみます。(ダウンサンプリングしているので現実の値とは異なります。)
クリック数が一番多いのはiPhoneですが、割合をみると全体的に大きな差があるようには感じられませんでした。
報酬型かどうかについては、報酬型である方がそうでない場合に比べて2倍違いました。
ただし、今回はダウンサンプリングをしているので実際は正確に2倍違う訳ではなく、
ここからわかることは、報酬型の方がクリックされる可能性があるということくらいです。
4. 複数のモデル作成と評価
評価方法には、ROC曲線とAUC値を用いました。
それぞれのモデルのROC曲線が違う色で示されており、右下にAUC値がまとめられています。
ROC曲線を見てみるとわかるかと思うのですが、どれもさほど大きな変化はありませんでした。
しかし、下表のように、学習にかかる時間はロジスティック回帰が一番短かったので、今回試したモデルの中では、ロジスティック回帰が一番性能の良いモデルという結果となりました。
学習モデル | 学習時間 |
---|---|
ロジスティック回帰 | 58.0907 [sec] |
LinearRegression | 280.7520 [sec] |
SGDRegressor | 64.0105 [sec] |
Ridge Regression | 89.7170 [sec] |
RandomForestRegressor | 504.0530 [sec] |
まとめ
- 今回試したモデルの中ではロジスティック回帰が一番パフォーマンスのよいモデルである。
- 機械学習モデルを変えるだけでは、精度に大きな影響はない。
- 学習をさせる前に、モデルに対する特徴を理解して適切なモデルをいくつかに絞った方がよい。
機械学習モデルに関する理解をした上でライブラリを使わなければせっかくオープンにされている複雑なプログラムも有効に活用できない、というのが今回CTR予測をしてみた感想です。