用設計系統角度去解釋RTB

 4cd5fef5208cdc13b9a996860dbaf7f3

我花點篇幅去解釋,但就用設計系統角度去解釋RTB存在的意義。Real Time Bidding,中文譯為即時競價。當廣告主下廣告時,像是使用Google、Facebook等之類的廣告平台,都會在設定廣告過程中看到「廣告出價」,然後系統會在旁邊提醒廣告主「建議出價」。

 

我舉一個實際例子,或許會比較容易理解。廣告主目前有A、B、C三個人。三個人將在以下情境中「競賽」。談競賽前,計算的單位以CPM來算,也就是「每一千次曝光」。

 

情境1:A預算$10,000元、B預算$10,000元、C預算$10,000元,三人都打算投放2015/01/01的廣告,廣告走期都是從0點到24點,而當日該媒體可含蓋廣告量約為500個CPM,也就是500X1000=500,000。ABC出價都一樣,CPM都出$10,因此得出10,000(預算)/10(出價) X1000(播放量)=1,000,000,3個廣告主一共是3,000,000次播放。

 

重點來了,該媒體當日可供給的廣告播放量為500,000,而三位廣告主各自出價都一樣,所以最簡單的情境就是ABC去均分50,000的播放量。500,000 / 3 =166,666。每個人都一樣,誰也沒有少。每個廣告主所花費的廣告預算為$1,666元,三廣告主的剩餘預算為10,000-1,666=8,334,三廣告主各自還有$8,334預算沒用。但問題是廣告主期待得到廣告播放量為1,000,000,現在因為均分的關係只剩下166,666,少掉833,334廣告量的部分怎麼辦?基本上這就是所謂的「預算出不去,花不掉」的狀況。

 

情境2:承上,A發現他可以獲得的廣告量太低了,他需要提高廣告曝光量。此時,A能採取的措施有兩種,一種是「增加廣告預算」,第二種是「提高廣告出價」。如果選擇增加廣告預算,A預算20,000元、B預算10,000元、C預算10,000元,A多於B跟C,那這時候如果我是媒體賣廣告的廠商,我會賣給A比較多還是BC比較多?當然會A。 可是另外一個問題是,如果我因為A提高了兩倍預算,而削減BC的播放量,導致BC無法得到播放量,也許我日後就無法做到BC的生意了。

 

因此,在為了不流失BC的前提之下,依舊得分配適當播放量給BC,維持BC願意在此平台鐘頭放廣告。同時,又不能讓A多增加一倍的預算全部吃掉現有的播放量,所以A能得到的播放量得限制在某個比例範圍內。(預防機制後面解釋) 因此,開始有了權重記分的基礎。簡單的說,原本預算一樣,大家都很公平,每個人都是33%,但現在A預算較多,此時有可能會調整為A 40%、B 30%、C 30%。因此A會得到的播放量變成500,000X40%=200,000。BC則各別為150,000。可是如果採取「提高廣告出價」不改變「廣告預算」?這答案會跟此題接近。

 

情境3:承上A發現光是增加預算,實際被消化掉的預算也不夠,因為CPM10元,就A增加廣告預算後,所額外得到的廣告播放量為200,000-166,666=33,334,換成廣告預算後,額外增加倍用掉的預算僅有$333元。因此,A廣告主不僅提高廣告預算,同時也增加廣告出價,他將原本CPM $10變成CPM $20。

 

預算增加連同廣告出價也增加,此時計價的基礎會從他變動當下做切點,但不要討論複雜,一樣就是算在三個廣告主在同一時間點下廣告,只是條件變為A預算$20,000出價CPM$20、B預算$10,000出價CPM$10、C預算$10,000出價CPM$10。A在兩個條件下都比BC要多出兩倍,所以這時候又影響到全重計算基礎。 此時,可能會調整的廣告量比例為A60%、B20%、C20%,因此得出A此次獲得曝光量為500,000X60%=300,000,B與C則各自是100,000。這時候,因為出價基礎不同,所以花費就不一樣了。A取得廣告量增加,但出價也增加,所以實際A此次支付廣告費用為$6,000,剩餘$14,000。B跟C依舊還是$1,000。可是從A所支付的廣告費用來看,明顯的是比BC多上不少,這種比例在廣告主收到帳單時可能會氣炸,於是我們得針對出價金額先做演算,算出「建議出價」以及「實際扣款出價」等模型。「廣告建議出價」後面會提到。

 

