售后服务
我们是专业的

Day 36晚上-1:数据质量评估 - 给你的数据做一次全面体检

一场代价500万的数据灾难

2023年5月,某造车新势力的COO在季度运营会上拍案:“根据数据显示,华南区的客户满意度持续低于全国平均,立即启动500万预算的体验提升项目!”

三个月后,项目组准备验收时,有人发现了一个细思极恐的真相:

华南区的数据根本就是错的

原因非常荒诞:

  • 华南区的满意度调查系统在2月份出过一次Bug,导致5分制评价被错误记录为10分制
  • 有人发现后修复了系统,但没有清洗历史错误数据
  • 2-4月的数据里,35%的记录是错的,把平均分拉低了40%
  • 而所有的分析报告都基于这些错误数据

真相是:华南区的客户满意度其实高于全国平均,根本不需要改善。

500万预算打了水漂,项目负责人引咎辞职,COO被调离岗位


什么是数据质量评估?

数据质量评估(Data Quality Assessment)= 用系统化的方法检查数据是否符合业务要求

就像体检能发现身体的隐患,数据质量评估能发现数据的病灶

不做评估的后果

就像一个人从不体检,平时觉得没什么问题,等到发现症状时已经晚期了。


数据质量的六大维度深度详解

根据国际标准ISO 8000(信息和数据质量国际标准),数据质量有六大维度

维度1:完整性(Completeness)- 该有的都在吗?

定义:必填字段是否都有值,没有异常缺失

计算公式

完整性 = (非空值记录数 ÷ 总记录数) × 100%

真实灾难案例1:技师工号缺失引发的绩效风波

2023年Q1,某门店的维修工单表中,18%的工单缺失“技师工号”字段

到了绩效考核时:

  • 技师A实际完成50个工单,但系统只能统计到41个(少9个没记录工号)
  • 技师B实际完成35个工单,系统统计到35个(正好都有记录)

结果:技师A应该拿第一,但因为数据缺失,系统判定技师B第一。

技师A大闹一场,威胁辞职,最后门店花了2周时间人工核对、补录数据,整个区域的绩效考核延迟发放

检测SQL示例

