{
  "generated_at": "2026-09-22T04:45:14Z",
  "site": "https://rain.ishannaik.com",
  "paths": {
    "log": "data/log.csv",
    "model": "public/model.json"
  },
  "collection": {
    "n_rows": 16224,
    "n_labelled": 7780,
    "n_pending": 8444,
    "n_rain": 1742,
    "base_rate": 0.2239,
    "n_runs": 676,
    "first_issued": "2026-06-25T15:00",
    "last_issued": "2026-09-22T04:00",
    "hours_since_last_issue": 0.75,
    "stale_level": "ok",
    "gap_count_gt_1h": 409,
    "max_gap_h": 511.0,
    "unique_valid": 1492
  },
  "model": {
    "type": "logistic",
    "trained_at": "2026-09-21T06:35:23Z",
    "stored_brier": 0.1352,
    "stored_raw_brier": 0.3632,
    "stored_clim_brier": 0.1366,
    "n_train": 6168,
    "n_test": 1542,
    "features": [
      "fc_bestmatch_mm",
      "fc_ecmwf_mm",
      "fc_rh_bestmatch",
      "hour_sin",
      "hour_cos",
      "recent_rain_mm"
    ]
  },
  "eval": {
    "n_labelled": 7780,
    "min_rows": 200,
    "ready": true,
    "holdout": {
      "n_train": 6224,
      "n_test": 1556,
      "base_rate_train": 0.2391,
      "rain_mm_threshold": 0.3,
      "brier": {
        "model": 0.1438,
        "raw": 0.3702,
        "clim": 0.1423,
        "stored_model": 0.1352
      },
      "bss": {
        "model_vs_raw": 0.6116,
        "model_vs_clim": -0.01
      },
      "raw_contingency": {
        "tp": 110,
        "fp": 432,
        "fn": 144,
        "tn": 870,
        "pod": 0.4331,
        "far": 0.797,
        "csi": 0.1603,
        "bias": 2.1339,
        "accuracy": 0.6298
      },
      "model_contingency_p05": {
        "tp": 25,
        "fp": 43,
        "fn": 229,
        "tn": 1259,
        "pod": 0.0984,
        "far": 0.6324,
        "csi": 0.0842,
        "bias": 0.2677,
        "accuracy": 0.8252
      },
      "model_type": "logistic",
      "beats_raw": true,
      "beats_clim": false,
      "status": "degraded"
    }
  },
  "all_labelled_raw": {
    "tp": 1272,
    "fp": 2593,
    "fn": 470,
    "tn": 3445,
    "pod": 0.7302,
    "far": 0.6709,
    "csi": 0.2934,
    "bias": 2.2187,
    "accuracy": 0.6063
  },
  "thresholds": {
    "rain_mm": 0.3,
    "logistic_prob": 0.5,
    "min_rows": 200,
    "stale_warn_h": 6.0,
    "stale_fail_h": 24.0
  },
  "go_live": {
    "enough_data": true,
    "model_logistic": true,
    "beats_raw_holdout": true,
    "beats_clim_holdout": false,
    "collect_fresh": true
  }
}
