首页 / 资讯中心 / 文章详情

基于SARIMA的多步预测工具:从数据清洗到置信区间输出

基于SARIMA的多步预测工具:从数据清洗到置信区间输出 ★ FEATURED ARTICLE
1. 项目概述与核心思路1.1 为什么要做这个预测工具时间序列预测这个需求说实话在业务里太常见了。电商要预测下一个月的销量、运维要预估服务器未来几天的负载、气象站点要推断未来一段时间的温度走势甚至连工厂的备件采购节奏也得靠预测来定。很多时候你手里就有一串按时间排列的数字想回答的问题只有一个——未来会变成什么样。我这次做的就是这样一个东西一个基于SARIMA模型的多步未来值预测工具。核心任务很纯粹输入一段历史数据输出未来N个时间点的预测值同时给出置信区间让你知道这个预测到底靠不靠谱。适合谁用凡是手头有周期性的数据、想快速拿到一个可解释的预测结果的人都可以直接用。不想碰深度学习的黑盒又觉得纯移动平均太简陋SARIMA正好卡在中间这个位置——有统计理论撑着参数可以通过数据自适应调整而且预测结果能给出置信区间这在业务汇报里特别好用。做这个工具的初衷其实是我自己受够了那些一步预测很准、一拉长就崩的模型。很多现成库能给你一个漂亮的单步预测但真正业务上要的是未来两周的走势不是明天一个点。多步预测带来的误差累积问题如果你不在建模和预测策略上做文章后面一定会吃亏。所以我把整个流程串起来从数据检查、平稳性处理、定阶、拟合、残差诊断到滚动预测做成了一个相对完整的工作流。1.2 核心需求拆解先把这个工具的需求拆开来看。表面上它只是一个封装好的预测函数但往里挖一下至少要解决四个核心问题。第一数据预处理问题。现实中的数据都是脏的缺失值、异常值、时间索引不规整甚至可能有多个数据点落在同一个时间戳上。这些问题任何一个都会让模型输出变成一个笑话。所以工具的第一步不是建模而是建立一个能容忍脏数据的清洗流程。第二参数自动识别问题。SARIMA模型有七个超参数p、d、q是非季节部分P、D、Q是季节部分外加一个季节周期S。手动调这七个参数靠图画ACF/PACF老实说新手根本看不出来老手也得看半天。所以工具必须有一个自动搜索机制最典型的做法就是网格搜索加AIC准则在候选组合里挑一个统计上最优的。第三多步预测的实现。这是最容易被低估的一环。statsmodels的标准predict函数确实能输出未来N步但你要明白它内部是逐点递归做的预测到第2步时会拿第1步的预测值当输入误差会一步步放大。所以一个好的工具应该支持两种模式一种是普通的多步直接预测用于快速出结果另一种是滚动预测重新估计参数后预测下一天用于评估模型的真实泛化能力。第四置信区间加可视化输出。光给一条预测曲线没有意义你还得让对方知道这个预测的波动范围。SARIMA在这一点上有先天优势它的预测天然带方差估计能算出95%的置信带。把这个区间画出来比点预测值本身更能说明问题。这四个需求就是整个工具的核心骨架。接下来一个一个拆开讲。2. 模型原理与方案选型2.1 从ARMA到ARIMA再到SARIMA聊SARIMA之前先把它的三个祖先理清楚。最早期的是ARMA模型它假设当前时刻的值可以拆成两部分一部分是过去p个时刻的值的线性组合叫自回归部分记为AR(p)另一部分是过去q个时刻的预测误差的线性组合叫移动平均部分记为MA(q)。用数学语言写就是yt c φ1·yt-1 φ2·yt-2 ... φp·yt-p θ1·εt-1 θ2·εt-2 ... θq·εt-q εt你会发现这个模型有个硬前提时间序列必须是平稳的也就是均值和方差不随时间变化。但现实中的序列基本都带趋势比如销量一年比一年高。于是就有了ARIMA多出来的那个I就是差分意思是通过对原始数据做d阶差分把趋势去掉让它先变得平稳再用ARMA去拟合。我没法直接用Python代码写公式但我们完全可以用一个不涉及数学的版本去理解它。到了SARIMA这里思路是同样的只不过多了一个维度。很多序列不但有趋势还有周期性每天的用电量24小时一个周期每个月的销售额12个月一个周期。普通ARIMA对周期是无能为力的因为周期意味着今天的值和一个月前的同一天有关联而这种关联在普通ARMA的滞后项里根本体现不出来。SARIMA的做法是在ARMA的基础上再叠加一层季节ARMA专门捕捉周期为S的滞后关系。2.2 季节周期S的理解季节周期S是这个模型里最关键的参数。它不是你调出来的而是你得根据业务背景自己回答——数据多久重复一次。这里的S不是只有12个月这一种可能日数据有S7表示一周为周期小时数据可能有S24或S168分钟数据可能有S1440。选错了S模型再优化参数都没用。有一个区分稳定季节性和漂移季节性的技巧稳定季节性是指周期形态随时间基本不变比如空调销量每年夏季一个峰冬季一个峰峰的位置和幅度都差不多漂移季节性是指周期形态会缓慢变化比如某些潮流商品的销量虽然也有年周期但每年的峰高差异很大。SARIMA能处理的是前者遇到后者你就得考虑别的方案了。所以在工具里我把S作为必填参数不做自动推断因为哪怕你用傅里叶分析能找出主周期业务上不认账也没用。比如你分析某零售店的日销量算法可能检测出S7但你说每周五促销导致销量升高这就是业务知识工具没法替你判断。2.3 为什么选SARIMA而不选别的模型这里很多初学者会追问现在深度学习模型这么火LSTM、Transformer不是更厉害吗直接上神经网络不就行了我的回答是看场景。SARIMA的优势在于三点一是可解释性。每个参数都有统计含义p表示自回归阶数Q表示季节移动平均阶数你可以在汇报里说清楚模型捕捉到了每7天一个周期的影响深度学习模型给你几百个权重你没法解释。二是小数据友好。神经网络动辄需要几千上万个样本才能训练得稳但SARIMA在几百个数据点的情况下也能给出合理结果。我做实验时用的某地区日温度数据大概600个点SARIMA拟合加预测全部完成不到十秒这种效率在需要频繁重跑模型的场景里太重要了。三是置信区间。这一点在业务决策里是刚需能回答未来一周销量大概在什么范围内而不是只给一个孤零零的数字。当然SARIMA也有它明显的短板我对它的定位是快速可靠的基线模型。非线性关系、多变量交互、长序列强非平稳这些确实不是它的主场。工具里我也预留了其他模型的接口但核心引擎用SARIMA是够用的。3. 数据准备与预处理3.1 数据质量检查清单写代码前先花十分钟检查数据。我踩过的坑太多了总结成了一张检查清单时间索引是否连续。有没有因为节假日、系统故障漏掉某些日期是否有重复索引。同一时刻录了两次数据这会导致模型拟合时出现诡异的结果。缺失值比例。缺失比例超过20%的序列任何一个模型都很难救回来。数值范围是否异常。比如销量突然出现负数、气温出现超过100度的值多半是录入错误。数据频率是否一致。前面几行是逐小时数据中间混了几条逐日数据这种数据必须先统一重采样。作为默认策略我提供的工具会先检查索引频率然后按业务指定的频率做重采样。比如日数据就用每天一个时间戳聚合方式可以选择sum或mean。缺了日期就做向前填充但填充之后会在数据里打一个标记提醒你后续评估结果时这部分预测不可信。有一个惯例是重采样后用向后填充还是向前填充的问题我的做法取决于用途。做销量预测缺的日期往往意味着没生意填0比填均值更合理做温度预测向前填充比填0更符合物理直觉。这个选择工具不替你决定但会提示你。3.2 平稳性检查与差分处理数据准备完第一件事是画一张时序图。如果序列有明确趋势或季节性直接进入差分流程。但更严谨的做法是用ADF检验也叫单位根检验来量化判断序列是否平稳。ADF检验的零假设是序列存在单位根即非平稳。如果p值小于0.05就拒绝零假设认为序列平稳否则就认为非平稳需要差分。这个检验在statsmodels里有现成实现一行代码就能跑出结果。需要注意的是ADF对异常值比较敏感所以先做数据清洗再做检验顺序不能反。工具在定阶阶段会做这样一个循环先对原始序列做ADF不平稳就做一阶差分再检验再不平稳就继续差分但一般最多差分到2阶。d2在业务数据里已经属于少数情况超过2阶的差分不但会让模型难以解释而且会导致方差膨胀得不偿失。季节差分D的处理也类似唯一的区别是差分的步长从1变成S。比如S7日数据季节一阶差分就是今天的值减去7天前的值这一步操作专门用来消除每周的周期效应。判断是否需要季节差分可以看ACF图里滞后为S处的自相关系数是否显著如果显著大概率需要季节差分。3.3 训练集与验证集划分数据的最后一部分是划分。这里我踩过一次很深的坑。那是一个电商销量项目整个序列500天我随手取前400天做训练后100天做验证集。结果模型在训练集上效果很好验证集上预测值整体偏低后来才发现那后100天恰好是促销季销量均值比前400天高了一大截。时间序列的划分不能像普通机器学习那样随机打散必须保留时间顺序否则就是数据泄露。靠谱的做法是把最后一段时期的连续数据作为验证集而且这段时期要尽量覆盖完整的季节周期。拿S7的日数据来说验证集至少要有14天也就是两个完整周期才能评估模型跨周期的泛化能力。如果你要做更严谨的验证可以用时间序列交叉验证也叫滚动预报评估。具体做法是第一次用前300天训练预测后30天记录误差第二次用前330天训练预测后30天再记录误差以此类推。最后把所有误差汇总得到平均值。这种方式计算量比较大但能真实反映模型在不断有新数据进来时的表现用于评估工具质量很合适。4. 参数识别与定阶4.1 看图定阶的实操方法SARIMA七个参数怎么定是新手最容易卡住的地方。最正统的方法是通过ACF和PACF两张图来人工判断。ACF叫自相关函数图展示的是序列与自己滞后版本的相关性PACF叫偏自相关函数图展示的是剔除中间滞后影响后序列与某个特定滞后版本的相关性。人工判断规则是这样的看PACF图。如果PACF在滞后p处截尾也就是之后的项全部落到置信区间内那么AR部分的阶数p就可以定为这个数值。比如PACF在滞后2后断崖式归零那p大概率是2。看ACF图。如果ACF在滞后q处截尾那MA部分的阶数q就取这个数值。比如ACF在滞后1后归零q取1。如果ACF拖尾且PACF截尾选AR模型反之如果ACF截尾且PACF拖尾选MA模型两边都拖尾就得考虑ARMA组合。季节部分的P和Q也是同样的看图规则只不过你需要把视线放在滞后S、2S、3S这些位置。我强烈建议你如果刚开始接触先拿自己手上的数据画出这些图练几次找找感觉哪怕是拿一个明确的ARIMA模拟数据来验证一下判断也比直接一切交给网格搜索要好。4.2 网格搜索自动定阶人工看图定阶遇到复杂数据时经常模棱两可。p到底是2还是3P要不要取1这种时候我的做法是人工看图给出一个大致的候选范围然后用网格搜索在候选组合里自动选优。搜索的核心评价指标是AIC即赤池信息准则。AIC的计算公式是2k-2ln(L)其中k是参数量L是模型的最大似然函数值。AIC的优点在于它兼顾了拟合效果和模型复杂度你多塞一个用不上的参数进去拟合度是会提升但AIC会因此变差从而自动帮你筛选掉过拟合的模型。工具里设置的参数范围大致是这样p和q都从0到5d和D按前面的平稳性检验自动确定P和Q从0到2季节周期S由用户传入。遍历所有组合后记录AIC最小的一组。这里有个重要细节所有组合都必须采用同样的差分阶数才能互相比较AIC否则模型作用的数据都已不同直接比数值没有意义。4.3 参数选择的三个坑自动定阶省了事但会暗藏三个坑需要人工把关。第一个坑是参数范围过宽。p和q都取到7、8这种数值虽然AIC可能很低但拟合出来的模型参数会非常不稳定换一段训练数据重跑一次参数就变个样。实践经验是p和q之和不要超过10季节部分的P和Q之和不要超过2在这个范围内搜索出来的模型解释性和稳定性都更可接受。第二个坑是忽略季节差分阶数D。很多工具代码只在非季节部分做了差分数据和原序列的周期性没有去掉结果是模型把季节波动误当成随机噪声预测结果在季节点上会明显滞后。用我前面说的ACF图在滞后S处看一眼能省一堆后期排查时间。第三个坑是AIC相近时不做选择。网格搜索跑完后排名前几的模型AIC差值往往在2以内这算统计上几乎等价。我的习惯是把AIC差距小于2的几个模型各取出来看看哪个的残差更接近白噪声或者哪个的预测走势和业务直觉更一致挑那个。纯粹的数值主义在统计建模里有时候会坑你。5. 模型训练与效果评估5.1 拟合环节的实操细节参数定好后模型拟合本身倒是比较顺滑。statsmodels的SARIMAX类传入order和seasonal_order两个元组就能拟合。拟合环节有一个值得注意的参数enforce_stationarity和enforce_invertibility。这两个参数默认是True作用是强制模型满足平稳性和可逆性条件。听起来好像是好事但实际操作中如果你的数据本身非平稳性较强又设置了d1做了差分这两个约束反而可能让优化器找不到解报错说矩阵奇异。遇到这种情况我一般把它们设置为False然后重新拟合得到的模型预测效果常常还更好。还有一个参数是trend。如果你在差分后仍然觉得序列有一个缓慢的线性趋势可以在模型中加入trendc表示常数项或者trendct表示常数项加线性趋势。加了之后AIC对比一下再决定要不要保留这是最稳妥的做法。拟合完成后工具会把模型的参数摘要打印出来。里面每行都有coef、std err、z值、P值重点关注P值大于0.05的参数。这些参数统计上并不显著可以考虑把对应阶数降一档再重新拟合。把不显著的参数留在模型里只会增加复杂度不会带来预测收益。5.2 评估指标的正确打开方式模型拟合好不好不能光靠肉眼观察训练集上的拟合曲线。我用的评估指标有三件套MAE、RMSE和MAPE。MAE是平均绝对误差直观好解释比如平均每天预测值偏差2.3个单位RMSE是均方根误差对大误差惩罚更重适合评价波动大数据的预测MAPE是平均绝对百分比误差适合汇报给业务方看因为它是一个无量纲的百分比。MAPE这里有个经典的坑当真实值接近0或者等于0时MAPE会变得无穷大指标完全失去参考价值。所以凡是有零值的数据集我都会建议放弃MAPE改用MASE即平均绝对缩放误差。MASE把预测误差与一个朴素基线误差做比值小于1说明模型优于朴素预测大于1说明还不如直接用上一个时刻的值做预测。这个指标在日常报表里不太常见但真正好用。评估时必须坚持一点所有指标都必须在验证集上计算而不是训练集。我见过很多人拿训练集误差来吹模型多准这跟考完试对着答案说自己会了一样的道理没有参考意义。5.3 残差诊断的四个检查点模型拟合完之后真正的质检环节是残差诊断。残差等于预测值减真实值如果模型提取了数据里所有有用的信息残差就应该完全是随机噪声也就是白噪声。残差诊断我常规看四个检查点残差是否近似正态分布。看直方图和QQ图大幅偏离正态说明模型有系统性偏差。残差的ACF是否都落在置信区间内。只要有几个点超出就说明残差里还有自相关模型没有把信息提取干净。残差是否均值为0。如果均值明显不为0说明模型存在系统性偏差检查一下是否该加常数项。残差是否与时间无关。做Ljung-Box检验p值大于0.05说明残差是白噪声模型合格p值很小说明残差还有相关性需要回炉再造。Ljung-Box检验非常实用我把它的结果作为工具输出的一行状态标识。如果检验不通过工具会提示你检查季节性差分阶数D或者调整季节部分的P、Q。这个过程大白话讲模型的预测结果要和真实的未来值做对照预测准了不稀奇预测不准也不丢人关键是你要能找到为什么不准。6. 多步预测实现与工具封装6.1 多步预测的两种模式模型训练完毕接下来就是实现多步预测。这一步的实现有两个模式业务的差异非常大工具里都做了支持。第一种叫直接多步预测。用训练好的模型直接predict未来N个周期速度最快实现最简单也是日常出报表最常用的方式。但是你必须知道它内部是递归预测的预测t1时刻的值喂回模型再预测t2一步接一步。误差会随着步数增加而累积风控和财务这种对远期数字敏感的场景要特别小心。第二种叫滚动多步预测。每预测完一个周期就把真实值追加到训练集里重新拟合模型然后预测下一个周期。这种方式每次只预测一步但用到的是最新的真实信息误差累积被控制住了。代价是计算量很大如果模型每次拟合要两秒滚动预测100个周期就是200秒只能拿来离线评估不能在线实时跑。工具在设计上做了一个折中提供批量评估模式内部用滚动多步来评估模型真实能力而对外输出预测时用直接预测加置信区间。这个模式在业务实践中被我用了很多次效果要比单纯用直接预测做评估靠谱得多。6.2 置信区间的含义和使用SARIMA的预测结果自带标准误差估计所以能很方便地给出置信区间。95%置信区间的意思不是未来值有95%的概率落在这个区间里而是如果这个模型是对的重复抽样一百次大约有95次的真实值会落在这个区间。这两句话的差别我在给业务方解释时至少要花五分钟说清楚以后对方对模型的理解就会上一个台阶。置信区间的宽度会随着预测步数增加而逐步扩大。这是正常的远期不确定性天然更大。但如果区间宽度发散得特别快几步之后直接覆盖了全量程那说明模型的预测方差估计偏大可能是差分阶数定高了或者季节项设置不合理。业务上用置信区间有一个实用技巧不为点预测值做决策而为区间的上下界做决策。比如库存控制用区间的上界决定备货数量宁可多备不愿断货财务预算用区间的下界做保守估算避免过度支出。这比单独盯着一条预测曲线或一个预测值要专业得多。6.3 工具输出封装与结果落地这个工具最终要能拿给团队其他人用所以输出不能停留在控制台打印模型参数我把结果封装成了一个标准结构包含三块模型摘要参数字典和AIC便于复盘和团队评审。预测结果含mean代表预测值lower和upper代表95%置信区间以及对应的未来时间戳。评估报告含验证集上的MAE、RMSE、MASE以及残差Ljung-Box的p值。预测结果统一输出为CSV文件方便Excel直接打开也方便后续接BI平台。可视化方面用matplotlib画三根线训练数据、预测均值、置信带。画图有一个关键经验预测曲线要和训练数据在连接处平滑衔接否则看起来像断层业务方一看就会质疑模型有问题。做法是把预测点的时间索引和训练数据的时间索引拼接在一起再把空白段处理成NaN让matplotlib自动断开线条。还有一个落地的细节是预测起点问题。很多人在预测未来时没有把模型内部的最后一期残差对齐到最新时间点导致预测整体平移了一个周期。这个错误常见又隐蔽我在工具内部做了一个自动校准保证预测结果的第一期对应的是真实时间轴上的下一期。7. 常见问题与排查技巧实录7.1 数据频率不规整与缺失值真实世界的数据时间索引很少是干干净净的。我遇到过某传感器的数据平时每小时一条但服务器重启时会丢失几个小时网络波动时会出现重复记录。这种情况下直接用原始数据喂SARIMA模型会在缺失期和重复期产生严重的拟合伪影。处理方案是重采样加插值。先用pandas的resample把时间轴重排到固定频率再对缺失值做插值。我的顺序是先判断缺失比例小于5%用线性插值大于5%用前向填充加平滑如果缺失超过20%直接放弃这个序列任何插值方案都会引入人为主观偏差。有一个细节值得提醒重采样后的数据时间戳要统一成周期结束还是周期开始是会造成后续对齐错误的。日数据的话我习惯用周期开始比如2024-01-01代表这一整天这样预测出的2024-01-31就更好解释。统一了时间轴语义再去做预测制图才不会出现偏移半天的奇怪曲线。7.2 预测值发平使用多步预测时最常见的问题就是预测值很快收敛到一条水平线。根本原因是递归预测一步步把波动的信息吃掉了尤其当季节项设置不当的时候预测几步后就只剩均值加常数。排查思路有两条。一是检查S设置如果数据真的有周期而你S设成了1或者不想传那预测自然没有周期波动看似发平实则是结构错误。二是检查季节参数Q和P是否都在0如果季节部分没有捕捉到周期成分模型会退化成普通ARIMA预测一条直线是必然的。我还遇到过一种情况差分阶数过高导致信息被过度抹平。D2甚至D3的时候反变换回去的预测值会变得异常平滑因为二次差分几乎消灭了所有短期波动。这种情况下把D降到1或者只在季节部分做差分效果往往立竿见影。在工具里这个问题的排查建议我直接写进了报错提示里因为十次里有七次是同一个原因。7.3 模型收敛失败SARIMA模型在拟合时用的是极大似然估计优化算法是BFGS或L-BFGS迭代过程中有可能算法找不到最优解直接报收敛错误。这种报错看着吓人但多数时候问题不大。常见触发原因有三个一是参数组合越界比如p和q加起来超过10估计的参数矩阵过于复杂优化器在数值上不稳定二是数据本身有极端异常值拉高了方差导致似然函数面非常陡峭三是季节周期S设得过大比如只有200个数据点却设S52每个季节段里数据太少参数估计根本没法做。应对办法是在网格搜索的循环里包一层异常捕获。一旦某个参数组合收敛失败直接跳过记录为非候选。另外可以把容忍度调低一点把maxiter调高到100以上很多看似收敛失败的情况其实只是迭代步数不够。实在不行用我前面说的方法关掉enforce_stationarity和enforce_invertibility再拟合一次通常都能跑通。一直在统计建模领域混的朋友应该明白这类收敛问题是玩具代码与生产可用之间的分界线。你让我说这个项目最大的收获我会说不是SARIMA模型本身而是把它从玩具变成工具的整个过程。8. 工具架构与扩展方向8.1 整体模块划分这个工具整体上分三层数据层、模型层、输出层。数据层的职责是读入原始数据做质量检查、重采样、缺失值处理和平稳性检验。它输出的是干净的、固定频率的、平稳或已差分的训练集。模型层的职责是网格搜索定阶、拟合模型、残差诊断。它输出的是一组最优参数、一个拟合好的模型和一份诊断报告。输出层的职责是生成多步预测、计算置信区间、绘制图表、导出CSV。它输出的是业务方能直接看懂的预测报表。三层各干各的活互不渗透。数据层不做预测模型层不画图输出层不碰原始数据这样每一层都能单独替换和测试。我后来在这个基础上扩展过别的模型比如加一个Prophet引擎只需要新增一个模型适配器整个工具的主体架构完全不用动。8.2 与现有平台的对接方式工具做完之后我把它封装成了一个命令行工具和一个Python函数库两者共享同一套核心逻辑。命令行方便数据分析师在服务器上直接跑批量预测Python库方便工程师把预测能力嵌入到更大的自动化流程里。对接最常见的形式是周期性任务。公司有一套数据管道每天凌晨把最新的业务数据同步到数据库管道跑完后触发我的预测脚本预测未来N天的数值把结果写回另一张表BI报表每天早上自动刷新。这个流程跑通以后业务方每天早上打开报表就能看到最新的预测和置信区间不需要任何人工干预。接口设计上有一点很重要输入输出都要用统一的DataFrame结构数据列名固定为time和value。这个约定让不同来源的数据都能顺利进入工具也避免了一堆兼容性分支代码。8.3 后续扩展方向这个工具还有几个值得做的扩展方向提出来分享一下。第一个是加入异常检测模块。SARIMA的预测置信区间天然可以用来判断当前观测值是否异常如果真实值落在区间外说明这个时刻有异常发生。这个功能对运维监控场景特别有用等于一个模型解决预测和告警两个问题。第二个是加入多模型自动选择。现在模型固定为SARIMA但我前面提过单纯靠一种模型打天下不现实。可以把Prophet和简单的Holt-Winters指数平滑也纳入候选让工具在验证集上自动对比三个模型的误差选最优的来输出。预测能力会显著增强。第三个是做参数的自适应更新。模型定好参数后每周有新数据进来时用全量数据重新拟合一次比固定模型参数不管不看来得靠谱。模型漂移是真实存在的尤其业务节奏变了、用户行为变了的时候定期重估是必须的。我个人在实际操作中的体会是做这类工具最容易忽略的不是算法有多高级而是工程上有多少细节容易出错。参数定阶再准数据没洗干净预测一样稀烂预测模型再好置信区间没画对业务照样不信任。把基础流程做实了工具才能真正成为团队里的常备武器。最后再分享一个实用的小技巧无论你用什么模型做时间序列预测都要留一段冷静期。每次拿到一批新数据训练完后不要急着直接用先假装看不到最近一段时间的数据用这批数据做一次回溯预测拿真实的观测值和预测值对比。坚持做这个动作你对模型真实水平的认知会比任何指标都准确。这个习惯是踩过几次坑之后才养成的现在成了我做所有预测项目的固定流程。
阅读完成 · 觉得有帮助?
咨询建站