2. 采购数据基础:主数据、ETL流程与质量清洗
采购支出分析的起点是高质量的数据。如果基础数据不可靠,后续的品类分类算法和模型优化将失去意义。本章聚焦采购主数据的核心结构、ETL(抽取-转换-加载)的标准流程,以及数据质量问题的识别与清洗策略。
2.1 采购主数据核心结构
采购主数据是描述采购业务实体的基础信息,主要包括物料、供应商和品类三大维度。三者之间的关联关系构成了支出分析的数据骨架。
| 主数据实体 | 关键字段示例 | 业务意义 |
|---|---|---|
| 物料主数据 | 物料编码、物料描述、规格型号、计量单位、物料组 | 唯一标识采购对象,决定品类归属与成本结构 |
| 供应商主数据 | 供应商编码、名称、注册地址、行业分类、信用等级 | 记录交易对手方信息,支撑供应商绩效与风险分析 |
| 品类主数据 | 品类编码、品类名称、层级路径、采购类别(直接/间接) | 建立支出分类体系,是品类管理策略的基础 |
实践要点:物料主数据与品类主数据通常通过“物料组”或“品类编码”字段关联。在ERP系统中,物料组往往是品类分类的第一级映射,但常因历史原因导致映射混乱,需要在ETL阶段进行标准化。
2.2 支出数据的ETL流程
支出数据通常来自ERP、SRM、财务系统等多个异构源。ETL流程负责将这些原始数据转化为可用于分析的结构化数据集。标准流程分为三个阶段:
- 抽取(Extract):从源系统(如SAP、Oracle EBS)中获取采购订单、发票、付款凭证等交易记录。常见方式包括数据库直连、API接口或文件导入(CSV/Excel)。
- 转换(Transform):对原始数据进行清洗、标准化、聚合与衍生计算。例如:统一货币单位、计算含税/不含税金额、将物料编码映射到品类层级、处理缺失值。
- 加载(Load):将转换后的数据写入分析数据仓库或数据集市,通常采用增量加载策略以平衡性能与时效性。
ETL核心产出:一张包含“时间、物料、供应商、品类、数量、金额、单价”等核心字段的支出事实表,以及关联的主数据维度表。
2.3 数据质量常见问题与清洗策略
采购数据在实际业务中普遍存在质量问题。根据行业经验,超过60%的采购支出分析项目在数据清洗阶段耗费了最多的时间。以下是三类最常见的问题及对应的清洗策略:
| 问题类型 | 典型表现 | 清洗策略 |
|---|---|---|
| 缺失值 | 物料描述为空、供应商编码缺失、品类未分配 | 基于规则填充(如通过物料编码反查描述)、标记为“未分类”并人工补录 |
| 重复记录 | 同一采购订单在系统中存在多条记录,金额被重复计算 | 基于订单号+行项目号+物料编码的组合键去重,保留最新时间戳的记录 |
| 异常值 | 单价为0或负数、数量为0但金额巨大、日期超出合理范围 | 设定业务阈值(如单价>0且<历史均价3倍),超出范围的数据标记为异常并隔离审查 |
常见陷阱:直接删除异常值可能导致样本偏差。建议先标记异常数据,在分析阶段评估其对整体支出的影响程度,再决定是否剔除或修正。
2.4 数据清洗流程示例
以下是一个典型的采购支出数据清洗流程,使用Python伪代码展示关键步骤:
import pandas as pd
import numpy as np
# 1. 加载原始数据
df = pd.read_csv('raw_procurement_data.csv')
# 2. 处理缺失值:品类编码为空时填充为'UNKNOWN'
df['category_code'].fillna('UNKNOWN', inplace=True)
# 3. 去重:基于采购订单号+行项目号
df.drop_duplicates(subset=['po_number', 'line_item'], keep='last', inplace=True)
# 4. 异常值清洗:单价必须在(0, 100000]范围内
df = df[(df['unit_price'] > 0) & (df['unit_price'] <= 100000)]
# 5. 标准化:统一日期格式
df['transaction_date'] = pd.to_datetime(df['transaction_date'], errors='coerce')
# 6. 输出清洗后的数据
df.to_csv('cleaned_procurement_data.csv', index=False)
清洗效果验证:清洗后的数据应满足以下条件:
• 无重复采购订单行项目
• 所有物料均有品类归属(或明确标记为“未分类”)
• 单价、数量、金额均在合理业务范围内
• 日期字段可转换为标准时间格式,无空值或非法值
• 无重复采购订单行项目
• 所有物料均有品类归属(或明确标记为“未分类”)
• 单价、数量、金额均在合理业务范围内
• 日期字段可转换为标准时间格式,无空值或非法值
通过以上主数据梳理、ETL流程规范以及数据质量清洗策略,可以为后续的品类分类算法选型与模型优化提供坚实、可靠的数据基础。下一阶段将基于清洗后的支出数据,进行特征工程与品类分类模型的构建。