OCPC 广告算法在凤凰新媒体的实践探索
本次分享的題目為 OCPC 廣告算法在鳳凰新媒體的實踐探索,主要內容包括:
-
背景介紹
-
CVR 預估
-
二價機制和智能出價
-
OCPC 算法
-
技術架構
▌背景介紹
1. 鳳羽簡介
鳳羽是鳳凰衛視程序化廣告變現優質品質曝光平臺,匯聚了鳳凰網、手機鳳凰網、鳳凰新聞客戶端、鳳凰視頻客戶端等多項業務,每天為鳳凰網提供20億次優質流量的曝光。
2. 什么是 OCPC
OCPC 是效果廣告最近兩年比較好的業務模式,廣告主關心的還是成本 ROI,同時能跑量。?
CPC 按點擊付費,廣告主基本都接受這種付費方式。本質上,廣告主會根據鳳羽的 CPC 消耗,核算他的轉化成本。所以廣告主為了優化這個成本,他可能調低 CPC,但是搶不到量;選擇做人群、時間定向,基于經驗論或者數據反饋;或者跑人群包等等。
相比傳統的 CPC 業務效果廣告,OCPC 本質上,是通過算法把優化工作替廣告主做了。而且由于有更好的手段,所以效果更好。OCPC 還是按照點擊付費,但是 OCPC 一般情況下,客戶不再出點擊價,出的是目標成本價 CPA。OCPC 一般分第一階段和第二階段。第一階段用于數據的冷啟動,第二階段用于積累數據。
3. 定義問題?
CPA 有兩個目標:
目標1:轉化率上升,轉化成本下降, ECPM 上升,從而提高客戶轉化率。
目標2:成本穩定,消耗穩定,從競價機制上提出優化點。
相對應的,我們的目標是在客戶指定成本的情況下,每天相對穩定的跑量。
我們提出了三種優化手段:
-
二價機制,二價機制指的是出價格搶這次的流量,只需支付第二名的價格。
-
智能出價,相比二價機制的自然分配,智能出價是一種流量的更積極分配。會根據目標,進行智能的出價操作。
-
CVR ( 轉化率 )?預估,CVR 預估是整個階段的基礎,問題是 CVR 預估的樣本非常稀少,需要做到多準確?
▌CVR 預估
由于在數據非常稀少的時候,很難做出準確和泛化的 CVR 預估,而 OCPC 可以完成。因為我們用到了二價機制,搶到的流量是第二名的價格,不過只要 CVR 的偏差可控,比如小于二價的 Gap,也能獲得不錯的成本控制。第二層面是 CVR 預估雖然有不準的成分,但我們可以通過智能出價來做經驗控制,比如拿轉化率高的部分,也可以把成本降下,從這個角度分析,CVR 預估不用特別準確。
關于 CVR 數據稀疏的問題。新的客戶在冷啟動階段的轉化不到100個,使用不到100個的轉化建立用戶的轉化率的預估,這個問題是比較困難的。其次,點擊轉化率與曝光轉化率其實不一致,這是一個漏斗序列,先曝光再點擊再轉化。
如果用點擊行為樣本訓練模型行預估點擊轉化率,在線上會出現數據不一致的情況,在數據樣本比較小的時候,會有很大偏差。曝光轉化率解決了樣本不一致的問題,但是考慮到數據稀疏,建模后偏差過大,這種方法被棄用。
做過數據分析,發現點擊率與轉化率存在相關性,可以考慮將 CTR 與 CVR 一起聯合訓練聯合建模,它們肯定有很多特征信息可以共用的。比如通過 weightedLR 做 loss 改造,在推薦等其它項目中有過不錯的效果,后續可以一試。
最后,是構建一個模型還是多個模型?是分一個客戶建模還是考慮同行業同目標一起建模?關鍵還是在于業務目標和數據情況:
OCPC 追求單個客戶的完成率,要為單個客戶做 ROI 達成和算法歸因,同時各個客戶之間的差異很大,這和全局最優化不一樣。從這個角度出發,在考慮很多方法之后,決定為每個客戶單獨建模。所以會有很多模型,有很多工程上的版本控制,會考慮泛化與工程準確度的需求,我們會為相似的用戶做一些先驗的平滑,來提升準確度。后續 OCPC 的客戶非常多的時候,可以考慮同一個行業,同一轉化目標的類型一起建模,數據的稀少情況也能得到一定緩解。
我們目前的 CVR 預估的方法,借鑒 yahoo 的論文,采用一種在線學習的基于特征子空間的 bayes 平滑算法,并融合試探、分裂策略。步驟分為以下五步:
① GBDT 訓練得到若干顆樹,形成多種特征子空間 ( tree );
② 不同廣告采用自己樣本驅動每個子空間 ( tree ),計算 CVR ( beta 分布 ),判斷置信度;
③ 在線學習:進行 CPC 模式的退化;
④ 在線學習:分裂子空間和試探子空間;
⑤ 相似廣告會做貝葉斯平滑,提升準確度提升泛化性能。
下面是關于算法的一些細節,簡單的說用 GDBT 對樣本和特征做隨機采樣,然后用隨機采樣出來的多對異構的多棵樹,從里面提煉出各個特征子空間,然后對這些特征子空間,每一個廣告、每一個客戶,我會單獨用自己樣本探索這些特征子空間,在里面做置信度判斷、CVR 預估、試探、分裂策略,來保證 CVR 的準確性和泛化性能。整個算法在實現的過程中還是存在一些問題的,大概列出了以下幾個問題:
① 為什么不采用 GBDT 的預估?
希望通過在線學習和置信度控制,來得到一個可以業務進化的有效模型和策略;但是,GBDT 仍然是一個有效的預估,可以考慮結合;
② GDBT 如何構建樹?選多少顆樹?
原生辦法利用 LightGBM 特征的采樣,第二種方法是人工做交叉,去選取特征,在實踐中應該選多少棵樹,也是看具體業務情況。我們的經驗是一般用16顆樹。
③ 如何多顆樹的多個子空間給出的 CVR,組合出新的 CVR?有以下的幾種做法:
->?取平均值。
->?參考每個子空間 CVR 的方差,給出加權平均 ( yahoo )。
->?參考每個子空間 CVR 的方差,子空間顆粒度做加權平均,子顆粒太大,方差就大,偏差也會大。
->?取 CVR 的最大和最小,最大值不推薦,訓練模型是右偏的,本來是高估的,用最大值高估現象更嚴重,會高估用戶成本,最小值想對安全,但是最小值可能跑不出量。
在后續的實踐中,我們發現做 LR 集成還是一個更通用的模式。精度會高一些,同時可以將多個相似客戶一起建模,提升一定的泛化能力,也減少了模型數量。
④ 多顆樹中,有的子空間置信,有的不置信,如何選擇試探、退化等策略?
->?冷啟動階段數據太少,要退化到 CPC 模型,平滑了 OCPC 的第一階段和第二階段;
->?相似廣告的子空間數據要做貝葉斯平滑,做 MLE 求解;
->?試探策略,計算置信上界,樂觀估計,促使拿量;用置信上界。系統中有一個試探系數來控制。實踐來看,當采用適當的試探系數時候,客戶的成本和平臺的 ECPM 能有一個雙贏。所以這個試探系數可以作為一個策略學習部分后續優化。
可以通過在線學習,進行快速試探。在線學習的一個很大的優點是可以提升準確度:
一開始樣本特別稀少,CVR 預估 bias 很大,需要快速學習分裂,找到更置信更細化的子空間。另外,當競價環境出現變化的時候,CVR 預估的偏差會大大增加,導致 OCPC 失敗,比如在節假日。
比如,在正常情況下,可以拿到左邊完整的特征分布的流量。但是當競價變得激烈之后,同樣的模型和策略,我只能拿到轉化率很低的那部分流量,實際 CVR 的偏差就會很大。這是很失敗的一個案例,在線學習能大大提高 CVR 的準確度。
試探策略可以加快業務進化和 CVR 收斂。基于試探策略,將流量分配給不置信的子空間。它有兩點好處,如下:
① 節省 OCPC 的試探彈藥。將預算更多投放給可能有高轉化率的子空間;能加快 CVR 預估的收斂速度,業務快速進化到第二階段;
② 試探有一個刷新人群的效果;偏向于給新人群。
同時,實踐中發現,試探能做為一個有效的策略,來影響最終的多目標達成,所以還是一個很好的智能調價 strategy。
試探策略我們采用的是推薦常用的 UCB,為了避免樣本過少,所有做了平滑,取威爾遜的置信上界。這樣如果特征空間不置信,我們傾向于給它足夠多的試探,就可以讓客戶第一階段能更快的收斂。實際中,如果直接用置信上界去試探,由于太高的 CVR 值,可能出現跑量太快的異常情況。所以 CVR 預估值也不能太高,需要做一個上界的約束。
在線學習有一個很明顯的問題,轉化其實是有很強的樣本的延遲,不同的轉化目標,不同商品,他的轉化周期不一樣。比如說 app 的下載轉化是很快的,app 的激活可能要延遲好幾天,我們在做在線學習的時候需要快速收斂,我們會以小時為單位對數據進行校驗,然后開始做實時的返回學習。但是我們會對歷史數據做指數平滑,同時我們會每一天、每兩天、每三天為窗口的這段時間的數據重新,再重新做下全天的求證,樣本延遲帶來的偏差。
同時可以求解客戶轉化的概率的延遲分布,針對一個小時內的樣本做權重上的求證。樣本延遲還會帶來一個問題,就是轉化歸因的問題,把轉化歸因到某一次點擊上。比如三天某一個用戶點擊了廣告并下載了 app,但是今天才實行了激活,這樣的激活的轉化是應該歸因于三天前的點擊,還是現在這一次的點擊,這其實也需要自己取舍。
▌二價機制和智能出價
二價機制:在實際的過程中,OCPC 客戶成本的波動性相當大,同時消耗非常不穩定,根本原因是 CVR 預估做不了太準確(如果可以做的準確就有更簡單的解決方案了)。我們會采用智能出價,在二價基礎上會更積極,能幫客戶在高 CVR 上搶量,低 CVR 上丟量。智能出價帶來了更穩定的成本ROI和客戶消耗,并平衡平臺和廣告主收益。
智能出價:在多個客戶情況下,智能出價變成一個組合優化的問題。可以參考阿里論文中貪婪方法求解,其中論文中的時間復雜度還可以優化,可以使時間復雜度降低 log(N) 倍。
智能出價是一種很有效的一種手段,但是核心還是 CVR 預估要準確,并需要找到一個合理的 CVR 期望。
關于 E(cvr) 的求解,阿里和新浪據說會采取用戶的多個競品對應極限的轉化率。最好有多個競品,去掉多個競品中的最大值與最低值,然后取平均比較準確。但是在實際業務開展的過程中,尤其是 OCPC 沒有足夠競品的時候,我們采用相對低效的手段,我們取客戶本身已經近似的廣告最近若干次的 CVR 預估,去除最高值與最低值的10%并取平均,這是一個低效的策略。
我們還在探索基于強化學習的動態調價。但是這個需要有很大的流量來做支撐,所以不太好建模。
▌OCPC 算法及架構
總結下 OCPC 算法策略的特點:
① 業務進化,包含試探和分裂的策略,我們并沒有明顯的 OCPC 第一階段;
② 在線學習,可以有一個在線的校準 ( Calibration ) 效果,可以一定程度上降低偏差;
③ 在小樣本的情況下,通過評估置信度,在準確和泛化中找到一個平衡,人工干預整個算法的進程;
④ 整個算法有試探、分裂等策略,在實踐中有一個很快速、很明顯的優化鏈路。
這是我們截取的客戶的案例,經過短短的一周,用戶的 CPC 的消耗和成本就能快速穩定下來,藍色是 CPC 跑出來的曲線,黃色是 OCPC 跑出的曲線,可以發現 OCPC 比 CPC 的成本要低30%左右,同時 OCPC 的波動性也大大降低了,整個算法收斂的還是很快的 。
接下來談談 OCPC 其他的細節,除了對算法進行常規 AUC 評測、OE 評測和偏差評測之外,OCPC 還有很多的策略、方法和參數。如果都在線上開啟 AB 測試,成本太高;另外,線上測試樣本不足,用戶的轉化可能只有10幾個轉化,用10幾個轉化做 AB 測試,在統計上難以置信。
因此,我們采用虛擬測試的方法進行測試。我們會對用戶一段時間內歷史的競價數據進行隨機采樣,把數據完全復原。然后,基于虛擬的競價數據,針對我們新的方法和策略進行虛擬測試,觀察采用新的算法,成本能否得到優化。但是會有一個問題,這種方法無法完全對等。比如客戶的部分流量競價沒有成功,所以沒有曝光,這部分流量的后續點擊、轉化概率其實都是未知的。
完成上述所有的手段后, 我們必須承認算法的不足,此時需要加入人工干預。干預手段包括:
① 對于已經轉化的用戶應該去掉,作弊的用戶也去掉;
② 如果客戶效果不好,可以采用刷新,促使用戶流轉起來;
③ 適當補量,對有問題的客戶,可以通過人群補包補量,其他APP的流量引入;
④ 運營根據經驗來做一些臨時策略。
根據算法的表現,比如結算的 CPC 變低,可能是 CVR 預估偏低,這樣的情況下可以做一定的修改。所以我們是用進化的算法+人工干預來保證每個客戶的 RI。
最后是我們 OCPC 的技術架構落地。整個過程的關鍵是在線學習,融合了試探、分裂、凈化的策略,在線追求好的工作鏈路,需要做些監控保證工作正常,可以構建虛擬側環境,在線上引入 AB 測試,整個架構相對簡單,預估部分與 CTR 工程相似,包括特征工程、模型。
▌未來工作
關于下一步的改善方案:
① 數據稀少,通過落地頁的停留時長,來改善數據的稀疏性,停留時長與轉化率有很重要的關系;
② 提升現有算法精度和泛化能力。考慮加入 GBDT 的預估值;采用特征和樣本,提高 tree 的異構性;
③ 嘗試采用強化學習的算法。對狀態、動作空間都做一些限制,并引入確定的概率。這樣在流量不大的場景下,是不是也可以求解。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的OCPC 广告算法在凤凰新媒体的实践探索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Elasticsearch Mappin
- 下一篇: Gurobi 生产计划调度学习案例(含代