*The challenge description can be found here *

Inspiration 🚉

Trains and train tracks that are equipped with the ZSL-90 system offer enhanced security, because they continuously update the train about current speed restrictions and other signals.

If something happens to the train driver, and he subsequently loses control over the train, the ZSL-90 system can automatically engage an emergency break.

A drawback of the system, however, is, that a loss of connection can lead to unwanted emergency brakes. This loss can happen because of damages to the antenna or interference from other objects, such as electric cow fences.

What our platform does 🖥

Our predictive maintenance platform first analyses historical sensor data and events and then uses those insights to detect anomalies in new data. As soon as new data is loaded, the last rides are analysed. Anomalies are detected relative to their position on the track and their type is determined (interference or antenna degradation). More recent rides are weighted more heavily. The heart of the platform is the dashboard that runs on a multitude of platforms (Desktop, Web, iOS, Android).

It displays the detected anomalies on a map. The user can click on these markers to find out more about the detected problem and get directions to the exact location. Additionally, the dashboard can be used to upload new event and sensor data.

How we built it 🧑🏻‍💻

Our beautiful frontend is build in Flutter to enable the use on various platforms. The frontend gets its data through the REST API offered by our backend. Using FastAPI we were able to build an API in a matter of hours.

Algorithm 🧮

Using machine learning would be possible in theory, however, much more data would be needed. At the moment, only 138 incidents are available to learn from. If dozens of trains provided the data over a longer period of time, it could be possible. But still, if a previously unseen problem arises, all the data can't help. For this type of data, we would then use a one dimensional convolutional neural network over the position dimension, followed by a LSTM Network to analyse the changes over time.


With the currently available data, only classical anomaly detection can be applied effectively. We believe that this can be very reliable, however, as this method can 'learn' from the normal runs instead of the incidents. It was not that straight forward as it might seem. The code also has to be relatively efficient, as the dataset is quite large.

First, the timeline is separated into individual rides. The position signal seems to be read from a GPS and can therefore have fluctuations, and the train does necessarily always drive all the way to the last station. For this reason, we used the moving average of the derivative of the position to determine in which direction the train is moving and then separate the rides when the direction is changing.

Analysis of the incidents showed that the problem always occurred over a certain range on the track. This range could be represented using a Gaussian curve, but instead we just cut the track into 300 chunks of ~100m length (faster and works probably just as well). Anomalies are then detected in each chunk using previously calculated mean and variance of voltage and package loss. Data from more recent rides is weighted more heavily to detect anomalies faster.

The results from all 300 sections are then sent to the frontend. In addition, peaks are calculated if an outlier threshold (called “severance score” in the frontend) is reached. If multiple chunks reach the threshold in the range of 3 km, only the one with the highest value is considered a peak. This peak values are also sent to the frontend and visualized. When the threshold is reached only for the package loss but not for the voltage, it is assumed that is likely an interference problem.

The threshold were determined using the 138 incidents in the dataset.

Challenges we ran into

Preprocessing the data took much longer than anticipated, since the datasets were quite large.

Accomplishments that we're proud of

We build a fully working prototype that also looks great.

What's next for ZSL90 Predictive Maintenance Platform 🔮

We're curious what the people of Siemens have to say about what we built.

Built With

Share this project: