预测时间序列数据的失败

时间:2017-11-18 06:30:22

标签: r machine-learning time-series random-forest cross-validation

我在R中有一个带有以下变量的数据集(csv文件): - 日期(月/日) - 机器编号(例如“XTR004”) - 失败(二进制,0或1) - 属性1(int) - 属性2(int) - 属性3(int)

enter image description here

我有6个月的数据。每天创建一个日志(1行),显示日期,机器编号,机器是否出现故障以及应与故障相关的3个属性。当机器发生故障(故障= 1)时,第二天不会创建新的日志(行)。换句话说,第一个日期有很多行,最后一个日期有少量行

目标:我想使用这3个属性预测失败(使用Rstudio)。我想使用的模型是1)逻辑回归,2)随机森林,3)神经网络。

问题:是否有人就如何将数据拆分为培训和验证集(80/20或交叉验证),然后在上述特定情况下使用上述模型?日期和机器编号一起可视为“主键”。因此我不确定是否: - 制作2组计算机,其中包含与这些计算机相关的所有日志 - 使用特定日期分割2个组(这意味着长寿的某些机器是两个组的一部分)

我认为第一种策略更有意义,但我没有找到分割数据的方法(使用80/20一次性拆分或5或10次交叉验证)。我假设我必须根据其机器编号对数据进行分组?有没有人有任何我可以查看的例子或任何示例代码?

非常感谢!

1 个答案:

答案 0 :(得分:0)

这是一个列车/测试拆分流程,基于原始数据集中的(唯一)机器名称。

# example dataset
df = data.frame(Date = c(rep("03/20/2001", 4), rep("03/21/2001", 4)),
                Machine = rep(c("XTR003","XTR004","XTR005","XTR006"), 2),
                Attr1 = c(0,0,10,5,0,4,0,8),
                Failure = c(0,1,0,0,1,0,0,1),
                stringsAsFactors = F)

# check how it looks like
df

#         Date Machine Attr1 Failure
# 1 03/20/2001  XTR003     0       0
# 2 03/20/2001  XTR004     0       1
# 3 03/20/2001  XTR005    10       0
# 4 03/20/2001  XTR006     5       0
# 5 03/21/2001  XTR003     0       1
# 6 03/21/2001  XTR004     4       0
# 7 03/21/2001  XTR005     0       0
# 8 03/21/2001  XTR006     8       1

# create a vector of unique machine names
machine_vec = unique(df$Machine)

# calculate number of unique machines in your train dataset
# here we want 70% of machines to be in the train dataset
# (this is NOT the number of rows of your train dataset, but the number of unique machines)
N_train = round(length(machine_vec) * 0.7)

# randomly select which machine names will create your train dataset
train_machines = sample(machine_vec, N_train)

# select corresponding rows for your train and test dataset
# (all rows of the machines selected previously will form the train data)
df_train = df[df$Machine %in% train_machines,]
df_test = df[!df$Machine %in% train_machines,]

最后,您的列车和测试数据集的行数应该等于原始数据集的行数,因为您执行了拆分而不会丢失任何信息。此外,机器应仅属于火车数据集,或仅属于测试数据集,因为这是拆分背后的哲学。