[控场AI]
· 9 分钟阅读· 4,912 字

用TabPFN预测发票逾期付款:本地运行的应收款现金预测工具

用TabPFN预测发票逾期付款:本地运行的应收款现金预测工具

Cashcast用TabPFN v2在本地CPU预测发票逾期与八周现金流,回测显示其准确率与线性回归持平但校准更好。

Cashcast 是一个开源应收款预测工具,读取发票 CSV 导出,输出逾期概率、带 80% 区间的预计付款日、催收建议与未来八周现金预测,全程在本地运行,客户数据不出本机。技术上用 TabPFN v2 分类器与回归器分别判断是否逾期、预测付款天数分布,并通过严格的特征工程排除结算后才已知的泄漏列。在 IBM 公开数据集上逐月回测 1,075 张发票,TabPFN 的 AUC 为 0.882,与普通逻辑回归的 0.890 基本持平,但明显优于梯度提升树的 0.864,后者的 80% 区间仅命中 57.5%。其独特价值在于为每张发票生成独立分布,可为稳定付款方收窄区间,不过对最不稳定客户仍覆盖不足,周度现金预测因假设发票独立而区间偏窄。

用TabPFN预测发票逾期付款:本地运行的应收款现金预测工具

自由职业者和小型代理机构最怕的场景之一:发出去的发票迟迟不付,房租账单却照常到期。Cashcast是一个开源工具,用TabPFN表格基础模型在你自己的笔记本上预测哪些未付发票会逾期、何时可能到账,以及未来八周的现金流预期——客户名单和金额数据全程不离开本机。

Cashcast解决什么问题

Cloud accounting suites offer payment reminders and cash-flow views, but they expect the whole ledger in their cloud and a monthly subscription. Cashcast的定位是单用途工具,直接读取你已有的CSV导出文件。每行一张发票,包含客户、开票日、到期日、金额、付款日,输出四项判断:逾期概率、带80%区间的预计付款日、建议下一步动作(今天联系/立即催款/到期日提醒/无需操作),以及未来八周的周度现金预测。

目标用户是自由职业者、小型代理机构,以及帮多个小客户管理应收账款的记账人员。对这类人来说,逾期不是抽象指标,它决定房租能否按时转出,也决定每周花多少时间写催款邮件。

Cashcast演示:选择日期,查看风险发票,揭示实际结果

演示:回放IBM公开数据集

在线演示页面是一项回放功能。数据来自IBM公开的应收账款样本:100家商业客户、2,466张发票、2012至2013年的记录,其中36%逾期支付。选择一个日期,页面展示Cashcast当天早上会告诉你什么,只使用该日期之前已付款的发票。勾选"Reveal what happened"后,真实付款日期会与预测并列显示。

几个值得尝试的场景:选择2013年9月1日,有78张发票未付,Cashcast预计未来四周会有4,327到账(样本无货币单位),揭示实际结果:实际到账4,241。点击"Needs action"只看到建议催收的发票,每张附带一行从数据计算的历史摘要,例如"过去15张发票中13张逾期支付,平均付款周期36天"。

在本地使用自己的发票需要Python 3.10以上、CPU即可运行。python -m cashcast.serve在本地模式下打开同一页面,带文件选择器。文件从浏览器传到127.0.0.1上的Python进程,不会发往别处。在自带的404行样本账本上,评分耗时约7到9秒。

技术实现:TabPFN做预测

TabPFN是Prior Labs的表格基础模型,在数百万合成表格上预训练,你把手头的表交给它,单次前向传播即可预测。对只有几百到几千张发票的小企业来说,这意味着没有训练循环要调、没有模型要照看。

Cashcast在同一组特征上使用两个TabPFN v2模型:一个分类器判断"这张发票会在到期日后被支付吗",一个回归器回答"还有多少天付款",请求49个分位数,返回每张发票的完整分布而非单一数值。

特征工程与泄漏防范

