在上文《淺析移動廣告競價策略》競價的兩個核心問題:競價該考慮那些因素以及如何設計競價策略。前者主要涉及到預算、庫存、流量質量、市場競爭等因素,後者主要在於為了達成既定的投放目標,要考慮哪些因素並捨棄哪些因素,具體詳見《淺析RTB的競價策略》。本文將繼續上文的內容,具體細談如何設計並實現一個競價策略:動態出價。

CPM動態出價以較為經濟的方式獲取較多的曝光,或者簡單的講就是要降低ecpm,主要實現方式是基於成交價格預估模型,在模型的基礎上用實時競價成功率進行反饋調節。這個出價策略和固定出價策略相對應,適用於側重曝光的項目,但是CPM動態出價則更為經濟和靈活,能根據競價成功率自動調整出價。如下表所示,CPM動態出價主要考慮了供需和市場競爭,假設供大於需,這樣的話就有空間有動力進行動態出價以降低ecpm。

這個策略的目標、假設已經相對清楚,接下來的問題就是如何設計這個出價函數?這個出價函數既要能反應流量的預期成交價,又要能夠反應當前市場競爭情況。前者可以使用模型預測一個基本的成交價,後者可以使用競價成功率來反映市場的競爭情況,在價格一定的情況,市場競爭狀況和競價成功率呈現負相關。所以我們的出價公式就逐漸清晰:bid+k/r.bid是模型預測的成交價,後面的這一項根據競價成功率來調節最終的出價,當r較低,代表市場競爭激烈,出價就會在預測的成交價基礎上更高一點,反之就會更低一點。這個公式中bid可以用機器學習演算法訓練模型並預測,而r則可以採取近一段時間的競價成功率來近似,也可以同樣適用機器學習進行預測,剩下的k值是用來權衡兩者的關係,較大的k值會使出價隨著競價成功率做出很大的波動,k值可以有人工調節,也可以通過做實驗進行選擇。

以上就是動態出價策略的大體設計,接下來給出我們力美的實踐,具體分為三個階段,數據清洗、特徵選取、模型選擇等,下面將各個階段中的一些重要事項說明一下。

數據源:競價日誌(response)和展示日誌(impression),競價日誌中包含了媒體、設備、尺寸、創意、預估的點擊率、底價以及出價的信息,競價成功的,則會有展示日誌,兩份日誌匹配後,就形成了訓練兩個模型的原始數據。

數據清洗:首先對日誌中的每個欄位做了描述性統計分析,重點看是否有異常值,對有異常值的,要查清楚這個異常值的產生機理,之後再確定是要處理手段,如果是投放過程中bug產生的,則要儘快修復,如果佔比極小則可以考慮刪除,因為異常值對以預測值和真實平方差的損失函數來說,會嚴重放大誤差。正因為如此,刪除了那些成交價過高的樣本,雖然這批樣本對佔比很小,但是模型有不小影響。對於在某些變數上沒有取到值的記錄,如果該變數是離散的,則直接歸為新的一類,如果是數值,則要根據具體的實際意義進行判斷,或取均值或置為0.

特徵抽取:在數據中有兩類變數,一類是數值型,另外一類是離散型,針對前者很容易處理,做一些數值運算取多項式或者應用Box-Cox轉換,在這上面做些各種數值運算,另外一種是離散型變數,針對這種,一般會用到one-hot編碼,其優點是會信息不損失,但是缺點是特徵向量會增大很多,其次離散型變數的值可能在未來增多,甚至發生不少變化,這樣的話就必須修改模型了。考慮到此,採取了折衷的方式,那些較為固定的變數直接採用了one-hot編碼,而對那些容易變化的,取值的可能性非常多的採取了dense編碼。因為採用了dense編碼,所以就會產生字典,字典要及時更新,在保證模型的性能的基礎上,也要簡化字典。除了編碼之外,還可以對特徵進一步的處理,組合特徵、乘法轉換、除法轉換等。

模型訓練:模型和特徵並不是分離的,在特徵抽取的過程中已經開始訓練模型了。在模型訓練中,先使用xgboost訓練並且調參,將其測試誤差作為一個baseline,然後使用簡單的線性模型進行訓練,通過特徵工程以及調參,最終使線性模型的效果接近或等同於xgboost的結果。 這裡要簡單說明一下,選擇線性模型主要在保證模型性能的基礎上降低模型的工程難度以及維護成本。其次,通過實驗發現,及時更新模型會讓線上測試誤差大幅度降低,目前暫定為一天已更新,隨後將通過sparkstreaming進行准實時更新。

上圖簡述了整個系統運行的流程圖,線下訓練模型會得到字典和模型的文件,線上的流量(request)過來後會按照規則進行特徵抽取,並結合模型文件最終生成出價。

模型上線後經過對比多次實驗測試,模型在不同的最高價的限制下表現的很好,完全如何設計的預期,ecpm降低了40%到80%,ecpc降低了20%到70%。

推薦閱讀:

相关文章