GridSentinelSee the demo
Non-technical loss detection

Catch electricity theft in your AMI data.

From notebook to live scoring dashboard: GridSentinel scores every smart meter for theft risk, explains why each account is flagged and tells your inspectors where to go first.

See the demo
0.951
ROC AUC champion
85.7 %
Recall on theft
28
Flagged this month
End-to-end pipeline

From raw meter reads to an inspection list.

01

Ingest

AMI readings and billing records from PostgreSQL or CSV dumps, validated and deduplicated.

02

Explore & engineer

Reproducible notebooks build the signals: consumption drops, night usage, tamper events, billing gaps.

03

Train & benchmark

Three models, class imbalance handled, compared on precision, recall, F1 and ROC AUC.

04

Serve

The champion model behind a Flask API: /score and /batch, with per-feature contributions.

05

Act

The dashboard ranks accounts, explains each flag and sends inspectors where theft is likely.

3 interfaces, one application

Choose your role to explore the prototype.

What you receive

A reproducible repo your team can run and retrain.

Every step is versioned and documented, so the model keeps working when your meter fleet and customer behaviour change.

Commented Jupyter notebooks
Trained model artefacts
Retraining script + drift checks
Flask service /score + /batch
PDF and CSV inspection reports
One-line container build
terminal
$ docker build -t gridsentinel . && docker run -p 5000:5000 -p 3000:3000 gridsentinel
✔ API ready on :5000  ✔ dashboard ready on :3000

$ curl -X POST localhost:5000/score -d '{"account_id":"ACC-111896"}'
{ "theft_probability": 0.982, "risk_band": "high",
  "top_factor": "Deviation from feeder peers" }

$ python scripts/retrain.py --since 2026-10-01
→ F1 0.723 vs champion 0.709 · promoted run-0412

See which meters to inspect first.

240 accounts scored on realistic sample data.

Open the dashboard