# Resume and Interview Guide

## 简历项目名

**TRACE-Rec：偏差感知的短视频两阶段推荐系统**

技术栈可写：`PyTorch / NumPy / Pandas / scikit-learn / FastAPI / Docker / pytest`

## 推荐描述

投递前分别从 [resume_metrics.md](../reports/resume_metrics.md) 核对 KuaiRec
Dev/Ranking 数字，从 [KuaiRand-1K External Final](../reports/external/kuairand_1k_v21/FINAL_SUMMARY.md)
核对独立外部评测。建议一页简历压缩为以下 4–5 条：

- 基于 KuaiRec 2.0 构建严格自然日切分的两阶段推荐流水线，实现时间感知 4 路多兴趣召回、约束式多样性重排和 MMoE 多目标排序，并通过数据、源码、checkpoint 哈希与一次性 Test 审计约束调参泄漏。
- 在 3 个正式种子的全库 Dev 评测中，TRACE 相对 Single-interest 将 NDCG@20 提升 15.14%、Recall@50 提升 41.50%，paired-user 95% CI 均排除 0，同时披露 Coverage@50 下降 10.71%；在独立 KuaiRand-1K 随机曝光 External Final 中，TRACE 主指标 NDCG@10 为 0.39118，高于 baseline 的 0.38531，但 +0.00587 的 95% CI [-0.00983, 0.02312] 跨 0，因此不宣称显著提升。
- 冻结后以固定 6 模型 × 3 种子 Dev-only 归因协议复核组件：完整多兴趣相对单兴趣 NDCG@20 +0.001436、Recall@50 +0.008507（均三种子同向）；时间衰减的 Recall 增益三种子同向，而 diversity regularizer 与 smooth-max 相对 hard-max 的 retrieval 增益不成立，保留负结果和 route-collapse 权衡，不事后改 frozen 模型。
- 设计 near-fully-observed anchor 校准协议，将 anchor-dev Brier 从 0.6153 降至 0.1903；在 400 万条确定性 Train 样本和 151 万条完整 Dev 曝光上比较 Logistic、Shared-Bottom 与 MMoE，冻结候选在 182 万条 Ranking Final 曝光上取得 complete-play NDCG@10 0.7242。
- 将冻结 Dev 模型封装为 CPU 默认的 FastAPI 推荐工作台，实现显式模型注册、懒加载、结果缓存、Raw/Balanced 最终 Top-K 配对诊断、兴趣路由解释、健康检查、结构化日志和可校验跨机资产包；reader/writer lifecycle guard 通过普通 recommend 与 activate 并发契约测试，避免激活中途清空运行时。

原 KuaiRec Retrieval Final 因 NameError 失败且永久保留，KuaiRand External
Final 是独立评测，不是修复、重试或替代。这个边界适合在面试中主动说明，
不必为了简历观感把两个实验混写成一次成功的 KuaiRec Test。

不要写“线上提升”“SOTA”“无偏 IPS”“因果增益”或“外部评测显著提升”。

## 搜广推岗位版本

投递搜索/推荐/广告算法大类时，项目名可改为：

**TRACE-Rec：可审计的搜广推算法与 A/B 实验工作台**

技术栈可补充：`DeepFM / Probability Calibration / Fairness Constraints / BM25 / Learning-to-Rank / Uplift Modeling / A/B Testing`。

建议使用以下 5 条，且主动说明四类公开数据是独立证据而非同一线上漏斗：

- 基于 KuaiRec 构建严格 as-of 的多兴趣召回、约束重排、MMoE 排序与 CPU FastAPI 服务，三种子 Dev 上 TRACE 相对 Single-interest 将 NDCG@20 提升 15.14%、Recall@50 提升 41.50%，同时披露 Coverage@50 下降 10.71%。
- 在 Amazon ESCI 人工相关性转换镜像上实现 candidate-order、BM25、TF-IDF/SVD Dense 与线性 Pairwise LTR，采用 Query 级 Train/Dev/Test 隔离和 Train-only 文本表征；8,850 Query 固定 Test 上 LTR NDCG@10 0.80175，较 BM25 的 +0.01748 差值具有 95% paired Query-bootstrap CI [0.01545, 0.01960]，并绑定输入、配置、源码快照、JSON 模型和结果 SHA-256。
- 在 Criteo FairJob 107 万条真实职位广告曝光上实现 protected-attribute-unaware DeepFM、Dev-only Platt 校准和公平惩罚 Pareto 选择；用户隔离 Test 上 ROC-AUC 0.69863、PR-AUC 0.01868，NLL 相对常数先验降低 0.001672，95% user-cluster CI [-0.002483, -0.000935]；非零公平 λ 未在 Dev 泛化，因此冻结选择 λ=0，不虚构公平提升。
- 重分析 64,000 行 Hillstrom 历史三臂随机营销实验，对 Visit/Conversion/Spend 计算 ITT、置信区间和 Holm 校正，并用固定 hash Train/Test 评估 S/T learner 的 AUUC、Qini、Top-K policy value 与 bootstrap 不确定性；不把历史 RCT 写成本项目线上广告收益。
- 实现版本化 SHA-256 稳定分桶、互斥实验层、Assignment/Exposure/Outcome 事件契约、SRM、treatment-adjusted CUPED、Holm 与 MDE；20,000 单元 dry run 完成全量 assignment 重算、A/A 校验和已知 +4pp 合成效应恢复，并通过页面/API 展示四条证据泳道。

