Datawhale AI夏令营第一期(机器学习方向)Task2笔记:用户新增预测挑战赛——从业务理解到技术实现

一、任务核心:业务与技术的“翻译”

本次Task聚焦“用户新增预测挑战赛”的核心逻辑,核心目标是锻炼“将业务问题转化为AI技术问题”的能力,具体包含两大能力:

  • 业务透视眼:从“识别新增用户”的业务需求倒推特征设计逻辑
  • 数据诊断术:通过可视化等手段挖掘特征中的有效信息

二、赛题核心认知:二分类任务的本质

1. 任务定义

“用户新增预测挑战赛”是由科大讯飞主办的二分类任务,需基于用户行为数据预测用户是否为新增用户(目标字段is_new_did,1表示新增,0表示非新增),评价指标为F1分数(分数越高模型性能越好)。

2. 业务与技术价值

类型具体价值
行业价值精准预测用户增长趋势、优化产品迭代方向;降低用户获取成本;为AI落地提供量化依据
技术价值解决实际用户增长预测问题;验证AI在用户行为分析中的有效性;建立可复用方法论

3. 数据基础

  • 输入数据:包含15个原始字段的用户行为事件记录,核心字段包括:
    • did:用户唯一标识(关键)
    • common_ts:事件发生时间戳(时间特征来源)
    • udmap:事件自定义属性(JSON格式,含助手/插件ID)
    • 其他字段:设备品牌、网络类型、地域信息等基础属性
  • 输出要求:CSV文件,仅含is_new_did列(值为0或1)

4. 数据关键特征(探索发现)

  • 测试集中93%的用户(did)出现在训练集中(可直接复用已知标签)
  • 训练集中88%的用户标签为0(正负样本不平衡)
  • 事件级数据需转化为用户级特征(需按did聚合)

三、解题核心:要点、难点与思路

1. 核心要点与难点

类别具体内容
核心要点从事件级数据提取用户级特征;处理高维稀疏特征;平衡正负样本;捕捉时间敏感特征
难点用户行为聚合(事件→用户);高维稀疏特征处理;样本不平衡;时间模式捕捉

2. 基础解题思路

  • 模型选择:优先树模型(如LightGBM),原因是训练速度快、对高维稀疏特征处理友好
  • 特征方向:时间特征(时段、行为间隔等)、用户行为聚合特征(行为次数、首次/末次行为时间等)
  • 样本处理:利用“测试集与训练集用户重叠”特性——已知标签直接复用,未知标签建模预测

四、Baseline方案:从设计到实现

1. 方案设计逻辑

模块具体设计依据/优势
特征设计提取时间特征(时段、停留时长等)符合用户行为分析理论,捕捉行为模式
模型选择LightGBM稳定性高、训练效率快、对预处理需求低
验证方法五折交叉验证避免单次验证的随机性,提升模型评估可靠性
阈值优化基于F1-score动态调整阈值平衡精确率与召回率,适配样本不平衡场景

2. 核心优势与待改进点

类别具体内容
方案优势- 采用五折目标编码,避免数据泄露
- 基于LightGBM的并行训练,速度比XGBoost快3-5倍
待改进点- udmap(JSON字段)未充分解析
- 缺乏特征重要性筛选
- 未处理设备品牌长尾分布

3. 核心代码逻辑

(1)交叉验证建模

通过分层K折(Stratified K-Fold)确保各折中正负样本比例一致,结合早停机制(early stopping)防止过拟合:

n_folds = 5
kf = StratifiedKFold(n_splits=n_folds, shuffle=True, random_state=42)for fold, (train_idx, val_idx) in enumerate(kf.split(X_train, y_train)):X_tr, X_val = X_train.iloc[train_idx], X_train.iloc[val_idx]y_tr, y_val = y_train.iloc[train_idx], y_train.iloc[val_idx]# 创建数据集train_set = lgb.Dataset(X_tr, label=y_tr)val_set = lgb.Dataset(X_val, label=y_val)# 模型训练(早停机制)model = lgb.train(params, train_set,num_boost_round=5000,valid_sets=[train_set, val_set],callbacks=[lgb.early_stopping(stopping_rounds=200), lgb.log_evaluation(200)])
(2)阈值优化(最大化F1)

默认0.5阈值未必最优,针对正样本稀少场景(如本任务),在0.1-0.4范围搜索最优阈值:

def find_optimal_threshold(y_true, y_pred_proba):best_threshold = 0.5best_f1 = 0# 聚焦正样本稀少场景的候选阈值for threshold in [0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4]:y_pred = (y_pred_proba >= threshold).astype(int)f1 = f1_score(y_true, y_pred)if f1 > best_f1:best_f1 = f1best_threshold = thresholdreturn best_threshold, best_f1

五、上分思路:快速提升方向

