原文链接:http://tecdat.cn/?p=3232

咱们最近有一个很棒的机会与一位客户单干,要求构建一个适宜他们需要的异样检测算法。业务指标是精确地检测各种营销数据的异常情况,这些数据包含跨多个客户和Web源数千个工夫序列的网站操作和营销反馈。异样检测算法,该算法基于工夫并可从一个到多个工夫序列进行扩大。

案例钻研

咱们与许多传授数据迷信的客户单干,并利用咱们的专业知识减速业务倒退。

咱们的客户遇到了一个具备挑战性的问题:按工夫程序检测每日或每周数据的工夫序列异样。异样示意异样事件,可能是营销域中的Web流量减少或IT域中的故障服务器。无论如何,标记这些不寻常的事件确保业务顺利运行十分重要。其中一个挑战是客户解决的不是一个工夫序列,而是须要针对这些极其事件进行剖析

anomalize

这里有四个简略步骤的工作要点。

第1步:装置install.packages("tidyverse")第2步:加载library(tidyverse)第3步:收集工夫序列数据tidyverse\_cran\_downloads## # A tibble: 6,375 x 3## # Groups: package \[15\]## date count package#### 1 2017-01-01 873. tidyr## 2 2017-01-02 1840. tidyr## 3 2017-01-03 2495. tidyr## 4 2017-01-04 2906. tidyr## 5 2017-01-05 2847. tidyr## 6 2017-01-06 2756. tidyr## 7 2017-01-07 1439. tidyr## 8 2017-01-08 1556. tidyr## 9 2017-01-09 3678. tidyr## 10 2017-01-10 7086. tidyr## # ... with 6,365 more rows第4步:异样化应用性能及时发现异常情况。

异样检测工作流程

其中包含:

  • 用工夫序列合成
  • 用检测异样 
  • 异样上限和下限转换

工夫序列合成

第一步是应用工夫序列合成。“计数”列被合成为“察看”,“节令”,“趋势”和“残余”列。工夫序列合成的默认值是method = "stl",应用平滑器进行季节性合成。

## # A time tibble: 6,375 x 6## # Index: date## # Groups: package \[15\]## package date observed season trend remainder#### 1 tidyr 2017-01-01 873. -2761. 5053. -1418.## 2 tidyr 2017-01-02 1840. 901. 5047. -4108.## 3 tidyr 2017-01-03 2495. 1460. 5041. -4006.## 4 tidyr 2017-01-04 2906. 1430. 5035. -3559.## 5 tidyr 2017-01-05 2847. 1239. 5029. -3421.## 6 tidyr 2017-01-06 2756. 367. 5024. -2635.## 7 tidyr 2017-01-07 1439. -2635. 5018. -944.## 8 tidyr 2017-01-08 1556. -2761. 5012. -695.## 9 tidyr 2017-01-09 3678. 901. 5006. -2229.## 10 tidyr 2017-01-10 7086. 1460. 5000. 626.## # ... with 6,365 more rows

frequency并trend主动为您抉择。此外,能够通过输出基于工夫的周期(例如“1周”或“2个季度”)来更改抉择,能够确定有多少察看属于时间跨度。

异样检测

下一步是对合成的数据执行异样检测。产生了三个新列:“remainder\_l1”(上限),“remainder\_l2”(下限)和“异样”(是/否标记)。默认办法是method = "iqr",在检测异样时疾速且绝对精确。

## # Groups: package \[15\]## package date observed season trend remainder remainder_l1#### 1 tidyr 2017-01-01 873. -2761. 5053. -1418. -3748.## 2 tidyr 2017-01-02 1840. 901. 5047. -4108. -3748.## 3 tidyr 2017-01-03 2495. 1460. 5041. -4006. -3748.## 4 tidyr 2017-01-04 2906. 1430. 5035. -3559. -3748.## 5 tidyr 2017-01-05 2847. 1239. 5029. -3421. -3748.## 6 tidyr 2017-01-06 2756. 367. 5024. -2635. -3748.## 7 tidyr 2017-01-07 1439. -2635. 5018. -944. -3748.## 8 tidyr 2017-01-08 1556. -2761. 5012. -695. -3748.## 9 tidyr 2017-01-09 3678. 901. 5006. -2229. -3748.## 10 tidyr 2017-01-10 7086. 1460. 5000. 626. -3748.## # ... with 6,365 more rows, and 2 more variables: remainder_l2 ,## # anomaly

当初尝试另一个绘图性能。它只实用于单个工夫序列。“节令”打消每周的季节性。趋势是平滑的。最初,检测最重要的异样值。

tidyverse\_cran\_downloads %>%time_decompose(count, method = "stl", frequency = "auto", trend = "auto") %>%anomalize(remainder, method = "iqr", alpha = 0.05, max_anoms = 0.2) %>%plot\_anomaly\_decomposition() +

异样上限和下限

最初一步是围绕“察看”值创立上限和下限。创立了两个新列:“recomposed\_l1”(上限)和“recomposed\_l2”(下限)。

## # A time tibble: 6,375 x 11## # Index: date## # Groups: package \[15\]## package date observed season trend remainder remainder_l1#### 1 tidyr 2017-01-01 873. -2761. 5053. -1418. -3748.## 2 tidyr 2017-01-02 1840. 901. 5047. -4108. -3748.## 3 tidyr 2017-01-03 2495. 1460. 5041. -4006. -3748.## 4 tidyr 2017-01-04 2906. 1430. 5035. -3559. -3748.## 5 tidyr 2017-01-05 2847. 1239. 5029. -3421. -3748.## 6 tidyr 2017-01-06 2756. 367. 5024. -2635. -3748.## 7 tidyr 2017-01-07 1439. -2635. 5018. -944. -3748.## 8 tidyr 2017-01-08 1556. -2761. 5012. -695. -3748.## 9 tidyr 2017-01-09 3678. 901. 5006. -2229. -3748.## 10 tidyr 2017-01-10 7086. 1460. 5000. 626. -3748.## # ... with 6,365 more rows, and 4 more variables: remainder_l2 ,## # anomaly , recomposed\_l1 , recomposed\_l2

让咱们看一下“lubridate”数据。咱们能够plot\_anomalies()和设置time\_recomposed = TRUE。此性能实用于单个和分组数据。

time_decompose(count, method = "stl", frequency = "auto", trend = "auto") %>%anomalize(remainder, method = "iqr", alpha = 0.05, max_anoms = 0.2) %>%time_recompose() %>%# 绘制异样合成plot\_anomalies(time\_recomposed = TRUE) +ggtitle("Lubridate Downloads: Anomalies Detected")

预测

forecast是在执行预测之前无效收集异样值的好办法。它应用基于STL的离群值检测办法。它十分快,因为最多有两次迭代来确定异样值带。

论断

R软件十分无效地用于检测异样的许多传统预测工夫序列。然而,速度是一个问题,特地是在尝试扩大到多个工夫序列时。

咱们从中理解到所有软件包的最佳组合:

  • 合成办法:咱们包含两个工夫序列合成办法:( "stl"应用Loess的传统节令合成)和"twitter"(应用两头跨度的节令合成)。
  • 异样检测办法:咱们包含两种异样检测办法:( "iqr"应用相似于3X IQR的办法forecast::tsoutliers())和"gesd"(应用Twitter应用的GESD办法AnomalyDetection)。

有问题欢送下方留言!