这类数据最容易骗自己。IBM样本包含DaysToSettle和Disputed等列,这些只在发票结算后才已知,使用它们会让任务显得比实际简单得多。因此features.py从发票发出当天已知的信息构建每一行:该客户已有多少发票被支付、逾期频率、平均和最近付款天数、有多少张仍未结、当前金额与其历史水平的比较。开票日之后支付的发票对该行不可见。

从分布到决策

回归器的分位数是最有用的部分。一张已经逾期25天的发票和一张昨天刚发出的发票是完全不同的赌注,forecast.py因此根据发票当前年龄对每个分布做条件调整,从中读取:P(到期日后支付|今天仍未付)作为逾期概率,第10、50、90百分位付款日,以及每个日期2,000次模拟付款排程按周汇总的现金预测。下一步动作标签是简单规则(已逾期:今天联系;概率50%以上:立即提醒;30%以上:到期日提醒)。每张发票旁的历史摘要行是计算出来的,不是生成的,因此不可能陈述数据不支持的内容。

表格基础模型(Tabular Foundation Model) 是相对于传统"每个数据集训练一个模型"范式的转变。传统监督学习需要在目标任务的训练集上做梯度下降,数据量小、特征少时容易过拟合;基础模型则在海量合成或真实表格任务上预训练,学到的是"如何在表格上做条件推断"这一通用能力。TabPFN 的核心机制是把训练集和待预测样本一起作为输入送入 Transformer,通过网络内部实现的近似贝叶斯推断直接输出预测分布,因此被称为"先验数据拟合网络"(Prior-Data Fitted Network)。这带来两个直接后果:一是推理是单次前向传播,没有训练循环,CPU 上即可完成;二是模型规模与训练数据量有硬上限,这在后文的回测部分会直接体现。

分位数回归与预测区间 需要与"置信区间"区分开。置信区间描述的是对某个参数估计的不确定性,而预测区间描述的是对单个未来观测值的不确定性,后者天然更宽。当模型输出的是付款天数的完整条件分布时,第 10 与第 90 百分位之间的距离就构成一个 80% 预测区间,其含义是"在长期重复抽样中,约 80% 的真实付款日会落入该区间"。区间命中率因此成为关键的校准指标:名义 80% 的区间若实际只命中 57.5%,说明模型过度自信,会让人低估现金流风险;命中率高于 80% 则说明区间过宽,失去行动指导意义。Cashcast 的现金预测正是把每张发票的这一分布做蒙特卡洛抽样后按周汇总。

逐月回测:TabPFN没赢的那个月

2013年1月到10月,每月模型只用该月开始前已支付的发票训练,然后预测当月发出的发票,共1,075次预测。CPU上的TabPFN默认接受最多1,000行训练数据,所以每月使用最近1,000张已付发票。

模型AUCBrier催收召回付款日误差80%区间命中
TabPFN v20.8820.12751.0%5.92天79.1%
逻辑/线性回归0.8900.12250.4%5.81天79.3%
客户自身历史0.8700.13550.7%6.54天不适用
梯度提升树0.8640.15449.9%6.23天57.5%
基础比率0.50.21818.4%10.11天不适用

"催收召回"回答的是业务问题:如果你只催收每月风险最高的20%发票,能抓住多少逾期发票?Brier和付款日误差越低越好。

诚实的解读:在这个数据集上,普通逻辑回归和线性回归与TabPFN一样准确。作者原本预期TabPFN会明显胜出,结果没有。但它明显优于同数据训练的梯度提升树——后者的80%区间只捕捉到57.5%的真实付款日。

概率校准良好。TabPFN给出低于20%概率的586张发票中,8.7%实际逾期(模型平均预测6.2%)。给出高于80%的116张中,90.5%实际逾期(模型预测87.4%)。

回测表、区间自适应性和校准图表

