合約廣告中的流量分配算法

上傳到博客上公式無法看了,感興趣的同窗到個人github博客上去看吧 http://tongming.github.io

轉載請註明來源git

 

簡介

合約廣告是一種基於合約的廣告模式,在線廣告中的一種主流方式是擔保式投放(Guaranteed Delivery,GD)。GD是一種量優於質的廣告投放方式,須要保證廣告主可以得到在合約中約定的受衆用戶的流量。GD中,媒體的流量按照屬性劃分,媒體要給不一樣的廣告主按照合同分配約定好的流量。Ad Server的準則是但願在每一次展示知足多個合約時,選擇合適的廣告主,以使得每一個廣告主效果最好,同時可以更有效的分配流量。以下圖所示,supply爲媒體方,提供流量,媒體的流量能夠按照性別、年齡、地域劃分;demand爲廣告主,不一樣的廣告主須要不一樣細分的流量(或者說流量背後的用戶),好比第一個廣告主須要200K的男性流量。流量分配問題就是把不一樣細分的流量分配給不一樣的廣告主,儘量知足全部廣告主的需求。好比下圖中的問題,怎樣把六部分流量分配給三個廣告主才能知足全部廣告合約的需求了?咱們能夠先分配CA的流量都給第二個廣告主,而後就比較容易分配流量給另外兩個廣告主了。github

clip_image002[4]

對於上述問題的求解,已經有較多的工做展開,而且有一些不錯的方法。爲了理解不一樣方法的優勢與弱點,須要先了解兩個基本概念。第一個概念是流量到達順序(input order),因爲在實際廣告分配中,咱們不知道流量按照什麼順序達到,也不清楚會有哪些流量到達。顯而易見的是,不一樣流量到達順序對算法最終效果有很強的影響。爲了更加客觀的衡量不一樣算法的效果,須要比較在相同的流量到達順序時,不一樣算法的效果。通常來說對於流量到達順序的模型有四種:算法

1、流量以最壞狀況的順序到達。這種流量到達模型假設有一個對手已經知道你的流量分配算法,而且對手能夠操縱流量到達的順序,從而產生一個使得你的流量分配算法效果最差的流量到達序列。app

2、流量以隨機的順序到達。dom

3、流量以未知的獨立同分布(IID)方式到達。函數

4、流量以已知的獨立同分布(IID)方式到達。學習

第二個概念是競爭率(Competitive Ratio),競爭率是衡量算法效果的指標。競爭率的定義是算法獲得的目標值與最優分配算法獲得的目標值的比值。若是流量是以IID方式到達,則爲目標值指望的比值。有了流量到達順序以及競爭率的概念,就能夠分析不一樣算法的優劣。下面咱們由簡單到複雜考察一些已有算法的特性。優化

貪心分配算法

第一個考察的算法是貪心分配算法,貪心分配算法運行方式以下:網站

每一次請求,找到可以匹配的廣告中,出價最高的廣告投放。3d

如今須要考慮的是貪心分配算法最終效果如何,能夠證實在流量輸入順序爲最壞狀況時,貪心算法的競爭率爲0.5,而且只能到達0.5。這裏對結果不加以證實,舉一個例子說明貪心算法的競爭率最多爲0.5。

clip_image003[4]

如上圖,黑點表明一個流量,流量到達順序由上而下,兩個廣告主須要的流量單元都爲1,對流量的出價分別是1與M。當M大於1時,貪心算法的分配方案使得媒體最終收入是M,而最優分配方案媒體的收入爲1+M,所以在這種順序下,貪心分配算法的競爭率爲clip_image005[4]。所以當M無限接近1時,貪心分配算法的競爭率無限接近爲0.5,而當M遠大於1,貪心分配算法的競爭率接近1,分配效率接近最優分配算法。所以貪心分配算法在廣告主出價差別大的時候,是一種比較好的分配算法

上面考察的是流量到達序列的順序在最差狀況下,貪心分配算法的競爭率。在真實環境中,流量到達順序通常不會是最差狀況。所以考察流量到達序列爲IID分佈時,貪心分配算法的競爭率更符合真實應用場景。Goel等在他們的論文(Online budgeted matching in random input models with applications to adwords)中證實了在輸入序列爲隨機狀況下,貪心算法對Adwords問題的競爭率爲clip_image007[6]。須要注意的是Adwords問題與GD流量分配問題並不等價,不少問題的結論並不是一致,所以對與流量分配問題,在輸入序列爲隨機時,貪心算法的競爭率依然沒有明確的答案,感興趣的同窗能夠仿照Goel的思路,看是否能獲得相同的結論。下面一種出價縮放算法中,Adwords問題與展現廣告的流量分配問題的結論也很是不同,展現廣告的流量分配算法相對於Adwords問題要更加困難。

