返回目錄
A
數據科學:從原始資料到策略洞察 - 第 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 小結
資料蒐集與預處理是數據科學成功的基石。透過嚴謹的資料品質評估、科學的清洗流程以及系統化的特徵工程,可將零散的原始訊號轉化為高度可解釋且易於模型化的特徵。接下來,我們將進一步探討 **特徵選擇與模型訓練** 的最佳實踐,並解析如何將模型表現落地至業務決策。