AI Studio vLoong能源AI挑战赛——异常检测赛A榜第三名方案

贴一个排行榜
GitHub pytorch链接:https://github.com/Shybert-AI/Energy_Anomaly_Detection_TOP3
GitHub paddle链接:https://github.com/Shybert-AI/Energy_Anomaly_Detection_TOP3_paddle

在这里插入图片描述

  简单的说一下本次比赛方案的想法,首先明确是异常检测任务,于是发动互联网的强大的搜索功能,尽可能多的搜索到更多的异常检测算法。搜索到PyoDADBench等第三方库集成了很多异常检测算法。在搜索ADBench发现了关键性的图片,如下图异常检测的发展史中监督学习中提到了
ResNet/FTTransformer字样,那么方案就呼之欲出了。
在这里插入图片描述
  然后顺腾摸瓜,在ADBench的论文中发现ResNet/FTTransformer是在Revisiting Deep Learning Models for Tabular Data论文中提出的,论文中提到ResNet/MLP/FT-Transformer都是一个很好baseline的模型 ,因此选择ResNet/MLP/FT-Transformer作为baseline,通过对比,保留最好的方案。
在这里插入图片描述
  😊插个小话题:如果是其他类型任务,可以在模型排行榜快速的查看当前最好的算法,本人之前没接触过异常检测,不过算法原理大致是一样的,只能在网上大量的查找。
在这里插入图片描述

1.比赛链接

  https://aistudio.baidu.com/aistudio/competition/detail/495/0/introduction

2.赛题背景

  汽车产业正在经历巨大变革,新能源汽车市场规模持续扩大,电池安全问题日益引发重视。 电池异常检测面临着汽车数据质量差,检出率低,误报率高,大量无效报警无法直接自动化运维等问题。
  为了更好的检验电池安全问题,比赛通过募集优秀异常检测方案,使用特征提取、参数优化、异常对比等手段对实车数据进行处理,优化异常检测结果,以便更好的应用于车辆预警、故障模式识别等多种场景。

3.数据集介绍

  本次比赛的数据集为经过处理的整车充电段数据,旨在借助充电数据分析车辆当前是否存在故障。比赛选择了实际已发生电池故障,但传统的报警系统没有起到预警作用的数据,数据为同一车型、多个车辆的混合数据,希望众多优秀选手通过机器学习等方法,找到有效识别车辆故障的模型。
  充电段数据是新能源车辆电池数据中比较稳定的数据,电池的参数变化也更有规律。需要注意的是,比赛 数据已经过清洗,数值的大小不能再反映电池本身的特性,但数据变化的趋势仍然符合电池的规律 。数据以pkl格式保存,每个pkl包含两部分数据。第一部分是车辆充电时的电压,电流等时序信息,共有8列数据,分别是[‘volt’,‘current’,‘soc’,‘max_single_volt’,‘min_single_volt’,‘max_temp’,
‘min_temp’,‘timestamp’], 对应的含义分别是[电压,电流,电池SOC,最大单体电压,最小单体电压,最高单体温度,最低单体温度,时间戳]。
  训练集:
    文件类型为.pkl文件,每个pkl文件内容为元组形式,(data,metadata);
    data:形状为(256,8),每列数据对应特征[‘volt’,‘current’,‘soc’,‘max_single_volt’,‘min_single_volt’,‘max_temp’,‘min_temp’,‘timestamp’]
    metadata:包含label和mileage信息,label标签中‘00’表示正常片段,‘10’表示异常片段。
  
  测试集:
    文件类型为.pkl文件,每个pkl文件内容为元组形式,(data,metadata);
    data:形状为(256,8),每列数据对应特征[‘volt’,‘current’,‘soc’,‘max_single_volt’,‘min_single_volt’,‘max_temp’,‘min_temp’,‘timestamp’]
    metadata:仅包含mileage信息。

4.赛题分析:

  电池的数据是一种 时序数据 ,在数据中的‘timestamp’列是该数据的时间戳,理解时序数据的处理方式可能会对异常检测有更好的效果。数据是带标签的,将任务分为监督学习的二分类。由于电池数据是时序数据,因此考虑到 MLP、RNN、LSTM、Transformer等方式去构建模型。考虑到主办方提供了一个神经网络的demo,因此会采用以下两种方案。
   一.跑通主办方提供的demo算法,进行理解任务和分析数据
   二.设计其他的异常检测算法,完成电池数据的异常检测

5.特征分析:

   考虑demo的训练中只用到256维的最后一维的数据,并且是前7列的特征,并没有使用里程数mileage和时间戳数据,通过绘制9列特征的分布发现(红线表示正例)和数据统计发现,正例的平均里程数是6846,而负例的平均里程数是14000,充分体现出里程数mileage是一个重要的特征。
在这里插入图片描述
在这里插入图片描述

5.模型构建:

   通过异常检测模型的搜索,首先要下载ADBench库,库的大小大概要18G,作为第三方库肯定不合适,通过在ADBench库中提取关键性代码,然后适配到demo中,作为训练的主文件train.py。通过MLP、ResNet、FTTransformer三组的实验发现类似ResNet结构的网络的效果明显优于MLP和FTTransformer网络,也有可能是超参数设置有误,导致FTTransformer没能超越ResNet结果。

python train.py  --model_name ResNet --train  Train  --test Test_A  --epoch 532  --batch_size 256

模型的结构为:
在这里插入图片描述
   通过一系列的对训练特征的修改,比如分别删除最低单体温度、删除电流、增加/减少最大单体电压与最小单体电压的差值,增加/减少最高单体温度与最低单体温度的差值和增加时间戳、256维的均值 等一列特征,作为训练特征。验证发现使用前7列的特征加里程数作为训练特征效果最好(可能也由于实验不充分导致的)。epoch等于532时,auc的指标达到了0.8998。通过loss图发现模型的参数还不是最好的,还是存在很大的震荡。
在这里插入图片描述

6.模型的不足及优化点:

   1.模型只用到了是电池数据的前7列和里程数,未考虑到数据的时序性。因此还存在改进点,需要将[256,8]的特征压缩到[1,8]或者直接用[256,8]的特征进行分类等等。
   2.通过loss曲线发现趋势存在震荡,因为模型的超参数是通过手动调节的。因此设计了一个脚本train_optuna.ipynb,进行自动化调节模型的超参数,模型的超参数有学习率、batch_size、隐藏层的个数、dropout、网络结构的层数等一系列参数。(由于时间等一系列原因导致搁置了。。。。。)

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值