天天看點

關于“智能出價“的一些探索和實踐

背景

在移動數字廣告營銷的整個鍊路中,主要有三個主體,分别是媒體、adx和dsp.對于一個adx系統,主要有兩個功能,分别是:

  1. 向下對接媒體:彙聚下遊的媒體廣告流量
  1. 向上對接dsp(廣告主):将媒體流量賣給上遊dsp(或廣告主),擷取收入。

adx作為一個流量彙聚平台,一方面從廣告主那裡擷取廣告投放收入,一方面使用媒體側的廣告位流量,需要支付費用給媒體。這一收入、一支出是adx營收的主要方式,并以此擷取利潤。

而智能出價系統主要解決的問題就是:如何在收入和支出之間,保證毛利額最大化的問題?在這個問題中,一般來說,收入側就是通過rta(實時競價系統)以一價或二價方式和dsp進行成交的價格,但今天所研究的問題是平台成交價已知(或确定)的情況;那就引出另外一個問題,就是在收入确認的情況下,如何規劃支出,才能保證毛利額的最大化,因為:

毛利額= 平台成交價 - 媒體成交價

但是在實際的業務場景中,毛利額并不是這麼簡單的減法問題,因為這裡面還涉及到曝光率的問題,具體來說涉及兩個問題:

  1. 給媒體出低價:毛利額高,但是曝光率低(廣告不曝光,就拿不到收入)
  1. 給媒體出高價:曝光率高,但是毛利額低。

是以在給媒體出價這個問題上,存在一個平衡,今天所說的“智能出價”,指的就是給媒體的出價,以達到我們的毛利額最大的效果,同時解放營運同僚,提高他們的營運效率。

基礎模型

由上述背景所述可知,毛利額的計算方式是簡單的減法運算,平台成交價減去媒體成交價,但是我們又知道,廣告如果不曝光,廣告主是不會給我們支付費用的,是以如果僅僅從平台成交價和媒體出價兩方面來考慮問題是不全面的,我們還要涉及到曝光率的問題。一般來說,我們可以根據曝光率來計算一條廣告可能帶來的毛利收入(期望最大化),具體的計算方式如下:

價值函數= max( (平台成交價 - 媒體成交價) * 曝光率 )

這個函數所要表達的意思是:

  1. 曝光率:針對曆史資料,計算每一個出價(精确到個位數)的曝光率(可使用實時計算系統進行統計)
  1. 媒體成交價:針對曆史資料,計算每一個出價(精确到個位數)在媒體側的成交價
  1. (平台成交價 - 媒體成交價):實際毛利額
  1. (平台成交價 - 媒體成交價) * 曝光率:可以了解為毛利額的期望,當然此處的期望和數學上的期望有一定的差别。

上面這個價值函數就是最終出價的一個标準,哪個出價算出來的價值函數最大,就出那個價格。

初版開發

算法側:以平台和廣告位次元,使用實時計算系統flink計算過去兩分鐘内每個出價的曝光數α、未曝光數β、媒體側平均成交價γ。形成如下的資料結構存儲到redis叢集:

key:平台_廣告位

value:出價1:α,β,γ|出價2:α,β,γ|出價3:α,β,γ|出價4:α,β,γ|出價5:α,β,γ|...

服務側:針對平台+廣告位,從redis裡面取出對應的value值,計算每一個出價的價值函數,取價值函數最大的出價作為最終給媒體的出價,我們的價值函數如下:

價值函數= max( (平台成交價 - 媒體成交價) * 曝光率 )

平台成交價:已知

媒體平均成交價:γ

曝光率:α / (α +β)

