使用R

时间:2019-01-07 11:41:17

标签: r

我对数据科学和R编程领域还是一个新手。有一些需要对客户和产品的组合进行线性回归的要求。此处的Response变量为ORDERED_QTY,因变量为STOCK_IN_HAND,PREVIOUS_QTY。 样本数据看起来像这样。

Customer Product STOCK_IN_HAND  PREVIOUS_QTY   ORDERED_QTY

C1         P1      10             20              30

C1         P1      5              30              20 

C1         P1      15             20              25 

C1         P2      5              10              20 

C1         P2      5              20              25 

C1         P2      10             25              30 

C2         P1      20             20              30 

C2         P1      10             30              35 
. . . .  

根据上述数据集,我们必须为不同的客户和产品组合(例如C1 + P1)创建回归模型。通常,我们在训练数据集上使用lm()创建模型,并在测试数据集上使用predict()预测结果。 在这种情况下,当传递客户,产品,STOCK_IN_HAND和PREVIOUS_QTY作为输入时,我们必须预测ORDERED_QTY。
这是我们第一次遇到这种要求,而没有在如何进行方面取得领先。任何意见或建议都会有很大帮助。

1 个答案:

答案 0 :(得分:0)

使用tidyverse包的示例:

首先,您需要准备一个数据集,其中包含以列(在我的示例中为train_test)标记的训练和测试数据:

data <-
  tibble(
    Customer = sample(str_c('C', 1:5), 1000, replace = TRUE),
    Product = sample(str_c('P', 1:5), 1000, replace = TRUE),
    STOCK_IN_HAND = rpois(1000, 10),
    PREVIOUS_QTY = rpois(1000, 20),
    ORDERED_QTY = rpois(1000, 25),
    train_test = sample(c('train', 'test'), 1000, replace = TRUE)
  )

然后,您可以将线性模型分别拟合到每个Customer-Product组合,并根据如下所示对相应数据进行预测:

data %>%
  group_by(Customer, Product) %>%
  nest() %>%
  mutate(
    train = map(data, ~filter(.x, train_test == 'train')),
    test = map(data, ~filter(.x, train_test == 'test') %>% select(-ORDERED_QTY)),
    model = map(train, ~lm(ORDERED_QTY ~ STOCK_IN_HAND + PREVIOUS_QTY, data = .x)),
    pred = map2(model, test, ~predict(.x, newdata = .y))
  ) %>%
  select(Customer, Product, test, pred) %>%
  unnest()

请点击我的示例,并让我知道是否不清楚。