Upgrade to Pro — share decks privately, control downloads, hide ads and more …

adserver 30min

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

adserver 30min

広告配信サーバの作り方を30分ほどで説明します。

Avatar for Daisuke Yamazaki

Daisuke Yamazaki

August 22, 2010
Tweet

More Decks by Daisuke Yamazaki

Other Decks in Programming

Transcript

  1. アジェンダ  自己紹介  オンライン広告システムとは  基礎編  広告エンジンの役割 

    Railsによる実装例  応用編  BT(行動ターゲティング)の実装  コンテキストマッチの実装  まとめ 3
  2. 自己紹介 山崎大輔 Twitter: @yamaz Blog : 最速配信研究会 http://d.hatena.ne.jp/yamaz/ 現在:株式会社スケールアウト 代表

    1日数億~を超えるような配信をカジュアルに行うための 広告配信システム「ScaleAds」の開発と販売およびコンサル かれこれオンライン広告業界で14年やってます 4
  3. 広告システムの悩み いろいろあります(その1) いろんなクリエイティブのパターンどうする?  通常バナー  RSS広告  動画広告 

    各種モバイル対応  その他新規デバイス対応 (wiiチャネル, オンラインゲーム…) 今回説明しません 7
  4. 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 スケジュールされている広告の中で 広告エンジンの動き
  5. 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なもののうち 広告エンジンの動き
  6. 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 その瞬間において一番優先度が高 いものを配信する 今回選ばれた広告 広告エンジンの動き
  7. 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
  8. 条件評価部 # 配信をしていい広告案件を抽出 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
  9. 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
  10. 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
  11. 優先度評価部 # 一番優先度が高いものを選択 .max{|sched1, sched2| sched1.priority<=>sched2.priority} 優先度を決定する要素  案件につけられた優先度 

    クリック単価が高い(優先度高)  PV達成がやばい(優先度高)  特別なユーザがアクセスした時(優先度高)  自社稿(優先度低) など 20