我的 objective 是根据每个 id_num 之前的事件预测接下来的 3 个事件
My objective is to predict the next 3 events of each id_num based on their previous events
我是数据科学的新手,我正在研究一个类似于下面显示的示例数据的模型。然而在原始数据中有很多id_num
和Events
。我的 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
的现有序列
一些调整
有两种可能的优化:
- 如果值序列比要预测的值的数量
n_pred
长得多,简单地重复长序列 n_pred
次是一种浪费。
- 如果现有序列将再重复一次,则可以避免调用
append()
。
因此,优化后的代码如下所示:
n_pred <- 3L
DT[, .(Events = head(rep(Events, 1L + ceiling(n_pred / .N)), .N + n_pred)), by = id_num]
请注意,.N
是 data.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
我是数据科学的新手,我正在研究一个类似于下面显示的示例数据的模型。然而在原始数据中有很多id_num
和Events
。我的 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
一些调整
有两种可能的优化:
- 如果值序列比要预测的值的数量
n_pred
长得多,简单地重复长序列n_pred
次是一种浪费。 - 如果现有序列将再重复一次,则可以避免调用
append()
。
因此,优化后的代码如下所示:
n_pred <- 3L
DT[, .(Events = head(rep(Events, 1L + ceiling(n_pred / .N)), .N + n_pred)), by = id_num]
请注意,.N
是 data.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