Remaining-useful-life prediction for turbofan engines, with the test engines still unopened

RUL prediction with calibrated intervals, a cost-based maintenance policy and a streaming fleet replay

AI/ML

Summary

Problem
Maintenance scheduled too early wastes money; too late risks failure in service. A useful prediction needs an honest error bar and a policy that shows when planning pays. A research demonstration on public engine data.
My role
Sole developer
Team
Personal project
Status
In progress
Timeline
October 2026
Stack
Python, PyTorch, LightGBM, scikit-learn, Parquet, Docker
Next
Score the held-out group of 10 engines once, then deploy the replay to the free-tier host.

What shipped

  • Reduced remaining-life error to 7.40 cycles RMSE, against 8.90 for cycle count alone, in cross-validation over 19 engines, by training a 1D CNN; 10 test engines are unscored.
  • Showed that planned maintenance pays above a cost ratio of 1, in an estimated cost model, by acting on the lower bound of conformal prediction intervals.
  • Reported a failed LSTM (13.00 RMSE, worse than ignoring the sensors) with its diagnosis instead of tuning it on the reported folds.
RMSE, best model (cycles)
7.40
Baseline: 8.90 from cycle count alone, with no sensors
1D CNN, 5-fold cross-validation grouped by engine over 19 engines (results/phase3_sequence.json), 95% interval 4.61–10.20 resampled by engine; the 10-engine test group has not been scored yet
LSTM RMSE
13.00
Baseline: 8.90 cycle-count floor
Same folds; the LSTM did worse than ignoring the sensors, and the likely cause (its readout) was left unfixed to avoid tuning on the reported folds
Planning against run-to-failure (estimate)
Wins above a cost ratio of 1
Modelled savings of the lower-bound policy across cost ratios of 1 to 100 (results/phase4_policy.json); at ratio 1 planning loses by 20.9–90.2 cost units, above it planning wins. The cost figures are assumptions, so these are estimates
On this page
Bar chart of Prognos RMSE by model with 95% intervals: 1D CNN 7.40, Transformer 7.43, LightGBM 8.15, cycle count only 8.90, LSTM 13.00, training mean 23.76, per-channel trend 25.87

Source: results/phase3_sequence.json in the Prognos repository

Context and constraints

The data is NASA’s N-CMAPSS: three sub-datasets (DS01, DS02 and DS06), 29 engines, 20.9 million rows and 199,095 sliding windows. Windows overlap heavily, so every split, interval and comparison is done by engine. The final test group of 10 engines is held closed and will be opened once. The repository calls itself a research demonstration and lists its limitations before any operational conclusion.

Architecture

The raw HDF5 files are converted to Parquet, with health parameters dropped at conversion. One shared feature builder serves every model and the streaming path, so training and serving can’t drift apart. Seven models are compared on the same folds: a 1D CNN, a two-layer Transformer, LightGBM, a cycle-count-only linear model, an LSTM, the training mean and a per-channel trend. Conformal prediction adds intervals, a policy decides maintenance on their lower bound, and a streaming pipeline replays held-out engines as a live fleet behind an API and a cost panel.

Architecture: PrognosNASA N-CMAPSS (Parquet), Streaming replay of held-out engines, Shared feature builder, RUL model (1D CNN) with conformal intervals, Lower-bound maintenance policy, API and cost panel, Fleet dashboard. Connections: NASA N-CMAPSS (Parquet) to Shared feature builder; Shared feature builder to RUL model (1D CNN) with conformal intervals; RUL model (1D CNN) with conformal intervals to Lower-bound maintenance policy; Streaming replay of held-out engines to Shared feature builder; Lower-bound maintenance policy to API and cost panel; API and cost panel to Fleet dashboard.RUL and intervallive windowsNASA N-CMAPSS (Parquet)data storeStreaming replay of held-out enginesqueueShared feature builderserviceRUL model (1D CNN) with conformal intervalsmodelLower-bound maintenance policyserviceAPI and cost panelgatewayFleet dashboardclient

