尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DGA变压器故障诊断数据集全解析:从气体判据到机器学习

DGA变压器故障诊断数据集全解析:从气体判据到机器学习 简介面向变压器故障诊断与油中溶解气体分析DGA研究这份数据集提供了357组实测样本涵盖7种典型故障类型与正常状态可用于气体组分与故障类型的关联分析、阈值判定及机器学习建模。数据以Excel表格存储Sheet1为原始测量值Sheet2为归一化处理后的数据便于研究者直接进行探索性分析或输入常见分类算法。压缩包共2000个文件约81.36MB除核心Excel数据外还包含php、png、dat、js、html等多种格式的辅助与支撑文件适合配合数据整理、可视化和算法验证流程使用。目前已有396人学习下载可帮助电力专业学生、设备运维人员及算法工程师快速获得标准化的DGA训练样本降低数据预处理成本提升故障诊断实验的可复现性。 做变压器故障诊断这行的几乎没有谁绕得过DGA——油中溶解气体分析。我刚入行时带我的老师傅一句话记到现在变压器油就是变压器的一管血验血能看出不少毛病。后来自己接手配电设备运维才真正明白这话的含金量。变压器内部一旦出现局部放电、过热、电弧这类潜伏性故障绝缘油里溶解的氢气、甲烷、乙烷、乙烯、乙炔等特征气体浓度就会明显变化定期取样做色谱分析再对照判据就能判断设备状态。最近我在整理一套变压器故障诊断分析用DGA数据集Excel格式发现不少同行都在找类似的数据用来做研究、做算法验证、做毕业论文。所以这篇就用实际操作的角度把这类数据集从结构、清洗、规则判据到机器学习建模的完整链路聊透适合刚接触DGA的运维人员也适合拿公开数据集做故障诊断算法的开发者。1. 变压器故障诊断为什么大家都先看油里溶了什么气1.1 从验血报告说起的DGA原理变压器内部有两大绝缘系统绝缘油和绝缘纸。正常运行时油纸在热和电场作用下只会极缓慢地老化产生少量二氧化碳和一氧化碳一旦出现异常工况比如局部放电、过热、电弧放电局部能量密度会骤然升高油分子和纸分子里的碳氢键被打断断片重新组合就会生成一堆特征气体。这里面有个经验规律值得记住故障能量密度越高不饱和烃的比例越大。低温过热150℃以下主要生成甲烷和乙烷300℃以上乙烯开始大量出现并逐渐取代甲烷成为主产物到了700℃以上甚至电弧放电级别乙炔就会出现而且氢气占比也很高。这也是为什么DGA能区分故障类型——每种故障对应的是不同气体的指纹组合而不是单一气体浓度高低的问题。1.2 为什么DGA是电力行业的首选初筛电气试验里能做变压器内部状态判断的手段不少回路电阻、介质损耗、耐压试验都能发现一些问题但它们大多需要停电而且有些故障比如低能量局部放电在绝缘试验里未必能稳定复现。DGA最大的优势在于带电取样用注射器从油阀里抽出10mL到20mL油样拿回实验室色谱仪一打几十个样本一天就能出结果。成本低、周期短、干扰小所以几乎所有状态检修制度都把DGA列为变压器油化监督的头号项目。但有一点必须说明DGA是辅助诊断不是定性结论。它告诉你这个变压器大概率是高温过热但到底是绕组接头发热还是磁路问题还需要结合绕组直阻、铁芯接地电流、油温等试验去验证。做数据集和算法的时候也要把DGA的定位想清楚——它解决的是故障类别识别问题不是故障部位定位问题。2. 一份合格的DGA数据集字段设计要比想象中讲究2.1 气体字段到底有哪些一套规范的DGA数据核心必然是气体浓度。通常是这7种特征气体加总烃单位一般是μL/L微升每升很多老报告里习惯写成ppm两者数值等价。我用表格把它们和故障类型的对应关系列出来这套对应关系其实是所有后续代码和模型的隐含前提气体化学式主要来源/指示的故障氢气H2局部放电、低能放电、电弧放电甲烷CH4低温过热、放电伴生热分解乙烷C2H6低温热分解油老化乙烯C2H4高温过热300℃以上明显乙炔C2H2电弧、高能放电严重故障标志一氧化碳CO固体绝缘热分解二氧化碳CO2固体绝缘老化总烃各烃类之和综合评价可燃气体总量这里要特别提醒一下很多刚接触DGA的人只看H2和C2H2觉得乙炔高就是放电。实际上局部放电早期的特征气体往往是氢气加甲烷乙炔可能并不突出而高温过热持续一段时间后乙烯持续积累总烃会显著增高。特征气体之间是组合关系单个气体浓度很难下结论。2.2 元数据字段是数据集容易被忽视的另一半一份真正可用的DGA数据集除了气体浓度通常还应该有这些字段设备编号同一台变压器会多次采样这是做时间序列分析和防止数据泄漏的关键键值。采样日期产气速率日增长率、月增长率是判断故障发展速度的重要指标没有日期就无法计算。电压等级110kV、220kV、500kV设备的正常参考浓度范围不同模型里最好作为离散特征。负荷情况可选高负荷下油温升高正常产气也会略高带负荷采样和停电采样要区分。油温/顶层油温可选解释浓度波动时非常有用。故障类型标签重点数据集的灵魂。为什么我要反复强调元数据因为很多公开数据集只给了一堆气体浓度和一个标签看起来能用但做趋势分析、按设备划分训练集的时候完全无从下手。我见过有人把同一台变压器不同时间的8条采样当成8个独立样本直接随机划分训练集和验证集里都出现了这台设备最后模型看起来F1很高一到现场就崩——这是典型的数据泄漏。字段设计阶段把这个坑避开后面会省很多事。2.3 标签是数据集的灵魂DGA数据集里最重要的不是气体浓度而是标签。气体浓度是客观测量出来的标签则是人工确定的它的可靠性直接决定数据集的上限。业内常见的故障类型标签一般有这7类正常、局部放电、低能放电、高能放电、低温过热、中温过热、高温过热。部分数据集还会细分受潮油中电弧等特殊类别。标签来源也有讲究最可靠的是吊罩检修或内部检查的实物确认结论其次是专家综合诊断结论再其次是根据DGA本身判据自动打标——但这已经带上了循环论证的风险用这种数据训练模型去对比同一个判据等于自我印证意义不大。我在实际整理数据集时会额外保留一列标签来源字段检修确认/专家会诊/DGA判据后续做训练集筛选时可以按来源加权或直接只用高置信度样本。这个细节对研究价值影响很大。3. 拿到Excel别急着建模三种经典判据先跑起来3.1 数据加载与基础结构确认拿到Excel格式的DGA数据集第一步不是建模而是先把数据读进来、看结构。我习惯用pandas做这项工作import pandas as pd df pd.read_excel(dga_dataset.xlsx, sheet_name0) print(df.shape) print(df.head()) print(df.dtypes)这里有一个实用的小经验早期很多台账导出的Excel里气体浓度列是文本类型里面可能混着0.5、未检出、痕迹这类字样。最好加载后立刻跑一个df.apply(lambda s: pd.to_numeric(s, errorscoerce).notnull().all())检查数值列是否干净否则后面的比值计算会直接报错或全变NaN。确认结构后把气体列单独抽出来gas_cols [H2, CH4, C2H6, C2H4, C2H2, CO, CO2] X df[gas_cols].astype(float) print(X.describe())查看min、max、mean的目的是快速发现量纲异常正常DGA数据里H2可能从几到几千μL/L但如果看到H2是负值、C2H2是几千而其他气体都很低大概率是单位换算错误或录入串行这类样本要回溯原始报告核对。3.2 三比值法最基础也最好上手的判据三比值法IEC 60599/SD 187改良三比值法的原理是把三种气体比值按区间编码成组合再查表得到故障类型。三组比值是CH4/H2、C2H2/C2H4、C2H4/C2H6。直接看原始浓度的绝对值经常被变压器油量、负荷水平干扰比值则能消除一部分稀释效应这是三比值法的内在逻辑。用pandas实现编码表并不复杂import numpy as np def encode_ratio(r): if np.isnan(r): return 0 if r 0.1: return 0 elif r 1: return 1 elif r 3: return 2 else: return 2 # 按DL/T 722-2000编码表调整 df[r1] df[CH4] / df[H2].replace(0, np.nan) # 注意除零 df[r2] df[C2H2] / df[C2H4].replace(0, np.nan) df[r3] df[C2H4] / df[C2H6].replace(0, np.nan) df[code1] df[r1].apply(encode_ratio) df[code2] df[r2].apply(encode_ratio) df[code3] df[r3].apply(encode_ratio)执行到这里你会发现一个几乎所有DGA数据集都会逼你面对的问题分母为零。实际样本里H2或C2H6报0的比例不低尤其是健康设备。直接replace(0, np.nan)会把整行比值变成NaN连编码都做不了。我的做法是分两层处理如果0是色谱仪未检出按检出限的一半0.5μL/L填充再计算比值。如果确实是实测接近零分母用极小值比如0.1代替但要在注释里标记这些样本的比值编码仅供参考。编码表本身不复杂三组编码分别对应不同故障组合0,0,0编码为正常或低温过热需要配合其他编码细分0,2,0是局部放电1,0,0是低温过热0,0,1是中温过热1,0,1是高温过热0,1,0是低能放电1,1,0是高能放电。具体映射建议直接查DL/T 722-2000标准里的表不同版本对个别组合有差异代码里最好把标准版本号写在注释里方便追溯。3.3 杜瓦尔三角形可视化是最好的初筛手段三比值法有个毛病编码区间是硬切的样本落在边界附近时结果很不稳定。杜瓦尔三角形是另一种主流方式它把CH4、C2H4、C2H2三种气体归一化在一个等边三角形里画区域每个区域对应一类故障。归一化计算很简单def duval_norm(row): total row[CH4] row[C2H4] row[C2H2] if total 0: return (np.nan, np.nan) return (row[CH4] / total, row[C2H4] / total, row[C2H2] / total)如果只是做研究可以用matplotlib把这个点画到三角形区域图里快速观察样本分布和标签的聚簇情况。我每次拿到新DGA数据集都会先画一张杜瓦尔三角图比直接看混淆矩阵直观得多——你会立刻发现高能放电和低能放电两个类在图上经常重叠这是后续做分类器时最难区分的边界区域。4. 清洗DGA数据的几个深坑零值、缺测与标签污染4.1 零值是第一个坑要区分真零和未检出色谱仪的检出限通常能做到0.1μL/L到0.5μL/L低于检出限的结果很多报告就直接写0少数写0.5。这两种写法处理逻辑完全不同写0是把它当成真值参与计算写0.5应该理解为该值在0到0.5之间而不是0。我在整理数据集时会把所有0.5转成0.5检出限的一半把纯0保留或者也转成0.5再说明。这样处理的理由只有一个避免比值计算时出现分母为0的inf或NaN。如果你要做机器学习零值和极小值的处理还会影响模型对乙炔出现这类强判据特征的理解。C2H2这个气体很特殊健康变压器里应该在检出限附近一旦明显升高基本就是放电信号。所以C2H2的0.5 vs 0并不影响模型判断但H2和C2H6的零处理会影响比值编码这在规则判据里必须慎重。4.2 缺测字段先判断缺的是不是判据关键气体历史台账最常见的问题是早期只关注三比值CO和CO2缺口严重或者反过来只有总烃没有分气体。缺测处理没有万能方案我的建议是按用途分如果只做DGA三比值诊断CO/CO2缺失不影响核心判断可以保留。如果要做固体绝缘老化评估或ML建模CO/CO2是重要特征大量缺失时不如先剔除这些列而不是用均值填充制造假数据。如果某行缺失H2或C2H6这类比值关键气体且样本量不缺直接删行比强行插补更干净。另外还要检查重复行。同一台设备的多次月度采样可能因为录入重复出现完全相同的浓度行这通常不是故障而是复制粘贴。按气体列做drop_duplicates再核对标签是否一致能过滤掉一批干扰数据。4.3 标签污染最隐蔽也最致命我在整理数据时踩过最深的坑是标签冲突同一台设备同一个月出现了两条气体浓度几乎相同、标签却一个是正常一个是高温过热的记录。原因大概率是后续检修结论更新了标签但原行没有被同步修改也没有标记修订记录。处理标签污染我总结了一套检查流程按设备编号日期排序查看同一设备标签随时间的变化是否合理正常情况下设备故障标签应该从正常逐渐演化为过热/放电而不是反复横跳。对气体浓度向量做近似去重找距离极近但标签不同的样本人工核对。优先信任有检修结论的标签无法确认的样本标记为存疑不强塞进训练集。标签是监督学习的地面真值一个污染标签比十个缺失值危害都大因为它不只会伤害一个样本还会在训练时误导模型决策边界。4.4 单位陷阱μL/L、ppm、mg/L不是一回事ECharts上的DGA数据绝大多数用μL/L但我在整理Excel数据集时发现部分表格里混入了mg/L。两者虽然数值上常被当作近似严格来说换算要考虑油样的密度和取样条件误差能到几个百分点。我的检查办法是看数据范围的分布正常变压器油中H2一般低于几十到几百μL/L如果一份数据集里H2普遍是几千甚至上万先怀疑单位换算问题再怀疑是特殊故障情况别急着当异常样本删掉。5. 用DGA数据集做机器学习注意类不平衡与数据泄漏5.1 特征工程不该是喂原始浓度这么简单把7个气体浓度直接塞进随机森林也能跑但效果和可解释性都有限。DGA的领域知识告诉我们真正有价值的信息往往是浓度组合和比例。我常用的特征集包括三层第一层原始浓度H2、CH4、C2H6、C2H4、C2H2、CO、CO2。第二层总烃、三组比值CH4/H2、C2H2/C2H4、C2H4/C2H6、H2和总烃比值等。第三层三比值编码结果、杜瓦尔三角区域编号作为派生类别特征。这三层特征同时放进模型比单用原始浓度或者单用规则编码都稳定。原因是原始浓度保留了量级信息比值削弱了油量和负荷的干扰编码结果则引入了专家先验。三者结合模型的鲁棒性明显更好。但要注意特征多了之后三比值编码里有个问题——H2极低时CH4/H2会变成很大的数编码稳定落在高区间但实际这个样本可能只是健康状态下的正常波动。所以特征工程做完之后务必看一眼每个特征的分布和极端值把明显异常的特征样本单独拎出来分析。5.2 类不平衡是DGA数据集的常态真实DGA数据集的类别分布几乎一定是不平衡的正常样本和高温过热样本偏多局部放电、低能放电样本偏少高能放电可能只有几十条甚至十几条。直接拿原始分布训练模型会把少数类全部预测成多数类准确率还虚高。我的经验是三层处理评估指标用宏平均F1macro-F1和每类别召回率别只报accuracy。训练时给少数类加权比如class_weightbalanced或者用SMOTE做合成过采样——但SMOTE只在特征空间合理时才用DGA的比值特征如果做过归一化SMOTE的插值通常在可接受范围内。交叉验证用StratifiedKFold保证每个折里少数类都有分布。少数类类别本身也有内在困难低能放电和高能放电在杜瓦尔三角图上区域相邻气体特征也近似即使样本量平衡模型也容易混淆。遇到这种情况不用自责专家的判断同样会犯这类错误重点是先把边界样本找出来看是两个类本身可分性差还是标签本身打错了。5.3 防止数据泄漏按设备划分而非按行划分前面提过同一台变压器会多次采样这些样本之间存在强相关。如果随机划分训练集和测试集同一台设备的多次采样很可能同时出现在两边模型等于见过答案再考试。正确做法是按设备编号进行分组划分from sklearn.model_selection import GroupKFold gkf GroupKFold(n_splits5) for train_idx, test_idx in gkf.split(X, y, groupsdf[equipment_id]): # train_idx / test_idx 中不会出现同一台设备 pass如果是学术研究还可以进一步做跨设备验证用一批变压器训练在完全没有出现过的变压器上测试这才是评价DGA模型实际泛化能力的正确姿势。我见过不少论文声称精确率95%以上仔细一看用的是随机划分换到跨设备场景直接掉到75%出头——这个落差基本就是数据泄漏造成的。另外还要防标签泄漏如果你自己构造特征时不小心把检修结论或后续试验数据当作特征放了进去模型会学到一个在现实中拿不到的信息。构建特征的时候只允许使用采样当天的气体数据和运行参数任何事后信息都不允许进特征矩阵。5.4 可解释性用SHAP看气体重要度DGA诊断是要给运维决策用的黑盒模型很难让人放心。我在项目里习惯用SHAP分析特征贡献一是验证模型逻辑是否符合领域知识二是给报告配图。import shap explainer shap.TreeExplainer(model) shap_values explainer.shap_values(X_test) shap.summary_plot(shap_values, X_test, feature_namesX.columns)正常情况下的输出应该符合直觉C2H2对放电类故障的贡献最大C2H4对过热类贡献最大H2对局部放电贡献明显。如果你看到C2H2对正常样本的预测贡献特别高说明模型学到的东西有偏差回头检查特征工程或标签清洗比盲目调参有用得多。6. 实测下来的几个经验以及我为什么一直保留原始Excel最后一个部分不写总结就说几条我在反复整理和使用DGA数据集过程中的真实体会。第一原始Excel千万别乱改。我会保留一个原始导入sheet和一个清洗后sheet所有清洗操作都通过脚本生成新文件而不是直接覆盖源数据。DGA数据的来龙去脉很难完整追溯你永远不知道未来某个研究点需要回到原始值。第二先跑规则判据再上机器学习。每次拿到新数据我都会先用IEC三比值和杜瓦尔三角跑一遍画几张分布图。这些传统判据虽然准确率不如精心调优的模型但它们的错误模式是已知的能帮你快速筛出数据里的异常样本。第三样本量小的时候别硬上深度学习。DGA公开数据集通常只有几百到两三千条7类故障分布又不均深度学习很容易过拟合。我在这个量级上的经验是梯度提升树XGBoost、LightGBM加上合理的特征工程配合好的交叉验证设计效果稳定且可解释性强性价比远高于堆复杂网络。第四后续想扩展的话可以往两个方向走一是加入采样时间间隔把产气速率作为新特征故障发展速度本来就是DGA的核心判据之一二是做设备级别的归一化用每台设备的历史基线扣除正常波动再看偏差这对识别缓慢发展的过热故障特别有效。DGA数据集的价值不只在那一张Excel表里更在于你怎么对待里面的每一列、每一个零值、每一条标签。把数据基础打扎实后面无论是传统判据还是机器学习都能少走很多弯路。本文还有配套的精品资源点击获取
返回列表