TimesFM时序基础模型:从原理到风控落地实战指南
发布时间:2026/9/8 16:11:33 锦皓数字建站

上个季度我们贷后预警模型做得我有点头疼月度滚动率预测用的是XGBoost加一堆滞后特征每个月重训一到节假日就飘。朋友提醒我去看看谷歌出的那个叫TimesFM的时间序列基础模型说这是时序领域的GPT拿来就能预测不用训练。我半信半疑地试了一下结果发现它在风控场景里能干的活比我想象的多得多。这篇文章我打算把TimesFM从原理到风控落地完整拆一遍重点回答三个问题它凭什么敢叫时间序列GPT和现在用的LSTM、Prophet到底差在哪以及风控团队拿到这个模型之后到底应该从哪里开始用、怎么用才不会踩坑。如果你是做信贷风控、交易反欺诈或者运营监控的算法工程师这篇文章应该能帮你省下不少调研时间。1. 先把这个“时序GPT”看明白TimesFM到底做了什么1.1 把“next token prediction”搬到了时间序列上很多人听到“时间序列GPT”第一反应是这不就是个营销说法吗还真不是。TimesFM是Google Research在2024年正式发布的时间序列基础模型全称Time Series Foundation Model。它的核心思路和语言模型高度一致语言GPT做的事情是给一段历史文本预测下一个tokenTimesFM做的是给一段历史数值预测下一个数值块。这里的差别就在“块”上。语言模型处理的最小单位是token一个词或者半个词TimesFM处理的最小单位是patch也就是把连续的时间点切成固定长度的小段。比如每32个时间点合成一个patch模型的输入就不是一个一个数值而是一整段一整段的数值块。为什么要这么干两个原因。第一单点预测在金融场景里几乎都是噪音。你拿客户过去30天的逾期率序列去做预测如果模型只看最后一天的值它根本分不清这是随机波动还是个趋势信号。但如果看连续的30天、60天模型才有机会捕捉到“最近这段是持续走高还是震荡”这样的形态信息。把时间点打成patch等于让模型用俯视的视角看序列而不是盯着每一个像素。第二序列长度直接被压缩了。512个时间点如果切成32长度一个patch就只剩16个token。这样Transformer的自注意力机制处理起来毫无压力推理成本也大幅下降。这个设计很关键因为金融场景经常要跑几十万个账户级别的预测序列短一点批处理速度差别巨大。TimesFM在预训练阶段的做法和GPT一样就是next token prediction给定输入序列的前面一部分让模型预测后面一部分然后拿真实值算损失反向传播更新参数。训练语料不是某一家的数据而是横跨搜索、百科、天气、金融、零售、电商等多种来源的大规模时间序列整体规模大约在1000亿个真实时间点。如果做个类比语言GPT是“读万卷书”之后学会了写文章TimesFM就是“见了大量真实世界的走势”之后学会了预测曲线。1.2 2亿参数的基础模型强在哪TimesFM的模型参数量是2亿放在大模型圈子里几乎是个小不点。但时间序列任务的特殊性决定了它不需要几十亿、上百亿的参数。原因很简单时间序列的token量本身就少一个512长度的序列切完patch也就十来个token把模型做得太大反而容易在小样本上过拟合。模型虽然不大但结构上一点没含糊。TimesFM整体是decoder-only架构先用一个轻量残差块把每个patch映射成向量表示后面叠了多层带自注意力的Transformer decoder层。这样设计的意图也很明确decoder-only天然适合自回归预测模型在预测某一步时只能看到过去的信息从结构上就杜绝了未来数据泄漏。顶配结构之外最让我觉得“这玩意儿真能用到业务里”的是它的两个输出一个是点预测值也就是未来一段时间每个时间点的具体数值另一个是预测的不确定性估计。后者在风控场景里太重要了。你预测某个账户未来三个月的还款金额如果模型给的不只是一个均值还有一个标准差那你至少知道这个预测到底有多可信。而且2亿参数意味着它真的可以部署到生产环境。模型权重也就几百MB一台普通的CPU服务器就能跑推理不用专门申请A100。对于大多数金融机构的算法团队来说这个部署成本是非常友好的。提示TimesFM的单次预测窗口通常建议设置在128个时间点以内。想预测更长时间可以把预测结果拼接到历史后面再作为新的上下文输入循环外推。2. 风控算法岗最关心的一件事它和LSTM、Prophet、XGBoost有什么区别2.1 从LSTM说起为什么金融时序经常训不动过去几年里不少风控团队尝试过用LSTM做时序预测但说实话能在信贷场景里真正把LSTM训到上线并且稳定运行的案例并不多。我自己也踩过这个坑总结下来主要是三个问题。金融序列本身的信噪比太低。客户的还款金额、消费金额、逾期率这些数据受到收入、职业、宏观环境、平台策略等多重因素影响序列里既有趋势又有周期还夹杂大量随机波动。LSTM对这种高噪声序列非常敏感经常学到的是“最近几期的随机波动规律”而不是真正稳定的趋势模式。样本量按账户数算很大但按“独立序列”算很小。LSTM训练需要大量完整的历史序列。可现实是一个产品线可能就三五百天的历史数据拆成训练集、验证集之后真正能用的序列数量非常有限。模型在训练集上拟合得再好验证集一跑就会发现过拟合严重。调参成本过高。LSTM的隐层维度、层数、学习率、梯度裁剪、序列长度每一项都能影响最终效果。金融团队如果没有人专门做深度学习模型调优想复现一篇论文里的效果几乎是不可能的。我见过太多团队在LSTM上调了两周参数最后效果还不如一个带趋势项的线性回归。TimesFM彻底绕开了“训练”这一步。它已经在大规模数据上完成了预训练到你手里的时候是一个“什么序列都见过”的通用预测器。你只需要给它一段历史数据它就能输出预测结果不需要为某个产品单独训练。这个特性在风控场景里非常实用尤其是新业务、新产品线刚上线、历史数据不足的时候。2.2 和Prophet、XGBoost类模型的实际对比Prophet是很多做运营数据分析的同学喜欢用的工具它对趋势、节假日、季节性的拟合很直观而且分段趋势、突变点检测这些功能都内置了开箱即用。但Prophet本质上是把时间序列分解成趋势项、季节项和假期项适合强周期、弱噪声的业务指标。风控数据通常是弱周期、强噪声、多事件驱动的Prophet拟合出来往往偏平滑预测区间宽到没有决策价值。XGBoost类模型在风控里依然是主力但它解决的是“分类/回归”问题不是“序列外推”问题。你可以构造滞后30天、滞后60天的特征去预测下个月是否逾期但你没办法直接用它输出一条未来90天的走势曲线。想用XGBoost做时序预测就要不断滚动生成特征一步预测、一步更新工程上非常繁琐。TimesFM的定位和上面三者都不同。它不做分类也不做统计分解它就是一个序列到序列的外推器。给它一段历史走势它直接给你输出未来的走势曲线和不确定性区间。所以我的判断是TimesFM不是来替代评分卡或策略引擎的它是来补“预测能力”这个短板的。2.3 一张表看清楚差异能力维度TimesFMLSTMProphetXGBoost类是否需要训练零样本不需要需要大量训练需要拟合需要训练多变量特征支持弱单变量为主可支持多变量可加外生变量强长序列外推能力强中中弱输出不确定性自带没有有区间没有直接输出部署成本低CPU可跑中低中对突变事件感知无无有突变点检测看特征工程看完这张表应该就清楚了TimesFM的强项在于“零样本”和“外推能力”但它的短板也同样明显——对多变量特征支持不好。所以你在落地时千万别想着用它替代评分卡正确的用法是把它当成一个“序列外推工具”和“特征生成器”。3. 风控落地实战我建议优先试这四个场景3.1 贷中行为序列的滚动率与逾期预警贷后管理里最常用的一个指标是滚动率比如M0-M1滚动率指的是本月正常、下个月进入逾期1-30天的客户比例。这个指标本质上是一条月度时间序列而且它直接反映资产质量的变化趋势。过去我们用XGBoost做滚动率预测要构建一堆宏观特征、产品特征、账龄特征每个月重训一次。用TimesFM就简单很多直接把过去24到36个月的月度滚动率序列喂进去让它外推未来3到6个月的趋势。它输出的未来曲线就是一个“业务基线预测”。但这个预测我不会直接拿来做决策我建议用一个偏差触发机制每个月的真实值出来之后和TimesFM预测的对应月份做比对偏差持续超过阈值就触发预警。比如预测值是3.2%真实值连续两个月超过3.8%说明资产质量恶化速度快于预期这时候就需要策略团队介入排查看是新客质量下滑还是催收策略出了问题。3.2 新户信用评估中的外部时序特征补充新客风控最大的难题是“没有历史”。一个新客户没有任何还款行为你只能靠征信、外部数据和他填写的资料来判断。但有一个信息经常被大家忽略就是外部宏观环境的走势。比如你这个月接入了某家数据服务商提供的“行业景气指数”它有过去几年的月度走势。你可以用TimesFM把未来3个月的景气指数外推出来如果趋势是持续下行那对于依赖这个行业的客群就应当适当收紧额度或者提高准入分数线。这个用法不是做个体级评分而是做组合级策略调整。它的好处在于因为不直接作用于单个人解释压力小上线也快。你只需要每天跑一个宏观序列的预测任务更新几条阈值规则就行。3.3 额度动态管理里的客户现金流外推很多互联网信贷产品的额度调整用的是“额度使用率”“还款及时性”这些指标做规则判断。但如果能预测客户未来的现金流变化额度管理可以做得更精细。具体做法是对于活跃客户取他们过去12个月的月度还款金额序列作为TimesFM的输入输出未来3个月的还款能力预测。预测值持续走高的客户说明还款能力在增强可以考虑适当提额预测值大幅下行的客户即使当前还款正常也需要提前调低额度做好风险预防。需要注意一点不要只看点预测值要看置信区间。TimesFM输出的是预测分布如果你的策略只在“趋势明确且置信区间收窄”的时候触发调整可以大幅减少误伤。预测值下行但置信区间非常宽的说明模型自己也没把握这时候保持原额度反而是稳妥的。3.4 催收策略中的分桶预测与优先级排序催收资源的分配永远是有限的运营团队的精力也是有限的。传统做法是按逾期天数分桶M1一个队列、M2一个队列然后每个队列里再按欠款金额排序。问题是同一个账龄段里的账户未来还款概率差距可能非常大。用TimesFM可以做一个预测驱动的动态分桶对每个逾期账户取他们过去一段时间“还款金额/应还金额”的比率序列预测未来4到8周的这个比率走势。预测值持续走低、且波动率极小的账户大概率还款意愿已经在恶化应该优先分配人工催收预测值出现回升趋势的账户可以继续保持短信提醒把人力省下来。这个场景的价值不在于预测精度多高而在于它可以作为催收策略引擎的输入生成一个“动态优先级”字段。策略上只需要多一条规则同账龄段内预测还款率低的账户优先触达。实现成本非常低但运营效率的提升往往是立竿见影的。4. 手把手跑通一次预测环境、代码与一个真实形态的案例4.1 环境准备与模型获取TimesFM目前提供了Python版本的推理代码安装方式很简单用pip就能装。模型权重可以从公开模型仓库获取因为模型本身不大下载之后放在本地目录后续跑批可以直接从本地加载。需要留意的是版本兼容问题。TimesFM迭代速度不慢不同版本之间模型初始化参数、接口名称可能都有微调。我建议你在环境里固定版本并且把模型权重目录一起固化下来不要每次上线都拉最新的代码否则很容易出现“昨天还能跑今天突然报错”的情况。4.2 最小可运行代码下面这段代码是我在内部环境跑通的示意版本。为了演示方便我用一段模拟的日频逾期率数据作为输入你实际使用时替换成自己业务系统的真实序列即可。import numpy as np import timesfm # 构造一段演示数据过去512天的日频逾期率单位是百分比 # 演示数据包含一个上升趋势和一个30天左右的周期性波动再加一点噪声 np.random.seed(42) t np.arange(512) daily_overdue ( 2.0 0.003 * t 0.4 * np.sin(2 * np.pi * t / 30) np.random.normal(0, 0.1, 512) ).astype(np.float32) # 初始化模型 # context_len 是输入历史的长度horizon_len 是预测长度 # 注意不同版本参数名称略有差异以官方仓库说明为准 model timesfm.TimesFm( context_len512, horizon_len128, backendcpu, ) # 模型期望输入形状是 [batch, time] input_ts daily_overdue.reshape(1, -1) # freq 表示业务频度列表长度需要和batch一致 # 具体频度编码在不同版本里可能有差异按官方文档映射即可 freq [0] # 这里按日频序列处理 # 返回点预测和标准差估计 point_forecast, std_forecast model.forecast(input_ts, freqfreq) print(预测未来128天的逾期率) print(point_forecast[0][:10]) print(模型不确定性) print(std_forecast[0][:10])这段代码跑通之后你就拥有了一个零样本的时序预测能力。这里面有几个值得注意的点input_ts的形状是[batch, time]即使只有一个序列也要reshape成二维freq的编码映射在不同版本里可能不一样使用前务必看一下官方文档返回的标准差是模型自己给出的不确定性估计它对于风控决策非常有用不要忽略。4.3 频次、上下文长度这些参数怎么选TimesFM对输入长度有要求你的上下文窗口至少要覆盖业务序列的几个完整周期。比如日频数据有周周期性那最好至少输入28天以上让模型能看到完整的周维度模式如果做月度滚动率预测建议输入24个月以上覆盖两个完整年度周期让模型识别出季节性。预测长度方面我的建议是不要一次性预测太长。预测步数越长误差累积越明显。如果业务上需要预测未来6个月可以用128步的单次预测窗口先做一段然后把预测结果拼进历史再次预测循环迭代。虽然会引入误差累积但至少能保持模型在每一段预测时的可靠性。批量处理时模型支持一次传入多个序列比如几千个客户各带一段历史序列组成[batch, time]的输入一次性完成预测。这样在风控跑批场景中效率会高很多。4.4 输出如何转成分数和规则模型输出的预测值是连续数值不能直接作为入模特征。我的做法是把它转成几类衍生特征。# point_forecast 是预测序列std_forecast 是标准差 forecast_mean point_forecast[0] forecast_std std_forecast[0] # 生成三类特征 trend forecast_mean[-1] - forecast_mean[0] # 区间趋势变化 vol float(forecast_std.mean()) # 模型不确定度 slope np.polyfit(np.arange(len(forecast_mean)), forecast_mean, 1)[0] # 拟合斜率比如趋势变化值从2.1到3.8说明逾期率在预测期内快速上升模型不确定度最高的一批账户预测结果参考价值低可以在策略里把它们单独划分一个“待观察”分桶而不是直接做决策。处理完这些衍生特征之后再去做WOE分箱、计算IV值就可以和现有特征体系一起进评分卡了。5. 把预测结果接进风控流程时最容易踩的四个坑5.1 时间切分不当导致的数据泄露这是我最想提醒的一点。TimesFM是零样本模型不需要在业务数据上训练但很多人做效果验证时习惯性用“未来一段时间的真实值”去和预测值对比。这个没问题问题在于有些团队会用验证段的数据去调整阈值、做特征选择然后换一个时间段再验证一次。这个操作就等于把验证集的信息用到了测试集上评估出来的指标虚高上线之后效果打对折。正确的做法是严格按时间轴切分比如用2024年1月到2024年10月的数据做模型评估和阈值制定用2024年11月到2024年12月的数据做最终效果验收。两个时段完全隔离中间不互相调参。5.2 对突变事件无感知predict不代表先知TimesFM学的都是历史数据里的模式它只能外推已有的趋势和周期不可能知道未来会突然出现监管新规、突发的行业风险事件、或者是某家平台爆雷引发连锁反应。所以在风控场景里不要试图让它“预测突发事件”而是要用它做“基线监控”。设定一个正常偏差范围比如预测值是3.2%实际值超出20%就触发人工复核。这样做的好处是模型在平稳时期帮你提供稳定的预期一旦出现重大外部冲击监控机制会立刻暴露异常而不是让模型“硬撑着”给出一个自信但毫无意义的预测值。5.3 单变量模型的协变量短板TimesFM目前的主流版本还是以单变量序列输入为主它能处理的是“一条历史曲线到一条未来曲线”的任务。但风控业务是强多变量场景客户的基础属性、额度信息、外部征信数据这些协变量模型都吃不到。所以千万不要有“一个TimesFM解决所有预测问题”的幻想。合理的技术路线是用TimesFM做纯序列外推输出趋势和不确定性然后把趋势值、斜率、波动率这些衍生特征拼到现有的特征体系里交给评分卡模型做最终决策。各用各的长处。5.4 把预测结果硬塞进评分卡预测序列本身不适合直接作为特征入模原因很简单相邻月份的预测值相关系数非常高可能高达0.98以上。把这种高度相关的序列同时丢进XGBoost会造成特征冗余不仅影响训练速度还会让特征重要性解释变得混乱。正确的做法是先做信息提纯把预测序列压缩成少数几个解释性强的特征比如趋势方向、变化幅度、不确定性均值、预测均值相对历史均值的偏离率。压缩之后再做分箱和WOE转换特征之间的相关性问题会明显缓解。6. 大体量数据也不用慌批量推理与嵌入方式6.1 批量预测的工程建议风控跑批通常是T1或者T月的节奏数据量大的场景下每天可能要预测几十万甚至上百万个客户序列。TimesFM的模型结构比较轻量批量预测时可以把多个客户的历史序列拼成一个batch一次性前向计算充分利用CPU或者GPU的并行能力。工程落地上我的建议是把预测任务做成一个独立的离线调度作业用Airflow或者Kubeflow定时触发。预测结果输出成宽表落到特征平台或者数据仓库里后续评分卡、策略引擎直接join这张表就能使用。不要让在线接口每来一次请求就调一次模型因为模型推理时间虽然短但高并发下还是会影响接口延迟。如果账户量特别大可以做一个多级降频的方案高价值客户比如贷款余额较大的每天预测一次普通客户每星期预测一次长尾客户每月预测一次。业务效果不会有明显损失但计算成本能省下一大半。6.2 私有化部署和云端推理怎么选方案优点缺点私有化部署数据不出域满足严格的数据合规要求需要自己维护推理服务云端托管推理免运维弹性扩缩容方便数据出域要过合规评估金融行业对数据合规的要求普遍很高如果公司政策不允许业务数据发送到外部环境那私有化部署就是唯一选择。好在TimesFM权重不大一台带推理卡的服务器就能扛下大部分中型场景的跑批任务。如果公司本身已经上了云并且数据合规评估通过了直接用云厂商托管推理服务会更省心扩容缩容都是平台自动处理的。我个人经验是先用单机版本把流程跑通验证完业务价值之后再去讨论要不要做分布式和性能优化。不要一上来就设计一套复杂架构否则很可能在部署阶段就把项目的推进节奏拖垮了。7. 我的一点收尾体会TimesFM这个模型我最喜欢的一点是它给风控算法团队提供了一个之前不太容易得到的东西一个靠谱的基线预测器。过去做一个时序预测项目从数据清洗、特征工程、模型训练到上线没有一两个月下不来。用TimesFM一天之内就能跑出第一版结果而且这个结果在很多场景下的表现并不比精调过的LSTM差。我的建议是先找一个具体的业务场景比如贷中滚动率预测用真实历史数据跑一段时间的回测。对比一下现有方案和TimesFM在偏差率、稳定性、上线成本上的差异。如果效果好再逐步扩展到额度管理和催收分桶这些场景。自己动手验证过一轮之后你对这个“时间序列GPT”的边界和潜力会有比任何论文都更直观的判断。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。