Skip to content

ILLUSTRATIVE · NASA / SVS · NOT ADITYA-L1 DATA

Findings · validation

The proof

Every figure below is computed from the 192,541 held-out predictions in the committed artifact — not summarised, not redrawn by hand.

← Back to the finding

What is this?

The scientific validation of the flare-detection result: ROC and precision-recall curves, calibration, confusion matrices, the threshold trade-off and a per-day error analysis.

Why should I trust it?

Every curve is computed at build time by a committed script from the 192,541 held-out predictions in the benchmark artifact. The scalar metrics are read from the published benchmark rather than recomputed, so the figures cannot disagree with the tables.

Where can I verify it?


Ranking quality

ROC and precision–recall

ROC-AUC says the detectors are equivalent. Precision–recall says they are not. At a 1.24% base rate the PR curve is the honest one — ROC is dominated by the 190,148 negatives.

ROC

0.000.000.250.250.500.500.750.751.001.00False positive rateTrue positive rate
  • Threshold (count rate)AUC 0.954
  • LightGBMAUC 0.961
Nearly indistinguishable — this is the basis of the headline verdict.

Precision–recall

0.000.000.250.250.500.500.750.751.001.00RecallPrecision
  • Threshold (count rate)AUC 0.485
  • LightGBMAUC 0.706
Here they separate: LightGBM ranks minutes substantially better. The dashed line is the base rate — where a random detector would sit.

Why the verdict is still the threshold

Better minute-level ranking did not become more detected flares. Event recall is statistically indistinguishable, and the learned model pays for its ranking with roughly five times the false-alarm runs. The trade-off section below shows that cost directly.


Every metric

Minute-level and event-level

Trivial baselines are shown because they bound the problem — and because Persistence beating everything is itself the finding.

Minute-level and event-level metrics for every detector.
ModelPrecisionRecallF1MCCBrierPR-AUCEvent recallFalse runs
Randomtrivial0.0120.5010.024-0.0000.33380.0120.98847,595
Majoritytrivial0.0000.0000.0000.0000.01240.0120.0000
Climatologytrivial0.0000.0000.0000.0000.01270.0120.0000
Persistencetrivial0.9660.9640.9650.9650.00090.9321.0000
Threshold (count rate)0.5480.5890.5680.5620.4860.92715
Logistic regression0.5400.5370.5390.5330.02940.5560.976228
Random forest0.7660.5900.6670.6690.01910.6990.98847,595
LightGBM0.7450.6280.6810.6800.01550.7070.98879

artifacts/v2/ml/benchmark_results.json


Confusion

What each detector actually did

Threshold (count rate)

True positive

1,409

False positive

1,163

False negative

984

True negative

188,985

LightGBM

True positive

1,503

False positive

515

False negative

890

True negative

189,633

Counted over 192,541 held-out minutes, of which 2,393 are flaring.


Calibration

The probabilities are not trustworthy

Reliability diagram

0.000.000.250.250.500.500.750.751.001.00Mean predicted probabilityObserved frequency
  • LightGBMBrier 0.0155
Perfect calibration lies on the diagonal. The curve sits far below it: when this model says 30%, the event occurs about 2% of the time.

Why this matters

The adjudicated verdict offers LightGBM as the option "if a calibrated probability is required". This diagram shows that as published, it is not calibrated — it is systematically over-confident. Anyone using these scores as probabilities would need to recalibrate first.

Reported here rather than omitted, because a limitation that only appears when someone deploys the model is a limitation the platform should have stated.


Trade-off

Recall costs alarms

Recall vs alarm burden

0.000.000.250.250.500.500.750.751.001.00Alarm runs (normalised)Recall
  • Threshold detector
Each point is a candidate threshold. Recall rises steeply at first, then buys very little for a rapidly growing alarm burden.

Operating point

Threshold
6.233
Precision
0.548
Recall
0.589
F1
0.568
Alarm runs
90

Swept across 61 candidate thresholds in the log domain, because the count rate spans orders of magnitude. Runs, not raw false positives — an operator is interrupted once per run.


Error analysis

Where it fails

Errors are not spread evenly. Of 148 held-out days, 44 contain at least one error, and the misses concentrate in a handful of them.

Days with the most missed flaring minutes.
DateMissed (FN)False alarms (FP)Caught (TP)
2026-03-28127073
2026-01-21581616
2026-04-24575885
2026-04-04571343
2026-02-015253102
2026-04-26491130

The dominant failure is a missed slow riser: a flare whose count rate climbs gradually and never crosses the threshold, producing many false negatives on a single day with no false positives. This is the specific weakness a learned model would need to fix to justify its alarm cost — and on event recall, it did not.


Ablation

Spectral resolution adds nothing

T1 (count rate) only

0.9605

+ spectral bands

0.9638

Δ ROC-AUC

+0.0033

Adding spectral bands moves ROC-AUC by 0.0033 — within noise. A confirmed null, reported because a null that goes unpublished is a result someone else will pay to rediscover.

artifacts/v2/ml/ablation_results.json


Provenance

How these figures were produced

  1. 01

    Source

    artifacts/v2/ml/benchmark_predictions.json — 192,541 held-out labels and per-sample scores.

  2. 02

    Derivation

    web/scripts/derive_metrics.py sweeps every distinct score to build ROC/PR, bins probabilities for calibration, and aggregates errors by day.

  3. 03

    Cross-check

    ROC-AUC computed from the curve reproduces the published ROC-AUC to five decimal places.

  4. 04

    Render

    Static SVG at build time — this page ships no JavaScript.