F@N Ad-Tech Blog

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

ネット広告CTR予測業務体験記

データ分析コースのインターンシップに参加させていただいた大庭です。 今回はデータサイエンティストとしての働き方を間近で体感するためにインターンに応募しネット広告のCTR予測について5日間取り組みました。

CTR予測とは

ネット広告が表示される流れとして、ユーザがサイトに訪問したときに広告リクエストがアドネットワークに送信されます。 そのリクエストに含まれる情報により、広告主側が入札金額を決定し、その入札に勝った広告主の広告がサイトに表示されます。

このとき、広告主側は当然クリックの確率が高いユーザへ広告を流したいので、リクエストに含まれる情報から広告が表示されたときのクリックの確率を予測するというのがCTR予測です。

CTR予測の流れ

  1. DBからデータを取得する
  2. データを特徴量に変換する
  3. 特徴量をモデルに入力し、学習させる
  4. 評価

本記事では2~4について言及していきます。

2. データを特徴量に変換する

DBから取得したデータを予測に役立ちそうな形式(特徴量)に変換します。 例えば、DBにtimeと呼ばれる広告が表示された時刻を記録したデータがある場合、hourのような時間帯の情報に変換したり、土日か平日かなどに変換するといったことが挙げられます。

今回私は、

  • 広告の表示時間から時間帯を抽出
  • 広告開始から何日経っているか
  • wifiの有無
  • 貰った処理例から変数を減らす

などを検討しました。

3. 特徴量をモデルに入力し、学習させる

2で変換した特徴量を機械学習のモデルに入力、学習させます。

モデルには

  • 主成分分析
  • ロジスティック回帰

を用いました。 カテゴリカルな変数が多く入力次元数が数千となったため、主成分分析で次元圧縮を行い、ロジスティック回帰に入力しました。

  • 学習データ: 2019年8月の連続する平日3日間
  • テストデータ: 学習データの次の日(平日)

しかし、実データが膨大かつ不均衡 (クリック率がとても低い) なので処理の負荷を考えて 、学習データに関しては負例を一定割合取り除き (ダウンサンプリング) 、テストデータに関しては正例・負例を問わず一定数割合取り除き (ランダムサンプリング) ました。

ちなみに、今回はテストデータ (1日分のデータ) は5%を残すランダムサンプリングをしたのですが、それでも膨大なデータが残っていました。

また、ハイパーパラメータの探索にOptunaを用いました。

4.評価

CTR予測ではクリックされる確率を予測したいのですが、データに存在するのはクリックされているかの 0/1 データしかないので、適切な評価指標を定めにくいという問題があります。 そこで、予測確率と正解ラベルのないクリック確率の近さを測るキャリブレーション精度により評価します。(こちらの記事をご参照ください。)

結果

期待キャリブレーション誤差
最初に貰った処理例の結果 0.00033
改良した処理の結果 0.00022

f:id:fan_t_oba:20190906172241p:plain
最初に貰った処理例の結果

f:id:fan_t_oba:20190906172311p:plain
改良した処理の結果

期待キャリブレーション誤差の結果、私が改良した処理の結果の方が誤差が小さいですが、キャリブレーションカーブを見ると対角線から離れたグループがより見受けられる結果となりました。 深くは検証していませんが、貰った処理例で使われている変数を減らしたのと、主成分分析が結果に出たかなと思っています。

今回はここで時間切れでしたが今後の展望として、 ロジスティック回帰以外のモデルの検証 特徴量の検討 を行いたいです。