更完整的数字与运行口径见 [SGR_EXPERIMENTS.md](SGR_EXPERIMENTS.md)。

## 三分钟讲法

### 0:00-0:40 问题

短视频推荐日志受曝光策略影响，只在偏置日志上优化可能把流行度偏差误认为模型能力。项目因此把 `big_matrix` 当作工业日志视角，把 `small_matrix` 当作近全观测敏感性视角，并严格隔离 Dev 和 Test。

### 0:40-1:30 方法

召回侧用 4 路时间感知兴趣表示替代单一用户向量，用低温 smooth-max 聚合路由匹配，训练目标为 multi-positive in-batch sampled-softmax。随后用受质量和集中度约束的 Balanced 重排增加路由覆盖与新颖度。排序侧比较 Logistic、Shared-Bottom 和 MMoE，并同时预测完整播放与有效播放。

### 1:30-2:20 结果与反例

TRACE 在三种子 KuaiRec Dev 上的 NDCG@20 和 Recall@50 稳定提升，但 Coverage@50 下降，因此没有只报正向数字。独立 KuaiRand-1K 随机曝光 External Final 中，TRACE 的预注册主指标 NDCG@10 为 0.39118，高于 Single-interest 的 0.38531；但差值 +0.00587 的 95% CI [-0.00983, 0.02312] 跨 0，只能说点估计最高，不能说统计显著。排序候选在 KuaiRec Ranking Final 上的 complete-play NDCG@10 为 0.7242，但 task score 有 8.16% 的 complete-above-valid 冲突，不能包装成单调生产概率。

### 2:20-3:00 工程闭环

每个指标来自机器可读报告，当前 source-only 完整回归测试为 `365/365 PASS`。原 KuaiRec Big Retrieval 的唯一 audited run 因诊断 NameError 失败后没有删除审计或重跑；当前新增的是未来路径的防复发加固，而不是重跑历史 Final。small final 因依赖链被跳过；KuaiRand External Final 则使用独立数据、独立冻结协议完成，它不是前者的修复或替代。服务页面仍显示 `DEV ONLY`，因为在线工作台使用 KuaiRec Dev 产物且召回与排序没有联合调优；KuaiRand 只作为外部评测证据展示。

## 演示顺序

1. 在终端启动 CPU 服务，再请求 `/api/health` 和 `/api/models`；先证明真实后端可用，并指出活动模型 stage 为 `dev_only`。
2. 打开“实验结果”，展示三种子 Dev 指标、Coverage 回退、完整级联权衡和 Docker/压测证据。
3. 打开“搜广推实验”，先说明四个独立 badge，再展示 FairJob DeepFM/NLL/公平选择、ESCI 四方法与 paired CI、Hillstrom ITT/uplift CI，以及 A/B 的 SRM、A/A、事件门禁和 MDE；不能称为同一线上业务链。
4. 切到“推荐工作台”，选择用户、日期并运行默认的“并排对比”；解释最终 Top-K overlap、每侧替换项、兴趣路由、TRACE/Policy/Final 名次和冷热状态。
5. 如果两侧完全一致，应如实说明这是合法结果，可能是该上下文无需调整或共享正式 ranker 使最终列表收敛；如果有差异，只描述本次请求的替换与名次变化，不能包装成离线提升。
6. 打开“系统状态”和 API 文档，展示 CPU、懒加载、缓存、P50/P95、日志路径、严格请求 schema 和模型注册接口。
7. 最后单独打开 KuaiRand-1K `FINAL_SUMMARY.md`，展示 0.39118 对 0.38531、delta +0.00587 和跨 0 的置信区间；明确它是外部评测证据，不在网页模型选择中，也不代表修复了 KuaiRec Retrieval Final。

完整命令见 `docs/DEMO.md`。

## 高频追问

### 为什么不用随机切分？

