G TRIP·GyID
← 全部文档

人群标定报告

α 边界的标定、合成对照族、ROC / AUC,以及这些数字能支撑与不能支撑的结论。

1. 为什么需要标定

草案规定生物区间 α ∈ [0.30, 0.80],但自己注明这个边界需要按人群校准,且点名单轨迹集成统计量的 ROC 与置信区间尚未验证。标定的目的不是「证明协议对」,而是把这些数字变成可被检验、可被反驳的证据。

2. 先修正确性,再谈结论

标定管线里发现三处会产出错误结论的缺陷,在出任何数字之前先修掉:

缺陷原状现在
分析时间戳错误utc_now_iso() 用 secs/31536000 当作「年」,写进报告元数据的日期是错的补 Howard Hinnant civil_from_days + iso8601_from_unix,并与既有 days_from_civil 做往返测试
NaN 导致整批中断α/β 排序与 Youden 取极值共 3 处 partial_cmp(..).unwrap(),遇脏数据直接 panic统一 sorted_finite():先剔除非有限值再比较
伪 ROC只用单个人类群体,把「低于阈值且高于 0.10 的比例」当假阳率,AUC 硬编码为 None改为真实双样本 ROC;无对照组时 roc = None,不伪造

3. 判别能力:真实 ROC

评分函数取 score(α) = −|α − 0.55|:越接近粉噪中心越像人,白噪声与棕噪声两侧同时降分。负类为三族合成攻击轨迹:

族生成器实测均值 α期望
iid_levy i.i.d. 截断 Levy 步进(草案 §7.3.3 字面生成器) -0.0141 ≈ 0
replay_drift 重放同一录制序列 + 线性漂移 1.6370 ≳ 1.2
correlated_gaussian AR(1) 速度积分 2.0184 ≳ 1.0

合成基线(离线、可复现)

gyid calibrate synth --humans 150 --control 150 --window 256
AUC0.9761
最优点 TPR / FPR0.9533 / 0.1244
等价的 α 判决区间[0.0119, 1.0881]
人类组 α 均值 / 中位0.5001 / 0.4936
生物区间覆盖率55.3%

人类组 α 分位(合成基线)

P50.0190
P250.2791
Median0.4936
P750.7216
P951.0479

4. 这些数字能支撑什么,不能支撑什么

结论是否成立
经典引擎的 α 能把「结构化 Levy 轨迹」与三族合成攻击区分开 成立(合成基线 AUC 0.98)
α 能区分真实人类与自适应对手 不成立——需真实 GeoLife 数据与 TRIP-Arena 攻击迭代
协议生物区间 [0.30, 0.80] 适用于中国城市人群 待定——需下载 GeoLife 后运行 geolife 子命令
单一统计量足以做高风险判定 不成立——必须与六分量 Hamiltonian 并用

5. 怎么复现

# 全离线(无需下载任何数据)
gyid calibrate synth --humans 150 --control 150 --window 256 --output /tmp/synth.json
gyid calibrate whitepaper --input /tmp/synth.json --output /tmp/synth.md

# 真实数据集
tools/calibration/download_geolife.sh
tools/calibration/prepare_dataset.sh --root "tools/calibration/data/GeoLife Trajectories 1.3"
gyid calibrate geolife --data-dir "tools/calibration/data/GeoLife Trajectories 1.3" --control 200 --output /tmp/geolife.json

回归基线固化在 trip-core/tests/calibration_golden.rs 与 tests/vectors/calibration-vectors.json;重新生成需显式设置 UPDATE_CALIBRATION_VECTORS=1。

6. 后续工作

  • 接入 MDC(洛桑)做跨人群对照
  • 接入 T-Drive 作为职业偏差参照
  • 按出行模式分层(通勤 vs 游客)
  • AUC 与 α 分位的自助法置信区间
  • 季节性漂移监控