利用数据高效地构建石油和天然气行业预测性维护的机器学习模型

下载幻灯片

对于每个钻井地点,都有数千台不同的设备全天候同时运行。对于石油和天然气行业来说,停机时间每天都会造成数百万美元的损失。按照目前的标准做法,大多数设备都是由备用机组进行定期维护,以减少停机时间。定期维护以简单的度量标准对每台设备进行类似的处理,例如日历时间或运行时间。使用机器学习模型准确预测设备故障时间,可以帮助企业相应地安排预测性维护,以减少停机时间和维护成本。我们在系统中有大量的时间序列数据和维护记录,但是它们不一致,质量很低。我们面临的一个特别的挑战是,数据不是连续的,我们需要遍历整个数据集,以找到在某个特定窗口内数据是连续的。为不同的时间窗口转换数据也提出了一个挑战:我们如何在各种可用的选项中快速选择优化的窗口大小并并行执行转换?数据变换如傅里叶变换或小波变换是耗时的,我们必须并行化操作。我们在Databricks上采用Spark数据框架进行计算。

以下是我们为数据转换执行高效分布式计算所采取的两个主要步骤:

  1. 通过扫描子采样数据集,确定哪些段具有连续数据。
  2. 选择不同的窗口并在窗口内转换数据。
  3. 将每个窗口列转换为一个单元格作为列表。
  4. 通过收集时间戳和对应的参数作为字典列表来保存每个单元格中的数据顺序,然后根据字典中的时间戳元素对列表进行重新排序。

点击这里观看更多Spark + AI课程

免费试用Databricks

视频记录

-大家好,感谢大家参加今天的会议,我的名字是Varun Tyagi,我和我的队友张黛丽在一起。我们是哈里伯顿的数据科学家,哈里伯顿是一家石油和天然气服务公司,位于德克萨斯州的休斯顿。

利用数据高效地建立石油和天然气行业预测性维护的机器学习模型

今天我们将讨论如何有效地使用Databricks来帮助建立机器学习模型来进行预测性维护。在进入这个话题之前,我们想先介绍一下我们的团队。

我们隶属于哈里伯顿数字解决方案部门。ATS的主要功能是支持和巩固所有产品服务线上的数字化转型,我们称之为PSLs。因此,在哈里伯顿,我们有大约14个PSLs,从钻井到固井,到健康和安全,再到完井。我们的数字解决方案团队为数据仓库和治理提供通用平台和架构,以分析开发和商业智能报告。bob体育客户端下载而且,我们精简和整合了所有产品服务线上的各种流程。我们还在每个PSL内提供并建立强大的人才管道或软件和数字开发。

Dalli和我在HPS的数据科学团队工作。因此,我们的角色是开发分析和机器学习模型,以提高运营效率,增加生产正常运行时间,降低运营成本,并在正确的时间为正确的人提供见解,帮助他们做出业务层面的决策。

哈里伯顿的生命周期分析

因此,在哈里伯顿,我们遵循基本的分析开发生命周期,并针对我们的用例进行一些特定的变化。我们在世界各地有数千个钻井平台,每个钻井平台都包含许多工具,以及各种实时收集信息的传感器。我们也有大量的数据存储在SAP和其他SQL数据库中。多年来,我们以不同的文件格式收集了pb级的数据,比如pdf、csp,然后还有拼花格式。对于每个项目,我们首先确定不同的数据源,然后收集数据并将其集成到同一个平台中。bob体育客户端下载一旦我们摄取了数据,我们就会花费大量的时间来清理、聚合和转换数据。然后,我们在领域专家的帮助下执行特性工程。然后我们训练和测试我们的模型根据不同的指标选择模型。但大多数情况下,选择的指标是与经济影响直接相关的。然后我们部署模型并将结果展示给相关人员。 And after the models are deployed, we monitor their performance to see check for any drifting. And then we diagnose and retrain the models if needed. No doubt the model training and testing is an essential part of the cycle, but in reality, it takes less than 5% of our time. And so we spend the majority of our time with the data ingestion and cleaning process. So what kinds of data do we have? We have three main types of data, first is the operational data, which includes a historical data and real time data from age devices. And most of the historical data is stored in what are known as ADI files. And ADI is just a proprietary format to Halliburton.

在我们的一个产品服务系列中,我们有超过50万个API文件,每个文件大约是3gb的拼花格式。总的来说,我们正在处理大约1500兆兆字节的数据,我们从边缘设备获得越来越多的实时数据(杂音),所以这个容量正在快速增长。