另一種和貪心算法一樣簡單的算法是隨機算法。隨機算法對每一次廣告請求,從知足要求的合約廣告中隨機選擇一個展示。你們能夠思考一下,對於隨機算法,在不一樣流量到達模型時,競爭率分別是多少。在何種輸入狀況下,隨機算法表現比貪心算法的表現要好。

出價縮放算法(bid scaling)

下面須要考察的是一種更加通常的算法,能夠把這種算法稱爲出價縮放算法。出價縮放算法顧名思義就是每一次廣告請求,對每個符合要求的廣告的出價乘以/減去一個縮放因子(對於Adwords問題是乘以一個因子,對於Display Ad是減去一個因子),選擇值最大的廣告投放。爲了理解bid scaling算法,須要對問題進行數學的形式化描述:

clip_image009[4]

如上公式,左邊爲原問題,右邊爲對偶問題。其中clip_image011[4]爲流量V分配給廣告主U的量(值爲1或0),clip_image013[4]爲廣告主U對流量V的出價,clip_image015[4]爲廣告主U一共須要的流量。如今的問題是流量V未知,咱們須要在線求解上述問題。由KKT條件,可知上述問題的最優解clip_image017[4]須要知足以下條件:

clip_image019[4]

由上述KKT條件能夠知道,當流量v分配給clip_image021[6]最大的廣告主時,能夠獲得最優解。所以,bid scaling的算法以下:

