👥Datawhale AI 夏令营第三期 机器学习 用户新增预测挑战赛
2023-8-18
| 2024-1-30
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
password
category
Property
Jan 30, 2024 11:52 AM
icon

赛题解析与解题思路

用户新增预测挑战赛:
举办方:科大讯飞

赛题背景

讯飞开放平台针对不同行业、不同场景提供相应的AI能力和解决方案,赋能开发者的产品和应用,帮助开发者通过AI解决相关实际问题,实现让产品能听会说、能看会认、能理解会思考。
用户新增预测是分析用户使用场景以及预测用户增长情况的关键步骤,有助于进行后续产品和应用的迭代升级。

赛事任务

本次大赛提供了讯飞开放平台海量的应用数据作为训练样本,参赛选手需要基于提供的样本构建模型,预测用户的新增情况。

赛题数据集

赛题数据由约62万条训练集、20万条测试集数据组成,共包含13个字段。其中uuid为样本唯一标识,eid为访问行为ID,udmap为行为属性,其中的key1到key9表示不同的行为属性,如项目名、项目id等相关字段,common_ts为应用访问记录发生时间(毫秒时间戳),其余字段x1至x8为用户相关的属性,为匿名处理字段。target字段为预测目标,即是否为新增用户。

评价指标

本次竞赛的评价标准采用f1_score,分数越高,效果越好

解题思路

参赛选手的任务是基于训练集的样本数据,构建一个模型来预测测试集中用户的新增情况。这是一个二分类任务,其中目标是根据用户的行为、属性以及访问时间等特征,预测该用户是否属于新增用户。具体来说,选手需要利用给定的数据集进行特征工程、模型选择和训练,然后使用训练好的模型对测试集中的用户进行预测,并生成相应的预测结果。
我们Baseline选择使用机器学习方法,在解决机器学习问题时,一般会遵循以下流程:
notion image
思考:这里为什么选择机器学习算法?为什么不考虑深度学习?
在许多机器学习问题中,特征工程的重要性不容忽视。如果特征工程能够充分捕捉数据的关键特征,那么机器学习算法也能够表现很好。深度学习在某种程度上可以自动学习特征,但对于特定问题,手动设计特征可能会更有效。
思考:这里从逻辑回归和决策树中选择,哪一个模型更加合适?
  • 决策树能够处理非线性关系,并且可以自动捕获特征之间的交互作用。
  • 它可以生成可解释的规则,有助于理解模型如何做出决策。
  • 决策树能够处理不同类型的特征,包括分类和数值型。

任务1:跑通Baseline

快速跑通

快速跑通Baseline,我们基于百度AI Studio,将本教程Baseline部署在线上平台,可一键fork运行代码,提交结果,看到成绩。
一键运行:https://aistudio.baidu.com/aistudio/projectdetail/6618108?contributionType=1&sUid=1020699&shared=1&ts=1691406191660
  • 运行时,可以选择CPU2核8G V100 16G的配置
  • 总运行时间大约需要 5min1min,请耐心等待

实践步骤

  1. 导入库:首先,代码导入了需要用到的库,包括 pandas(用于数据处理和分析)和 DecisionTreeClassifier(决策树分类器)等。
  1. 读取数据:代码通过使用 pd.read_csv 函数从文件中读取训练集和测试集数据,并将其存储在 train_datatest_data 两个数据框中。
  1. 特征工程
- udmap_onethot 函数将原始的 udmap 特征进行了预处理,将其转换为一个长度为9的向量,表示每个key是否存在。
- 对 udmap 特征进行编码,生成 udmap_isunknown 特征,表示该特征是否为空。
- 将处理后的 udmap 特征与原始数据拼接起来,形成新的数据框。
- 提取 eid 特征的频次(出现次数)和均值,并添加为新的特征。
- 使用时间戳 common_ts 提取小时部分,生成 common_ts_hour 特征。
  1. 决策树模型训练和预测
- 创建了一个 DecisionTreeClassifier 的实例,即决策树分类器。
- 使用 fit 函数对训练集中的特征和目标进行拟合,训练了决策树模型。
- 对测试集使用已训练的模型进行预测,得到预测结果。
- 将预测结果和相应的 uuid 组成一个DataFrame,并将其保存到 submit.csv 文件中。
实践代码:
实操并回答下面问题:
  • 如果将submit.csv提交到讯飞比赛页面,会有多少的分数?
  • 代码中如何对udmp进行了人工的onehot?

任务2.1:数据分析与可视化

