跳轉到

9.5 Batch Prediction

範例程式:Open In Colab

Batch prediction 指的是一次讀入多筆資料,批次產生模型預測結果,再輸出成 CSV、資料表或其他系統可接收的格式。本篇使用合成三類表格分類資料,示範從訓練模型、保存 scaler、讀取待預測 CSV 到輸出 prediction CSV 的完整流程。

1. 學習目標

實務上不是每個模型都需要即時 API。有些任務更適合每天、每小時或每週批次執行,例如:

  1. 每晚預測明天的客戶流失名單。
  2. 對新上架商品批次分類。
  3. 對大量交易資料批次計算風險分數。
  4. 產出報表或匯入資料庫。

Batch prediction 的核心是可重複執行、可追蹤輸入與輸出,而不是只在 notebook 中印出幾筆預測。

2. 標準流程

本篇使用以下流程:

訓練模型 -> 儲存模型與 scaler -> 建立待預測 CSV -> 載入模型與 scaler -> 批次推論 -> 輸出 prediction CSV

這個流程特別適合表格資料。若是圖片或文字資料,輸入格式會不同,但仍需要保存前處理規格、批次推論與輸出結果。

3. 輸入與輸出格式

待預測資料會是一份 CSV:

欄位 說明
sample_id 每筆資料的識別碼
feature_0feature_n 模型輸入特徵

輸出結果會包含:

欄位 說明
sample_id 回連原始資料的識別碼
predicted_class 預測類別編號
predicted_label 預測類別名稱
confidence 最大預測機率
prob_* 各類別機率

保留 sample_id 很重要,否則預測結果很難回接原始資料或後續系統。

4. 批次推論程式重點

模型推論前要先載入訓練時保存的 scaler:

model = tf.keras.models.load_model('model.keras')
scaler = joblib.load('scaler.joblib')

features = input_df[feature_columns].to_numpy(dtype='float32')
features_scaled = scaler.transform(features)
probabilities = model.predict(features_scaled)

接著將機率轉成類別與信心分數:

predicted_class = probabilities.argmax(axis=1)
confidence = probabilities.max(axis=1)

最後把結果寫成 CSV,供報表、資料庫或下一個流程使用。

5. 如何套用到自己的資料?

替換成自己的資料時,請確認:

  1. 待預測 CSV 欄位和訓練時特徵欄位一致。
  2. 缺失值、類別編碼、標準化方式和訓練時一致。
  3. 輸出結果保留能回接原資料的 ID。
  4. 每次批次推論都記錄模型版本、輸入檔名與輸出檔名。
  5. 若資料量很大,使用 chunk 或 tf.data 分批推論。

批次推論比 API 簡單,但更需要重視檔案命名、版本紀錄與資料品質檢查。

6. 小結

Batch prediction 是模型落地時很常見的形式。只要把模型、前處理、輸入 CSV、輸出 CSV 與版本資訊整理清楚,就能把 notebook 中的 predict() 變成可重複執行的推論流程。