解釋一下前面提到的預防機制。照理來說ABC三人不論得到多少廣告量,依照他們廣告預算,最後得到的結果應該公平才是。但實際上廣告主不會這麼想。廣告主會期望除了廣告「被曝光」之外,還要能夠「被點擊」,甚至帶入「被轉換」。因此,基於此限制條件,得針對ABC三人做到「最適化廣告排程」。 最適化廣告排程,簡而言之就是ABC三人,假設曝光量都一樣,但三人會因為其廣告素材的差異,造成廣告點擊狀況不同,而三個人的廣告有幾種情況會發生,一種是「單一頁面多廣告」以及「單一版位多廣告」。光是這兩種狀況,背後要計算的基礎也不同。因為這涉及到使用者打開頁面時,「看到幾個廣告板位」以及「看到播送哪一個廣告」,到最後「對哪一個廣告產生興趣進而點擊」。 為了解決廣告被無效播放,所以在每次廣告播送的過程中,還得同時去計算廣告「被點擊狀況」。原本只是計算廣告播放量時,計算的是廣告主預算與出價之間的競賽,但此時又多加了點擊因素近來,計算變得更複雜,這也是為什麼演算法的設計並不容易。

 

回到ABC上,用比較單一情境來解釋。三方廣告播放量固定,三方所獲得的點擊量不一,就先從點擊結果來看。還不要涉及時間排序因素近來。此次,A所獲得的點擊比較高,BC又較低,而這時候系統得去計算A為什麼獲得較高的點擊,BC為什麼較低,假設是用常態分布的方式去播放廣告,有就是每個廣告的排序為: A→B→C→A→B→C→A→B→C→A→B→C→A→B→C→(依此類推) 雖然廣告序列「有可能」會是採取以上方式播送,但實際卻有可能不是。因為使用者「不一定」會在「同一時間」進入網站。因此,廣告計算就得在納入兩個額外條件做日後的「新限制條件」。包含了「IP位址」、「登入帳號」、「Cookie or Section」等。不過在此就不提新的條件,純粹就廣告播送序列跟點擊的關係說明。

 

一般來說,A的廣告點擊較高,在同樣播送量與播放時段比較之後,大部分的人會解釋也許是A的「廣告素材」表現比較好,BC可能較差。而這時系統會針對B先做調整適化工作,意思是實驗組要特別拉出來,這樣才知道到底是A好BC不好,還是A碰巧運氣好BC碰巧運氣不好。因此,廣告的播送的序列有可能變為: B→B→A→C→B→B→A→C→C→C→A→B→B→A→C(依此類推) 短暫強化B的播放量,看看經過一段時間的演算排序後,檢視B的點擊量是否有無相對成長,同時,檢視A的點擊量是否有因此下降,再者C有沒有改變。如果,B的點擊數量有增加,這時系統會記錄下此一排序為「可能有效」的廣告遞送排序,而A要是下降的話,但下降比例不大,其原先廣告播送量比上廣告點擊數相較於新排序所得之結果,相去不遠時,那表示A本身可能素材真的較具有優勢,而B得靠較多的播送量才能獲得較高點擊。

 

不過這還只是一種假設,另外一種假設則是B點擊量沒有提高,A變動不大,C變動不大。這時就要去檢查同時變降低播放量的C,為什麼能在播放量降低之後,其點擊效果卻依然維持原本效果。而這又能判斷幾種可能,包含先前提到的「素材比較好」又過者是「恰巧碰到對的對象」,當然還有「播放的時段剛好正確」。有太多條件涵蓋其中,各種條件都會被記錄下來,反寫回演算機制裡。 簡單來說,為了不讓ABC三位廣告主買到沒效的廣告,看似三個廣告主都獲得「平均、等量」的廣告播放量,但實際上為了不讓廣告主覺得只有「被看到」還得要「被點擊」,所以演算法會在運作過程中自動產出很多套「參考模型」,每一套參考模型都會基於「廣告主的基本資料」與「廣告分眾設定」而生。 這些限制條件又跟RTB有何關係?關係可大了。因為廣告主付出的每一分錢,都要變得有意義時,又不能讓廣告主覺得「廣告出價」只是為了拐他們付出更高的價格,此時,廣告怎麼變得有價值就是RTB演算法背後應該要注意的重點。透過將每一次廣告播送的結果,經由主觀的分析模型,套用到實際運算的結果,解釋分解出預估跟實際的差異,再把這差異回寫進演算模型裡。

 

演算模型會隨著時間關係,變得越來越複雜,但換句話說應該是要越來越簡單,因為資料量會在初期呈現非常快速的成長,但隨著模型越來越明確,所需留下來的資料也就不用太多。反倒是怎麼提供廣告主「最適當的出價建議」,這又是一套演算模型。畢竟,廣告主出價也不可能蠻天要價,造成系統不當運算。

 

不當預算的意思是當ABC三個廣告主要競價,而A出價非常高,假設CPM出了100,但BC一樣出10,那我的出價建議不可能將範圍設定為「$10~$100」,這麼做反倒會讓廣告主反感,所以即便A出價100,我們在出價模型裡就得設定其所有廣告主的基本平均值,並在設計出該平均值之下該有的最大值及最小值。此時出來的廣告出價建議數字可能會是「$10-$20」。A出了CPM $100,最後我還是以$20去扣。

 

