题目重点:面对大量表格行和两个标签,先固定预测目标与切分,再做无泄漏预处理、双头网络和按标签分层评估。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版一行对应一个样本,两个标签同属该行但可能分别缺失;两标签是二分类还是回归在题目没有公布,以下以二分类多任务作为示例。
- 若同一客户/账户跨多行,切分需按实体或时间避免泄漏;从训练集拟合的填补/标准化参数才能用于验证和测试。
- 45 分钟现场训练以能运行、可复现、能解释的 baseline 为目标;网络深度/隐藏维度与超参不假装原题给定。
解题路线
- 先读 schema、标签缺失率、类基率和关键实体/时间列,定两个 label 的业务目标与 metric。若目标语义不同,损失函数和报告不能一概平均。
- 划分 train/validation/test 后,在 train 上拟合类别字典、连续变量中位数/截断与标准化参数;为缺失连续特征另加 missing indicator,类别缺失给独立 UNK。null row 若几乎无特征,可单独报告或按题面过滤,不能静默丢弃标签分布。
- 建共享编码层加两个输出 head。每个标签单独 mask 缺失标签,损失按有效样本数归一并记录两项 loss;极不平衡时比较 class weight 与采样,校准时回到真实分布。
- 先跑小批次 overfit 检查数据/梯度链通畅,再用 validation 做早停和阈值选择,test 只在最后一次评估。报告每个标签的 PR-AUC、ROC-AUC、召回@固定精度、校准和重要切片;必要时与逻辑回归/树模型 baseline 比较,证明 NN 值得。
- 现场说明运行时间、GPU/CPU、随机种子、数据读取批次、NaN loss 与内存限制;如果数据不完整,先提交可运行 pipeline 和最小验证。
手动走一遍
训练例 1000 行中 label A 阳性 1%、label B 阳性 30%,A 还有 10% 未标注。若直接平均两头 accuracy,可用全部预测 0 得到虚高;A 应看 PR-AUC/固定误伤率下召回,B 应看自己的基率与阈值。A 的缺失标签行可训练 B head,但 A loss 必须 mask。所有数字仅为训练假设。
规模与取舍
N 行、F 个输入特征、隐藏宽 H、E 个 epoch 的简单一层共享网络前向/反向约 O(ENFH+ENH²),批大小 B 的激活内存约 O(B(F+H));真实瓶颈还可能是数据清洗/IO。
易错点与追问
容易失分的边界
- 在全部数据上计算填补/标准化统计量,再切 train/test。
- 两个 label 缺失时直接把 null 填 0 作为负样本。
- 只给总体 accuracy,不分头和类基率。
- 认为 NN 一定优于树/线性模型,未做 baseline。
- 把 xxk×xx 的模糊规模补成具体样本/特征数。
继续深挖
- 两个任务梯度冲突时如何调整 loss 权重或拆模型?
- 用户级/时间级切分会怎样改变估计?
- 特征缺失率线上高于训练时,如何告警与回退?
