GMOアドマーケティングのT.Nです。
アドテク業界ではCookieレス時代に向けて、
各社対応を進めているところだと思いますが、
弊社でもGoogleのPrivacy Sandboxについて調査を行い、定期的に勉強会を開催しています。
勉強会でFLoCについての発表を担当したため、今回はそれを記事にしました。
今回の記事は全体的に以下のページを参考にしています。
FLoCとは
FLoCの目的は、
3rd Party Cookieやフィンガープリントなどで個人のプライバシーに関する情報を集めることなく、
興味・関心に基づく広告を実現することです。
FLoCはFederated Learning of Cohortsの略です。
Federated Learningとは
日本語では連合学習。
一箇所にデータを集めて学習するのではなく、
エッジデバイスなどの分散環境で学習を行う手法です。
データを収集することなく学習を行えるという利点があります。
Cohortsとは
日本語では群、コホート。
Wikipediaによると、「共通した因子を持ち、観察対象となる集団のこと。」
まとめると、各ユーザーのブラウザで閲覧行動をもとに学習を行い、
興味・関心でクラスタリングして広告配信に活用するのがFLoCということになります。
Cohortのイメージ
コホートのクラスターは以下のようなイメージです。
画像はhttps://web.dev/floc/から引用。
各コホートには番号が割り当てられていて、
ユーザーの行動がどのコホートに含まれるか、ブラウザがモデルで計算します。
FLoC APIではコホートの番号を取得して使用できます。
FLoCのAPIの操作
今回はフラグを設定してChromeを起動して検証しました。
1 2 |
--enable-blink-features=InterestCohortAPI --enable-features="FederatedLearningOfCohorts:update_interval/10s/minimum_history_domain_size_required/1,FlocIdSortingLshBasedComputation,InterestCohortFeaturePolicy" |
ブラウザの起動
ターミナルで以下のコマンドを実行して、ブラウザを起動します。
コマンドの実行前に、Chromeのタブを全て閉じておいた方が良いです。
1 |
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-blink-features=InterestCohortAPI --enable-features="FederatedLearningOfCohorts:update_interval/10s/minimum_history_domain_size_required/1,FlocIdSortingLshBasedComputation,InterestCohortFeaturePolicy" |
今回はMacを使用していますが、その他のOSで起動する場合は以下が参考になります。
http://www.chromium.org/developers/how-tos/run-chromium-with-flags
FLoC API
以下のAPIの呼び出しによりコホートを取得します。
1 |
const { id, version } = await document.interestCohort(); |
idがコホートの番号で、
versionが使用されているFLoCアルゴリズムのバージョンです。
このidを活用することで、興味関心に基づく広告配信を実現します。
コホートの活用
以下の図がコホートの活用の流れです。
画像はhttps://web.dev/floc/から引用。
簡単に説明すると以下のようになります。
- FLoCサービスがモデルを作成する。
- ブラウザがFLoCサービスからモデルを取得し、モデルを使って閲覧履歴からコホートを計算する。
- ユーザーAが広告主サイトを訪れる。ブラウザからコホートを取得し、どのコホートがどの商品に興味を持ったかをアドテクプラットフォームに共有する。
- ユーザーBがメディアを訪れる。ブラウザからコホートを取得し、広告リクエストに含める。
- アドテクプラットフォームにリクエストが届く。リクエストに含まれるコホートと広告主サイトから取得したコホートをもとに適切な広告を返す。
- メディアに広告が表示される。
コホートを活用した広告選択については、
機械学習モデルを使用して入札価格を決めるDSPでは、
モデルのfeatureにコホートを使用することなどが考えられます。
機械学習モデルを使用しないアドネットワークなどでは、
広告選択時の重みづけに使用することなどが考えられます。
FLoCのオプトアウト
コホートの計算に使用されたくないサイトは、オプトアウトすることができます。
レスポンスヘッダーに以下を含めることでオプトアウトできます。
Permissions-Policy: interest-cohort=()
レスポンスヘッダーを実際に試してみました。
表示用HTML
画面表示時にJavaScriptでCohort APIを実行し、
結果をspanタグに追加する処理を行なっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Cohort</title> <script> (async function () { const {id, version} = await document.interestCohort(); document.querySelector("#id").append(id); document.querySelector("#version").append(version); })(); </script> </head> <body> <p> id: <span id="id"></span> </p> <p> version: <span id="version"></span> </p> </body> </html> |
サーバーサイドの処理
オプトアウトしない場合
サーバーサイドはFlaskで実装しています。
リクエストを受けてレスポンスを返すだけのシンプルな処理になっています。
1 2 3 4 5 6 7 8 9 10 11 |
from flask import Flask, make_response, render_template app = Flask(__name__) @app.route('/') def index(): response = make_response(render_template('index.html')) return response if __name__ == "__main__": app.run(host="0.0.0.0", debug=True) |
結果
コホートの計算に使用されているかまでは分かりませんが、
Cohort APIが有効になっていて、idとversionが取得できました。
idにはコホートの番号が表示されていますが、プライバシーの観点から伏せておきました。
FLoCアルゴリズムはchrome.1.1というバージョンが使用されているようです。
オプトアウトする場合
1 |
response.headers['Permissions-Policy'] = 'interest-cohort=()' |
の処理を追加し、レスポンスヘッダーにオプトアウトの情報を含めるようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 |
from flask import Flask, make_response, render_template app = Flask(__name__) @app.route('/') def index(): response = make_response(render_template('index.html')) response.headers['Permissions-Policy'] = 'interest-cohort=()' return response if __name__ == "__main__": app.run(host="0.0.0.0", debug=True) |
結果
Cohort APIでidとversionが取得できませんでした。
Cohort APIの実行時に以下のようなエラーが出るようになっています。
(index):8 Uncaught (in promise) DOMException: Failed to execute ‘interestCohort’ on ‘Document’: The “interest-cohort” Permissions Policy denied the use of document.interestCohort.
オプトアウトした場合はサイトの情報がコホートの計算に使われなくなる代わりに、
APIが無効になり、ユーザーのコホートも利用できなくなるようです。
まとめ
現在FLoCは試験的に運用されている段階ですが、
FirefoxなどのChrome以外のブラウザでは、
FLoCに反対しているものもあります。
FLoCの計算の過程でユーザーの閲覧履歴を収集することや、
FLoCの仕様でセンシティブなカテゴリーの扱いについて考慮されていても、
意図せずセンシティブな情報を明らかにしてしまう可能性があることなどが問題視されているようです。
FLoCが各ブラウザで実装される標準的な機能にならない可能性もありますが、
Privacy Sandboxの他の機能も含めて、今後の動向に注目していきたいです。