数据源分析与评估:摸清家底才能动手

数据仓库建模,说白了就是个「数据搬运工」的活儿。但搬运之前,你得先搞清楚——搬的是什么?从哪搬?搬来的东西能不能用?

我个人习惯,在开始任何建模工作之前,先花一周时间做数据源调研。这一步省了,后面全是坑。我记得有个项目,业务方信誓旦旦说CRM数据很干净,结果一接入发现客户ID居然有三种编码规则……嗯,那感觉就像你打开冰箱发现鸡蛋全是坏的。

内部数据源:你的核心资产

内部数据源,就是公司自己产生的数据。通常我们关注三大类:CRM、ERP、日志。这三兄弟各有脾气,得分开伺候。

CRM系统:客户数据的源头

CRM存的是客户信息、销售线索、合同、服务记录。这东西看起来简单,但坑最多。

  • 客户主数据:姓名、电话、邮箱、公司。我遇到过同一个客户在CRM里出现三次,因为销售录入时手抖多打了个空格。
  • 销售流程数据:线索状态、商机阶段、成交金额。注意状态字段,很多CRM用中文枚举值,比如「已成交」「已关闭」,但不同团队可能写「成交」「关闭」——这就是不一致。
  • 时间戳:创建时间、更新时间、最后联系时间。时区问题要小心,尤其是跨国业务。
我曾经踩过的坑: CRM的「删除标记」字段。很多系统不会物理删除数据,而是用is_deleted=1标记。如果你没过滤,分析结果会多出一堆幽灵客户。

ERP系统:业务运营的骨架

ERP管的是订单、库存、财务、供应链。这玩意儿数据量大,关系复杂,但质量通常比CRM好——毕竟跟钱挂钩,没人敢乱填。

数据域 典型表 常见质量问题
订单 订单头、订单行 订单状态缺失、金额精度不一致
库存 库存快照、出入库记录 库存数量为负数(超卖)
财务 凭证、科目余额 借贷不平、科目编码变更
供应链 采购单、供应商 供应商编码重复、采购单价为空

ERP的数据模型通常很规范,但要注意——ERP的数据库表结构可能跟业务语义对不上。比如「订单状态」在数据库里存的是数字代码,你得找业务方要映射表。

日志数据:行为轨迹的宝藏

日志包括服务器日志、应用日志、用户行为日志。这东西量最大,价值也最高——但也是最脏的。

  • Web日志:IP、URL、User-Agent、响应时间。注意IP可能是代理IP,User-Agent可能被伪造。
  • 应用日志:接口调用、错误堆栈、业务事件。我见过一个系统把敏感信息(比如密码)直接打日志里——这不仅是质量问题,还是安全问题。
  • 用户行为日志:点击、浏览、搜索、下单。埋点不规范的话,事件名称可能五花八门,比如「click_buy」和「buy_click」其实是同一个动作。
我的建议: 日志数据一定要做schema on read。别急着建模,先存成原始格式,等分析需求明确了再解析。否则你可能会因为字段定义改来改去而崩溃。

外部数据源:借力打力

光靠内部数据,很多时候不够用。比如你要做客户画像,得补充征信数据;要做竞品分析,得爬取公开信息。外部数据源主要分两类:第三方API和爬虫。

第三方API:稳定但有限

调用第三方API获取数据,比如天气、地理位置、企业工商信息、社交媒体数据。好处是数据质量有保障,坏处是——贵,而且有调用限制。

  • 认证方式:、OAuth、。注意密钥管理,别硬编码在代码里。
  • 限流策略:每秒多少次、每天多少万次。超限会被封,我有个项目就因为没做限流,一天把一个月配额用完了。
  • 数据格式:JSON、XML、Protobuf。JSON最常见,但嵌套层级可能很深,解析时要小心。
  • 响应延迟:API调用通常几十到几百毫秒。批量拉取时,建议用异步或并发,但别把对方服务器打挂了。
关键点: 第三方API的数据结构可能会变。我遇到过某天气API突然把字段名从「temp」改成「temperature」,导致下游ETL全挂。一定要做字段映射校验,并监控数据格式变化。

爬虫数据:灵活但麻烦

