返回目錄
A
資料科學實戰:從數據到洞察 - 第 9 章
第9章 進階主題(選讀)
發布於 2026-02-27 06:58
# 第9章 進階主題(選讀)
在前八章中,我們已經建立了資料科學的完整流程框架,從資料採集、清洗、探索、特徵工程,到基礎與高階模型,再到商業洞察與部署。這一章聚焦於三個進階領域,讓讀者能在特定場景中更深入地應用資料科學技術。
> **本章目標**:
> * 了解強化學習、時間序列預測、強化資料隱私三大主題的基本概念。
> * 探索各領域的典型算法與實務案例。
> * 掌握快速落地的程式範例與工具。
---
## 9.1 強化學習(Reinforcement Learning, RL)
### 9.1.1 基本概念
| 名稱 | 內容 |
|------|------|
| **Agent** | 決策者,執行行動並學習。 |
| **Environment** | 外部世界,回饋狀態與報酬。 |
| **State** | 當前環境觀測。 |
| **Action** | Agent 可執行的動作。 |
| **Reward** | 立即回饋,用於評估行動好壞。 |
| **Policy** | 從 State 到 Action 的映射。 |
| **Value Function** | 預測未來累積報酬的指標。 |
| **Exploration vs Exploitation** | 在探索新策略與利用已知策略之間的平衡。
### 9.1.2 主流演算法
| 類型 | 代表演算法 | 特色 |
|------|------------|------|
| **值迭代** | Q‑Learning, SARSA | 記錄 Q 值表;適合離散小型問題。 |
| **策略梯度** | REINFORCE, Actor‑Critic | 直接優化策略參數;適合高維連續空間。 |
| **深度增強學習** | DQN, PPO, A3C | 結合深度網路擴展到大規模狀態空間。 |
### 9.1.3 實務案例:智能投資組合
**背景**:金融市場中,投資者希望在波動市場中最大化長期回報。 RL 可協助自動調整資產配置。
python
import gym
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
# 簡易投資環境(示範用)
class PortfolioEnv(gym.Env):
def __init__(self, prices, window=5):
super().__init__()
self.prices = prices
self.window = window
self.current_step = 0
self.action_space = gym.spaces.Box(low=0, high=1, shape=(1,), dtype=np.float32) # 投資比例
self.observation_space = gym.spaces.Box(low=0, high=np.inf, shape=(window, 1), dtype=np.float32)
def reset(self):
self.current_step = self.window
return self._get_observation()
def step(self, action):
reward = self.prices[self.current_step] / self.prices[self.current_step-1] - 1
reward *= action # 只投資於單一資產
self.current_step += 1
done = self.current_step >= len(self.prices) - 1
return self._get_observation(), reward, done, {}
def _get_observation(self):
return self.prices[self.current_step-self.window:self.current_step].reshape(-1,1)
# 簡易 DQN
class DQN(nn.Module):
def __init__(self, state_dim, action_dim):
super().__init__()
self.net = nn.Sequential(
nn.Linear(state_dim, 64), nn.ReLU(),
nn.Linear(64, 64), nn.ReLU(),
nn.Linear(64, action_dim)
)
def forward(self, x):
return self.net(x)
# 省略訓練迴圈,重點是演算法結構
> **提示**:實際應用時需加入風險限制、手續費、稅務等因素;RL 模型對環境設定極為敏感。
### 9.1.4 工具與框架
| 框架 | 特色 |
|------|------|
| **OpenAI Gym** | 標準化環境介面。 |
| **Stable Baselines3** | 高度封裝的 RL 套件。 |
| **RLlib** | 大規模分布式 RL。 |
| **TensorTrade / FinRL** | 專為金融領域設計的 RL 平台。 |
---
## 9.2 時間序列預測(Time Series Forecasting)
### 9.2.1 時間序列特性
| 特性 | 說明 |
|------|------|
| **趨勢** | 長期上升或下降趨勢。 |
| **季節性** | 周期性波動。 |
| **循環** | 長期週期不規則變動。 |
| **隨機性** | 雜訊與不確定因素。 |
### 9.2.2 常見模型
| 類型 | 代表模型 | 優缺點 |
|------|------------|--------|
| **統計模型** | ARIMA, SARIMA, Exponential Smoothing | 易於解釋,需嚴格假設;適合短期預測。 |
| **機器學習模型** | Random Forest, Gradient Boosting | 處理非線性,對季節性需手工特徵化。 |
| **深度學習模型** | RNN, LSTM, GRU, Transformer (Time‑Series Transformer) | 能自動學習長期依賴;需大量資料與計算資源。 |
### 9.2.3 實務案例:零售銷售預測
**目標**:預測未來 4 周每日銷售額,協助庫存與營銷。
python
import pandas as pd
import numpy as np
from prophet import Prophet
# 讀取銷售資料(date, sales)
df = pd.read_csv('sales.csv')
# Prophet 需要的欄位名稱
df_prophet = df.rename(columns={'date':'ds', 'sales':'y'})
# 建模
m = Prophet(yearly_seasonality=True, weekly_seasonality=True, daily_seasonality=False)
m.fit(df_prophet)
# 未來 28 天預測
future = m.make_future_dataframe(periods=28)
forecast = m.predict(future)
# 視覺化
fig = m.plot(forecast)
fig.show()
> **技巧**:
> * 先檢查缺失值與異常;
> * 進行時間序列拆分(訓練/驗證/測試)以避免資料泄漏;
> * 若使用統計模型,可先自動化差分處理;
> * 深度學習可搭配 `tslearn` 或 `Keras Tuner` 進行參數搜索。
### 9.2.4 工具與庫
| 工具 | 主要功能 |
|------|----------|
| **statsmodels** | ARIMA, VAR 等統計模型。 |
| **pmdarima** | 自動 ARIMA 模型搜尋。 |
| **Prophet** | Facebook 時間序列預測,簡易季節性處理。 |
| **TensorFlow/Keras** | LSTM / GRU 範例;可結合 `tf.keras.layers.Bidirectional`。 |
| **NLP‑Transformer** | `Autoformer`, `Informer`, `Temporal Fusion Transformer` | 針對長序列預測與多變量。
---
## 9.3 強化資料隱私(Data Privacy & Privacy‑Preserving ML)
### 9.3.1 隱私保護需求
| 隱私層級 | 典型場景 |
|----------|----------|
| **個人資訊** | 醫療記錄、信用卡號碼 | 高度敏感,需符合法規。 |
| **結構化數據** | 交易紀錄、購買歷史 | 雖不直接揭露個人,但可推斷身份。 |
| **非結構化數據** | 文字、影像 | 需要更複雜的隱私技術。
### 9.3.2 技術方案
| 技術 | 概念 |
|------|------|
| **差分隱私(Differential Privacy, DP)** | 加噪音保證查詢結果不透露單一個體訊息。 |
| **聯邦學習(Federated Learning)** | 模型在本地訓練,僅同步參數。 |
| **合成數據(Synthetic Data)** | 用機率模型生成逼真但無實際個人資訊的資料。 |
| **同態加密(Homomorphic Encryption)** | 允許在加密狀態下進行運算,結果解密後仍保留隱私。
### 9.3.4 實務案例:醫療影像診斷
**目標**:使用患者 CT 影像進行肺部結節分類,且不將原始影像外泄。
python
import torch
from torch import nn
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms
from diffprivlib.models import LogisticRegression
# 差分隱私簡易示例(非影像)
# 先將影像轉為特徵向量(如 ResNet‑50)
# 然後使用 diffprivlib 的 LogisticRegression
# 假設 feature_matrix 由 ResNet‑50 提取,label 為 0/1
X, y = feature_matrix, labels
# 加噪音
dp_lr = LogisticRegression(epsilon=1.0) # epsilon 控制隱私保護強度
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
dp_lr.fit(X_train, y_train)
print('Test accuracy:', dp_lr.score(X_test, y_test))
> **實務要點**:
> * **選擇合適的 epsilon**:較小 epsilon 提供更高隱私,但模型準確度下降。
> * **多模態資料**:結合差分隱私與聯邦學習,可在多院校協同學習同時保護患者隱私。
> * **合規性**:遵守 GDPR、HIPAA、個人資料保護法(PDPA)等。
### 9.3.5 工具與平台
| 平台 | 特色 |
|------|------|
| **diffprivlib** | IBM 的差分隱私庫,支援 sklearn。 |
| **TensorFlow Privacy** | 加噪音的梯度下降、DP‑SGD。 |
| **OpenMined / PySyft** | 端到端聯邦學習與差分隱私。 |
| **Microsoft SEAL** | 同態加密實作庫。 |
---
## 9.4 小結
| 進階領域 | 主要學習點 |
|-----------|-------------|
| 強化學習 | 對環境的動態學習,適合需要長期決策的場景。 |
| 時間序列預測 | 對歷史資料的趨勢與季節性建模,關鍵於業務預算與資源配置。 |
| 強化資料隱私 | 以技術手段保護個人隱私,同時維持模型效能與合規性。 |
> **實踐建議**:
> 1. **先釐清業務需求**:確定預測時程、精度需求與可接受風險。
> 2. **數據品質優先**:強化學習與時間序列模型都極度依賴資料品質。
> 3. **模組化開發**:將隱私保護層獨立於模型訓練,易於測試與更新。
> 4. **持續監控**:特別是 RL,環境變動會直接影響策略效果;需定期回測與重新訓練。
---
> **未來方向**:隨著算力提升與雲端平台成熟,RL 將進一步滲透至智慧製造、物流與廣告等領域;Transformer‑style 時間序列模型將成為預測標配;同時,區塊鏈與安全多方計算將為資料隱私提供新的可能。希望本章能作為你進一步探索與研究的起點。