数据探索性分析,是通过了解数据集,了解变量间的相互关系以及变量与预测值之间的关系,对已有数据在尽量少的先验假设下通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法,从而帮助我们后期更好地进行特征工程和建立模型,是机器学习中十分重要的一步。
notion image
实践步骤:
  1. 导入必要的库,特别是画图库。
  1. 计算特征与标签之间的相关性,展示热力图。(数据探索)
  1. 展示特征与标签分组统计tu。
notion image
notion image
notion image
实践代码:
编写代码回答下面的问题:
  • 字段x1至x8为用户相关的属性,为匿名处理字段。添加代码对这些数据字段的取值分析,那些字段为数值类型?那些字段为类别类型?
  • 对于数值类型的字段,考虑绘制在标签分组下的箱线图。
  • common_ts中提取小时,绘制每小时下标签分布的变化。
  • udmap进行onehot,统计每个key对应的标签均值,绘制直方图。

任务2.2:模型交叉验证

交叉验证(Cross-Validation)是机器学习中常用的一种模型评估方法,用于评估模型的性能和泛化能力。它的主要目的是在有限的数据集上,尽可能充分地利用数据来评估模型,避免过拟合或欠拟合,并提供对模型性能的更稳健的估计。
交叉验证的基本思想是将原始的训练数据划分为多个子集(也称为折叠),然后将模型训练和验证进行多次循环。在每一次循环中,使用其中一个子集作为验证集,其他子集作为训练集。这样可以多次计算模型的性能指标,并取这些指标的平均值作为最终的模型性能评估结果。
notion image
实操步骤:
  1. 加载数据集,并对数据进行编码
  1. 导入多个模型进行交叉验证
  1. 比较模型的F1精度
编写代码回答下面的问题:
  • 在上面模型中哪一个模型的macro F1效果最好,为什么这个模型效果最好?
  • 使用树模型训练,然后对特征重要性进行可视化;
  • 再加入3个模型训练,对比模型精度;

任务2.3:特征工程

特征工程指的是把原始数据转变为模型训练数据的过程,目的是获取更好的训练数据特征。特征工程能使得模型的性能得到提升,有时甚至在简单的模型上也能取得不错的效果。
notion image
实操步骤:
  1. common_ts_day 特征:从时间戳 common_ts 中提取出日期部分的天数,以创建一个新的特征表示访问日期。
  1. x1_freqx1_mean 特征:计算特征 x1 在训练集中的频次(出现次数)以及在训练集中对应的目标列 target 的均值。这些特征可以捕捉 x1 特征的重要性和与目标的关系。
  1. 类似地,对于其他 x2x3x4x6x7x8 特征,进行了类似的操作,分别计算它们在训练集中的频次和均值。
实践代码:
编写代码回答下面的问题:
  • 加入特征之后模型的精度有什么变化?
  • 思考并加入3个额外的特征,并观测模型精度的变化

任务3:模型迭代优化

在进阶实践部分,将在原有Baseline基础上做更多优化,一般优化思路,从特征工程与模型中来思考。
  1. 特征选择与删除:分析特征的重要性,可以使用特征选择方法(如基于模型的特征重要性)来选择最具有预测能力的特征,也可以删除一些对模型性能影响较小的特征。
  1. 特征组合与交互:将不同特征进行组合、相乘、相除等操作,创建新的特征,以捕捉特征之间的复杂关系。
  1. 数值型特征的分桶(Binning):将连续的数值型特征划分为多个区间,可以提高模型对特征的鲁棒性。
  1. 类别型特征的编码:除了One-Hot编码外,可以尝试使用其他编码方式,如Label Encoding、Target Encoding等,来更好地处理类别型特征。
  1. 时间特征的挖掘:除了示例中的日期和小时提取,还可以尝试提取星期几、月份等时间信息,可能会影响用户行为。
  1. 特征缩放:对数值型特征进行缩放,将它们映射到一个相似的范围,有助于模型收敛和性能提升。
notion image
实操步骤:
  1. 在现有特征工程基础上,加入新的特征观察模型F1是否发生变化。
  1. 尝试三组能增加模型精度的特征,并记录下特征编码过程
  1. 将最优的特征从新训练模型,提交结果。

附录

实践环境配置

AI环境配置:

工具使用与提分思路

  • 比赛
  • ML
  • AI
  • Datawhale AI 夏令营第三期 AI for Science 生物学年龄评价与年龄相关疾病风险预测计算机网络
    Loading...
    目录