具代表性的面試主題

資料科學面試:如何在無洩漏下驗證時間序列預測模型?

資料困難
OfferCC 編輯團隊發佈 更新

題幹

你有 200 個城市兩年的每日叫車需求,每週重新訓練並預測未來 7 天。如何設計沒有未來資訊洩漏的離線驗證、比較模型與基準,並判斷是否適合上線?

題幹與適用情境

你有 200 個城市兩年的每日叫車需求。正式環境每週一重新訓練一次,並為每個城市預測接下來 7 天。特徵包含歷史需求、星期、節日、天氣預報與價格活動計畫。團隊準備隨機切分訓練集與驗證集,再用整體 MAPE 最低的模型上線。

請設計一套沒有未來資訊洩漏的離線驗證方案,說明切分、特徵可用性、基準、指標、跨城市彙總、模型選擇與上線門檻。兩年、200 個城市、7 天與每週重新訓練都是面試假設,不是業界基準。

這道題適用於資料科學、機器學習與預測職位。核心能力是重現「在某個預測起點,當時真正知道哪些資訊」,因此歸入 data。

面試官考察點

第一,候選人能否把正式環境的預測流程轉成驗證協定。強回答會先固定預測起點、步長、重新訓練頻率與訓練視窗,再討論模型;只說「依時間切分」仍不完整。

第二,能否找出切分以外的洩漏。未來資訊可能透過全量標準化、跨過預測起點的滾動視窗、事後修訂資料、實際天氣、尚未核准的活動或以全量日期擬合的目標編碼進入訓練。

第三,指標能否對應決策。一個整體平均可能掩蓋遠期預測失敗、低量城市退步、持續偏高或區間校準失準。強回答會保留各預測步長、城市分群與時間折的結果,並與簡單基準並列。

第四,能否分開調參與最終估計。滾動驗證用於選擇模型和門檻;從未參與選擇的最後一段連續時間只用來估計選定流程的表現。反覆查看留出集再修改模型,會把它變成另一個驗證集。

回答前需要釐清的問題

  • 真實預測起點是什麼? 若每週一 06:00 產生預測,切分必須在該時點凍結資料;每日滾動預測會產生不同起點與訓練成本。
  • 7 天是一次直接輸出,還是每天遞迴一步? 多步策略會改變特徵產生方式,也要求分別評估第 1 到第 7 天。
  • 哪些外生變數在預測時已知? 日曆通常已知;天氣預報可得,但實際天氣未知;只有已核准並發布的價格活動才能使用。
  • 標籤多久才完整? 若需求資料晚到兩天,訓練尾端與測試起點間至少要有等效 gap,或使用當時的資料快照。
  • 高估與低估的成本是否相同? 運力規劃可能有缺車與閒置兩種方向性成本,MAE 無法單獨表達。
  • 城市是否同等重要? 每城等權的宏平均反映覆蓋,依實際量加權反映整體影響,兩者不能互相取代。
  • 上線後會使用多長歷史? 固定視窗能較快適應結構改變;穩定的年度季節性可能需要較長歷史。

30 秒回答框架

「我會從正式流程反推滾動起點回測。每個歷史週一只使用當時已到達且標籤完整的資料,依正式訓練視窗擬合,預測未來 7 天,再把起點向前移。所有前處理、落後特徵與調參都只在各訓練折內完成;未來實際天氣不能取代當時的預報。我會與季節性樸素基準比較,並依第 1 到第 7 天、城市與時間折報告 MAE、偏差與業務損失;百分比指標必須定義零值處理。模型選定後只在未參與調參的連續留出區間評估一次,關鍵城市、尖峰週與區間覆蓋均通過預設門檻才上線。」

分步深入解答

第一步:把一次正式環境執行定義成一個預測折。