1. 特征工程优化

  • 解析udmap:提取JSON中的botIdpluginId,构建用户使用的助手/插件数量、类型等特征
  • 时间特征深化:用户首次/末次行为时间、行为间隔、活跃时段分布(如是否在工作日活跃)
  • 用户行为聚合:按did聚合事件,计算行为次数、涉及模块/事件类型数量等

2. 数据利用优化

  • 复用已知标签:测试集中与训练集重叠的did,直接使用训练集标签(无需预测)
  • 处理长尾分布:对设备品牌等长尾特征进行分组(如合并低频品牌为“其他”)

3. 模型与验证优化

  • 特征筛选:基于特征重要性剔除无效特征,减少噪声
  • 样本平衡:采用SMOTE等方法处理正负样本不平衡(需注意避免数据泄露)
  • 模型融合:结合LightGBM与XGBoost、CatBoost等模型的预测结果

六、总结与收获

本次Task通过“用户新增预测”案例,系统学习了从业务理解到技术实现的全流程:

  1. 明确二分类任务的核心是“平衡精确率与召回率”(F1指标的意义)
  2. 掌握了基于用户行为数据的特征设计逻辑(时间特征、聚合特征)
  3. 理解了Baseline方案的设计思路(模型选择、交叉验证、阈值优化)
  4. 获得了上分的具体方向(特征深化、数据复用、模型优化)

后续将基于这些思路,进一步实践进阶的特征工程与模型调优方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88916.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88916.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88916.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【人工智能】华为昇腾NPU-MindIE镜像制作

本文通过不使用官方镜像,自己在910b 进行华为mindie的镜像制作,可离线安装部署。 硬件:cann 8.0 1. 部署参考文档: 安装依赖-安装开发环境-MindIE安装指南-MindIE1.0.0开发文档-昇腾社区 2. 参数说明文档:https://www.hiascend.com/document/detail/zh/mindie/100/min…

关于我用AI编写了一个聊天机器人……(番外1)

极大地精简了1.3.6版本的逻辑。 不会作为正式版发布。 未填充数据。核心结构代码包含两个主要部分&#xff1a;数据结构&#xff1a;使用map<string, string>存储问答对&#xff0c;其中键是问题&#xff0c;值是答案主程序流程&#xff1a;初始化预定义的问答对进入无限…

全球钠离子电池市场研究,市场占有率及市场规模

钠离子电池是一种新兴的储能技术&#xff0c;利用钠离子&#xff08;Na⁺&#xff09;代替锂离子作为电荷载体&#xff0c;为锂离子电池提供了一种经济高效且可持续的替代品。它们的工作原理类似&#xff0c;在充电和放电循环过程中&#xff0c;钠离子在阳极和阴极之间移动。关…

SwiftUI 全面介绍与使用指南

目录一、SwiftUI 核心优势二、基础组件与布局2.1、基本视图组件2.2、布局系统2.3、列表与导航三、状态管理与数据流3.1、状态管理基础3.2、数据绑定与共享四、高级功能与技巧4.1、动画效果4.2、绘图与自定义形状4.3、网络请求与异步数据五、SwiftUI 最佳实践六、SwiftUI 开发环…

ADC采集、缓存

FPGA学习笔记_李敏儿oc的博客-CSDN博客 TLV5618.v&#xff1a;实现DAC数模转换&#xff0c;产生模拟信号&#xff0c;输出指定电压值 时序图 FPGA学习笔记&#xff1a;数据采集传输系统设计&#xff08;二&#xff09;&#xff1a;TLV5618型DAC驱动-CSDN博客 ADC128S052.v&…

(C++)STL:stack、queue简单使用解析

stack 栈 简介 stack 栈——容器适配器 container adapter 与前面学的容器vector、list的底层实现不同&#xff0c;stack功能的实现是要借助其他容器的功能的&#xff0c;所以看stack的第二个模板参数是容器。 最大特点&#xff1a;LIFO&#xff1a;Last In, First Out&#xf…

在Adobe Substance 3D Painter中,已经有基础图层,如何新建一个图层A,clone基础图层的纹理和内容到A图层

在Adobe Substance 3D Painter中&#xff0c;已经有基础图层&#xff0c;如何新建一个图层A&#xff0c;clone基础图层的纹理和内容到A图层 在 Substance 3D Painter 中克隆底层纹理到新图层的最快做法 操作步骤 添加空白 Paint Layer 在 Layer Stack 顶部点击 → Paint La…

视频编码中熵编码之基于上下文的变长编码(Huffman霍夫曼编码和指数哥伦布)

视频编码中熵编码之基于上下文的变长编码&#xff08;Huffman霍夫曼编码和指数哥伦布&#xff09; 视频编码中熵编码之基于上下文的变长编码Huffman霍夫曼编码和指数哥伦布&#xff09;视频编码中熵编码之基于上下文的变长编码&#xff08;Huffman霍夫曼编码和指数哥伦布&#…

