---
# System prepended metadata

title: 台股大盤加權指數ETL & 迴歸與分類模型
tags: [Docker, Airflow]

---

# 台股大盤加權指數ETL & 迴歸與分類模型

## 目標
1. 建立自動化ETL流程： 定期從證交所API抓取每日台股大盤加權指數資料，並存入MySQL資料庫中。
2. 開發迴歸模型預測指數開盤價： 利用LSTM深度學習模型，根據過去60個交易日的資料預測未來指數開盤價。
3. 開發分類模型判斷進場時機： 利用SVM分類機器學習模型，預測隔日收盤價是否會上漲或下跌，提供進場建議。
4. 導入MLOps機制： 定期監控模型效能，並於必要時進行重新訓練，確保模型始終保持最佳狀態。
5. 整合各項工具： 使用Docker、Apache Airflow、MLflow、Prometheus、Grafana等工具，打造完整的資料分析與模型運維流程。

- 任務流程圖
	![Imgur](https://imgur.com/HPROqXA.png)

## 專案歷程
- 2023/10/26：初步定義ETL流程，從證交所API抓每日大盤加權指數，整理過後存入MySQL資料庫。
- 2024/01/13：使用Apache Airflow作為自動化任務執行工具，實現自動化ETL；再利用LSTM深度學習模型來進行迴歸預測，預測未來的加權指數走向。
- 2024/01/26：新增SVM分類機器學習模型，預測1日後收盤價 > 20MA → 1: 適合進場；1日後收盤價 < 20MA → 0: 不適合進場；引入MLOps中模型持續監控與持續訓練的機制強化大盤預測模型生命週期。
- 2024/03/09：使用MLflow作為模型實驗管理工具，將模型的重新訓練任務透過MLflow記錄下來，方便管理重新訓練的模型表現。
- 2024/03/29：加入Line Notify通知功能，可以在預測結果產出後將結果傳送到Line聊天室中；也一併導入Prometheus以及Grafana，製作出監控儀表板方便監控系統的資訊以及模型的指標。
- 2024/04/15：將Apache Airflow與其他工具一起整合進docker-compose.yaml，可以加速部屬的步驟，將專案朝end-to-end的方向推進。
- 未來計畫：使用Jenkis、ArgoCD建立程式碼與模型版控的CI/CD流程。

## 架構圖：
![Imgur](https://imgur.com/Af7jXYx.png)

## 技術堆棧
- Python (3.10)：Apache Airflow DAG建立、機器學習與深度學習任務。
- Docker (26.0.0)：容器化各項工具，方便部署與維護。
- Apache Airflow (2.9.0)：自動化資料蒐集與處理流程。
- MySQL (8.0)：儲存結構化資料。
- Prometheus (2.50.1)：時序資料庫，蒐集各項工具的營運資訊。
- Grafana (10.4)：利用Prometheus資料製作監控儀表板。
- LSTM深度學習模型 (Pytorch 2.1.0, Lightning 2.1.3)：預測未來股價走勢。
- SVM分類機器學習模型 (Scikit Learn 1.4.2)：判斷股價漲跌趨勢。
- MLflow (2.12.1)：管理模型訓練與評估。
- MLOps：持續監控與持續訓練模型，確保模型效能。

## Blog
Apache Airflow實作筆記-1 → [簡介、安裝](https://hackmd.io/@jinrumiao/S1Ywii30h)

Apache Airflow實作筆記-2 → [將Airflow database改為MySQL](https://hackmd.io/@jinrumiao/rkdXS2q16)

Apache Airflow實作筆記-3 → [建立第一個DAG](https://hackmd.io/@jinrumiao/r1BneSK1T)

Apache Airflow實作筆記-4 → [實現完整ETL](https://hackmd.io/@jinrumiao/Sy7dKUZx6)

Apache Airflow實作筆記-5 → [在ETL後增加一個預測模型](https://hackmd.io/@jinrumiao/SJfuDGMQa)

Apache Airflow實作筆記-6 → [模型的持續監控與訓練](https://hackmd.io/@jinrumiao/HJSXXKx8T)

Apache Airflow實作筆記-7 → [新增交易策略預測](https://hackmd.io/@jinrumiao/HJThcalc6)

Apache Airflow實作筆記-8 → [使用MLflow管理訓練任務](https://hackmd.io/@jinrumiao/HJGP76Ehp)

Apache Airflow實作筆記-9 → [Line Notify通知與監控儀錶板](https://hackmd.io/@jinrumiao/ry9qMiq0p)

Apache Airflow實作筆記-10 → [End-to-End ML專案](https://hackmd.io/@jinrumiao/SkxAfY1-R)