跳轉至

建立 2025-02-24 更新 2026-09-16

機器學習

機器學習能從歷史資料中找出人工難以歸納的規律,在量化交易中常見的應用包括價格預測、產生交易訊號、以及風險與情緒分析。這一頁介紹三種入門模型:線性迴歸、隨機森林與 LSTM。

機器學習不是聖杯

股價受非常多難以量化的因素影響,機器學習模型很容易在歷史資料上表現很好、但換到新資料就失準(過度配適)。務必搭配回測風險管理一起評估,不要只看模型的預測準確率。

用線性迴歸預測股價

pip install scikit-learn
import numpy as np
import yfinance as yf
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

data = yf.download("AAPL", start="2022-01-01", end="2024-01-01")

X = np.array(data[["Open", "High", "Low", "Volume"]])
y = np.array(data["Close"])

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

用隨機森林產生交易訊號

隨機森林是分類模型,適合用來預測「明天是漲還是跌」這種二元問題,而不是直接預測價格數字:

from sklearn.ensemble import RandomForestClassifier

data["Signal"] = (data["Close"].pct_change() > 0).astype(int)   # 隔日上漲為 1,下跌為 0
X = np.array(data[["Open", "High", "Low", "Volume"]])[:-1]
y = np.array(data["Signal"])[1:]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

用 LSTM 處理時間序列

LSTM(長短期記憶網路)是專門處理序列資料的深度學習模型,能捕捉價格隨時間變化的關聯,常用於較長期的走勢預測:

pip install tensorflow
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

model = Sequential([
    LSTM(50, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])),
    LSTM(50),
    Dense(1),
])
model.compile(optimizer="adam", loss="mse")
model.fit(X_train, y_train, epochs=10, batch_size=16)

推薦影音

用 LSTM 預測股價(Stacked LSTM)

簡述:Krish Naik(知名機器學習教育者)示範如何用 Keras 建立 Stacked LSTM 模型預測股價,完整涵蓋資料前處理、模型訓練與結果評估,對應本頁「用 LSTM 處理時間序列」的部分。