-- 检测工单表中技师工号的完整性
SELECT 
    '技师工号' AS 字段名,
    COUNT(*) AS 总记录数,
    SUM(CASE WHEN technician_id IS NULL OR technician_id = '' THEN 1 ELSE 0 END) AS 缺失数,
    ROUND(SUM(CASE WHEN technician_id IS NOT NULL AND technician_id != '' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS 完整性百分比
FROM work_orders
WHERE complete_time >= '2024-01-01'
  AND complete_time < '2024-04-01';

完整性的合理阈值

字段重要性 完整性阈值 示例字段
核心关键字段 100% 工单号、VIN码、客户ID
重要业务字段 ≥98% 技师工号、服务顾问、故障代码
辅助信息字段 ≥95% 客户备注、特殊说明
可选字段 ≥90% 推荐人、优惠券编码

维度2:准确性(Accuracy)- 数据和现实一致吗?

定义:数据值是否反映了真实世界的情况

真实灾难案例2:90分钟的等待被记录成30分钟

某门店月度总结报告显示:“平均等待时长30分钟”

但客户投诉不断:“每次都要等一个多小时!”

运营部派人实地暗访,用秒表记录,发现实际平均等待时长是87分钟

原因分析

系统记录的是:

等待时长 = 服务顾问开始接待时间 - 客户预约时间

但客户感知的是:

真实等待 = 服务顾问开始接待时间 - 客户实际到店时间

问题在于:

  • 客户预约的是10:00
  • 实际到店是10:15(堵车了15分钟)
  • 开始接待是10:45

系统计算:10:45 - 10:00 = 45分钟

真实情况:10:45 - 10:15 = 30分钟的真实等待 + 15分钟堵车 = 客户主观感受45分钟

但门店高峰期经常排不上,客户真实等待可能是60-90分钟,但系统只显示30-45分钟。

检测方法

  1. 数据核对:抽取50-100条记录,与原始记录(视频、纸质档案)核对
  2. 实地验证:现场观察 + 专业测量设备(如秒表、录像)
  3. 逻辑校验:检查是否符合业务逻辑
-- 检测等待时长的合理性
SELECT 
    work_order_no AS 工单号,
    customer_name AS 客户名,
    appointment_time AS 预约时间,
    arrival_time AS 到店时间,
    reception_start_time AS 开始接待时间,
    TIMESTAMPDIFF(MINUTE, arrival_time, reception_start_time) AS 真实等待分钟数
FROM work_orders
WHERE arrival_time IS NOT NULL 
  AND reception_start_time IS NOT NULL
  AND TIMESTAMPDIFF(MINUTE, arrival_time, reception_start_time) > 120  -- 标记超过2小时的异常情况
ORDER BY 真实等待分钟数 DESC
LIMIT 50;

维度3:一致性(Consistency)- 不同来源的数据对得上吗?

定义:同一业务实体在不同系统中的数据是否一致

真实灾难案例3:250台车去哪了?

某车企的DMS系统显示某门店月维修台次1,200台

但财务系统显示同一门店同期开票1,450台

差了250台!

财务部怀疑门店账务有问题,启动了审计。门店经理叫苦不连,花了3天时间整理证据。

最终发现原因

系统 统计口径 数据来源
DMS 只记录已完工的工单 工单表 WHERE status='已完工'
财务系统 记录所有开票的工单 开票表(包括预付款、部分结算)

250台的差异包括:

  • 跨月工单:上月开始、本月完工(DMS计入本月,财务计入上月)
  • 预付款工单:客户先付款后等配件(财务已开票,DMS未完工)
  • 取消工单:客户放弃维修但已开检查费发票

检测SQL示例

-- 对比DMS和财务系统的数据一致性
WITH dms_count AS (
    SELECT 
        store_id,
        DATE_FORMAT(complete_time, '%Y-%m') AS month,
        COUNT(*) AS dms_order_count
    FROM [dms.work](http://dms.work)_orders
    WHERE status = '已完工'
    GROUP BY store_id, month
),
finance_count AS (
    SELECT 
        store_id,
        DATE_FORMAT(invoice_date, '%Y-%m') AS month,
        COUNT(*) AS finance_order_count
    FROM finance.invoices
    WHERE invoice_type = '维修服务'
    GROUP BY store_id, month
)
SELECT 
    COALESCE([d.store](http://d.store)_id, [f.store](http://f.store)_id) AS 门店ID,
    COALESCE(d.month, f.month) AS 月份,
    COALESCE(d.dms_order_count, 0) AS DMS工单数,
    COALESCE([f.finance](http://f.finance)_order_count, 0) AS 财务开票数,
    ABS(COALESCE(d.dms_order_count, 0) - COALESCE([f.finance](http://f.finance)_order_count, 0)) AS 差异数,
    ROUND(ABS(COALESCE(d.dms_order_count, 0) - COALESCE([f.finance](http://f.finance)_order_count, 0)) * 100.0 / 
          GREATEST(COALESCE(d.dms_order_count, 1), COALESCE([f.finance](http://f.finance)_order_count, 1)), 2) AS 差异率
FROM dms_count d
FULL OUTER JOIN finance_count f 
    ON [d.store](http://d.store)_id = [f.store](http://f.store)_id AND d.month = f.month
WHERE ABS(COALESCE(d.dms_order_count, 0) - COALESCE([f.finance](http://f.finance)_order_count, 0)) > 50  -- 标记差异大于50的情况
ORDER BY 差异数 DESC;

一致性的合理阈值

  • 核心业务指标:差异率 < 5%
  • 一般业务指标:差异率 < 10%
  • 辅助指标:差异率 < 15%

今日实战练习

请在你的工作中尝试:

  1. 选择一个关键业务表(如工单表),检查其完整性
    • 标记出所有必填字段
    • 计算每个字段的完整性
    • 找出完整性<95%的字段
  2. 选择一个核心指标(如客户等待时长),验证其准确性
    • 现场观察10个真实样本
    • 与系统数据对比
    • 计算差异率
  3. 选择两个相关系统,检查其一致性
    • 明确各自的统计口径
    • 对比同一时间段的数据
    • 分析差异原因

下一页预告:我们将继续深入其他三个维度(及时性、有效性、唯一性),并学习如何构建一套完整的数据质量评估体系。

未经允许不得转载:似水流年 » Day 36晚上-1:数据质量评估 - 给你的数据做一次全面体检