聊天視窗

數據驅動的投資決策:從基礎統計到量化交易 - 第 2 章

第 2 章:資料洞察—描述性統計與探索性分析

發布於 2026-02-21 21:55

# 第 2 章:資料洞察—描述性統計與探索性分析 在上一章,我們完成了資料的抓取、清理與基礎特徵工程。此時的資料集已經具備「可分析」的品質,接下來的任務是從統計角度快速掌握其整體特性,為後續建模打下堅實基礎。 ## 1️⃣ 先備:導入與載入 python import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 讀取已備份的 CSV df = pd.read_csv('cleaned_data.csv', parse_dates=['date'], index_col='date') > **提醒**:在任何分析前先確定 `index` 為時間序列,避免後續計算出現偏差。 ## 2️⃣ 基本統計量 | 指標 | 說明 | 公式/方法 | |------|------|------------| | Count | 有效觀測值數量 | `df.shape[0]` | | Mean | 平均值 | `df.mean()` | | Std | 標準差 | `df.std()` | | Min | 最小值 | `df.min()` | | 25% | 第一四分位數 | `df.quantile(0.25)` | | Median | 中位數 | `df.median()` | | 75% | 第三四分位數 | `df.quantile(0.75)` | | Max | 最大值 | `df.max()` | python print(df.describe()) > **洞察**:若 `max` 與 `min` 之間差距極大,可能存在極端值。若 `std` 大於 `mean`,資料呈現高度離散性。 ## 3️⃣ 相關係數矩陣 多重特徵之間的線性關係往往是策略設計的關鍵。使用 Pearson 相關係數(適用於正態分佈的資料)或 Spearman(非參數)皆可。 python corr = df.corr(method='pearson') print(corr) ### 3.1 可視化 python plt.figure(figsize=(10, 8)) sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f') plt.title('特徵相關係數矩陣') plt.show() > **判斷**:|r|>0.8 或 <-0.8 的關係表明高度共線,可能需考慮去除或降維。 ## 4️⃣ 分布檢視:直方圖與 KDE 每一個特徵的分布形態會影響機器學習演算法的收斂與預測。以下以 `close` 與 `return` 為例。 python plt.figure(figsize=(12, 5)) plt.subplot(1, 2, 1) sns.histplot(df['close'], bins=50, kde=True, color='steelblue') plt.title('收盤價分布') plt.subplot(1, 2, 2) sns.histplot(df['return'], bins=50, kde=True, color='darkgreen') plt.title('日報酬率分布') plt.show() > **觀察**:報酬率往往呈現左偏(負偏)與尖峰,這正是金融市場的典型特徵。 ## 5️⃣ 時間序列檢視:趨勢與季節性 python plt.figure(figsize=(14, 6)) df['close'].plot(label='收盤價', linewidth=1) plt.title('收盤價時序圖') plt.legend() plt.show() 如果懷疑季節性,可使用 `statsmodels` 的 `seasonal_decompose`: python from statsmodels.tsa.seasonal import seasonal_decompose result = seasonal_decompose(df['close'], period=252) # 252 為交易日數 result.plot() plt.show() > **提示**:若 `trend` 與 `seasonal` 的組合不穩定,請嘗試不同周期或使用指數平滑法。 ## 6️⃣ 資料質量驗證 | 驗證項 | 方式 | |--------|------| | 缺失值 | `df.isnull().sum()` | | 重複值 | `df.duplicated().sum()` | | 超過界限值 | 以統計四分位距(IQR)檢查外溢值 | | 交易日間隔 | 兩日之間的日期差異 | python # 超過界限值檢查 q1 = df['return'].quantile(0.25) q3 = df['return'].quantile(0.75) iqr = q3 - q1 lower = q1 - 1.5 * iqr upper = q3 + 1.5 * iqr outliers = df[(df['return'] < lower) | (df['return'] > upper)] print(f'外溢值數量: {len(outliers)}') > **結語**:資料質量的每一次檢查都可能發現影響策略表現的隱藏缺陷。務必建立自動化報表與告警機制,以便及時修正。 --- ## 作業:探索性分析報告 1. **產生一份 3‑頁 PDF**,涵蓋上述所有統計量、相關係數、分布圖、時序圖與資料質量報告。 2. **撰寫 300 字心得**,說明資料的主要特徵與可能的分析挑戰。 3. **提交至雲端資料庫**(如 GitHub Repository),並在 README 標註分析流程與結論。 > **備註**:在下一章,我們將利用這些洞察,進行基於統計模型的假設檢定與參數估計,為量化交易策略奠定數學基礎。