I'm working with maintenance data that use data coming from groups of machines, The data contains all the faults that have been produced in each machine in a specific time range (i.e. last month).

I'm trying to detect those faults that have been growing across specific or multiple machines recently. The difficulty here lies in the number of possible failures that could happen (+3000), and usually, there are thousands of failures per week in each machine.

Data looks like this:

Timestamp          Machine  Fault ID  
2022-01-31 21:18:32     2     784       
2022-01-31 21:19:45     2     1218      
2022-01-31 22:00:10     2     1300      
2022-01-31 22:05:11     6     1300      

I've made an anomalies detection model starting with basic stuff, grouping first the number of failures per vehicle and week and then using Z-score based on the historical number of faults that occurred in each week to try and detect only the biggest changes (score > 2), but I was wondering if there was a more appropriate detection algorithm that could provide better results for anomaly detection purposes.

  • 2
    $\begingroup$ Before you do anything, plot the data. That could be a challenge here, but it's of paramount importance for truly understanding your system and deciding how best to monitor it. $\endgroup$
    – whuber
    Jul 7, 2022 at 21:18
  • 1
    $\begingroup$ @Yassin What do you want to detect with anomaly detection: the faults, or the "faults that have been growing across specific or multiple machines recently", or the vehicles with the most failures, or those with an anomalous amount of failures? $\endgroup$
    – frank
    Jul 8, 2022 at 6:37
  • $\begingroup$ @frank It'd be great to get all that info tbh ;) , but the most interesting thing would probably be to try and get the faults that have been growing recently and those machines with a recent amount of anomalous failures too. $\endgroup$
    – Yassin
    Jul 8, 2022 at 6:58

1 Answer 1


One possibility would be to use a supervised learning approach. Your target variable would be a binary vector of 0/1 where 1 is the anomaly and 0 the normal event. You can train a model to detect the anomaly and adjust the weights of the samples according to the data imbalance.

  • $\begingroup$ I unfortunately don't have data of normal events, or should I generate a dummy class based on the timestamp where there aren't any faults ? $\endgroup$
    – Yassin
    Jul 8, 2022 at 7:15
  • $\begingroup$ It would seem that the non events are on times which are not in the set of events so I think this would be okay. Also, have you tried modeling the data to a Poisson distribution? $\endgroup$ Jul 10, 2022 at 17:05

Your Answer

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

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