爬虫适合抓取公开网页数据,比如竞品价格、行业报告、招聘信息。但这事儿有法律风险,得先确认目标网站是否允许爬取。

  • 反爬机制:IP封禁、验证码、动态渲染。我建议用代理池+随机User-Agent,但别太暴力。
  • 数据解析:HTML解析(BeautifulSoup、XPath)、JSON解析。网页结构经常变,爬虫代码得定期维护。
  • 数据去重:爬虫可能重复抓取同一页面,需要做URL去重或内容哈希去重。
  • 增量更新:全量爬取太慢,建议只爬新增或变更的内容。可以用时间戳或ETag判断。
我曾经犯过的错: 爬虫数据没做版本管理。某次网站改版,爬虫抓回来的数据字段对不上,但历史数据已经入库了。后来我养成了习惯——每次爬虫代码变更,都打一个版本标签,并记录抓取时间。

数据质量评估:别让垃圾数据毁了你的模型

数据源找好了,接下来就是评估质量。我一般从三个维度入手:完整性、一致性、准确性。这三个词听起来很学术,但说白了就是——数据全不全?格式统一不统一?值对不对?

完整性:有没有缺胳膊少腿

完整性检查的是数据有没有缺失。比如客户表里,手机号字段有20%是空的——这就不完整。

  • 字段级完整性:每个字段的空值率。我一般设定阈值,比如手机号空值率超过5%就要预警。
  • 记录级完整性:一条记录的关键字段是否都非空。比如订单记录,订单ID、客户ID、金额这三个字段必须都有值。
  • 表级完整性:表与表之间的外键关系是否完整。比如订单表的客户ID,在客户表里找不到对应记录——这就是引用完整性缺失。
我的经验: 完整性检查最好自动化。写个脚本每天跑一遍,把缺失率超过阈值的表列出来,发给数据负责人。别等人来问,主动出击。

一致性:别搞「一个客户多个名字」

一致性指的是同一数据在不同地方是否保持一致。这是数据仓库建模最头疼的问题之一。

一致性类型 问题示例 解决方案
命名一致性 CRM叫「客户」,ERP叫「顾客」 建立数据字典,统一术语
编码一致性 CRM用「M/F」,ERP用「1/0」表示性别 做编码映射表
单位一致性 订单金额有的用元,有的用分 统一单位,或加单位字段
时间一致性 有的用UTC,有的用北京时间 统一转成UTC+0存储

你想想看,如果客户ID在CRM和ERP里对不上,你做的客户360视图就是笑话。我建议在数据接入阶段就做一致性校验,别等到建模了才发现。

准确性:数据到底对不对

准确性是最难评估的,因为你需要一个「标准答案」来对比。比如订单金额,你从ERP拿到的数据,跟财务系统对一下,看是否一致。

  • 业务规则校验:比如订单金额不能为负数,库存数量不能超过仓库容量。
  • 统计分布校验:看数据的均值、中位数、标准差是否在合理范围内。比如某天订单量突然暴涨100倍——可能是数据重复,也可能是双十一。
  • 交叉验证:用不同数据源的数据互相验证。比如CRM的客户数跟ERP的客户数对比,差异超过5%就要查原因。
核心原则: 数据质量不是一次性的工作。你得建立持续监控机制,每次数据接入都跑一遍质量检查。我习惯把质量检查结果写进元数据表,这样谁都能看到数据「健康度」。

数据源评估框架:一张图说清楚

说了这么多,我画个图帮你理清思路。数据源分析与评估,核心就是三个步骤:识别数据源、评估质量、记录元数据。

数据源分析与评估框架 数据源分析与评估框架 内部数据源 外部数据源 数据质量评估 CRM ERP 日志 第三方API 爬虫 完整性 一致性 准确性 数据源评估报告 + 元数据 说明: 数据源评估不是一次性工作。每次接入新数据源,或现有数据源发生变更,都需要重新评估。建议建立数据源目录,记录每个数据源的接入时间、质量评分、负责人。

这张图展示了我做数据源评估的完整流程。从左到右,先识别数据源类型,再深入每个数据源的具体内容,最后做质量评估,输出评估报告和元数据。每一步都不能跳过。