Random Forest、CNN与NGBoost三强对比:routee-powertrain-model-library 模型架构选型指南
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 还可将整个库锁定到某一提交状态,保证团队间结果完全可复现 ✅。