Lesson 0003 · 约 15 分钟 · 可直接开工

TIID 今晚复现 + 明天进度汇报

目标不是「完美刷榜」,而是:跑通官方代码 / 对齐数据管线, 并能在进度会上用 3 分钟讲清问题—方法—结果—局限—下一步。

Code: github.com/fanlixiang/IGSTGNN 上一课:原理 速查表
技能目标:按清单完成「环境 → 数据 → 训练 → 最小验证」; 同时备好汇报口播稿与 Q&A。

0. 今晚成功标准(写死)

数据不在 GitHub 里。必须另下 Kaggle: Data for IGSTGNN。 没数据就别硬训——先把「数据就绪」写进今晚进度。

1. 官方复现路径(命令级)

1.1 环境

conda create -n igstgnn python=3.10 pip -y conda activate igstgnn git clone https://github.com/fanlixiang/IGSTGNN.git cd IGSTGNN python -m pip install -r requirements.txt
README 明确:未在 Python 3.12+ 验证;优先 3.10/3.11

1.2 数据布局

data/xtraffic/ ├── Alameda/ │ ├── adj_matrix.npy │ ├── desc_mapping.json │ ├── incident_all.npy │ ├── incident_stats.npz │ ├── sensors.csv │ └── type_mapping.json ├── Contra_Costa/ └── Orange/
下完后切分(确定性 70/15/15,不重归一化):
python data/xtraffic/prepare_splits.py --dataset Alameda # -> incident_train.npy / incident_val.npy / incident_test.npy

1.3 训练(最小命令)

python experiments/IGSTGNN/main.py \ --device cuda:0 --dataset Alameda \ --model_name igstgnn --seed 2025 --bs 48 \ --incident --use_sensor_info # 或: bash experiments/IGSTGNN/run.sh
无 GPU 改 --device cpu(会慢很多)。Orange 论文用 bs=24。

1.4 论文超参备忘

优化器Adam, lr=0.002, early stop patience=20
batchAlameda/CC=48, Orange=24
事件类型 / 描述 embedding6 类→8 维;30 描述→32 维
ST 解耦块5 层;节点/时间 emb dim=12
TIID σ_t1.0 固定
任务12→12(5min × 12 = 1h)
硬件(论文)V100 32GB

2. 代码对照:TIID 在哪?

文件:src/models/igstgnn.py → 类 TemporalIncidentImpactDecay。 逻辑与论文一一对应(你汇报时可投屏这几行):

# 伪代码(与官方实现同构) time_steps = arange(1, T_p+1) omega = exp( -(time_steps**2) / (2 * sigma_t**2) ) # Eq.14 C_temp = (C_init @ W_c) * omega.view(1,T_p,1,1) # Eq.15 H_prime = H_pred + lambda * C_temp # Eq.16 Y_hat = g_out(H_prime)
官方还多一个 incident_scale=lambda(默认 1.0),论文公式里常省略

调用链:forward 里先 icsf_module(...) 得到 incident_context,ST 骨干出 forecast_hidden, 再 tiid_module(forecast_hidden, incident_context)

今晚最小验证(不必等完整训练): 在 notebook / 小脚本里固定 σ_t=1.0 打印 ω_1…ω_12, 确认与论文高斯曲线一致;再对无事件 batch 检查 C 项是否被 mask 掉。

3. 若官方数据下不动:Plan B

进度会更认「机制对齐」而不是「数字完全复现」。备选:

  1. 机制复现(推荐兜底):在 BasicTS / 你已有 backbone 上挂一个 TIID 式模块(固定高斯 + 加法残差),用自有事件数据跑通 forward + 消融 「有/无衰减」。
  2. 对照你的 event-force:把 TIID 当作 κ 时间核的特例 (单事件、固定 σ、无空间核乘积),在汇报里画一张「TIID ⊂ 我们的 κ」图。
  3. 只读验证:精读 §3.4 / §4.3 / 官方 TIID 类,产出本课口播 + 速查表 (你已有)——仍算有效进度,但要诚实标注「代码未跑通」。

4. 明天进度汇报:3 分钟结构

① 问题(25 秒)

现有交通预测只拟合历史规律。事故等非重复性外生事件会陡然改写时空模式; 若不显式建模,模型会输出「日常平均」,长 horizon 误差爆。

② 方法一句话(40 秒)

IGSTGNN = 骨干 + 两个插件: ICSF 用注意力+空间关系张量 D 建「谁受冲击」; TIIDomega_tau=exp(-tau^2/(2*sigma^2)) 让冲击随预测步衰减, 再加法残差叠回 H_pred。不是特征拼接,是过程力迫。

③ 证据(40 秒)

Alameda MAE 优于次优 5.65%;Horizon 12 仍强(Orange +4.1%); 去掉 TIID 约 +4.2% MAE;D2STGNN 挂双模块 +13.23%。 说明时间衰减在长步上值钱

④ 我今晚做了什么(40 秒)

【按实际改】环境 / 数据 / 是否跑通训练 / 代码-公式对照 / 若未跑通则机制复现进度。

⑤ 局限与下一步(35 秒)

局限:仅最新时刻单事件;σ 固定不学;D 预定义;无文本多模态。 下一步:【选一】完整 Alameda 指标对齐 / 迁移到我们的 BjTT·event-force(可学习 σ_m + 多事件)/ 与 ICSF 的空间核对照设计。

5. 可能被问的问题(Q&A 卡)

问题短答
和简单 concat 事件特征有何不同? ICSF 有拓扑掩码+上下文注意力;TIID 显式衰减,不是静态通道。
为什么 σ 不学? 即插即用、稳定;我们后续可学 σ_m / 分类型核作为扩展。
历史事件呢? 论文假设已进近期流量;我们若要长时外生,需多事件年龄堆叠。
和 ConFormer 比? 同属事件感知;ConFormer 偏事故图传播+GLN;IGSTGNN 偏广义事件+衰减残差。
和你方向的关系? TIID 是「外生长窗演化 / 衰减核」样板;我们要补多模态与多事件力迫。
复现卡在数据? Kaggle 单独发布;可先机制复现再对齐数字,不阻塞设计讨论。

6. 与本项目(外生 ST / event-force)的桥

TIID 原型你的扩展方向
固定高斯 σ=1分类型可学习 σ_m / γ_m
单新事件多事件 age + horizon 累积
时间核为主时间 × 空间 footprint 乘积 κ
加法残差 forcing保持 forcing 哲学,可选 Need Gate
结构化事件属性后续接文本 / 多模态外生

进度会上如果被问「你做 TIID 干什么」,答: 借一个已被 KDD 验证的衰减残差接口,校准我们自己的力迫通道,而不是停在复现。

7. 自测

官方仓库 clone 后立刻能训练吗?

今晚最优先的验证是?

数据下不动时,汇报应强调?

主源

代码与数据说明: fanlixiang/IGSTGNN · 数据 Kaggle data4igstgnn · 论文 arXiv:2602.02528

环境报错、数据 shape、和 BasicTS 对接、汇报稿改口播——直接问我。 需要我可以下一步帮你:写 TIID 最小 PyTorch 片段,或改一版 1 页 PPT 大纲。