第二类数据是硬件配置数据、维护数据和其他一些来自字段的事件相关数据。这些类型的数据通常存储在SQL数据库中。例如,我们在不到两年半的时间里收集了超过500万份维护记录。

当外部数据可用时,我们也会使用它,例如,我们在需要时使用天气数据、地质和地球物理数据。

总之,我们不缺乏数据,我们每天都在获得更多的数据,但我们有时确实缺乏高质量的数据,特别是历史数据。但是有了边缘设备和更严格的数据收集过程,我们开始得到更好、质量更好的数据。

预测性维护项目(示例)

这里有一个预测性维护用例的例子。该项目的目标是在避免故障模式或变速箱组件的基础上,通过现场操作优化,将年维护成本降低10%。这里展示的图片,是我们现场的一辆水力压裂卡车卡车的传动装置位于中间它将发动机与高压泵连接起来。而变速器的作用是将发动机的能量传递给高压泵,驱动高压泵将液体泵入钻井。所以这是一个非常昂贵的设备。

数据清洗和聚合

因此,对于这个项目,我们必须以一致的方式组合或结合操作数据、配置和维护数据。在这个过程中,我们面临了很多挑战,我们收集的操作数据有时来自不同的频率样本,从一赫兹到一千赫兹不等。所以我们要么对不同的数据集进行采样,要么对不同的传感器数据进行采样,然后在各种传感器数据之间进行同步,也在非传感器数据之间进行同步,比如维护记录。

对于我们的维护相关数据,我们有很多免费的文本输入。所以我们必须使用自然语言处理技术来提取我们需要的信息。还需要大量的手工工作,编程逻辑来确定哪些记录属于哪些设备id,因为记录来自不同的来源,每个来源可能没有一致的、格式化的设备标识符。根据所使用设备的性质,它们经常从一个地点转移到另一个地点,从一个工作转移到另一个工作,每个工作可能持续几天或更长时间,但在每个工作中,设备不断地启动和关闭。所以我们还需要考虑到设备的瞬态和稳态模式。因此,我们经常面临大量数据丢失和错误数据,这些数据来自有故障的传感器或错误的用户输入。

值得庆幸的是,我们有数据休息,这有助于我们以一种可扩展的方式快速处理大量的数据集。目前,我们在数据休息、高级工作空间上运行,所有事情对其他团队成员都是透明的。我们与不同的笔记本电脑、不同的实用功能共享和协作,并通过版本控制与不同版本的笔记本电脑进行交互。我们还利用Delta Lake的优势来加快查询和返回特定时间的快照以及数据的快照。

我们还利用了大量的pandas用户定义函数和pandas UDS,它们由Apache箭头执行,直接在JVM和Python驱动程序和执行器之间交换数据,它带来了接近零的C实现成本或超过实现成本。它的向量化运算帮助我们,获得了大约100倍的速度提升,在普通的高火花用户定义函数的某些计算。在演示Panda的UDF函数的一个用例时,我们将展示一个简单的示例,其中我们用前一个有效值或下一个有效值填充数据帧中的注释值。

在这种情况下,PI Spark用户定义函数大约需要4到5个小时,但是对于panda -udf,它只需要6到7分钟,这对我们来说是一个巨大的改进。没有人愿意为每个字符运行等待4到5个小时,只是浪费时间和计算资源。

特性工程(示例)

对于这个项目,我们做了大量的特征工程,我们使用基于领域专业知识的不同公式组合不同的特征。

在我们的项目中,我们主要处理时间序列数据。所以我们使用了很多信号处理的技术。在上面的例子中,我们使用加窗傅里叶变换来获得不同时间窗口的频域特征。正如我之前提到的,我们研究的设备,是从一个工作转移到另一个工作,从一个工地转移到另一个工地。所以它们不断地,打开和关闭,以不同的速度加载不同的变量,然后关闭。所以我们做的第一件事是根据阈值选择高负载窗口集。举个例子,我们可以为引擎转速设定一个阈值超过这个阈值,我们就会认为这是一个高负荷。所以我们根据那些包含连续数据的阈值来选择数据窗口。

在我们原始的spark数据帧类型系列中,每行对应一个时间点,每列是一个特征。因此我们可以使用collect list函数将每个时间窗口内的所有时间值和相应的数据收集到一个普通的数据中,在此操作之后,每个时间窗口的数据被收集并转换为该部分数据帧中的单行。然后我们就可以对每个窗口的数据进行韦尔奇傅里叶变换并将其变换到频域。然后我们可以从每个窗口的频率组成中选择峰值,然后将其作为机器学习模型的特征。这样的频域特征帮助我们提高了模型的精度。下面由戴丽来描述机器学习的过程。-谢谢你,瓦伦。所以在我们完成了所有更困难的工作,比如数据(声音)、数据聚合和特征工程,我们用各种方法训练和测试模型,我们尝试了下一个Spark ML,我们尝试了深度学习,我们尝试了Azure AutoML、XGBoost和Sklearn等。

