我对数据科学和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。
这是我们第一次遇到这种要求,而没有在如何进行方面取得领先。任何意见或建议都会有很大帮助。
答案 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()
请点击我的示例,并让我知道是否不清楚。