选毕业设计的时候忙着上班,下手晚了,联系了一堆导师只有一个理我,导师手里题目也不多,想着偷懒选了个算法相关的,《基于大数据的天然气指标异常检测算法实现》,事实证明这看似简单的毕设题目并不省心。本文旨在记录本人毕设期间的心路历程以及一些踩到的坑。
问题定义
大数据在我这个题目的语境里指的是从学长手里搞来的 1 GiB 的天然气表具传感器数据,以 sqlserver 的 bak 形式出现
天然气相关的背景知识无从下手,看起来也没那么重要。
异常检测算法并没有明确给出,导师扔了一堆论文,要求是“多试几个,比一比挑个好的”
第一回合
在一阵拖延之后,我开始干活
想办法把 sqlserver 备份里的数据搞出来
- 看起来只能下个 Navicat
- 发现数据库中的异常标签是运维人员通过大于小于的规则搞出来的,全是 false alarm
- 发现数据中出现了负一千多摄氏度的传感器数据
- 有温度、压强、流量三个指标,然而有大量3缺1的时间点
看起来不太好搞,这个数据我学个屁,只能 garbage in, garbage out啊,问了一波学长,说是可以添加人造异常。
第二回合
感觉前途灰暗,摸了一大会儿鱼
- 想一个过得去的solution
- 翻到一个人做的实验模拟天然气泄漏数据集,但是要成为 IEEE member 才能下,含泪充值,发现人家只有气压数据,还只做了3次实验,直呼上当,但不是不能用
- 以无监督,TSAD,深度学习为关键词进行搜索,发现今年的深度学习模型能在公共数据集上做到 80 到 90 的 F1,感觉天无绝人之路。
- 翻到一个人做的实验模拟天然气泄漏数据集,但是要成为 IEEE member 才能下,含泪充值,发现人家只有气压数据,还只做了3次实验,直呼上当
- 选了一篇用 transformer 的老伦敦论文,发现老伦敦还开源了所有实验用代码(包括一堆baseline的复现),大喜
进行一个 fork
- 跑通了老伦敦代码
- 咦,这个怎么跑得这么快?原来老伦敦只用了数据集的一小部分来实验。那我试试别的部分!寄,F1只有60多!
- 咦,其他模型的代码怎么这么短?让我去查查其他模型的原论文!寄,复现省略了亿点细节!
- 好奇,对于连续的异常区间模型居然能全标出来,可视化看一下?连续一场区间里只查出几个点!哦,原来 common practice 是用 adjustment 把整个区间标出来啊!那你 tmd 的假阳性和真阳性的比例不就变了吗?这样90多的F1有意义?感觉不如。。。间隔标点
- 老伦敦不行
第三回合
摸几天鱼,发现有一篇大清的论文放出代码了,我试试
康康大清
- 跑了一堆公共数据集,发现真的有 90 的 F1,虽然带了 adjustment,但看起来大清nb
人造异常
- 用三脚猫频谱分析技术结合某篇综述的思路造异常
I have an apple! I have a pen!
- 大清跪得很惨烈,F1 40不到
- 调个库跑跑老一点算法,半斤八两
寄!
第四回合
时间所剩无几,开始怀疑人生
重读论文
- 那就这样吧,开写论文
第五回合
答辩
- 被老师攻击了太烂的表现,答辩组成员普遍认为我的复现/调参有问题(but 同样的模型在公共数据集猛如虎)(but 调参我尽力了)
- 有些老师认为人造异常是扯淡,我也不知道扯不扯,我只知道大家都在这么灌,灌个本科学位论文应该问题不大?
- 有些老师觉得没有工作量
- 有些老师觉得没有创新点
然后答辩通过了
总结
TSAD💊,AIOps感觉有点扯了。