前言
瀑布流排序中,用戶首先看到的是前面的商品,排在前面的商品有天然的優勢,用戶的點擊率會偏高,
我們觀察cpc廣告的某個場景的ctr隨位置的統計衰減圖:

圖1: 圖中橫座標是排序位置,縱座標爲該位置一天的ctr
大家都有個共識,實際商品表現出來的ctr和商品實際的點擊質量是有偏差的,這裏的偏差有很大的因素是有展現的位置引起的
如何消除位置偏置
不同的場景要求不一樣,實驗分兩個場景進行
bid* ctr 排序場景
對於同一個位置不同的商品消除的偏置幅度是一樣的:
加權和類似的rank場景
結論
- 利用固定position=n來 predict廣告的ctr方式部分達到消除position偏置的作用,不過不同的模型和場景必須謹慎選擇n值
- 利用獨立position建模,可以起到消除上面n的選擇問題
- 加權平均類似的rank場景,bid *ctr 排序,這兩個場景在處理position的時候差別很大
下面我們來看下3個實驗的對比
一.普通的線性模型
其中
假設我們在predict的過程中是使用position=1來消除偏置
那麼
其中
對於
當
所以這裏的
看下放大的倍數:
當真實ctr在0附近時,導數值最大,y=0.03 是y=0.02 導數的1.5倍
實驗:
採用線上app search一天的數據,實驗選取線上十幾個點擊反饋類型的特徵, train/validation 的auc 大概在 0.653左右
橫軸:ctr區間,縱軸:商品使用不同的position來predict的個數佔比

可以很清晰的看到,position越前面,預測的整體ctr越高
我們在兩個實際的場景來分析它增加的絕對值和倍數:
1. 線性加權和
那麼整體score對 ctr波動的絕對值比較敏感:
橫軸:ctr區間,縱軸:不同position做predict後相對position=40 增加的幅度

我們可以看到,高ctr 在postion的bais裏面有正向的收益
2. bid*ctr
這裏考慮的是ctr比例波動的倍數
橫軸:ctr區間,縱軸:不同position做predict後相對position=40 增加的倍數

注意, 模型效果:
假設我們不對postion的參數進行正則,讓模型自己學習合適的參數,
position= 1:
所有參數的線性和:
position的權重和:
其中
如果稍微對

position 的處理在不同的場景,n的選擇造成的結果完全是相反的
二. xgboost
線上經驗可以知道,position在ctr預估中重要性排第一,但是模型其實不是獨立學習position單獨的特徵,他們是有交叉的作用
下面看下利用不同position做predict的時候商品ctr下面的分佈
大致的情況是:position=1 比 psotion=20,50的商品整體ctr要高
整體圖:橫軸-ctr, 縱軸-商品佔比,不同的曲線代表利用不同的position 出來的佔比圖

頭部ctr的商品圖

1. 線性加權和
使用position=1來predict 商品的ctr的時候,對ctr絕對值的增加主要是1和其他位置有區別

2. bid*ctr
倍數方面,position=1,5 都是在高ctr區間有優勢的

xgboost是一致的,就是對ctr高的商品有優勢
三. position bais 獨立建模
position bais 獨立建模也和我們最終需要怎麼使用這個ctr score有關,假設我們是bid*ctr 排序,我們更傾向於:
假設ctr 還要和其他的分數進行加權和的處理: a*score1 + ctr
我們傾向於
這裏我們以第一個來做實驗
因爲根據上面的ctr隨位置的指數衰減的圖,我們認爲
這樣
是一個固定的函數,和具體的樣本無關,只是和整體的樣本分佈有關
實驗:
採用線上app search一天的數據,實驗選取線上十幾個點擊反饋類型的特徵, train/validation 的auc 大概在 0.653左右, 兩個auc是持平的
下面是
注意,雖然在迭代十幾輪之後,auc和loss基本沒有變化不大,但是 bais score的參數一直都是在更新的

可以看到這裏得到的postion bais score 隨位置的下拉,衰減的不是很快,圖1中很快的指數級別衰減,很各個位置的商品本身質量有關,畢竟排在前面的廣告ctr一般不低
1. 線性加權和
下圖可以看到,這種建模在這種場景下選擇不同的n是有偏置的

2. bid*ctr
這個對於選擇n 進行predict來說,是沒有偏置的,隨便選擇哪個都行