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

adserver 30min

adserver 30min

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

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