Technical approach

Explainable detection, not a black box.

Every flag can be traced to the reading, the baseline, the score and the model version that produced it.

1. Cleaning and validation

Imports reject unknown stations, unsupported parameters, wrong units, physically implausible values, invalid or future timestamps and duplicate readings — with the line number and reason.

2. Robust baseline

For each station and parameter, a trailing 48-reading window gives a median and median absolute deviation (MAD). The robust z-score is the distance from that median in scaled MAD units — insensitive to the very outliers we are looking for.

3. Isolation Forest

100 random trees (seeded, 256-point subsamples) score each reading on value, rate of change and deviation from the rolling median. Readings that isolate quickly score high.

4. Agreement rule

A reading is flagged only when |robust z| ≥ 3.5 and the isolation score ≥ 0.6. Series with fewer than 30 readings are not scored. Thresholds are adjustable per run and stored with the model version.

5. Forecasting

Forecasting is not enabled. It will only be offered once enough validated history exists to evaluate it honestly.