简介
近年来,我国新能源汽车行业出现蓬勃发展的态势。主机厂曾经收集了大量的电动车的车联网数据,包含三大类(动态车辆数据、实时处理数据和实时车辆告警数据)160 多项数据。主机厂心愿从这些数据中失去报警的统计和剖析,并且心愿延长到报警的预测,能够及时召回可能产生故障的车辆或者被动推送更新软件到车端进行修复,升高电池事变造成的损失,晋升客户的满意度。
本篇介绍了如何利用 Amazon Web Services 的服务组件疾速搭建电动车电池告警预测平台,包含存储海量测试数据,构建基于 XGBoost 分类算法的电池故障报警预测模型,推理预测数据以及可视化的数据展现。
代码仓库
https://github.com/aws-sample…
架构概述
该解决方案是基于数据驱动来对电池单体一致性偏差报警事件进行预测,借助于 Amazon SageMaker,您能够疾速便捷地构建本人的机器学习模型(如 XGBoost,递归神经网络等),并实现模型训练,模型推理。该解决方案中应用 Amazon DynamoDB 和 Amazon S3 来存储预测事件的输出和推理后果。当您部署完该解决方案后,在 SageMaker Notebook 中会预置一个基于 XGBoost 二分类的机器学习模型脚本(xgboost_beginner.ipynb)以及样例数据(series_samples.csv),运行该机器学习脚本能够实现预测模型的疾速构建和主动部署。本解决方案反对的推理事件有两种形式:其一为用户间接应用 POST 申请携带输出特色数据获取推理后果,该形式是基于 Amazon API Gateway 和 Lambda 实现;其二为用户上传收集到的批量电池数据(能够来源于您 on-premise 数据库,或实时车辆网收集到的电池数据)至 Amazon S3 桶,数据上传事件会主动触发 Lambda 进行推理。所有的 POST 申请推理和 S3 上传事件触发的推理均能够通过 Apache Superset 进行可视化,它是由 Fargate 进行承载,不便您实时查看具体的电池单体一致性偏差报警事件。架构图中各个组件之间的关系用连贯箭头示意,其具体含意别离为:
- 主机厂或电池厂商将采集的电池数据上传至 S3 桶中,用于模型建模和训练;
- SageMaker Notebook Instance 获取电池数据;
- 在 SageMaker Notebook Instance 中实现模型建模,训练和部署,部署后的 Inference Model 是一个 Runtime Endpoint,它用来提供预测推理服务;
- 利用场景一:车辆网上传的数据推送到的 S3 桶,S3 桶中新减少的 Batch 数据即为须要推理的数据;
- 利用场景一:新减少的 Batch 数据主动调用 Lambda 进行转发申请;
- 利用场景一:Lambda 调用 SageMaker Runtime Endpoint 进行前向推理;
- 利用场景一:前向推理的后果写入到 Dynamo DB 进行存储;
- 利用场景一:前向推理的后果写入到 S3 进行存储(供 Superset 可视化);
- 利用场景二:用户调用 API 进行前向预测推理,用户采纳 POST 调用;
- 利用场景二:API Gateway 将申请路由到 Lambda 函数;
- 利用场景二:Lambda 调用 SageMaker Runtime Endpoint 进行前向推理;
- 利用场景二:前向推理的后果写入到 Dynamo DB 进行存储;
- 利用场景二:前向推理的后果写入到 S3 进行存储(供 Superset 可视化);
- Superset 后盾部署在 Fargate Service, 基于 SQL 数据查问拜访实时推理后果的数据;
- Amazon Athena 从 Glue Data Catalog 中的数据库和表中查问数据;
- Glue Data Catalog 的表格 Schema 是对预测后果 S3 桶中记录的定义。
解决方案部署
部署能够在北京区、宁夏区、美东一区进行,若在国内部署须要开明 ICP Exception。能够间接基于 Cloudformation 部署,cloudformation 的模板下载链接进行,创立堆栈时参数放弃默认值即可。
美东一区:
https://aws-gcr-solutions.s3….
中国区(宁夏 / 北京):
https://aws-gcr-solutions.s3….
数据分析 / 模型训练 / 模型部署
在解决方案部署实现之后,在 SageMaker 控制台中会创立一个笔记本实例。内置 XGBoost 的脚本和电池样例数据集,用户在实在应用场景中能够基于本身的电池数据集来进行模型构建,训练和部署。
关上 SageMaker 控制台,能够看到部署之后预置的笔记本实例:
点击 [关上 Jupyter],进入界面如下:
关上 xgboost_beginner.ipynb,顺次执行每一个代码块,便能够逐渐进行数据加载,各维度数据分析与可视化,数据集划分,XGBoost 分类模型构建与训练,模型主动部署,模型性能测试等一系列操作。
样例数据集中蕴含了“车架号 VIN”,“采集工夫 Date”,“总电压(V)”,“总电流(A)”,“电池单体电压最高值(V)”,“电池单体电压最低值(V)”,“最高温度值(℃)”,“最低温度值(℃)”信息。最初一列的 Label 表征数据在该天是否产生了电池单体一致性差报警,0 示意没有报警,1 示意产生报警。在 xgboost_beginner.ipynb 脚本中,选取历史 14 天的样本并聚合在一起造成一个 14*6 维度的特征向量,基于该向量预测将来 14 天内是否呈现电池一致性差报警,此问题被形象成一个二分类问题。
在构建模型输出数据集时,首先将历史特色聚合成一个大的向量,并将将来 14 天内的电池一致性报警标签进行聚合,举例说明:对于第 x 天而言,第 x -14 天(含)到第 x - 1 天(含)这共计 14 天的特色(维度为 6)聚合成一个 84 维度的特征向量;若第 x 天(含)到第 x +13 天(含)这将来 14 天呈现电池单体一致性报警,则该特征向量对应的分类标签为 1;反之为 0。通过滑窗操作对所有数据执行上述操作,提取所有的样本,再依照 4:1 划分为训练集和验证集。
实现模型训练后能够看到训练迭代过程中的 error (loss)逐渐收敛,如下图所示:
模型部署须要 5 分钟左右,放弃脚本中的 sm_endpoint_name 参数不变即可,在解决方案中 lambda 函数会以此名调用 Sagemaker endpoint:
在 XGBoost 模型部署实现之后在 SageMaker 终端节点中会呈现如下处于“InService”状态的推理节点。
继续执行 xgboost_beginner.ipynb 的代码块,能够对电池故障报警分类算法的性能作出评估,采纳的性能指标包含:
- 真阳(True Positive): 实际上是正例的数据被分类为正例
- 假阳(False Positive): 实际上是反例的数据被分类为正例
- 真阴(True Negative): 实际上是反例的数据被分类为反例
- 假阴(False Negative): 实际上是正例的数据被分类为反例
- 召回率(Recall): Recall = TPR = TP / (TP + FN), 掂量的数据集中所有的正样本被模型辨别进去的比例
- 准确率(Persion): Persion = TP / (TP + FP), 掂量的模型辨别进去的正样本中真正为正样本的比例
- 假阳率(False Positive Rate, FPR): FPR = FP / (FP + TN), 掂量的是 被错分的反例 在所有反例样本中的占比
基于不同分类阈值绘制出 ROC 曲线(FPR-TPR),当抉择的阈值越小,其 TPR 越大,FPR 越大;ROC 曲线下的面积约靠近 1.0 阐明模型越优。下图为示例数据训练后在验证集上的性能出现。
基于 POST 申请调用触发推理
在 SageMaker 推理节点部署胜利后,你能够通过 HTTP POST 申请来调用电池预测推理服务,POST 数据中携带特色数据,在该解决方案中以 14 天数据为特色,每一天蕴含“总电压(V)”,“总电流(A)”,“电池单体电压最高值(V)”,“电池单体电压最低值(V)”,“最高温度值(℃)”,“最低温度值(℃)”这六个维度的特色,共计 84 维数据,POST 申请地址为 cloudformation 部署诚征的 API Gateway 地址后加上“inference”路由。基于 curl 调用示意如下所示:
curl --location --request POST 'https://<your_api_gateway_route_address> /inference' \
--header 'Content-Type: text/csv' \
--data-raw '{"vin":"1DS7KPXR9HJU3MB6L","date":"2018-02-11","features":"3.384580459770114658e+02,8.701149425287356687e-01,3.532045977011495363e+00,3.516270114942528391e+00,2.154597701149425149e+01,1.897701149425287426e+01,3.398913612565444851e+02,-6.835078534031412412e-01,3.543062827225131439e+00,3.532743455497382445e+00,2.099476439790576165e+01,1.978534031413612482e+01,3.402831125827814844e+02,-5.124999999999998446e-01,3.547005794701986403e+00,3.537400662251656058e+00,2.720033112582781953e+01,2.516390728476821081e+01,3.407290270270270298e+02,-8.411351351351350480e-01,3.551178918918919791e+00,3.541806486486486882e+00,2.770324324324324650e+01,2.623675675675676189e+01,3.402226449275361801e+02,-5.949275362318843241e-01,3.546726449275362736e+00,3.536807971014492402e+00,2.436594202898551131e+01,2.247463768115942173e+01,3.403696066746126121e+02,7.842669845053640287e-02,3.548485101311084744e+00,3.537239570917760201e+00,2.264600715137067866e+01,2.049463647199046434e+01,3.404395087001022944e+02,-7.123848515864886211e-02,3.549054247697031705e+00,3.538847492323438981e+00,2.271340839303992354e+01,2.069907881269192274e+01,3.408940234791888315e+02,-3.463180362860191486e-01,3.553680896478121021e+00,3.543157950907150688e+00,2.316648879402347916e+01,2.132337246531483643e+01,3.408360576923076906e+02,1.437499999999999889e-01,3.552947115384615273e+00,3.542481971153845777e+00,2.368870192307692690e+01,2.163942307692308020e+01,3.407270958083831829e+02,-7.137724550898206788e-01,3.552561377245509355e+00,3.539895209580837587e+00,2.052095808383233688e+01,1.858532934131736170e+01,3.412096446700508068e+02,1.184433164128595624e-02,3.556835025380711723e+00,3.546649746192892749e+00,2.414890016920473670e+01,2.245685279187816974e+01,3.421997359735972850e+02,5.627062706270629100e-01,3.567919471947194943e+00,3.558117491749174466e+00,2.529174917491748786e+01,2.353729372937293363e+01,3.405827586206896171e+02,-5.479623824451408387e-01,3.549921630094044378e+00,3.538965517241378755e+00,2.196238244514106697e+01,2.023824451410658654e+01,3.414845094664372027e+02,-1.037693631669534877e+00,3.560283993115317625e+00,3.548870912220310370e+00,2.196385542168674831e+01,1.999311531841652467e+01"}'
基于 S3 桶批量数据上传触发推理
此解决方案还反对批量数据预测,测试数据能够从下方地址下载:
https://github.com/aws-sample…
将此数据上传至部署账户中名为 bev-bms-infer-<region_name>-<account_id> 的 S3 桶中(该桶在部署时曾经主动创立),数据上传事件会主动触发推理。
推理后果会实时写入到 DynamoDB 数据表中,如下所示:
Apache Superset 配置
此解决方案基于 Apache Superset 来对预测的电池单体一致性偏差报警事件进行可视化,首先关上 Cloudformation 部署胜利后的输入链接,如下所示:
登录用户名和明码均为 admin.
点击[Source]à[Databases],如下图所示:
点击右上角 + 号,创立 Database,如下图所示:
增加 Database,Database 处输出“demo”, SQLAlchemy URI 处输出:
“awsathena+rest://@athena.< region_name>.amazonaws.com.cn/default?s3_staging_dir=s3://bev-bms-events-<region_name> -<account_id >/query”
输出实现后能够点击 [TEST CONNECTION] 测试连通性,确认能够与 Amazon Athena 相连通。
滚动到最上面,点击[Save],呈现如下界面:
推理事件可视化
点击 Superset 页面顶端导航栏[SQL Lab]à[SQL Editor],左侧顺次抉择 Database, Schema, Table, 在 SQL 查问输出栏中输出查问语句,如:
SELECT "request_id",
"vin",
"date",
"predicted_prob",
"total_voltage_1",
"total_current_1",
"cell_max_voltage_1",
"cell_min_voltage_1",
"max_temperature_1",
"min_temperature_1"
FROM "battery-consistency-bias-alarm-prediction-glue-database"."battery-consistency-bias-alarm-prediction-events"
LIMIT 100
查问后果如下图所示:
点击上图中的 [EXPLORE],抉择排序形式为依据预测报警概率从高到低排序,如下图所示,能够清晰地看到推理后果中电池单体一致性偏差报警概率高的车辆 VIN 码,日期等信息。
用户能够编写其余 SQL 语句来查询数据库表中的推理事件,如针对某一辆车,某个日期进行查问,等等。
总结
此解决方案提供了在亚马逊云上构建电动汽车电池单体一致性偏差预测解决方案,并提供 REST API 调用推理和批量数据推理性能,最初还反对应用 Apache Superset 进行推理后果可视化出现。该解决方案实用于主机厂(OEM)或电池供应商来对电动汽车的电池衰弱状况进行监测和预测,同时实用于具备自主开发需要的 OEM 或电池供应商,能够基于该解决方案来自行开发算法模型,实现疾速生产部署。
本篇作者
徐高伟
亚马逊云科技解决方案架构师
负责基于亚马逊云科技的云计算计划的征询与架构设计,致力于亚马逊云科技云服务在汽车,物联网,人工智能等行业的利用和推广。在退出亚马逊云科技之前曾在 BMW 无人驾驶研发核心负责机器人和人工智能专家,负责无人车环境感知,行为预测和决策布局研发。
曹菱欣
亚马逊云科技汽车行业资深解决方案架构师
超过 20 年 IT 行业工作教训,有售前,施行和研发教训,5 年以上针对客户 PaaS 和 SaaS 方面的我的项目施行教训。专一于亚马逊云科技云计算在车联网,无人驾驶,汽车生产制作,银行证券等畛域的技术咨询和施行。