聊天視窗

數據科學:從原始資料到策略洞察 - 第 2 章

第二章:資料蒐集與預處理 – 從原始信號到可用特徵

發布於 2026-02-25 09:40

# 第二章:資料蒐集與預處理 – 從原始信號到可用特徵 ## 2.1 資料蒐集的全景 在任何數據科學項目中,資料的來源與質量直接決定最終洞察的可信度。常見的資料來源可分為三類: | 類別 | 典型來源 | 典型風險 | 典型工具 | |------|----------|----------|----------| | 結構化資料 | 內部 ERP、CRM、資料倉儲 | 欠缺靈活性、易出錯的資料結構 | SQL、Snowflake、Redshift | | 半結構化資料 | 日誌檔、JSON API、XML | 解析成本高、格式不統一 | Logstash、Apache NiFi | | 非結構化資料 | 文本、影像、音訊、視訊 | 需要深度處理、計算成本高 | Apache Tika、OpenCV、SpeechRecognition | > **關鍵思考**:在設計資料蒐集流程前,先確認業務問題的核心指標,並針對指標制定**資料映射表**,確保後續能直接映射到模型特徵。 ## 2.2 資料品質評估 資料品質可分為**完整性、正確性、可用性、時效性**四大維度。下列指標能幫助快速把握品質。 | 指標 | 定義 | 量化方法 | |------|------|---------| | 缺失比例 | 缺失值佔總數的比例 | `df.isnull().mean()` | | 重複率 | 重複紀錄佔總數的比例 | `df.duplicated().mean()` | | 範圍偏差 | 觀測值與預期範圍的差異 | `np.mean((df>upper) | (df<lower))` | | 時間戳對齊 | 時間戳是否按升序排列 | `df['ts'].is_monotonic_increasing` | > **技巧**:若缺失比例低於 1%,可直接採用**均值/中位數填補**;高於此門檻時,需採用**KNN、迴歸填補**或**多重插補**。 ## 2.3 資料清洗流程 ### 2.3.1 權重化與統一尺度 對於具有不同量級的特徵,常用的標準化方法包括: - **Z‑score 標準化**:`(x - μ) / σ` - **Min‑Max 重新縮放**:`(x - min) / (max - min)` - **Log/Box‑Cox 轉換**:處理偏態資料 選擇標準化方式時,請考量模型對輸入分布的敏感度。線性模型對分布變化較不敏感,深度學習則更易受輸入範圍影響。 ### 2.3.2 資料類型轉換 - **類別編碼**:`LabelEncoder`、`OneHotEncoder`、`TargetEncoder` - **日期時間拆解**:年、月、日、星期、時段、季節 - **影像資料**:轉為灰階、標準尺寸、正規化像素值 > **提示**:使用 **Pandas Profiling** 或 **Sweetviz** 生成自動化資料報告,可迅速定位異常值與缺失分佈。 ### 2.3.3 异常偵測 - **統計方法**:3σ、IQR、DBSCAN - **機器學習方法**:Isolation Forest、One‑Class SVM、Autoencoder 在實務中,**混合方法**往往能兼顧靈敏度與偽陽性率。 ## 2.4 特徵工程實務 ### 2.4.1 直接派生特徵 | 範例 | 描述 | |------|------| | 交易額 × 週期性係數 | 捕捉季節性波動 | | 文本長度 + 標點符號數 | 評估語義負荷 | | 影像像素平均值 | 亮度指標 | ### 2.4.2 交互特徵 使用 **PolynomialFeatures** 或 **Featuretools** 產生交互項。交互特徵在多重共線性低時能顯著提升模型表現。 ### 2.4.3 主成份分析(PCA) 對於高維資料,可用 **PCA** 或 **TruncatedSVD** 降維,既降低計算成本,也能減少噪音。 ## 2.5 資料版本與監管合規 在資料預處理後,需將**處理腳本**、**中間資料集**、**處理規則**全部紀錄於 **資料管理平台**(如 **Great Expectations** 或 **OpenMetadata**)。 - **資料血統(Data Lineage)**:追蹤每筆資料從來源到模型輸入的完整路徑。 - **合規審計**:確保所有處理步驟符合 GDPR、ISO 27001 或業界特定標準。 > **實例**:某零售商在客戶行為資料上使用 **Great Expectations** 產生 `expectation_suite`,自動生成失敗報告,並將失敗記錄寫入 **Slack** 以供即時回應。 ## 2.6 綜合案例:電商交易數據 python import pandas as pd from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer # 1. 讀取資料 train = pd.read_csv('orders_train.csv') # 2. 基礎清洗 train = train.drop_duplicates() train['order_date'] = pd.to_datetime(train['order_date']) # 3. 欠缺值處理 train['product_category'].fillna('Unknown', inplace=True) train['discount'].fillna(train['discount'].median(), inplace=True) # 4. 特徵工程 train['order_month'] = train['order_date'].dt.month train['is_weekend'] = train['order_date'].dt.weekday >= 5 # 5. 標準化與編碼 numeric_features = ['discount', 'order_month'] categorical_features = ['product_category', 'customer_segment'] preprocess = ColumnTransformer( transformers=[ ('num', StandardScaler(), numeric_features), ('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features) ] ) X = preprocess.fit_transform(train) y = train['is_purchased'] 此段程式碼示範了從讀取、清洗、特徵派生到最終輸出特徵矩陣的完整流程。實際部署時,可將上述步驟封裝為 **Airflow DAG** 或 **Kubeflow Pipelines**,實現自動化重現。 ## 2.7 小結 資料蒐集與預處理是數據科學成功的基石。透過嚴謹的資料品質評估、科學的清洗流程以及系統化的特徵工程,可將零散的原始訊號轉化為高度可解釋且易於模型化的特徵。接下來,我們將進一步探討 **特徵選擇與模型訓練** 的最佳實踐,並解析如何將模型表現落地至業務決策。