比赛描述
众所周知,像用户年龄和性别这样的人口统计学特征是各类推荐系统的重要输入特征,其中自然也包括了广告平台。这背后的假设是,用户对广告的偏好会随着其年龄和性别的不同而有所区别。许多行业的实践者已经多次验证了这一假设。然而,大多数验证所采用的方式都是以人口统计学属性作为输入来产生推荐结果,然后离线或者在线地对比用与不用这些输入的情况下的推荐性能。本届大赛题目尝试从另一个方向来验证这个假设,即以用户在广告系统中的交互行为作为输入来预测用户的人口统计学属性。
数据介绍
训练集:一组用户在长度为91 天(3 个月)的时间窗口内的广告点击历史记录。每条记录中包含了日期(从 1 到 91)、用户信息 (年龄,性别),被点击的广告的信息(素材 id、广告 id、产品 id、产品类目 id、广告主 id、广告主行业 id 等),以及该用户当天点击该广告的次数。
测试集:另一组用户的广告点击历史记录,其中不包含用户的年龄和性别信息。
训练集中包括:ad.csv、user.csv、click_log.csv。测试集中包括ad.csv、click_log.csv。
ad.csv:
ad_id:广告 id
product_id:广告宣传的产品id
product_category:广告宣传产品的类别id
advertiser_id:广告主 id
industry:广告主所属行业id
user.csv:
age:用户年龄
gender:用户性别
user_id:用户id
click_log.csv:
time:时间,取值范围为[1,91]
user_id:随机生成的不重复的用户id
creative_id:用户点击的广告素材id
click_times:当天用户点击次数
数据分析
对用户数据进行分析,其中性别为1的占2/3,年龄集中分布在2-4中。下面分别是性别和年龄的分布图。
对广告分布进行分析,其中去除重复后的product_id为33272条,advertiser_id为52090条,ad_id为2264190条。
最后对点击信息进行分析,点击的用户共有2481135名,广告共有4445718条。下图为热门广告点击的creative_id和user_id/
实验过程
通过学习参赛者提供的思路,首先由于数据量较大,因此采用word2vec进行嵌入可以提高训练速度并节约空间,在这里可以自己训练或者采用预训练好的词向量。之后的模型可以将其视为多输入文本分类问题,采用的方法包括神经网络方法、lgb模型等,其中比赛第一名采用的是微调的bert模型。下面实验运行的方法为比赛提供的baseline,通过学习其他参赛者的方案得知,采用神经网络的方法效果更好,例如微调的bert模型取得了第一名的成绩。
数据的预处理
对click_log中的数据按照user_id进行排序,将每个用户的点击序列聚集到一起,年龄与性别标签合并到df_train中,最终生成pkl文件。
df_click.sort_values(by=['user_id', 'time'], inplace=True)
def process_group(df):
dic = {
}
for name in ['time', 'creative_id', 'click_times', 'ad_id', 'product_id', 'product_category', 'advertiser_id', 'industry']:
dic[name] = df[name].values
return pd.Series(dic)
df_click_group = df_click_group.join(df_train_user.set_index('user_id'))
df_click_group.to_pickle(os.path