我的 objective 是根据每个 id_num 之前的事件预测接下来的 3 个事件

My objective is to predict the next 3 events of each id_num based on their previous events

我是数据科学的新手,我正在研究一个类似于下面显示的示例数据的模型。然而在原始数据中有很多id_numEvents。我的 objective 是根据之前的 Events.

预测每个 id_num 接下来的 3 个事件

请帮助我解决这个问题或关于解决方法,使用R编程。

最简单的“预测”是假设字母序列将重复每个 id_num。我希望这符合 OP 通过“预测”理解的内容。

密码

library(data.table)
DT[, .(Events = append(Events, head(rep(Events, 3L), 3L))), by = id_num]

创造

    id_num Events
 1:      1      A
 2:      1      B
 3:      1      C
 4:      1      D
 5:      1      E
 6:      1      A
 7:      1      B
 8:      1      C
 9:      2      B
10:      2      E
11:      2      B
12:      2      E
13:      2      B
14:      3      E
15:      3      A
16:      3      E
17:      3      A
18:      3      E
19:      3      A
20:      3      E
21:      4      C
22:      4      C
23:      4      C
24:      4      C
25:      5      F
26:      5      G
27:      5      F
28:      5      G
29:      5      F
    id_num Events

data.table是因为分组功能好用,也因为我比较熟悉

说明

对于每个 id_num,现有的字母序列使用 rep() 复制 3 次,以确保有足够的值来填充至少 3 个下一个值。但是,使用 head() 仅获取前 3 个值。这 3 个值附加到每个 id_num

的现有序列

一些调整

有两种可能的优化:

  1. 如果值序列比要预测的值的数量 n_pred 长得多,简单地重复长序列 n_pred 次是一种浪费。
  2. 如果现有序列将再重复一次,则可以避免调用 append()

因此,优化后的代码如下所示:

n_pred <- 3L
DT[, .(Events = head(rep(Events, 1L + ceiling(n_pred / .N)), .N + n_pred)), by = id_num]

请注意,.Ndata.table 语法中的一个特殊符号,包含一组中的数字行。 head() 现在 returns 原始序列加上预测值。

数据

DT <- data.table(
  id_num = c(rep(1L, 5L), 2L, 2L, rep(3L, 4L), 4L, 5L, 5L),
  Events = c(LETTERS[1:5], "B", "E", rep(c("E", "A"), 2L), "C", "F", "G")
)
DT
    id_num Events
 1:      1      A
 2:      1      B
 3:      1      C
 4:      1      D
 5:      1      E
 6:      2      B
 7:      2      E
 8:      3      E
 9:      3      A
10:      3      E
11:      3      A
12:      4      C
13:      5      F
14:      5      G