跳到主要内容

B 讀程式:特徵、模型與跨域流程

導航:← A 資料與注入 | 目錄 | C 結果對照 →

每題的解答都收合在題目下方:先自己作答,再點開「看解答」核對。

先認識這些詞​

這一課新出現的詞如下(前面課程已解釋過的詞不重複,完整列表見 術語表)。

  • 累計投票次數:同一個人在這個平台上之前已經投過幾題(程式中的欄位叫 vvc)。它有兩個限制:可能把匿名的票串回同一個人,所以部署版本不使用;而且不是每個第三方平台都會提供,所以研究把它當作消融實驗來檢查。在目標平台上它由用戶端自行回報、無法驗證。歷史上,早期版本(v3)不用身分,它曾是少數能和其他平台對齊的行為訊號;到 v13 來源域允許用身分後,它的角色可能改變。
  • 第一輪 / 第二輪:研究分兩次做。第一輪用 GNN,結果沒有通過事先定的規則;第二輪改用 R2。
  • 基準(baseline):拿來比較的參考方法。新方法要比基準好,比較才有意義;基準太弱,比較的結論就不可靠。

目標​

讀完這課,你能說出每個特徵從哪裡來、模型用什麼資料訓練、跨域時哪些欄位被保留。

前置​

先讀完 05、06、07,以及 A 課。

讀的順序​

  1. 提案圖(src/pgraph.py):每題是一個節點,時間重疊的題目相連。
  2. 特徵(src/features.py、src/r2.py):從圖與票算出每題的數字。
  3. 模型與跨域流程(src/novvc.py、src/rq1.py):訓練、預測、組合成實驗。

第一步:提案圖(src/pgraph.py)​

看這裡

  • 第 50 行(time_overlap_edges):決定哪些題目相連。
  • 第 109 行(build):建圖的入口。

問自己

1. 建圖時用到的是哪一批題目?只有參照題,還是全部?

看解答

建圖時用的是目標域全部題目(參照與檢驗都在內)。build 接收的是整份注入後的票表,節點是所有提案;邊只來自投票期間的重疊(以及來源域的共同帳號)。

2. 圖的邊是用票的時間算的。如果檢驗題也參與建圖,是洩漏嗎?(提示:論文的做法是建圖時包含目標域全部題目的無標籤票,這是「無標籤結構」,不是標籤;要判斷它算不算洩漏,需要對照論文的定義。)

看解答

不是標籤洩漏:圖的邊只用投票時間與帳號,不用任何答案。但它有一個值得注意的依賴:檢驗題的投票時間會影響參照題的鄰居。訓練用的圖只注入參照題,所以訓練特徵不含檢驗題的注入;論文第 3 章「提案圖」一節說明了鄰居的定義。

第二步:特徵(src/features.py、src/r2.py)​

看這裡

  • src/r2.py 的 design:把特徵組合成模型的輸入。
  • src/r2.py 的 align:對齊(第 5 課)。

練習:列出跨域版本用到的欄位(src/novvc.py 的 _keep、cols_g)。對每一個欄位,問:目標平台也有這個資料嗎?

看解答

跨域版本用到的欄位,目標域都有(投票型態、時間、以參照題對齊的數字、字典重建誤差);帳號歷史不在跨域版本中,因為只存在來源域。實際欄位以 _keep 與 cols_g 為準,請自己列出並核對。

第三步:模型與跨域流程(src/novvc.py、src/rq1.py)​

看這裡

  • src/novvc.py 第 31 行(source_tables):產生來源域的訓練表。
  • src/novvc.py 第 55 行(train):訓練模型。
  • src/rq1.py 的 _gbm:梯度提升的設定。

問自己

1. 模型訓練時,輸入是否只來自來源域?

看解答

是的。來源域的訓練表由 source_tables 產生,目標域只用來算特徵,不用於訓練。

2. 目標域的票是否只用來算特徵,沒有用來算標籤?

看解答

是的。目標域沒有標籤,只用票和時間等無標籤資料。

3. 超參數是不是從 outputs/phase02b/decisions.json 讀來的?有沒有任何地方在檢驗題上調過?

看解答

超參數沿用第 2 階段記錄的設定(outputs/phase02b/decisions.json),不因檢驗結果調整。

一個消融實驗:累計投票次數(vvc)​

白話:累計投票次數是一個人在這個平台上之前投過幾題。模型可以用它,也可以不用。

為什麼要做這個比較? 有兩個理由:

  1. 隱私:累計投票次數可能把匿名的票串回同一個人,所以部署版本不使用(見術語表)。
  2. 可用性:研究假設第三方平台只提供「提案、選項、時間」三個欄位,不一定有累計投票次數。

所以研究要問:有了 vvc,偵測會變好嗎? 做法是比較有 vvc 與沒有 vvc 的結果。

比較什麼? 第二輪的模型有 vvc(以及改票紀錄);「最小欄位」版本兩者都拿掉。兩組的結果不在本學習文件中列出,以論文為準。

部署的考量:目標平台上的 vvc 是用戶端自行回報、無法驗證,而且可能有隱私風險。即使實驗中有幫助,也不能直接用於部署。

歷史脈絡:

  • 早期版本(v3)不用身分:帳號與錢包在轉換資料時就丟掉。當時只留下一個行為訊號:這位投票者在該平台投的是第幾票(voter_voted_count)。它是少數能和其他平台對齊的行為訊號,所以被當作「間接代替身分」的特徵。
  • 但 v3 同時決定不把它放進基準線,理由有二:各平台的累計範圍不同,而且它直接對應「新帳號灌票」的攻擊定義。也就是說,早期就已經對它有保留。
  • 到 v13,來源域允許用身分:身分邊只在來源域使用,第二輪的來源域模型也用了帳號歷史。來源域的身分資訊已經能直接使用,所以 vvc「間接代替身分」的功能可能變弱。這是合理的解釋,但研究沒有直接測試。

問自己

1. 如果某個平台提供了累計投票次數,你會直接把它放進部署模型嗎?為什麼?

看解答

不會。它可能把匿名的票串回個人,有隱私風險;而且目標平台上的這個數字是用戶端自行回報、無法驗證。

檢核​

1. 跨域模型用到的每個特徵,目標平台都有嗎?

看解答

應該是「是」。跨域版本只用目標域也有的特徵,帳號歷史不在內。

2. 模型訓練時,檢驗題的答案是否有任何進入?

看解答

否。檢驗題的答案不進入訓練;檢驗題只用於最後打分。

3. 建圖時用到的無標籤資料,算不算洩漏?你的判斷依據是什麼?

看解答

判斷依據:建圖用的是無標籤資料,不是答案,所以不算標籤洩漏;但它是一個設計選擇,需要在論文中清楚說明(論文第 3 章「提案圖」一節)。

導航​

引用文獻​

  • 圖小波(heat kernel):Hammond, D. K., Vandergheynst, P., & Gribonval, R. (2011). Wavelets on graphs via spectral graph theory. Applied and Computational Harmonic Analysis, 30(2), 129–150. [bib: hammond2011wavelets]
  • 圖與時間重疊的概念:DuPont (2023) [bib: dupont2023dao_gcnn]。
  • 字典與重建:Zheng et al. (2026) [bib: zheng2026owleye];Roy et al. (2024) [bib: roy2024gadnr]。
  • 梯度提升:Friedman (2001) [未收入 bib];Pedregosa et al. (2011) [未收入 bib]。
  • 表格資料上樹模型與 GNN 的比較:Tang et al. (2023) [bib: tang2023gadbench]。