Project 8 turns NASA's C-MAPSS turbofan run-to-failure data into a remaining-useful-life predictor — an eight-regressor benchmark run separately across all four degradation regimes, ranked by RMSE and the NASA prognostics score, and wrapped in an explorer whose engine you can watch age in real time. The thesis is one line: schedule maintenance before failure, not after.
This is the heart of the RUL Explorer, running right here on the page — no video, no image, just inline SVG. Drag the slider (or press Play degradation) and watch the engine age: the fan slows, the combustor reddens, and the health verdict flips HEALTHY → CAUTION → CRITICAL as the remaining cycles drain toward the maintenance line. "This engine is running out of life" becomes something you see.
A jet engine does not fail without warning — it degrades, cycle by cycle, and its sensors carry the signature of that decline. The question this project answers is the one a maintenance planner actually asks: how many cycles of useful life are left before this engine crosses into unsafe territory? Not a stop/go flag, but a countdown — so an engine can be pulled for service while it is still healthy, rather than discovered too late.
Source: NASA's C-MAPSS (Commercial Modular Aero-Propulsion System Simulation) turbofan degradation benchmark — the standard dataset for prognostics research. It ships as four sub-datasets that get progressively harder, differing in how many operating conditions the engines run under and how many fault modes can develop:
| Fleet | Operating conditions | Fault modes | Why it's harder |
|---|---|---|---|
| FD001 | 1 | 1 | Cleanest — one regime, one failure path |
| FD002 | 6 | 1 | Six regimes muddy the sensor signal |
| FD003 | 1 | 2 | Two competing degradation modes |
| FD004 | 6 | 2 | Hardest — six regimes and two faults |
Each engine is a run-to-failure trajectory of 21 sensor channels and 3 operating settings; the target is the remaining useful life at every point along the way. Following standard practice, RUL is piecewise-linear capped (an engine far from failure is simply "healthy", so the label is clipped at a ceiling of ~125 cycles) — degradation is only meaningfully predictable once wear actually begins.
Every fleet was benchmarked with the same eight regressors, each tuned by a genuine hyperparameter search inside the reusable AEGIS model-execution framework: Ridge, HistGradientBoosting, LightGBM, XGBoost, CatBoost, Random Forest, Extra Trees, and SVR. Two deliberate discipline choices shape how the results are read:
One operating condition, one fault mode. The tree ensembles cluster tightly at the top; Extra Trees leads. (SVR is O(n²) and still completing on the full search — reported when done rather than rushed.)
| Rank | Model | RMSE | MAE | R² | NASA score |
|---|---|---|---|---|---|
| 1 | Extra Trees | 16.96 | 11.85 | 0.821 | 823.9 |
| 2 | LightGBM | 17.16 | 11.92 | 0.817 | 802.0 |
| 3 | CatBoost | 17.16 | 12.00 | 0.817 | 889.0 |
| 4 | Random Forest | 17.21 | 12.06 | 0.816 | 859.5 |
| 5 | XGBoost | 17.32 | 11.95 | 0.813 | 887.2 |
| 6 | HistGradientBoosting | 17.62 | 12.30 | 0.807 | 864.5 |
| 7 | Ridge (linear baseline) | 20.88 | 16.47 | 0.728 | 1312.2 |
Six operating conditions make the sensor signal far noisier — yet the gradient-boosted and tree ensembles actually score a lower RMSE here than on FD001, because there is far more data to learn the regimes from. Random Forest takes it, with CatBoost a whisker behind. (SVR is skipped on the six-regime sets by design — it is prohibitively slow on ~50–60k rows; all seven applicable models completed.)
| Rank | Model | RMSE | MAE | R² | NASA score |
|---|---|---|---|---|---|
| 1 | Random Forest | 16.14 | 11.99 | 0.859 | 1586.7 |
| 2 | CatBoost | 16.19 | 11.88 | 0.858 | 1586.6 |
| 3 | Extra Trees | 16.21 | 12.13 | 0.857 | 1679.0 |
| 4 | XGBoost | 16.24 | 11.88 | 0.857 | 1612.6 |
| 5 | LightGBM | 16.33 | 11.89 | 0.855 | 1619.0 |
| 6 | HistGradientBoosting | 16.47 | 11.95 | 0.853 | 1635.8 |
| 7 | Ridge (linear baseline) | 18.15 | 14.07 | 0.821 | 1589.9 |
One operating condition but two competing degradation modes (HPC + Fan). The tree ensembles lead again and cluster tightly at the top — Random Forest takes it, Extra Trees a hair behind. All eight models completed.
| Rank | Model | RMSE | MAE | R² | NASA score |
|---|---|---|---|---|---|
| 1 | Random Forest | 18.93 | 13.33 | 0.767 | 1601 |
| 2 | Extra Trees | 19.06 | 13.26 | 0.763 | 1784 |
| 3 | CatBoost | 19.57 | 14.04 | 0.750 | 1750 |
| 4 | HistGradientBoosting | 19.85 | 13.80 | 0.743 | 1834 |
| 5 | LightGBM | 19.92 | 13.97 | 0.741 | 1830 |
| 6 | XGBoost | 20.05 | 14.26 | 0.738 | 1970 |
| 7 | Ridge (linear baseline) | 20.73 | 15.88 | 0.720 | 1671 |
| 8 | Support Vector Regressor | 22.30 | 15.11 | 0.676 | 3160 |
Six operating regimes and two fault modes — the toughest board of all. In the deep FULL search, Random Forest and Extra Trees did not finish (Random Forest was pulled for being pathologically slow on this set), so among the completed models CatBoost leads. The complete short-run benchmark crowns Random Forest (RMSE 18.68) as FD004's true champion — noted honestly rather than hidden.
| Rank | Model | RMSE | MAE | R² | NASA score |
|---|---|---|---|---|---|
| 1 | CatBoost | 18.88 | 13.79 | 0.807 | 2733 |
| 2 | HistGradientBoosting | 19.32 | 13.99 | 0.798 | 2967 |
| 3 | XGBoost | 19.40 | 14.13 | 0.796 | 3025 |
| 4 | LightGBM | 19.43 | 14.12 | 0.796 | 3164 |
| 5 | Ridge (linear baseline) | 20.85 | 16.56 | 0.765 | 2404 |
A prognostics model's output is a number, and numbers are easy to nod at and ignore. Binding that number to a living engine — colour, spin, glow, a draining bar against a hard maintenance line — turns "RUL = 18" into an unmistakable "pull this engine now." The point of the whole project is pre-emptive action, and the interface is built to make that action feel urgent at exactly the right moment, and calm when there is still runway.