【数据质量校验简介】

文章目录


前言

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


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

数据质量校验(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)
相关推荐
tedcloud12311 小时前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
曦月逸霜13 小时前
啥是RAG 它能干什么?
人工智能·python·机器学习
AI医影跨模态组学13 小时前
Lancet Digit Health(IF=24.1)广东省人民医院刘再毅&amp;南方医科大学南方医院梁莉等团队:基于可解释深度学习模型预测胶质瘤分子改变
人工智能·深度学习·论文·医学·医学影像·影像组学
应用市场13 小时前
AI 编程助手三强争霸(2026 版):Claude、Gemini、GPT 各自擅长什么?
人工智能·gpt
CSND74014 小时前
YOLO resume断点续训(不能用官方的权重,是自己训练一半生成的last.pt)
深度学习·yolo·机器学习
2301_7693406714 小时前
如何在 Vuetify 中可靠捕获 Chip 关闭事件(包括键盘触发).txt
jvm·数据库·python
AC赳赳老秦14 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
脑极体14 小时前
从Token消耗到DAA增长,AI价值标尺正在重构
人工智能·重构
csdn小瓯14 小时前
LangGraph自适应工作流路由机制:从关键词匹配到智能决策的完整实现
人工智能·fastapi·langgraph
QYR-分析14 小时前
高功率飞秒激光器行业发展现状、市场机遇及未来趋势分析
大数据·人工智能