返回目錄
A
數據洞察:以資料科學驅動商業決策 - 第 6 章
第六章:數據清洗與特徵工程的藝術
發布於 2026-03-02 03:17
# 第六章:數據清洗與特徵工程的藝術
> **「一份乾淨的數據集是每一個洞察的基石。」**
在資料科學的旅程中,收集與存儲只是一個開始。真正能將資訊轉化為決策力的,是能把原始、雜亂的數據整理成有意義、可使用的結構。這一章將帶你踏進數據清洗與特徵工程的核心,從基本概念到實務技巧,並結合案例說明其在商業決策中的實際價值。
## 6.1 為什麼清洗與特徵工程很重要
1. **降低噪聲**:錯誤的或遺失的數據會使模型學習到誤導性的關係。
2. **提升模型性能**:適當的特徵縮放、轉換可以顯著提高訓練速度與準確度。
3. **增強可解釋性**:乾淨且意義清晰的特徵更容易被非技術決策者理解。
4. **防止資料泄漏**:不當的預處理往往把測試集的信息洩露進模型,導致性能高估。
> **筆者提示**:在商業場景中,數據清洗往往是迭代的工作。每次迭代都可能揭示新的缺陷或改進空間,因而建議建立自動化工作流程(如 Airflow、Prefect)來確保可重現性。
## 6.2 常見的資料品質問題
| 問題類型 | 典型表現 | 風險
|----------|----------|------|
| **遺失值** | 部分欄位全為 NaN、行缺少關鍵欄位 | 影響模型訓練、導致偏差
| **離群值** | 觀測值遠離其他樣本 | 噪聲增大、模型不穩定
| **重複記錄** | 同一客戶重複多次 | 統計偏差、過擬合
| **不一致格式** | 日期、貨幣單位不同 | 轉換失誤、特徵不一致
| **類別編碼混亂** | 同一類別用不同文字或數值 | 產生虛假區分
## 6.3 數據清洗流程
1. **探索性分析 (EDA)**
- 使用 `pandas.describe()`、`missingno.matrix()` 瞭解缺失率與分佈。
- 畫箱型圖 (`sns.boxplot`) 檢查離群值。
2. **處理缺失值**
- **刪除**:當缺失率 < 5% 且行數足夠時。
- **填補**:數值型用中位數/均值,類別型用眾數或 `sklearn.impute.SimpleImputer`。
- **推斷填補**:使用 KNN、MICE 等進階方法。
3. **處理離群值**
- **截斷**:使用 IQR 或 Z-Score。
- **轉換**:對數、Box-Cox 轉換降低分佈極端值影響。
4. **去除重複**
- `df.drop_duplicates(subset=['客戶編號', '交易日期'])`。
5. **標準化與正規化**
- 針對機器學習模型使用 `StandardScaler` 或 `MinMaxScaler`。
6. **編碼類別變數**
- **單熱編碼** (`pd.get_dummies`):適合稀疏類別。
- **目標編碼**:對於高 cardinality 變數使用訓練集目標平均。
- **自訂編碼**:根據業務規則將類別映射成數值(如「VIP=3、Regular=2、New=1」)。
## 6.4 特徵工程技巧
### 6.4.1 構造衍生特徵
| 原始欄位 | 變換 | 新特徵 | 作用 |
|----------|------|--------|------|
| `銷售金額` | `log` | `log_sales` | 降低偏態 |
| `購買時間` | `hour, weekday` | `purchase_hour`, `purchase_weekday` | 捕捉時間模式 |
| `客戶年齡` | `age_bucket` | `age_group` | 分層分析 |
### 6.4.2 特徵選擇
- **相關係數**:`df.corr()` 過濾高相關變數。
- **單變量統計**:`ANOVA`, `Chi-squared`。
- **模型基礎法**:使用 `RandomForestClassifier.feature_importances_` 或 `Lasso`。
- **主成份分析 (PCA)**:在高維數據中降維。
### 6.4.3 離群特徵
將離群值本身視為特徵:
- `is_outlier` 欄位可提升模型辨識異常行為。
## 6.5 工具與自動化
| 工具 | 功能 | 使用場景 |
|------|------|----------|
| `pandas` | 基礎資料操作 | 任何階段的數據清洗 |
| `missingno` | 可視化缺失值 | 迅速判斷缺失模式 |
| `scikit-learn` | 轉換器 (Imputer, Scaler, Encoder) | 標準化流程 |
| `Featuretools` | 自動特徵生成 | 大規模數據集快速衍生特徵 |
| `Great Expectations` | 資料質量測試 | 持續監控數據品質 |
| `dbt` | SQL-based 數據轉換 | 大數據管道(Snowflake、BigQuery) |
> **實務建議**:在業務部署前,將清洗腳本封裝成 Docker 容器,並用 CI/CD 觸發自動化測試。這不僅能確保重現性,還能快速回應數據質量波動。
## 6.6 案例研究:零售業客戶分群
### 背景
- 目標:提升客戶留存率,針對高價值客戶推送專屬優惠。
- 資料:交易歷史、會員資料、網路互動行為。
### 步驟
1. **數據整合**:將 SQL 與 CSV 合併,並用 `dbt` 產生清洗後的資料集。
2. **缺失處理**:年齡缺失率 12% → 用 KNN 估算。
3. **離群檢測**:購買金額 5% 位置檢查,將遠離平均值的資料標記為離群。
4. **特徵擴充**:
- `recency`, `frequency`, `monetary` (RFM) 指標。
- `avg_monthly_spend`。
5. **編碼**:性別、會員等級用目標編碼。
6. **特徵選擇**:使用 `XGBoost` 重要性排序,保留 top 15。
7. **模型**:K-means 分群(k=4)。
8. **結果**:分為「高價值忠誠客戶」、「高價值流失風險客戶」等。
### 成效
- **留存率提升**:對高價值忠誠客戶的專屬優惠,留存率提升 3.2%。
- **營收增長**:相關客戶平均消費增加 5.7%。
- **成本節約**:針對流失風險客戶的行銷成本下降 12%。
> **關鍵洞察**:通過特徵工程將行為數據轉化為 RFM 指標,模型不僅更易解釋,還能直接對應業務指標。
## 6.7 小結
數據清洗與特徵工程是資料科學中最為基礎且關鍵的階段。它不僅影響模型的準確度,更是決策可信度的保證。透過嚴謹的流程、合適的工具與不斷迭代的實踐,企業能將原始數據轉化為可操作的洞察,從而在競爭激烈的市場中取得優勢。
---
> **下一章(第七章)**:模型選擇與性能評估 – 我們將深入探討不同模型的適用場景,以及如何衡量與比較它們的表現。