Commit 39acbbb
Add the static scorer, which answers only where the data can (M12, ADR-015)
Precomputes the flagship model's decision surface into results/scorer_grid.json;
the page picks a cell. No server, no inference at request time.
The naive version of this idea lies, and finding that out reshaped it. The raw
grid is 60% empty -- 258 of 432 iso x resource x service combos have zero
projects -- and the emptiest cells score HIGHEST. The first build gave
"ERCOT | Nuclear | Other | 5 MW" a 99.1% chance of being built off zero
projects: the model extrapolating a one-hot combination it never saw jointly.
Shipping that would be the shareable-but-fictional artifact ADR-013 refuses,
sitting on top of the repo whose whole pitch is refusing them.
So a cell carries a score only where the data supports one -- 957 of 6,480.
Extrapolation turned out to have two dimensions, and fixing one left the other:
with the categorical floor in place the model still answered "5 MW coal plant in
ERCOT" with 89.6%, when real ERCOT coal runs a 660 MW median and is 45.9% built.
It had learned "smaller completes more" and was asked about a size that does not
exist. Each combo now also carries the size range it actually spans (p5-p95), and
out-of-range sizes are unscored. The two rejections say different things -- "no
projects like this" vs "none this size; they run 17-885 MW" -- because the
difference is the interesting part.
Also fixed while building it:
- service NA became an explicit "Not specified" level. ERCOT and NYISO report
service for ZERO projects, so requiring a value silently dropped two whole ISOs
-- the same reporting-artifact trap as ADR-012's developer field.
- base rate was computed on all cohorts (11.2%) where the published figure is the
eval cohorts' (8.3%). Same statistic, different population: ADR-014 again. It
now reads the committed blob.
Honesty constraints, all tested: completion only (no P(withdraw) control ever --
AUC 0.58 is a coin flip dressed as a number); is_hybrid derived from the resource,
never picked (verified 100% agreement, 0 mismatches); congestion pinned at each
ISO's median and published; no aggregate over cells, since the grid is unweighted.
Gotcha worth the comment it got: p:null came from a pandas float column, which
stores None as NaN -- and json.dumps emits NaN, which is invalid JSON. The live
page died at parse time while all tests passed, because Python's json.loads
ACCEPTS NaN. Round-tripping cannot catch it; both writers now use allow_nan=False.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>1 parent 4b66315 commit 39acbbb
13 files changed
Lines changed: 624 additions & 4 deletions
File tree
- docs
- assets
- results
- src/gridqueue
- viz
- tests/viz
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
Loading
Loading
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
345 | 345 | | |
346 | 346 | | |
347 | 347 | | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
Large diffs are not rendered by default.
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
| 55 | + | |
| 56 | + | |
55 | 57 | | |
56 | 58 | | |
57 | 59 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
56 | 56 | | |
57 | 57 | | |
58 | 58 | | |
59 | | - | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
60 | 63 | | |
61 | 64 | | |
62 | 65 | | |
| |||
100 | 103 | | |
101 | 104 | | |
102 | 105 | | |
103 | | - | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
104 | 109 | | |
105 | 110 | | |
106 | 111 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
199 | 199 | | |
200 | 200 | | |
201 | 201 | | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
202 | 213 | | |
203 | 214 | | |
204 | 215 | | |
| |||
212 | 223 | | |
213 | 224 | | |
214 | 225 | | |
| 226 | + | |
215 | 227 | | |
216 | 228 | | |
217 | 229 | | |
| |||
0 commit comments