游戏玩法的专利博弈

首席数据官高鹏律师数字经济团队创作 AI辅助一、数字战场的护城河&#xff1a;游戏玩法的专利价值觉醒在数字经济的浪潮中&#xff0c;游戏行业正以每年超15%的增速重塑全球娱乐版图。2024年中国游戏市场规模突破3257亿元&#xff0c;用户规模达6.74亿&#xff08;数据来源&…

小架构step系列11:单元测试引入

1 概述 在还没有写什么代码之前&#xff0c;就引入单元测试&#xff0c;是要强调单元测试的重要性。当一套代码的生命周期比较长的时候&#xff0c;单元测试更加重要。生命周期长的代码&#xff0c;不管是产品人员还是开发人员&#xff0c;可能都会换了一批又一批&#xff0c;…

Linux 文件共享之 HGFS 共享配置全解析

一、前言在使用 VMware 虚拟机搭建 Linux&#xff08;以 Ubuntu 为例&#xff09;环境时&#xff0c;常常需要实现主机与虚拟机之间的文件共享&#xff0c;HGFS&#xff08;VMware Host-Guest File System&#xff09;就是一种常用的文件共享方式。通过它&#xff0c;我们可以方…

模块化设计赋能:定制组装锂电池设备的柔性生产解决方案

在锂电池行业快速迭代的背景下&#xff0c;定制化需求与规模化生产之间的矛盾日益凸显。传统锂电池组装设备采用固定式架构&#xff0c;功能模块高度耦合&#xff0c;导致设备换型周期长、兼容性差&#xff0c;难以适应电芯规格频繁变化、工艺路线持续升级的市场需求。模块化设…

Kubernetes 架构原理与集群环境部署

一&#xff1a;为什么需要 Kubernetes在业务开始进行容器化时&#xff0c;前期需要容器化的项目可能并不多&#xff0c;涉及的容器也并不多&#xff0c;此时基于 Docker 容器直接部署至宿主机也能实现基本的需求。但是随着项目越来越多&#xff0c;管理的容器也会越来越多&…

JavaScript中关于环境对象的拓展

1.环境对象的定义环境对象指的是函数内的特殊变量this&#xff0c;this指向函数的调用者它代表当前函数的运行环境在平常我们判断this经常用口诀谁调用它&#xff0c;它就指向谁&#xff0c;以下是几种常见情况1. 在全局作用域中&#xff0c;this指向window2.在函数中&#xff…

202507中央城市工作会议

国家终于要给城市"升级系统"了&#xff01;未来城市不再拼命盖新楼&#xff0c;而是让现有城区更安全、舒适、智能&#xff0c;且每个城市都要找到自己的特色发展路径 2025年7月北京“中央城市工作会议”。领导人聚在一起&#xff0c;讨论“怎么把中国城市搞得更好”…

springboot如何redis锁

如何解决超卖问题?超卖问题&#xff1a;就是多个线程并发执行&#xff0c;目前唯一方案是加锁。如图&#xff1a;悲观锁其实还有数据库的互斥锁。悲观锁是最常见的乐观锁实现的原理&#xff1a;版本号&#xff1a;这种方案就是&#xff1a;扣款库存的时候首先先查询版本号&…

minio批量删除对象不生效

下午在写minio上批量删除对象的逻辑&#xff0c;各种改对象名称&#xff0c;各种核对代码&#xff0c;发现啥都没错&#xff0c;但是删除就是不生效。 代码如下&#xff1a; from minio.deleteobjects import DeleteObjectdelete_object_list [DeleteObject("20250626/20…

如何设计实现开发自助重启工具-01-设计篇

自助重启系列 如何设计实现开发自助重启工具-01-设计篇 应用部署作业-02-流程 如何实现自助重启-03-实现篇 开发自助重启 说明&#xff1a;有时候研发产线需要重启&#xff0c;为了保证安全、或者说提升效率&#xff0c;最好有一个统一的研发自助重启页面。 这个功能可应…

ChatTongyi × LangChain:开启多模态AI应用创新之门

阿里云通义实验室推出的ChatTongyi&#xff08;基于通义千问大模型&#xff09;与LangChain框架的深度集成&#xff0c;为开发者打造了一套高效、灵活、全面的AI开发工具链。无论是文本对话、复杂任务自动化&#xff0c;还是图像理解&#xff0c;这一组合都为多场景智能应用的落…

Android Studio C++/JNI/Kotlin 示例 二

MainActivity.ktpackage com.demo.learn1import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivityclass MainActivity : ComponentActivity() {// 加载原生库init {System.loadLibrary("native_code")}// 声明原生方法// 数学…