返回目錄
A
星瀾·曦夢的 AI 世界:從數據到偶像 - 第 3 章
第 3 章:資料清理與前處理 —— 數據的「淨化」過程
發布於 2026-04-05 04:36
# 第 3 章:資料清理與前處理 —— 數據的「淨化」過程
在第二章中,我們描繪了虛擬偶像營運中多樣化的資料來源,涵蓋了觀眾的點讚、留言、觀看時間等多維度數據。然而,從現實世界(或模擬的數位世界)採集的原始資料,極少是「乾淨」可用的。它總是充滿了遺失的記錄、格式不一致的標籤,以及令人困惑的異常數值。
本章的核心目的,就是教授如何將這些「原始的、混亂的」數據,透過科學的流程進行**淨化(Cleaning)**和**構造(Preprocessing)**,使其符合機器學習模型可接受的標準,為後續的分析奠定堅實的基礎。
> **核心原則:** 機器學習模型是「垃圾進去,垃圾出來」(Garbage In, Garbage Out, GIGO)的體系。資料清洗的嚴謹性,決定了模型預測的準確度。
## 3.1 缺失值處理 (Handling Missing Values)
**定義:** 缺失值(Missing Values,NaN/Null)是指資料集中某個預期存在的值卻不存在的情況。在虛擬偶像的場景中,可能表現為某些用戶的登入記錄不完整,或傳感器在特定時間段無法傳輸數據。
### 檢測與分析
我們首先使用描述性統計工具來檢測哪些欄位存在缺失值。
python
# 使用 pandas 進行快速檢測
df.isnull().sum()
# 輸出結果會顯示每個欄位有多少個空值
### 處理策略
根據缺失值的佔比、特性以及分析目的,我們選擇不同的補值或剔除策略。
1. **刪除法 (Deletion):**
* **行為:** 若某個欄位的缺失值比例極高(如 > 60%),則考慮將此欄位直接移除(`df.drop(columns=['欄位名'])`)。
* **應用:** 若某個記錄(Row)有多個關鍵欄位缺失(例如,缺少了使用者ID和互動時間),則可能直接刪除該筆記錄。
* **警惕:** 盲目刪除可能會造成資料偏差,應極度謹慎。
2. **補值法 (Imputation):**
* **常數補值 (Constant):** 使用一個合理的預設值(例如,將「非互動」的互動次數設為 0)。
* **統計量補值 (Statistical):** 對於數值型數據,使用**中位數 (Median)** 或**平均數 (Mean)** 來填補。中位數因不受極端異常值的影響,通常是更穩健的首選。
* **進階模型補值 (Model-Based):** 若缺失值具有複雜的相關性(例如,用用戶年齡預測缺失的購買力),可以採用 **K近鄰法 (KNN)** 或 **多重共線性分析 (MICE)** 等模型,利用其他欄位的數據來「預測」缺失值。
| 缺失值類型 | 數據範例 | 推薦處理方法 | 備註 |
| :--- | :--- | :--- | :--- |
| 數值缺失 | 觀看時長 (Minutes) | 中位數/模型預測 | 需考慮缺失的物理意義。 |
| 分類缺失 | 互動來源 (Platform) | 模式/單獨的「未知」類別 | 應視為一個獨立的類別處理。 |
## 3.2 重複資料與異常值檢測 (Duplicates & Anomaly Detection)
### 重複資料 (Duplicates)
**檢測:** 使用 `df.duplicated()` 檢查是否有完全相同的記錄或關鍵欄位組合是重複的。
**處理:**
* **確定重複的定義:** 必須明確「哪些欄位的組合」構成了一個唯一的記錄(例如,`[UserID, InteractionTimestamp, ActionType]` 組合必須唯一)。
* **操作:** 若確認是記錄錯誤,使用 `df.drop_duplicates(subset=['唯一欄位組'])` 進行刪除。
### 異常值 (Outliers)
**定義:** 異常值指那些與絕大多數數據分佈顯著偏離的數據點。在偶像數據中,這可能是一個瞬間爆紅帶來的極高點讚數,或是系統Bug造成的零點心跳值。
**檢測工具與方法:**
1. **箱形圖 (Box Plot) / 邊界箱法 (IQR):** 計算四分位距 (IQR) $[Q3 - 1.5 imes IQR, Q1 + 1.5 imes IQR]$。超出此區間的點即為潛在異常值。
2. **Z-Score (標準化分數):** 衡量數據點偏離平均值的標準差倍數。通常 $|Z| > 3$ 的點被視為極端異常值。
**應對策略(需業務決策):**
* **資料修正:** 若確定為數據輸入錯誤(如 1000000 次點讚),直接修正為合理值。
* **分層處理:** 若異常值是真實的、極端正向的(如爆紅現象),則不應直接移除,而應考慮使用**截尾處理 (Winsorization)**,將異常值封鎖到某個極端邊界值,以減輕其對模型權重的過大影響。
## 3.3 資料結構的規範化 (Standardization and Formatting)
資料清洗的最後一步,是確保所有數據都符合模型預期的「標準格式」。
### 1. 時序與格式統一 (Temporal and Format Consistency)
* **時區處理 (Timezone):** 必須統一所有時間戳記的時區(例如,都轉換為 UTC 時間),否則模型將誤判時間上的巨大差異。
* **資料類型 (Dtype):** 確保欄位的資料型別準確無誤(例如,ID號碼雖然是數字,但若作為分類標籤,則應視為字串)。使用 **正則表達式 (Regex)** 可以強力地清洗和驗證文字的格式(如電子郵件、用戶名格式)。
### 2. 特徵工程 (Feature Engineering)—— 升級數據的藝術
**定義:** 特徵工程是數據科學中最具創造性、也最關鍵的一環。它不是簡單地「清洗」,而是**利用現有資料,結合領域知識,創造出模型更易理解、更具預測力的新特徵**。
**舉例說明:**
* **原始數據:** 點讚次數 (L)、觀看時長 (T)、粉絲人數 (F)。
* **工程化特徵:** 互動率 (L / F)、單位時間互動量 (L / T)。
這兩個新特徵比單獨的原始數據更能準確反映「熱度」和「關注度」。
### 3. 分類與數值特徵的編碼 (Encoding)
機器學習模型本身只能處理數值。當我們遇到文本標籤(如「服裝主題:科幻」、「互動情緒:開心」)時,必須將它們轉換為數字,此過程稱為編碼。
1. **One-Hot Encoding (獨熱編碼):**
* **適用場景:** 當類別間不存在順序關係時(名義型資料),如「服裝主題:科幻」和「服裝主題:奇幻」。
* **原理:** 為每個類別建立一個獨立的二元(0或1)欄位。如果該記錄屬於「科幻」,則「科幻」欄位為 1,其他欄位為 0。
2. **Label Encoding (標籤編碼):**
* **適用場景:** 當類別間存在明確的順序關係時(順序型資料),如「難度級別:初階 $\rightarrow$ 中階 $\rightarrow$ 高階」。
* **原理:** 直接將類別映射到一個整數(0, 1, 2)。
### 4. 特徵尺度化 (Feature Scaling)
數值型特徵之間的量綱差異過大(例如,觀看時長只有幾分鐘,但粉絲人數有幾百萬),會導致某些尺度較大的特徵在模型訓練中佔據過大的權重,造成模型偏差。
* **Min-Max Normalization (正規化):** 將所有數值縮放到一個固定的範圍,通常是 $[0, 1]$。
$$\text{Normalized Value} = \frac{X - \text{Min}(X)}{\text{Max}(X) - \text{Min}(X)}$$
* **Standardization (標準化):** 將數據轉換成均值為 0,標準差為 1 的分佈。這更常用於基於距離或梯度下降的模型(如 SVM, Neural Networks)。
$$\text{Standardized Value} = \frac{X - \mu}{\sigma}$$