2019腾讯广告算法大赛题目理解与数据探索
1.题目介绍
1.1 背景介绍
广告曝光预估的目的是在广告主创建新广告和修改广告设置时,为广告主提供 未来的广告曝光效果参考。通过这个预估参考,广告主能避免盲目的优化尝试,有效缩短广 告的优化周期,降低试错成本,使广告效果尽快达到广告主的预期范围。比赛中使用的数据 经过脱敏处理,通过本次大赛,我们旨在挑选出更为优秀的曝光预估算法以及遴选出杰出的 社交广告算法达人。
1.2 赛题介绍
腾讯效果广告采用的是 GSP(Generalized Second-Price)竞价机制,广告的实际曝光取 决于广告的流量覆盖大小和在竞争广告中的相对竞争力水平。其中广告的流量覆盖取决于广 告的人群定向(匹配对应特征的用户数量)、广告素材尺寸(匹配的广告位)以及投放时段、 预算等设置项。
测试集是新的一 批广告设置(有完全新的广告 id,也有老的广告 id 修改了设置),要求预估这批广告的日曝 光 。
1.3 注意点
- 目标为预测广告在特定配置下指定日期的曝光量
- 数据没有直接给出label,需要自己从曝光日志数据中统计每个广告在每天的曝光量
2.数据介绍
2.1 所有数据集
(以下图片源于网友分享)
共5部分数据,其中“历史曝光日志数据”、“用户特征属性”、“广告静态数据”和“广告操作数据”可用于构造训练集
3.数据探索
3.1 历史曝光日志数据
1)读取数据
exposure_log_data_df = pd.read_csv('testA/totalExposureLog.out', header=None, sep='\t')
exposure_log_data_df.columns = [
'广告请求 id',
'广告请求时间',
'广告位 id',
'用户 id',
'广告 id',
'曝光广告素材尺寸',
'曝光广告出价 bid',
'曝光广告 pctr',
'曝光广告 quality_ecpm',
'曝光广告 totalEcpm',
]
一条记录代表一条广告的曝光。
2)去重重复数据。
一个请求可能在不同广告位曝光多个不同广告,如果同请求id同一广告位有多条记录(网络不好时可能会出现多条记录的现象),则为重复数据,应该先过滤重复广告。
exposure_log_data_df = exposure_log_data_df.drop_duplicates(
subset=['广告请求 id', '广告位 id'], keep='last')
3)曝光时间
exposure_log_data_df['广告请求时间'] = exposure_log_data_df['广告请求时间'] + 28800
exposure_log_data_df['广告请求时间'] = pd.to_datetime(
exposure_log_data_df['广告请求时间'], unit='s')
exposure_log_data_df['广告请求日期'] = exposure_log_data_df['广告请求时间'].apply(
lambda x: x.strftime('%Y%m%d'))
exposure_log_data_df['DayOfWeek'] = exposure_log_data_df['广告请求时间'].apply(
lambda x: x.dayofweek)
从下图可以看出,曝光量与“星期几”有关系。因此统计曝光量时要把时间转换成北京时间,否则训练集数据中的曝光量不准确。
下图是把曝光时间+8h后每个小时的曝光量,0-5点之间的曝光量非常小,12点和22点的曝光量最大,符合常识,所以曝光时间应该+8h。
4)广告出价
广告出价特征对预测目标曝光值非常重要,曝光日志中有每次广告曝光对应的出价特征,广告动态配置数据中也有出价特征。另外,广告配置数据一天内可能会被多次修改,如果只使用某个设置中的出价特征会影响最终的预测,所以此处使用广告曝光日志中每个广告在每天的出价的均值作为当天的出价特征。
5)类标值曝光量统计
exposure_group_df = exposure_log_data_df.groupby(['广告 id', '广告请求日期'])\
.agg({'用户 id': 'count'}).reset_index().rename(columns={'用户 id': '曝光数'})
3.2 用户特征属性数据
1)读取数据
user_info_df = pd.read_csv('testA/user_data', header=None, sep='\t')
user_info_df.columns = [
'用户 id',
'年龄(Age)',
'性别(Gender)',
'地域(area)',
'婚恋状态(Status)',
'学历(Education)',
'消费能力(ConsuptionAbility)',
'设备(device)',
'工作状态(work)',
'连接类型(ConnectionType)',
'行为兴趣(behavior)',
]
2)用户数据使用
由于广