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

如何在tsibble中为特定分组配置数据变换适配ETS/ARIMA预测模型?

针对tsibble中特定地区自动应用数据变换的实现方法

核心思路

通过分组映射结合条件变换,可实现对指定地区的value列自动应用数据变换,模型拟合完成后再对预测结果做逆变换还原,保证最终结果的可用性。

具体实现步骤

1. 定义变换与逆变换函数

先明确变换逻辑及对应的逆变换,避免预测结果出现偏差:

# 对数+1变换
log_plus1 <- function(x) log(x + 1)
# 逆变换:指数减1
inv_log_plus1 <- function(x) exp(x) - 1

2. 按地区分组处理并拟合模型

借助tsibble的分组特性,结合dplyr的条件判断函数,针对特定地区(如HU)应用变换后统一拟合模型:

library(fable)
library(tsibble)
library(dplyr)

# 分组处理数据并拟合ETS、ARIMA模型
model_fit <- your_tsibble %>%
  group_by(geo) %>%
  mutate(
    transformed_value = case_when(
      geo == "HU" ~ log_plus1(value),
      TRUE ~ value  # 其他地区保留原始数据
    )
  ) %>%
  model(
    ETS = ETS(transformed_value),
    ARIMA = ARIMA(transformed_value)
  )

3. 生成预测并还原变换

生成预测后,对HU地区的预测结果应用逆变换,其他地区直接保留预测值:

forecast_result <- model_fit %>%
  forecast(h = 3) %>%
  mutate(
    value = case_when(
      geo == "HU" ~ inv_log_plus1(.mean),
      TRUE ~ .mean
    )
  )

4. (可选)多地区多变换的复用方案

如果需要给多个地区设置不同变换,可以将规则封装成映射列表,写成自定义函数更便于复用:

# 定义变换规则:键为地区代码,值为包含变换/逆变换函数的列表
transform_rules <- list(
  "HU" = list(transform = log_plus1, inv_transform = inv_log_plus1),
  "IT" = list(transform = sqrt, inv_transform = function(x) x^2)  # 示例:给IT地区应用平方根变换
)

# 自定义分组变换函数
apply_transform <- function(data, rules) {
  data %>%
    group_by(geo) %>%
    mutate(
      transformed_value = if_else(
        geo %in% names(rules),
        rules[[geo]]$transform(value),
        value
      ),
      # 存储对应逆变换函数,方便后续预测还原
      inv_transform = if_else(
        geo %in% names(rules),
        list(rules[[geo]]$inv_transform),
        list(function(x) x)
      )
    ) %>%
    ungroup()
}

# 应用变换并拟合模型
processed_data <- your_tsibble %>% apply_transform(transform_rules)
model_fit_custom <- processed_data %>%
  group_by(geo) %>%
  model(
    ETS = ETS(transformed_value),
    ARIMA = ARIMA(transformed_value)
  )

# 生成预测并自动还原变换
forecast_custom <- model_fit_custom %>%
  forecast(h = 3) %>%
  left_join(processed_data %>% distinct(geo, inv_transform), by = "geo") %>%
  mutate(
    value = map2_dbl(.mean, inv_transform, ~ .y(.x))
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:58:09