模型培训/选拔(示例)

我们用各种指标评估模型,如(杂音)回忆率和F1分数和准确性。所以最后,我们通常会根据经济影响来选择模型。右边的表格显示了我们研究过的不同ML包之间的一些比较。从表格中可以看出,在GPU虚拟机上使用LSTM进行深度学习,需要花费一天的时间来完成一次训练。Azure AutoML的速度相对较快。并且为这个特定的用例提供了稍好的结果。所以最后,对于这个项目,我们意识到,所以基本上不同的模型不会产生任何显著的差异,但不同的特征和进入模型有更大的影响。

模型部署与可视化

对于这个项目,我们使用PowerBI来可视化结果,并向最终用户展示。因此,我们模块化了整个过程,从提取数据,执行数据(杂音)和数据聚合,创建特征,并调用它们,执行预测,然后将结果写入blob存储到不同的笔记本中。因此,根据业务需求和工作中通常安排的每24小时运行一次的方式,笔记本被安排在数据中断、笔记本和工作流中运行。因此,我们将在最后展示一个演示,关于我们如何利用(杂音)或工作流来运行笔记本。

模型性能监控

在我们部署模型之后,我们会监控模型的性能,以检查是否有任何模型性能漂移。所以我们所做的是,我们将预测持续地存储到blob存储中,我们也将实际的结果持续地存储到blob存储中。因此,我们在PowerBI中显示了预测和实际结果之间的差异。因此,一些警报会根据一些预设的阈值设置为向我们的团队发送电子邮件或短信。所以,一旦我们的团队收到笔记,我们将研究漂移的模型,并可能重新训练或重新部署模型。所以模型管理是整个过程的重要组成部分,特别是当我们推出越来越多的模型时。

模型管理

所以我很自豪地使用电子邮件流程,我们手动将模型特定的信息写入CSV文件,并将模型及其相应的环境和运行信息存储到具有特定名称约定的blob存储中。这实际上需要很多时间,而且随着时间的推移也会引起一些混乱和不一致,特别是当我们得到越来越多的模型时。因此,MLflow提供了坏数据中断,它极大地简化了一致性和质量控制的过程。因此,在最后,我们将演示如何利用MLflow来管理模型。

就是这样,Anna会展示演示。- [Ann]对于演示,我想分享三个项目,它们要么提高性能,更快地运行代码,要么加快开发过程。在我展示详细代码之前,我想先展示集群的配置。集群被称为信号进程,如果你打开你的配置页面,它有12个工作节点每个工作节点重64g内存,16核,驱动负载是256g内存,重64核。所以这是一个大集群,因为我们有更大的数据集。那么现在让我们进入第一项,我们利用pandas UDF函数来做,其中一个(喃喃)过程,叫做填充数据笔记本。在笔记本电脑中,我们要做的第一件事,就是把数据从blob存储器读入spark数据帧。在我们读入数据之后,我们做一些预处理这里,我将拉出数据帧的大小,如你所见,数据帧有1亿682万行和74列。

这是一个大数据集。所以这里我们要做的是,我们想通过使用前一个可用地点或下一个可用地点来运送每一列的缺失数据。因此,我们使用Pandas UDF函数来实现这一目标。这是Pandas UDF函数的定义。因此,在这里要做的第一件事是声明pandas_UDF装饰器。decorator所做的是做一些预处理和后期处理将数据放入panda函数。这是熊猫函数的主体。正如你所看到的,它非常简单,在熊猫和语法上是纯粹的,因为它是一个熊猫函数。函数被定义了,我们称它为group by,我们称之为apply。基本上它所做的是,它根据泵ID将数据分成不同的组,然后应用我们刚刚单独定义的每个组的熊猫UDF函数。 And in the end it combines the results back into a data frame.

在那之后,我们用Delta格式把数据读到blob存储中。正如你在这里看到的,整个过程花了大约七分钟。因此,如果您希望实现与在Spark或Windows函数中失败的法律场所或基于泵ID支持每个列相同的目标,则需要大约7个小时。速度几乎是16倍,为什么?尝试更快。所以我强烈建议你检查熊猫UDF函数,相信我,你不会(低语)。

我要展示的第二项是,

