聊天視窗

數據洞察:以資料科學驅動商業決策 - 第 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,都務必在報告中加入「洞察」與「後續步驟」兩欄,讓非技術團隊也能快速把握重點。