返回目錄
A
數據洞察:以資料科學驅動商業決策 - 第 4 章
第四章:探索性資料分析(EDA)—從數據到洞察
發布於 2026-03-02 02:29
# 第四章:探索性資料分析(EDA)—從數據到洞察
> **一句話總結**:EDA 不是一次性操作,而是一場「數據對話」——你先聽,再問,最後做決策。
## 4.1 為何要做 EDA?
在資料科學的生命週期裡,數據往往被視為「原料」。但就像烹飪前先聞香、觀色,EDA 讓我們先了解食材,避免最後吃到奇怪口味。從商業角度來說,EDA 能:
1. **減少風險**:揭露隱藏的異常值、缺失模式,防止模型被噪音蒙蔽。
2. **節省成本**:早期發現資料問題,避免昂貴的重建與修復。
3. **快速對話**:將數據轉化為可視、可解讀的故事,讓非技術團隊參與決策。
4. **創造機會**:通過統計分布與相關性發掘新的業務假設。
## 4.2 EDA 的流程框架
> **「先觀察,再推理」**:將 EDA 看作一個迴圈,從大到小,從宏觀到微觀,最後回到原始問題。
| 步驟 | 目的 | 典型工具/技巧 |
|------|------|-----------------|
| 4.2.1 資料概覽 | 瞭解資料規模、結構、時間範圍 | `pandas.DataFrame.head()`, `df.info()`, `DVC metrics` |
| 4.2.2 統計摘要 | 探索均值、中位數、偏度、峰度 | `df.describe()`, `scipy.stats` |
| 4.2.3 缺失與異常 | 確定缺失模式、離群值 | `missingno.matrix()`, `IsolationForest` |
| 4.2.4 分布可視化 | 直觀呈現單變量分布 | `seaborn.histplot`, `plotly.express.histogram` |
| 4.2.5 相關性矩陣 | 觀察特徵間關聯 | `df.corr()`, `heatmap` |
| 4.2.6 高階洞察 | 先驗假設驗證、聚類探索 | `t-SNE`, `KMeans`, `PCA` |
| 4.2.7 報告與故事 | 將洞察轉化為商業決策 | `Jupyter Notebook`, `Dash`, `Storybook` |
> **提示**:每一步都要記錄結果,最好放在 Git 版本化的 Notebook 或 Markdown 裡,確保可追蹤性。
## 4.3 典型案例:美食雲端的訂單分析
> **背景**:美食雲端(FoodCloud)是一個以即時外送為主的平台,擁有 10 萬筆每日訂單資料。業務團隊想了解「哪類餐廳在節假日表現最佳?」
### 4.3.1 資料概覽
python
import pandas as pd
orders = pd.read_csv('orders.csv')
print(orders.head())
print(orders.info())
### 4.3.2 統計摘要
python
print(orders['order_amount'].describe())
結果顯示平均消費 250 元,標準差 120 元,峰度偏高,暗示存在大額訂單。
### 4.3.3 缺失與異常
python
import missingno as msno
msno.matrix(orders)
# 針對離群值
from sklearn.ensemble import IsolationForest
iso = IsolationForest(contamination=0.01, random_state=42)
orders['anomaly'] = iso.fit_predict(orders[['order_amount', 'delivery_time']])
orders[orders['anomaly'] == -1].head()
### 4.3.4 分布可視化
python
import seaborn as sns
sns.histplot(orders['order_amount'], bins=50, kde=True)
### 4.3.5 相關性矩陣
python
corr = orders.corr()
sns.heatmap(corr, annot=True, fmt='.2f')
### 4.3.6 高階洞察
#### 4.3.6.1 聚類探索
python
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, random_state=42)
orders['cluster'] = kmeans.fit_predict(orders[['order_amount', 'delivery_time']])
各聚類對應不同消費族群:
- **Cluster 0**:高價值、快送
- **Cluster 1**:中等價值、常規送
- **Cluster 2**:低價值、慢送
#### 4.3.6.2 時間序列
python
orders['order_date'] = pd.to_datetime(orders['order_time'])
orders.set_index('order_date').resample('D')['order_amount'].sum().plot()
節假日呈現明顯高峰,尤其在「雙十一」期間。
### 4.3.7 商業洞察
1. **節假日推廣**:對 Cluster 0 的餐廳推出「快閃折扣」可提升高價值訂單。
2. **配送優化**:Cluster 2 低價值訂單多集中於郊區,考慮調整配送範圍或設定最低消費門檻。
3. **客戶分層**:根據聚類結果,將客戶分為三層,制定差異化的會員制度。
## 4.4 工具選型:不只是 Pandas
| 類別 | 主要工具 | 適用場景 |
|------|----------|----------|
| 可視化 | `seaborn` | 直觀統計圖
| 交互式 | `plotly` | 大資料交互式探索
| 報告 | `JupyterLab` | Notebook + Markdown
| 版本控制 | `DVC` | 資料流與模型版本
| 大數據 | `Spark` | 10 億筆以上數據
> **建議**:對於多元時間序列,先使用 `pandas` 做基礎清洗,之後若資料量過大再切換至 `Spark` 或 `Dask`。
## 4.5 失敗案例:忽略缺失值
> **情景**:某金融機構在信用評分模型中未處理 `loan_amount` 的缺失值,導致模型在部署時直接崩潰。
> **教訓**:在 EDA 階段,即使缺失率低,也應先進行可視化(`missingno`)與統計檢定(`chi2`),決定填補或刪除策略。
## 4.6 小結
探索性資料分析是資料科學的「門面」,它讓資料從靜態數字變成動態故事。透過統計摘要、可視化、相關性探索與高階技術,我們不僅能確保資料品質,還能挖掘商業價值。下一章,我們將把這些洞察轉化為機器學習模型,為決策提供自動化推論。
> **小貼士**:每完成一輪 EDA,都務必在報告中加入「洞察」與「後續步驟」兩欄,讓非技術團隊也能快速把握重點。