随机切分会让未来交互和流行度统计泄漏到训练侧。项目按自然日切分，并让每个特征只使用目标日开始前的累计信息。

### 多兴趣为什么有效？

Single-interest 会把多个偏好压进一个向量。TRACE 让候选物品通过低温 smooth-max 更强调匹配路由，长历史和较高兴趣多样性的用户收益更明显；但最高 cold-target-share 分群也出现退化，说明该聚合不是普适最优。

### small_matrix 为什么不能把缺失项当负例？

它接近全观测但并非数学上的稠密全矩阵。缺失项没有明确反馈语义，补成 0 会人为改变 Brier 和排序指标。

### SNIPS 是无偏的吗？

不是。仓库没有真实日志 propensity，inverse-popularity 只是启发式重加权，命名和报告都明确限制其因果含义。

### 为什么 Balanced 不是覆盖率最高的策略？

Aggressive 策略可获得更高冷启动和覆盖收益，但明显伤害暖尾并提高集中度。工作台默认需要满足预先冻结的多目标约束，而不是单指标最大化。

### 为什么 Test 只跑一次？

重复查看 Test 并据此改代码，本质上会把 Test 变成 Dev。一次性审计让失败也留痕，能证明最终数字不是多次尝试后挑出的结果。

### 原 KuaiRec Retrieval Final 为什么没有指标？

唯一 audited run 在 Single-interest 完成训练和六日评分后，组装 cohort mask 时把四个字符串键误写为变量，触发 NameError。报告 models 为空，没有发布任何模型指标；审计保留为 failed，代码补了回归测试但没有重跑 Test。这个结果应作为工程 postmortem 讲，不应隐藏。

### KuaiRand External Final 证明了什么？

它证明三个模型在 KuaiRand-1K 标准策略日志上重新训练后，可以在物理隔离的随机曝光 holdout 上按预注册、哈希绑定、append-only 协议完成一次评测。TRACE 的主指标点估计最高，但 paired-user 95% CI 跨 0，因此它没有证明相对 Single-interest 的统计显著提升，更没有证明线上收益、因果增益或 SOTA。

### 为什么网页不能选择 KuaiRand 模型？

KuaiRand External Final 的职责是提供独立评测证据，不是产出默认 serving artifact。当前注册表只加载带完整 KuaiRec Dev serving context、checkpoint 校验和 ranking contract 的模型；把 Final 评测模型直接放进选择器会混淆 Test 审计与部署边界。若将来部署 KuaiRand，需要另建不依赖 Final 报告选参的 `serving` 产物和完整运行上下文。

### Complete score 为什么可能高于 Valid score？

真实标签满足 complete 蕴含 valid，但当前双任务网络只用损失门禁，没有结构化单调层。选中模型在 Dev/Final 的冲突率为 8.55%/8.16%，所以 UI 正确称其为未校准 task score。若做真实概率产品化，需要改为条件概率分解或显式单调约束。

### 页面串起来后能否称真实 E2E？

不能。页面确实执行 TRACE 候选生成、Balanced 可选重排和 CPU ranker，但召回与排序分别选参，没有联合候选分布上的级联指标或线上 A/B。它是可运行的候选排序演示，不是生产收益证据。

### 内容特征是否存在时间泄漏？

动态播放、点赞、评论字段没有作为静态内容。Caption/text 来自发布时快照，项目假设语义在上传时可获得；因此 cold-item 结论必须携带该假设。更严格的扩展是补仅使用原始 31 类标签的消融。

### 与开源项目相比有什么自己的工作？

仓库没有 vendoring 第三方推荐实现。借鉴点是数据集定义、常见基线和 MMoE 架构，自己的工作集中在严格 as-of 协议、多兴趣消融、近全观测校准契约、约束重排、分群归因、Test 防线和部署闭环。

## 诚实边界

- 当前不是线上生产系统，没有真实 A/B、实时特征流或 ANN 集群。
- Dockerfile/Compose 已在 Windows + WSL2 上完成真实 build、健康检查、Compose 启动和推荐 smoke；可以写“完成单机容器化验收”，但不能扩大为线上集群、真实流量或高可用生产部署。
- 离线指标只证明在本仓库协议下的对照结果。
- KuaiRand-1K 上 TRACE 的主指标点估计最高，但置信区间跨 0，不能写成“稳定”或“显著”外部提升。
- 网页默认 serving 模型来自 KuaiRec Dev；KuaiRand External Final 仅作为报告证据，不是可选线上模型。
- 算法组合具有完整性和工程创新，但不应包装为已发表的新理论。
- 面试中主动讲一个负结果和一个退化分群，可信度通常高于堆叠更多正向指标。
