騰訊廣告演算法大賽隨手記6——自測單調性得分
單調性計算方法
由於競價機制的特性,在廣告其他特徵不變的前提下,隨著出價的提升,預估曝光值也單調提升才符合業務直覺。所以,定義出價單調相關性評估指標如下:
對待預估廣告 ad, 除出價 bid 外其他設定不變,任意變化 n 個 bid 取值,得到對應的 n 個曝光預估值,計算如下該廣告出價單調性得分如下:

image.png
對所有待預估廣告,計算單調性得分均值如下(易知,該值越大越好)

image.png
import pandas as pd import time import numpy as np def getMonoScore (samplefilename,submissionfilename): test_samplefile = pd.read_csv(samplefilename,sep='\t', nrows=30000,header=None,names=['樣本id','廣告id','建立時間','素材尺寸','廣告行業id' ,'商品型別','商品id','廣告賬戶id','投放時間','人群定向' ,'出價'],usecols=['樣本id','廣告id','出價']) test_sampledf = pd.DataFrame(test_samplefile) test_sampledf_result=pd.read_csv(submissionfilename, sep=",",header=None,names=["樣本id","曝光量"]) test_sampledf_resultdf= pd.DataFrame(test_sampledf_result) test_sampledf=pd.merge(test_sampledf,test_sampledf_resultdf, how='left', left_on='樣本id', right_on='樣本id') test_sampledf.sort_values(by=["廣告id","出價"],inplace=True) # 作為基準 standard=test_sampledf.groupby(by='廣告id').head(1) standard.rename(columns={'樣本id':'基準樣本id','出價':'基準出價','曝光量':'基準曝光量'},inplace=True) test_sampledf=pd.merge(test_sampledf,standard,how="left",left_on='廣告id', right_on='廣告id') test_sampledf['score']=test_sampledf.apply( lambda x: ( ((x['基準曝光量']-x['曝光量'])* (x['基準出價']-x['出價']))/ abs((x['基準曝光量']-x['曝光量'])* (x['基準出價']-x['出價'])) ) ,axis=1 ) monoscore=test_sampledf.groupby(by='廣告id')['score'].mean().mean() print("經過相關性計算成績為:"+str(monoscore)) print("預估相關性部分成績為:"+ str(60*(monoscore+1)/2))
# 傳入官方的樣本檔案以及自己生成的結果檔案路徑 getMonoScore('test_sample.dat',"submission.csv")
經過相關性計算成績為:0.3253976419099872 預估總成績為:39.76192925729961
最終得分 Totalscore
上述兩個指標值域和趨勢都不同,為了比賽評分簡便,會將上述兩個指標各自歸一化後
再加權求和得到一個最終得分。形式如下:

image.png
這個就沒法寫了,因為沒有官方的標準答案,話說有答案的話就直接可以100分了。
歡迎點贊
大蔥哥不定期釋出關於大賽的文章,歡迎大家關注。
覺得喜歡就給點個贊
覺得贊不夠表達你的喜歡,可以給大蔥哥一個賞。