前言大家好,感謝主持人,今天我講的內(nèi)容是DSP廣告系統(tǒng)架構(gòu)及關(guān)鍵技術(shù),分享一下我過去幾年在做DSP廣告系統(tǒng)過程中的一些體會和經(jīng)歷,涉及到的內(nèi)容如果后續(xù)想做廣告系統(tǒng)的人員應(yīng)該是可以做一些參考的,后續(xù)如果有疑問在分享結(jié)束后也可以跟大家私下交流,下面我就開始今天的分享了。 廣告和網(wǎng)絡(luò)游戲是互聯(lián)網(wǎng)企業(yè)主要的盈利模式廣告是廣告主通過媒體以盡可能低成本的方式與用戶達成接觸的商業(yè)行為。也就是說按照某種市場意圖接觸相應(yīng)人群,影響其中潛在用戶,使其選擇廣告主產(chǎn)品的幾率增加,或?qū)V告主品牌產(chǎn)生認(rèn)同,通過長期的影響逐步形成用戶對品牌的轉(zhuǎn)化。 一個好的DSP系統(tǒng)需要滿足:
首先,DSP對其數(shù)據(jù)運算技術(shù)和速度要求非常之高。從普通用戶在瀏覽器中地址欄輸入網(wǎng)站的網(wǎng)址,到用戶看到頁面上的內(nèi)容和廣告這短短幾百毫秒之內(nèi),就需要發(fā)生了好幾個網(wǎng)絡(luò)往返(Round Trip)的信息交換。 Ad Exchange首先要向DSP發(fā)競價(bidding)請求,告知DSP這次曝光的屬性,如物料的尺寸、廣告位出現(xiàn)的URL和類別、以及用戶的Cookie ID等;DSP接到競價請求后,也必須在幾十毫秒之內(nèi)決定是否競價這次曝光, 如果決定競價,出什么樣的價格,然后把競價的響應(yīng)發(fā)回到Ad Exchange。 如果Ad Exchange判定該DSP贏得了該次競價,要在極短時間內(nèi)把DSP所代表的廣告主的廣告迅速送到用戶的瀏覽器上。整個過程如果速度稍慢,Ad Exchange就會認(rèn)為DSP超時而不接受DSP的競價響應(yīng),廣告主的廣告投放就無法實現(xiàn)。 其次,基于數(shù)據(jù)的用戶定向(Audience Targeting)技術(shù),則是DSP另一個重要的核心特征。從網(wǎng)絡(luò)廣告的實質(zhì)上來說,廣告主最終不是為了購買媒體,而是希望通過媒體與他們的潛在客戶即目標(biāo)人群進行廣告溝通和投放。 服務(wù)于廣告主或者廣告主代理的DSP,則需要對Ad Exchange每一次傳過來的曝光機會,根據(jù)關(guān)于這次曝光的相關(guān)數(shù)據(jù)來決定競價策略。這些數(shù)據(jù)包括本次曝光所在網(wǎng)站、頁面的信息,以及更為關(guān)鍵本次曝光的受眾人群屬性,人群定向的分析直接決定DSP的競價策略。DSP在整個過程中,通過運用自己人群定向技術(shù)來分析,所得出的分析結(jié)果將直接影響廣告主的廣告投放效果。 此次分享主要針對以下幾個方面,描述DSP廣告系統(tǒng)架構(gòu)及關(guān)鍵技術(shù):
程序化購買的特點下圖是在DSP產(chǎn)生之前和產(chǎn)生之后廣告行業(yè)的兩種最常見產(chǎn)業(yè)鏈 傳統(tǒng)的廣告投放模式的產(chǎn)業(yè)鏈?zhǔn)菑V告主通過廣告代理,以廣告網(wǎng)絡(luò)/聯(lián)盟為渠道在媒體網(wǎng)站展示廣告,達到接觸受眾的目的的過程。 這種模式的好處是媒體網(wǎng)站可以通過通過包段或CPS的模式可以售出自己的廣告位,但是這類售出是偏粗放型的,長期同類型的廣告投放,受眾會視覺疲勞,點擊率會下降,轉(zhuǎn)化也會隨之下降。為了能夠獲得更多的收益,媒體必須通過差異化銷售細(xì)分自己的廣告位和受眾。而事實上顯示廣告領(lǐng)域最初的定向投放的最初動機是供給方拆分流量以獲得更高的營收。好的位置,通過包段通常會供不應(yīng)求,但是對于長尾流量通常是會無人問津,即便是對于廣告主來說同一個潛在客戶在大媒體出現(xiàn)會有廣告主包段進行購買,但是在小網(wǎng)站出現(xiàn)就會沒人買。事實上潛在客戶在哪里出現(xiàn)對于廣告主都是同一個人,如果能顯示與客戶需求相吻合或接近的廣告就有可能產(chǎn)生轉(zhuǎn)化。在將優(yōu)質(zhì)廣告位包段售出后,如果對用戶有足夠的認(rèn)識,有足夠多不同類型的廣告主,在流量可以拆分到單次展現(xiàn)的購買粒度,就有可能依據(jù)不同的受眾定向為每個廣告主找到合適的人群和流量。 程序化購買顛覆了原有廣告產(chǎn)業(yè)鏈,形成了全新的產(chǎn)業(yè)鏈。 鑒于群里有很多人不是做廣告系統(tǒng)的,為了能夠在后續(xù)的介紹過程中更容易理解介紹的內(nèi)容,這里先介紹一些廣告行業(yè)中常見的一些概念。 DSP(Demand Side Platform),是廣告需求方平臺,DSP為廣告主提供跨媒介、跨平臺、跨終端的的廣告投放平臺,通過數(shù)據(jù)整合、分析實現(xiàn)基于受眾的精準(zhǔn)投放,并且實時監(jiān)控不斷優(yōu)化。 RTB(Real Time Bidding)實時競價是DSP、廣告交易平臺等在網(wǎng)絡(luò)廣告投放中采用的主要售賣形式,會在極端的時間內(nèi)(通常是50~100毫秒以內(nèi))通過對目標(biāo)受眾競價的方式獲得該次廣告的展現(xiàn),RTB的購買方式無論在PC端或是移動端均可以實現(xiàn)。 程序化購買(Programmatic Buying)根據(jù)廣告主定義的期望受眾,系統(tǒng)幫助其找出優(yōu)選的媒體來購買受眾,為廣告主提出最優(yōu)媒介采買計劃,通過程序化購買的方式執(zhí)行,并按照期望的周期反饋監(jiān)測結(jié)果,并對后續(xù)投放進行優(yōu)化。包括但不僅限于RTB購買。 最常見的DSP行業(yè)中的供需業(yè)務(wù)流,廣告主作為需求方,潛在客戶是最終的受眾,中間穿插著代理機構(gòu),DSP,AdNetwork,AdExchange,SSP和供應(yīng)方也就是媒體。 下圖是DSP平臺的廣告投放流程,投放過程中涉及到廣告受眾,媒體網(wǎng)站,adx和dsp,分別標(biāo)注了廣告投放各階段伴隨發(fā)生的事件。從1~7步之間只允許100ms之內(nèi)的延時,否則廣告受眾就會覺得網(wǎng)頁加載速度太慢而選擇離開。 在線廣告的核心問題需要在特定用戶,在指定上下文的環(huán)境下,找到最合適的廣告,進行投放,并盡可能產(chǎn)生轉(zhuǎn)化。 在線廣告的挑戰(zhàn) 大規(guī)模
用戶定向動態(tài)變化
上下文條件變化頻繁
DSP系統(tǒng)架構(gòu)
整個投放過程中其實還有一些其他的模塊出現(xiàn)如CookieMapping、反作弊,動態(tài)創(chuàng)意、網(wǎng)站分析系統(tǒng)。只不過這些系統(tǒng)不是在主干流程上,后續(xù)單獨進行描述和分析。 為了保證投放,DSP系統(tǒng)實現(xiàn)了多機房部署的結(jié)構(gòu),南北方機房分別在杭州和北京部署RTB引擎、點擊率預(yù)測與相關(guān)的展現(xiàn)點擊收集節(jié)點。投放活動相關(guān)數(shù)據(jù)通過Redis進行緩存,多機房進行準(zhǔn)實時同步,媒體展現(xiàn)點擊數(shù)據(jù)通過kafka隊列進行推送,通過Consumer進行消費統(tǒng)計,最后通過媒體數(shù)據(jù)分發(fā)集群分發(fā)到多個機房進行使用。 RTB投放引擎的架構(gòu)RTB引擎是DSP系統(tǒng)的核心,是實現(xiàn)高并發(fā)實時反饋的關(guān)鍵,RTB對外以HTTP服務(wù)形式暴露接口,當(dāng)媒體上的js被觸發(fā),adx/ssp收到j(luò)s請求后會將請求封裝成http頭+pb體(protocol buffer,谷歌定義的序列化數(shù)據(jù)交換格式)的方式作為客戶端連接RTB,RTB對http消息按照事先約定解包在內(nèi)部依靠相關(guān)數(shù)據(jù)進行計算,最終返回pb或json格式的出價和廣告代碼給廣告交易平臺。RTB 需要支持高并發(fā)(每天百億級別請求)和低延時(50ms之內(nèi)需要反饋)。 當(dāng)時我們的RTB采用Linux C++開發(fā),通過Adapter適配器層解耦適應(yīng)不同的SSP/adx,算法池內(nèi)部拆分成五層,五層之間相互正交,算法模塊允許熱插拔,編譯完成的動態(tài)鏈接庫可根據(jù)配置文件的變化實時進行加載和卸載,允許多算法鏈并行拆分流量進行A/B測試,流量處理過程中會對流經(jīng)不同算法鏈的流量打上不同的算法標(biāo)簽,并在后續(xù)展現(xiàn),點擊過程中持續(xù)帶上此標(biāo)簽用于后續(xù)效果的跟蹤和分析。 下面說一下在針對RTB進行架構(gòu)設(shè)計過程中涉及到的一些技巧: 由于一個dsp要接觸到盡可能多的流量和用戶才有可能找到符合廣告主定向的目標(biāo)受眾,那dsp一定要對接很多的adx和ssp,來接受盡可能多的流量。設(shè)計適配器層的目的就是將不同adx之間的流量格式差異消滅在適配器這一層,對于進入系統(tǒng)內(nèi)部的流量都一視同仁,簡化了rtb系統(tǒng)的復(fù)雜性。RTB系統(tǒng)在設(shè)計之初就考慮了AB測試的環(huán)節(jié),讓算法的效果能夠進行橫向比較,方便算法進行優(yōu)化。RTB本身是不帶狀態(tài)的,也就是說,它只能依靠外部的輔助系統(tǒng)提供的信息,如點擊率預(yù)測,人群定向和反作弊這類模塊提供的數(shù)據(jù)才能實現(xiàn)快速反饋的同事能正確反饋。 DMP 對于RTB的設(shè)計在后續(xù)提問和討論的環(huán)節(jié)我們再做進一步分析,下面講一下DSP系統(tǒng)中除了RTB之外的另外一個核心:DMP 首先需要定義一下廣告投放過程中關(guān)鍵的一些數(shù)據(jù): 廣告系統(tǒng)DMP數(shù)據(jù)處理的架構(gòu)跟大多數(shù)的大數(shù)據(jù)相關(guān)的系統(tǒng)很相似,基本上逃不開那幾樣?xùn)|西Hadoop,storm,redis等等: 數(shù)據(jù)處理部分結(jié)合了Hadoop的離線計算、Spark的批處理和Storm的流式計算。 HBase和MySQL用于最終結(jié)果落地用于前端查詢。 ElasticSearch 有準(zhǔn)實時索引,用于明細(xì)數(shù)據(jù)實時查詢和時間序列歷史回溯統(tǒng)計。 Spark內(nèi)置的機器學(xué)習(xí)算法庫MLLib主要使用分類,聚類KMeans,協(xié)同過濾,決策樹,邏輯回歸。 由于之前在群里的分享中,王新春@大眾點評 ,王勁@酷狗音樂 講了很多storm實時處理和大數(shù)據(jù)架構(gòu)的內(nèi)容,他們二位都是大數(shù)據(jù)領(lǐng)域的大佬了,我在這里就不班門弄斧了,簡單提一下廣告行業(yè)里是怎么做的,基本上大同小異,大家用的東西都差不多。 對于廣告投放要投放的目標(biāo),落實在dmp中就是需要找出相應(yīng)的受眾定向,下面簡單分析一下幾類受眾定向: 上圖是廣告有效性模型根據(jù)受眾定向的定性評估表,水平方向是定向技術(shù)在廣告信息接受過程中所起作用的階段,垂直方向是大致的效果評價(從下往上效果依次升高)。 按照計算框架不同這些受眾定向可以分為三類:
其中:地域定向、頻道定向和上下文定向?qū)儆趖(c)的定向方式;人口屬性定向、行為定向?qū)儆趖(u)的定向方式; 人口屬性主要包括年齡,性別,收入,學(xué)歷等;頻道定向主要是針對媒體側(cè)特點,對相應(yīng)受眾進行劃分;上下文定向主要是根據(jù)當(dāng)前網(wǎng)頁的內(nèi)容上下文推送相關(guān)廣告;行為定向是根據(jù)用戶歷史訪問行為,了解用戶喜好,進而推送相關(guān)廣告;精確位置定向是在移動設(shè)備上根據(jù)精確的地理位置投放廣告,更聚向與地域性非常強的的本地生活類廣告主; 重定向是對特定廣告主一定時間段內(nèi)訪客投放廣告以提升效果的廣告投放方式,人群規(guī)模由廣告主固有用戶量和媒體重合量共同決定;新客推薦是在重定向規(guī)模太小,無法滿足廣告主接觸用戶需求的情況下,以重定向用戶為種子,根據(jù)廣告平臺數(shù)據(jù)積累,為廣告主找出行為相似用戶的定向條件。 用戶畫像的方法接下來基于上面提到的積累受眾定向介紹一下用戶畫像的方法 我們能夠看到用戶畫像其實也就是對于用戶特征的提取,涉及到人口,設(shè)備,運營商,位置以及用戶的瀏覽,點擊購買等行為數(shù)據(jù)。用戶畫像是通過對用戶特征的提取對用戶行為進行定性和定量的描述,形成:【用戶ID:用戶標(biāo)簽:標(biāo)簽權(quán)重】形式的用戶畫像標(biāo)簽,在廣告投放過程中,根據(jù)提取流量對應(yīng)用戶權(quán)重較高的若干個標(biāo)簽反向?qū)V告主進行篩選,找出適合流量特點的廣告素材。 用戶標(biāo)簽用于廣告主對于受眾的選擇,而權(quán)重用于在海量用戶標(biāo)簽里選取重點的標(biāo)簽進行投放。 同時要注意用戶的畫像隨時間的推移會有衰減,需要在用戶畫像的過程中考慮時間衰減的因素,因為用戶的愛好和習(xí)慣會隨著時間變長而有變化,同時數(shù)據(jù)的時效性也決定了用戶畫像的準(zhǔn)確程度,進而影響廣告的投放。 事實上在廣告平臺中收集到的最多的數(shù)據(jù)是用戶的瀏覽數(shù)據(jù),在拿到這么多的瀏覽數(shù)據(jù)的情況下,想要分析出用戶的愛好和興趣以及需求,那就需要對網(wǎng)頁的內(nèi)容進行分析和抽取,下面介紹一下用戶畫像中非常重要的行為標(biāo)注部分的架構(gòu): 用戶在瀏覽一系列網(wǎng)站的過程中是多少會帶著一些目的性進行瀏覽的,即便是沒有明確目的,也會帶有一些個人喜好,有了這些目的和喜好,就會進一步縮短我們在推送廣告過程中對于用戶定向的選擇難度。上圖就是在上下文定向中對網(wǎng)頁關(guān)鍵字提取的子系統(tǒng)的架構(gòu)?!旧舷挛亩ㄏ颉靠梢酝ㄟ^網(wǎng)頁關(guān)鍵字提取,建立一個cache,根據(jù)URL建立對應(yīng)標(biāo)簽,當(dāng)廣告請求到來時,命中相應(yīng)URL則返回cache的命中內(nèi)容,如果URL未緩存則返回空集合,同時將URL添加到后臺抓取隊列,在URL被抓取,并打上標(biāo)簽存入cache,為cache設(shè)置TTL,當(dāng)長期不訪問則將該URL的記錄清楚,而熱點內(nèi)容URL的關(guān)鍵詞是始終被緩存的,運行較長的時間則大多數(shù)熱點URL大多會被緩存。在抓取到內(nèi)容之后,需要對網(wǎng)頁內(nèi)容進行內(nèi)容挖掘,在挖掘的過程中有以下幾個方案可以被選?。?/p> 網(wǎng)頁文本內(nèi)容通過擴展語境,引入更多文本進行挖掘;利用語義分類樹;建立主題模型。 我們在上面提到了在線廣告的核心問題其實是找上下文,用戶,廣告三者之間的最恰當(dāng)?shù)钠ヅ洹?/p> 在展示類廣告中比較重要的一個核心考核點就是點擊率,因此點擊率預(yù)測模塊在DSP中是非常重要的部分 CTR預(yù)估涉及到三種角色:受眾用戶,媒體,廣告主 預(yù)估的目標(biāo)是為特定的受眾用戶再給定的媒體環(huán)境下找到最合適的廣告,對媒體來說實現(xiàn)收入最大化,即按照eCPM排序的基本原則來排序。 最簡單的CTR預(yù)估的模型,根據(jù)歷史日志,統(tǒng)計出 存在問題:基于統(tǒng)計數(shù)據(jù),對舊廣告效果還可以,但對冷啟動的廣告沒有預(yù)測能力。
排序模型以預(yù)測結(jié)果為基礎(chǔ),廣告排序模型有如下幾種:
廣告行業(yè)的反作弊作弊背后必然有一個或者一堆的人從眾有獲利,比如制造垃圾站掛廣告獲利的總是扎堆出現(xiàn)的。如果你抓到了一個網(wǎng)站流量異常,在用工具刷量,那肯定不會只是這一個網(wǎng)站在用這個模式在刷量;如果一個人有多個網(wǎng)站,如果有一個網(wǎng)站在刷量,那他的其他網(wǎng)站也應(yīng)該檢查一下了。 在廣告反作弊的過程中,為了找出刷量的垃圾站背后都有哪些人,這些人有哪些網(wǎng)站,針對DSP平臺流量80%的網(wǎng)站域名去重,通過whois信息查詢到域名注冊郵箱,歸類出哪些域名屬于哪個注冊郵箱,發(fā)現(xiàn)其中一個刷量,則對同一郵箱下的其他域名進行嚴(yán)查。 上圖是主要的一些廣告反作弊的思路,廣告作弊是有成本的,有人作弊,還是背后有利益驅(qū)動,找出利益鏈條是反作弊的關(guān)鍵 P2P流量互刷互刷作弊有代表性的軟件是:流量寶和流量精靈 均通過客戶端軟件向服務(wù)器提交互刷任務(wù)請求,客戶端收到服務(wù)器分發(fā)的互刷任務(wù)后執(zhí)行隱藏的瀏覽任務(wù),每天可達到數(shù)千個IP的訪問量,IP布局分散,UA隨機生成,很難通過瀏覽記錄尋找作弊痕跡?,F(xiàn)在唯一有效的反作弊方法需要通過蜜罐主機進行跟蹤和分析。下面介紹一下我們對于p2p刷量所采用的蜜罐主機的結(jié)構(gòu): 其中虛線框中是我們的的蜜罐系統(tǒng),虛線框外面的灰色部分是我們要尋找的作弊目標(biāo) 由于流量寶、流量精靈一類的刷量工具多集中于windows平臺下,安裝windows vm并將系統(tǒng)代理指向nginx反向代理,通過刷量工具提交刷量任務(wù)。提交刷量任務(wù)的站點沒有任何真實流量,只要是訪問這個站點的IP基本上都是通過刷量工具來的流量,IP可以在RTB引擎對相關(guān)IP端進行封殺,不再進行投放; Nginx反向代理落詳細(xì)日志通過Logstash收集、解析發(fā)送給ElasticSearch建立索引,通過kibana做可視化,統(tǒng)計出刷量最多的IP,域名和URL地址出來,可以作為后續(xù)模式識別的模型輸入。搜集相關(guān)證據(jù),域名可以向adx反饋對媒體進行封殺,同時可以根據(jù)篩選出的刷量作弊域名在DSP投放過程中減少投放以避免自身損失。 CPS引流作弊我們遇到的另外一種對于DSP投放效果有非常大影響的一類作弊手段是:CPS引流作弊 引流作弊可以幫助引流網(wǎng)站“提高”CPC,“提高”CPS。但對廣告主不產(chǎn)生實際有效的流量。 目前發(fā)現(xiàn)的引流作弊行為有3種:
也就是說在DSP投放了廣告的網(wǎng)站里被插入了跳轉(zhuǎn)到CPS計費鏈接的302跳轉(zhuǎn)的圖片,雖然DSP花錢從adx買了流量投放了廣告,但是這個頁面里還有大量的CPS結(jié)算的鏈接跳轉(zhuǎn),如果廣告主既在網(wǎng)盟,又在DSP投放廣告的話,任何看過這類頁面的人在廣告主網(wǎng)站下的單,就有可能被劫持走。整個過程中,用戶都不知道有'廣告主'的存在。但是對應(yīng)的'廣告主'會認(rèn)為是特定CPS鏈接帶來了一個點擊,后續(xù)的cps應(yīng)該是記在相應(yīng)的CPS合作方名下。 Q & AQ1:請問付總dmp數(shù)據(jù)存哪里?HBase?
Q2:請問 RTB算法模塊熱插拔大概是怎么實現(xiàn)的?
Q3:請問cookiemap是離線map還是實時map?map后數(shù)據(jù)正確率有多少?移動端map 主要根據(jù)那些key來map?
Q4:請問怎么識別是同一個用戶?通過cookie,還是有其他先進的辦法?
|
|