【数据质量校验简介】

文章目录


前言

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


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

数据质量校验(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 分钟前
opencv 图片合并
人工智能·opencv·计算机视觉
冬奇Lab12 分钟前
开源项目第180期:Omnigent — Databricks 出品的 AI Agent 元编排层,让 Claude Code、Codex、Cursor 统一管控
人工智能·开源·agent
Dxy123931021613 分钟前
python 中的 APScheduler 使用详解
开发语言·python
kattgatt28 分钟前
卡特加特玄武大模型合规备案,商用更安心
人工智能·卡特加特
qq_3482318531 分钟前
如何使用 Codex
人工智能
IT_陈寒33 分钟前
Java并行流把我坑惨了:原来不是线程安全的!
前端·人工智能·后端
石逸凡38 分钟前
AI驱动的金融IT架构转型升级
人工智能·金融·架构
染指111041 分钟前
76.高级RAG-后检索器(时间排序)
人工智能·python·llama_index·llamaindex
小雷信息医学1 小时前
5 篇老年队列套路拆解第 3 篇:单库 + U 型新指标 + Cox + RCS 拐点
人工智能·机器学习
少冰1 小时前
从数据清洗到 Docker 部署:我在本地训练了一个中医领域 Qwen3 模型
人工智能