Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マイクロアドのアドテクを支える技術
Search
tosametal
October 05, 2019
Programming
0
99
マイクロアドのアドテクを支える技術
以下イベントの発表資料
https://camphor.connpass.com/event/146724/
tosametal
October 05, 2019
Tweet
Share
More Decks by tosametal
See All by tosametal
DigdagでETL処理をする
tosametal
0
4k
Qiita Career Meetup for Server Side Engineers
tosametal
4
4k
Other Decks in Programming
See All in Programming
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
120
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
たのしいparse.y
ydah
3
120
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
120
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
310
急成長期の品質とスピードを両立するフロントエンド技術基盤
soarteclab
0
930
「とりあえず動く」コードはよい、「読みやすい」コードはもっとよい / Code that 'just works' is good, but code that is 'readable' is even better.
mkmk884
3
140
Go の GC の不得意な部分を克服したい
taiyow
2
770
暇に任せてProxmoxコンソール 作ってみました
karugamo
1
720
42 best practices for Symfony, a decade later
tucksaun
1
180
선언형 UI에서의 상태관리
l2hyunwoo
0
160
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
1
210
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Scaling GitHub
holman
458
140k
4 Signs Your Business is Dying
shpigford
181
21k
Become a Pro
speakerdeck
PRO
26
5k
What's in a price? How to price your products and services
michaelherold
243
12k
It's Worth the Effort
3n
183
28k
Writing Fast Ruby
sferik
628
61k
Transcript
マイクロアドの アドテクを支える技術 2019/10/05 【マイクロアド】〜ネット広告を支える技術を知る〜 #microad_CAMPHOR MicroAd, Inc. システム開発本部 中野翔太
#microad_CAMPHOR アジェンダ • 基本の説明 • RTB ◦ 概要 ◦ オーディエンス
◦ 広告配信制御 ◦ 広告配信計測 • マイクロアドにおけるRTBの実現 ◦ データパイプライン ◦ DSPの広告選択 2
基本の説明 3 インターネット広告における
#microad_CAMPHOR 基本用語 広告主: 広告を出すことで製品の認知度を上げたりブランドの形成を行いたい 媒体主: 運営しているメディアに広告を掲載して利益を得たい インプレッション: 広告の表示のこと クリック: 広告のクリックのこと
コンバージョン: 広告により成果を達成すること LP: Landing Pageのこと 4 サイトを表示すると広告のインプレッションが発生 →ユーザはその広告をクリック →LPに遷移 →LPから会員登録を行いコンバージョン
#microad_CAMPHOR インターネット広告の種類 ◦◦広告という言葉も様々 • リスティング広告 • 純広告 • ネイティブ広告 •
動画広告 etc... 5
RTB 6
概要 7
#microad_CAMPHOR RTBとは • Real Time Biddingの略 • 広告枠が表示されるたびにオークションが行われ 最も高い値段をつけられた広告が表示される 8
リーマンショックで金融系のエンジニアが広告業界に 流れ込み、株取引の仕組みをインターネット広告に取 り入れたと言われている
#microad_CAMPHOR SSPとDSP RTBで誰がオークションを行うのか? SSP(Supply Side Platform): メディアの収益を最大化するプラットフォーム DSP(Demand Side Platform):
広告配信を最適化するプラットフォーム 9 SSP DSP 出来るだけ収益を 高くしたい 出来るだけ安く効 果的に配信したい メディア 広 告
10 SSP DSP1 DSP2 DSP3 サイトA 広告枠 STEP1 サイトが表示されSSPにリクエストが送られる SSPは接続しているDSPにリクエストを送る
RTBの処理フローのイメージ
11 SSP DSP1 DSP2 DSP3 サイトA 転職広告 10円 50円 30円
車広告 家広告 広告枠 STEP2 DSPはそれぞれ入札する広告とその金額を決定する RTBの処理フローのイメージ
12 SSP DSP1 DSP2 DSP3 サイトA 転職広告 10円 50円 30円
車広告 家広告 車広告 STEP3 DSPはSSPにレスポンスを返す SSPはその中から最も高い値段の付いた広告を選択し、 表示する RTBの処理フローのイメージ
#microad_CAMPHOR OpenRTB 13 SSP DSP1 DSP2 DSP3 - RTBにおける標準的な仕様 -
SSP⇄DSPのプロトコル - オブジェクトの定義
オーディエンス 14
#microad_CAMPHOR オーディエンス • 個人の識別性の無いデータ • 位置情報、購買履歴などの個人の行動や状態 • 代表的なものとしてCookie 15
#microad_CAMPHOR 1st/3rd party cookie 1st party: ユーザが訪問しているサイトのドメインから直接発行 3rd party: ユーザが訪問しているサイトのドメイン以外から発行
16 abcdefg.com 広告枠
#microad_CAMPHOR Cookie Sync 17 SSP Sync Table SSPとDSPという異なるシステム間でユーザを識別するために行わ れる RTBとは別のタイミングでクッキーシンクが行われている
シンクされたIDをRTB時に使ってターゲティングなどに利用 DSP SSP DSP AAA XXX BBB YYY CCC ZZZ 広告主のサイト SSPでID=CCCのユーザ パラメータにIDを乗せ DSPにリダイレクト DSPでID=ZZZのユーザ
#microad_CAMPHOR Cookieの扱い ITP(Intelligent Tracking Prevention) Safariでクロスサイトトラッキングを制限。3rd party cookieは1日で削除。 SameSite ChromeにおけるCookieの扱いを改善し、サイトがどのようにCookieを使用して
いるかの透明性を高める。 GDPR(General Data Protection Regulation) IPアドレスやCookieなどのオンライン上での識別子も個人情報として扱う。 18
広告配信制御 19
#microad_CAMPHOR 広告配信制御 広告に設定された条件に従い配信を行う • ターゲティング • フリークエンシー • リーセンシー •
アドベリフィケーション 20
#microad_CAMPHOR ターゲティング 位置情報ターゲティング デモグラフィックターゲティング リターゲティング etc... 21 広告主のサイト DSPの サーバ
ユーザのアクセス履歴を蓄積 配信時に参照 リターゲティングの例 広告主のサイトを訪れたユーザを対象に広告配信
#microad_CAMPHOR フリークエンシー 広告とユーザの接触回数や接触頻度 フリークエンシーブースト: 表示回数が増えるにつれ入札額を徐々に低くする 22 同じユーザに同じ広告は 10回までにしたい KVS KEY
VALUE AAA_1 5 AAA_2 0 BBB_1 10
#microad_CAMPHOR リーセンシー 広告とユーザの接触間隔や接触時間 リーセンシーブースト: 最終接触から一定時間内の場合を入札額を上げる 23 最終接触から1分以内の ユーザには多少高くても広 告を出したい KVS
KEY VALUE AAA_1 1569832969 AAA_2 1569832969 BBB_1 1569832969
#microad_CAMPHOR アドベリフィケーション 広告主のブランドイメージを損なうようなメディアに広告を配信していないか アドベリフィケーションツールを使用 24
広告配信計測 25
#microad_CAMPHOR Impression計測 1×1pxの透過画像(impビーコン)を広告に埋め込み広告表示時にリクエストを計測 サーバに送る 26 メディア 広告 Impression計測サーバ
27 SSP DSP1 DSP2 DSP3 サイトA 転職広告 10円 50円 30円
車広告 家広告 車広告 DSP2の Impression 計測サーバ impビーコンからのリクエスト DSPが落札額を知るために SSPでマクロの置換を行う
#microad_CAMPHOR Viewable Impression計測 • 広告が視認可能な範囲に入った場合のみ計測対象とする • マイクロアドではIntersection Observer APIを利用した実装 •
広告全体の何%以上表示された時だけ計測する、というような制御も可能 28
29 メディア メディア 広告 Viewable Impression 計測サーバ 初期表示時 広告は全体の20% だけ表示
スクロールされ 全体の50%以上が1 秒以上表示された時 計測サーバにリクエ スト 下にスクロール 閾値が50%の場合
#microad_CAMPHOR Product Impression計測 ダイナミック広告においては商品ごとの計測も可能 30 AD1 AD2 AD3 AD4 AD5
AD6 右のボタン をクリック 最初に表示される広告 ボタンクリック後に表示される広告
#microad_CAMPHOR Click計測 DSPやSSPのクリック計測サーバをリダイレクトし最終的にLPに到達する (クリック計測ツールを間に挟む場合もある) ※マイクロアドではImpressionから一定時間を超えたクリックは不正クリックと判定 ※その他BOTなどによる不正なクリックの動作を検出するために別途機械学習を利用しています 31 広告 SSP DSP
LP リダイレクト リダイレクト
#microad_CAMPHOR Conversion計測 • 広告主のサイトのコンバージョンポイントにコンバージョン計測用のタグを 設置 • 直接/ビュースルー/クリックスルーなど ◦ コンバージョンとみなされる期間は異なる ◦
後でAudienceIdでクリックとコンバージョンポイントへアクセスしたログを付き合わせてコ ンバージョンを判断 32
マイクロアドにおけるRTBの実現 33 データパイプラインとDSPにおける広告選択
データパイプライン 34
#microad_CAMPHOR データパイプライン 6TB/dayのデータを処理 Bidリクエスト 150億件/day、Impression 30億件/day 35
36 log log log App App App データパイプライン全体像
37 log log log App App App データパイプライン全体像 ストリーム バッチ
信頼性と性能のトレードオフ at least once ユニークIDによる重複排除
38 log log log App App App データパイプライン全体像 アプリケーションが ファイルに出力したログをリア
ルタイムで処理する
39 log log log App App App データパイプライン全体像 全てのログは1度kafkaに集約される リアルタイムで複雑な加工処理が必要な場
合はSparkStreamingを用いて加工し、 kafkaに入れ直す
40 log log log App App App データパイプライン全体像 kafkaからhadoopもリアルタイムで データを処理
hadoopに蓄積されたログに対して digdagを用いてETL処理を行う raw orc リアルタイムに転送され たデータはrawテーブル バッチでrawからorcに変 換する際に重複排除
#microad_CAMPHOR ワークフロー管理 ワークフロー管理に求められる機能 • スケジュール実行 • タスク同士の依存を制御 • 実行履歴の保持 マイクロアドではDigdagを使用
- ワークフローをコードで管理 - UIから再実行が可能 https://speakerdeck.com/tosametal/digdagdeetlchu-li-wosuru 41 digdagのワークフロー定義ファイル例
#microad_CAMPHOR ストリーム処理 • 断片的なアクセスデータでなく連続的な行動を追跡したい • その瞬間にCVする確率の高いユーザに配信したい • アクセスデータをマイクロアドの持つデータと組み合わせて価値の高い情報 にした状態で配信に使用したい •
2~5万QPS 42 トップ ページ 購入 ページ 商品 ページ 12:00:00 12:00:05 12:00:10 全体図のこの部分
DSPの広告選択 43
#microad_CAMPHOR DSPの広告選択 44 SSP DSP サイト 50円 車広告 車広告 ここで何をしているの
? (1)リクエストが有効か判定...不正なフォーマット、不正なサイト、不正なユーザ (2)配信可能な広告を選択...広告の設定やSSPのリクエスト内容に応じた広告を入札候補にする (3)広告の値付け...候補となった広告全てに金額をつける (4)入札広告の選択...値段のついた広告のなかから最も高いものを選択
45 デシリアライズ RTB リクエスト RTB レスポンス 不正リクエスト除 外 •Bot •不正Site/App
など シリアライズ 最高値の広告を 選択 RequestAdapter GateKeeper Targeting ResponseAdapter Selector Filter 1回のRTBリクエストごとに以下の処理を行う 条件に一致しない 広告を除外 配信条件に合致 する広告を選択
#microad_CAMPHOR リアルタイムな広告の値付け 46 Hadoop 配信アプリ 機械学習基盤 モデルRedis 特徴量Redis 配信アプリ(DSP)で定期的にモデルRedisを参照してモデルを更新 RTBリクエストごとに特徴量Redisから分散表現を取得しモデルに適用することで
確率を計算 確率をベースに諸々計算して入札額を算出する