聊天視窗

資料科學實戰:從數據到洞察 - 第 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 時間序列模型將成為預測標配;同時,區塊鏈與安全多方計算將為資料隱私提供新的可能。希望本章能作為你進一步探索與研究的起點。