4. 数据收集与预处理基础
数学建模的起点不是公式,而是数据。模型能走多远,很大程度上取决于输入数据是否可靠、口径是否一致、噪声是否被合理处理。本节围绕“数据从哪里来、怎样抽、怎样洗、缺失与异常怎么办”展开,并用一个简单数据集完成一次可复现的预处理实战。
一、数据来源与抽样:先明确口径,再决定取数方式
建模数据通常来自三类来源:观测/实验数据(传感器、问卷、实验记录)、业务系统数据(数据库、日志、交易流水)、公开数据(统计年鉴、开放数据平台、竞赛附件)。无论哪一类,第一步都是写清“字段口径”:单位、时间范围、统计粒度、缺失标记(如 -1、999、空串、NULL 是否都表示缺失)。口径不清,后续清洗会变成猜测。
当总体规模大或获取成本高时,需要抽样。常见方法有:简单随机抽样(每个个体等概率,适合总体较均匀)、分层抽样(按类别分层后层内随机,适合类别差异明显)、系统抽样(按固定间隔抽取,适合有序名单)、整群抽样(以群为单位抽取,适合地理分散场景)。抽样要避免“方便抽样”带来的选择偏差,例如只统计工作日白天的客流,就不能代表全周客流。
二、数据清洗:一致性、重复与类型转换
清洗的目标是让每条记录“可比较、可计算”。典型操作包括:去除首尾空格与不可见字符;统一单位(如把“千克”和“斤”统一为千克);统一类别写法(“男/男性/M”统一为“男”);识别并删除完全重复记录;把文本型数字转为数值型;对日期做格式统一。清洗不是“改数据”,而是修正录入与口径问题,所有修改都应留痕,便于复核。
三、缺失值与异常值:先判断机制,再选择处理
缺失值处理要先看缺失比例与缺失机制。若某字段缺失比例很低(如低于 5%)且近似随机缺失,可考虑删除含缺失的记录;若缺失比例较高或缺失与类别相关,删除会引入偏差,应优先考虑填补。常用填补方式:数值型用均值/中位数(中位数更抗异常值)、分类型用众数、按分组均值填补(如按地区填补收入),或保留“缺失”作为一个独立类别。是否填补、如何填补,都要在报告中说明。
异常值不等于错误值。判断异常值常用两种视角:统计视角用箱线图法则,即低于 Q1−1.5×IQR 或高于 Q3+1.5×IQR 视为可疑;业务视角看是否违反常识(如年龄为 200、单价为负)。处理方式包括:核实后修正、删除、截尾(Winsorize,把极端值压到分位点)、或保留但使用稳健模型。切忌不核实就批量删除,因为异常值有时正是建模最关心的对象(如欺诈、故障)。
四、实战:用一个小数据集走完预处理
假设我们收集了 8 名学生的“每周学习时长(小时)”与“成绩”,原始记录如下(示例数据,用于演示处理过程):
编号 学习时长 成绩
S1 10 78
S2 12 85
S3 空 90
S4 8 70
S5 15 88
S6 200 95
S7 11 空
S8 9 72
第一步,识别缺失。学习时长缺失 1 条(S3),成绩缺失 1 条(S7),缺失比例均为 12.5%。由于样本量小,直接删除会损失 25% 的信息,因此选择填补:学习时长用中位数,成绩用中位数。
第二步,计算中位数。学习时长有效值排序为 8, 9, 10, 11, 12, 15, 200,中位数为 11;成绩有效值排序为 70, 72, 78, 85, 88, 90, 95,中位数为 85。于是 S3 学习时长填 11,S7 成绩填 85。
第三步,判断异常值。对学习时长计算四分位数:Q1=9.5,Q3=13.5,IQR=4,上界为 13.5+1.5×4=19.5。S6 的 200 明显超过上界,属于可疑异常值。核实后发现是录入错误,实际应为 20 小时,修正为 20 后仍略高于上界,但结合“每周学习 20 小时”在现实中合理,故保留并标注。若无法核实,则可采用截尾,把 200 压到上界 19.5。
第四步,复核。检查填补后是否出现逻辑矛盾(如成绩超过满分)、单位是否统一、是否有重复编号。最终得到一份字段一致、缺失已处理、异常已标注的数据集,才可进入描述统计与建模阶段。
把上述过程固化为习惯:先定口径,再抽样;先留原始副本,再做清洗;缺失看机制,异常看业务。数据预处理做扎实,后续的模型假设、参数估计与结论解释才有可靠基础。