缺點:經過線上上實際業務場景中的實踐發現,此類算法更容易傾向于給媒體出低價來擷取更高的毛利額,原因在于我們的價值函數(毛利額 = 平台成交價 - 媒體成交價),當我們出低價的情況下,毛利額能最大化。但是這裡面顯然涉及另外一個問題,就是出價低毛利額大,但是在媒體側的曝光率會受到影響,這樣我們根本拿不到一定的曝光規模,這也就是我最開始說的,低出價情況下毛利額高但是曝光率低的問題。為了解決這個問題,我們需要修改初始目标,将實作業務毛利額最大化改為在實作規模擴充的基礎上的毛利額最大化。

後續改進方式:增加平台+廣告位的底價調整系數,一來防止出價過低拿不到曝光,而來可以根據底價調整系數來動态調整最低的出價,達到毛利額最大化的目的。具體實施方案見下一章節。

底價調整系數

在上一章節中,我們提到為了解決總是給媒體出低價而拿不到曝光規模的問題,提出了增加”底價調整系數”的方案。這裡所說的“底價調整系數”的實際含義其實就是最低出價的一個系數,比如:

如果我們的系數設定的是0.5,平台成交價是100元的話,我最低給媒體的出價是 100*0.5 = 50元,也就是說,50元以下的出價我不再考慮,針對價值函數,隻計算50~100元之間最大的值,這樣我們就盡量減少出低價,以此來提升我們的曝光率(也就是曝光規模)。

為了找到最好的底價調整系數,我們需要動态的調整底價系數,具體的實施方案如下:

實施政策:預設廣告位-平台次元的底價系數為0.5,在政策啟動時,優先使用0.5和0.6進行比較,若0.5比0.6更優(比較政策見定時任務),說明系數低的比較好,則比較0.4和0.5;若0.6更優,說明系數高的比較好,則比較0.6和0.7的效果;即每比較一次都會踢出效果較差的,若是系數數值比較低的最優,則後續對比值-0.1,若系數值高的最優,則後續對比值+0.1

定時任務:每小時計算該系數對應平台-廣告位的媒體下發數,以及A\B兩個系數下”曝光率提升比例”及”千次下發毛利的提升比例”,對比方式為:

1、當下發數 > 門檻值(可配置)

-- 若A相對于B的曝光率提升比例及千次下發毛利提升比例都為正,則A比B好,否則B比A好

-- 若A相對于B,曝光率提升為正,千次下發毛利提升為負,則計算A曝光率提升比例/B千次下發毛利提 升比例>= 1,則A比B好,否則B比A好

2、當下發數 < 門檻值

不做任何操作,繼續累計,直到累計數大于門檻值為止

媒體出價區間:【MAX(max(媒體底價,最小媒體出價),min(平台成交價*返點*調整系數,最大媒體出價*調整系數)),MIN(平台成交價*返點,最大媒體出價)】

缺點:經過線上上實際業務場景中的實踐發現,通過不斷動态調整出價系數,線上會出現系數極端現象,當系數出現在0.8和0.9之間且一直是0.9系數曝光率和千次響應毛利表現較好時,系數則一直保持在0.8和0.9之間,此時若平台側成交價較高,媒體側出價也會變高,但出高價并未能影響到曝光率提升,反而毛利率下降明顯(在媒體側出60和出40對應的曝光率差不多,為何不出40?)

下一步優化政策:

1、還是要想辦法去掉底價系數這個參數,根據實際的情況,讓算法自動調節出價。

2、從目前進度看,此版本的千次下發毛利額的效果是最好的,因曆史原因,此版本定義為V5版本,以後所有版本的演進效果,都以此版本為對照,以效果超過V5版本為目标。

3、之前計算曝光率的α,β值都是根據實際情況的曝光量和未曝光量累計得到的,通過實際的資料來看,不同的出價的曝光率出現參差不齊的現象,有可能高價的曝光率低于低價的曝光率,為了解決這個問題,我們針對曝光率的計算算法進行了改進,使之從理論上呈現出來一種遞增效果,即:出價越高,曝光率越高。

曝光率優化

