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

使用R语言dplyr批量识别多组合时序数据的离群值方案咨询

基于dplyr的多维度组合时序离群值批量检测方案

核心逻辑是通过dplyr嵌套分组+list列批量计算实现全自动化处理,无需逐组手动操作。

1 前置依赖准备

提前加载所需依赖包,你已封装的moveme函数需提前载入环境:

library(dplyr)
library(tidyr)
library(purrr)
library(seastests)
library(timetk)
library(qcc)

2 核心批量处理流程

2.1 生成分组嵌套数据

先按目标维度做分组嵌套,把12万组维度的子数据集打包为list列,同时提前过滤无效组减少计算量:

nested_data <- mydata %>%
  # 构造时序索引保证顺序正确
  mutate(datetime = as.POSIXct(paste(datex, hourx), format = "%Y-%m-%d %H")) %>%
  # *注:如果你的datex字段格式不是年-月-日,请对应修改as.POSIXct的format参数*
  group_by(seller, product, detail, status, channel) %>%
  # 过滤样本量不足24的组,无法做季节性检测可直接跳过
  filter(n() >= 24) %>%
  nest() %>%
  ungroup()

2.2 封装单组检测逻辑

把你已验证的单组流程封装为可复用函数,输入为单组子数据集,输出为该组的离群记录:

detect_single_group <- function(df) {
  # 按时序排序
  df <- arrange(df, datetime)
  ts_vec <- df$transaction
  # 季节性检测
  seasonal_flag <- isSeasonal(ts_vec, test = "wo", freq = 24)
  
  if (seasonal_flag) {
    # 季节性序列用timetk检测离群
    anomaly_res <- df %>%
      tk_anomaly_diagnostics(.date_var = datetime, .value = transaction) %>%
      filter(anomaly == "Yes") %>%
      select(datetime, transaction) %>%
      left_join(df, by = c("datetime", "transaction")) %>%
      moveme()
  } else {
    # 非季节性序列用xbar.one控制图提取超上限记录
    qcc_obj <- qcc(ts_vec, type = "xbar.one", plot = FALSE)
    ucl <- qcc_obj$limits[,"UCL"]
    anomaly_res <- df %>%
      filter(transaction > ucl) %>%
      moveme()
  }
  return(anomaly_res)
}

2.3 批量运行合并结果

一次性执行所有组的检测,合并输出全量离群记录:

final_anomalies <- nested_data %>%
  # 批量应用检测函数
  mutate(anomaly_record = map(data, detect_single_group)) %>%
  # 展开所有组的离群结果
  unnest(anomaly_record) %>%
  # 清理中间列,保留所需字段
  select(-data)

3 12万组量级性能优化建议

  • 把map替换为furrr包的future_map即可开启多核并行,仅需额外添加2行代码:
    library(furrr)
    plan(multisession, workers = availableCores()-1)
    
  • 可提前按业务规则过滤无统计意义的小样本组,进一步降低计算量
  • 不需要保留的字段可在子函数中提前剔除,减少内存占用

内容的提问来源于stack exchange,提问作者Faryan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:09:03