【数据质量校验简介】

文章目录


前言

在机器学习项目中,模型效果往往并不取决于算法本身,而是高度依赖数据质量。现实中的数据通常存在缺失值、异常值、不一致格式等问题,如果不进行严格校验,模型训练结果会出现偏差甚至完全失效。


一、什么是数据质量校验?

数据质量校验(Data Quality Validation)是指在数据进入模型训练之前,对数据的完整性、准确性、一致性、合理性等进行检测和验证的过程。

其核心目标是:

  • 提前发现数据问题
  • 避免"垃圾进,垃圾出"
  • 提高模型稳定性与可信度

二、常见数据质量问题

1. 缺失值

表现形式:

  • NaN
  • None
  • 空字符串

影响:

  • 模型无法训练(如线性回归)
  • 统计偏差

2. 异常值

表现形式:

  • 极端数值(如年龄=999)
  • 不合理范围数据

影响:

  • 拉偏模型参数
  • 降低泛化能力

3. 数据类型错误

示例:

  • 数值列存储为字符串
  • 日期格式不统一

4. 重复数据

影响:

  • 模型偏向某些样本
  • 训练数据分布失真

5. 数据分布异常

训练集 vs 测试集分布不同:

  • 训练集:年龄集中在20-30
  • 测试集:年龄集中在40-50

三、数据质量校验的核心维度

1. 完整性

检查是否存在缺失数据:

python 复制代码
import pandas as pd

df = pd.read_csv("data.csv")

# 缺失值统计
print(df.isnull().sum())

2. 唯一性

检查是否存在重复数据:

python 复制代码
# 检查重复行
duplicates = df.duplicated().sum()
print("重复数据数量:", duplicates)

# 删除重复
df = df.drop_duplicates()

3. 一致性

例如:性别字段必须为 Male/Female

python 复制代码
# 检查非法值
invalid_gender = df[~df['gender'].isin(['Male', 'Female'])]
print(invalid_gender)

4. 合法性

数值范围校验:

python 复制代码
# 年龄必须在0-120之间
invalid_age = df[(df['age'] < 0) | (df['age'] > 120)]
print(invalid_age)

5. 准确性

通常需要业务规则或外部数据验证,例如:

  • 地址是否真实
  • 邮箱格式是否正确
python 复制代码
import re

def is_valid_email(email):
    pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'
    return re.match(pattern, email)

df['email_valid'] = df['email'].apply(is_valid_email)

四、构建数据质量校验工具

1. 项目目标

实现一个通用数据校验工具,支持:

  • 缺失值检测
  • 类型校验
  • 范围校验
  • 唯一性检查

2. 实现代码

python 复制代码
import pandas as pd

class DataValidator:

    def __init__(self, df):
        self.df = df

    def check_missing(self):
        print("=== 缺失值检测 ===")
        print(self.df.isnull().sum())

    def check_duplicates(self):
        print("=== 重复值检测 ===")
        print("重复行数:", self.df.duplicated().sum())

    def check_range(self, column, min_val, max_val):
        print(f"=== {column} 范围检测 ===")
        invalid = self.df[(self.df[column] < min_val) | (self.df[column] > max_val)]
        print(invalid)

    def check_type(self, column, dtype):
        print(f"=== {column} 类型检测 ===")
        print(self.df[column].dtype)
        if self.df[column].dtype != dtype:
            print("类型不匹配!")

    def run_all_checks(self):
        self.check_missing()
        self.check_duplicates()

3. 示例

python 复制代码
df = pd.read_csv("data.csv")

validator = DataValidator(df)

validator.run_all_checks()
validator.check_range("age", 0, 120)
validator.check_type("age", "int64")

4. 设计思路说明

  • 面向对象封装:便于扩展
  • 单一职责:每个方法负责一种校验
  • 可配置化:后续可加入规则配置文件(如JSON/YAML)

五、自动化数据校验框架

在工业级项目中,通常不会手写校验逻辑,而是使用专业工具,例如:

1. Great Expectations

特点:

  • 声明式数据校验
  • 自动生成报告
  • 支持数据管道集成

示例:

python 复制代码
import great_expectations as ge

df = ge.read_csv("data.csv")

df.expect_column_values_to_not_be_null("age")
df.expect_column_values_to_be_between("age", 0, 120)

df.save_expectation_suite()

2. Pandera

类似于"DataFrame的类型系统":

python 复制代码
import pandera as pa

schema = pa.DataFrameSchema({
    "age": pa.Column(int, checks=pa.Check.in_range(0, 120)),
})

schema.validate(df)
相关推荐
火山引擎开发者社区2 小时前
Doubao-Seed-Evolving升级:1M上下文来了!
人工智能
曾响铃4 小时前
千台量产前夜,具身智能竞争已沉到底层基建
人工智能
血色橄榄枝5 小时前
基于用户注册信息的关键词检测挑战赛「Datawhale AI 夏令营」
人工智能·算法·机器学习
A hao5 小时前
高对比度在XR虚拟背景中的作用
大数据·图像处理·人工智能·xr·广告
小二·5 小时前
2026年AI Agent框架横评:OpenClaw vs LangGraph vs CrewAI vs Superpowers,选型指南
人工智能
tyqtyq225 小时前
旅行打包清单 App — HarmonyOS AI 应用开发技术博客
人工智能·学习·华为·生活·harmonyos
guo_xiao_xiao_5 小时前
YOLOv11道路桥梁裂缝与坑洼目标检测数据集
人工智能·yolo·目标检测
邵宇然5 小时前
Rust Unsafe 代码规范:不安全块要小到能被审查
人工智能
Haoxuekeji6 小时前
山东 AI 智能批改校园电子阅卷企业
大数据·人工智能·深度学习·安全·ai