码农的世界程序员人工智能

腾讯广告算法大赛随手记6——自测单调性得分

2019-04-28  本文已影响341人  山东大葱哥

欢迎点赞

大葱哥不定期发布关于大赛的文章,欢迎大家关注。
觉得喜欢就给点个赞
觉得赞不够表达你的喜欢,可以给大葱哥一个赏。

知乎咨询入口

做个广告,有需要深入问题讨论的可以移步到,知乎搜索山东大葱哥,或者复制链接在浏览器打开
大葱哥腾讯算法大赛咨询入口
链接:
https://www.zhihu.com/consult/people/1088941583310782464?ab_signature=CiRBRUJDM3REd1p3eExCVXIxRlFMQnlqNWlXT2tQcDhWLS1URT0SIGQxYmFlYmJjMzI3YTgzOTU1NGQ3Mjk1OWVkNmIwY2YzGhAIARIGNS40Mi4wGgQxMjM4

单调性计算方法

由于竞价机制的特性,在广告其他特征不变的前提下,随着出价的提升,预估曝光值也单调提升才符合业务直觉。所以,定义出价单调相关性评估指标如下:
对待预估广告 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分了。

上一篇 下一篇

猜你喜欢

热点阅读