Goal
實作「他行帳戶訓練時不記入 Loss」的 Masking 機制。
Context
目前訓練集中的節點混合了本行 (E.SUN) 與他行帳戶。但根據目標,我們應只計算本行帳戶預測錯誤的 Loss。這與單純過濾 DataLoader 不同,我們需要將他行節點保留在 Message Passing 過程中提供 Context,但在計算 Loss 時屏蔽其貢獻。
Tasks
- 資料層: 在 Graph 建立階段 (
graph_builder.py 或 Dataset),根據特徵/外部中繼資料 (如 bank_id == 808 或 is_esun == 1) 生成 esun_mask 標記本行帳戶。
- 訓練層: 修改
trainer.py 中的 forward 與 criterion。當計算 Loss 時:
loss = criterion(out[train_mask & esun_mask], data.y[train_mask & esun_mask])
- 實驗比對: 設計 ablation 實驗驗證加上此 Mask 後,模型對本行帳戶 (也是最終 Test set) 的預測 F1/AUC 是否提升。
Acceptance Criteria
- 新增
esun_mask (或依 bank_id 產生的布林 tensor)。
- Trainer 只針對 masked 節點進行 backpropagation。
- 確保 Eval/Test 時也不計入他行帳戶的成績。
Goal
實作「他行帳戶訓練時不記入 Loss」的 Masking 機制。
Context
目前訓練集中的節點混合了本行 (E.SUN) 與他行帳戶。但根據目標,我們應只計算本行帳戶預測錯誤的 Loss。這與單純過濾 DataLoader 不同,我們需要將他行節點保留在 Message Passing 過程中提供 Context,但在計算 Loss 時屏蔽其貢獻。
Tasks
graph_builder.py或 Dataset),根據特徵/外部中繼資料 (如bank_id == 808或is_esun == 1) 生成esun_mask標記本行帳戶。trainer.py中的forward與criterion。當計算 Loss 時:Acceptance Criteria
esun_mask(或依 bank_id 產生的布林 tensor)。