# 台股大盤加權指數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)