I have faced in the past some problems of predictive maintenance where I had historical sensor data with failures. With this kind of dataset, you can calculate the RUL (Remaining Useful Life) and label the data accordingly. That allows you to:

  • Perform a regression, trained to predict the RUL
  • Label data before the fail and try to predict it (raising a notice like: be careful, the system is going to fail "soon").
  • Label data performing a multi-class classification. Like the step before, but placing more labels to predict (it should tell you if you are in a healthy, warning, or close-to-error status, for example)

By the way, this time I will have historical data without failures (they did not and will not perform a RTF, Run To Failure). I know that in a specific moment someone did the maintenance program, right before the system breaks. I indeed will have the minimum allowed sensor value.

How can I face this kind of problem, doing predictive maintenance and telling that they could perform their maintenance "a little bit" later without incurring in a failure? I was thinking about survival analysis (I have never done it before), but I do not think I will have technical specs of the hardware showing the estimated life of a particular part.

I do not have the data yet, but I am starting to guess how I will face that problem. I created a simple example of what I should expect (with a single sensor, I guess I will have more).

In my test data I put a vertical line where I assume they performed maintenance, The horizontal line is the limit that the sensor should never cross before getting an error. The data after the vertical green line is the data I will never have in my dataset.

import matplotlib.pyplot as plt
import pandas as pd

min_s1 = 23;
replace_cycle = 20
df_1 = pd.DataFrame(data={'s1':[100,99,98,98,97,95,92,88,84,76,70,64,55,45,40,35,32,30,29,28,27,27,26,25,25,24,24,23,23]})
df_2 = pd.DataFrame(data={'s1':[99,97,98,97,96,95,91,85,80,71,65,57,49,40,35,31,28,27,27,26,26,25,25,24,23,23,23,23,23]})
df_3 = pd.DataFrame(data={'s1':[100,98,98,97,97,96,93,89,86,78,72,67,59,50,43,36,33,31,31,29,30,28,28,27,26,26,25,25,24]})

fig, ax = plt.subplots()

df_1.plot(ax=ax, style='.-');
df_2.plot(ax=ax, style='.-');
df_3.plot(ax=ax, style='.-');
plt.axhline(min_s1, color='red', linestyle='--');
plt.axvline(replace_cycle, color='green', linestyle='--');
ax.legend(['s1 registered run #1','s1 registered run #2','s1 registered run #3','s1 min value','s1 maintenance']);

Fake playground data


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.