Replace the two-script Python pipeline (analysis report + Elixir-source emitter) with a single `scripts/recalibrate.py` that fits per-band weights from PSKR spot density (VHF/UHF) and contacts↔HRRR correlations (microwave), writing `priv/algo/band_weights.json` as a machine-readable artifact. A new Elixir BandWeights module loads this JSON once via `:persistent_term` cache; BandConfig.weights/1 consults it before falling back to in-source overrides or global defaults. The script never touches Elixir source — recalibration is now `python3 scripts/recalibrate.py` followed by an app restart.
241 lines
5.2 KiB
JSON
241 lines
5.2 KiB
JSON
{
|
|
"generated_at": "2026-05-25T19:44:49+00:00",
|
|
"generated_by": "scripts/recalibrate.py",
|
|
"schema_version": 1,
|
|
"global_weights": {
|
|
"humidity": 0.1262,
|
|
"time_of_day": 0.038,
|
|
"td_depression": 0.101,
|
|
"refractivity": 0.0986,
|
|
"sky": 0.0841,
|
|
"season": 0.1134,
|
|
"wind": 0.0841,
|
|
"rain": 0.1431,
|
|
"pwat": 0.1147,
|
|
"pressure": 0.0967
|
|
},
|
|
"data_sources": {
|
|
"pskr": {
|
|
"bands": [
|
|
50,
|
|
144,
|
|
432,
|
|
1296,
|
|
2304,
|
|
10000
|
|
],
|
|
"total_samples": 411619
|
|
},
|
|
"contacts": {
|
|
"bands": [
|
|
222,
|
|
432,
|
|
902,
|
|
1296,
|
|
2304,
|
|
3400,
|
|
5760,
|
|
10000,
|
|
24000,
|
|
47000,
|
|
75000,
|
|
122000
|
|
],
|
|
"total_samples": 81571
|
|
}
|
|
},
|
|
"band_overrides": {
|
|
"50": {
|
|
"weights": {
|
|
"humidity": 0.1252,
|
|
"time_of_day": 0.0273,
|
|
"td_depression": 0.1511,
|
|
"refractivity": 0.0764,
|
|
"sky": 0.1006,
|
|
"season": 0.2171,
|
|
"wind": 0.1006,
|
|
"rain": 0.0171,
|
|
"pwat": 0.1197,
|
|
"pressure": 0.0649
|
|
},
|
|
"n_samples": 396474,
|
|
"source": "pskr"
|
|
},
|
|
"144": {
|
|
"weights": {
|
|
"humidity": 0.1865,
|
|
"time_of_day": 0.0197,
|
|
"td_depression": 0.1492,
|
|
"refractivity": 0.1106,
|
|
"sky": 0.0621,
|
|
"season": 0.1173,
|
|
"wind": 0.0621,
|
|
"rain": 0.0106,
|
|
"pwat": 0.1695,
|
|
"pressure": 0.1125
|
|
},
|
|
"n_samples": 13710,
|
|
"source": "pskr"
|
|
},
|
|
"222": {
|
|
"weights": {
|
|
"humidity": 0.2002,
|
|
"time_of_day": 0.0271,
|
|
"td_depression": 0.1804,
|
|
"refractivity": 0.101,
|
|
"sky": 0.0751,
|
|
"season": 0.1316,
|
|
"wind": 0.0751,
|
|
"rain": 0.0128,
|
|
"pwat": 0.1535,
|
|
"pressure": 0.0432
|
|
},
|
|
"n_samples": 7518,
|
|
"source": "contacts"
|
|
},
|
|
"432": {
|
|
"weights": {
|
|
"humidity": 0.153,
|
|
"time_of_day": 0.0256,
|
|
"td_depression": 0.17,
|
|
"refractivity": 0.1659,
|
|
"sky": 0.0708,
|
|
"season": 0.1145,
|
|
"wind": 0.0708,
|
|
"rain": 0.012,
|
|
"pwat": 0.1376,
|
|
"pressure": 0.0799
|
|
},
|
|
"n_samples": 1013,
|
|
"source": "pskr"
|
|
},
|
|
"902": {
|
|
"weights": {
|
|
"humidity": 0.2204,
|
|
"time_of_day": 0.0299,
|
|
"td_depression": 0.1764,
|
|
"refractivity": 0.0967,
|
|
"sky": 0.0734,
|
|
"season": 0.1089,
|
|
"wind": 0.0734,
|
|
"rain": 0.0125,
|
|
"pwat": 0.1273,
|
|
"pressure": 0.081
|
|
},
|
|
"n_samples": 1754,
|
|
"source": "contacts"
|
|
},
|
|
"1296": {
|
|
"weights": {
|
|
"humidity": 0.2259,
|
|
"time_of_day": 0.034,
|
|
"td_depression": 0.1528,
|
|
"refractivity": 0.1429,
|
|
"sky": 0.0753,
|
|
"season": 0.1015,
|
|
"wind": 0.0753,
|
|
"rain": 0.0128,
|
|
"pwat": 0.1327,
|
|
"pressure": 0.0468
|
|
},
|
|
"n_samples": 2951,
|
|
"source": "contacts"
|
|
},
|
|
"2304": {
|
|
"weights": {
|
|
"humidity": 0.1886,
|
|
"time_of_day": 0.0284,
|
|
"td_depression": 0.1503,
|
|
"refractivity": 0.1474,
|
|
"sky": 0.0629,
|
|
"season": 0.0848,
|
|
"wind": 0.0629,
|
|
"rain": 0.0338,
|
|
"pwat": 0.1714,
|
|
"pressure": 0.0695
|
|
},
|
|
"n_samples": 719,
|
|
"source": "contacts"
|
|
},
|
|
"3400": {
|
|
"weights": {
|
|
"humidity": 0.2001,
|
|
"time_of_day": 0.0301,
|
|
"td_depression": 0.1601,
|
|
"refractivity": 0.1102,
|
|
"sky": 0.0667,
|
|
"season": 0.0899,
|
|
"wind": 0.0667,
|
|
"rain": 0.0507,
|
|
"pwat": 0.1818,
|
|
"pressure": 0.0437
|
|
},
|
|
"n_samples": 335,
|
|
"source": "contacts"
|
|
},
|
|
"5760": {
|
|
"weights": {
|
|
"humidity": 0.1753,
|
|
"time_of_day": 0.0299,
|
|
"td_depression": 0.1589,
|
|
"refractivity": 0.0491,
|
|
"sky": 0.0661,
|
|
"season": 0.0892,
|
|
"wind": 0.0661,
|
|
"rain": 0.0796,
|
|
"pwat": 0.1708,
|
|
"pressure": 0.1151
|
|
},
|
|
"n_samples": 321,
|
|
"source": "contacts"
|
|
},
|
|
"10000": {
|
|
"weights": {
|
|
"humidity": 0.1262,
|
|
"time_of_day": 0.038,
|
|
"td_depression": 0.101,
|
|
"refractivity": 0.0986,
|
|
"sky": 0.0841,
|
|
"season": 0.1134,
|
|
"wind": 0.0841,
|
|
"rain": 0.1431,
|
|
"pwat": 0.1147,
|
|
"pressure": 0.0967
|
|
},
|
|
"n_samples": 54161,
|
|
"source": "contacts"
|
|
},
|
|
"24000": {
|
|
"weights": {
|
|
"humidity": 0.1483,
|
|
"time_of_day": 0.0402,
|
|
"td_depression": 0.1187,
|
|
"refractivity": 0.0517,
|
|
"sky": 0.0494,
|
|
"season": 0.0733,
|
|
"wind": 0.0494,
|
|
"rain": 0.2224,
|
|
"pwat": 0.1348,
|
|
"pressure": 0.112
|
|
},
|
|
"n_samples": 3808,
|
|
"source": "contacts"
|
|
},
|
|
"47000": {
|
|
"weights": {
|
|
"humidity": 0.1403,
|
|
"time_of_day": 0.0528,
|
|
"td_depression": 0.1123,
|
|
"refractivity": 0.0517,
|
|
"sky": 0.0468,
|
|
"season": 0.0757,
|
|
"wind": 0.0468,
|
|
"rain": 0.2387,
|
|
"pwat": 0.1275,
|
|
"pressure": 0.1075
|
|
},
|
|
"n_samples": 759,
|
|
"source": "contacts"
|
|
}
|
|
}
|
|
}
|