模型训练与优化笔记总结
一、项目背景与目标
- 核心任务:基于用户设备数据(包含时间戳、设备信息、地域信息等特征),预测测试集中的设备是否为新设备(
is_new_did),属于二分类问题。 - 评估指标:使用F1分数作为主要评估指标,需通过阈值优化提升模型表现。
二、数据处理流程
-
数据加载
- 加载训练集(
train.csv)、测试集(testA_data.csv),合并为full_df用于特征工程。 - 提取提交文件所需的
did(设备唯一标识)。
- 加载训练集(
-
时间特征工程
- 将时间戳(
common_ts)转换为datetime格式,提取day(日期)、dayofweek(星期几)、hour(小时)等时间特征。 - 优化补充:增加分钟/秒、是否周末、时间周期性编码(正弦/余弦变换)、时间间隔(
ts_diff)等特征,增强时间维度信息。
- 将时间戳(
-
特征预处理
- 类别特征处理:对
device_brand、operator等类别特征使用LabelEncoder编码,将字符串转为数值。 - 特殊特征处理:将
udmap(JSON格式)解析为多个键值对特征(key0-key8),丰富特征维度。
- 类别特征处理:对
三、关键分析与优化点
-
设备ID(did)重叠分析
- 训练集与测试集的
did存在重叠,可利用重叠部分的已知标签辅助预测,未重叠部分需模型推断。
- 训练集与测试集的
-
特征工程增强
- 目标编码(Target Encoding):对类别特征,基于训练集标签均值进行编码,避免过拟合。
- 聚合特征:按
did、device_brand等分组,计算common_ts、hour的均值/标准差/最值,捕捉设备行为模式。 - 统计特征:计算类别特征的出现频次(如
device_brand_cnt),反映特征重要性。
-
模型选择与训练
- 使用LightGBM作为基础模型(高效处理类别特征和大规模数据)。
- 交叉验证策略:采用
GroupKFold按did分组,避免同一设备数据同时出现在训练集和验证集,减少数据泄露。
-
阈值优化
- 由于二分类问题中正负样本可能不平衡,通过PR曲线寻找最优阈值(最大化F1分数),而非固定使用0.5阈值。
四、常见问题与解决方案
-
LightGBM模块未找到
- 原因:环境未安装LightGBM库。
- 解决:使用
pip install lightgbm或conda install -c conda-forge lightgbm安装,验证安装时需确保环境激活。
-
模型过拟合
- 缓解措施:增加正则化参数(
lambda_l1、lambda_l2)、控制树深度(max_depth)、使用早停机制(early_stopping_rounds)。
- 缓解措施:增加正则化参数(
-
特征重要性分析
- 通过
model.feature_importance(importance_type='gain')提取特征重要性,优先保留高贡献特征,简化模型。
- 通过
五、优化方向总结
- 特征层面:增加更多设备行为序列特征(如连续操作间隔、高频操作时段)、地域细粒度特征(城市等级)。
- 模型层面:尝试集成学习(如LightGBM+XGBoost)、调参优化(学习率、叶子节点数)。
- 策略层面:对已知
did直接复用标签,仅对未知did用模型预测,减少误差。
六、关键代码模块
- 数据加载与合并、时间特征提取、类别特征编码、模型训练与交叉验证、阈值优化、结果提交。
- 核心目标:通过特征工程和模型调优提升F1分数,确保预测结果的准确性和泛化能力。
905

被折叠的 条评论
为什么被折叠?



