今天我們來聊聊廣告成本控制中常用的PID演算法。
0.PID演算法簡介
首先我們可以看下維基百科中給PID演算法的定義:由比例單元(Proportional)、積分單元(Integral)和微分單元(Derivative)組成。可以透過調整這三個單元的增益Kp, Ki和Kd來調定其特性。PID控制器主要適用於基本上線性,且動態特性不隨時間變化的系統。PID演算法可以用下面的公式表示:
好的,看完上面“好官方”的定義,我們急需一個簡單的“栗子”來理解。假設我有一個水缸,最終的控制目的是要保證水缸裡的水位永遠的維持在1米的高度。假設初始時刻,水缸裡的水位是0.2米,那麼當前時刻的水位和目標水位之間是存在一個誤差error,且error為0.8。這個時候,假設旁邊站著一個人,這個人通過往缸里加水的方式來控制水位。如果單純的用比例控制演算法,就是指加入的水量u和誤差error是成正比的,即u=Kp*error,Kp=0.5。當第一次對系統施加控制時,u=0.5*0.8=0.4即此時水位等於0.2+0.4=0.6米,接著第二次對系統施加控制,u=0.5*0.4=0.2即此時水位等於0.6+0.2=0.8米,以此類推,最終水位會達到我們所需要的1米。如下圖所示:
但是如果單純的只使用比例控制演算法,相當於使用的是一種穩態誤差,這與實際生活還是存在一定的距離,這時候我們考慮另外一種情況:
假設這個水缸在加水的過程中,存在漏水的情況,每次加水的過程,都會漏掉0.1米高度的水。仍然假設Kp取0.5,那麼此時會發生一個神奇的狀態,假設經過幾次加水,水缸中的水位到0.8時,水位將不會再發生變換。因為,水位為0.8,則誤差error=0.2. 所以每次往水缸中加水的量為u=0.5*0.2=0.1.同時,每次加水,缸裡又會流出去0.1米的水。加入的水和流出的水相抵消,水位將不再變化。也就是說,我的目標是1米,但是最後系統達到0.8米的水位就不再變化了,且系統已經達到穩定。由此產生的誤差就是穩態誤差了。(在實際情況中,這種類似水缸漏水的情況往往更加常見,比如控制汽車運動,摩擦阻力就相當於是“漏水”,控制機械臂、無人機的飛行,各類阻力和消耗都可以理解為本例中的“漏水”,而廣告系統中的穩態誤差則可以認為是由於網路等問題引發的廣告折損率)。如何解決這種情況呢,我們可以引入積分控制元件以及微分控制元件。
積分控制元件:
積分控制會考慮過去一段時間的誤差,它對過去一段時間的誤差值做積分然後再乘以常數Ki。Ki是系統的輸出結果和預定值的平均誤差。一個簡單的比例會導致系統震盪,從而在預定值的附近來回變化,因為系統無法消除多餘的糾正。通過加上負的平均誤差值,平均系統誤差值就會漸漸減少。所以,最終這個PID迴路系統會在設定值穩定下來。
微分控制元件:
微分控制考慮將來誤差,計算誤差的一階導,並和一個正值的常數Kd相乘。這個導數的控制會對系統的改變作出反應。導數的結果越大,那麼控制系統就對輸出結果作出更快速的反應。這個Kd引數也是PID被稱為可預測的控制器的原因。Kd引數對減少控制器短期的改變很有幫助。當然在一些實際中的速度緩慢的系統可以不需要Kd引數。
1.PID演算法在廣告領域的使用姿勢
以資訊流廣告投放為例,廣告主通過採買媒體平臺廣告位進行廣告投放。在廣告投放前,綜合考慮投放目標以及歷史投放經驗等,會對廣告投放預算成本進行控制,希望能夠以預先規劃的價格拿到廣告位資源(即控制廣告成交價)。但由於廣告投放系統中的出價優化模型以及二價成交機制等,廣告主往往不能直接控制成交價,而需通過調整出價等方式間接控制成交價。
為了能夠實現控制成交價的目的,我們實時監控成交價(輸出)與預算成本(目標)間關係,並通過PID控制演算法來動態調整出價,PID反饋控制環如下圖所示:
PID演算法在傳統的工業系統中通常輸入值都是從0開始,而在廣告投放中,廣告主的出價不可能從0開始,假如在初次出價時,成交價與目標值差值很小,這就導致PID演算法的輸出接近於0,因而直接使用其輸出作為出價是不合理的。根據這個特點,我們對傳統的PID演算法做些改進,以第i次PID演算法的輸出作為變動量與第i-1次出價相加後作為最終出價,這樣就會避免在演算法執行初期,系統出現較大的波動。
PID演算法中各項係數對系統的影響十分重要,因而在演算法上線前,需要事先確定較為合理的係數,避免上線後演算法效能不穩定,導致出價幅度波動較大,造成損失。此外,由於廣告系統的不確定性因素,即使一直以相同的價格出價,也會呈現不同的成交價。
為了線下模擬廣告出價與成交價關係,我們對歷史出價與成交價資料進行分析。分析發現,出價與成交價均值呈現正相關,即在一定範圍內,出價均值增大,成交價均值也隨之增大。但對應到具體的資料點上,二者還會伴隨一定的隨機性。將出價與成交價關係分解為線性部分與隨機波動部分。其中線性部分利用最小化均方誤差擬合線性函式,得到線性函式表示式;隨機波動部分根據相同出價時對應的不同成交價出現頻率,生成與歷史資料等概率分佈隨機模型。利用線性部分與隨機部分疊加,得到給定出價對應的成交價。使用該模型輸出的模擬結果與真實結果作對比,發現模型輸出能夠較為準確的還原資料真實分佈。
在剛開始對PID控制器進行引數設定的時候,可以只考慮出價與成交價的線性關係,使用不同引數進行試驗,觀察不同引數對系統效能的影響,初步得到各項係數較為合理的引數的區間。由試驗結果可以發現,當比例係數較大時系統振盪幅度較大,積分系數較大時系統達到穩態的時間較長,微分系數較大會導致系統持續振盪,難以達到穩定的狀態。通常我們會引入隨機項進行微調,得到較為理想的PID控制器。
使用PID控制演算法動態調整出價能夠很好的將廣告平均成交價穩定在目標成交價,而使用固定出價策略,則會使得廣告投放的實際平均成本偏離目標值,特別是當廣告投放時間週期較短時,偏離程度會更大。由於實際投放場景中,對出價範圍及出價時間有一定的約束,需根據業務場景對PID演算法的輸出做一定的處理,使得演算法輸出價格能夠合理的參與到廣告競價系統中。
2.小結
本文主要給大家介紹了PID演算法及其在廣告成本控制領域的使用方式。當然,通過PID演算法控制成本只是廣告投放中特定場景下的一種手段,為了優化廣告的投放效果,常常還需要做一些其他方面的工作,比如通過預估使用者點選率和轉化率,實現廣告精準定向;使用媒體標籤進行人群量級和價值的預估,對廣告主的投放進行自動擴量等,其目的均是為了保證廣告主的投放收益最大化。
歡迎關注微信公眾號:計算廣告那些事兒