R语言anomalize包多分组变量异常检测分组识别失效问题求助
问题解决方法
核心错误原因
- 你在分组后调用
as_tibble()的操作会直接移除数据的分组属性,所以glimpse()识别不到分组,后续anomalize包的函数也无法按分组处理多个时间序列 - 代码里存在语法错误:
time_decompose()后的管道符写漏了>,只有单独的%会导致运行报错
修正后的可运行代码
library(dplyr) library(lubridate) library(anomalize) Test.df2 <- structure(list(Product = c("A1", "A1", "A1", "A1", "B1", "B1", "B1", "B1"), Location = c("A", "A", "A", "A", "A", "B", "A", "C"), Period = c("Sep 2017", "Oct 2017", "Nov 2017", "Dec 2017", "Sep 2017", "Oct 2017", "Nov 2017", "Dec 2017"), Units = c(5.399993, 9, 10, 9, 5, 1, 3, 1)), row.names = c(NA, 8L), class = "data.frame") Test.df2$Period<-lubridate::my(Test.df2$Period) Test.df2[is.na(Test.df2)]<-0 # 不需要额外转tibble,分组属性会自动保留 Test.df2<-Test.df2 %>% group_by(Product,Location) glimpse(Test.df2) Test.df2.anomaly<- Test.df2 %>% time_decompose(Units,merge = T,method = 'stl',frequency = "auto", trend = "auto") %>% anomalize(remainder,method = 'gesd',alpha = 0.05,max_anoms = 0.2) %>% time_recompose()
验证方法
运行代码后调用group_keys(Test.df2)即可看到分组信息已被正确识别,异常检测流程可以正常跑完所有分组的时间序列。
内容的提问来源于stack exchange,提问作者Arvind Menon
相关产品推荐
相关产品推荐

