共计 2197 个字符,预计需要花费 6 分钟才能阅读完成。
赛题背景与数据特点分析
2023 年泰迪杯 B 赛题聚焦于电商领域的用户行为预测。原始数据包含约 50 万条用户行为记录,主要字段包括:

user_id:匿名用户 IDitem_id:商品 IDbehavior_type:用户行为类型(点击 / 收藏 / 加购 / 购买)timestamp:行为时间戳
数据特点分析:
- 高稀疏性 :用户 - 商品交互矩阵极度稀疏(99.5% 以上为零值)
- 时间序列特性 :数据包含连续 30 天的行为记录
- 类别不均衡 :购买行为仅占总样本的 2.3%
数据预处理完整流程
1. 缺失值处理
import pandas as pd
df = pd.read_csv('user_behavior.csv')
print(df.isnull().sum()) # 检查缺失值
# 时间戳字段缺失时用前值填充
df['timestamp'].fillna(method='ffill', inplace=True)
2. 异常值检测
# 检测异常时间戳(比赛期间为 2023-04-01 至 2023-04-30)valid_start = pd.to_datetime('2023-04-01').timestamp()
valid_end = pd.to_datetime('2023-04-30 23:59:59').timestamp()
abnormal_mask = (df['timestamp'] < valid_start) | (df['timestamp'] > valid_end)
print(f'异常记录数:{abnormal_mask.sum()}')
3. 数据标准化
from sklearn.preprocessing import MinMaxScaler
# 对数值型特征(如行为计数)进行归一化
scaler = MinMaxScaler()
df[['click_count']] = scaler.fit_transform(df[['click_count']])
特征工程方法
1. 基础特征提取
# 用户维度特征
grouped = df.groupby('user_id')
user_features = grouped.agg({
'item_id': 'count',
'behavior_type': lambda x: (x=='buy').sum()}).rename(columns={
'item_id': 'user_total_actions',
'behavior_type': 'user_buy_count'
})
2. 时间窗口特征
# 计算用户最近 7 天购买频次
df['date'] = pd.to_datetime(df['timestamp'], unit='s').dt.date
last_7_days = df[df['date'] > pd.to_datetime('2023-04-23')]
user_7day = last_7_days.groupby('user_id')['behavior_type'].apply(lambda x: (x=='buy').sum()).rename('user_7day_buy')
3. 交叉特征
# 用户 - 商品组合特征
user_item = df.groupby(['user_id', 'item_id']).agg({'behavior_type': ['count', lambda x: (x=='buy').sum()]
})
基础建模方案
1. LightGBM
import lightgbm as lgb
params = {
'objective': 'binary',
'metric': 'auc',
'num_leaves': 31,
'learning_rate': 0.05
}
train_data = lgb.Dataset(X_train, label=y_train)
model = lgb.train(params, train_data, num_boost_round=100)
2. 逻辑回归
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(class_weight='balanced')
lr.fit(X_train, y_train)
算法比较:
- LightGBM:适合处理高维稀疏特征,但需要调参
- 逻辑回归:训练速度快,可解释性强,但对非线性关系捕捉能力弱
模型评估与优化建议
评估指标
- AUC-ROC:应对类别不均衡问题的首选指标
- F1-score:平衡精确率与召回率
- Precision@K:关注 TopK 预测的准确率
调参技巧
- 使用贝叶斯优化替代网格搜索
- 早停法(early stopping)防止过拟合
- 通过特征重要性分析进行特征筛选
避坑指南
常见错误
- 内存爆炸 :
- 错误:直接对百万级数据做 one-hot 编码
-
解决:使用稀疏矩阵格式或特征哈希
-
数据泄露 :
- 错误:使用未来信息构建特征
-
解决:严格按时间划分训练 / 验证集
-
评估偏差 :
- 错误:在不平衡数据上使用 accuracy
- 解决:改用 AUC 或 F1-score
思考题
- 如何利用用户行为序列(点击 -> 加购 -> 购买)构建更有价值的特征?
- 对于只有点击但未购买的用户,应该设计哪些特殊特征?
- 当遇到千万级数据时,应该如何优化特征工程的执行效率?
通过本文的流程实践,新手可以快速建立 baseline 模型,后续可通过集成学习、深度学习等方法进一步提升效果。建议先确保 Pipeline 的正确性,再逐步尝试更复杂的模型。
正文完
发表至: 未分类
近两天内
