全程围绕“数据驱动-模型赋能-业务闭环”核心逻辑,每个环节输出明确成果,确保可复现、可落地(以石油天然气领域设备为例,如调压器、压缩机、抽油机等)。

设备调研与故障分析
收集设备手册、历史故障记录(近3年),梳理常见故障类型及诱因(如调压器卡涩可能因介质杂质、压力波动)与运维工程师访谈,明确“关键故障”(影响安全生产、维修成本高的故障,如压缩机轴承断裂)输出《设备故障清单》,包含:故障类型、发生概率、影响范围、典型特征(如振动异常、温度升高)目标量化定义
分类任务:故障识别准确率≥95%、故障类型覆盖≥8种(如调压器的卡涩、泄漏、超压、密封失效等)回归任务:故障严重程度预测误差≤5%(如磨损量预测)预测任务:提前预警时间≥24小时(针对慢性故障)方案初步规划
确定数据采集方式(现有传感器/新增传感器)、数据类型(振动、温度、压力、声音等)确定模型技术路线(传统机器学习/深度学习)、部署方式(边缘计算盒/工业云平台)输出《故障诊断项目计划书》,明确里程碑节点(如数据采集完成时间、模型验证完成时间)数据采集方案设计
传感器选型与部署 选型依据:故障特征相关性(如振动数据对应机械故障、压力数据对应密封故障)、环境适应性(高温、防爆)案例(调压器故障诊断):部署3类传感器——振动传感器(安装在阀体,采样频率10kHz,测量X/Y/Z三轴振动加速度)、压力传感器(进出口压力,采样频率1Hz)、温度传感器(阀体温度,采样频率1Hz)、声音传感器(安装在附近,采样频率44.1kHz,捕捉泄漏声)部署原则:靠近故障敏感部位(如轴承附近、密封面附近),避免遮挡和干扰 数据采集参数设置 采样频率:机械故障推荐≥10kHz(捕捉高频振动特征),工况参数(压力、温度)≥1Hz采集时长:正常数据≥100小时,每种故障数据≥20小时(覆盖不同严重程度)工况记录:同步记录设备运行工况(如进出口压力、流量、运行时间),用于后续特征筛选 数据存储与传输 存储格式:原始数据以CSV/Parquet格式存储,标签信息(故障类型、发生时间、严重程度)单独记录传输方式:边缘设备本地缓存+定时上传云端(避免实时传输带宽压力)数据采集执行
正常数据采集:在设备无故障、稳定运行状态下,采集不同工况(启停、满负荷、低负荷)的原始数据故障数据采集: 真实故障数据:通过设备历史运行记录提取(需标注故障发生时间、类型)模拟故障数据:在安全可控前提下,通过人工干预制造轻微故障(如调压器故意加入少量杂质模拟卡涩),采集故障演化过程数据数据增强:对稀缺故障类型,通过“时间拉伸、加噪、翻转”等方式扩充数据(如振动数据加±5%的高斯噪声) 数据标注: 人工标注:由运维工程师根据故障发生时间、传感器数据异常特征,标注数据样本的标签(如“2024-05-20 10:00-10:30,调压器卡涩,严重程度3级”)自动标注:基于阈值法(如振动加速度超过正常阈值2倍则标注为异常)初步筛选,再人工复核 数据量要求:总样本数≥10万条,正常样本与故障样本比例≤7:3(避免类别不平衡)数据预处理
数据清洗 缺失值处理:连续型数据(振动、温度)用插值法(线性插值/多项式插值),离散型数据用众数填充;缺失率>20%的特征直接删除异常值处理:用3σ法则(超出均值±3倍标准差)或箱型图法识别异常值,轻微异常值保留(可能是故障前兆),严重异常值(如传感器故障导致的突变)用相邻数据替换噪声去除:机械振动数据常用小波变换(db4小波,分解5层)去噪,压力/温度数据用移动平均滤波(窗口大小5) 数据标准化/归一化 标准化(Z-Score):适用于模型对数据分布敏感的场景(如SVM、神经网络),公式:( x’ = frac{x - mu}{sigma} )(μ为均值,σ为标准差)归一化(Min-Max):适用于需要保留数据相对大小的场景(如决策树),公式:( x’ = frac{x - min(x)}{max(x) - min(x)} ) 数据重采样(解决类别不平衡) 过采样:对少数类故障样本采用SMOTE算法(合成新样本),避免简单复制导致过拟合欠采样:对多数类正常样本采用随机欠采样(保留关键工况样本)或聚类欠采样(保留簇中心样本) 数据格式转换 时序数据切分:将连续的时序数据(如1小时振动数据)切分为固定长度的样本(如1秒/个样本,每个样本包含10000个数据点)特征维度整理:每个样本对应1条记录,包含“特征列(振动有效值、温度均值等)+标签列(故障类型)”特征提取(时序特征+频域特征+时频域特征)
时序特征(基于原始时域数据):适用于平稳信号,反映数据统计特性 常用特征:均值、方差、标准差、峰值、峰值因子(峰值/有效值)、峭度(反映信号陡峭程度,故障时峭度增大)、偏度(反映信号对称性)、脉冲因子、峭度因子、波形因子案例:调压器卡涩时,振动信号的峰值因子从正常的1.2升至3.5,峭度从3.0升至6.8 频域特征(基于傅里叶变换(FFT)):适用于周期性故障(如轴承磨损导致的谐波信号) 常用特征:频谱峰值、基频、谐波频率、频谱重心、频谱方差、频带能量(如0-500Hz、500-2000Hz的能量占比)案例:螺杆泵轴承磨损时,在轴承特征频率(内圈/外圈/滚动体频率)处出现明显的频谱峰值 时频域特征(基于小波变换/短时傅里叶变换(STFT)):适用于非平稳信号(如设备启停、故障突变) 常用特征:小波系数的均值、方差、能量熵、小波包分解后的各频带能量案例:调压器泄漏时,声音信号的小波包分解后,高频段(10-20kHz)能量占比从正常的5%升至25% 特征提取工具:Python的
numpy(基础统计特征)、
scipy(FFT、小波变换)、
librosa(声音特征)、
tsfresh(自动提取时序特征)
特征选择(剔除冗余,保留关键)
筛选原则:特征与标签的相关性高、特征间冗余度低常用方法: 过滤法:计算特征与标签的相关系数(Pearson/Spearman),保留相关系数绝对值>0.3的特征;方差筛选(剔除方差<0.01的常量特征)包裹法:用模型(如随机森林)评估特征子集的性能,逐步剔除性能贡献小的特征(如递归特征消除(RFE))嵌入法:利用模型自带的特征重要性评估(如随机森林的feature_importances_、XGBoost的gain值) 案例:从100个提取的特征中,通过随机森林筛选出20个重要特征(如振动峰值因子、频谱重心、小波能量熵等),其累计重要性占比达85%特征降维(可选,针对高维特征)
适用场景:特征维度>100,模型训练效率低常用方法:主成分分析(PCA)、线性判别分析(LDA)目标:降维后特征方差解释率≥90%(PCA),保留关键区分信息数据集划分
划分比例:训练集(70%)、验证集(15%)、测试集(15%)划分原则:分层抽样(保持训练集、验证集、测试集中正常/故障样本比例一致),避免数据泄露(如同一设备的连续数据不跨集划分)工具:Python的
sklearn.model_selection.train_test_split(分层划分参数
stratify=y)
模型选型与训练(传统机器学习+深度学习,按需选择)
| 模型类型 | 适用场景 | 常用算法 | 石油行业案例应用 |
|---|---|---|---|
| 传统机器学习 | 特征工程充分、数据量适中(<10万样本)、实时性要求高 | 随机森林(RF)、XGBoost、LightGBM、SVM、KNN | 调压器故障类型识别(8类故障,准确率96%) |
| 深度学习 | 数据量充足(≥10万样本)、特征难以手动提取、复杂故障 | CNN(卷积神经网络)、LSTM(循环神经网络)、Transformer、CNN-LSTM | 螺杆泵轴承磨损程度预测(MAE=0.03mm) |
| 轻量化模型 | 边缘设备部署(算力有限) | 轻量级CNN(MobileNet)、决策树、逻辑回归 | 井口设备故障实时诊断(响应时间<100ms) |
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
# 初始化模型
rf = RandomForestClassifier(random_state=42)
# 超参数网格
param_grid = {'n_estimators': [100, 200, 300], 'max_depth': [8, 10, 12], 'min_samples_split': [2, 4, 6]}
# 网格搜索优化
grid_search = GridSearchCV(rf, param_grid, cv=5, scoring='accuracy', n_jobs=-1)
grid_search.fit(X_train, y_train)
# 最佳模型
best_rf = grid_search.best_estimator_
模型融合(可选,提升精度)
适用场景:单一模型精度未达目标,或需要降低误报率常用方法: 投票法:多个模型(如RF、XGBoost、LightGBM)预测结果投票,少数服从多数堆叠法(Stacking):用多个基础模型的预测结果作为新特征,训练元模型(如逻辑回归) 案例:调压器故障诊断中,RF(准确率96%)+ XGBoost(准确率95%)+ LightGBM(准确率97%)投票融合后,准确率提升至98%,误报率从1.2%降至0.8%
.pkl、
.onnx格式,onnx支持跨平台部署)模型训练报告:包含模型选型理由、超参数配置、训练过程曲线(损失曲线、准确率曲线)、各模型性能对比
模型性能评估(多指标全面衡量)
分类任务(故障识别、定位): 核心指标:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1分数、混淆矩阵、ROC曲线(AUC值)重点关注:少数类故障的召回率(避免漏报)、整体误报率(避免过多无效预警) 回归任务(故障严重程度评估): 核心指标:平均绝对误差(MAE)、均方根误差(RMSE)、决定系数(R²) 预测任务(故障预警): 核心指标:预警提前时间、预警准确率、漏报率、误报率 评估工具:Python的
sklearn.metrics(分类/回归指标)、
matplotlib(混淆矩阵可视化、ROC曲线)
模型鲁棒性测试(模拟实际场景干扰)
噪声干扰测试:在测试数据中加入10%-20%的高斯噪声,评估模型准确率下降幅度(≤5%为合格)工况迁移测试:用不同工况(如设备低负荷运行)的测试数据评估模型性能(准确率≥90%为合格)数据缺失测试:随机删除测试数据中5%-10%的特征值,评估模型性能稳定性案例:调压器故障诊断模型在低负荷工况下,测试集准确率从98%降至95.5%(满足要求);加入15%噪声后,准确率降至94%(仍达标)模型优化(针对性解决短板)
若某类故障召回率低:增加该类故障样本(数据增强/补充采集)、对该类样本加权训练(如XGBoost的
scale_pos_weight参数)若模型过拟合(训练集准确率高,测试集低):增加正则化(如L1/L2正则)、减少模型复杂度(如随机森林减少树深度)、增加训练数据若实时性不满足:更换轻量化模型(如决策树替代LightGBM)、模型量化(INT8量化,减少计算量)、特征降维(减少输入维度)若误报率高:调整分类阈值(如将概率阈值从0.5提高至0.7)、增加“故障确认”逻辑(如连续3个样本异常才触发预警)
class_weight='balanced',对少数类样本加权
优化后结果:“轴断裂”故障召回率提升至94%,整体准确率97.8%(略有下降但可接受),误报率0.7%(满足要求)
.pkl/
.onnx)
模型部署准备
模型格式转换: 边缘设备部署:将Python模型(如
.pkl)转换为ONNX格式(支持C++/Java调用),或量化为INT8格式(减少内存占用)云端部署:封装为RESTful API(用Flask/FastAPI),支持HTTP调用
部署环境配置:
边缘设备:确认硬件算力(如CPU型号、内存大小),安装必要的依赖库(如ONNX Runtime、OpenCV)云端:配置服务器(如阿里云ECS),搭建容器化环境(Docker),确保高可用(负载均衡)
接口设计:
输入:实时传感器数据(如振动峰值、温度均值等关键特征)、设备ID、时间戳输出:故障类型、故障概率、故障严重程度、预警建议(如“建议24小时内停机检修”)
模型部署实施
边缘部署案例(调压器故障诊断): 将ONNX格式模型部署到边缘计算盒(如华为Atlas 200I)边缘计算盒实时接收传感器数据(通过MQTT协议),每1秒提取1次特征,调用模型进行诊断诊断结果本地缓存,并实时上传至监控平台;若检测到故障,触发本地声光报警 云端部署案例(螺杆泵故障诊断): 用FastAPI封装模型,提供
/fault_diagnosis接口传感器数据通过5G网络上传至云端服务器,服务器调用接口进行诊断诊断结果展示在Web监控平台,支持历史数据查询、故障统计分析
模型运维与迭代
实时监控:监控模型运行状态(响应时间、准确率、误报率)、数据质量(传感器是否故障、数据缺失率)模型更新: 定期(如每3个月)收集新的故障数据,重新训练模型(增量训练),替换旧模型当设备工况发生重大变化(如介质类型改变、运行负荷调整),重新进行特征工程和模型训练 故障反馈机制:建立运维工程师反馈通道,若出现“漏报”“误报”,及时记录并分析原因(如模型未覆盖新故障类型、数据预处理参数需要调整)业务价值量化
直接价值: 减少停机时间:如模型预警后,提前安排维修,避免突发停机(单次突发停机损失50万元,全年减少10次,累计节约500万元)降低维修成本:如避免故障扩大(轻微故障维修成本1万元,严重故障维修成本20万元,全年避免8次严重故障,节约152万元) 间接价值: 提升安全生产水平:减少故障导致的安全事故(如泄漏引发的爆炸风险)提高运维效率:运维工程师无需现场巡检,通过监控平台即可掌握设备状态,人均管理设备数量从10台提升至20台成果汇报与推广
汇报材料:制作“业务价值导向”的汇报PPT,包含:项目背景(设备故障痛点)、技术方案(数据采集-模型构建-部署)、落地效果(量化价值+案例)、未来规划(推广至其他设备/场景)试点推广:先在某一区域/某一类设备中试点应用,收集试点反馈,优化后再全面推广(如先在3口页岩油井的螺杆泵中应用,成功后推广至50口井)跨场景扩展:将模型迁移至同类设备(如从调压器扩展至阀门、流量计),或不同场景(如从页岩油开采扩展至城市燃气输配)| 环节 | 常用工具 |
|---|---|
| 数据采集 | 传感器(加速度传感器、压力传感器)、数据采集卡(NI cDAQ)、MQTT协议(数据传输) |
| 数据预处理 | Python(numpy、pandas、scipy)、MATLAB(信号处理) |
| 特征工程 | Python(tsfresh、librosa、scipy.signal) |
| 模型训练 | Python(scikit-learn、LightGBM、XGBoost、TensorFlow、PyTorch) |
| 模型部署 | ONNX Runtime(边缘部署)、FastAPI(云端API)、Docker(容器化)、华为Atlas(边缘计算盒) |
| 可视化与监控 | Python(matplotlib、seaborn)、Web监控平台(Vue+ECharts)、Prometheus(监控) |
通过以上7个阶段的完整流程,可构建一套“数据驱动-模型赋能-业务闭环”的机械设备故障诊断系统,尤其适用于石油天然气领域的复杂设备(如调压器、螺杆泵、压缩机),实现从“被动维修”到“预测性维护”的转型,为企业创造显著的经济价值和安全价值。
某城市燃气公司负责100+座区域调压站的运营,核心设备为DN50型燃气调压器(进口压力0.4-0.8MPa,出口压力0.1-0.2MPa),主要用于居民及商业用户燃气输配。2023年因调压器故障(卡涩、泄漏、超压等)导致3起停气事故,直接经济损失超200万元,且存在安全隐患。为解决该问题,计划构建基于振动+压力+声音多源数据的智能故障诊断模型,实现故障类型识别、严重程度评估及提前24小时预警,目标:故障识别准确率≥95%,误报率≤1%,年减少故障停机时间80%。
通过梳理3年历史故障记录(120+次故障)、设备手册及与运维工程师访谈,输出《燃气调压器故障清单》:
| 故障类型 | 发生概率 | 影响范围 | 典型特征 | 维修成本(万元) |
|---|---|---|---|---|
| 阀芯卡涩 | 35% | 出口压力波动 | 振动峰值升高、压力响应滞后 | 2.5 |
| 密封件泄漏 | 28% | 燃气泄漏(安全隐患) | 声音信号高频能量占比上升、出口压力下降 | 3.2 |
| 超压故障 | 15% | 下游设备损坏 | 出口压力持续超阈值、振动平稳 | 5.8 |
| 滤网堵塞 | 12% | 流量不足 | 进出口压差增大、振动均值降低 | 1.8 |
| 执行机构故障 | 7% | 调压失效 | 振动频率异常、压力无调节响应 | 4.5 |
| 阀芯磨损 | 3% | 调压精度下降 | 振动峭度升高、压力波动幅度增大 | 6.0 |
| 传感器类型 | 型号规格 | 部署位置 | 采集参数 | 用途 |
|---|---|---|---|---|
| 压力传感器 | 扩散硅型(防爆等级Exd II CT4) | 调压器进出口 | 采样频率1Hz,量程0-1MPa,精度±0.2%FS | 监测压力波动、超压、泄漏 |
| 振动传感器 | IEPE型三轴加速度传感器(Exd II CT4) | 阀体顶部(故障敏感区) | 采样频率10kHz,量程±50g,精度±1% | 监测卡涩、磨损、执行机构故障 |
| 声音传感器 | 防爆麦克风(Exd II CT4) | 阀体侧面(靠近密封面) | 采样频率44.1kHz,量程20Hz-20kHz | 监测泄漏故障 |
| 温度传感器 | 铂电阻PT100(Exd II CT4) | 阀体表面 | 采样频率1Hz,量程-20~100℃,精度±0.5℃ | 辅助判断故障(如高温导致密封失效) |
针对燃气调压器的故障特点,提取时序特征+频域特征+时频域特征,共126个特征:
| 特征类型 | 提取对象 | 常用特征(示例) | 物理意义 |
|---|---|---|---|
| 时序特征 | 振动(X/Y/Z轴) | 均值、峰值、峭度、峰值因子、脉冲因子、波形因子 | 反映振动信号的平稳性(故障时峭度/峰值升高) |
| 时序特征 | 压力(进出口) | 均值、方差、极差、突变次数(超过阈值的波动)、响应时间(压力调整滞后时长) | 反映压力稳定性(泄漏时出口压力方差增大) |
| 时序特征 | 声音 | 有效值、峰值、能量、过零率 | 泄漏时声音能量和过零率显著升高 |
| 频域特征 | 振动 | FFT后前8个峰值频率、频谱重心、0-2kHz/2-5kHz/5-10kHz频带能量占比 | 卡涩/磨损时特定频率(如阀芯共振频率)峰值突出 |
| 频域特征 | 声音 | 梅尔频率倒谱系数(MFCC)前13维、频谱熵 | 泄漏时高频段(10-20kHz)能量占比升高 |
| 时频域特征 | 振动 | 小波包分解(db4,3层)8个频带能量、能量熵 | 非平稳故障(如执行机构突发故障)的特征捕捉 |
| 时频域特征 | 声音 | 短时傅里叶变换(STFT)后的时频矩阵能量统计 | 泄漏声的时频分布特征 |
import numpy as np
import scipy.signal as signal
from scipy.fftpack import fft
import pywt
# 1. 时序特征提取(振动数据)
def extract_time_features(data):
mean_val = np.mean(data)
peak_val = np.max(np.abs(data))
kurtosis_val = np.kurtosis(data)
peak_factor = peak_val / np.sqrt(np.mean(np.square(data))) # 峰值因子
return [mean_val, peak_val, kurtosis_val, peak_factor]
# 2. 频域特征提取(振动数据)
def extract_freq_features(data, fs=10000):
n = len(data)
fft_data = fft(data)[:n//2]
freq = np.fft.fftfreq(n, 1/fs)[:n//2]
fft_amp = np.abs(fft_data) # 频谱幅值
top8_freq = freq[np.argsort(fft_amp)[-8:]] # 前8个峰值频率
spec_centroid = np.sum(freq * fft_amp) / np.sum(fft_amp) # 频谱重心
return list(top8_freq) + [spec_centroid]
# 3. 时频域特征提取(振动数据)
def extract_time_freq_features(data):
wp = pywt.WaveletPacket(data, wavelet='db4', mode='symmetric', maxlevel=3)
freq_bands = [node.data for node in wp.get_level(3, 'natural')] # 8个频带
band_energy = [np.sum(np.square(band)) for band in freq_bands]
energy_entropy = -np.sum([e/np.sum(band_energy) * np.log2(e/np.sum(band_energy)) for e in band_energy])
return band_energy + [energy_entropy]
# 加载振动数据(示例:1秒样本,10000个数据点)
vibration_data = np.random.randn(10000) # 实际替换为真实数据
time_features = extract_time_features(vibration_data)
freq_features = extract_freq_features(vibration_data)
time_freq_features = extract_time_freq_features(vibration_data)
all_features = time_features + freq_features + time_freq_features
用随机森林模型评估特征重要性,保留累计重要性占比≥85%的特征:
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
# 加载特征工程后的数据(X:特征矩阵,y:故障类型标签)
# X.shape = (1800000, 85), y.shape = (1800000,)
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X, y)
feature_importance = rf.feature_importances_
# 选择累计重要性≥85%的特征
cumulative_importance = np.cumsum(sorted(feature_importance, reverse=True))
threshold_idx = np.where(cumulative_importance ≥ 0.85)[0][0]
selected_features = X.columns[np.argsort(feature_importance)[-threshold_idx-1:]]
# 最终特征矩阵
X_selected = X[selected_features] # 共28个关键特征
from sklearn.model_selection import train_test_split
# 故障类型分类任务数据集
X_cls = X_selected
y_cls = y['故障类型']
X_cls_train, X_cls_temp, y_cls_train, y_cls_temp = train_test_split(
X_cls, y_cls, test_size=0.3, stratify=y_cls, random_state=42
)
X_cls_val, X_cls_test, y_cls_val, y_cls_test = train_test_split(
X_cls_temp, y_cls_temp, test_size=0.5, stratify=y_cls_temp, random_state=42
)
# 故障严重程度回归任务数据集(仅故障样本)
fault_samples = X_selected[y['故障类型'] != '正常']
y_reg = y[y['故障类型'] != '正常']['严重程度']
X_reg_train, X_reg_test, y_reg_train, y_reg_test = train_test_split(
fault_samples, y_reg, test_size=0.3, stratify=y_reg, random_state=42
)
考虑到边缘部署的轻量化需求和多任务目标(分类+回归),采用传统机器学习融合方案:
import lightgbm as lgb
import xgboost as xgb
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
# 1. LightGBM训练
lgb_train = lgb.Dataset(X_cls_train, label=y_cls_train)
lgb_val = lgb.Dataset(X_cls_val, label=y_cls_val, reference=lgb_train)
lgb_params = {
'objective': 'multiclass',
'num_class': 8, # 7类故障+正常
'metric': 'multi_logloss',
'learning_rate': 0.05,
'num_leaves': 63,
'max_depth': 8,
'feature_fraction': 0.8,
'bagging_fraction': 0.8,
'bagging_freq': 5,
'reg_alpha': 0.1, # L1正则
'reg_lambda': 0.1, # L2正则
'verbose': -1,
'random_state': 42
}
lgb_model = lgb.train(
lgb_params,
lgb_train,
num_boost_round=1000,
valid_sets=[lgb_val],
early_stopping_rounds=50,
callbacks=[lgb.log_evaluation(100)]
)
# 2. XGBoost训练
xgb_train = xgb.DMatrix(X_cls_train, label=y_cls_train)
xgb_val = xgb.DMatrix(X_cls_val, label=y_cls_val)
xgb_params = {
'objective': 'multi:softprob',
'num_class': 8,
'eval_metric': 'mlogloss',
'learning_rate': 0.05,
'max_depth': 8,
'subsample': 0.8,
'colsample_bytree': 0.8,
'alpha': 0.1,
'lambda': 0.1,
'seed': 42
}
xgb_model = xgb.train(
xgb_params,
xgb_train,
num_boost_round=1000,
evals=[(xgb_val, 'val')],
early_stopping_rounds=50,
verbose_eval=100
)
# 3. 加权投票融合
def ensemble_predict(X):
# LightGBM预测概率
lgb_pred_prob = lgb_model.predict(X, num_iteration=lgb_model.best_iteration)
# XGBoost预测概率
xgb_pred_prob = xgb_model.predict(xgb.DMatrix(X))
# 加权融合
ensemble_prob = 0.6 * lgb_pred_prob + 0.4 * xgb_pred_prob
return np.argmax(ensemble_prob, axis=1)
# 测试集预测
y_cls_pred = ensemble_predict(X_cls_test)
from sklearn.metrics import mean_absolute_error, r2_score
lgb_reg_train = lgb.Dataset(X_reg_train, label=y_reg_train)
lgb_reg_val = lgb.Dataset(X_reg_test, label=y_reg_test, reference=lgb_reg_train)
lgb_reg_params = {
'objective': 'regression',
'metric': 'mae',
'learning_rate': 0.05,
'num_leaves': 31,
'max_depth': 6,
'feature_fraction': 0.8,
'bagging_fraction': 0.8,
'reg_alpha': 0.05,
'reg_lambda': 0.05,
'verbose': -1,
'random_state': 42
}
lgb_reg_model = lgb.train(
lgb_reg_params,
lgb_reg_train,
num_boost_round=500,
valid_sets=[lgb_reg_val],
early_stopping_rounds=30,
callbacks=[lgb.log_evaluation(100)]
)
# 回归模型评估
y_reg_pred = lgb_reg_model.predict(X_reg_test, num_iteration=lgb_reg_model.best_iteration)
基于故障严重程度的时间序列趋势,采用指数平滑法预测未来24小时故障发展:
from statsmodels.tsa.holtwinters import ExponentialSmoothing
def fault_early_warning(severity_series, forecast_hours=24):
"""
severity_series: 过去12小时的故障严重程度序列(1小时/个数据点)
return: 预警结果(是否预警)、预计故障发生时间
"""
# 指数平滑预测
model = ExponentialSmoothing(severity_series, trend='add', seasonal=None)
result = model.fit()
forecast = result.forecast(forecast_hours)
# 若预测未来24小时内严重程度≥4级,触发预警
if np.max(forecast) ≥ 4:
warning_time = np.where(forecast ≥ 4)[0][0] + 1 # 首次达到4级的时间(小时)
return True, f"预计{warning_time}小时后故障严重程度达到4级,建议立即检修"
return False, "未来24小时故障无恶化风险"
| 模型任务 | 核心指标 | 结果 |
|---|---|---|
| 故障类型分类(融合模型) | 准确率、各类故障召回率 | 准确率97.8%,所有故障召回率≥93% |
| 故障严重程度回归 | MAE、R² | MAE=0.21,R²=0.92 |
| 预测性预警 | 提前预警时间、误报率、漏报率 | 平均提前预警28小时,误报率0.7%,漏报率0.3% |
flowchart TD
A[燃气调压器传感器] --> B[边缘计算盒(华为Atlas 200I)]
B --> C[本地模型服务(量化后分类+回归模型)]
C --> D[本地监控终端(声光报警+故障显示)]
B --> E[燃气公司私有云]
E --> F[云端监控平台(Vue+ECharts)]
E --> G[模型增量训练服务]
F --> H[运维人员手机APP/PC端]

本案例基于燃气调压器的实际业务痛点,构建了“数据采集-预处理-特征工程-模型构建-验证优化-部署运维”的全流程故障诊断系统,核心亮点:
业务贴合:聚焦燃气行业防爆、实时性、安全优先的核心需求,传感器选型、模型部署均符合行业规范技术实用:采用传统机器学习融合方案,兼顾精度与边缘部署轻量化,避免“为技术而技术”价值量化:通过试点运行验证了显著的经济价值和安全价值,为全面推广提供有力支撑闭环迭代:建立完善的运维和迭代机制,确保模型长期适应设备性能退化、工况变化等场景该案例可直接复用于燃气行业其他设备(如阀门、压缩机),也为石油天然气领域的设备故障诊断提供了“业务+技术”深度融合的参考范式。