非エンジニアPdMがVertex AIで広告配信用の機械学習モデルを作成してみた

この記事は GMOアドマーケティング Advent Calendar 2022 23日目の記事です。

こんにちは、GMOアドマーケティングの平木と申します。
今回は、非エンジニアPdMの自分が、Vertex AIで広告配信用の機械学習モデルを作成してみた体験について書いていきたいと思います。

Vertex AIとは

Vertex AIとはGoogle Cloud Platform 上における機械学習プラットフォームで、データの前処理からモデル構築、予測やデプロイまでを一元的に行うことができるプラットフォームです。
Vertex AIのAutoML を使用することで、コードを書かずにGUIベースの操作のみでモデルをトレーニングすることができるため、学習を兼ねて広告配信用の機械学習モデルを作成してみました。

何を予測する機械学習モデルを作成するか

今回は、広告配信用の機械学習モデルとしてより初歩的な段階である「ある商品/サービスに興味を持っている人と類似度が高いユーザ」を全体の行動データ(WEBページのアクセスデータ)の中から推測してみます。

GMOアドマーケティングでは1日数億件にものぼる広告配信ログがいわゆるビッグデータとしてGoogle BigQueryに収納されており、事業部側のメンバーもアクセス可能になっています。今回はこちらのログを加工し、モデルの学習用データに使用します。

前処理

今回は「ある商品/サービスに興味を持っている人と類似度が高いユーザ」を予測するにあたり、正解データとして全体の行動ログをある程度集計し、いくつかの特徴と「その特徴に紐づくユーザがある商品/サービスに興味を持っていたか」を予測します。

今回は特徴として、個人を特定できない識別子になっているCookieのID、WEBサイト訪問データ(ドメインレベル)、GMOアドマーケティング内で独自にWEBサイトの記事を解析して100以上のカテゴリに分類したID、そしてこれらの環境での広告表示数(インプレッション数)を利用するためにGogle BigQuery上で前処理を行いました。
ユーザがある商品/サービスに興味を持っていたか」は、該当商品/サービスのランディングページに訪問したことのあるユーザであれば「1」を、そうでない場合は「0」を付与する形で処理しています。
BigQuery上で前処理したデータを作成しておくことで、これをVertex AI上から直接参照することができるため、今回は結果をsandbox用のデータセットに保存しておきます。

モデル作成

データセットの準備

モデルを作成するために、さきほど作成した前処理データをデータセットとしてVertex AIに取り込みます。
ここでデータタイプを選択する必要がありますが、今回は「表形式」のデータで「分類」の予測を行います。
「作成」に進むと表形式のデータソースを選択する画面に遷移するため、ここでさきほどのsandbox用データセットに出力した前処理データを選択します。

モデルのトレーニング

データセットの準備が完了すれば、次にモデルトレーニングを行います。
最初に、モデルのトレーニングメソッドを選択します。ここで「AutoML」を選択することで、自動化されたモデルトレーニングを実行することができます。
ここでは全てVertex AIのデフォルト設定を利用し、完全にお任せモデルを作成します。
データセットのうち、どの部分をモデルの予測対象にするかを選択します。
今回はユーザがある商品/サービスに興味を持っていたか」を判断するため、該当のフラグ(flg)を0-1をそれぞれ0-1の範囲でScore化します。
最後に、モデルトレーニングに必要なノードの数を指定します。今回は最大1ノード時間の予算を利用して作成します。1時間ノードあたり21.252ドル(2022年12/19日現在)のコストがかかるため、過剰の追加は禁物です。
これでモデルの作成は完了です!作成したモデルは、約88万行のデータを使って学習し、2時間48秒でモデル作成が完了しました。

あまりに大きすぎる広告配信ログを必要な項目に絞って小さくするための前処理データ作成(SQL)以外、なんとここまで完全なノーコードでモデルが作成できてしまいました。

検証

モデルが完成したので、次はモデルの検証を行います。
今回はROC曲線などによる定量的な評価に加え、実際の予測結果を見て定性的な評価も行いました。

定量評価

今回は「ある商品/サービスに興味を持っている人と類似度が高いユーザ」の予測を行いましたが、全体の評価を見ると「0=興味が無い」と予測すればほぼ正解するモデルができあがっていることがわかりました。
これは多くのWEB閲覧ユーザの中で、たまたまあるサービス/商品に興味を持つ人の割合を考えると妥当な結果です。そのため、今回は「1=興味がある」結果に閉じてモデル評価を行います。

「1=興味がある」と判断した場合のROC AUCは0.678と、この部分だけ評価すれば当てずっぽうに予測する場合よりは良い結果が出ていると判断できるものの、PR曲線のAUC値が低いことから、定量面では良いモデルができたとは言えない結果になりました。

