【问题标题】:Detection of time-series outliers检测时间序列异常值
【发布时间】:2015-07-23 12:23:51
【问题描述】:

我正在研究一个大学项目预测。我有一个庞大的数据库,其中包含两个城市之间的需求。但是,我知道这个数据集被污染了。但是,我不知道哪些数据点被遮挡了。该数据集是一个面板数据集,每月跟踪城市对之间的需求。以下是我正在处理的部分数据。

      CAI.JED CAI.RUH ADD.DXB CAI.IST  ALG.IST
2013-01-01   19196   14777      16    1413      12
2013-02-01   19913       8   18203    1026       5
2013-03-01   34242   11751   17836     985       1
2013-04-01   23481   12000   13479     948      27
2013-05-01   24428   16046   16391     954       9
2013-06-01   31791   23479   16571       1       4
2013-07-01   33716   20090   11323       0    5724
2013-08-01   35553       2   11121       0       0
2013-09-01   18746   13423   12119       0      26
2013-10-01      10   12223   10239       0       0
2013-11-01      19   20234   14231       5       2
2013-12-01   15198       1   12132      10       5

数据集是两个数据集的组合。向我提供数据的人告诉我,在几个月内,两个数据集中只有一个在工作。但是,不知道哪个月,哪个特定数据集可用。

现在我的问题来了:对于项目的下一部分,我需要获取年度需求数据。但是,据我所知,这些数字是模糊的,我想删除异常值。 R中有哪些技术可以做到这一点?

由于数据是时间序列格式,我尝试使用 tsoutliers 包(参见http://cran.r-project.org/web/packages/tsoutliers/tsoutliers.pdf)。但是,我无法正常工作。另外,我尝试了https://stats.stackexchange.com/questions/104882/detecting-outliers-in-time-series-ls-ao-tc-using-tsoutliers-package-in-r-how/104946#104946 的建议,但没有奏效。

在知道异常值是什么之后,我想替换它们(例如用该路线的平均值),或者如果缺少太多点,我想从数据集中拒绝整个路线。

【问题讨论】:

  • 当你说你不能让 tsoutliers 工作时,具体是什么没有工作? {forecast} 包中还有 tsoutliers 函数(不要与使用 tso() 函数的库 {tsoutliers} 混淆)。这是另一种方法inside-r.org/packages/cran/forecast/docs/tsoutliers
  • 由于某种原因,我不断收到错误消息``过滤器错误(.data,.dots = lazyeval::lazy_dots(...)) :缺少参数“.data”,没有默认''。但是,不知何故,此错误消息消失了。我现在尝试在我的数据集上使用 tso 函数。我使用了以下符号: tso(ts(DEM[,1],types = c("AO","LS","TC"))。在我的数据集上尝试它也没有给出异常值(这对我来说似乎很奇怪),或各种错误消息,例如警告消息:在 locate.outliers.oloop(y = y, fit = fit, types = types, cval = cval, : 前 2 个残差设置为零
  • 在您的示例中,您没有声明时间序列的频率?编辑您的问题以包含完整的示例脚本会很有帮助。您还尝试过在不使用 tso() 包装器的情况下对预测模型的残差值运行 locate.outliers() 吗?
  • tsoutliers{forecast} 可能无法检测到异常值,如果它们位于数据的早期部分 - 这是我的个人经验。

标签: r outliers


【解决方案1】:

我更喜欢基于密度的聚类算法,例如 DBSCAN。 如果您修改 epsilon 和 num-samples,您可以非常具体地过滤异常值 使用绘图来可视化结果(标签 -1 是异常值)

【讨论】:

    猜你喜欢
    • 2019-10-13
    • 2021-02-19
    • 2018-07-11
    • 2014-09-05
    • 2020-09-26
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多