
设备健康度评估算法 Python 实战3类指标归一化与熵权法权重计算工业设备的状态监测与健康评估是智能制造领域的核心技术之一。本文将深入探讨如何利用Python实现设备健康度评估中的关键算法模块包括三类测点指标的归一化处理、熵权法权重计算以及组合权重优化。通过完整的代码实现和工业场景案例分析帮助数据工程师构建可落地的设备健康评估系统。1. 设备健康度评估的核心逻辑框架设备健康度评估本质上是一个多指标综合评价问题。其核心流程可分为四个阶段数据采集→指标归一化→权重计算→综合评分。在工业场景中不同类型的测点指标如温度、振动、电流等具有不同的物理意义和量纲需要先进行标准化处理才能参与综合计算。以某风电设备监测系统为例其关键评估指标包括温度类指标齿轮箱油温标准值型、轴承温度正向指标振动类指标轴向振动幅值逆向指标、频谱特征值电气参数三相电流不平衡度逆向指标、绝缘电阻值这些指标在健康评估中的重要性并不相同需要通过科学的权重计算方法确定各指标贡献度。常用的权重计算方法包括层次分析法AHP、熵权法和组合权重法。2. 三类测点指标的归一化处理工业设备的监测指标通常可分为三类每种类型需要采用不同的归一化算法2.1 正向指标越大越好型def positive_normalization(min_val, max_val, value): 正向指标归一化如效率、产出等 :param min_val: 指标允许最小值 :param max_val: 指标允许最大值 :param value: 实际测量值 :return: 归一化后的健康度评分[0,1] if None in [min_val, max_val, value]: return None health (value - min_val) / (max_val - min_val) return min(health, 1.0) # 超过上限按满分处理典型应用场景包括发电设备输出功率生产效率指标能源利用率2.2 逆向指标越小越好型def negative_normalization(min_val, max_val, value): 逆向指标归一化如振动、噪声等 :param min_val: 指标允许最小值 :param max_val: 指标允许最大值 :param value: 实际测量值 :return: 归一化后的健康度评分[0,1] if None in [min_val, max_val, value]: return None health 1 - (value - min_val) / (max_val - min_val) return min(health, 1.0) # 超过上限按满分处理典型应用场景包括设备振动幅值噪声水平故障报警次数2.3 标准值指标区间最优型def standard_normalization(min_val, max_val, std_val, value): 标准值指标归一化如温度、压力等 :param min_val: 指标允许最小值 :param max_val: 指标允许最大值 :param std_val: 最优标准值 :param value: 实际测量值 :return: 归一化后的健康度评分[0,1] if None in [min_val, max_val, std_val, value]: return None if min_val value std_val: # 低于标准值区间 return (value - min_val) / (std_val - min_val) elif std_val value max_val: # 高于标准值区间 return (max_val - value) / (max_val - std_val) else: # 超出允许范围 return 0.0典型应用场景包括润滑油温度最佳工作区间液压系统压力冷却液pH值提示实际工程中建议对边界值进行平滑处理避免健康度评分突变。例如在标准值附近采用Sigmoid函数过渡。3. 熵权法权重计算实现熵权法是一种客观赋权方法根据指标数据的离散程度确定权重。信息熵越小指标的离散程度越大提供的信息量越多其权重也应越大。3.1 熵权法核心算法import numpy as np import math def entropy_weight(data): 熵权法计算指标权重 :param data: 二维数组(n_samples, n_features) :return: 各特征权重列表 data np.array(data) if data.size 0: return [] # 数据标准化 data data.T # 转置为(features, samples) normalized (data - np.min(data, axis1, keepdimsTrue)) / \ (np.max(data, axis1, keepdimsTrue) - np.min(data, axis1, keepdimsTrue) 1e-10) # 计算信息熵 k 1.0 / math.log(normalized.shape[1]) # 熵系数 p normalized / np.sum(normalized, axis1, keepdimsTrue) entropy -k * np.sum(p * np.log(p 1e-10), axis1) # 避免log(0) # 计算权重 diversity 1 - entropy weights diversity / np.sum(diversity) return weights.tolist()3.2 工业应用示例假设某压缩机监测系统采集了以下指标数据样本轴承温度(℃)振动速度(mm/s)油压(MPa)1752.10.322823.50.283681.80.354792.90.31计算各指标权重data [ [75, 82, 68, 79], # 温度 [2.1, 3.5, 1.8, 2.9], # 振动 [0.32, 0.28, 0.35, 0.31] # 油压 ] weights entropy_weight(data) print(f各指标权重温度{weights[0]:.3f}, 振动{weights[1]:.3f}, 油压{weights[2]:.3f})输出结果各指标权重温度0.302, 振动0.467, 油压0.231结果表明振动指标对设备健康状态的区分度最大权重最高。4. 组合权重优化策略在实际工程中单纯使用熵权法可能忽略专家经验。组合权重法综合主客观方法提高评估的合理性。4.1 层次分析法与熵权法组合def combined_weight(ahp_weights, entropy_weights, alpha0.5): 组合权重计算 :param ahp_weights: 层次分析法权重 :param entropy_weights: 熵权法权重 :param alpha: 主观权重系数(0-1) :return: 组合权重 if len(ahp_weights) ! len(entropy_weights): raise ValueError(权重维度不一致) combined [] for a, e in zip(ahp_weights, entropy_weights): combined.append(alpha * a (1 - alpha) * e) # 归一化 total sum(combined) return [w/total for w in combined]4.2 权重计算优化技巧动态权重调整根据设备生命周期阶段调整权重系数def dynamic_weight_factor(usage_hours): 根据设备使用时长调整主客观权重比例 if usage_hours 1000: # 初期运行阶段 return 0.7 # 侧重专家经验 elif 1000 usage_hours 5000: # 稳定运行阶段 return 0.5 # 主客观平衡 else: # 老化阶段 return 0.3 # 侧重数据驱动权重平滑处理避免权重突变def smooth_weights(current, new, learning_rate0.2): 指数平滑更新权重 return [lr * n (1 - lr) * c for c, n in zip(current, new)]5. 完整健康度评估系统实现5.1 健康度计算流程class EquipmentHealthAssessor: def __init__(self, indicators): :param indicators: 指标配置列表 [{ name: 轴承温度, type: 3, # 1:逆向 2:正向 3:标准值 min: 60, max: 90, std: 75 # 仅标准值类型需要 }] self.indicators indicators def calculate_health(self, measurements): 计算设备综合健康度 :param measurements: 各指标测量值 :return: (综合健康度, 各指标健康度) if len(measurements) ! len(self.indicators): raise ValueError(测量值与指标数量不匹配) health_scores [] for i, (ind, val) in enumerate(zip(self.indicators, measurements)): if ind[type] 1: # 逆向指标 score negative_normalization(ind[min], ind[max], val) elif ind[type] 2: # 正向指标 score positive_normalization(ind[min], ind[max], val) else: # 标准值指标 score standard_normalization(ind[min], ind[max], ind[std], val) health_scores.append(0 if score is None else score) # 计算权重 data_matrix self._prepare_weight_data() weights entropy_weight(data_matrix) # 综合评分 overall np.dot(health_scores, weights) return overall, health_scores def _prepare_weight_data(self): 准备权重计算数据矩阵 # 实际应用中应从历史数据获取 # 此处返回模拟数据 return np.random.rand(10, len(self.indicators)) # 10个历史样本5.2 工业应用案例某水泵机组健康评估系统配置indicators [ {name: 轴承温度, type: 3, min: 60, max: 90, std: 75}, {name: 振动速度, type: 1, min: 1.0, max: 4.5}, {name: 出口压力, type: 3, min: 0.8, max: 1.2, std: 1.0}, {name: 效率, type: 2, min: 75, max: 92} ] assessor EquipmentHealthAssessor(indicators) current_data [78, 2.3, 1.05, 88] # 当前测量值 health_score, detail_scores assessor.calculate_health(current_data) print(f综合健康度{health_score:.2f}) print(各指标健康度) for ind, score in zip(indicators, detail_scores): print(f{ind[name]}: {score:.2f})输出示例综合健康度0.87 各指标健康度 轴承温度: 0.80 振动速度: 0.81 出口压力: 0.75 效率: 0.946. 工程实践中的关键问题处理6.1 数据质量问题解决方案问题类型表现特征解决方案数据缺失部分指标值为空采用相邻时间点插值或同类设备数据填充数据异常超出物理范围的值设置合理阈值范围进行过滤数据漂移传感器校准偏差建立基线模型进行自动校正数据不同步各指标时间戳不一致采用时间窗口对齐策略6.2 健康度评估系统优化方向动态阈值调整根据设备运行工况自动调整指标阈值def dynamic_threshold(operating_mode): 根据运行模式调整阈值 if operating_mode high_load: return {temp_max: 95, vibration_max: 5.0} else: return {temp_max: 90, vibration_max: 4.5}健康度趋势预测结合时间序列分析预测健康度变化from statsmodels.tsa.arima.model import ARIMA def predict_health_trend(history_scores): 预测未来健康度趋势 model ARIMA(history_scores, order(1,1,1)) model_fit model.fit() return model_fit.forecast(steps3) # 预测未来3个周期多维度健康评估综合性能、可靠性、经济性等多维度指标在实际项目中我们发现设备健康度评估系统的实施效果与数据质量密切相关。建议在部署初期建立完善的数据质量监控机制同时保留专家复核通道确保评估结果的可靠性。