AI训练师二级04:最硬核的一道,训练集、黄金测试集与偏差检测怎么做
我是老计。这一篇拆的是智能训练题(B2 类),它是整个考试里分值最重、也最能体现人工智能训练师专业度的一道。为什么说它最重?上一篇讲过,考试并列排名时,这道题的优先级排在最前面,官方某种程度上把它当成含金量最高的能力。
它考什么?一句话:
不只是会训模型,而是会给模型准备好数据。构建高质量训练集、构建能代表整体分布的黄金测试集、再用统计方法检验有没有偏差,确保模型上线后在各种场景下都稳。数据质量,才是模型的核心竞争力。
这道题会要你真写代码,涉及特征工程、时序划分、分布检验,是这个系列技术含量最高的一篇。为了演示又不碰原题版权,我自己造一个全新场景,外卖平台的订单量预测。
一,先看这道我自编的题
场景:一家外卖平台要做订单量预测,帮商家和骑手提前备货、排班。但发现一个问题:不同商圈、不同时段的订单波动差异很大,模型如果不加控制,上线后可能在某些商圈或时段预测得很不准、很不稳。
给你一份历史订单数据,字段大致是:日期、时间、商圈ID、订单量、品类、时段标签(早高峰/午高峰/平峰/晚高峰)。
三个任务:
- 任务一:构建高质量训练集,从时间里提取日期和小时,并设计三类特征,分别是各时段的平均订单量、各商圈在不同时段的平均订单量、各商圈过去5天的订单趋势
- 任务二:构建黄金测试集并做偏差检测,按时间顺序划分训练/测试集,用 KS 检验看测试集和整体的分布是否一致(尤其各商圈分布要一致)
- 任务三:针对近期波动明显偏大的热点商圈,设计一套完整的测试方案(测试目标、方法、评估指标)
这题的难点,不在写几行 pandas,而在你懂不懂背后的门道:怎么不让数据泄漏、怎么保证测试集有代表性、怎么用统计检验说话。下面拆。
二,任务一,特征工程,关键是防泄漏
任务一构建训练集,核心是三类特征。代码还是 groupby 那套,但这道题藏着一个专业考点,数据泄漏,这是新手最容易翻车、也是阅卷重点看的地方。
三类特征的思路:
- 各时段平均订单量:按时段分组求均值,反映时段规律
- 各商圈在不同时段的平均订单量:按商圈加时段两个键分组,反映商圈的时段特性
- 各商圈过去5天订单趋势:滚动窗口特征,反映近期走势
示意代码(教学用,字段和实现以考场为准):
importpandasaspd df['datetime']=pd.to_datetime(df['date']+' '+df['time'])df['date_only']=df['datetime'].dt.date# 提取日期df['hour']=df['datetime'].dt.hour# 提取小时# 特征一:各时段平均订单量avg_by_period=df.groupby('period')['order_count'].mean()# 特征三:各商圈过去5天订单趋势(滚动,必须先按时间排序)df=df.sort_values('datetime')df['trend_5d']=df.groupby('area')['order_count'].transform(lambdax:x.shift(1).rolling(5).mean()# 关键:先shift(1))注意那行shift(1),这是整道题的灵魂级考点。算"过去5天趋势"时,如果直接 rolling 当前这一行,就把当天的订单量也算进了特征里,而订单量正是你要预测的目标。这叫数据泄漏,相当于让模型提前偷看了答案,离线评估会虚高、一上线就崩。必须 shift 一下,只用过去的数据算特征。
滚动特征防泄漏,是这类题区分专业和业余的分水岭。能主动说出"先排序、滚动前先shift、训练时间早于测试",就证明你真懂怎么给模型准备数据,而不只是会调 API。
三,任务二,黄金测试集,要代表性也要防泄漏
任务二是这道题最有专业味的部分,分两步。
第一步,时序划分。普通机器学习可以随机切训练测试集,但时序数据绝对不能随机切,必须按时间顺序切:训练集用早期数据、测试集用晚期数据。原因还是防泄漏,如果把未来的数据混进训练集,模型等于偷看了未来,评估完全失真。代码上用TimeSeriesSplit或直接按时间点切。
第二步,偏差检测,用 KS 检验。什么叫黄金测试集?不只是切出来就行,它得能代表整体数据的分布,尤其各商圈的订单分布要和整体一致。否则测试集里某些商圈样本太少,你根本测不出模型在那些商圈的真实表现。
怎么检验分布一致?用Kolmogorov-Smirnov(KS)检验,它比较两个样本的分布是否相同:
fromscipy.statsimportks_2samp# 比较某商圈在测试集和整体中的订单量分布stat,p_value=ks_2samp(area_in_test,area_in_all)这里有个极其重要的答题底线,也是阅卷扣分重灾区:怎么解读 KS 检验结果。p 值大(比如 0.87),说明没有显著证据表明两个分布不同,也就是分布大体一致。但是:
- 别把 p=0.87 说成"87%的概率完全一致",这是对 p 值的典型误读,p 值不是概率、更不是一致程度
- 正确说法是:在该显著性水平下,没有发现测试集与整体分布的显著差异
- 报告时要给出统计量 D、p 值和样本量,别只甩一个结论
这类题考的不只是会不会跑 ks_2samp,更是你会不会正确、严谨地解读统计结果。一句严谨的"未发现显著差异",比一句自信但错误的"87%一致"更能得分,也更像一个专业的训练师该说的话。
四,任务三,测试方案,对着高波动切片测
任务三要你针对近期波动偏大的热点商圈,设计测试方案,按三项写:
- 测试目标:验证模型在高波动热点商圈的预测稳定性和准确性,别让它在最关键的场景掉链子
- 测试方法:从测试集里切出热点商圈的样本单独测;对比模型在热点商圈 vs 普通商圈的表现;用历史高波动时段做压力测试
- 评估指标:预测误差(如 MAE、RMSE)、在热点商圈的误差是否显著高于平均、预测的稳定性
这里也有个答题底线:别根据没输出的数据点名具体哪个商圈是热点、别虚构模型的准确率数字。讲方法和指标,而不是编造结论。这又回到那条贯穿全系列的原则:严谨比自信重要。
五,这道题的通用解法骨架
把这道硬核题的解法提炼成可迁移的骨架,换任何"训练集加测试"的题都能用:
- 要求矩阵:先列清题目要的特征、划分、检验分别是什么
- 数据契约:核对字段类型、枚举、时间范围、缺失异常
- 特征粒度:明确分组键、时间窗口、统计量、是否含当前样本(防泄漏)
- 时序黄金集:按时间切、不随机,保证代表性
- 偏差检测:按维度比较分布,报告 D、p、样本量,严谨解读
- 场景切片:总体之外,单独测热点、高波动、极端样本
- 谨慎结论:数值加口径加统计判断加限制,不把相关写成因果、不编数据
换成共享单车骑行量、连锁门店客流、设备故障预测,套路完全一样。变的是业务和字段,不变的是"防泄漏、保代表性、严谨检验"这套给模型准备数据的专业功夫。这,就是人工智能训练师区别于只会调包的人的地方。
小结
这一篇拆了分值最重的智能训练题:核心是会给模型准备好数据,不只是会训模型。任务一特征工程,三类特征用groupby那套,但灵魂考点是防数据泄漏,算滚动趋势特征必须先shift、只用过去数据,否则模型偷看答案、离线虚高上线崩。任务二黄金测试集,时序数据必须按时间切不能随机切(防泄漏),再用KS检验看测试集和整体分布是否一致(保代表性),解读时别把p=0.87说成87%一致、要报D值p值样本量。任务三对高波动热点商圈设计测试方案,写测试目标方法指标,别虚构结论。通用骨架:要求矩阵、数据契约、特征粒度、时序黄金集、偏差检测、场景切片、谨慎结论。严谨比自信重要。
下一篇,我们换个口味,拆智能系统设计题,怎么设计一套多产品协同的全链路智能方案。
(本文为学习性方法拆解,所用外卖订单量预测场景与代码均为原创示意,不含任何真题内容;代码为教学示意,实际以考场框架和数据为准,正式考试内容与要求以当年赛题为准,不押题、不保过。)
版权声明:本文版权归作者老计个人所有。欢迎个人学习阅读,未经授权,禁止转载、摘编、搬运或用于任何商业用途,违者将追究责任。转载请联系作者 Jich。