You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:35:45