返回目錄
A
資料科學實戰:從數據到洞察 - 第 7 章
第七章:從模型到產品——CI/CD 全自動化流程
發布於 2026-02-27 06:03
# 第七章:從模型到產品——CI/CD 全自動化流程
> **核心訊息**:在實際專案中,請務必將 **模型訓練**、**評估**、**可解釋性**、**部署** 等步驟打包成 **CI/CD** 流程,確保模型在生產環境中的可靠性與可追蹤性。
## 7.1 前言
在數據科學專案裡,模型不是孤島。從「開發」到「交付」,整個流程需要高度協同與自動化。CI/CD(持續整合/持續部署)正是把模型迭代視為軟體開發的流程化,藉此降低人為錯誤、加速市場迭代,並維持可追蹤性。
## 7.2 模型訓練流水線
1. **資料預處理**:將原始數據轉成模型可用的特徵,並保存為 `dataset.pkl`。
2. **模型訓練腳本**:`train.py` 包含資料分割、模型建立、交叉驗證與最佳參數搜尋。
3. **測試**:`test_train.py` 針對訓練流程進行單元測試,確保輸入輸出符合預期。
python
# train.py
import joblib
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import roc_auc_score
from sklearn.ensemble import XGBClassifier
# 1️⃣ 讀取資料
X = pd.read_csv('data/features.csv')
y = pd.read_csv('data/labels.csv')['label']
# 2️⃣ 資料分割
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)
# 3️⃣ 模型 + 參數搜尋
model = XGBClassifier(eval_metric='auc', use_label_encoder=False)
param_grid = {
'max_depth': [3, 5, 7],
'learning_rate': [0.01, 0.1],
'n_estimators': [100, 200]
}
clf = GridSearchCV(model, param_grid, cv=5, scoring='roc_auc')
clf.fit(X_train, y_train)
# 4️⃣ 評估
pred = clf.predict_proba(X_val)[:, 1]
print('Validation AUC:', roc_auc_score(y_val, pred))
# 5️⃣ 儲存模型
joblib.dump(clf.best_estimator_, 'models/best_model.pkl')
## 7.3 版本管理與評估
- **Git + GitHub**:將所有腳本、資料、模型放入 Git 儲存庫,使用分支策略(feature、develop、main)管理不同階段。
- **Docker**:將環境打包成容器,確保在不同機器上執行結果一致。
- **模型元資料**:每次訓練都生成 `metadata.json`,包含版本號、訓練日期、參數、評估指標。
{
"model_version": "v1.0.3",
"train_date": "2026-02-25",
"parameters": {
"max_depth": 5,
"learning_rate": 0.1,
"n_estimators": 200
},
"validation_auc": 0.8712
}
## 7.4 可解釋性包裝
使用 SHAP 產生特徵重要性,並將解釋結果與模型版本一同儲存,方便回溯。
python
import shap
model = joblib.load('models/best_model.pkl')
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_val)
shap.summary_plot(shap_values, X_val, show=False)
plt.savefig('reports/shap_summary.png')
## 7.5 部署到雲端
- **AWS SageMaker**:使用 `sagemaker` SDK 將模型打包成推論容器。
- **API Gateway + Lambda**:將模型推論包裝成 RESTful API,實現無伺服器架構。
- **Kubernetes**:若規模大,可將推論服務部署至 K8s,並使用 Helm 進行版本控制。
bash
# 部署腳本示例(使用 AWS CLI)
aws sagemaker create-model \
--model-name xgb-model-v1 \
--primary-container Image=123456789012.dkr.ecr.us-east-1.amazonaws.com/xgb:latest,ModelDataUrl=s3://bucket/models/best_model.pkl \
--execution-role-arn arn:aws:iam::123456789012:role/SageMakerExecutionRole
## 7.6 監控與回饋
- **Model Drift**:使用 Evidently 或 `sklearn.metrics` 定期檢查預測分布與真實標籤的差異。
- **A/B 測試**:在生產環境中同時跑兩個模型版本,收集效果後決定是否升級。
- **日誌**:使用 ELK(Elasticsearch‑Logstash‑Kibana)堆疊,將每個推論請求的輸入、輸出、延遲時間寫入索引,方便追蹤問題。
## 7.7 小結
本章闡述了如何將資料科學專案的「模型」從「開發」到「交付」全流程打包為 CI/CD 流程。透過版本管理、容器化、模型可解釋性與雲端部署,我們不僅提升了開發效率,更確保了模型在實際商業環境中的可追蹤性與可靠性。下一章將進一步探討多模型協同與線上學習的挑戰。