4. 销售数据采集与清洗
销售舞弊调查的数据分析,第一步不是建模,而是把散落在ERP、CRM和财务系统中的销售数据“对齐到同一张表”。ERP记录订单、发货、开票与回款,CRM记录客户、商机、合同与销售归属,财务系统记录应收账款、收入确认与银行流水。三套系统的数据口径、时间戳和主键往往不一致,直接合并会产生大量错配。本节围绕“提取—对齐—清洗—验证”四个环节,说明如何构建一份可用于舞弊筛查的销售明细底表。
一、明确提取范围与字段口径
提取前先确定分析目标。若排查“虚假销售”,重点字段包括:订单编号、客户编码、销售员、订单日期、发货日期、开票日期、含税金额、成本、回款状态;若排查“截留货款”,则需补充银行流水号、收款账户、回款日期与核销记录。字段口径必须统一,例如“销售金额”在ERP中可能是含税订单额,在财务中是不含税收入,两者差异需在提取时标注清楚,避免后续误判。
建议按“系统—表—字段—口径”四层记录提取清单。以某制造企业示例(以下数据均为教学假设)为例:ERP销售订单表取order_id, customer_id, sales_id, order_date, amount_tax;CRM合同表取contract_id, customer_id, sign_date, owner_id;财务应收表取invoice_id, order_id, ar_amount, receive_date。三表通过order_id或customer_id+日期关联。
二、数据清洗的三个核心问题
缺失值处理。先区分“业务缺失”与“技术缺失”。销售员字段为空,可能是订单由系统自动生成,也可能是人为规避归属;回款日期为空,可能是尚未回款,也可能是回款被截留未核销。处理方式不能一律填充:对关键判断字段(如销售员、回款状态)应保留空值并标记missing_flag,对辅助字段(如客户行业)可用“未知”填充。若某字段缺失率超过30%,应回到源头核查采集逻辑,而非强行插补。
异常值识别。销售数据中的异常通常表现为:金额远超历史分位数、同一客户短时间大量下单、折扣率异常偏高、发货日期早于订单日期等。可用箱线图或3σ原则初筛,但需结合业务判断。例如某销售员当月订单金额是团队均值的8倍,若客户为新注册且无历史回款,则需重点核查是否为虚构交易。异常值不应直接删除,而应打上outlier_flag并保留原始记录,供后续调查追溯。
重复记录处理。重复可能来自系统多次导出、订单拆分合并或人为重复录入。判断重复不能只看订单号,需组合关键字段。例如order_id+customer_id+amount_tax完全相同,可判定为完全重复;若订单号不同但客户、金额、日期高度接近,可能是拆单规避审批。处理时保留最早录入记录,其余标记dup_flag并记录重复来源,避免误删真实的多笔交易。
三、清洗后的验证与底表固化
清洗完成后必须做三项验证。第一,记录总数核对:清洗后订单数应与ERP原始订单数减去已标记重复数一致,差异需逐条说明。第二,金额合计比对:清洗后销售金额合计应与财务收入确认总额在合理误差范围内(如±0.5%),若差异过大,说明存在未匹配或口径错误。第三,抽样回查:随机抽取20~30条记录,回到原始系统核对订单、合同、回款凭证是否一致,确认清洗未引入失真。
验证通过后,将底表固化为带标记字段的分析宽表,字段包括:order_id, customer_id, sales_id, order_date, amount_tax, receive_date, missing_flag, outlier_flag, dup_flag。后续的舞弊筛查规则(如“同一销售员同一客户短期内多笔大额订单”“回款日期晚于订单日期超过180天”)均基于此表运行。底表一旦固化,应记录数据提取时间、系统版本和清洗规则版本,确保调查过程可复现、可追溯。