AI算法工程师如何进行数据预处理?这5个步骤让你的数据更优质
在AI模型开发与测试的全流程中数据质量直接决定了最终模型的效果上限——哪怕是最先进的大语言模型用劣质数据训练出来也只能输出劣质结果。对于软件测试从业者来说不管是参与AI模型的功能测试、性能测试还是负责测试数据集的构建与验证掌握专业的数据预处理流程不仅能帮我们更快定位模型缺陷还能提升测试数据集的质量让测试结果更具可信度。不同于业务研发工程师只关注最终模型输出软件测试需要对数据全链路的质量负责从原始数据采集到输入模型前的每一步处理任何一个环节的误差都可能导致模型结果偏差最终反映为测试不通过或线上故障。笔者接触过不少从事AI测试的朋友经常会遇到“模型推理结果波动大”“相同输入得到不同输出”“测试用例覆盖率上不去”这类问题追根溯源大多是数据预处理环节的质量问题没有控制好。接下来我们就从专业角度拆解数据预处理的5个核心步骤帮你打造更优质的AI训练与测试数据。步骤一数据清洗——剔除无效脏数据筑牢数据质量底座原始数据从业务系统、日志埋点、公开数据集或第三方平台采集过来后第一个要处理的问题就是“脏数据”。所谓脏数据对测试场景来说主要包括四类缺失值、异常值、重复值和噪声数据这四类问题也是测试过程中最容易导致模型误判的根源。缺失值是原始数据中最常见的问题比如用户行为日志中缺失设备ID、埋点上报缺失用户点击时长、图像数据中部分标注文件丢失等等。对测试从业者来说不能简单地把所有缺失数据都删掉——如果缺失率超过30%对应的特征可以直接剔除避免干扰模型训练如果缺失率低于10%对于数值型特征可以用中位数、平均数或模型预测值填充对于分类型特征可以用众数填充也可以单独标记为“未知”类别保留特征信息而如果是测试数据集我们还可以根据缺失情况设计异常用例专门测试模型对缺失输入的鲁棒性。异常值也叫离群点指的是偏离正常分布的数据点比如用户年龄出现200岁、商品销量出现负数值、图像像素值超出0-255的范围等等。异常值的处理要分情况如果是采集过程中出现的错误比如埋点上报出错、标注人员输入失误可以直接删除如果是业务中确实存在的极端情况比如大促期间商品单日销量远超日常那就不能随便删除反而应该单独提取出来作为边缘测试用例验证模型在极端场景下的表现。这里推荐测试从业者使用3σ原则或箱线图法来自动识别异常值配合人工抽样验证既能提升效率又能避免漏掉关键异常。重复值和噪声数据处理起来相对简单重复值不管是训练集还是测试集直接去重即可避免重复数据导致模型过拟合噪声数据是指数据采集过程中引入的随机干扰比如文本数据中的乱码、图像中的高斯噪点、传感器数据中的信号波动这类数据可以通过平滑处理比如滑动窗口平均过滤对于测试场景来说也可以保留部分带噪声的数据用来测试模型的抗干扰能力。步骤二数据集成——整合多源异构数据统一数据格式规范AI模型通常需要整合来自多个数据源的数据比如推荐模型需要整合用户行为数据、用户属性数据、商品内容数据这就需要进行数据集成。对软件测试来说数据集成环节最核心的工作是统一数据格式和消除数据冗余避免因为格式不统一导致测试过程中出现大量报错。首先是模式集成也就是把不同数据源的同名异义、异名同义数据统一起来。比如业务库中把用户唯一标识叫“user_id”日志库中叫“uid”第三方平台叫“open_id”本质都是同一个含义需要统一命名规范反过来两个数据源都叫“amount”一个是商品成交价一个是商品原价这就是同名异义需要拆分并重新命名。对于测试来说这个环节如果没有处理好很容易出现“数据对齐错误”导致模型训练出来结果完全不对测试人员定位问题的时候也很难发现根源所以我们在做测试数据集成的时候必须对每一个字段做元数据验证确保字段含义、类型、范围完全统一。然后是数据实体匹配不同数据源中同一个实体可能有不同的表述比如商品ID供应链系统用的是六位编码电商前台系统用的是八位带前缀编码需要建立映射关系把同一个实体匹配起来。在AI测试中我们经常会遇到训练数据和测试数据实体不匹配的问题比如训练集中的商品ID都是六位编码测试集用了八位编码导致模型推理直接出错这类问题其实在数据集成环节做匹配验证就能完全避免。最后是冗余数据消除多源数据整合之后很容易出现重复特征比如已经有了“用户过去7天点击次数”又整合了“用户过去一周点击次数”两个特征完全一样保留一个就够了。对于测试来说多余的冗余特征不仅会增加数据处理的时间还会导致测试用例重复降低测试效率所以集成之后一定要做相关性分析删除高度相关的冗余特征。步骤三数据转换——统一数据尺度适配模型输入要求原始数据经过清洗和集成之后还需要做转换处理才能适配AI模型的输入要求这一步也是测试最容易踩坑的环节。不同模型对输入数据的格式、范围要求完全不同如果转换不对哪怕数据质量再高模型也训不好测试也没法通过。常见的数据转换包括三个部分特征编码、特征归一化、离散化处理。特征编码主要针对非数值型数据AI模型只能处理数值所以文本、类别、日期这类数据都需要编码。比如分类型特征“用户性别”有男、女、未知三个取值常用的编码方式有独热编码One-Hot和标签编码Label Encoding如果类别数量少用独热编码更合适如果类别数量多比如上百个省份用标签编码更省空间。对于软件测试来说我们要特别注意编码范围的一致性训练集用的编码规则测试集必须完全一致如果训练集把“男”编码为1“女”编码为2测试集不能反过来否则模型输出肯定出错。我之前在做CV模型测试的时候就遇到过类似问题标注团队换了编码规则导致测试集的标注编码和训练集不一致整整花了两天才定位到问题所以编码规则必须留档测试数据转换的时候必须严格对齐。特征归一化是针对数值型特征的处理不同特征的数值范围差异很大比如用户年龄范围是0-100用户累计消费范围是0-1000000如果直接把原始数据输入模型数值大的特征会对模型产生更大的影响掩盖小数值特征的作用。常用的归一化方法有两种Min-Max归一化把所有特征压缩到[0,1]区间Z-Score归一化把特征转换为均值为0、方差为1的标准正态分布。对测试来说这里有一个非常容易踩的坑归一化的参数比如均值、方差、最大最小值必须用训练集的参数不能用测试集的很多新手做测试数据处理的时候直接对测试集单独做归一化导致数据分布和训练集不一致测试结果完全不准这个问题一定要特别注意。离散化处理主要针对连续数值特征对于逻辑回归、决策树这类模型把连续特征离散化之后可以提升模型的鲁棒性还能降低过拟合风险。常见的离散化方法有等宽分箱、等频分箱、基于卡方检验的分箱。对测试来说离散化之后我们可以更容易地划分测试等价类比如把用户年龄分为少年、青年、中年、老年四个区间每个区间设计对应的测试用例大大提升测试覆盖率。步骤四数据降维——减少特征维度降低测试复杂度经过前面三个步骤处理之后我们往往会得到几十上百甚至上千个特征高维度特征不仅会增加模型训练的时间还会导致“维度灾难”提升测试的复杂度。这时候就需要做数据降维在保留关键信息的前提下减少特征数量同时还能去除特征之间的相关性提升数据质量。数据降维分为特征选择和特征抽取两类对于测试从业者来说特征选择更容易理解和应用。特征选择就是从原始特征集合中选出对模型输出影响最大的子集去掉无关和冗余的特征。常用的特征选择方法有方差选择法去掉方差很小、几乎没有变化的特征、卡方检验选择和目标变量相关性最高的特征、互信息法、递归特征消除法。特征选择之后特征数量减少我们在设计测试用例的时候只需要重点覆盖选中的关键特征就能大大降低测试的工作量同时提升测试的有效性。特征抽取是通过数学变换把高维特征映射到低维空间最常用的就是主成分分析PCA通过正交变换把相关的特征转换成不相关的主成分保留大部分信息的同时降低维度。另外还有线性判别分析LDA适合有标签数据的降维。对于测试来说降维之后数据量变小处理速度更快我们在做模型回归测试的时候能大大缩短测试周期。不过这里要注意降维变换的参数同样要从训练集学习测试集必须使用训练集得到的变换矩阵不能重新训练否则同样会出现数据分布不一致的问题。步骤五数据采样——平衡数据分布提升测试代表性很多实际业务中的AI数据集都存在数据不平衡的问题比如 fraud检测模型中正常交易占99%欺诈交易只占1%医疗影像诊断中正常样本占绝大多数病变样本非常少测试场景中核心流程的样本多边缘流程的样本少。数据不平衡会导致模型偏好多数类对少数类的预测效果很差测试的时候也会因为少数类样本太少无法充分验证模型效果所以最后一步必须做数据采样平衡数据分布。常用的采样方法分为过采样和欠采样两种过采样是对少数类样本进行重复采样或者生成新的少数类样本最经典的就是SMOTE算法通过在相邻少数类样本之间插值合成新的少数类样本解决过拟合的问题欠采样是对多数类样本进行删减去掉大部分冗余的多数类样本保留有代表性的样本减少数据量。对测试来说我们需要保证测试数据集的分布尽量贴近真实线上数据分布不能随便过采样改变分布所以一般我们只会对训练集做采样测试集保留原始分布这样才能真实反映模型在实际场景下的效果。如果测试集中少数类样本确实太少无法满足测试要求我们可以通过数据增强的方式生成新的测试样本比如对图像做翻转、裁剪、旋转对文本做同义词替换、回译既保留了样本的标签信息又增加了样本数量提升了测试的覆盖率。除了平衡采样我们在构建训练测试划分的时候还要注意采样的随机性不能按顺序划分避免因为数据的时间相关性导致测试结果不准。比如我们用过去一年的用户行为数据做训练如果按时间顺序把前10个月当训练集最后2个月当测试集这种划分其实更符合真实场景比随机划分更靠谱如果是没有时间相关性的数据再用随机划分就可以了。写在最后数据预处理对AI测试的核心价值对软件测试从业者来说掌握数据预处理的5个步骤不仅仅是帮AI算法工程师处理数据更是我们控制AI模型质量的核心抓手数据预处理的每一步都对应质量检查点我们可以把每个步骤的质量指标纳入测试规范比如缺失率不能超过5%、异常值占比不能超过1%、特征相关性不能超过0.9从数据层面就把好质量关避免后期模型出问题再返工。优质的数据是AI模型成功的基础也是AI测试可信的前提这5个步骤环环相扣缺一不可数据清洗解决脏数据问题数据集成解决多源对齐问题数据转换解决模型适配问题数据降维解决维度灾难问题数据采样解决分布不平衡问题。把每一步做扎实不管是训练数据还是测试数据质量都能得到保证后续的模型开发和测试工作也能事半功倍。