面向不平衡样本的风电机组 SCADA 数据故障诊断方法也是一种场景时空特征融合的风电机组故障诊断数据集爱尔兰某风电场3MW风电机组SCADA数据集日期为2014.5.1-2015.4.9共49027条样本故障数据集2014.5.14-2015.1.15553条采样间隔10min63个监测变量6种运行状态运行状态标签见图数据处理流程SCADA与故障数据合并筛选24h前/后故障样本异常值剔除风速、有功、转速DBSCAN参数组合25种选择epn0.02、ac6的组合处理后样本30415个特征提取Z-score标准化时空窗口制作样本30394个故障样本随机正常样本3000最终4081个8:2划分训练集/测试集数据文件支撑数据-机组数据.xlsx字段时间步、机舱振动X/Y、传动链振动、风速、风轮转速、轴承温度、电网有功/无功、偏航速度、变桨轴位置、机舱发电机温度、齿轮箱油温、IGBT温度、水冷温度、机舱外温度、塔基温度、轮毂温度、转子频率、电网频率、发电机转速、故障标签11时空特征融合风电机组故障诊断数据集 | 应用场景完整代码使用指南一、数据集基础信息表项目详情数据来源爱尔兰某风电场 3MW 风电机组 SCADA 数据采集时段整体2014.5.1–2015.4.9故障段2014.5.14–2015.1.15原始样本量总样本 49027 条故障样本 553 条采样间隔10 分钟/条监测维度63 个监测变量运行状态共 6 类运行状态标签预处理后总量最终有效样本 4081 条故障样本随机正常样本3000条数据划分训练集:测试集 8:2核心字段时间步、多维度振动、温度、转速、功率、偏航/变桨参数、频率、故障标签预处理流程数据融合→异常值剔除→DBSCAN离群点检测→Z-score标准化→时空窗口构建→样本均衡二、核心应用场景场景1基于时空特征融合的故障诊断核心用途利用单变量时序特征时间维度多传感器关联特征空间维度搭建时空融合模型实现风机故障识别、故障分类、早期故障预警适配论文/毕设/工业落地。适用模型CNNLSTM、CNNGRU、ConvLSTM、TCN、Transformer、时空注意力网络落地价值风机预测性维护、减少非计划停机、提前识别潜在故障场景2时序异常检测 离群点算法验证数据集已使用 DBSCAN 完成离群点筛选可用于对比DBSCAN、孤立森林、OC-SVM、K-Means等无监督异常检测算法效果做算法基准测试。场景3不平衡样本故障分类研究原始故障样本占比低人工均衡后仍可开展类别不平衡学习实验加权损失、欠采样/过采样、SMOTE、Focal Loss 等方案对比。场景4传感器相关性 工况分析分析振动、温度、转速、功率等多传感器耦合关系区分6类运行状态研究不同工况下设备运行规律。场景5故障趋势预测剩余寿命RUL基于故障前后24h时序数据训练时序预测模型预判故障发展趋势与设备剩余使用寿命。三、完整代码实现Python环境依赖安装pipinstallpandas numpy scikit-learn matplotlib seaborn scipy tensorflow1. 数据加载 基础预处理复现官方处理逻辑importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.preprocessingimportStandardScalerfromsklearn.clusterimportDBSCANfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportclassification_report,confusion_matrix# 1. 读取数据 dfpd.read_excel(支撑数据-机组数据.xlsx)# 查看基础信息print(原始数据形状,df.shape)print(字段列表,df.columns.tolist())print(故障标签分布)print(df[故障标签].value_counts())# 特征列剔除时间步、故障标签保留63个监测变量feature_cols[colforcolindf.columnsifcolnotin[时间步,故障标签]]label_col故障标签# 2. 筛选故障前后24h样本 # 采样间隔10min24h 144 个时间步fault_indexdf[df[label_col]!0].index.tolist()keep_indexset()foridxinfault_index:startmax(0,idx-144)endmin(len(df)-1,idx144)keep_index.update(range(start,end))df_filterdf.loc[list(keep_index)].reset_index(dropTrue)print(筛选故障前后24h样本量,df_filter.shape[0])# 3. 风速、有功、转速 异常值剔除3σ准则 defdel_outlier_3sigma(data,col):meandata[col].mean()stddata[col].std()returndata[(data[col]mean-3*std)(data[col]mean3*std)]# 需剔除异常的关键字段outlier_cols[风速,电网有功,风轮转速,发电机转速]forcolinoutlier_cols:ifcolindf_filter.columns:df_filterdel_outlier_3sigma(df_filter,col)print(3σ异常值剔除后样本量,df_filter.shape[0])# 4. DBSCAN 离群点检测 (eps0.02, min_samples6) scaler_dbStandardScaler()data_dbscaler_db.fit_transform(df_filter[feature_cols])dbDBSCAN(eps0.02,min_samples6)df_filter[db_label]db.fit_predict(data_db)# 剔除噪声点标签-1df_dbdf_filter[df_filter[db_label]!-1].drop(columns[db_label]).reset_index(dropTrue)print(DBSCAN去离群点后样本量,df_db.shape[0])# 5. Z-score 标准化 scalerStandardScaler()df_db[feature_cols]scaler.fit_transform(df_db[feature_cols])# 6. 构建时空窗口时序样本defcreate_time_window(data,feat_cols,label_col,window12): 构建时空窗口window时序长度每行 [window, 特征数] 时空特征 X,y[],[]foriinrange(len(data)-window):seqdata.iloc[i:iwindow][feat_cols].values labdata.iloc[iwindow-1][label_col]X.append(seq)y.append(lab)returnnp.array(X),np.array(y)# 窗口可自定义这里以12步(2小时)为例window_size12X_seq,y_seqcreate_time_window(df_db,feature_cols,label_col,window_size)print(时空窗口构建完成,X_seq.shape,y_seq.shape)# 7. 样本均衡故障样本 随机正常样本 fault_idxnp.where(y_seq!0)[0]normal_idxnp.where(y_seq0)[0]# 抽取3000条正常样本np.random.seed(42)normal_selnp.random.choice(normal_idx,size3000,replaceFalse)# 合并故障选中正常样本all_selnp.concatenate([fault_idx,normal_sel])X_finalX_seq[all_sel]y_finaly_seq[all_sel]print(均衡后最终样本量,X_final.shape,y_final.shape)# 8. 8:2 划分训练集/测试集 X_train,X_test,y_train,y_testtrain_test_split(X_final,y_final,test_size0.2,random_state42,stratifyy_final)print(训练集,X_train.shape,测试集,X_test.shape)2. 时空融合模型训练CNNLSTM 经典故障诊断模型适配时空特征CNN 提取空间多传感器关联特征LSTM 挖掘时间时序特征fromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportConv1D,MaxPooling1D,LSTM,Dense,Dropout,Flattenfromtensorflow.keras.utilsimportto_categorical# 标签独热编码多分类6类运行状态故障num_classeslen(np.unique(y_final))y_train_catto_categorical(y_train,num_classes)y_test_catto_categorical(y_test,num_classes)# 搭建 CNNLSTM 时空融合模型modelSequential()# 空间特征提取(CNN)model.add(Conv1D(filters64,kernel_size3,activationrelu,input_shape(X_train.shape[1],X_train.shape[2])))model.add(MaxPooling1D(pool_size2))model.add(Dropout(0.2))# 时间特征提取(LSTM)model.add(LSTM(64,return_sequencesFalse))model.add(Dropout(0.2))# 分类输出model.add(Dense(32,activationrelu))model.add(Dense(num_classes,activationsoftmax))# 模型编译model.compile(optimizeradam,losscategorical_crossentropy,metrics[accuracy])model.summary()# 训练historymodel.fit(X_train,y_train_cat,epochs30,batch_size32,validation_data(X_test,y_test_cat),shuffleTrue)# 模型评估loss,accmodel.evaluate(X_test,y_test_cat)print(f测试集准确率{acc:.4f})# 预测 评估报告y_prednp.argmax(model.predict(X_test),axis1)print(\n分类报告)print(classification_report(y_test,y_pred))print(\n混淆矩阵)print(confusion_matrix(y_test,y_pred))3. 训练过程可视化代码# 绘制损失精度曲线plt.rcParams[font.sans-serif][SimHei]plt.figure(figsize(12,4))plt.subplot(1,2,1)plt.plot(history.history[loss],label训练损失)plt.plot(history.history[val_loss],label验证损失)plt.title(模型损失曲线)plt.legend()plt.subplot(1,2,2)plt.plot(history.history[accuracy],label训练精度)plt.plot(history.history[val_accuracy],label验证精度)plt.title(模型精度曲线)plt.legend()plt.tight_layout()plt.show()4. 单样本故障推理部署使用# 选取一条测试样本做推理sampleX_test[0:1]predmodel.predict(sample)pred_labelnp.argmax(pred,axis1)[0]true_labely_test[0]print(f模型预测标签{pred_label})print(f真实标签{true_label})四、拓展模型方案进阶研究可选ConvLSTM原生支持时空特征融合风机时序故障诊断主流模型TCNAttention时序卷积注意力机制强化关键传感器特征权重Transformer长时序依赖建模适合早期微弱故障特征挖掘多模型对比LSTM、GRU、CNN、CNN-LSTM、ConvLSTM 横向对比用于论文实验。五、使用要点 优化建议窗口调整采样间隔10分钟可根据需求修改时序窗口短窗口(612步)适合实时诊断长窗口(2448步)适合早期故障预警。DBSCAN 参数调优数据集给出最优组合eps0.02, min_samples6如需二次优化可遍历 25 组参数对比离群点剔除效果。类别不平衡优化若故障识别效果差损失函数改用Focal Loss/ 类别加权class_weight对故障样本做时序数据增强翻转、小幅噪声叠加特征优化可在原始63维特征基础上新增时域统计特征均值、方差、峰值进一步提升诊断精度。工程部署训练好的模型可转为 ONNX/TensorRT部署在风机边缘网关实现10分钟级实时故障在线诊断。六、论文/课题写作方向直接可用基于 CNN-LSTM 时空特征融合的风电机组故障诊断研究结合 DBSCAN 异常筛选与时序窗口的风机早期故障识别多传感器时空关联特征下风电设备多工况故障分类面向不平衡样本的风电机组 SCADA 数据故障诊断方法