共计 1811 个字符,预计需要花费 5 分钟才能阅读完成。
题目背景与数据特点
2024 泰迪杯数据挖掘 B 题聚焦于 电商用户行为预测,提供了包含用户浏览记录、购买历史、商品属性等字段的 CSV 数据集。数据特点包括:

- 时间跨度 3 个月的日志数据(约 200 万条)
- 包含数值型(点击时长)、类别型(商品类别)、时序型(行为时间戳)混合特征
- 存在 10%-15% 的缺失值和明显异常值(如负数的点击量)
数据处理全流程
1. 数据清洗关键步骤
- 缺失值处理:
- 数值字段用中位数填充(避免均值受极端值影响)
-
类别字段用 ’UNKNOWN’ 标记缺失
-
异常值修正:
- 通过 IQR 方法检测并修正数值异常
- 时间戳格式统一转换为 datetime 对象
# 缺失值处理示例
import pandas as pd
df['click_duration'] = df['click_duration'].fillna(df['click_duration'].median())
df['category'] = df['category'].fillna('UNKNOWN')
# 异常值处理(IQR 方法)Q1 = df['purchase_amount'].quantile(0.25)
Q3 = df['purchase_amount'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['purchase_amount'] < (Q1 - 1.5*IQR)) |
(df['purchase_amount'] > (Q3 + 1.5*IQR)))]
2. 特征工程核心方法
- 时间特征提取:
- 分解时间戳为[小时, 周几, 是否周末]
-
计算用户活跃天数 / 频次
-
交叉特征构建:
- 用户品类偏好度 = 用户对某类目的点击次数 / 总点击次数
- 商品热度 = 历史 30 天购买量
# 时间特征生成示例
df['hour'] = df['timestamp'].dt.hour
df['is_weekend'] = df['timestamp'].dt.dayofweek >= 5
# 用户行为统计特征
user_stats = df.groupby('user_id').agg(total_clicks=('click_duration', 'count'),
avg_duration=('click_duration', 'mean')
).reset_index()
模型构建与优化
1. 算法选型对比
| 算法 | 适用场景 | 调参重点 |
|---|---|---|
| LightGBM | 处理类别特征高效 | num_leaves, learning_rate |
| XGBoost | 数值特征为主 | max_depth, subsample |
| CatBoost | 自动处理类别变量 | iterations, depth |
2. 关键调参技巧
- 使用 Optuna 进行超参数搜索
- 早停机制防止过拟合
- 特征重要性分析辅助特征筛选
import lightgbm as lgb
from sklearn.model_selection import train_test_split
# 数据集划分
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)
# LightGBM 参数设置
params = {
'objective': 'binary',
'metric': 'auc',
'num_leaves': 31,
'learning_rate': 0.05,
'feature_fraction': 0.8
}
# 训练模型
model = lgb.train(params,
lgb.Dataset(X_train, label=y_train),
valid_sets=[lgb.Dataset(X_val, label=y_val)],
early_stopping_rounds=50)
避坑指南
常见错误及解决方案
- 内存溢出:
-
解决方案:分块读取数据(chunksize)、使用 dtype 指定数据类型
-
类别特征未编码:
-
解决方案:LightGBM 可直接处理,其他算法需 LabelEncoder
-
时间序列泄露:
-
解决方案:严格按时间划分训练 / 验证集
-
评估指标选择不当:
- 解决方案:比赛常用 AUC,但业务场景可能需要 Precision@K
延伸思考
- 如何利用用户行为序列(非结构化日志)提取更深层特征?
- 冷启动用户(新用户)的预测该如何优化?
- 当特征维度超过 5000 时,有哪些高效的降维方法?
总结
通过系统化的数据清洗、创造性的特征工程以及合理的模型选择,我们构建了完整的竞赛解决方案。建议初学者先复现基线模型,再逐步尝试特征创新。记住:在数据挖掘竞赛中,特征质量往往比模型复杂度更重要。
正文完
发表至: 未分类
近一天内