對每個廣告請求,對於知足要求的廣告主計算clip_image021[7],將流量分配給值最大的廣告主。(對於Adwords問題,此時計算的是clip_image023[4]

Bid scaling算法的核心是怎麼選擇clip_image025[10]。貪心算法也能夠看做是一種bid scaling算法,該算法選擇當廣告主預算未消耗完時clip_image027[4],當預算消耗完後clip_image025[11]clip_image029[4]

J. Feldman等在文章Online ad assignment with free disposal中提出了一種選擇clip_image025[12]的方式,這種方式在最壞狀況下,並知足廣告主預算較大的條件時,競爭率爲clip_image007[7],他們的選擇方式以下:

clip_image031[4]

SHALE算法

以前考察的算法都沒有考慮流量到達的分佈。在現實環境中,咱們對流量具備必定的預測能力,SHALE算法試圖經過預測的流量,線下算法流量分配方法,從而指導在線的流量分配。另外SHALE算法對於流量分配問題的建模也與bid scaling算法有必定的差異(不過其本質依然能夠將其歸類爲bid scaling算法),SHALE算法的收益再也不考慮廣告主的出價,更多的考慮未完成合約的損失,其數學模型以下:

clip_image033[4]

在上式中,把流量按照屬性劃分爲不一樣的單元,線下預測不一樣的流量單元的流量大小,式中clip_image035[4]爲預測的流量單元i的流量,clip_image037[4]爲廣告主j的合約流量數目。clip_image039[4],其中clip_image041[4]爲符合廣告主j要求的流量總和,clip_image043[4]用來衡量對廣告主j的流量分配是否均勻。須要求解的爲clip_image045[12],表示流量單元i分配給廣告主j的流量比例。

所以,SHALE算法包括兩部分,一部分爲線下計劃部分,利用預測的每一個流量單元的流量,求出clip_image045[13],另外一部分爲online serve部分,利用clip_image045[14]指導流量的分配。須要指出來的是對於bid scaling算法,對於每一個廣告主只須要保存一個數,就能夠進行在線分配,而naïve的SHALE算法須要保存clip_image045[15],這樣對每一個廣告主須要的數大大增長,增大的內存的消耗。爲了解決這個問題,SHALE算法借鑑了bid scaling算法的思想,利用KKT條件,實現了只須要對每一個廣告主保存一個值,在線求出clip_image045[16],從而使得分配過程不須要消耗大量內存。

對SHALE算法而言,若是流量預測算法可以精確的預測流量單元中的流量數目,那麼SHALE算法的解爲最優解。所以主要的問題是,若是預測算法有偏差,SHALE算法是否具備魯棒性呢?這裏,對於流量到達順序能夠看做是已知分佈的IID序列,實際上,咱們能夠把每一個單元的流量數目看做是高斯分佈,咱們可以預測到流量的指望值,可是對於一些流量單元流量波動較大(方差較大),可能也會有較大的預測偏差。SHALE算法考慮到預測的偏差,通常若是線下計劃部分計算間隔縮短,同時使用反饋校訂的算法(如PID控制器)可以在很大程度上下降預測偏差對於算法的影響。遺憾的是,並無理論分析可以給出在這種狀況下SHALE算法可以達到的競爭率。J.Feldman等在文章Online stochastic matching: Beating 1-1/e中給出了一種利用線下計劃指導在線分配的二分圖匹配的算法,給出的競爭率是0.67,可是從J.Feldman的理論分析推廣的SHALE算法幾乎不可能,所以到目前爲止尚未關於SHALE算法競爭率的理論分析。

模式生成算法

SHALE算法的模型中有一個缺陷:沒有考慮頻次控制的影響,所以SHALE算法離線計劃即便在預測算法精確預測流量的前提下,也不是一個最優的分配方案。有一些在線的改進方案,可以改進SHALE算法在具備頻次要求的狀況下的效果。下面介紹一種利用模式生成算法來對SHALE算法進行改進的方法。模式生成算法產生一些投放廣告的模式,對每個用戶按照模式進行廣告投放,從而保證廣告主的頻次要求。這裏說的模式便是一段廣告投放序列,如:

clip_image046[4]

上圖爲兩個廣告投放模式,若是一個用戶被分配按照模式1投放,當用戶第一次到達時展現廣告A,第二次爲B,第三次爲C,第四次爲A,第五次爲B。模式生成算法假設可以預測每一個用戶在頻次控制時間段內訪問網站的次數,經過生成模式控制廣告的頻次。模式生成算法的數學模型與SHALE的數學模型相似,以下:

clip_image048[4]

其中clip_image050[4]爲全部的模式庫,clip_image052[4]clip_image054[4]分別表示在流量單元i中用戶訪問類型clip_image056[6](用戶訪問類型由用戶在一段時間內的訪問次數決定)的流量數目與獨立用戶數目;clip_image058[6]表示流量單元i中用戶訪問類型爲clip_image056[7]中用模式n做爲廣告投放模式的用戶數目;clip_image060[4]表示廣告j在模式n中出現的次數,clip_image062[4]表示在模式n中,廣告j出現的次數是否在要求的頻次數目範圍內;clip_image064[4]表示廣告主j要求的獨立用戶數。clip_image066[4]用來描述模式n的好壞,好比廣告的多樣性、頻次控制等。還能夠根據業務需求對上述數學模型進行修改。

如今的問題在於怎麼求解上述數學模型,和SHALE算法相同,咱們利用預測的流量進行線下計劃。可是和SHALE不一樣的是,模式生成算法不只要求預測每一個流量單元的流量,還要求預測每一個流量單元中每種用戶類型的數目以及每一個用戶屬於哪一種類型。另外模式生成算法的目標函數比SHALE算法複雜不少,SHALE算法只是一個二次規劃問題,離線計劃很是容易求解。然而在模式生成算法中,目標函數包含整數規劃,咱們須要去構造一個模式庫,而後再優化整個目標函數。在模式庫中構造全部的模式顯然是不可行的(指數複雜度),幸運的是已經有成熟的算法求解此類型的優化問題,感興趣的同窗能夠去查看列生成算法,這裏不詳細敘述。總之,藉助列生成算法,能夠產生全部有用的模式,而且對每個類型的用戶分配不一樣的模式。

在線投放廣告時,當用戶當天第一次訪問網站時,經過用戶類型以及所處的流量單元,查找clip_image058[7],能夠獲得用戶投放模式n的比例爲clip_image068[4]。按照比例選擇模式n做爲用戶的廣告投放模式,並記下模式n,當用戶第二次訪問時,按照模式n繼續給用戶投放廣告。

模式生成算法並無解決廣告投放中的全部問題,一個問題是利用模式生成算法須要對每個用戶記住一個廣告投放模式,很是消耗內存。另一個問題是,模式生成算法假設用戶只屬於一個流量單元,實際中用戶有可能屬於多個流量單元。對於模式生成算法的理論分析也很是複雜,所以目前對於模式生成算法的競爭率仍然是未知的。

結語

對於廣告分配算法領域,研究工做一直都很活躍,每一年都會有新的工做發表。本文總結的是展現廣告guaranteed delivery中應用到的分配算法。其中有一些算法,因爲理論方面過於複雜,我並無包含(如利用強化學習的算法學習到bid scaling算法中的clip_image025[13]值,從而獲得一個接近最優的分配算法)。另外Adwords problem領域的廣告分配算法也有不少重要的工做,有一些方法能夠擴展到展現廣告中,可是另一些擴展起來並非很簡單,雖然兩個問題看起來很是相似。之後有時間或者等我把這幾個問題都弄明白了,再擴展這個算法文檔。

相關文章
相關標籤/搜索