共计 4250 个字符,预计需要花费 11 分钟才能阅读完成。
原文链接: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)。
有问题欢送下方留言!