现代工业物联网对Azure的分析——第3部分
2020年8月20日 在产品
在第2部分在Azure的包含三部分的系列文章的数据分析对现代工业物联网(IIoT)应用程序中,我们从现场设备实时摄取IIoT数据到Azure和执行复杂的时间序列处理的数据直接湖。在这篇文章中,我们将利用机器学习预测维护和风力涡轮机的收入最大化同时最小化停机时间的机会成本,从而最大化利润。
我们的模型训练和可视化的最终结果将是一个权力BI报告如下所示:
端到端架构如下所示。
机器学习:优化功率输出和剩余寿命
优化工具,有生之年,和工业资产运作效率就像风力涡轮机中也有许多的收入和成本效益。在本文中,我们探索的现实世界的挑战是风力涡轮机的收入最大化同时最小化停机时间的机会成本,从而最大化我们的净利润。
净利润=发电收入-成本增加的压力设备
如果我们推动涡轮机更高RPM,它将产生更多的能量,因此更多的收入。然而,增加涡轮压力会导致经常失败,引入成本。
为了解决这个优化问题,我们将创建两个模型:
- 预测涡轮机的发电给定一组操作条件
- 预测的剩余生活涡轮机给定一组操作条件
我们可以产生利润曲线来确定最优操作条件,最大化收入同时最小化成本。
使用Azure砖与黄金三角洲的表,我们将执行功能工程提取感兴趣的领域,培养两个模型,最后将模型部署到Azure托管机器学习。
计算每个风力涡轮机的剩余有用的一生,我们可以用我们的维修记录,显示每个资产时更换。
%sql——计算每台风力机的时代,剩下的日子的生活创建或取代视图turbine_age作为与reading_dates作为(选择截然不同的日期,的deviceid从turbine_power),maintenance_dates作为(选择d。*datediff (nm。日期、d.date)作为datediff_next datediff (d。日期、lm.date)作为datediff_last从reading_dates d左加入turbine_maintenance纳米在(d.deviceid=nm.deviceid和d.date=lm。日期)选择日期的deviceid,最小值(datediff_last)作为的年龄,最小值(datediff_next)作为remaining_life从maintenance_dates集团通过的deviceid,日期;
预测输出功率在六小时的时间地平线,我们计算时间序列变化使用火花窗口的功能。
创建或取代视图feature_table作为选择r。*、年龄、remaining_life、——计算能力提前6小时使用火花窗口,建立一个feature_table喂到我们毫升模型铅(权力,6、电力)在(分区通过r.deviceid订单通过time_interval)作为power_6_hours_ahead从gold_readings r加入turbine_age一在(r.date=a.date和r.deviceid=a.deviceid)在哪里r.date
#创建一个火花Dataframe包含的特性和标签我们需要feature_cols=(“角”,“转”,“温度”,“湿度”,“风速”,“权力”,“年龄”]label_col=“power_6_hours_ahead”#读在我们的功能表和选择列的兴趣feature_df=spark.table (“feature_table”)#创建一个熊猫UDF来训练XGBoost回归量在每一个涡轮的数据@pandas_udf (feature_df。模式,PandasUDFType.GROUPED_MAP) def train_power_model (readings_pd): mlflow.xgboost.autolog() #自动对数XGB参数、指标、模型和工件mlflow.start_run(): #训练数据上的XGBRegressor涡轮alg = xgb.XGBRegressor () train_dmatrix = xgb.DMatrix (data = readings_pd [feature_cols] .astype ('浮动”),标签= readings_pd = xgb [label_col])模型。火车(dtrain=train_dmatrix, evals=[(train_dmatrix, '火车'))返回readings_pd #运行熊猫UDF对特征数据集power_predictions = feature_df.groupBy(的的deviceid”)苹果(train_power_model)
Azure砖会自动跟踪每个模型的训练与托管MLflow实验。XGBoost回归,MLflow将跟踪任何参数传递到参数论证,RMSE度量,涡轮这个模型训练,以及由此产生的模型本身。例如,预测能力的RMSE的deviceid WindTurbine-18是45.79。
我们可以训练一个类似的模型剩余生命的风力涡轮机。的涡轮机的实绩和预测如下所示。
模型部署和托管
Azure砖是集成Azure的机器学习模型的部署和得分。直接使用Azure毫升api砖,我们可以为每个模型来自动部署一个图像被托管在一个快速、可伸缩的容器服务由Azure毫升(ACI或部)。
#创建一个模型在AzureML形象model_image azure_model = mlflow.azureml.build_image (model_uri =路径,工作区=工作区,model_name =模型,image_name =模型,描述=“XGBoost模型预测输出功率”同步= False)#将web服务部署到宿主模型作为一个REST APIdev_webservice_deployment_config = AciWebservice.deploy_configuration ()dev_webservice = Webservice.deploy_from_image (name = dev_webservice_name,形象= model_image,工作区=工作空间)
一旦部署模型,它将显示在Azure毫升工作室,我们可以通过REST API调用来得分的数据交互。
#构造一个有效负载发送的请求有效载荷= {“角”:12,“转”:10,“温度”:25,“湿度”:50,“风速”:10,“权力”:200年,“年龄”:10}defscore_data(uri,有效载荷):rest_payload = json.dumps ({“数据”:【列表(payload.values ()))})=响应请求。帖子(uri, data = rest_payload header = {“内容类型”:“application / json”})返回json.loads (response.text)打印(f 'Predicted权力(千瓦时)从模型:{score_data (power_uri,有效负载)}”)打印(f 'Predicted剩余期限(天)从模型:{score_data (life_uri,有效负载)}”)
现在电力优化和荷重软化模型作为预测部署服务,我们可以利用两个优化净利润从每个风力涡轮机。
假设1美元每千瓦时,年收入可以简单地计算,预计每小时功率乘以24小时,365天。
年度成本可以通过每日收入乘以计算涡轮需要维护的次数一年(365天/剩余寿命)。
我们可以简单地通过多个迭代的分数不同的操作参数调用我们的模型在Azure托管毫升。通过可视化的预期利润成本不同的操作参数,我们可以确定最优RPM利润最大化。
数据服务:Azure Explorer和Azure突触分析数据
在ADX运营报告
Azure Explorer (ADX)提供实时数据运营分析在流时间序列数据。IIoT设备数据可以从物联网中心,直接流到ADX或从Azure推砖使用Kusto火花连接器从微软如下所示。
stream_to_adx = (spark.readStream。格式(“δ”).option (“ignoreChanges”,真正的).table (“turbine_enriched”).writeStream。格式(“com.microsoft.kusto.spark.datasink.KustoSinkProvider”).option (“kustoCluster”,kustoOptions [“kustoCluster”]).option (“kustoDatabase”,kustoOptions [“kustoDatabase”]).option (“kustoTable”,kustoOptions [“kustoTable”]).option (“kustoAadAppId”,kustoOptions [“kustoAadAppId”]).option (“kustoAadAppSecret”,kustoOptions [“kustoAadAppSecret”]).option (“kustoAadAuthorityID”,kustoOptions [“kustoAadAuthorityID”]))
PowerBI可以连接到Kusto表创建一个真正的实时操作仪表板轮机工程师。
ADX还包含本地时间序列分析预测和异常检测等功能。例如,下面Kusto代码发现异常点数据流的RPM读数。
turbine_raw|在哪里rpm>0|使- - - - - -系列rpm_normal=avg(转)默认的=0在todatetime (时间戳)在范围(datetime (2020年-06年-30年00:00:00)、日期时间(2020年-06年-30年01:00:00),10s)|延长异常=series_decompose_anomalies (rpm_normal0.5)|渲染anomalychart与(anomalycolumns=异常、标题=“RPM异常”)
分析报告在亚撒
Azure突触分析(ASA)是新一代数据仓库从Azure本机利用ADLS创2与Azure砖,使无缝集成这些服务之间的数据共享。
而利用突触的功能和Azure砖,推荐的方法是使用最好的工具来工作给你的团队的需求和访问数据的用户角色。例如,数据工程师需要δ的性能优势和数据科学家需要协作,丰富和灵活工作空间将被引入Azure砖。分析师需要摄取low-code或SQL数据仓库环境中,处理和可视化数据将被引入突触。
Azure的突触流连接器砖允许我们流的黄金涡轮机直接到突触的SQL数据池报告。
spark.conf。集(“spark.databricks.sqldw.writeSemantics”,“复制”)#使用复制到更快的加载
write_to_synapse = (spark.readStream。格式(“δ”).option (“ignoreChanges”,真正的).table (“turbine_enriched”)#读金涡轮读数.writeStream。格式(“com.databricks.spark.sqldw”)#写突触.option (“url”dbutils.secrets.get (“物联网”,“synapse_cs”))# SQL池JDBC (SQL Auth).option (“tempDir”SYNAPSE_PATH)#临时ADLS路径.option (“forwardSparkAzureStorageCredentials”,“真正的”).option (“数据表”,“turbine_enriched”)#表在突触写.option (“checkpointLocation”CHECKPOINT_PATH +“突触”)#流检查点.start ())
另外,Azure数据工厂可以用来读取数据从三角洲格式编写成突触SQL池。可以找到更多的文档在这里。
现在数据是干净的,处理,和可用的数据分析师的报告,我们可以构建一个生活PowerBI仪表板与实时数据以及预测从我们毫升模型如下所示。
总结
总而言之,我们已经成功:
- 摄入从现场设备实时IIoT数据到Azure
- 直接执行复杂时间序列处理数据湖上
- 训练和部署毫升模型来优化我们的风力涡轮机资产的利用率
- 服务工程师的数据操作报告和数据分析师的分析报告
大数据技术联系在一起的关键是三角洲湖。三角洲在ADLS提供可靠的流媒体数据管道和高性能数据科学分析查询大量的时间序列数据。最后,它使组织能够真正采用Lakehouse模式通过将最好的品种Azure工具写一次,经常访问数据存储。
接下来是什么?
尝试的这里笔记本了,了BOB低频彩解更多关于Azure砖系列培训看看如何创建现代数据架构在Azure上出席这个网络研讨会。