返回目錄
A
決策的數據語言:從原始數據到洞察力 - 第 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 代碼、交叉驗證與可視化,打造可重複、可解釋的分析流程。
在下一章,我們將把統計推斷的成果轉化為 **機器學習模型**,進一步預測與優化商業流程。