FANCOMI Ad-Tech Blog

株式会社ファンコミュニケーションズ nend・新規事業のエンジニア・技術ブログ

CTR予測と精度向上をやってみた

初めまして、8月5日より5日間インターンでお世話になっている安村です。
今回、業務で蓄積された実データに触れてみたい!アドテク業界を知りたい!という思いでインターンに参加させていただきました。

1日目

午前は入社手続きや事業内容についてのお話や、社内案内などがありました。
午後からはインターンでの目標を設定し、本格的に業務が始まりました。
初めに頂いた入門資料をもとに、データベースからのデータの取得からロジスティック回帰を用いたCTR予測までの一連の流れを学びました。
この時、業務で蓄積された実データを扱えることにワクワクしつつ、1億行もあるデータに圧倒されていました。。。

2日目

学習データの傾向を掴むためにデータの可視化などをしていました。
ある特徴量において出現頻度に偏りがあることを発見し、説明変数が無駄に多くなっているのでは?などと精度向上のアイデアを考えていました。

3日目

説明変数が多くなっている問題があったため、ロジスティック回帰の代わりにLasso回帰を用いて学習を行ってみました。
学習データは5週間前から1週間前のデータ、テストデータは直近の1週間のデータを使用しています。また、データは不均衡データ(ほとんどクリックされない)であるので、学習データはダウンサンプリングしています。
下の表はテストデータにおけるロジスティック回帰とLasso回帰の評価指標を比較したものとなっています。

AUC LogLoss NE ECE
ロジスティック回帰 0.6862465 0.0285730 0.9784192 0.1156183
Lasso回帰 0.6375969 0.0290539 0.9948855 0.1114336

ECE(期待カリブレーション誤差)とは、予測確率と実際のクリック確率の誤差を間接的に表したものとなります。CTR予測では、クリックの有無の予測よりクリック確率が重要視されています。
実験結果より、AUC・LogLoss・NEの誤差が増加したもののECEが小さくなっていることより、CTR予測の精度が向上していることがわかります。

また、お昼にはピザランチがあり、エンジニアの方々とキャリアなどのお話が聞けて、非常に有意義な時間となりました。

4日目

他のモデルでも試してみようと新たにSGDにて学習を行いました。

AUC LogLoss NE ECE
ロジスティック回帰 0.6862465 0.0285730 0.9784192 0.1156183
Lasso回帰 0.6375969 0.0290539 0.9948855 0.1114336
SGD 0.6377311 0.0290611 0.9951336 0.1097917

Lasso回帰より精度が向上しました!

また、学習させている間にもデータの分析をしており、下図のように曜日によって学習データとテストデータのクリック数の分布に偏りがあることを見つけました。
テストデータの木曜日に急激にクリック数が増加していことがわかります。この日は8月1日で学生が休みに入ったため分布に偏りが出たのかもしれないなどと色々と考えていました。

f:id:r_yasumura:20190809184119p:plainf:id:r_yasumura:20190809184057p:plain

5日目

最終日の午前は、曜日によるクリック数の分布の違いについての検証を行いました。
新たに6月のデータを取ってきてSGDで学習させた結果が以下の表のようになります。

AUC LogLoss NE ECE
SGD (学習期間 : 7月) 0.6377311 0.0290611 0.9951336 0.1097917
SGD (学習期間 : 6月) 0.6375969 0.0290539 0.9948855 0.1004191

ECEの精度が向上していることがわかります。このことから、学習期間とテスト期間の特徴量の分布の違いが精度の悪化に影響していたと考えられます。

午後は、カリブレーションの改善方法であるProbability calibrationについて調べていました。
下記はその簡単なまとめとなります。

カリブレーションの改善について

Probability calibrationには主に二つの手法があります。

  • Platt Calibration
  • Isotonic Regression

ここでは、Isotonic Regressionによるカリブレーションの改善について説明します。

Isotonic Regression

Isotonic Regression(単調回帰)とは、あるデータに対して非減少関数を適合させるモデルのことです。
入力値f_iから予測値y_iを推定する式は以下のようになっています。
f:id:r_yasumura:20190809190113p:plain
ここで、mは単調増加関数です。
Isotonic Regressionの学習では、データに適合する単調増加関数mを求めることとなっています。

f:id:r_yasumura:20190809190256p:plain
[引用] : 1.15. Isotonic regression, https://scikit-learn.org/stable/modules/isotonic.html>

カリブレーションプロット

CTR予測では、クリックの有無(0/1, 目的変数)があるものの、クリック確率(真の予測値)は未知となっています。そこで、カリブレーションの評価方法としてカリブレーションプロットを用います。
カリブレーションプロットは、あるモデルからの出力結果を複数のグループにまとめ、グループ内での予測確率の平均と実際のラベル比率をプロットしたものです。対角線に近いほどカリブレーションが達成されていることを示しています。
また、カリブレーションの改善では予測結果を対角線に近づけるための処理を行います。

f:id:r_yasumura:20190809190939p:plain

Isotonic Regressionによるカリブレーションの改善

Isotonic Regressionによるカリブレーションの改善では、上記のグラフにおける予測確率の平均値を入力値f_iとし、実際のデータのラベル比率を出力値y_iするようなモデルの学習を行います。
これによって、あるモデルから出力された予測確率をIsotonic Regressionによって実際のデータのラベル比率に近づけることが可能となります。

参考文献

[1] Alexandru Niculescu-Mizil, Rich Caruana, "Predicting Good Probabilities With Supervised Learning", Appearing in Proceedings of the 22nd International Conference on Machine Learning, Bonn, Germany, 2005.

おわりに

今回が初めてのインターンで色々と不安を感じていましたが、メンターの片桐さんや内田さん・長田さんのおかげで楽しいインターンとなりました。本当にありがとうございました!
また、データ分析をしていく上でもっと技術があればもっと面白いんだろうなと思うことが多々あり、今後より勉強していきたいと思いました。

1週間お世話になりました!