聊天視窗

決策的數據語言:從原始數據到洞察力 - 第 5 章

第5章 統計推斷:從假設到結論

發布於 2026-03-03 09:12

# 第5章 統計推斷:從假設到結論 在上一章中,我們透過探索性資料分析(EDA)把散亂的數據轉化為能說話的圖形與統計量。EDA 給了我們對資料的直覺,接下來的任務是**驗證**這些直覺,判斷它們是否因機會而來,還是真實存在的關係。統計推斷(Statistical Inference)正是為此而生:從樣本推廣到族群、從觀測到因果。 ## 5.1 假設檢定的哲學 統計推斷的核心是 **假設檢定**: - **虛無假設(H₀)**:通常是「無差異」「無關係」的陳述。 - **備擇假設(H₁)**:我們想證明或推斷的說法。 假設檢定的流程: 1. **提出假設**。 2. **選擇檢定統計量**。 3. **計算 p 值**。 4. **與顯著水準(α)比較**。 5. **結論**。 > *「假設檢定不是在尋找真理,而是在決策時衡量風險。」* – 這句話提醒我們,推斷往往是為了支援決策,而非純粹的科學追求。 ## 5.2 參數估計與置信區間 在檢定之前,先估算 **參數**:平均值、比例、相關係數等。估計的置信區間(Confidence Interval, CI)不僅告訴我們估計值,還告訴我們其不確定性。 ### 例子:兩組平均數差異 ```python import pandas as pd import numpy as np from scipy import stats # 假設我們有兩組信用卡還款利率資料 np.random.seed(42) group_a = np.random.normal(0.15, 0.02, 100) group_b = np.random.normal(0.17, 0.02, 100) # 參數估計 mean_a, mean_b = np.mean(group_a), np.mean(group_b) print(f"平均值 A: {mean_a:.4f}, B: {mean_b:.4f}") # 95% 置信區間(兩樣本 t 檢定) ci = stats.ttest_ind(group_a, group_b, equal_var=False) print(f"t 值: {ci.statistic:.3f}, p 值: {ci.pvalue:.4f}") ``` 如果 p 值小於 0.05,我們拒絕 H₀,說明兩組平均值有統計顯著差異。與此同時,檢查置信區間是否跨越 0,可視為效應大小的指標。 ## 5.3 常見假設檢定 | 測試 | 目的 | 主要假設 | |------|------|----------| | t 檢定 | 比較兩組平均值 | 正態分佈、等變異數(若適用) | | z 檢定 | 大樣本比例 | 正態近似、樣本獨立 | | 卡方檢定 | 觀測與期望分佈比較 | 觀測頻數足夠大 | | ANOVA | 多組平均值差異 | 正態分佈、等變異數 | | Mann-Whitney U | 非參數兩組差異 | 無正態假設 | > **提醒**:檢查 **檢定前的假設** 很重要。若資料違背正態性,可考慮 **非參數檢定** 或 **數據轉換**(log、square‑root)。 ## 5.4 多重檢定與偽陽性 在金融風險評估中,常常需要同時檢驗多個指標。多重檢定會把偽陽性率推高。常用修正方法: - **Bonferroni**:α / k - **Holm**:逐步調整 - **Benjamini–Hochberg**:控制假發現率(FDR) ```python from statsmodels.stats.multitest import multipletests # 假設我們有 10 個 p 值 p_vals = np.random.rand(10) reject, adj_pvals, _, _ = multipletests(p_vals, alpha=0.05, method='fdr_bh') print("調整後的 p 值:", adj_pvals) ``` ## 5.5 效應大小(Effect Size) p 值只告訴我們差異是否顯著,卻不說明差異有多大。效應大小填補了這一空白。 | 指標 | 公式 | 解讀 | |------|------|------| | Cohen's d | \(d = \frac{\bar{x}_1-\bar{x}_2}{s_{pooled}}\) | 小≈0.2,中≈0.5,大≈0.8 | | Pearson r | \(r = \frac{cov(X,Y)}{s_X s_Y}\) | 0.1→小,0.3→中,0.5→大 | | Odds Ratio | \(OR = \frac{a/b}{c/d}\) | 1→無關係,>1→正向關聯 | 效應大小與置信區間一起呈現,可視化為「Forest Plot」。 ## 5.6 Bayesian 替代方案 傳統假設檢定基於「假設是正確」的假設,對於業務決策往往較為「硬性」。Bayesian 方法將不確定性表達為**機率分佈**,提供更直觀的解釋。 - **先驗 (Prior)**:根據歷史資料或專家意見設定。 - **似然 (Likelihood)**:樣本資料提供的資訊。 - **後驗 (Posterior)**:更新後的機率分佈。 ```python import pymc3 as pm with pm.Model() as model: mu = pm.Normal('mu', mu=0.15, sigma=0.05) # 先驗 sigma = pm.HalfNormal('sigma', sigma=0.02) obs = pm.Normal('obs', mu=mu, sigma=sigma, observed=group_a) trace = pm.sample(2000, tune=1000, cores=1) pm.summary(trace) ``` 後驗分佈的密度圖能直接看到「90% 可信區間」與「機率>0.95」等資訊,對於風險管理尤為適合。 ## 5.7 進階:模型檢驗與交叉驗證 在金融風險模型中,常用**交叉驗證**(Cross‑Validation)來評估模型泛化能力。 ```python from sklearn.model_selection import KFold from sklearn.metrics import roc_auc_score X = data.drop('default', axis=1) y = data['default'] kf = KFold(n_splits=5, shuffle=True, random_state=42) aucs = [] for train_idx, test_idx in kf.split(X): X_train, X_test = X.iloc[train_idx], X.iloc[test_idx] y_train, y_test = y.iloc[train_idx], y.iloc[test_idx] # 這裡以邏輯回歸為例 model = LogisticRegression(max_iter=1000) model.fit(X_train, y_train) auc = roc_auc_score(y_test, model.predict_proba(X_test)[:,1]) aucs.append(auc) print(f"平均 AUC: {np.mean(aucs):.4f}") ``` 交叉驗證不僅評估預測力,亦能發現**過度擬合**。檢視各 fold 的 AUC 變動,可快速辨別模型不穩定性。 ## 5.8 實務小貼士 1. **資料清洗先行**:在進行推斷前,先檢查遺失值、極端值。必要時進行插補或截斷。 2. **檢查假設**:若資料偏離正態,可採用 **Shapiro–Wilk**、**Kolmogorov–Smirnov** 檢定,或視覺化 QQ Plot。 3. **報告透明度**:在報告中呈現 **p 值**、**效應大小**、**置信區間**、**假設檢定方法**,並說明任何多重檢定修正。 4. **風險溝通**:將統計結論轉換為業務語言,例如「風險增幅 3%」或「機率低於 5%」。 5. **重複實驗**:保存腳本、參數設定與結果,以便團隊成員重跑或驗證。 ## 5.9 案例:信用卡違約率的統計推斷 ### 背景 某金融機構想評估 **年齡** 與 **違約率** 的關係。透過 EDA,我們已觀察到高齡客戶違約率偏低。 ### 步驟 1. **假設**: - H₀:平均違約率隨年齡不變。 - H₁:平均違約率隨年齡下降。 2. **檢定**:採用 **線性回歸**,並檢查斜率係數。 3. **p 值**:若 p<0.05,拒絕 H₀。 4. **置信區間**:斜率 95% CI 若完全位於負值,說明趨勢穩定。 5. **效應大小**:標準化係數 r 近似 0.25,屬於中等效應。 6. **報告**: - 「年齡每增加 5 歲,違約率降低 1.3% (p=0.01, 95% CI [-2.1%, -0.5%])」。 ### 代碼示例 ```python import statsmodels.api as sm X = data['age'] X = sm.add_constant(X) y = data['default'] model = sm.Logit(y, X).fit() print(model.summary()) ``` ## 5.10 小結 - **推斷是決策的科學工具**:從假設到結論,幫助我們把不確定性量化。 - **效應大小與置信區間**:比單一 p 值更能說明實務意義。 - **多重檢定、Bayesian**:讓我們在複雜場景下保持嚴謹與透明。 - **實務操作**:結合 Python 代碼、交叉驗證與可視化,打造可重複、可解釋的分析流程。 在下一章,我們將把統計推斷的成果轉化為 **機器學習模型**,進一步預測與優化商業流程。