設預測起點為 t。訓練資料只能包含在 t 時已可用且標籤完整的紀錄,測試區間為 t+1 到 t+7。每次把起點往前移 7 天,模擬每週重新訓練。早期訓練集若不足以涵蓋必要季節週期,就不納入評分。

擴張視窗使用最早日期到 t 的全部歷史,資料利用率高,但會保留舊機制。固定視窗只用最近一段歷史,能更快適應結構變化,卻可能捨棄年度季節性。回測策略必須與正式環境一致,不能看完最終留出集才挑選。

第二步:建立「預測時可用」的特徵合約。

每個特徵記錄事件時間、系統可用時間、修訂規則與缺值處理。對每個起點重建當時快照:

  • 落後一天的需求只能來自 t 或更早,7 日滾動平均的視窗終點也不能跨過 t;
  • 標準化、缺值填補、編碼、特徵選擇與目標轉換只在該折訓練資料擬合;
  • 使用 t 當時發布的天氣預報,不使用後來觀測到的實際天氣;
  • 未來活動特徵只包含 t 前已確認的計畫;
  • 標籤晚到兩天時,訓練最多到 t-2,或套用等效 gap。

可執行檢查包括:斷言每個訓練欄位都有 available_at <= t、移除起點後的原始資料再重新產生特徵,以及從保存快照重播數個歷史起點。移除不可用未來資料後,歷史預測若改變,就有洩漏或無法重現的相依性。

第三步:建立不容易作弊的基準。

至少比較「上週同一天」的季節性樸素預測;年度季節性夠穩定時,可加入去年同期基準。複雜模型只有在相同起點、相同可用特徵與相同評分列上穩定勝出,才值得增加成本。異常巨大的提升應先觸發時間對齊與洩漏檢查。

第四步:讓指標對應失敗成本。

用 MAE 表示典型絕對誤差,用 RMSE 揭露大型失誤,用有正負號誤差的平均值觀察持續高估或低估。MAPE 在實際值為零時無定義,接近零時也會因小分母失真,因此不能作為唯一指標。跨尺度比較可使用 MASE,分母採訓練折內的季節性樸素誤差;總量規劃可補充 WAPE,但要說明高量城市會主導結果。

若模型輸出分位數,使用 pinball loss 分別評估每個分位數,並檢查例如 P90 的經驗覆蓋率是否接近目標。覆蓋率要和區間寬度一起看;極寬區間即使覆蓋良好,也可能沒有決策價值。

第五步:彙總前先保留誤差結構。

每筆評分資料保留 origin、horizon、city、實際值與預測值,再報告:

  1. 第 1 到第 7 天分開評分,避免近端準確掩蓋遠端崩壞;
  2. 同時提供每城等權宏平均與依實際量加權的結果;
  3. 顯示各時間折分布,不只提供跨折平均;
  4. 分開檢查尖峰、節日、低量城市、新城市與異常天氣視窗;
  5. 檢查同一城市是否連續出現同方向偏差。

第六步:在滾動折內選擇,鎖定最終測試。

用開發期滾動折選模型、視窗與超參數。比較次數很多時記錄每次實驗,避免反覆嘗試後只在少數折偶然獲勝。選定完整流程後凍結程式與參數,再於最後連續 8 到 12 週評估一次。這個長度也是面試假設,應依季節性與樣本需求調整。

預先定義上線門檻:整體業務損失優於季節性基準、關鍵城市沒有超過容忍值的退步、第 7 天仍可接受、偏差在運力容忍範圍內、區間覆蓋與寬度合格。平均勝出但關鍵門檻失敗時,不全量上線;只對通過的城市灰度,或保留基準。

第七步:把離線協定延伸到正式監控。

記錄模型版本、資料快照、預測起點、各步長預測與特徵版本。標籤成熟後回填相同指標,並與回測分布比較。監控資料可用性、缺值率、有方向的偏差、各步長誤差與相對基準差值。機制改變後要重新評估訓練視窗,不能假設頻繁重訓會自動修正協定問題。

