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

如何使用Tidymodels为响应变量多层级(如各城市)分别构建模型

Tidymodels多城市批量建房价预测模型方案

你想要的按分组批量建模的需求可以通过嵌套数据框+map函数的组合实现,完全不需要手动拆分数据框,是tidymodels生态下的标准实现方式,逻辑和你设想的group_by后批量运行模型一致。

实现步骤

    1. 加载依赖包
library(tidyverse)
library(tidymodels)
    1. 按城市分组嵌套数据
      将你的多城市数据集按City字段分组后,把每个城市对应的子数据集存入列表列中:
nested_data <- your_multi_city_data %>% 
  group_by(City) %>% 
  nest()

运行后得到的nested_data每行对应一个城市,data列存储该城市的全部住房数据。

    1. 定义模型规格
      和你之前写的单个模型定义逻辑完全一致:
rf_spec <- rand_forest(mode = "regression", mtry = 3, trees = 1000) %>%
  set_engine("ranger")
    1. 批量拟合每个城市的模型
      通过purrr::map遍历每个城市的子数据集,批量运行拟合逻辑:
city_models <- nested_data %>% 
  mutate(
    # 对每个城市的子数据集拟合模型
    model = map(data, ~ fit(
      object = rf_spec,
      formula = log10(Sale_Price) ~ Longitude + Latitude + Lot_Area + Neighborhood + Year_Sold,
      data = .x
    )),
    # 可扩展:批量生成预测结果
    predictions = map2(model, data, ~ predict(.x, new_data = .y)),
    # 可扩展:批量计算模型指标
    metrics = map2(predictions, data, ~ metrics(.y, truth = log10(Sale_Price), estimate = .pred))
  )

运行后你得到的city_models数据框每行对应一个城市,会包含该城市的原始数据、拟合好的独立模型、预测结果、模型评估指标,完全满足你每个城市单独建模的需求。

额外说明

如果你有数据预处理需求,也可以先定义好workflow(把预处理步骤和模型都封装进去),再按上面的逻辑批量fit即可,用法和单个模型完全一致。如果需要给不同城市配置不同的模型参数,也可以在嵌套数据框中新增参数列,用map2/pmap传递参数即可,灵活性很高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:36:02