# 教学数据卡

**所有 CSV 数值与序列片段均为合成教学数据，不是真实实验，不是功能蛋白设计。**

生成方式见 `../build.py`，版本 1，2026-09-11。数据为本项目原创模拟；可用于复现本书练习。没有从 ProteinGym 或 Figshare 复制实验数据，因此没有假设其文件级再分发许可。

## measurement-audit.csv

六行供 Day 3 审查：故意包含完整重复记录、缺失 score、a.u. 与 % 的单位不一致。这些数值不用于 Day 4 的模型训练。不要将缺失默认为零，也不要按未经定义的换算合并单位。

## simulated-variants.csv

- 一行：一个模拟变体的一次技术重复；24 个不同的六字符教学片段，每个重复两次，共 48 行。
- `sequence_fragment`：用 A/C/D/E 编码构成的短片段，仅演示分类序列表示，不能当作完整蛋白。
- `mutations`：与 AAAAAA 参考片段不同的位置数；仅为一个简单数值特征。
- `score`：任意模拟分数。变体均值为 `72 − 11 × mutations + ((i × 7) mod 11 − 5)`；两个重复分别加 −1、+1。
- `batch`：统一为 simulation；没有模拟真实批次效应。
- `split`：编号可被 4 整除的变体为 test，其余为 train；重复保持同组。
- `data_kind`：每一行均写明 synthetic_not_experimental。
- 两次重复先按变体平均，训练为 18 个变体、测试为 6 个变体。
- 两个预先固定方法：训练均值常数预测；以 mutations 为单一特征的普通最小二乘线性回归。不进行测试集驱动调参。
- 此固定划分用于理解流程，不能代表严格的家族、骨架、条件外推，也不据此选择真实方法。

## Day 6 回放

仅使用 train 中的变体作为初始标注与候选池。种子为 11、29、47；各策略同样先有 4 个标注，再评价 6 个候选；test 始终不参与选样。选择器只接收候选 ID/特征及已标注样本，选择后由模拟器揭示标签。

“模型”策略 = 线性预测 + 3 × 距已标注特征的最近距离。它是教学启发式，不是校准不确定性或完整贝叶斯优化。候选无法构建、测量失败、延迟、分布漂移等均未模拟。

## 复现

在项目目录执行 `python3 experiments.py`，输出每个预测点、两种 MAE，以及全部种子的预算曲线。网页执行同一逻辑；`node check.mjs` 检查边界、分组与关键结果。

真实数据选读入口：[ProteinGym](https://github.com/OATML-Markslab/ProteinGym)、[Sarkisyan GFP 数据指针](https://doi.org/10.6084/m9.figshare.3102154)。具体文件与许可尚未完成核验，首版不下载或再分发。不能把模拟结果写成真实 assay 结论。
