使用anomalize包分析秒级时间序列时time_decompose报错
解决anomalize包秒级时间序列
time_scale == key_value报错问题 问题原因
time_decompose()默认的time_scale = "auto"模式无法自动识别秒级时间序列的合适分解尺度,触发time_scale == key_value错误。改为分钟级数据时,尺度识别逻辑可正常工作,因此能运行。
解决步骤
1. 规范时间序列格式
先将时间列转为POSIXct类型,并用as_tbl_time()设置为tibbletime对象的索引,这是anomalize处理时间序列的基础要求:
library(tidyverse) library(anomalize) # 模拟秒级数据(匹配你的数据结构) set.seed(123) df <- tibble( timestamp = seq.POSIXt(from = as.POSIXct("2024-01-01 00:00:00"), to = as.POSIXct("2024-01-01 01:00:00"), by = "1 sec"), value = rnorm(3600, mean = 10, sd = 2) + sin(seq(0, 2*pi, length.out = 3600))*3 + c(rep(0, 3590), rep(20, 10)) # 加入模拟异常值 ) # 转为tibbletime对象,指定时间索引 df_tbl <- df %>% as_tbl_time(index = timestamp)
2. 手动指定分解时间尺度
根据数据的实际周期特征,手动设置time_scale参数:
若数据存在分钟级周期(比如每分钟重复模式):
df_decompose <- df_tbl %>% time_decompose(value, time_scale = "minute", frequency = 60)这里
frequency = 60对应每分钟60个秒级数据点。若数据存在小时级周期:
df_decompose <- df_tbl %>% time_decompose(value, time_scale = "hour", frequency = 3600)frequency = 3600对应每小时3600个秒级数据点。也可直接用数值表示周期长度(如60代表60秒):
df_decompose <- df_tbl %>% time_decompose(value, time_scale = 60)
3. 完成异常检测流程(可选)
分解后继续执行异常检测并可视化:
df_anomalies <- df_decompose %>% anomalize(remainder) %>% time_recompose() # 可视化异常结果 df_anomalies %>% plot_anomalies(time_recomposed = TRUE)
注意事项
- 确保秒级时间序列是规则的(无缺失或重复时间点),不规则序列会导致分解失败。
time_scale需匹配数据实际周期特征,否则分解结果会偏离预期。
内容的提问来源于stack exchange,提问作者wacekk
相关产品推荐
相关产品推荐

