I have been struggling with this problem for a while now and I finally decided to post a question here to get some help. The problem i'm trying to solve is about predictive maintenance.

Specifically, a system produces 2 kinds of maintenance messages when it runs, a basic-msg and a fatal-msg, a basic message indicates that there is a problem with the system that needs to be checked (its not serious), a fatal-msg on the other hand signals that the machine must be shut down and the fatal problem be addressed before it is allowed to run again. All maintenance messages have a unique message-id associated with them.

For example:


112234: Check Valve 3

162746: Main switch power fluctuating


7432955: Valve 3 Broken

3358399: Startup Failed

Some key Details: A basic-msg can occur without a fatal-msg, but a fatal-msg must occur with a corresponding basic-msg. Every time the machine is run it gets a unique run-id.

Problem: By looking at the basic-msgs occurred in the previous 4 runs of the machine, predict what fatal-msgs could occur in the next run. I have the data for previous 8 years (includes basic-msgs, fatal-msgs, corresponding run-ids.

I am stuck with this for about 3 weeks now, can someone guide me about a machine learning approach I can take to solve this, and what tools should i use.



2 Answers 2


Sequence labeling seems like a good fit for your problem. Your features could be the frequency of each kind of basic-msg in the past 4 runs (but maybe it would work better normalized by unit of time).

There are a good few libraries for Conditional Random Fields for example.


This appears like a standard multi class classification problem. The features are frequency counts of the basic messages leading up to the fatal message. You would have as many features as there are basic categories.

The labels would be the fatal message categories themselves.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.