赞
踩
作者简介:重庆大学22级研一,研究方向:时空数据挖掘、图神经网络。目前正在学习大数据、数据挖掘等相关知识,希望毕业后能找到数据相关岗位。
历时一个月,采用的是单模单折的方式,最后排名大概是56/263(emmm太菜了)。最后几天的时候,考试和比赛时间冲突了,就没怎么弄了。。。
第一次打比赛,还有很多要学习的,继续努力!
链接:https://www.xuelangyun.com/#/sign-up-statistics
赛题类型:时间序列、二分类、异常检测
赛题部分原文:
阀体总成装配在变速器装配过程中十分重要,通过生产系统数据采集以及异常监控功能,可以使整线生产情况一目了然,在检测台进行产品是否合格的最终检测,以提高产品的出厂质量。目前已知,若因检测台漏检,不良品误流入市场,返修成本会是生产成本的二倍以上,因此企业十分重视产品合格率和检测台正确率。
题目大意:
给两个文件夹,分别表示正常样本(OK)和异常样本(NG)。其中单个文件夹的目录结构为:
OK
station
sensor
sample1.csv
sample2.csv
...
NG
station
sensor
sample1.csv
sample2.csv
...
每个(station, sensor)
二元组表示一个特征,共401个特征。其中sample.csv
是一个时序数据,只有一列。
最终要求用 <= 50个特征(不包含衍生特征,只是指(station, sensor)
二元组的个数)进行建模,对阀体进行异常检测。成绩按F1
排名。
题目的重点在于异常检测,由于阀体的某些特征存在异常,或者它们的组合存在异常,导致阀体存在异常。
而题目中的异常存在两种情况:
比赛方在比赛过程中也明确说明了线上的数据两种情况都有。这种数据集会直接影响两个方面:
第一次比赛没什么思路,我就采用了Datawhale的baseline。(视频讲解:https://www.bilibili.com/video/BV14y4y1R77Q/?spm_id_from=333.999.0.0&vd_source=db5dfeeee832a7c78a0c81ef51eeafef)
代码的基本步骤如下:
在搭好了基本的baseline之后,我就开始尝试进行改进了。
在这个阶段,我把我查到的常用的一些方法都试了一遍,其中包括:
然后每次都是选择了一个线下效果最好的作为当前最优方案。
之前就了解到,数据挖掘比赛中特征很重要。所以在学习完之后,我开始查相关资料,找时序数据有哪些可以构造的特征。其中包括:
结果证明,比赛的时候确实有点陷到无脑对特征这个想法里去了。(最后是堆了20多个衍生特征,线上分数在75上不去了)(特征不在于多,强特才是王道!)
另外,这个题是异常检测的题目,应该多考虑异常相关特征的。
堆特征无果,我开始尝试EDA了。我的做法是正负样本各取20个,查看同一个衍生特征的分布。看了几个特征都一样,只有箱线图异常点这个特征稍微有点区别,其他的基本都一样,我怀疑是我自己的问题就没有深入了。(赛后讨论发现是自己做的不够深入,多做几个就能看出区别)
这一部分应该是最重要的,但是我只做了一点点,这也是导致我分数上不去的一个主要原因。
关键词:过拟合、xgb与随机森林的区别
猜测提分原因(参考:贝叶斯优化在XGBoost及随机森林中的使用):xgboost是按顺序构造多个树模型,模型之间会相互影响;而随机森林是独立训练每棵树,使得整个森林的结果比单个模型结果更健壮。所以随机森林比xgboost更不容易过拟合。而我的特征构造的比较多,过多的特征干扰了模型的训练,导致xgb出现了过拟合,所以随机森林线上结果更优。但是由于特征太多,且没有强特,所以分数还是很低。
当然一般来说,还是xgb性能更好,前提是要调参,我这里是没有调参的。(参考:Random Forest 比 XGBoost 效果更好的原因可能有哪些?)
关键词:样本分布不一致
把缺失值填充由正态分布填充改成了用dataframe的pad方法填充。
猜测提分原因:正太分布、平均值、中位数、众数填充这些方法都用到的是所有样本的信息,正常样本的分布干扰了异常样本的分布,导致异常样本填充之后模型可能会认错。而pad填充用到的是相邻样本的信息,也就是说异常样本只会用到异常样本的特征,所以效果相对好一点。
我赛后觉得,合理的填充方式应该是让线下的样本和线上的样本分布一样,即:异常样本中留一部分不填充,让它缺失;另一部分用正常样本的值进行填充。这样两种异常样本都会有,可能效果会更好。(没实验过)
我觉得我与前排的差距主要在于:
链接:https://uoe9mhgegk.feishu.cn/docx/QrdGdtLuPoka2gxwW4Mc4cZlnmf
亮点:
嘴爷方案的特征非常简单,只有均值、中位数、方差这几个很常用的特征,但最终的分数仍然在前排(84.61),再一次验证了特征不是越多越好,less is better。
其重点在于缺失值的处理。嘴爷文章原文如下:
在实际工况中,按传感器序号顺序,一旦某一组传感器检测到异常,则后续传感器都会不再检测,即测量值为空,训练集就存在这种规律。但为了避免选手通过这个规律进行预测,官方将测试集进行了调整,将正常样本也按照该规律进行了缺失处理。>
那么为了尽量保持训练集与测试集一致,直接人为对训练集进行缺失构造。只需要这一步,就可以从线上10~20分到线上80+。基于基础特征,衍生只做了均值,中位数,方差。
主要思路如下:
亮点:将训练集按照一定规律也进行缺失,保证训练集和测试集尽可能一致。(据说这也是本题的上分点之一)
top1采用了控制过程中的规格界限与控制界限的思想。(具体可以参考:SPC|如何理解规格界限与控制界限? )
简单来说(不是专门学控制的,如有不对的地方还请大佬批评指正)
usl
、下限称为lsl
,这两个限代表了产品的最低标准,是产品在生产之前就确定好的。ucl
、控制界限下限称为lcl
。控制界限是根据产品在生产过程中测定的质量分布数据来确定的。top1的方案就是把每个传感器特征的mean
计算了一遍,取了一个最大值、最小值,把这个作为上下界(具体是哪种上下界不用纠结),然后计算样本的超限次数,把超限次数作为特征。
(至于为什么取mean
,这个可能是试出来的吧。我没有深究,但是这个思想我觉得还是值得学习的。)
dataframe
常用的方法:https://github.com/zadarmo/learning-ml/blob/main/pd_libs.py(这里也包括我之前做项目用到的)比赛经验:
非常感谢雪浪云、Datawhale的baseline,以及zy、zs、as、fg、hh等各位大佬传授的经验,大家都太厉害啦!
需要交流的话,可以加微信:18171091491。共同进步!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。