Request flows

  1. Predict and plan maintenance: NASA N-CMAPSS (Parquet) → Shared feature builder → RUL model (1D CNN) with conformal intervals → Lower-bound maintenance policy → API and cost panel → Fleet dashboard
  2. Replay a live fleet: Streaming replay of held-out engines → Shared feature builder → RUL model (1D CNN) with conformal intervals → Lower-bound maintenance policy

Architecture: Prognos

Components

Request flows

Choose a component to focus it, or a flow to watch its requests. In the view, drag or use the arrow keys to turn it and + or − to zoom. Escape closes.

Engineering decisions

How should the data be split?
Options
  • Random windows
  • By unit number
  • By engine
  • identified as sub-dataset plus unit
Chose
Group by engine, as the pair of sub-dataset and unit, and hold one group out entirely as the final test set
Trade-off
With 29 engines the confidence intervals are wide.
Evidence
Overlapping windows from one engine are near-duplicates, and unit numbers restart in every sub-dataset; grouping on the bare unit number had earlier merged engines and reported 16 where there are 29.
How are prediction intervals made trustworthy?
Options
  • Model-specific uncertainty
  • Conformal prediction
Chose
Conformal prediction, with confidence intervals on comparisons resampled by engine rather than by window
Trade-off
Intervals are only as good as the calibration data, and with few engines they are wide.
Evidence
Resampling windows would treat two views of one engine as independent and report a narrower, misleading interval.
What should the maintenance policy act on?
Options
  • The point prediction
  • The lower bound of the interval
Chose
The lower bound
Trade-off
Engines come out of service earlier than the point prediction suggests, which costs planned visits.
Evidence
Across the cost sweep the lower-bound policy recorded no failures, and the crossover where planning starts to pay doesn't depend on the cost figures chosen.
Why keep a model that failed?
Options
  • Drop the LSTM
  • Tune it until it wins
  • Report it with its diagnosis
Chose
Report it with its diagnosis and leave the fix for a fresh run
Trade-off
The table shows a clearly weak model.
Evidence
Its error is 14.06 early, 7.63 mid-life and 15.02 late, consistent with a readout that uses only the final hidden state; fixing it on these folds would be tuning on the set being reported.

Evaluation

Cross-validation over 19 engines, five folds grouped by engine; 95% intervals come from resampling by engine.

Model RMSE 95% interval NASA score
1D CNN 7.40 4.61–10.20 24,343
Transformer 7.43 5.39–9.47 24,396
LightGBM 8.15 4.23–12.07 30,027
Cycle count only, no sensors 8.90 4.62–13.18 34,950
LSTM 13.00 10.58–15.41 65,732
Training mean 23.76 22.08–25.44 283,059
Per-channel trend 25.87 25.09–26.65 557,375

The intervals of the top models overlap. Every committed result file records the machine, library versions and date, and a CI test fails if this table drifts from the result files.

Deployment and operations

The full seven-model run takes about 55 minutes on an Apple M5. The cost panel serves the committed policy result rather than recomputing it, so the cost model always travels with its numbers. Fault-injection tests cover the streaming path. A deployment path to a free-tier Oracle VM is documented with a verifier, and isn’t live yet.

Results

The best sequence models beat the cycle-count floor, but not by much, and their intervals overlap with it. The LSTM did worse than ignoring the sensors entirely. The maintenance result that doesn’t depend on any cost guess is the crossover: when an in-flight removal costs the same as a shop visit, planning loses; above that ratio it wins, and the gain grows with the ratio. All cost figures are modelled estimates, and the held-out test engines haven’t been scored.

What I'd do next

Open the 10-engine test group once and report it, then try the pooled LSTM readout on a new seed and fold assignment.

Talk about this project

I'm happy to walk through any decision here in more depth.

pssaikumardangeti@gmail.com