高品質示範回答

「我會在一系列歷史起點重現一次正式環境執行。假設工作每週一 06:00 重新訓練並一次輸出 7 天,每個折只讀取該時點已到達且標籤完整的資料,用正式視窗訓練,再評分後面 7 天。標籤若晚到兩天,訓練就在起點前兩天結束;天氣使用當時的預報版本,不能使用實際觀測。

所有轉換都放在折內。縮放器、填補器、編碼器與特徵選擇只以訓練列擬合;落後與滾動視窗的終點不得晚於預測起點。我還會刪除起點後的原始資料再產生特徵,確認歷史預測完全不變。

第一個比較對象是上週同一天的季節性樸素基準。結果保留城市、起點與預測步長,再報告 MAE、RMSE、有方向的偏差與業務成本;城市同時做等權與總量加權。MAPE 遇到零值會失效,所以不會單獨使用。若輸出分位數,再看 pinball loss、各步長覆蓋率與區間寬度。

滾動折用於選流程,最後連續時間段只評估一次。上線前先鎖定門檻:整體勝過基準、關鍵城市沒有不可接受的退步、第 7 天與尖峰週通過、偏差和區間校準符合運力決策。上線後記錄起點與資料版本,標籤到齊再用相同切片回填誤差。這樣離線提升才可與實際運行條件比較。」

常見錯誤

  • 隨機打亂日期 → 訓練會看到測試日期之後的機制與特徵統計 → 用符合正式執行的滾動起點回測。
  • 先在全量資料產生特徵與標準化 → 驗證資訊已進入訓練 → 每折獨立擬合轉換,並按可用時間重播特徵。
  • 用實際天氣取代天氣預報 → 離線擁有正式環境當時不存在的資訊 → 保存並使用各起點當時的預報版本。
  • 只報一個整體 MAPE → 零值、小城市與遠期誤差被錯誤處理或隱藏 → 組合絕對誤差、偏差、業務損失與分層結果。
  • 沒有季節性樸素基準 → 無法判斷複雜度是否帶來增益 → 在完全相同的折與樣本評分基準。
  • 看完最終測試再改模型 → 留出集已參與選擇 → 凍結後只評一次;失敗後等待新的未來留出區間。
  • 平均指標勝出就全量上線 → 高量城市可能掩蓋關鍵分組退步 → 預設分組、尖峰與步長門檻,按城市灰度。

追問及應對

若有一個訓練時從未出現的新城市,如何評估?

一般滾動折會讓相同城市同時出現在訓練與測試,因此無法估計冷啟動。加入城市留出評估:訓練共享模型時完全移除一組城市,再只使用上線時真正可得的靜態屬性或短期歷史。零歷史與少量歷史要分開報告,並與區域及全域樸素基準比較。

活動效果持續 14 天,而預測步長只有 7 天,需要 gap 嗎?

gap 取決於資訊可用性與標籤重疊,不能機械地等於預測步長。若訓練標籤或彙總會使用起點後 14 天的結果,就要截斷或留足間隔;若活動計畫在起點前已確認,特徵只表達該計畫,持續 14 天本身不構成洩漏。應逐欄位畫出時間線。

新模型只改善高量城市時,該怎麼選?

並列總量加權收益與每城等權退步,再把業務要求轉成門檻。可以只對高量城市上線新模型,其餘保留基準或分層模型;也可最佳化帶城市權重與最差分組限制的目標。單一加權平均不能證明所有城市都受益。

線上誤差明顯差於回測時,先檢查什麼?

先驗證可重現性:相同模型、預測起點、特徵快照與外生變數版本能否重建當時預測。接著區分資料延遲或定義改變、訓練與服務轉換不一致、連基準也同步變差的機制改變,以及只影響模型的漂移。先找出協定落差,再決定重新訓練、縮短視窗、回復或重做驗證。

公開來源

同類題目