- 第58回(2023/02/27): 記事紹介 - Machine Learning for Snapchat Ad Ranking
- Snapchat社の事例紹介
- 広告のランキングに機械学習を適用させた例を紹介
この記事では,以下について説明している
- Snapchatの広告ランキングシステムの概要
- オンライン広告特有の課題
- モデル学習やデプロイ
- オンライン実験評価とモニタリング
Snapchatを使っているユーザー(Snapchatter)にどの広告を表示するかを決定するプロセスの紹介
- Ad eligibility filtering
- 広告のターゲティング,予算チェック,プライバシーや広告ポリシーの遵守を含むその他のフィルタリング
- Candidate generation
- 軽量なMLモデルでより少ない候補広告のセット(通常は数百から数千)を抽出する
- Heavy ML models
- 各候補広告について,広告を見た後にコンバージョンする確率や広告の推定オーガニックユーティリティなどのスコアを生成するモデル
- Auction
- MLモデルのスコア,広告主の入札額,広告の残予算,さまざまなビジネス・ルールを使ってオークションを行い,各広告の最終的な価値を算出し,最も価値の高い広告を選ぶ
- Feedback loop
- 広告とのインタラクションによって,MLモデルの学習データが生成される
- コストやレイテンシーの制約
- 何十億ものサンプルを使ってモデルの学習を行っていて,何兆もの予測をしている
- 大規模なモデルは学習と推論に多大なコストがかかるため,高度に最適化された学習プラットフォーム・推論プラットフォーム・モデルアーキテクチャの組み合わせが必要
- セレクションバイアス
- モデルが候補広告についてミスをした場合,オークションステージでは,最も関連性の高い広告ではなく,異常値のスコアを持つ広告が選ばれることになる
- 予測値のキャリブレーション
- モデルの予測値を真の値に近づける
- 広告在庫の問題
- 広告主が新しい広告キャンペーンを開始したり,古い広告キャンペーンを停止したりすることで広告在庫がどんどん変化する
- フィードバックループの遅延
- 広告を配信してから結果が出る(ラベルが生成される)までにタイムラグが発生する
- 分散学習
- 数十億行のレコードを処理する必要がある
- TPUを使っている
- 継続的なモデル更新
- 確率的勾配降下法を用いた定期的(毎時/毎日)に新しい学習データに対するモデル更新を実施
- 学習結果(チェックポイント)を保存する
- ワークフロー
- Kubeflowパイプラインを使用している
-
予算分割によるA/Bテスト
- Snapchatの広告オークションは,一方が広告主で,もう一方がSnapchattersという2面性のある市場
- 単純にA/Bテストを実施すると,介入群や対照群にそれぞれ広告主が該当されてしまうと不公平になる
- 各広告主の予算を N 分割し,各スナップチャッターを N 分割のうちの 1 つにランダムに割り当て,N 分割のうちの 1 つにのみ変更を適用する
-
オンラインモニタリング
- どんな予測の間違いもSnapの広告プラットフォームに対する広告主の信頼を損ねるだけでなく,莫大なコストに繋がる
- モデルの出力だけでなく特徴量のモニタリングも実施
- モデルの更新頻度(毎時/毎日)や膨大なモデル数(数百)を考えると監視するだけでも大変
- インシデントが発生した時の対応は気になる
- どんな予測の間違いもSnapの広告プラットフォームに対する広告主の信頼を損ねるだけでなく,莫大なコストに繋がる