做车队管理或者长期跑车的人,大概都遇到过这种困惑:同一款车,不同司机开,百公里油耗能差出两三升;同一个人,今天走高速、明天跑市区环路,表显油耗又是一个天一个地。靠加油账本只能做“事后平均”,真正想把油耗成本控制住,必须能在行程开始后不久就预判出“这条路、这个司机、这台车,大概会烧多少油”。神经网络油耗预测系统就是干这个的——它把车速、转速、驾驶行为、路况等传感器数据串起来,用神经网络模型对行程油耗做回归预测。这篇内容我会从数据采集、特征处理、模型选型一直拆到部署落地,适合正在做车联网平台、智能车队调度、油耗成本分析的朋友参考,也欢迎刚接触机器学习的人把它当成一个完整的回归项目样例来读。
1. 为什么先别急着上神经网络:先理解油耗数据的底层逻辑
1.1 油耗不是单点数据,而是一连串事件的结果
我见过不少团队,一拿到“油耗预测”这个需求,第一反应就是赶紧找数据集、调神经网络,结果折腾一个月,模型效果还不如Excel里拉出来的平均车速拟合曲线。问题不在模型,在于很多人把油耗问题理解成了简单的输入输出映射。
真实场景里,油耗是由四类因素共同决定的:路况、驾驶行为、车况、环境。看路况,你不能只看平均速度,同样3公里路程,平均速度都是20km/h,一路绿灯匀速过去和每隔100米一个红灯起步停机,油耗完全是两个数量级。看驾驶行为,不能只看“他开得快不快”,急加速、急减速、长时间怠速开空调,这些操作对油耗的影响往往是叠加的。看车况,胎压、载重、发动机冷却液温度、氧传感器状态,每一项都在持续波动。环境就更不用说了,环境温度直接决定冷启动阶段的喷油加浓时长,冬天和夏天同样的路能差到10%以上。
这些因素凑在一起,意味着油耗数据天然是时间序列数据,而且各个变量之间存在明显的非线性耦合。举个例子,发动机转速2000rpm的时候,油耗率可能是6L/h,但如果同时处于爬坡、空调开启、满载状态,这个数字完全可以翻倍。传统线性回归很难把这些交互项都表达清楚,树模型虽然能表达非线性关系,但对原始序列中“先堵车后通畅”这种时序依赖无能为力。
1.2 神经网络与统计回归、树模型的实际对比
我在项目里通常会把方案分成三个梯队做对比,而不是一上来就吊死在一棵树上。
| 模型类型 | 非线性能力 | 时序模式捕捉 | 可解释性 | 数据量需求 | 部署成本 |
|---|---|---|---|---|---|
| 多元线性回归 | 弱 | 无 | 强 | 低 | 极低 |
| 随机森林 / XGBoost | 较强 | 需手工构造时序特征 | 中 | 中 | 低 |
| 神经网络(LSTM/CNN等) | 强 | 强 | 弱 | 高 | 中高 |
在项目初期,我会用随机森林跑一版基线,因为树模型容错率高、特征重要性可以直接用来做探索分析,能快速告诉我们哪些字段真正有信息量。随后再对比神经网络是否显著超过基线。只有当树模型加上复杂时序特征后仍然达不到业务精度,或者是预测场景本身就存在强时序依赖(比如预测剩余行程油耗、动态驾驶行为序列),我才会把神经网络作为主力方案。
这不是故弄玄虚,而是要给业务方一个交代:神经网络不是万能魔法,把特征工程做好之后,如果随机森林已经能做到MAE在0.8L/100km以内,那完全可以直接用树模型上线,省掉大量训练和部署成本。反之,如果业务方明确要的是“根据过去十分钟的驾驶序列,预测未来半小时的油耗”,神经网络就是更合理的选择,因为它的输入天然是时间窗口,而不是一堆压缩后的统计量。
2. 数据采集与预处理:决定模型上限的永远是数据质量
2.1 核心数据源与字段清单
油耗预测系统的数据源一般分四块:OBD车辆数据、GPS轨迹数据、加速度数据、环境与业务数据。实际项目里,OBD数据基本都从车载诊断口采集,标准的PIDs协议能读出车速、发动机转速、冷却液温度、进气温度、节气门开度、瞬时油耗率等;GPS模块提供经纬度和海拔;加速度计负责捕捉车辆的纵向和横向运动状态。
我先列一份我经常用到的字段清单,大家做数据管道的时候可以对照检查:
| 数据源 | 字段 | 采样频率 | 用途说明 |
|---|---|---|---|
| OBD | 车速 (km/h) | 1Hz-10Hz | 行程距离、工况识别 |
| OBD | 发动机转速 (rpm) | 1Hz-10Hz | 高转速占比特征 |
| OBD | 冷却液温度 (°C) | 1Hz | 冷启动与暖机状态判断 |
| OBD | 进气温度 (°C) | 1Hz | 环境温度近似值 |
| OBD | 节气门开度 (%) | 1Hz-10Hz | 驾驶行为激烈程度 |
| OBD | 瞬时油耗率 (L/h) | 1Hz-10Hz | 预测标签计算基础 |
| GPS | 经度/纬度/海拔 | 1Hz | 轨迹与坡度计算 |
| 加速度计 | 纵向加速度 (m/s²) | 10Hz-50Hz | 急加速急减速识别 |
| 业务系统 | 载重、路线类型、车型 | 行程粒度 | 辅助特征 |
这里有个特别容易踩坑的地方:OBD里的瞬时油耗率字段,单位通常是L/h,也就是单位时间的燃油流量,不是直接意义上的百公里油耗。想要得到行程总油耗,必须把瞬时油耗率按时间积分;想要得到百公里油耗,再用“总油耗除以总里程乘以100”。很多新手直接拿瞬时油耗率当成回归目标去训练,模型输出和业务口径对不上,后面一验证就傻眼。
2.2 时间对齐与脏数据处理经验
多源数据放在一起,第一件麻烦事就是时间戳对齐。OBD设备可能10Hz采一次,GPS模块1Hz采一次,加速度计又是另外的频率,如果设备支持时间戳同步还好,不支持的时候就得靠重采样处理。我的做法是统一把时间对齐到1Hz网格,优先用前向填充,因为车辆物理量在1秒内的变化本来就有限,前向填充比线性插值更不容易引入虚假波动。
脏数据过滤也需要一套明确规则。比如车速为负、发动机转速突然超过8000rpm、纵向加速度超过2个g,这些明显是传感器跳变或异常记录,直接剔除或标记即可。需要特别留意的是燃油切断工况——下坡或滑行时,喷油嘴会短暂断油,瞬时油耗率几乎为0。很多清洗脚本会把“油耗率为0但转速很高”的情况当成异常删掉,这其实是错误的。断油过程是真实存在的省油机制,如果在预处理阶段全部删掉,模型就学不到滑行省油的特征了。
GPS海拔数据也是一个坑,民用GPS海拔误差可以到±10米以上,直接算坡度会得到一堆噪音。经验是用滑动窗口中位数滤波,窗口长度建议5到10秒,再做差分得到坡度特征。不要用水滴石穿的思路把海拔精细到每一米,那既不真实也没意义。
2.3 单次行程样本怎么切分
数据清洗完之后,下一步是把连续时间流切成“行程”(Trip)。一次行程从点火开始到熄火结束,冷启动阶段、匀速巡航阶段、停车熄火前的怠速阶段,都要被完整保留。
切好行程后,还需要考虑预测任务的样本形态。如果要做整段行程的油耗预测,可以把一次行程整体作为一个样本:输入是前10分钟的数据窗口,输出是整个行程的总油耗或百公里油耗。这时候又要做滑动窗口增强,比如每隔30秒滑动一次,每个行程能产出多个重叠窗口样本,样本量一下子就上来了。要注意的是,同一个行程切出来的窗口,在划分训练集和测试集时必须归到同一边,不能一个行程的窗口一部分在训练集、一部分在测试集,否则重叠窗口会带来严重的信息泄露,模型评估结果会虚高得离谱。
3. 特征工程:将驾驶行为、路况、车况翻译成特征向量
3.1 基础统计特征设计
如果说数据清洗决定了数据能不能用,那特征工程就直接决定了模型能学到什么。神经网络虽然号称能自动提取特征,但绝不代表输入原始数据扔进去就万事大吉。尤其是油耗预测这种样本量通常只有几千到几万条的场景,合理的统计特征能大幅降低学习难度。
我会针对每个时间窗口计算以下几组统计特征:
- 速度特征:平均车速、速度标准差、最大车速、中位数车速、车速百分位数(P10/P50/P90)
- 加速度特征:平均纵向加速度、加速度标准差、急加速次数(纵向加速度>0.25g)、急减速次数(纵向加速度<-0.25g)
- 怠速与停车特征:怠速时间占比、停车次数、连续停车超过30秒的次数
- 发动机特征:平均转速、高转速(>3000rpm)时间占比、平均节气门开度、冷却液温度均值
- 时间特征:从点火到当前窗口的时间、当前时刻(上午/下午/夜间)
这些特征不是拍脑袋定的,背后都对应着实际物理含义。比如“速度标准差”表达的是一段路开得顺不顺,高速巡航时的速度标准差很小,市区走走停停就很大;“急加速次数”直接反映司机的驾驶风格,同样一段路,激进司机可能产生5次急加速,温和司机可能一次都没有。
3.2 驾驶行为与路况衍生特征
统计特征之上,我更推荐做两个“高信息密度”的衍生特征:速度-加速度联合分布矩阵和驾驶激烈程度指数。
速度-加速度联合分布的思想很简单:把速度划分成若干箱(比如0-10、10-20、20-40、40-60、60-80、80-120km/h),加速度也划分成箱(比如<-0.25g、-0.25~0.25g、>0.25g),然后统计这个时间窗口内每一格的时间占比。这样得到的是一个6乘3的特征矩阵,描述的是“车速和加速度的组合工况”。为什么这个矩阵比单纯的平均速度更强?因为同样平均速度20km/h,如果速度-加速度分布集中在低速加小加速度区域,说明是匀速蠕行;如果分布横跨低速急加速和急减速区域,说明是走走停停的拥堵路况,这两种工况的油耗差距非常大,但平均速度完全无法区分。
驾驶激烈程度指数可以用加权和计算:急加速次数乘以权重、急减速次数乘以权重、高转速时间占比乘以权重,累加归一化得到一个0到1之间的值。这个指数对司机画像、驾驶行为评分非常有用,也方便后期向业务方解释模型输出。
另外要说一个细节:如果预测目标是整段行程的百公里油耗,直接把“瞬时油耗率”字段切掉不用,只保留上述特征。否则模型训练时容易偷懒——它直接学会用瞬时油耗率的积分去估算总油耗,看起来准确率很高,一换成真实场景(预测时瞬时油耗率还在未来,拿不到)就彻底失效。做特征筛选时永远要记住:预测时能拿到的字段才能进模型。
3.3 归一化与特征筛选的实操细节
归一化在神经网络训练里非常关键。油耗特征数量级差异很大,比如冷却液温度是几十,发动机转速是几千,瞬时油耗率可能只有几,不归一化直接喂给神经网络,梯度更新会被量级大的特征主导。
我常用的两个scaler:
- MinMaxScaler:数据分布比较均匀时首选,把特征映射到[0,1]区间
- RobustScaler:数据存在异常值时更稳,因为它基于中位数和四分位距,不被极端值带偏
归一化有个所有新手都会犯的错:拿全量数据的统计量去fit scaler,然后再切训练测试集。正确做法是只对训练集调用fit_transform,测试集和验证集用训练集的scaler做transform。否则测试集的信息已经渗透到了训练过程中,模型评估结果就不可信了。
特征筛选用什么方法?我的习惯是先用随机森林跑一版,看特征重要性排序,再把重要性极低且相关性很高的特征删掉。注意,特征重要性只能作为初筛参考,不能完全取代验证集评估。有时候两个特征单独看都不重要,但它们组合起来却有很强的区分能力,这类交互特征在重要性排序里可能不显眼,但神经网络会学到。所以我的流程是:粗筛稀碎特征 -> 保留候选特征集 -> 在验证集上做消融对比,每次都多花一点时间,但能避免因为过度特征筛选损失有效信息。
4. 神经网络模型构建:BP、LSTM、一维卷积怎么选
4.1 三种网络结构对比与适用场景
确定特征之后,真正的模型选择才开始。我见过很多团队盲目使用两层LSTM打天下,其实不同网络结构适合不同形态的输入数据。
| 网络结构 | 最佳输入形态 | 优点 | 劣势 | 适合的油耗场景 |
|---|---|---|---|---|
| BP全连接网络 | 窗口统计特征向量 | 结构简单、训练快、易部署 | 无法利用序列内部结构 | 行程级油耗预测,特征工程足够强时 |
| LSTM/GRU | 原始时间序列矩阵 | 能记忆长程依赖 | 训练慢、小样本易过拟合 | 预测剩余行程油耗、动态油耗曲线 |
| 一维CNN | 原始时间序列矩阵(或特征矩阵) | 训练快、能提取局部模式 | 长程依赖不如LSTM | 识别连续的急加速/滑行片段 |
| Transformer/注意力 | 时序序列 | 效果上限高 | 数据需求大、部署重 | 数据量很大、算力充足时 |
我的建议是分成两条路线:如果业务只需要一个行程级别的百公里油耗预测,BP网络加上扎实的统计特征就够了;如果要做的是“根据过去10分钟驾驶行为预测接下来20分钟的瞬时油耗曲线”这类动态任务,LSTM或一维CNN才是合适的选择。
4.2 LSTM油耗预测模型的结构设计示例
这里给一套我项目里常用的LSTM结构,作为参考起点。假设输入是一个时间窗口,窗口长度T=120秒,每个时间步包含18个特征字段,输出是之后一段时间内的平均油耗率或总油耗。
模型设计成两层LSTM加两个全连接层:
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense, Dropout model = Sequential([ LSTM(64, return_sequences=True, input_shape=(120, 18)), Dropout(0.2), LSTM(32, return_sequences=False), Dropout(0.2), Dense(16, activation='relu'), Dense(1, activation='linear') ]) model.compile(optimizer='adam', loss='mae', metrics=['mae']) model.summary()两个容易忽略的细节:第一,两层LSTM堆叠时,第一层必须设置return_sequences=True,不然输出不会保留时序维度,第二层根本接收不到序列输入,代码跑起来会直接报维度不匹配的错;第二,回归任务的输出层用linear激活,不要用relu更不要用sigmoid,后者会把输出限制在[0,1]区间,完全不符合油耗的真实量纲。
一维CNN的输入形状和LSTM一样,都是(窗口长度, 特征数),区别只是把LSTM层换成Conv1D加MaxPooling。如果项目对推理时延敏感,或者训练数据量不大,一维CNN往往比LSTM更省心。
4.3 训练配置:损失函数、优化器与学习率
训练配置看着不起眼,实际对模型效果影响巨大。先说损失函数,回归任务最常见的是MSE和MAE,我通常优先选MAE。原因是油耗数据里偶尔会出现极端样本,比如雨雪天、严重拥堵、拖车工况,MSE会对这些离群值施加平方级惩罚,模型会把大量容量用来迎合这些少数点,正常工况的预测精度反而被拖垮。MAE对离群值更稳健,虽然梯度恒定没有MSE收敛快,但结果更符合业务预期。
如果一定要兼顾收敛速度和稳健性,Huber Loss也是个好选择,它在误差较小时表现为MSE,误差较大时切换成MAE,需要额外调一个阈值参数delta。
优化器直接用Adam,初始学习率1e-3基本够用。如果训练过程中验证损失震荡厉害,可以把学习率降到5e-4,或者加ReduceLROnPlateau回调,当验证损失连续5个epoch不下降时自动把学习率缩小一半。早停策略一定要加,监控验证集MAE,设置patience=10,让训练在验证集不再改善时自动停下,并恢复最佳权重。经验之谈:训练曲线里训练loss一直降、验证loss在某个点开始反弹,就是过拟合的开始,早停能避免把大量时间耗在无效迭代上。
5. 模型训练与效果评估:别被“高准确率”骗了
5.1 时间序列数据划分与信息泄露防范
很多刚接触这个项目的人,习惯性用train_test_split(random_state=42)把数据随机划分,这在普通分类问题里没问题,但在时序数据里是致命的。
油耗数据本质是按时间连续采集的,前后样本之间存在强相关性。正确的做法是:按时间排序,比如取前80%的时间段做训练集,后20%做测试集,中间留出一小段缝隙(比如一周)作为过渡缓冲。这样模拟的是真实使用场景——“用上周及之前的数据训练,预测下周的油耗”。
如果做到了行程级别的滑动窗口,还要额外注意另一个泄露来源:同一行程的不同窗口会因为重叠而具有高度相似的输入特征。划分时必须让整个行程的所有窗口进入同一侧,严禁按窗口随机打散。我曾在项目里没注意这一点,验证集MAE看起来非常漂亮,后来发现是因为测试集里混入了同行程重叠窗口,模型相当于已经“见过”部分未来数据。调整划分方式后误差直接翻倍,那才是真实水平。
归一化同理,scaler只用训练集数据fit。有时候为了省事直接scaler.fit_transform(X)全量归一化,最后模型评估结果虚高得离谱,上线后才发现真实误差远大于预期,千万别踩。
5.2 评估指标选择:MAE、RMSE、MAPE 怎么看
模型评估阶段,我会同时看四个维度:
- MAE(平均绝对误差):最直观,单位与油耗一致。预测百公里油耗时,MAE在0.6-1.0L/100km之间算可接受,低于0.5就相当不错了。
- RMSE(均方根误差):对大误差敏感,如果业务对极端误差容忍度低,比如预测不准会影响路线调度安排,就要盯牢RMSE。
- MAPE(平均绝对百分比误差):直观体现误差比例,但真实油耗接近0时会爆炸,要注意甄别异常样本。
- 分组误差分析:按高速、市区、拥堵、冷启动四种场景分别计算MAE,定位模型在哪些场景下失效。
还要画一张“预测值vs真实值”散点图,理想状态下点应该分布在对角线附近。如果点在中段偏离对角线且呈喇叭状扩散,说明模型对中等工况的预测能力不足,可能需要更多特征或调整窗口长度。
5.3 过拟合观察与早停策略
神经网络在样本量只有几百次行程的小数据集上非常容易过拟合。判断依据很简单:训练损失持续下降但验证损失停步不前甚至上升,就是过拟合信号。
防过拟合按优先级做这几件事:
- 增加Dropout层,比率从0.2起步调整
- 降低模型层数或神经元数量,不要一来就上大模型
- 增加L2正则化,对全连接层施加很小权重惩罚
- 扩充训练样本,比如对加速度序列添加少量高斯噪声,模拟不同驾驶风格的偏差
- 使用早停,
patience=10到patience=15
另外一个容易忽略的点:验证集要按工况分层抽样。如果实际业务中的样本以高速巡航为主,而验证集也以高速为主,模型在市区场景的表现就被淹没了。我会手动保证验证集里高速、市区、拥堵、冷启动各占一定比例,这样才能真实反映模型在实际业务中的表现。
6. 部署落地与持续迭代:预测值要能进业务系统
6.1 车载终端边缘部署与云端服务结合
模型训出来只是第一步,真正值钱的是它能以多快的速度、多低的成本渗透到业务流程里。部署方案要看算力环境和业务时延需求。
一种情况是车载终端本地推理。车辆OBD采集盒子本身带一块嵌入式芯片,如果要在司机端实时提醒“当前驾驶风格油耗偏高”,就不能等数据上传云端再返回结果,必须本地跑推理。这时候建议用TensorFlow Lite或者ONNX Runtime把模型转换压缩,必要的话做INT8量化,预测误差会略增,但模型体积和推理时延能大幅下降。
另一种情况是云端批量推理。数据上车后回传平台,平台按行程批次计算油耗预测结果,用于司机评分、路线优化、油耗异常预警。这种场景不追求毫秒级时延,重点是模型可以频繁更新,且能和其他业务数据做关联分析。云端服务可以用TensorFlow Serving或者FastAPI包一层轻量接口,把特征拼接、模型推理、结果写库串成一条流水线。
我实测下来,边缘部署适合只部署一个精简模型(比如BP网络),把复杂模型保留在云端做离线分析;小盒子根本没有资源跑大LSTM,强行部署只会让采集任务本身变慢,影响数据源头的稳定性。
6.2 模型漂移监测与定期重训练
油耗预测系统上线后最大的坑不是预测不准,而是过一段时间就“悄悄变不准”。原因很简单,车辆会换新车型、司机驾驶习惯会变、路线结构会随着城市建设调整、季节切换也会带来冷启动油耗突变,模型输入分布和真实标签分布都在缓慢漂移。
所以必须有一套监测机制。最简单有效的做法是:每天统计线上预测值与实际值的滑动平均误差,比如记录最近14天MAE和MAPE。如果连续7天MAPE上涨超过2-3个百分点,就触发重训练流程。重训练不是简单地把新数据拼进去跑一遍,而是要做样本时间衰减加权,让近期样本的权重更高,否则几个月前的冬天数据会在夏天背景下降噪掉一部分有效信息。
季节切换尤其要注意,模型在夏天预测冬季冷启动场景必然误差大,反过来也一样。有条件的话,每年换季时单独加训一版“季节模型”,比指望一个模型全年通吃更可靠。
6.3 一条完整的预测流水线长什么样
给个实际项目里的典型流程,大家在设计系统时可以照葫芦画瓢:
- 车端采集OBD、GPS、加速度数据,本地缓存并做初步压缩。
- 行程结束后或实时上传原始序列到平台。
- 数据处理服务清洗、重采样到1Hz,给行程打上唯一标识。
- 特征工程模块将行程切窗,计算统计特征和衍生特征。
- 模型服务加载神经网络权重,对每个窗口执行推理。
- 聚合窗口级预测得到行程级油耗预测结果,写入业务数据库。
- 业务系统读取预测结果,推送给司机端App或管理端报表。
- 定期用真实加油量和OBD积分油耗校验模型表现,必要时触发重训练。
这套流程看起来简单,但每一步都可能出错,尤其是特征工程和模型服务之间的接口,字段顺序、归一化参数、窗口长度必须完全一致。我见过不止一次模型训练时正常、部署后结果全乱的情况,排查下来都是因为特征管道在训练和推理两边用了不同的实现。
7. 实操中踩过的坑与问题速查表
7.1 常见问题排查实录
把我在实际项目中遇到的典型问题整理成一张表,供大家排查时对照。
| 问题现象 | 可能原因 | 排查思路 | 解决方案 |
|---|---|---|---|
| 预测结果总在训练集均值附近 | 特征信息不足,或样本严重不均衡 | 检查模型对极端工况的预测精度 | 增加驾驶行为特征,按工况分层训练 |
| 训练损失下降,验证损失不动 | 模型容量过大,特征与目标关系弱 | 看训练曲线是否过拟合 | 减小模型、加Dropout、做特征筛选 |
| 测试集表现极好,上线效果崩盘 | 训练测试划分泄露或scaler全量fit | 检查行程级窗口是否跨集合 | 按时间切分,scaler只用训练集fit |
| GPS海拔噪声导致坡度特征异常 | 民用GPS海拔误差大 | 看海拔序列是否毛刺明显 | 滑动窗口中位数滤波后再差分 |
| 冷启动阶段预测误差偏大 | 模型缺少“点火后时长”特征 | 单独看冷启动区间的误差 | 增加点火计时特征,或单独训练冷启动模型 |
| 同一次行程窗口预测值差异很大 | 窗口内特征波动大,模型不稳 | 查看窗口特征方差 | 增加滑动窗口长度或做预测值平滑 |
| 设备时间戳漂移导致数据错位 | 车载设备时钟不准 | 对比GPS时间戳 | 以GPS时间为基准对齐,设备端启用NTP同步 |
7.2 调参心得与迭代节奏管理
最后分享一些我个人的调参心得,这些都很难在教科书里找到现成答案。
第一,先定问题再调参。同样是油耗预测,“预测整段行程百公里油耗”和“预测未来20分钟瞬时油耗率”是完全不同的任务,前者适合用统计特征加BP或树模型,后者才适合用时间序列模型。方向错了,后面所有调参都是白费功夫。
第二,特征工程增幅远大于网络结构升级。我用同样的LSTM结构,只把“速度-加速度联合分布矩阵”加进去,验证集MAE下降了约15%;但把LSTM从一层加到三层,只降了3%。所以遇到效果不达预期,优先从特征端找突破口,不要幻想换更大的模型能解决问题。
第三,永远保留一个最烂的基线模型。我在所有油耗项目里都会先计算最近30天单车油耗中位数,拿它当“瞎猜基准”。任何模型如果连这个基线都干不过,说明输入特征和预测目标之间的相关性还没有被有效利用,继续优化模型的边际收益很低,应该回头补数据管道。
第四,模型到期要优雅退役。每次新版本模型上线前,保留旧版本并行运行一段时间,用线上AB对比确认新版不会在某些工况上突然变差。别急着删旧模型,我经历过好几次新模型整体MAE更优、但某一类特殊路况误差爆炸的情况,如果没有旧模型兜底,业务影响会很难收场。
油耗预测这个系统,说到底不是“训练一个模型”就完事了,而是一个数据采集、特征工程、模型迭代、业务反馈的闭环。把闭环跑稳了,神经网络才能发挥它的真正价值;否则再先进的网络结构,也只是在一个脏乱差的数据管道上徒增复杂度。