AUC、Brier 分数与校准 三者衡量的是不同侧面。AUC 是排序指标,回答"随机抽一张逾期发票和一张正常发票,模型给逾期者更高分数的概率",0.5 等于瞎猜,1.0 等于完美排序,但它对概率绝对值不敏感。Brier 分数是预测概率与真实 0/1 结果之间的均方误差,越低越好,同时惩罚排序错误与概率失真。校准则专门考察"模型说 20% 的发票,实际是否真有约 20% 逾期",本文给出的低于 20% 组实际 8.7%(模型均值 6.2%)、高于 80% 组实际 90.5%(模型均值 87.4%),说明概率数值本身可信。催收召回则是把排序能力翻译成业务语言:在只处理风险最高 20% 发票的预算约束下,能覆盖多少真正会逾期的发票。

TabPFN的独特价值:每张发票自己的不确定性

线性模型加残差带给每张发票相同宽度的不确定性,TabPFN给每张发票自己的分布。按客户过去付款时间的波动性分三组测试:稳定客户上TabPFN的80%区间命中80.5%、宽度16.0天,线性模型命中83.8%、宽度18.4天;中间组分别为83.3%/17.7天和84.2%/18.5天;波动客户上TabPFN命中73.3%、宽度19.9天,线性模型命中69.7%、宽度18.4天。

TabPFN为可靠付款方收窄区间、为不稳定付款方放宽区间,这是你想要的方向,但效果有限,且两者对最不稳定那三分之一的客户都覆盖不足。分布能力还让Cashcast无需单独模型就能回答"这张发票已逾期20天仍未付,现在怎么办"。

回放本身的校验

在线页面的数字是对真实结果评分得出的(10个日期,905行未付发票记录):296个"立即发提醒"标记中,78%确实逾期支付,而同期所有未到期发票中逾期比例为43%。真实付款日落入80%区间的比例为77.1%,典型偏差5.78天。周度现金预测是薄弱环节:80周中实际金额落入80%区间仅67.5%,模拟将发票视为独立,导致区间过窄。每个日期在笔记本CPU上耗时约40秒。

局限与开源商业考量

样本只包含最终被支付的发票,Cashcast从未见过被核销的发票。样本中所有发票都是30天账期,其他账期效果未经验证。它建议联系谁,但不发送任何东西。在线页面是公开数据集的回放,在自己的账本上信任它之前,先用同样的回测跑一遍自己的历史数据。

开源对这个小产品至关重要。发票账本是一份关于谁付你钱、付多少、多可靠的清单,开放权重让Cashcast在已存有该文件的笔记本上运行,本地服务器绑定127.0.0.1,一次性下载权重后即使阻断所有网络流量评分仍可工作。一次性授权工具无法承担按预测计费的API账单,开放权重意味着每次预测的边际成本只是几秒CPU时间。

许可证必须允许商业销售。Prior Labs推荐其最新模型TabPFN-3.5通过API使用,采用免费非商业许可,这对研究是好选择,但副业定义上就是商业的。TabPFN v2权重以Prior Labs License 1.1发布(Apache 2.0附加署名要求,因此页面标注"Built with PriorLabs-TabPFN"),从Hugging Face免账号下载,可离线运行。对这个产品而言,许可证的开放性与权重的开放性同等重要。代价是可能因为没用最新模型而牺牲了部分准确率。

开放性让评估成为可能。模型、数据和代码都可检查,作者能在完全相同的行上运行所有基线,并公开发布TabPFN未胜出的结果。黑盒API给出的是一个需要信任的数字,而不是一个可以核查的数字。

开源许可证的商业约束 常被误读为"开源即可商用"。Apache 2.0 允许自由使用、修改和商业分发,但附加署名要求会继承到衍生作品中;Prior Labs License 1.1 属于这类"Apache 2.0 + 署名"结构,因此必须在产品页标注来源。相比之下,仅通过 API 提供的模型即便本身权重公开,其服务条款仍可限制商业用途,且每次调用产生计费。对于把预测嵌入日常记账流程的工具,按次计费的边际成本与"打开笔记本就能跑"的可用性直接冲突。选择旧版开放权重是用一部分准确率换取离线能力、可审计性与零边际成本的典型取舍。

#TabPFN#发票逾期预测#现金流预测#表格基础模型#开源工具#本地AI推理#应收账款管理
分享:

相关推荐