文章目录
- 1 -> 引言
- 2 -> 表格基础模型,不是把 Excel 交给聊天机器人
- 3 -> 模型开始比较之前,先把预测问题说清楚
- 4 -> 一个先把评估跑通的小实验
- 5 -> 怎样与 XGBoost 等方法公平比较
- 6 -> 基础模型的价值,要落到实际条件里
1 -> 引言
提到 AI,很多人首先想到聊天、写作和生成图片。但公司里大量真正需要做的预测,仍然藏在普通表格中:哪些设备可能故障,哪些订单容易延迟,哪些用户可能流失,下一段时间的需求会怎样变化。
过去处理这些问题,常见路径是清洗数据、构造特征,再训练逻辑回归、随机森林或梯度提升树。近几年,面向表格数据的基础模型提供了另一条路线:先在大量任务上学习预测规律,再把这种能力迁移到新的数据集。
TabPFN 是其中一个代表。2026 年 9 月的 TabPFN-3.5 技术报告展示了该路线的继续演进。不过,发布报告中的领先名次并不能代替业务验证。对实际使用者,更重要的问题是:它与传统模型的工作方式有什么不同,怎样设计公平比较,哪些错误会让所有模型都看起来很优秀。
2 -> 表格基础模型,不是把 Excel 交给聊天机器人
聊天模型可以解释表格、生成 SQL、整理统计描述。这些能力很有用,但与预测模型的目标不同。预测问题通常要求给定一组特征,估计另一个未知变量,并用未参与建模的数据检验误差。
例如,在设备发生故障之前,根据当时已经采集到的温度、运行时长和维护记录,预测未来一周是否需要检查。这里的重点是样本关系、特征可用时间和预测质量,而不是生成一段看起来合理的分析文字。
传统监督学习会在当前训练集上拟合参数。TabPFN 系列的一个核心思想,是利用跨任务预训练,让模型根据带标签样本与新样本进行上下文预测。早期论文使用合成任务分布研究这种方法;后续版本的规模、功能与限制应分别查看对应资料。
这不意味着模型不需要训练。大量学习发生在预训练阶段,应用时仍然需要正确提供数据和任务。实现中的fit也不一定等于从头做一遍梯度训练,具体行为取决于模型与库。
更不能由此推导出“业务数据不用清洗”。错误标签、未来信息、重复样本、权限不明的数据,进入更强的模型后仍然会产生问题。基础模型改变的是学习方式,不会自动修复数据治理。
3 -> 模型开始比较之前,先把预测问题说清楚
一个预测目标至少需要三个时间点:在哪个时刻作出预测,允许使用此前的哪些数据,以及未来多长时间内发生什么算作正例。缺少这些定义,模型很容易学到事后才知道的信息。
以用户流失为例,“过去一个月没有购买”和“下个月不会购买”不是同一个目标。如果把事后客服回访结果、最终关闭日期或已经完成的退款记录作为特征,模型可能只是识别一个已经发生的结果。
这种信息泄漏经常让离线分数异常好看。上线后相关特征尚未产生,效果就突然消失。scikit-learn 的常见错误说明强调了数据划分与预处理中的泄漏风险。原则很简单:测试集不能参与本应仅由训练数据决定的处理。
切分方式也必须符合未来使用场景。如果要预测未来月份,应考虑时间切分;如果要泛化到从未见过的企业或设备,应考虑按实体分组。随机拆行可能把同一个客户的相邻记录分到两边,让测试结果主要反映“认出了这个人”。
还有一种容易忽视的泄漏来自人工筛选。看了测试集结果之后反复换特征、改阈值、挑模型,实际上已经在利用测试集调参。应保留独立验证集进行选择,最后才使用测试集评估一次。
4 -> 一个先把评估跑通的小实验
在接入昂贵模型之前,可以先建立一个完全离线的评估基线。下面生成一组明确标注为合成的数据,用前半部分学习“不同数值区间的事件概率”,再在后半部分计算 Brier 分数。
Brier 分数是预测概率与真实标签之间的平均平方误差,越小越好。它关注概率预测,不依赖某一个分类阈值。示例还加入一个只预测训练集总体发生率的常数基线。
这段代码不是 TabPFN、XGBoost 或真实业务的性能测试,只用于演示先划分、后拟合、再评估的流程。使用 Python 3.10 及以上版本和标准库即可运行。
fromrandomimportRandomdefbrier(labels,probabilities):ifnotlabelsorlen(labels)!=len(probabilities):raiseValueError("invalid evaluation data")ifany(not0<=p<=1forpinprobabilities):raiseValueError("probabilities must be in [0, 1]")returnsum((p-y)**2fory,pinzip(labels,probabilities))/len(labels)rng=Random(20260927)rows=[]fordayinrange(400):feature=rng.random()probability=0.1+0.8*feature label=int(rng.random()<probability)rows.append((day,feature,label))train=[rowforrowinrowsifrow[0]<280]test=[rowforrowinrowsifrow[0]>=280]assertmax(row[0]forrowintrain)<min(row[0]forrowintest)base_probability=sum(row[2]forrowintrain)/len(train)counts=[0]*5positives=[0]*5for_,feature,labelintrain:bucket=min(int(feature*5),4)counts[bucket]+=1positives[bucket]+=label# Laplace smoothing prevents empty bins and exact zero/one estimates.rates=[(positive+1)/(count+2)forpositive,countinzip(positives,counts)]labels=[row[2]forrowintest]predictions=[rates[min(int(row[1]*5),4)]forrowintest]baseline=[base_probability]*len(test)print("synthetic rows:",len(train),len(test))print("constant baseline Brier:",round(brier(labels,baseline),4))print("binned baseline Brier:",round(brier(labels,predictions),4))assert0<=brier(labels,predictions)<=1这个实验没有模拟时间漂移,因此不能证明时间切分天然更难。它只是把时间边界显式保留下来,方便后续接入真实数据时审计。分箱方法也十分简单,不能代表成熟机器学习模型的上限。
真正接入模型时,可以替换生成预测概率的那部分,保留相同的数据切分和评分代码。这样才能保证比较的是候选方法,而不是一边用了较容易的数据、一边用了较困难的数据。
对于 TabPFN 的具体调用,还需要固定版本、确认权重或服务的许可与访问条件,并核对输入规模、数据类型和设备要求。不要默认一个通用安装命令就会自动调用发布报告中的最新型号,也不要把旧版本默认类的输出标成 TabPFN-3.5 成绩。
5 -> 怎样与 XGBoost 等方法公平比较
最基本的公平,是给不同方法相同的可用信息、相同的训练测试边界和明确的资源预算。预处理可以因模型不同而变化,但只能在训练部分拟合,并记录具体步骤。
如果传统模型得到几小时调参预算,而基础模型只使用一次默认调用,比较回答的是“这两套配置的效果”,不一定是两条技术路线的上限。反过来,如果基础模型使用昂贵集成模式,树模型只跑一个随意默认值,也不能据此宣称后者已经落后。
| 比较项 | 应记录的内容 |
|---|---|
| 数据 | 样本范围、特征版本、缺失率、目标定义 |
| 划分 | 时间边界、实体分组、训练验证测试比例 |
| 模型 | 明确版本、参数、是否集成或微调 |
| 预算 | 调参次数、运行时间、CPU/GPU 或服务成本 |
| 质量 | 与任务匹配的指标及其波动 |
| 部署 | 延迟、批量规模、依赖、数据是否离开本地 |
分类任务不应只看准确率。当正例很少时,全部预测为负也可能得到很高的准确率。应根据业务关注精确率、召回率、PR 曲线或概率校准。回归问题则需要考虑 MAE、RMSE,以及大误差是否造成不成比例的影响。
阈值的选择同样属于模型使用的一部分。若系统每天只能人工复核二十条记录,更相关的问题可能是“排名前二十的记录中有多少值得处理”,而不是一个脱离处理能力的总体分数。
最终结果最好展示多次划分或重复运行的范围,而不是只展示最好的一次。对时间序列或分组数据,要选符合依赖关系的评估方式,不能为了得到误差条而把相关记录当成独立样本随意重采样。
还应检查总体分数掩盖了哪些差异。一个模型可能在样本量大的地区表现不错,却在新地区或少见设备类型上明显变差。按与业务有关的分组查看误差,有助于识别这种情况,但也要防止因为某个小组恰好分数很低,就在很少的样本上过度下结论。
概率是否可信也很重要。如果模型给出“80% 的概率”,长期来看相近分数的样本是否真的接近这一发生率?一个排序不错但概率失真的模型,可能适合辅助人工挑选,却未必适合直接按概率制定资源预算。校准需要独立验证数据,不能在最终测试集上反复调整。
部署之后,离线结果还需要持续观察。输入缺失率、类别分布、预测分布和真实结果反馈都可能变化。若业务流程本身因使用模型而改变,后来收集到的数据也可能带有新的选择偏差。记录模型版本、预测时间与最终标签,有助于区分数据变化和实现故障。
6 -> 基础模型的价值,要落到实际条件里
TabPFN-3.5 的技术报告讨论了包含文本、较高维度等更复杂数据条件。这样的进展值得跟踪,但厂商或论文基准只是寻找候选方案的起点。真实数据的标签质量、分布变化和部署限制,可能比榜单差距更重要。
在样本量有限、调参经验不足或需要快速建立候选预测器时,表格基础模型可能值得尝试。在成熟流程中,传统树模型则可能已有稳定的监控、解释工具、低成本部署和经过验证的业务表现。替换它们需要完整收益,而不只是一个略高的离线分数。
解释性也应谨慎。某个特征对预测有贡献,不表示改变这个特征就一定能改变结果。模型可能利用了相关关系、历史政策或未观测因素的代理变量。预测、因果解释和业务干预是三类不同的问题。
如果通过远程服务处理表格,还要核对数据外送范围。删除姓名不一定完成匿名化,细粒度地区、时间、职位和交易特征的组合也可能识别个体。应先确认数据是否适合提交,再讨论模型效果。
一个值得采用的新模型,应该在清晰的目标、正确的数据边界和可接受的成本下持续提供价值。先把这些基础工作做好,表格基础模型才会成为真正有用的新工具,而不是又一张看起来很漂亮的排行榜。