Datawhale干货
作者:滕飞,浙江大学,Datawhale成员
作者信息:滕飞,浙江大学20届本、23届硕,现为浙江大学智能系统安全实验室(USSLAB)成员,毕业后将于蚂蚁金服工作。
主要研究方向:数据安全、时序分类与预测、数据挖掘相关,本次分享的赛题为雪浪云主办的算法赛——阀体装配线产品合格检测挑战赛,这也是笔者第二次打数据挖掘相关比赛,经验尚有很多不足。
1. 赛题简介
本次阀体装配线产品合格检测挑战赛是一种经典的时序数据二分类/异常检测算法题,大致背景如下:
阀体装配线对于每个产品的测试过程数据以序列形式存储,最终通过检测台统一输出检测结果,包含了 13 个检测项,每个检测项中有多个传感器。参赛者需要根据历史检测结果,利用大数据分析、机器学习等方法,提取特征,建立合适的分类模型,对数据集中所有的产品样本进行分类,最终判定结果 0 为合格,1 为不合格,尤其是希望可以分类出机检合格但后续发现异常的不合格件,提高企业机检准确率,减少企业运营成本。
最终评分标准为F1 Score以及使用的原始传感器数据数量,越高的F1排名越高,同分情况下使用的原始数据越少,排名越高。
赛事地址:https://www.xuelangyun.com/#/cdc
2. 基本思路
下面介绍一下我对于这个赛题的思路:
思路1 — 关于对异常的理解
面向异常样本非常少,正常样本非常多的显著分布有偏数据集,会出现异常样本对异常的表征不足、异常类型覆盖面小、模型难学习、过拟合等问题,故希望通过更多对异常本身的刻画,而非令有监督模型学习到具体某个特征的具体数值,来提升表现。故考虑通过无监督模型来表现异常的程度。而赛题中提及的“尤其是希望可以分类出机检合格但后续发现异常的不合格件,提高企业机检准确率,减少企业运营成本。”,也让我更加坚定地尝试捕获异常,而非追求更精确的分类本身。
具体action:使用LOF、孤立森林对所有样本进行分布上异常的检测,但由于分布异常未必等同于业务异常,故将异常的分析结果汇入特征集合,还是使用有监督模型进行进一步的学习。
进一步解释:如果正常样本的分布是在一个球体空间内,这个球体外的一些零散样本可以被视为异常,异常样本可能自己有一个簇,也可能极为零散,但由于本赛题的异常其实是业务异常,受限于检测台的判定结果,可能被标记为NG的样本只是空间中的一个方向,其他的异常可能被标记为OK,所以还是得使用有监督来将最终判定拉齐到已经标记的空间。
思路2 — 特征表征与筛选
什么样的特征该被优先选择?有较强区分力的、正负样本有明显分布差异的。
思路3 — 缺失处理
这次比赛的数据缺失是由于检测台检测到异常后,提前终止检测引发的数据丢失,但并不能直接利用缺失来判定产品是否合格,合理的处理方法有助于保持与线上测试数据集相近的分布,提升表现。
思路4 — 特征衍生
由于一个检测台内有多个时序同步的sensor,sensor之间可能有关联,比如A传感器序列是一个方波,B也是,它们对齐了才能称之为正常,不对齐则为异常,这样的相关性可能需要特征或算法层面进行捕捉。但由于时间问题最后放弃深究。
思路5 — 模型融合
由于比赛最终使用公榜作为最终评分依据,这个bug可导致,类似于bagging思路,只需要获得多个公榜上评分高且有方差的弱模型,通过后续的major voting,理应提分或者维持分数不变,也就是只要多个存在方差的方案组合即可上分。
3. 数据探索性分析 EDA
首先对原始数据的时序特性进行检查:
一个检测台内多个sensor是等长的,或许是同步的,有相关意义。
同一个sensor中,不同样本的时长大多一样,少数不一样,但不宜作为分类依据。接着,由于赛题要求筛选原始传感器序列,从401个传感器中选出不超过50个,故检查序列相似性与大致分布情况:
部分传感器数据形式非常相似,信息有重叠,可基于相关性进行筛选去除。
内外传感器对齐后,发现同名内外传感器序列几乎无差别,可以丢掉其