我的目标是根据以前的事件预测每个id_num的下3个事件

时间:2017-07-22 05:04:58

标签: r machine-learning prediction data-analysis

我是数据科学的新手,我正在开发一个类似于下面显示的示例数据的模型。但是,在原始数据中,有许多id_numEvents。我的目标是根据之前的id_num预测每个Events的后续3个事件。

请帮我解决这个问题或者使用R编程来解决这个问题的方法。

sample data

My Objective

1 个答案:

答案 0 :(得分:0)

最简单的“预测”是假设每个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个值。这三个值将附加到每个id_num

的现有序列中

一些调整

有两种可能的优化:

  1. 如果值的序列比预测n_pred的值的数量长得多,那么简单地重复长序列n_pred次就是一种浪费。
  2. 如果现有序列将再次重复,则可以避免对append()的调用。
  3. 因此,优化的代码如下所示:

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

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

    数据

    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