Notebook工作流,让我们转到Notebook,我们使用Notebook工作流来运行所有的Notebook。

所以在信号处理中,它在笔记本电脑上实现了自动MLflow。

所以Notebook工作流,这是从另一个笔记本中定义的原始笔记本,所以这是对Notebook或工作流优势的一种赞美,它可以传递一组参数到在widget中定义的目标笔记本,也可以返回一个值,或者你可以使用它来调节其他笔记本(杂音)。

正如我们在演示中提到的,我们将整个ETL流程和建模流程的每个步骤模块化到不同的笔记本中。然后我们同步所有的笔记本在一个笔记本上运行。所以这是一种更有组织的方式,更容易调试和管理整个过程。记事本或工作流的语法很简单,它叫dbutls。notebook。run第一个参数是你要运行的记事本的路径。所以第二个参数是on time out,单位是秒,所以这个参数是用来控制笔记本行,所以目标笔记本行。所以基本上你不希望因为一些代码问题而浪费资源来长时间运行笔记本电脑,这是浪费钱。最后一个参数是一个字典,它将参数传递到目标笔记本中定义的小部件中。

这里我没有返回值,因为我们不用它来返回任何值。让我们去目标笔记本看看女巫是如何定义和定位的。这是第一个,选择条件数据。

在这个笔记本中,我们定义了三个小部件。实际上,数据中断提供了各种各样的小工具,你可以利用它在网站上也有很好的记录。因此,如果你想知道如何定义小部件,只需查看文档。

最后我想展示的是Mlflow。

因此,MLflow用于管理整个建模过程和模型。

目前我们只使用MLflow来进行模型跟踪,并回调模型来进行预测。所以MLflow有更多的功能,而且还在不断增长。

所以任何一种(喃喃)模型,然后通过API调用模型。剩下的API,也可以把模型部署到容器中。所以这里我们只使用MLflow来跟踪模型。当然,为了使用MLflow,您需要像通常使用其他包一样安装这个包。

所以我们要做的第一件事,就是做一个实验。这里我们指定了实验,路径和名称。工作空间也是如此。然后我们基本上创建了一个实验,

(低语)和实验将显示在工作空间,它在这里,transmission_exp_01。

在实验创建之后,我们可以看看实验的运行情况,这是日志的语法,

参数和运行量进入规定的实验。在这个应用程序中,我们记录所有的ETL参数,

我们也记录了额外的加速的超参数,建模部分。所以,在四天的应用程序中,我当然登录了模型,也解锁了困惑矩阵。这是我用来运行这个模型的特征还有特征重要性条形图。

在那之后,在所有的环节中,有很多小部件的实验。我们来做个实验,看看我们解锁了什么。双击它,它会进入实验的主页面。如你所见,它标记了日期,运行名称,谁运行,资源,所有的参数和矩阵。所以下一站,我点击其中一个,进入细节。

这里,如你所见,并不是所有的参数和指标。我想展示我们解锁的所有藏物。第一个东西叫做XGB集群,它是模型(喃喃)它有三个项目,ML模型,它基本上指定了所有的模型信息它有环境文件,它指定了所有的包依赖率,我们用来运行模型。当然模型本身是拼花牌的。

我们还把预处理过程解锁为模型,所以它是终端,我们还把混淆矩阵解锁为图片,所以你可以下载图片或复制粘贴到你的报告中,这非常方便。我们还解锁了功能的重要性,以及条形图,我们还将所有功能解锁到一个GSM文件中。这些将帮助我们重现模型因为我们知道使用了什么特征。非常方便。这就是我今天想要分享的内容,谢谢大家

点击这里观看更多Spark + AI课程

免费试用Databricks
«回来
关于张黛丽

哈里伯顿公司

我是哈里伯顿公司的高级技术顾问,专注于预测性维护和流程改进。在加入哈里伯顿之前,我曾在GE和西门子从事电厂预测维护、燃气轮机仿真和建模工作超过8年。我毕业于佐治亚理工学院,获得了航空航天工程博士学位和统计学硕士学位。

关于瓦伦·提亚吉

哈里伯顿公司

Varun是哈里伯顿公司的技术顾问。在加入哈里伯顿之前,Varun在TGS-Nopec地球物理公司工作了4年,在休斯顿的CGG工作了6年,担任地震数据处理和成像地球物理学家。他在TGS的最后一份工作是担任清洁、处理和分析墨西哥湾、加拿大、西非和巴西大型三维地震数据集的地球物理学家和团队负责人。他持有宾夕法尼亚州立大学电气工程学士学位和工程科学硕士学位。