推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
habin
V2EX  ›  Python

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

  •  
  •   habin · Aug 27, 2019 · 5478 views
    This topic created in 2460 days ago, the information mentioned may be changed or developed.

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

    15 replies    2019-10-08 08:38:08 +08:00
    habin
        1
    habin  
    OP
       Aug 27, 2019
    还有整个文件的列数据都或多或少存在离群值,如何高效的找出来?
    ipwx
        2
    ipwx  
       Aug 27, 2019   ❤️ 2
    你这数据有周期规律么?比如按天看有规律。最好给个完整的数据图片。

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

    论文: https://dl.acm.org/citation.cfm?id=3185996
    代码: https://github.com/haowen-xu/donut
    dlsflh
        3
    dlsflh  
       Aug 27, 2019 via Android
    每个点的值和他周围的若干个点的值差异过大就拿出来不可以吗?
    DoctorCat
        4
    DoctorCat  
       Aug 27, 2019
    kNN 也行的
    necomancer
        6
    necomancer  
       Aug 27, 2019   ❤️ 1
    抱歉刚才没看图,你这种例子我觉得用移动平均可能更简单:
    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
        7
    habin  
    OP
       Aug 27, 2019
    @ipwx 没有周期规律,是飞机航班数据的记录,数据是一个时间段的,有一些参数是连续变量,例如经纬度,由于飞机设备记录的原因,可能会记录错误,出现离群值,例如图所示
    winglight2016
        8
    winglight2016  
       Aug 27, 2019
    你这个是 outlier 数据点,跟时间序列无关,线性回归就好了,用 sklearn 库,基本上看文档就能搞定
    MinQ
        9
    MinQ  
       Aug 27, 2019 via Android
    做数据分析的飘过,这跟机器学习没啥关系。假设一段时间内的点大部分服从线性规律,只有少部分离群点。那么我觉得可以直接计算这些点的一个线性拟合,然后算出每个点到这条线的距离,排除距离大于某个阈值的点就行了
    flyaway
        10
    flyaway  
       Aug 27, 2019
    数据是线性的话,直接用线性回顾就可以了。
    ipwx
        11
    ipwx  
       Aug 28, 2019 via Android   ❤️ 1
    @habin 你这个场景可能适合用 卡尔曼滤波器 kalman filter。当年 NASA 科研人员为了处理航天器传感器的错误数据提出的。
    abakane
        12
    abakane  
       Aug 28, 2019
    数据是线性,线性回归就可以,3 倍方差之外得点基本都是异常点。
    不是线性得话,考虑 knn,如果有空间分布得话,可以用空间聚类。
    to
        13
    to  
       Aug 28, 2019 via Android
    github Anomaly Detection
    woaikaifa120
        14
    woaikaifa120  
       Sep 29, 2019
    楼主去中航信了吗?请问联系方式是多少呢?有事需要咨询一下
    habin
        15
    habin  
    OP
       Oct 8, 2019
    @woaikaifa120 不好意思,不在中航信
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2852 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 140ms · UTC 01:51 · PVG 09:51 · LAX 18:51 · JFK 21:51
    ♥ Do have faith in what you're doing.