腾讯广告算法大赛的学习感悟
这是我的第一篇博客,也是第一次接触实际的算法问题。前前后后花了约一周的时间,到处参考各位大佬的文章,才完成了整个过程,算是走了一遍处理算法问题的流程。在这里记录下一点感悟,希望能够在以后的正式比赛中取得进步!
1. 比赛介绍
广告曝光预估的目的是在广告主创建新广告和修改广告设置时,为广告主提供
未来的广告曝光效果参考。通过这个预估参考,广告主能避免盲目的优化尝试,有效缩短广告的优化周期,降低试错成本,使广告效果尽快达到广告主的预期范围。比赛中使用的数据经过脱敏处理,通过本次大赛,我们旨在挑选出更为优秀的曝光预估算法以及遴选出杰出的社交广告算法达人。
在腾讯提供的广告曝光日志基础上,进行算法分析,预测测试集的广告曝光量。
2.评估标准
2.1准确性评估
公式中,Ft 为预估的广告曝光值,At 为真实的曝光值。因此,对于预测的结果,SMAPE 越小代表预测的准确性越好。
2.2出价单调性
对于同一条广告,在其他条件,如曝光时间、素材尺寸等不变的情况下,应使得曝光量随着出价变化而变化,保持单调性。这样才符合广告推广的的实际情况。这是单条广告记录的得分,其中imp和bid分别为曝光量和出价。
接下来是对于所有预估广告的得分统计公式。即对于所有预估广告取均值,可知:得分越高,效果越好。
3.数据介绍
3.1历史曝光日志
历史曝光日志的前五行如下:
整个文件约6个G,采用分块读取处理。读取曝光日志的同时,对数据进行简单的初步处理。如去重,删除请求时间为0的数据,去除多值情况。同时,将时间转为可读格式。
exposureLogdf = exposureLogdf.drop_duplicates( subset=['广告请求id', '广告位id'], keep='last')
exposureLogdf = exposureLogdf[~exposureLogdf['广告请求时间'].isin([0])]
exposureLogdf = exposureLogdf[~exposureLogdf['广告请求id'].astype('str').str.contains(',')
& ~exposureLogdf['广告位id'].astype('str').str.contains