Explainable anomaly detection, real-time monitoring, and predictive failure forecasting for spacecraft mission reliability
SATSentinel-X is an end-to-end AI platform for spacecraft health monitoring and autonomous fault diagnosis. It ingests simulated real-time telemetry from six spacecraft subsystems, runs a three-layer ensemble anomaly detection pipeline, localizes faults to specific subsystems, generates explainable diagnostics with SHAP attribution, and forecasts failure probability up to 5 seconds ahead — all served through a FastAPI backend with WebSocket streaming and a mission-control-style React dashboard.
Framing: This is not a standard anomaly detection project. It is an AI operations platform for mission-critical environments, combining streaming data engineering, interpretable ML, temporal forecasting, and operational intelligence into a single deployable system.
| Metric | Value |
|---|---|
| F1 Score | 0.767 |
| AUC-ROC | 0.943 |
| Precision (Anomaly) | 0.70 |
| Recall (Anomaly) | 0.85 |
| Overall Accuracy | 0.88 |
| Detection Latency | < 1s (real-time) |
| Subsystems Monitored | 6 |
| Telemetry Channels | 26 |
| Fault Scenarios | 5 |
Threshold calibrated via Precision-Recall curve targeting ≥ 70% precision.
┌─────────────────────────────────────────────────────────────┐
│ SATSentinel-X Pipeline │
├─────────────────────────────────────────────────────────────┤
│ │
│ Telemetry Simulator │
│ ├── 26-channel correlated spacecraft telemetry │
│ ├── Physics-inspired orbital eclipse/sunlight cycles │
│ ├── 5 fault scenarios with cascading subsystem effects │
│ └── 1 Hz streaming generator │
│ │ │
│ ▼ │
│ Feature Engineering │
│ └── RobustScaler normalization per channel │
│ │ │
│ ▼ │
│ Anomaly Detection Ensemble │
│ ├── Layer 1: Isolation Forest (300 trees, nominal-trained) │
│ ├── Layer 2: LSTM Autoencoder (seq_len=30, recon error) │
│ └── Layer 3: Per-subsystem Z-Score (6 subsystems × N feat)│
│ │ │
│ ▼ │
│ Explainability + Root Cause Layer │
│ ├── SHAP TreeExplainer (feature-level attribution) │
│ ├── Subsystem Z-Score ranking (fault localization) │
│ └── Rule-based downstream risk + operator action │
│ │ │
│ ▼ │
│ Failure Forecaster │
│ └── Attention-LSTM → P(failure) for t+1 to t+5 steps │
│ │ │
│ ▼ │
│ FastAPI Backend │
│ ├── REST endpoints + WebSocket push (1 Hz) │
│ ├── Fault injection API │
│ └── SHAP / forecast / metrics endpoints │
│ │ │
│ ▼ │
│ Mission Control Dashboard (React + Recharts) │
│ ├── Live telemetry charts (6 channels) │
│ ├── Subsystem health radar │
│ ├── Anomaly confidence bar + alert log │
│ └── Real-time fault injection controls │
└─────────────────────────────────────────────────────────────┘
| Subsystem | Channels | Fault Scenario |
|---|---|---|
| POWER | Battery voltage, current, SoC, solar output, power draw | power_degradation |
| THERMAL | OBC temp, battery temp, solar panel temp, thruster temp | thermal_runaway |
| COMMS | Signal strength, BER, downlink latency, uplink SNR | comms_link_degradation |
| ADCS | Gyro X/Y/Z, attitude error, reaction wheel RPM | attitude_drift |
| PROPULSION | Tank pressure, thruster pulse, delta-V remaining | — |
| PAYLOAD | Payload temp, power draw, data buffer % | sensor_noise_spike |
power_degradation injected
→ battery_voltage drops 1.5–4V
→ power_consumption spikes 8–12W
→ signal_strength degrades (comm dropout risk)
→ payload_power reduced (instrument safe mode)
Each layer catches different failure modes:
| Layer | Method | Catches |
|---|---|---|
| Global | Isolation Forest | Multivariate outliers across all 26 features |
| Temporal | LSTM Autoencoder | Pattern deviations over 30-step sequences |
| Subsystem | Z-Score | Single-channel threshold exceedances |
Threshold Calibration: Rather than using the default Isolation Forest decision boundary, SATSentinel-X calibrates the threshold using the Precision-Recall curve on the full labeled dataset, targeting ≥ 70% precision. This yields a principled operating point rather than an arbitrary cutoff.
{
"is_anomaly": true,
"severity": "HIGH",
"confidence": 0.731,
"most_anomalous_subsystem": "THERMAL",
"probable_fault": "thermal_runaway",
"top_contributing_signals": [
{"feature": "obc_temp_c", "z_score": 8.42, "value": 47.3},
{"feature": "battery_temp_c", "z_score": 6.11, "value": 38.7}
],
"shap_attribution": [
{"feature": "obc_temp_c", "shap": 0.0821},
{"feature": "battery_temp_c", "shap": 0.0612}
],
"failure_forecast_probs": [0.71, 0.74, 0.78, 0.82, 0.85],
"predicted_downstream_risk": [
"Component damage above 85°C",
"Battery capacity degradation"
],
"recommended_action": "Activate thermal control. Reduce power load. Alert thermal team."
}git clone https://github.com/YOUR_USERNAME/SATSentinel-X
cd SATSentinel-X
pip install "numpy<2.0"
pip install -r requirements.txt
pip install shap matplotlibpython simulator/telemetry_engine.py # → data/telemetry_dataset.csv
python retrain.py # → models/ (IF + LSTM AE + Forecaster)python evaluate.py # → plots/ (6 publication-quality figures)uvicorn api.api_v2:app --host 0.0.0.0 --port 8000 --reload| Endpoint | Method | Description |
|---|---|---|
/telemetry/latest |
GET | Latest frame + full detection report |
/telemetry/history?n=100 |
GET | Last N frames |
/alerts |
GET | Anomaly alert log |
/health/subsystems |
GET | Per-subsystem health status |
/forecast |
GET | Failure forecast for next 5 steps |
/shap/latest |
GET | SHAP attribution for latest frame |
/fault/inject?fault_name=X |
POST | Inject fault scenario |
/fault/clear |
POST | Return to nominal |
/metrics/summary |
GET | Rolling 60-frame anomaly stats |
/ws/stream |
WebSocket | Live 1 Hz telemetry push |
docker-compose upSATSentinel-X/
├── simulator/
│ └── telemetry_engine.py # Correlated telemetry simulator + fault injection
├── ml/
│ └── anomaly_detector_v2.py # Ensemble detector: IF + LSTM AE + Z-Score + SHAP
├── api/
│ └── api_v2.py # FastAPI: REST + WebSocket + SSE + forecasting
├── dashboard/
│ └── SATSentinelDashboard.jsx # React mission control UI
├── data/
│ └── telemetry_dataset.csv # 6500 labeled frames (5000 nominal, 1500 fault)
├── models/
│ ├── iso_forest.pkl # Trained Isolation Forest
│ ├── scaler.pkl # RobustScaler
│ ├── nominal_stats.pkl # Per-feature mean/std for Z-score
│ ├── iso_threshold.pkl # PR-calibrated decision threshold
│ ├── lstm_ae.pt # LSTM Autoencoder weights
│ ├── lstm_ae_threshold.pkl # 95th percentile reconstruction threshold
│ └── forecaster.pt # Attention-LSTM forecaster weights
├── plots/ # Evaluation figures
├── evaluate.py # Full evaluation + visualization suite
├── retrain.py # One-command retrain script
├── requirements.txt
├── Dockerfile
└── docker-compose.yml
- Phase 1 — Telemetry simulation, ensemble detection, FastAPI, dashboard
- Phase 2 — SHAP explainability, LSTM AE, attention forecaster, calibrated threshold
- Phase 3 — Kafka streaming, TimescaleDB persistence, Docker production stack
- Phase 4 — Adaptive thresholds (online learning), causal graph reasoning
- Phase 5 — LLM-assisted telemetry summaries (FinVerify-style verification layer)
- Phase 6 — Paper submission: IEEE Aerospace / IACAS 2026
SATSentinel-X | Spacecraft Telemetry Intelligence Platform
Python FastAPI PyTorch scikit-learn SHAP React WebSocket Docker
Designed and implemented an end-to-end AI platform for real-time spacecraft health monitoring targeting ISRO-class mission operations. Built a physics-inspired telemetry simulator with 26 correlated channels across 6 subsystems and 5 cascading fault scenarios. Developed a three-layer ensemble anomaly detector (Isolation Forest + LSTM Autoencoder + Z-Score) with PR-curve threshold calibration achieving F1=0.77 and AUC-ROC=0.94. Integrated SHAP explainability for per-detection feature attribution, an attention-LSTM failure forecaster predicting fault probability up to 5 steps ahead, and a FastAPI backend with WebSocket streaming deployed via Docker. Visualized via a mission-control-style React dashboard with live telemetry charts and subsystem health radar.
Aaditya | B.E. Data Engineering, Universal College of Engineering, Mumbai
IEEE Published · Google Developer Groups Lead · E-Cell IIT Bombay
**