# 数据挑战赛 **Repository Path**: xiaofengsb/data-challenge-competition ## Basic Information - **Project Name**: 数据挑战赛 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-13 - **Last Updated**: 2025-05-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 任务解决说明 ## 思路设计 ### 数据处理路径 load -> non-process -> oversample -> outlier-process ### 数据加载 数据中包含着错误的格式,妨碍读取和进一步处理,例如出现“1:xxxxx”这样的格式,需要首先处理这些错误格式,同时将时间数据(以分钟为单位)转换为以秒为单位的数据,将同一个分钟内的数据改为 60 / (这一分钟内的样本频率 - 1)为间隔秒数的数据 ### 缺失值处理 缺失值处理使用了LightGBM预测,多值插补法 LightGBM效果最好所以最终采用LightGBM的方式进行缺失值处理 ### 过采样 由于异常的数据是故障造成的一部分原因,所以本次任务首先使用过采样的方式增加异常数据的数量,以提高模型的泛化能力 过采样使用TS-SMOTE算法,并且在少数类(一、二、三级故障数据)分布比例仍然一致的情况下,将少数类总数增加到多数类(非故障数据)的约30%,并且每一个类别至少占多数类的3% ### 异常值处理 本此任务仅对不合理值(即超出数据采集时的合理范围以及指标内容意义不一致的值)进行线性插值处理,其他异常数据使用指数加权移动平均和滑动窗口平均值进行处理 由于出现异常值的指标以及数据很大一部分受到前后数据的影响,特别是历史数据(较前数据)的影响,所以采用线性插值,不会对源数据造成过大的影响 由于故障发生的主要原因之一在于异常数据,所以需要精准检测异常值,所以这里将阈值设置为3.0,即超过3倍标准差的数据为异常值 ### 数据转换 将一些数据的内容通过公式转换为新的指标,以分析故障产生的原因 ## 问题解决 ### 问题一 由于重复值的主要内容是数据采集时间以分钟为单位导致的重复,这意味着在这一分钟内可能有不同时刻的数据只是数据内容相同,但是时间不同,因为故障的发生时检测在极短的时间内很容易重复,所以这里不做重复值处理 ### 问题二 通过斯皮尔曼相关系数和SHAP值分析各项指标对故障等级的贡献度,进一步判断造成不同故障等级的主要原因 ### 问题三 分别使用LSTM+CNN模型、GRU模型、Transformer模型、ARIMA模型四种模型进行训练评估,得到LSTM+CNN模型的效果最好 ### 问题四 通过选择训练好的模型对十月份的数据进行预测,得到的结果保存在`data`文件夹下的`result.csv`文件中 ## 文件介绍 - `config.py` 模型参数配置文件 - `problem1.ipynb` 问题一代码 - `problem2.ipynb` 问题二代码 - `problem3.ipynb` 问题三模型训练代码 - `problem3-eval.ipynb` 问题三模型评估代码 - `problem4-process.ipynb` 问题四数据预处理代码 - `problem4-predict.ipynb` 问题四预测十月份数据代码 - `utils.py` 工具函数文件 - `model.py` 模型定义文件 - `data` 源数据和结果数据存放文件夹 - `model` 模型存放文件夹 - `load.ipynb` 数据加载处理 - `non-process.ipynb` 缺失值处理 - `oversample.ipynb` 过采样 - `outlier-process.ipynb` 异常值处理 - `README.md` 说明文档 - `说明.docx` 说明文档Word格式 - `packages.json` 依赖环境文件