之前的曝光率是單點激勵懲罰的機制進行更新,所謂單點激勵懲罰指的是如果某個出價的情況下,廣告曝光或者未曝光,隻更新該出價的α,β值,但是經過進一步的思考認為,可以使用區間激勵懲罰的機制進行更新,所謂的區間激勵懲罰指的是,某個出價的情況下,廣告曝光或者未曝光,不僅僅更新該出價的α,β值,對其他出價的α,β也做相應的懲罰和激勵。

關于“智能出價“的一些探索和實踐

區間激勵懲罰--第一次演進

在該次演進中,主要針對兩種情況進行區間激勵懲罰

情況1:如果某個出價未曝光,則小于這個出價的所有出價的β都進行更新:β + 1;而大于該出價的所有出價不進行更新。

情況2:如果某個出價曝光,則大于這個出價的所有出價的α都進行更新:α + 1;而小于該出價的所有出價不進行更新。

優點:解決了之前使之從理論上呈現出來一種遞增效果,即:出價越高,曝光率越高。

缺點:使用這種更新方式,在高價部分的曝光率會出現一樣的情況(如下圖),導緻算法給出的價格比V5版本低的情況,為了解決這個問題,我們對區間激勵懲罰機制進行了二次演進。

關于“智能出價“的一些探索和實踐

區間激勵懲罰--第二次演進

為了解決第一次演進過程中,在高價部分曝光率一樣的問題,進過進一步的思考和優化,認為在進行區間激勵懲罰的過程中,針對不同的出價的激勵懲罰程度應該是不一樣的,具體來說,還是分為兩種情況:

1、出價曝光的情況

(1)、高于該出價的出價:應該也會曝光,是以更新方式和第一次演進應該是一樣的,即α + 1

(2)、低于該出價的出價:在第一次演進版本中,未對該部分進行更新。但是經過分析認為,如果目前價格曝光,則出價低于目前價格時,應該也有曝光的機會,是以對這一部分的出價,也應該給予一定的激勵和懲罰,激勵懲罰方式為:價格越低,α 更新越少,β更新越多,但總體α + β = 1

2、出價未曝光的情況

(1)、低于該出價的出價:應該也不會曝光,是以更新方式和第一次演進應該是一樣的,即β + 1

(2)、高于該出價的出價:在第一次演進版本中,未對該部分進行更新。但是經過分析認為,如果目前價格未曝光,但出價高于目前價格時,應該有曝光的機會,是以對這一部分的出價,也應該給予一定的激勵和懲罰,激勵懲罰方式為:價格越高,α 更新越多,β更新越少,但α + β = 1

3、α,β更新方式

針對新的α,β更新方式,确定了兩種形式,一種是對數函數的方式,一種是等比例方式。

更新方式 目前價格(curprice)曝光,價格(price)低于目前價格 目前價格(curprice)曝光,價格(price)高于目前價格 目前價格(curprice)未曝光,價格(price)低于目前價格 目前價格(curprice)未曝光,價格(price)高于目前價格
等比例更新

up=(curprice - price)/(curprice - 1)

α + (1 - up)

β + up

α + 1

β不變

β + 1

α 不變

up=(price - curprice)/(100- curprice)

α + up

β + (1-up)

對數更新

up=Math.log(curprice - price)/Math.log(curprice - 1)

α + (1 - up)

β + up

α + 1

β不變

β + 1

α 不變

up=Math.log(price - curprice)/Math.log(100- curprice)

α + up

β + (1-up)

備注:curprice:目前出價 ; price:要計算α,β的出價 ; Math.log進行對數運算

經過模拟試驗,這兩種更新方式的最終的曝光率效果如下:

關于“智能出價“的一些探索和實踐

4、優點

解決了第一次曝光率演進過程中出現的高價部分曝光率未區分開的問題,使用這種針對不同出價進行不同程度的激勵懲罰方式,再結合下一章中毛利額優化之後的函數,可以較好的解決高價出不上去的問題。

