没学过机器学习的东西, Python 怎么检测时间序列连续变量数据中离群值

2019-08-27 14:41:03 +08:00
 habin

通过 EXCEL 生成散点图,可以看到有 3 个离群点存在,百度了一下是可以使用 PYOD 库的方法,但苦于没有机器学习的基础,来 V 吧问问最好是用哪个算法模板,大概的思路是怎么处理的?图如链接所示: https://imgchr.com/i/m53WCt

4450 次点击
所在节点    Python
15 条回复
habin
2019-08-27 14:43:48 +08:00
还有整个文件的列数据都或多或少存在离群值,如何高效的找出来?
ipwx
2019-08-27 14:46:37 +08:00
你这数据有周期规律么?比如按天看有规律。最好给个完整的数据图片。

我做过一篇论文,有关时间序列异常检测的。你可以把场景给我描述一下,我判断是不是适用。

论文: https://dl.acm.org/citation.cfm?id=3185996
代码: https://github.com/haowen-xu/donut
dlsflh
2019-08-27 14:50:50 +08:00
每个点的值和他周围的若干个点的值差异过大就拿出来不可以吗?
DoctorCat
2019-08-27 16:11:52 +08:00
kNN 也行的
necomancer
2019-08-27 17:59:17 +08:00
necomancer
2019-08-27 18:38:31 +08:00
抱歉刚才没看图,你这种例子我觉得用移动平均可能更简单:
def moving_average(a, n=3):
....ret = np.cumsum(np.pad(a, n, 'edge'), dtype=float)
....ret[n:] = ret[n:] - ret[:-n]
....return ret[n:-n] / n

am = moving_average(a, n=15) #离群点少的话
np.argwhere(np.abs(a-am)>3 * np.std(a-am))

移动平均用的点个数、和几倍标准差比,根据具体情况调整一下。
habin
2019-08-27 19:39:04 +08:00
@ipwx 没有周期规律,是飞机航班数据的记录,数据是一个时间段的,有一些参数是连续变量,例如经纬度,由于飞机设备记录的原因,可能会记录错误,出现离群值,例如图所示
winglight2016
2019-08-27 21:51:51 +08:00
你这个是 outlier 数据点,跟时间序列无关,线性回归就好了,用 sklearn 库,基本上看文档就能搞定
MinQ
2019-08-27 21:54:33 +08:00
做数据分析的飘过,这跟机器学习没啥关系。假设一段时间内的点大部分服从线性规律,只有少部分离群点。那么我觉得可以直接计算这些点的一个线性拟合,然后算出每个点到这条线的距离,排除距离大于某个阈值的点就行了
flyaway
2019-08-27 23:11:05 +08:00
数据是线性的话,直接用线性回顾就可以了。
ipwx
2019-08-28 01:54:02 +08:00
@habin 你这个场景可能适合用 卡尔曼滤波器 kalman filter。当年 NASA 科研人员为了处理航天器传感器的错误数据提出的。
abakane
2019-08-28 08:32:42 +08:00
数据是线性,线性回归就可以,3 倍方差之外得点基本都是异常点。
不是线性得话,考虑 knn,如果有空间分布得话,可以用空间聚类。
to
2019-08-28 12:58:58 +08:00
github Anomaly Detection
woaikaifa120
2019-09-29 16:02:23 +08:00
楼主去中航信了吗?请问联系方式是多少呢?有事需要咨询一下
habin
2019-10-08 08:38:08 +08:00
@woaikaifa120 不好意思,不在中航信

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/595536

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX