Random Forest、CNN与NGBoost三强对比:routee-powertrain-model-library 模型架构选型指南

原创2026-10-20 11:45:58879 阅读

Random Forest、CNN与NGBoost三强对比:routee-powertrain-model-library 模型架构选型指南

routee-powertrain-model-library 是由 National Laboratory of the Rockies 维护的开源车辆能耗预测模型库,收录了 495 个预训练模型、覆盖 26 个品牌 71 种车型配置。它基于路段级驾驶条件(车速、坡度、转角、环境温度等)预测车辆在单个路网 link 上的能耗,是 routee-powertrain 路由引擎背后的核心模型目录。库中模型采用三种架构:Random Forest(随机森林)、CNN(卷积神经网络)与 NGBoost(概率梯度提升),本文带你快速看懂三者的差异,并给出选型建议 🧭。

先认识这个模型库:目录即身份

整个仓库采用"路径即模型标识"的设计:每个模型存放在 v2/ 下形如 v2/<品牌>/<车型>/<年份>/<配置>/v1/ 的目录中,包含两个文件:

  • model.onnx —— 推理模型(Random Forest 与 CNN 均导出为 ONNX 格式)
  • model.joblib —— NGBoost 模型采用 joblib 序列化的 Python 原生对象
  • metadata.json —— 完整的模型卡片:输入输出契约、训练溯源、误差指标、内容摘要

例如 v2/audi/a3_ice/2016/rf_base_67ae9982/v1/metadata.json 记录了 2016 Audi A3 随机森林模型的完整契约与测试误差。

根目录的 v2/index.json 是机器可读的全库目录,列出全部 495 个模型的 model_id、feature_names、estimator_type、architecture_tag 与 model_digest,方便程序化检索;人类阅读版本见 README.md 的 Catalog 表格。

💡 关键规则:同一辆车用不同的特征集或变体训练,是不同的 config_slug(配置),而不是不同版本。例如 Audi A3 同时存在 cnn_base_67ae9982 与 rf_base_67ae9982,它们只是架构不同、特征集相同(67ae9982 为特征集哈希)。

三大架构一览:格式、输入与能力对比

维度 Random Forest CNN NGBoost
库中数量 272 个 207 个 16 个
文件格式 .onnx .onnx .joblib
输入方式 逐 link 点预测(lookback: 0) 序列窗口(lookback: 5,按 trip_id 分组,零填充) 逐 link 点预测
输出 能耗点估计 能耗点估计(感知前后路段上下文) 完整概率分布
附加误差指标 RMSE / wRPD / 净误差 RMSE / wRPD / 净误差 额外提供 NLL、CRPS、预测区间覆盖率
典型变体 base、thermal(稳态/瞬态热管理) base stochastic(随机能耗)

以 2016 Audi A3 为例,对比 cnn 版 metadata.json 与 rf 版 metadata.json,两者 estimator 字段差异一目了然:

  • CNN:"lookback": 5, "grouping_column": "trip_id", "pad_strategy": "zero"
  • RF:"lookback": 0, "grouping_column": null, "pad_strategy": "repeat_first"

这意味着 CNN 在预测某个路段时,会同时"看到"该趟行程中前 5 个路段的速度与坡度序列,从而捕捉加减速趋势、连续爬坡等动态效应。

特征集决定精度上限:三个基础哈希 + 专用变体

三种架构共享同一套"base 特征集",用 8 位哈希区分:

特征集哈希 输入特征 说明
67ae9982 speed_mph、distance 最精简,只有速度与距离
fe510e40 speed_mph、grade_pct、distance 加入坡度
d8b7ef3c speed_mph、grade_pct、distance、link_time、link_sinuosity、link_abs_bearing_delta 全量特征,含路段时间、弯曲度、方位角变化

除 base 系列外,库中还收录两类专用 RF 变体(均见 v2/index.json):

  • thermal 系列(如 v2/tesla/model_3_bev/2022/rf_steady_thermal_856e8a60/v1/metadata.json):针对 BEV 增加 ambient_temp_f 环境温度输入,分稳态(steady)与瞬态(transient)两种热管理模式,覆盖 Tesla Model 3/Y、Bolt、Leaf 等车型
  • NGBoost stochastic 系列:仅覆盖 4 种车型(Corolla、Colorado、Model Y、RAV4),输出能量耗费的概率分布而非单一数值

实测误差对比:谁更准?

每个模型的 metadata.json 都自带留出集测试误差(errors 字段)。对全库 495 个模型按架构统计行程级加权相对百分比偏差(trip wRPD):

架构 样本数 中位数 trip wRPD 说明
CNN 207 约 5.1% 序列上下文显著降低误差
Random Forest 270 约 12.2% 点预测基线
NGBoost 16 约 28.1% 点精度最低,但输出概率区间(覆盖率约 97%)

同一辆车、同一特征集下对比更直观。以 Audi A3(特征集 fe510e40)为例:CNN 的行程级 wRPD 约 4.2%,RF 约 9.8%,两者路段级误差(link wRPD)则接近(0.35 vs 0.38)。可见 CNN 的优势主要体现在行程级聚合精度上,而 NGBoost 的"低精度"换来的是不确定性量化能力——其 corolla 的 metadata.json 中 trip_prediction_interval_coverage_probability 高达 0.98,即真实油耗有 98% 的概率落在模型给出的区间内。

选型指南:按场景三步走 🎯

第一步:需要概率输出吗? 做续航规划、电池管理、风险决策("续航够不够"必须给出置信度)时,选 NGBoost stochastic 模型(若目标车型覆盖,如 Model Y、Corolla);否则进入下一步。

第二步:需要感知驾驶动态吗? 当预测精度敏感、且能拿到整段行程的路段序列(有 trip_id 可分组)时,选 CNN base 模型——它是全库精度最高的架构,行程级误差中位数仅为 RF 的一半左右。

第三步:轻量点预测场景 只有单点路段数据、追求跨语言部署便利时,选 Random Forest。所有 RF/CNN 模型均为自描述 ONNX:列顺序、单位、距离列、预测方式都内嵌在 metadata_props 中(如 routee_input_columns),任何支持 ONNX Runtime 的语言都可直接加载,不依赖 Python。

⚠️ 使用注意:predict_method 为 "rate" 的模型输出的是单位里程能耗,需自行乘以距离;且所有预测已按动力总成类型应用"真实世界修正系数"(ICE 1.166、HEV 1.1252、BEV 1.3958),如需未修正值请自行除回。

快速上手:安装与加载

模型库通过 routee.powertrain 包消费,仓库本身即默认注册表,无需额外配置:

pip install routee.powertrain
import routee.powertrain as pt

print(pt.query_available_models(make="tesla", model="model 3"))
model = pt.load_model("tesla/model_3_bev/2022/rf_base_d8b7ef3c")  # 省略版本号自动取最新
model.predict(links_df)  # 输入 link 的 DataFrame,输出每段能耗

print(model) 会打印完整的输入契约(每个特征的名称与单位、距离列、目标、预测方式),方便核对数据准备是否正确。

写在最后

一句话总结三种架构的定位:Random Forest 是万金油基线,CNN 是精度天花板,NGBoost 是概率量化专家。routee-powertrain-model-library 将三者统一在同一套 metadata.json 契约与内容摘要(model_digest)体系下,并通过 v2/index.json 提供全库检索,让"选模型"这件事变得像查目录一样简单。结合 ROUTEE_HF_REVISION 还可将整个库锁定到某一提交状态,保证团队间结果完全可复现 ✅。

登录后查看全文
routee-powertrain-model-library