毛利額函數優化

為了便于描述,這裡将價值函數再列一下:

價值函數= max( (平台成交價 - 媒體成交價) * 曝光率 )

可以看到在這個函數中,在計算價值函數的時,毛利額直接使用的是“平台成交價 - 媒體成交價”,用這種計算方式進行計算,有兩個問題:

(1)、對于不同的媒體成交價(給媒體的出價),他們的毛利額比值過大。

舉個簡單的例子,當平台成交價是100元時,出價10元,毛利額是90;出價90元,毛利額是10元,毛利額之間的差距是9倍,如果想要用90元進行出價,則90元的曝光率必須是10元的9倍,而這種程度的比例在曝光率中是很難拉回來的。

(2)、曝光率和毛利額的機關不對等的問題:曝光率的值始終是在0~1之間,而毛利額的值在0~100之間。

為了解決上述兩個問題,想到一個解決辦法,針對毛利額進行歸一化處理,将毛利額也歸一到0~1之間,同時縮小不同出價的毛利額之間的比例,使用對數函數的方式進行歸一化處理,歸一化函數如下:

關于“智能出價“的一些探索和實踐

使用這種方式,就将之前的價值和函數變為:

價值函數= max( 歸一化毛利額 * 曝光率 )

關于“智能出價“的一些探索和實踐

本地模拟程式建構

為了在上線之前看到實際的演進效果,在本地建構智能出價的模拟程式,目的有三:

1、針對提出的演進方式,進行本地模拟,觀察曝光率及毛利額的最終效果是否如預期

2、觀察出價能力能否趕上V5版本

3、本地模拟,減少不必要的上線流程,快速看到效果。

模拟效果:

經過多次模拟,線上運作之後的曝光率和本地模拟的情況完全一緻,解決了不必通過上線,在本地模拟進行初步判斷的方式,減少了或者避免了不必要的上線流程。

平台成交價分區間

通過上述方式的演進過程,在實際的線上測試中,出價能力總是稍遜于V5版本。舉一個簡單的例子,當平台成交價是10元的情況下,v5版本的出價維持在6元和7元,而我們的演進版本中,出價總是低于6元,為了了解具體原因進行了深入分析,這其中有兩個主要的原因。

原因1:返點的問題

在實際的結算過程中,針對不同的DSP平台和廣告位,我們會有不同的返點給予平台,在我們上述進行毛利額計算的情況下,是直接用平台成交價進行計算的:“平台成交價 - 媒體成交價”,但是實際上我們的毛利額應該是“平台成交價 * 返點系數 - 媒體成交價”,是以我們再次對價值函數進行了修正,如下:

關于“智能出價“的一些探索和實踐

價值函數= max( 歸一化毛利額 * 曝光率 )

說明:在對數函數中+2的原因是,如果平台成交價10元,返點系數0.7的情況下,對數函數的底是7,value值是(7-媒體成交價),在這種情況下,當出價是6元或者7元的情況下,歸一化毛利額分别是0和負無窮,這種情況下,我們永遠出不到6元和7元的價格,是以+2進行了一下修正。

原因2:用總體的曝光率掩蓋了不同平台成交價曝光率的差異

到目前為止,針對同一平台和廣告位,所使用的曝光率是總體情況的曝光率,什麼意思呢?比如出價10元的曝光率是所有平台成交價在出10元情況下的曝光資料的累積資料。但是在實際情況下,平台成交價是20元和100元的情況下,出價10元的曝光率應該是不一樣的,我們犯了一個用總體掩蓋了個體特性的錯誤。

為了解決這個問題,我們針對不同的平台成交價,計算不同平台成交價下不同出價的曝光率,解決前後的曝光率計算方式如下所示:

解決前:

關于“智能出價“的一些探索和實踐

解決後:

關于“智能出價“的一些探索和實踐
關于“智能出價“的一些探索和實踐

繼續閱讀