實戰專案 - Titanic 生存預測專案
這是一個資料科學專案,目標是透過 Kaggle 經典的 Titanic 生存預測題目,建立一套結構清晰、模組化的預測系統。我不只是想交出一份準確的預測結果,更希望藉由這個專案練習:
- 如何設計可擴充、可維護的資料分析架構
- 如何把模型訓練與推論流程標準化
- 如何用設定檔 (config-driven) 控制整個 pipeline
- 如何實踐工程導向的資料科學流程
GitHub 原始碼: https://github.com/twcch/TitanicSurvivalPrediction
專案定位:不只是「解題」,而是「設計一套解法系統」
我不滿足於單純把資料丟進模型調整參數。我希望打造的是一個「可重複使用的機器學習預測框架」,因此我做了以下幾點設計:
- 架構模組化: 依照功能拆分為 data/, features/, models/, utils/,程式碼清楚分工
- 流程自動化: 所有步驟都由 main.py 控制,方便一鍵執行與重現實驗
- 設定檔驅動: 核心設定集中管理於 config.json,可以快速切換特徵、模型參數與輸出路徑
- 可擴充性設計: 未來若要換模型、加特徵、改評估指標,幾乎不需改動主程式碼
這些設計不只是在技術上提升效率,也讓我在做資料科學時,更接近實務工作者的思維模式
資料前處理與特徵工程: 每個欄位都要能「解釋」
我對特徵的要求是: 不只要對模型有用,更要有邏輯、可解釋
- 處理缺失值
- Age 用中位數填補
- Embarked 用眾數填補
- Fare 缺值極少,仍完整處理
- 創造新特徵
- FamilySize = SibSp + Parch: 模擬家庭是否有互助效果
- 選定使用特徵
- 類別型: Pclass, Sex, Embarked, Title
- 數值型: Age, Fare, FamilySize
模型設定: 我選擇 XGBoost,但更重視可控性
雖然這個任務可以用很多模型解,但我選擇以 XGBoost 為主模型,理由如下:
- Tree-based 模型不需要特徵標準化,工程處理更簡潔
- 對類別特徵與數值特徵的混合表現良好
- 在 Kaggle 類似任務中表現穩定,可作為 baseline
模型訓練與推論流程
整個流程包含以下幾步,由 main.py 控制:
- 讀取資料
- 進行特徵前處理與編碼 (OneHotEncoder)
- 拆分訓練與驗證集 (80/20 split)
- 建立與訓練 XGBoost 模型
- 計算驗證集準確度 (accuracy)
- 對測試集做預測並輸出 .csv
我也設計了 XGBoostModel 類別,包裝內部模型與附加元件,方便儲存與部署。
專案成果與輸出
目前模型準確率穩定落在 約 80% 之間,在不調參與不使用 ensemble 技巧下,已具備穩定 baseline 水準。預測結果已可直接提交至 Kaggle
輸出結果包含:
- 訓練好的模型檔 xgb_model.joblib
- 預測檔案 submission.csv
- 可重複執行的程式流程與設定
我的學習收穫
這個專案讓我強化了幾個面向的能力:
- ✅ 不只「會跑模型」,而是能「設計實驗架構」
- ✅ 理解模型不是重點,如何整合流程才是真功夫
- ✅ 學會如何用工程角度思考資料分析任務(版本控管、模組分工、config 驅動)
我相信資料科學最終會走向「系統性與標準化」,這次練習是我往這個方向邁出的第一步。
結語:從解題者走向設計者
Titanic 雖然是入門題目,但我不希望只是提交一份漂亮的預測結果,而是藉此訓練自己「如何設計一套可複用的預測系統」,這也是我在轉型資料科學的過程中,一個重要的能力里程碑。
歡迎有興趣的朋友參考原始碼,也希望與你交流更好的專案設計方式。