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
adserver 30min
Search
Daisuke Yamazaki
August 22, 2010
Programming
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
adserver 30min
広告配信サーバの作り方を30分ほどで説明します。
Daisuke Yamazaki
August 22, 2010
More Decks by Daisuke Yamazaki
See All by Daisuke Yamazaki
ゼロトラブルへの道
yamaz
23
9.1k
RWC2019 rubyによる超大量データ配信
yamaz
1
220
学び実践してきたこと
yamaz
1
380
スケールアウト再考
yamaz
1
390
RTB 30 min
yamaz
0
120
RailsとCで広告システムを作って起業した話
yamaz
1
370
robust logprocessing
yamaz
1
100
Other Decks in Programming
See All in Programming
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.4k
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
230
Go 1.27 における memory allocation の高速化
andpad
0
180
Android CLI
fornewid
0
220
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
230
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
490
yield再入門 #phpcon
o0h
PRO
0
1.1k
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
500
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
930
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
260
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
230
仕様駆動開発の消費期限
watany
20
8.3k
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
New Earth Scene 8
popppiees
3
2.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
490
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Amusing Abliteration
ianozsvald
1
250
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Mobile First: as difficult as doing things right
swwweet
225
10k
Code Reviewing Like a Champion
maltzj
528
40k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
990
How to build a perfect <img>
jonoalderson
1
5.9k
Transcript
30分でわかる広告配信 エンジンの作り方 (BTからコンテキスト広告まで) 1 株式会社 スケールアウト 山崎大輔
はじめに 1. 「広告エンジンって実際なにやってるの?」 というのを理解してもらうための内容になってます。 2. 今回説明する実装はコンセプト実装なので、 実際の実装とはかなり違います。 3. するどい突っ込みは大歓迎です。 2
アジェンダ 自己紹介 オンライン広告システムとは 基礎編 広告エンジンの役割
Railsによる実装例 応用編 BT(行動ターゲティング)の実装 コンテキストマッチの実装 まとめ 3
自己紹介 山崎大輔 Twitter: @yamaz Blog : 最速配信研究会 http://d.hatena.ne.jp/yamaz/ 現在:株式会社スケールアウト 代表
1日数億~を超えるような配信をカジュアルに行うための 広告配信システム「ScaleAds」の開発と販売およびコンサル かれこれオンライン広告業界で14年やってます 4
広告ってなんだ? 5 これ (バナー広告)
広告ってなんだ? 6 これ(テキストバナー) リロードすると広告が変わったりします
広告システムの悩み いろいろあります(その1) いろんなクリエイティブのパターンどうする? 通常バナー RSS広告 動画広告
各種モバイル対応 その他新規デバイス対応 (wiiチャネル, オンラインゲーム…) 今回説明しません 7
広告システム実装の悩み いろいろあります(その2) いろいろな配信パターンどうする? コンテンツマッチ(AdSenseみたいなの) ビヘイビアターゲティング(行動ターゲティング) 地域ターゲティング
PV売り 枠売り 上記の組み合わせ その他.. 今回これらを説明します 8
広告エンジンがやってること 配信エンジン ブラウザ 問い合わせ 最適な広告 営業さんは言います 「広告エンジンはユーザに対して 最適な広告を配信してます!」 9 それではわかりません><
最適な広告とは? 1. スケジュールされている広告の中で、 2. その瞬間に配信してもOKなもののうち、 3. その瞬間において一番優先度が高いもの 10
11 ID 期間 配信条件 達成状況 優先度 1 08/01 08/31 100万PV,
女性 11万PV 2 ….. 枠売り, 20~30歳代 10万PV 3 ….. 100万PV, 東京在住 11万PV 4 ….. 1000万PV 438万PV ~ ….. ….. ….. 80 ….. Context(不動産,賃貸) CPC@30円 予算10万 56000円 81 ….. BT(保険) 100万PV 48万PV 82 ….. BT(家電) 200万PV 190万PV スケジュールされている広告の中で 広告エンジンの動き
12 ID 期間 配信条件 達成状況 優先度 1 08/01 08/31 100万PV,
女性 11万PV 2 ….. 枠売り, 20~30歳代 10万PV 3 ….. 100万PV, 東京在住 11万PV 4 ….. 1000万PV 438万PV ~ ….. ….. ….. 80 ….. Context(不動産,賃貸) CPC@30円 予算10万 56000円 81 ….. BT(保険) 100万PV 48万PV 82 ….. BT(家電) 200万PV 190万PV 配信してもOKなもののうち 広告エンジンの動き
13 ID 期間 配信条件 達成状況 優先度 1 08/01 08/31 100万PV,
女性 11万PV 30 2 ….. 枠売り, 20~30歳代 10万PV 3 ….. 100万PV, 東京在住 11万PV 12 4 ….. 1000万PV 438万PV 100 ~ ….. ….. ….. 80 ….. Context(不動産,賃貸) CPC@30円 予算10万 56000円 81 ….. BT(保険) 100万PV 48万PV 35 82 ….. BT(家電) 200万PV 190万PV 14 その瞬間において一番優先度が高 いものを配信する 今回選ばれた広告 広告エンジンの動き
Railsによる実装例 class AdsvrController < ApplicationController render :text Schedules.find(:all) .grep{|sched| sched.can_delivered?}
.max{|sched1, sched2| sched1.priority<=>sched2.priority} .to_html end 14
Railsによる実装例(解説) class AdsvrController < ApplicationController render :text # 全スケジュールの中から Schedules.find(:all)
# 配信してよい案件を抽出して .grep{|sched| sched.can_delivered?} # 一番優先度が高いものを選択して .max{|sched1, sched2| sched1.priority<=>sched2.priority} # 最適なクリエイティブを作成 .to_html end # これを超高速に処理するのが広告エンジンです 15
条件評価部 # 配信をしていい広告案件を抽出 grep{|sched| sched.can_delivered?} def can_delivered? return false if
@now > end_at || @now < start_at # 広告案件に付与された複数の条件を評価 constrains.each do |cons| value ||= cons.call(@request) return true if value end return false end 16
BT(行動ターゲティング)の場合 BT_schedule = Schedule.new(start_at, end_at, :type => :cpm, :goal_pv =>
1000000) BT_schedule.add_constraint( Proc.new do user_behaviers.include?(‘shopping’) end ) all_schedules << BT_schedule 17
エンジンが取得可能な情報 配信エンジン ブラウザ 問い合わせ 18 •IP •Cookie •URL •browser •その他ヘッダ情報
ユーザDB ページ MetaDB IPDB
CM(コンテンツマッチ)の場合 CM_schedule = Schedule.new(start_at, :type => :cpc, :goal_budget => 1000000)
CM_schedule.add_constraint( Proc.new do @webpage.content_keywords.include?(‘car’) end ) all_schedules << CM_schedule 19
優先度評価部 # 一番優先度が高いものを選択 .max{|sched1, sched2| sched1.priority<=>sched2.priority} 優先度を決定する要素 案件につけられた優先度
クリック単価が高い(優先度高) PV達成がやばい(優先度高) 特別なユーザがアクセスした時(優先度高) 自社稿(優先度低) など 20
クリエイティブ最適化 # 最適なクリエイティブを作成 .to_html デバイス・表示ページにあわせた出力 ユーザに応じた最適化 これだけでまたえらく長い話になるので、 今回は割愛します
21
まとめ 広告配信エンジンのやっていることを 簡単に説明しました。 やってることの大半は条件評価と 案件優先度の比較です 22
まとめ オンラインメディアはマーケターさんがずっと追い求めてきた 「1to1ターゲティング」を「リアルタイムレスポンス」で 可能とする唯一のメディアです。 その中でオンライン広告システムはその一端を担うシステムで、 ビジネスとアカデミックが共存している領域なので、楽しいです。 今回なにかしら興味を持ってもらえたのなら幸いです メンバー募集中です!大量配信・大規模集計やりたい人はぜひ。 バイト・インターンも可です(
[email protected]
まで) 23