数据脏污的核心问题
-
字段类型污染
- 数值字段含文本(如年龄填"保密")
- 日期格式混乱(1990年 vs 2090年)
- 特殊字符污染(如"111111")
-
逻辑冲突
- 65岁用户购买游戏装备(年龄-行为矛盾)
- 订单金额为负数(业务逻辑违规)
-
系统默认值误用
- 地址填"火星第三大街"(未覆盖默认值)
- 商品类别为"请选择"(未初始化数据)
六维清洗技术框架
1. 缺失值处理(Missing Values)
# 技术实现示例
def handle_missing(df):
# 业务关联填补
if '购买频次' in df and '用户等级' not in df:
df['用户等级'] = df['购买频次'].map(calc_level) # 基于业务规则推算
# 重要性分级处理
critical_cols = ['user_id', 'payment']
df = df.dropna(subset=critical_cols) # 关键字段整行删除
# 非关键字段填补
df['age'] = df['age'].fillna(df['age'].median())
return df
技术要点:
- 优先通过特征交叉验证补全(如用购买记录推算用户等级)
- 时间序列数据采用前向填充(ffill)或插值法
- 分类变量新增"Unknown"类别
2. 异常值检测(Outliers)
多模态检测方法:
from sklearn.ensemble import IsolationForest
# 方法1:统计边界
q1 = df['amount'].quantile(0.25)
q3 = df['amount'].quantile(0.75)
iqr = q3 - q1
lower_bound = q1 - 1.5*iqr
# 方法2:机器学习检测
clf = IsolationForest(contamination=0.01)
df['anomaly'] = clf.fit_predict(df[['age','amount']])
处理策略:
- 业务白名单机制(如游戏工作室账号特殊标记)
- 动态阈值调整(促销期订单金额上限浮动)
- 异常日志留存分析(反作弊场景)
3. 格式标准化(Formatting)
关键转换矩阵:
原格式 | 目标格式 | 转换函数 |
---|---|---|
“1990/01/02” | YYYY-MM-DD | pd.to_datetime() |
“1,000.5元” | 1000.50 | re.sub(r’[^\d.]') |
“江苏省南京市” | 南京(标准化地址库) | 地址智能解析API |
技术要点:
- 货币单位统一为基准货币(如CNY)
- 地理信息转换GPS坐标(高德/百度API)
- 建立企业级数据字典(字段命名规范)
4. 重复记录处理(Duplicates)
-- 多维度去重SQL示例
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY device_id, session_id
ORDER BY event_time DESC
) AS rn
FROM user_events
)
SELECT * FROM ranked WHERE rn = 1;
场景化策略:
- 交易记录:保留最新状态(如订单状态更新)
- 行为数据:合并点击流(相同session去重)
- 用户信息:主键合并(手机号>邮箱>设备ID)
5. 逻辑验证(Business Rules)
动态规则引擎配置:
# 规则配置文件示例
validation_rules:
- field: birth_year
rule: "value > 1920 && value < 2020"
action: "set_null"
- field: product_category
rule: "value in CATEGORY_WHITELIST"
action: "reject"
- field: payment_amount
rule: "value > 0"
error_code: "INVALID_AMOUNT"
核心验证维度:
- 生命周期验证(死亡用户无购买)
- 物理可行性(24小时配送距离<1000公里)
- 枚举值白名单(商品类目树校验)
6. 非结构化数据处理(Unstructured Data)
文本清洗流程:
原始文本 → HTML标签移除 → 特殊字符过滤 → 停用词去除 → 实体识别 → 标准化存储
地址处理示例:
"北京朝阳区望京SOHO塔1 B座 12层"
→ 解析为:
{
"province": "北京",
"district": "朝阳区",
"building": "望京SOHO",
"tower": "塔1",
"block": "B座",
"floor": "12"
}
工程化实践要点
-
数据血缘追踪
- 使用Apache Atlas记录清洗过程
- 保留原始数据快照(不可变存储)
-
自动化管道设计
- 监控指标体系
- 数据 completeness > 99.5%
- 值域准确率 > 98%
- 处理延迟 < 5分钟
常见陷阱规避
-
过度清洗
- 保留行为日志时间戳原始值(时区信息勿丢失)
- 谨慎处理极值(可能是VIP用户)
-
静态规则失效
- 每周更新商品类目白名单
- 动态阈值(促销期订单金额上限自动提升)
-
业务语义丢失
- 将"火星第三大街"标记为
test_user
- 保留清洗注释字段(如
cleaning_note: "年龄逻辑冲突"
)
- 将"火星第三大街"标记为
最终输出应满足:可追溯性(Traceability)、可解释性(Interpretability)、可复用性(Reusability)三大特性,这是AI模型有效训练的前提基础。