回到演算法在點擊常態分布下的情境。重新解釋一次,ABC三人遞送廣告如果都只有一個人看,那情境會是A→B→C輪流播放,但事實上前面也提過廣告會有單一頁面多廣告以及單一版位多廣告的情況。每一個版位能獲得多少的點擊,都會跟「時間」有相對關係。畢竟,使用者每次進到網站時會看到網站的廣告不同,隨著停留時間也不一樣,因此在整個廣告播送過程中,還得再納入計算「時間因素」。

 

舉例來說A在早上九點到十一點時段點擊效果好,B則是中午十二點到下午三點廣告點擊效果好,C則是晚上八點到十二點的點擊效果好。三種不同時段,帶出三種不同的點擊分布。但如果是用常態分布的話,那就會碰上BC在A的時段廣告被「無效播送」掉,而A則可能在BC的時段被「無效播送」掉。為了避免無效的廣告播送,我們就得針對廣告去做「時段切割」計算的工作。意思就是一天分成12個階段,每個階段2小時。2小時內的廣告播送與廣告點擊作為一次計算基礎,接著就是每兩個小時之間的相互比較。在同樣的比較結果下,如果A於前兩個小時優於BC,此時,微調A下降播放量到第二個時段,提高BC的播放量。如A被降低但點擊量不減,而BC卻反而提高,則會提高BC在該時段的播放量。

 

前一句,「提高BC在該時段的播放量」,其意思就是雖然兩個小時比較一次,但實際調整播放量的控制因素是「兩小時內的四個節點」。每個節點的區隔是15分鐘為一個排序。每15分鐘就微調一次播放量,透過每次的微調去找出較適當的廣告播送方式,避免「無效播送」的狀況發生。

 

可是問題又出現了,因為廣告出價是「即時」,所以廣告主有可能「自發性」覺得對他有利的時段是預先設想好的。在納入出價變數與時間變數,影響廣告播送時的結果就會多出更多種可能性。好比A廣告主的優勢時段是早上九點到十一點,但A卻認為自己應該是在晚上七點到十二點,為了不讓A的廣告在七點於十二點之間被無謂浪費掉,但又不能違背A提高出價的本意,所以前面A的廣告播送結果所計算出來的基礎很重要。

 

重要的地方在於A「可能」於晚上時段低於C,但C的預算與出價又較低。可如果此時接受了A的要求,造成A的廣告成效不佳,同時又影響了C本身的效果,這可就兩方都得罪,兩面不討好。這時候,系統就得做出判斷,判斷A的出價比例是否在平均值以內,或是遠遠高於平均值。這是出價意圖的判定。假設A的出價遠遠高於建議出價的數字,有幾種可能,分別是「真的很想要強調這時段的廣告播送」,另外就是「不小心按錯出價金額」。

 

系統這時候就得拿C去作為評估標準,衡量在這時段的C剩下多少廣告預算,他本來預計要被播放掉的廣告量還剩多少沒有被播放掉,另外就是有沒有更動過廣告出價。假設C廣告預算還剩很多,其廣告播放量不如原先一開始所設定的排成,出價也沒有變動,貿然變動C就會讓C覺得廣告預算花不掉,這是個沒有用的系統。所以,還是得回頭去檢查廣告點擊,假設之前的廣告點擊狀況還不差,比計算過AB的平均值還高一點的話,那就會採取另外的措施。

 

另外的措施就是「降低出價」。意思就是雖然C出的CPM一樣是$10,但不代表我就一定要收到時,我可以收到$7、$8、$9,藉此降低C在預算上的負擔,進而延長C加長廣告走期的意願。另外則是迎合A提高出價的需求,讓A可以買入他想要的時段。但,即使系統給了A較高的播放量,還是得去計算A在該時段裡的點擊狀況好或不好,假設不好,則會去「自動平衡」A與C的出價範圍。 以上不過是一套RTB演算法裡面最基礎、最基本的設計「概念」。裡面還沒有包含「受眾」、「屬性」、「時間」、「地點」、「裝置」、「利益」、「轉換」、「重點關注」等元素。每加上一種元素進演算基礎裡,演算的結果就會變得更複雜,而整個廣告播送的排成也就複雜數十倍、數百倍。當然這又沒有涵蓋「廣告主測試素材」的自發性行為。

 

好一點的廣告平台,甚至得做到素材辨識,用系統辨識哪些素材在什麼樣的排版、組成、文案、商品、日期與季節等因素影響之下,可以獲得最好的廣告效果,而廣告效果又可以是點擊、加入會員、購買、參加活動、安裝、看完等,每一種結果的KPI要被反饋回到演算系統裡,也就是個龐大的運算引擎。

 

要全部解釋完,寫十萬字可能有機會,但這也只是解釋廣告運算的引擎,後面並不包含使用者行為運算等。