返回目錄
A
數據驅動投資分析:從基礎到量化交易 - 第 2 章
第二章:資料收集與清理—從原始到可用
發布於 2026-03-04 17:46
# 第二章:資料收集與清理—從原始到可用
> **本文重點**:將原始市場資料轉化為可供建模的乾淨數據,並探討在實務中常見的資料品質問題與解決策略。
## 1. 為什麼資料品質決定模型表現
在投資分析裡,資料是「黃金」。但不是所有「黃金」都能直接開採。資料品質差往往導致模型學習到錯誤的規律,最終在實盤失靈。
- **缺失值**:會打亂統計量的計算,若隨機缺失則可用插補;若非隨機則需要特別處理。
- **噪聲**:市場價格本身就含有隨機波動,過度去噪反而損失信息。
- **偏差**:資料來源不平衡或樣本選取不當,模型可能學到誤導性的傾向。
> **實務提醒**:在開始建模前,先完成一次「資料健康檢查」——類似醫學檢查,能在早期發現潛在問題。
## 2. 資料來源分類
| 資料類型 | 典型來源 | 特色 | 典型挑戰 |
|---|---|---|---|
| **歷史行情** | Bloomberg、Quandl、Yahoo Finance | 連續、結構化 | 低頻、延遲 |
| **新聞/社交** | Factiva、Twitter API、Reddit | 非結構化、情緒 | 文本解析、偏倚 |
| **替代數據** | 衛星影像、天氣、購物籃 | 罕見事件 | 解析難度高 |
| **交易所資訊** | 交易所API、FIX協議 | 真實交易記錄 | 低延遲、頻寬需求 |
| **財務報表** | SEC EDGAR、公司網站 | 結構化、半結構化 | 時效性與更新頻率 |
> **選擇技巧**:依據策略需求與可行成本選擇資料類型,並在收集前先評估「資料可得性」與「成本/效益比例」。
## 3. 資料收集流程
1. **需求定義**:明確分析目標與所需特徵。
2. **源頭掃描**:列出所有可行的 API、爬蟲、數據供應商。
3. **存取授權**:確保合法合規,取得 API key 或商業授權。
4. **原始儲存**:使用 S3、GCS 或 On‑prem HDFS 儲存原始檔,保持不可變。
5. **ETL 入口**:撰寫 `extract()`、`transform()`、`load()` 三個模組,確保可追蹤、可重複。
> **小技巧**:使用 Airflow 或 Prefect 建立可觀察的工作流,確保資料管道的健全性。
## 4. 資料清理實務
以下以 `pandas` 為例,示範常見清理步驟:
python
import pandas as pd
import numpy as np
# 讀取原始 CSV
raw = pd.read_csv('raw_market_data.csv', parse_dates=['timestamp'])
# 1. 欠缺值處理
# 先統計缺失率
missing_rate = raw.isna().mean()
print(missing_rate)
# 依據情況決定填補或刪除
raw = raw.dropna(subset=['close', 'volume']) # 必要欄位
raw['open'] = raw['open'].fillna(raw['open'].median())
# 2. 轉換資料型別
raw['volume'] = raw['volume'].astype(int)
# 3. 產生技術指標
raw['returns'] = raw['close'].pct_change()
raw['sma_20'] = raw['close'].rolling(window=20).mean()
# 4. 移除極端值(5% 以上的異常波動)
q_low = raw['returns'].quantile(0.05)
q_high = raw['returns'].quantile(0.95)
raw = raw[(raw['returns'] >= q_low) & (raw['returns'] <= q_high)]
# 5. 時間對齊
raw.set_index('timestamp', inplace=True)
raw = raw.asfreq('1min') # 將資料轉為 1 分鐘頻率,缺失則 NaN
# 6. 產生標籤(示例:是否上漲)
raw['label'] = (raw['close'].shift(-1) > raw['close']).astype(int)
raw.to_parquet('clean_market_data.parquet', compression='snappy')
> **提醒**:對於高頻資料,記得檢查時間戳對齊與缺失。若頻率不符,需先做重採樣(resampling)。
## 5. 資料品質評估指標
| 指標 | 公式 | 目的 |
|---|---|---|
| **缺失率** | `sum(isna)/total` | 了解資料完整度 |
| **異常比例** | `count( |value - median| > k*std ) / total` | 檢測離群點 |
| **類別不平衡** | `max(counts)/sum(counts)` | 評估標籤分佈 |
| **相關性矩陣** | `corr()` | 避免多重共線 |
> **實務建議**:在每次資料更新時,都跑一次品質報表,確保新加入的資料不會把整體品質拖低。
## 6. 進階資料清理策略
1. **時序資料缺失插補**:使用 `scipy.interpolate` 或 `pandas` 的 `interpolate(method='time')`。
2. **異常檢測**:採用 `Isolation Forest`、`DBSCAN` 或 `One-Class SVM` 進行自動化檢測。
3. **資料標準化**:對於模型輸入,使用 `StandardScaler` 或 `MinMaxScaler`,但對於某些策略(如技術指標),可能保留原始尺度。
4. **特徵選擇**:利用 `Recursive Feature Elimination (RFE)` 或 `L1` 正則化(LASSO)降低維度,防止過擬合。
> **案例**:一名量化分析師在處理 5 年期的 1 秒級別交易資料時,發現「高頻波動」部分佔 30% 的時間段。透過 `Isolation Forest` 判斷這些波動多數為市場機制錯誤,最終將其過濾,模型精度提升 4%。
## 7. 資料治理與合規
- **版本控制**:使用 DVC 或 Delta Lake,確保每一次資料處理都有可追蹤的版本。
- **資料存取權限**:採用 RBAC(Role-Based Access Control)與加密存儲,符合 GDPR/CCPA。
- **審計紀錄**:每次資料變動都記錄 `who, when, why, what`,以備監管檢查。
> **警告**:若未正確管理資料治理,可能在合規審查時被處以高額罰款,甚至失去交易執照。
## 8. 小結
- **資料品質是基石**:不良資料會在整個投資流程中「傳染」,即使最先進的機器學習模型也會受限。
- **清理不是一次性工作**:隨著市場變化、資料來源更新,清理流程需不斷迭代。
- **流程化、標準化**:使用 ETL 工具、工作流管理與自動化測試,降低人工錯誤。
- **合規與治理**:在數據驅動投資中,合規不僅是法律要求,更是風險管理的一部分。
> **未來預告**:下一章將帶您進入特徵工程的世界,從「雜訊」中挑選「信號」,並學習如何為模型構建「特徵金鑰」。