No description
- Jupyter Notebook 73.9%
- Python 26.1%
| configs | ||
| eda | ||
| kuairand_baseline | ||
| .gitignore | ||
| .python-version | ||
| main.py | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
KuaiRand-1K DIN Multi-Task Baseline
在 KuaiRand-1K 标准曝光日志上构建可复现 baseline:
- 模型:
DIN encoder + 可插拔多任务 backbone(当前实现MMoE) - 任务:
is_click / is_like / long_view - 管理:原生
wandb(默认offline)
Pipeline
preprocess- 历史窗口:
2022-04-08 ~ 2022-04-21 - 目标窗口:
2022-04-22 ~ 2022-05-08 - split:
train: 2022-04-22 ~ 2022-05-04val: 2022-05-05 ~ 2022-05-06test: 2022-05-07 ~ 2022-05-08
- DIN 序列仅使用历史
is_click=1行为,支持历史 engagement 特征(is_click / is_like / long_view)。 - 预处理流程:读取与 schema 校验 -> 编码与清洗 -> 严格时序样本构建 -> 仅用 train 统计量归一化 -> 落盘。
- 预处理结果默认写入共享缓存:
artifacts/preprocessed_cache/<signature>/,同数据与切分配置会自动复用;如需强制重建可设preprocess.force_rebuild = true。
- 历史窗口:
train- 三任务二分类联合训练(BCE)。
- 默认 baseline:三任务统一使用
sqrt(neg/pos)capped 正样本重加权。 - 可选 unweighted baseline:
train.loss.positive_weighting = "none",不做正样本重加权。 - 验证集
mean_gAUC早停,若不可用回退mean_roc_auc。
evaluate- 输出三任务
ROC-AUC / gAUC / PR-AUC / LogLoss / base_rate。
- 输出三任务
Project Layout
configs/
din_mmoe_baseline.toml
din_mmoe_interaction_level.toml
din_mmoe_score_boost.toml
din_mmoe_unweighted_baseline.toml
kuairand_baseline/
config.py
constants.py
dataset.py
evaluate.py
metrics.py
model.py
preprocess.py
torch_utils.py
train.py
main.py
Install
uv sync
W&B
默认启用 wandb 且 mode = "offline"。
[wandb]
enabled = true
project = "kuairand"
mode = "offline"
watch_model = false
log_model = false
如果需要上传线上面板:
wandb login- 将
mode改为online
Run
加权 baseline(默认):
python main.py preprocess --config configs/din_mmoe_baseline.toml
python main.py train --config configs/din_mmoe_baseline.toml
python main.py evaluate --config configs/din_mmoe_baseline.toml --split test
unweighted baseline(不做正样本重加权):
python main.py preprocess --config configs/din_mmoe_unweighted_baseline.toml
python main.py train --config configs/din_mmoe_unweighted_baseline.toml
python main.py evaluate --config configs/din_mmoe_unweighted_baseline.toml --split test
score-boost experiment:
python main.py preprocess --config configs/din_mmoe_score_boost.toml
python main.py train --config configs/din_mmoe_score_boost.toml
python main.py evaluate --config configs/din_mmoe_score_boost.toml --split test
interaction-level experiment:
python main.py preprocess --config configs/din_mmoe_interaction_level.toml
python main.py train --config configs/din_mmoe_interaction_level.toml
python main.py evaluate --config configs/din_mmoe_interaction_level.toml --split test
Outputs
共享预处理缓存(默认):
artifacts/preprocessed_cache/<signature>/{train,val,test}/sparse.npydense.npyhistory.npyhistory_engagement.npylabels.npyinfo.npy
item_sequence_lookup.npyfeature_meta.json
实验输出目录(按配置 output_dir 分开):
<output_dir>/checkpoints/best_model.pt<output_dir>/metrics/metrics.json<output_dir>/metrics/training_history.json<output_dir>/metrics/predictions_test.csv<output_dir>/resolved_config.json
Notes
model.multitask_backbone接口仍保留,当前注册实现只有mmoe。- 可选
model.din.interaction_level_feature会把历史互动压成单一离散等级并拼到 DIN activation 输入中:0=padding/none, 1=click, 2=long_view, 3=like。 - 可选
model.din.score_boost会对 DIN 序列 attention score 做额外放大:is_like=1乘5.0,long_view=1乘1.5,同时命中时按较大值处理。 labels.npy固定为三列:is_click,is_like,long_view。- 归一化统计严格由
trainsplit 拟合并应用到val/test,避免数据泄漏。