返回目錄
A
數據決策:從洞察到策略的全程分析 - 第 4 章
第4章 統計建模與假設檢定
發布於 2026-03-05 01:52
# 第4章 統計建模與假設檢定
在前一章的資料探索結束後,我們擁有了若干假設:
- 節假日對日均銷售額有顯著影響。
- 高熱銷商品的折扣率與銷售量呈正相關。
- 店面位置在城市中心區域的商品平均銷售額高於郊區。
這些觀察雖富洞見,但若要轉為可操作的商業策略,必須經過 **統計驗證**。此章將帶你從假設檢定到模型建構,再到評估指標,完整流程皆以程式範例說明,並強調可解釋性與可落地性。
---
## 4.1 假設檢定:從觀測到證據
### 4.1.1 雙樣本 t 檢定
假設我們想比較「中心區店面」與「郊區店面」的平均日銷售額差異。步驟如下:
1. **定義假設**
- **零假設 H0**:兩區平均銷售額相等。
- **備擇假設 H1**:中心區平均銷售額高於郊區。
2. **選擇顯著水準**:常用 0.05。
3. **計算 t 值與 p 值**。
python
import pandas as pd
from scipy import stats
# 假設已經將區域欄位拆分為兩個子 DataFrame
center_sales = sales_df[sales_df['location'] == 'center']['sales_amount']
suburb_sales = sales_df[sales_df['location'] == 'suburb']['sales_amount']
# 進行單尾 t 檢定
stat, p = stats.ttest_ind(center_sales, suburb_sales, equal_var=False)
print(f"t = {stat:.3f}, p = {p:.5f}")
> 若 p < 0.05,拒絕 H0,結論為「中心區平均銷售額顯著高於郊區」。
### 4.1.2 單變量線性回歸
為了量化 **折扣率** 與 **銷售量** 的關係,我們使用簡單線性回歸:
python
from sklearn.linear_model import LinearRegression
import numpy as np
X = sales_df[['discount_rate']].values # 兩維數列
Y = sales_df['sales_amount'].values
model = LinearRegression().fit(X, Y)
print(f"截距: {model.intercept_:.2f}")
print(f"斜率: {model.coef_[0]:.2f}")
斜率為正代表折扣越大,銷售額越高。透過 **p 值** 或 **R²** 判斷模型是否統計顯著。
## 4.2 多變量建模:提升預測力
### 4.2.1 多元線性回歸
結合多個特徵(折扣率、季節、客戶等)建立回歸模型,並檢驗各自的顯著性。
python
X = sales_df[['discount_rate', 'is_holiday', 'customer_age']]
Y = sales_df['sales_amount']
model = LinearRegression().fit(X, Y)
print("係數:", model.coef_)
print("截距:", model.intercept_)
### 4.2.2 分類模型:預測客戶流失
若想預測哪些客戶可能在未來三個月內停止購買,可使用 **邏輯回歸** 或 **隨機森林**。
python
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, roc_auc_score
X = sales_df[['last_purchase_days', 'total_spent', 'discount_used']]
y = sales_df['will_churn'] # 1: 將流失, 0: 留存
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
rf = RandomForestClassifier(n_estimators=200, max_depth=10, random_state=42)
rf.fit(X_train, y_train)
pred = rf.predict(X_test)
print(classification_report(y_test, pred))
print("ROC AUC:", roc_auc_score(y_test, rf.predict_proba(X_test)[:,1]))
## 4.3 模型評估:不只是準確率
- **回歸**:
- *MAE*、*RMSE*、*R²*
- 交叉驗證 (k-fold)
- 重新抽樣、樣本加權
- **分類**:
- *精確率*、*召回率*、*F1*、*ROC*、*PR* 曲線
- *AUC*、*G-Mean*
- 召回率對業務成本的敏感度
> 這些指標要與商業目標對齊。例如若流失預測的誤判成本高於漏判成本,應調整 **閾值** 或採用 **Cost-Sensitive Learning**。
## 4.4 針對商業決策的可解釋性
模型部署前必須確保 **解釋性**,否則即使準確率高,決策者也難以信任。常用技術:
- **特徵重要度**:隨機森林、XGBoost
- **LIME / SHAP**:對單個預測進行局部解釋
- **Partial Dependence Plots (PDP)**:觀察單變數對預測的影響
python
import shap
explainer = shap.TreeExplainer(rf)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values[1], X_test)
## 4.5 實務示例:提升日均銷售額 5%
1. **假設**:在節假日前一週加大折扣可提升銷售。
2. **模型**:使用多元線性回歸預測折扣敏感度。
3. **策略**:將折扣率上調 5% 並在前兩週內實施。
4. **評估**:部署後觀察 7 天內銷售額變化,計算提升幅度。
> 若提升幅度低於 5%,即為模型失效;此時需重新調整特徵或改進模型。
## 4.6 章節小結
- **假設檢定**:將直覺轉為統計證據。
- **多變量建模**:結合多個特徵提升預測力。
- **評估指標**:不只看準確率,更要看成本、風險。
- **解釋性**:確保決策者能理解模型邏輯。
- **迭代驗證**:模型在實戰中需不斷調整。
> 接下來,章節 5 將深入 **模型部署** 與 **A/B 測試**,幫助你將統計模型落地至實際商業流程。