如何使用生存分析对时间序列数据进行预测性维护?

数据挖掘 预测建模 时间序列 生存分析
2021-09-14 19:16:26

所以,我有一个数据集,其中包含不同机器的日常操作条件和一个标志,说明它是否失败。这是数据的快照。

在此处输入图像描述

我如何使用生存分析或任何其他算法来计算机器预计在未来何时发生故障?我的理解是我可以在 R 中使用生存包,但我不能将它用于时间序列数据。

1个回答

每当您的任务包括诸如“...当 XY 将失败...”之类的内容时,我会说先进行生存分析,它既简单又快速,它会给您提供数据的概览。

使用您的数据,您可以将它们转换为能够绘制生存曲线的区间,或者直接进行 Cox 回归,该回归可以处理连续数据并产生风险比。

您可以从 Kaplan-Meier 曲线开始(作为奖励,有置信区间):

km <- survfit(Surv(datetime, Failed) ~ 1,conf.int=0.90, conf.type="log-log", data=Dataset)
summary(km)
plot(km, xlab="month", ylab="estimated S(t)", main="Kaplan-Meier with log-log, C.I.=90%")

曲线看起来有点像这样: 在此处输入图像描述

此外,您可以拆分曲线以查看是否有任何参数具有不同的影响。你可以通过简单地用类似的~1东西替换~AttributeX

所以你应该得到这样的情节: 在此处输入图像描述

当然,R 也会为您提供各种检验和 p 值,例如 Log-Rank 以验证影响是否显着(survdiff)。

然后您可以继续进行 Cox 回归,它会告诉您风险比是多少(=该属性对风险的影响是正面还是负面以及程度如何)。在 R 中看起来像这样:

cox<-coxph(Surv(datetime, Failed)~AttributeX, data=pbc)
summary(cox)

验证假设 - 比例风险和函数形式是一种很好的做法(同样,R 将为您提供 p 值,或者您可以绘制残差 - Martingale 或 Schoenfeld)。

如果您有兴趣知道事件何时发生,请搜索 Accelerated Failure Time 模型,该模型将为您提供参数生存时间分布,您可以在其中简单地输入时间并获得概率。

在 R 中:

wei<-survreg(Surv(datetime, Failed)~ AttributeA + AttributeB + AttributeC,data=Dataset) 

有更多可能的分布,您可以检查哪一个最适合您的数据。我从未做过预测,但是文档predict中描述了一个函数,或者已经有类似的问题与 Crossvalidated 的答案类似,例如this