聊天視窗

數據洞察:以資料科學驅動商業決策 - 第 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 小結 數據清洗與特徵工程是資料科學中最為基礎且關鍵的階段。它不僅影響模型的準確度,更是決策可信度的保證。透過嚴謹的流程、合適的工具與不斷迭代的實踐,企業能將原始數據轉化為可操作的洞察,從而在競爭激烈的市場中取得優勢。 --- > **下一章(第七章)**:模型選擇與性能評估 – 我們將深入探討不同模型的適用場景,以及如何衡量與比較它們的表現。