モデル作成に利用したデータを見てみると正例が3,709件に対して負例が878,006件と偏りが大きすぎることがわかりました。このあたりは、データの偏りや特徴ごとの正負例比率の調整を前処理で行うなどの改善点が考えられます。
(モデル作成は自動なので、前処理にちゃんとリソースを割こうということですね…!)
またVertex AIではユーザ単位のIDに加えて、よく訪問するWEBメディアのドメインも「ある商品/サービスに興味を持っている人と類似度が高いユーザ」を予測するうえで重要度が高いと判断されていました。
そして、逆にWEBメディアの記事カテゴリは相対的に重要ではないという結果も得られました。

定性評価

今回はVertex AIの「バッチ予測」という機能を用いて、実際にモデルで学習期間より未来のデータを予測することで、定性的に「どのようなドメインが今回調査した商品/サービスに興味を持つユーザの特徴訪問ドメインとして現れるか」を調査しました。
今回は「ある商品/サービス」として幼児向けの教育サービスを選定し、該当のサービスに興味を持っているユーザを予測していたため、主に20代後半〜30代の女性が訪問しそうなドメインが出現すれば、定性的には「良いモデル」と判断ができえるといえます。

Scoreや出現率を加味して特徴ドメインを抜き出したところ、以下のドメインが現れました。 これらのドメインを訪問するユーザ特徴をGoogle Authorized Buyersのコンソールから得られる情報やとSimilarWebにて調査してみたところ、
35-44歳の女性が圧倒的に多く、次いで25-34歳の女性がよく訪問するドメインであることがわかりました。
ママ友と“親友になれる”派が半数超え、子育て中に生じる友人関係に悩むママ達の本音とは

beauty.oricon.co.jp
「あの子、まさか…!?」車から幼い次女の叫び声が聞こえてきた!→走って車に戻ると…!?

lipine.jp
など、実際にサイトとトップページに訪問した際に表示されていた記事コンテンツを見ても、幼児向けの教育サービスに興味を持っているユーザと親和性は高そうです。

また厚生労働省の人口動態統計(2021年)では第1子出生時の母親の平均年齢が30.9歳となっていることからも、小さなお子様を持つ女性ユーザの特徴をとらえたドメインであるといえそうです。

非エンジニアな自分がVertex AIを試してみて良かったこと

今回は簡易的に前処理を行ったデータを学習させてみましたが、それだけでも「ある商品/サービス」に興味を持つ可能性が高いユーザは特定のWEBページの行動ログをもとにある程度予測可能であることがわかりました。
これをもしVertex AIによるAuto MLなしで実現しようと思うと、
  1. 事業部側で、どの特徴を学習すれば広告配信のモデルに活かせそうか仮説を立てる
  2. それらをエンジニアメンバーに共有し、優先度を決めた上で調査タスクを持ってもらう
  3. エンジニアメンバーは重要度が大きそうな特徴を探し出し、モデルの作成と定量評価を行う(←かなり大変)
  4. エンジニアからのフィードバックを受け、定性的にも評価を行う
といったステップを踏んでモデル開発のPDCAを回していく必要があります。

今回は上記の1の段階で「事業部側で感覚的にモデルに使えそうな特徴」を一旦入れてみて評価することができ、その結果として一気にステップ4まで進めることができました。
こういったモデル作成におけるPDCAを「こういったデータは意味がありそうだ」という直感に基づき従来よりかなり高速化した形で回すことができるため、モデル改善に関するハードルが大きく下がると考えています。

今回は前処理データに課題があったためいきなり利用できるモデルを作成できるには至りませんでしたが、4までステップを進めてから社内の機械学習エンジニアメンバーに相談を行うことで、エンジニアメンバーも意味がありそうな特徴を把握したうえでモデルトレーニングを開始できるため、PoC段階の開発工数削減にもつながりそうです。

私はこの記事を書く他にも複数のモデルを作成していたため作業には慣れており、今回はご紹介していないバックテスト(バッチ予測の結果を用いて、実際のクリック率改善や売上改善効果を算出する)まで含めておよそ5-6時間程度で完了できるようになりました。
(もちろん機械学習に長けたエンジニアメンバーがモデル作成/評価を行ったほうが良いので、実際は前処理から見直してもらっていますw)

事業部側でVertex AIを利用することにより、革命的にモデルの改善速度をアップさせることができると言えそうです。

さいごに

明日はC.Hさんによる「BigQueryのCloudSQL連携クエリを試してみました。」です。
引き続き、GMOアドマーケティング Advent Calendar 2022 をお楽しみください!

■学生インターン募集中!

https://note.gmo-ap.jp/n/nc42c8a60afaf

■エンジニア採用ページはこちら!

https://note.gmo-ap.jp/n/n02cbeb6edb0d

■GMOアドパートナーズ 公式noteはこちら!

https://note.gmo-ap.jp/