Methodology · New York StateLive v0.5.1
Updated 2026-06-11 21:06 UTC
Haamid Adam, Chartered Engineer and founder of Platt
Haamid Adam
CEng · Builder
Methodology of record · v0.5.1 · Updated 2026-06-11 21:06 UTC

Platt: New York Clean-Energy Site-Screening Methodology (v0.5.1)

This document describes the production scoring engine.


Executive summary

Platt fuses the public datasets that govern clean-energy siting in New York (utility hosting capacity, interconnection-queue pressure, parcel geometry, terrain, environmental constraints, and building footprints) into one database and computes a deterministic 0–100 screening score for every parcel in the state.

  • Live model: v0.5.1. It scores 2,046,724 parcels across ten counties (the five New York City boroughs plus Onondaga, Albany, Monroe, Erie, and Westchester).
  • What the number is. A relative suitability index that ranks parcels by interconnection and land conditions. It is not a probability (a 70 is not "70% likely") and not a validated predictor of which parcels will actually be built. Earlier documents and some persisted API fields call this number the "feasibility score"; that is legacy naming, retained for compatibility only. This document calls it a screening score throughout, because §2 and §6.3 establish that feasibility itself is not identifiable from the available data.
  • What we have shown. The screen is internally valid: its shortlist is robust to ±25% weight perturbation, and its ranking is driven by the physically meaningful inputs. These results need no outcome data and hold across the footprint; re-run and holding on the live v0.5.1 snapshot (§6.1).
  • What we have not shown. Against real build outcomes the model fails its pre-registered gate: within-county lift@50 = 1.156, 95% CI [0.836, 1.462]. The lower bound sits below parity (1.0), and the model loses to simple size baselines: its CI upper bound (1.462) sits below every size baseline's point estimate (building count 2.000, acreage 1.912, roof area 1.905). §2 explains why no model could currently clear that bar from New York's data.
  • Posture. A site screen. It loses to simple size baselines on raw outcome lift and sits at parity with random once demand is de-confounded (1.082 vs 1.038). The path to a calibrated predictive claim is the forward-accrual program in §6.3.

The rest of this document specifies the complete engine (every weight, threshold, and value function) and reports the validation results.

Product overview

The methodology below runs as a working product. The three screens are from the production build, captured 2026-06-11.

Figure 1 · The atlas: county score surface
Platt atlas screenshot: an Onondaga County street-level map with parcel footprints shaded by screening score, a substation marker, a score legend, and a ranked parcel table beside the map
The production atlas over Onondaga County at street zoom: parcel footprints are shaded by screening score, the substation marker comes from the same hosting-capacity record the score reads, and the table beside the map ranks the same parcels by score.
Figure 2 · The parcel page: score path and gate
Platt parcel page screenshot: a rooftop parcel scoring 100 with high confidence, showing the score path, the eligibility-gate verdict, and the parcel location map
A parcel page for a 2.1-acre Onondaga rooftop site: the score path panel carries the value arithmetic, the gate panel states why the parcel passed and why ground-mount is ineligible at this acreage, and the headline score sits beside the confidence tier and the screening disclaimer.
Figure 3 · The diligence report: cited evidence
Platt diligence report screenshot: a generated report with summary, site, grid position, interconnection history, and cost evidence sections, each sentence carrying inline citations
The generated diligence report for a Salina warehouse parcel: every claim about the site, its grid position, the feeder's interconnection history, and the cost evidence carries an inline citation back to a named source.

1. What Platt is, and the problem it solves

Siting a distribution-scale clean-energy project in New York (community solar, battery storage, or solar-plus-storage) is slow, expensive, and data-fragmented. A developer's first question for any parcel is is this worth pursuing?, and answering it means assembling facts that no single public source holds: how much distribution hosting capacity the nearest usable feeder has, how far that feeder is, how congested its interconnection queue is, whether the parcel sits in a Con Edison secondary-network area where customer-sited export is constrained by default, how steep the land is, how much of it survives wetlands and floodplain, and how large a usable rooftop it carries. Those facts live across six investor-owned utilities, several state and federal regulators, and dozens of GIS layers that share no keys, units, or refresh cadences. Done by hand, one parcel at a time, this is days to weeks of GIS work.

Platt does it once, for the whole state. We fuse these public datasets into a single geospatial database and compute a deterministic 0–100 screening score for every parcel: today 2,046,724 parcels across ten counties, the five New York City boroughs (Bronx, Kings, New York, Queens, Richmond) plus Onondaga, Albany, Monroe, Erie, and Westchester. A developer shortlists viable sites in seconds instead of weeks; a lender gets an auditable, source-cited screen for diligence. Every score row carries its exact inputs, with citations for the parcel, environmental-flag, substation, and hosting-capacity sources (§5), and the score is fully reproducible: re-running the engine on the same data snapshot returns the same number, to the decimal.

The score is a screen. §2 defines what it measures and its limits.

2. What the score measures

The 0–100 score is a deterministic site screen: a relative suitability index that ranks parcels by interconnection and land conditions for a distribution-scale solar project. It is not a probability. A 70 does not mean "70% likely to be built" or "70% likely to be feasible." It means the parcel ranks above one scoring 60 on the modeled suitability dimensions, under the weights and value functions documented in §3. The framing is borrowed from presence-only species-distribution modeling, where a model yields a relative suitability surface and the absolute prevalence is, by construction, not recoverable from the data.

The live model, v0.5.1, ships labeled improved, not-yet-validated interim. It is a measured improvement over its predecessors and passes the internal-validity tests of §6.1 (re-run on the v0.5.1 snapshot), but it has not been shown to predict real build outcomes. The reason is structural, and it shapes every design choice that follows.

Why feasibility is not identifiable from "where solar got built." The only positive examples available are completed community-distributed-generation installs (call them CDG installs). This is a presence-only record (we observe successes, never a labeled set of true negatives), and it carries two structural problems:

  1. A survivorship and demand confound. A completed install reflects, roughly, P(build) ≈ feasibility × developer demand × market access × timing, not feasibility alone. "Where solar got built" therefore encodes where developers chose to build and succeeded, which is driven heavily by demand and market access. Feasibility and demand are not separately identifiable from successes alone.
  2. A selection (collider) problem. The natural way to obtain negatives is to look at projects that applied to interconnect but did not energize. But application is itself a choice that sits downstream of both feasibility and demand. Conditioning on it does not close the confound; it opens a spurious feasibility–demand association (a Berkson-type selection effect). That induced association is plausibly negative, so it biases an outcome test against the model. But the population question "is this site feasible?" is not recoverable from applicant-conditioned, positives-only data.

When we de-confound for demand using a target-group-background design (we compare installs not against all land but against a background of plausible candidate parcels, here parcels with a usable roof ≥ 200 m², so that "demand lives where buildings are" is differenced out), the screen performs at parity with random (model within-county lift ≈ 1.082; random ≈ 1.038), and on the raw outcome test it loses to simple size baselines (§6.2). Platt is a site screen, not a validated predictor.

Figure 4 · What a score means: relative suitability bands
0501000–29Avoid30–49Poor50–69Marginal70–84Strong85+Excellent
The 0–100 output is a RELATIVE ranking, not a probability: a parcel at 78 ranks above one at 62, but neither number is a likelihood of being built. These bands are reading aids for the index, not calibrated outcome rates.
Figure 5 · Why feasibility is not identifiable from “where solar got built”
FEASIBILITYwhat we modelDEVELOPER DEMANDwhere firms builtMARKET ACCESS& timing××COMPLETED INSTALLthe only thing we observe · presence-onlyP(build) ≈ feasibility × demand × access (not separable)
A completed install reflects feasibility × developer demand × market access jointly, and we observe only the successes: a presence-only record with no labeled negatives. So a density test of installs rewards whatever drives demand (parcel size, urban access), not feasibility, and the model honestly sits at parity with those size proxies (§6.2). Drawing negatives from interconnection applicants does not help: application is a collider downstream of both feasibility and demand, so conditioning on it opens a spurious path (Berkson) rather than closing the confound.

Modeling approach: why there is no trained model

Platt is a deterministic weighted-and-gated screen, not a fitted machine-learning model. We did not train a classifier on "where solar got built," and we did not fit a probability calibration. Two reasons, in order of importance:

  1. Identifiability. As above, the only labels available are presence-only, applicant- conditioned, and demand-confounded. A model trained on them would learn where developers chose to build (demand and market access), not feasibility. Model capacity does not repair a label that fails to identify the target: a flexible learner would encode the confound in its output. We do not fit to those labels until cleaner ones exist.
  2. Auditability. Year-two users are project-finance lenders and underwriters. Lenders can audit a screen whose every weight, threshold, and value function is inspectable and reproducible. They cannot audit a black-box probability. The screen also fails safe: a missing input resolves to a neutral discount of 1.0.

Calibration is deferred and gated. Once the forward-accrual program (§6.3) yields a point-in-time, less-confounded outcome set over an expanded footprint, the next step is to fit a monotone calibration from the score to an empirical energization rate: beta or Platt scaling while the resolved set is small, and isotonic regression once it is not (§6.3). Only then does the output become a calibrated probability rather than a relative index, and only if the identification assumptions hold.

3. The four-stage model, in full detail

The model is gated additive-multiplicative: a hard eligibility gate (Stage 0) is checked before any score is computed, a weighted additive core then scores the surviving parcels, and every cost or friction is applied as a multiplicative discount, never a subtraction. A constraint can dampen a score, but a high score can never "pay it back." On the live population the Stage-0 gate currently excludes 0 of 2,046,724 parcels (see the note in Stage 0), so today the gating is carried in practice by the multiplicative discounts. This architecture is the central correction over the original additive model (§8).

Two project archetypes are scored for every parcel: ground_mount and rooftop. The headline score is that of the first eligible archetype in preference order, ground-mount first, then rooftop, and not the higher-scoring of the two. The archetypes renormalize different weight vectors onto non-comparable scales (rooftop weights three inputs, ground-mount four), so taking the maximum would let a renormalized rooftop score spuriously out-rank a ground- mount composite on a large rural parcel that is in fact a ground-mount site. Both full breakdowns are always retained alongside the headline. If neither archetype is eligible, the parcel failed a shared hard gate, and the headline row reports the rooftop result's exclusion reason.

Figure 6 · The four-stage non-compensatory pipeline
00GATE
Eligibility gate
Exclude with a stated reason
01SCORE
Graded suitability
(Σ wᵢ·vᵢ)·Π dⱼ
02SIGNALS
Economic & interconnection
Surfaced alongside
03CONFIDENCE
Confidence label
high / medium / low
Hard disqualifiers fire in Stage 0 before any score; survivors are graded multiplicatively in Stage 1; Stages 2\u20133 surface economic signals and a data-quality confidence label.

Stage 0: Eligibility gate (hard exclusions)

The gate returns (eligible, exclusion_reason, flags). A disqualified parcel is excluded with a stated reason, never assigned a small positive score. The gates fire in order; thresholds are exact and apply to both archetypes unless noted. (On the current live population these gates exclude 0 of 2,046,724 parcels; see the note below.)

# Condition Exclusion reason Applies to Rationale
1 available_hc_mw is null or ≤ 0 no_hosting_capacity both A parcel whose nearest usable feeder has no PV hosting capacity cannot interconnect.
2 dist_to_feeder_m is null or > 15,000 m no_hosting_capacity_within_range both The nearest-feeder join has no distance cap, so it always finds some feeder with PV > 0. Beyond 15 km that feeder is effectively unreachable; we exclude rather than credit headroom the parcel cannot reach.
3 in_critical_habitat is true critical_habitat both Federal designated critical habitat is a hard exclusion.
4 slope_mean_pct is not null and ≥ 15.0% slope ground-mount only 15% is the permissive edge of the developer range (grade-cost onset is ~5–10%; 15% is a common special-permit trigger in model solar zoning). A hard cut atop the graded slope penalty.
5 net_buildable_acres is null or < 8.0 acres below_min_viable_ground_mount ground-mount only 8 net acres is about 1 MW-AC at the NREL land-use benchmark (roughly 7 to 8 ac/MW-AC), near the minimum-viable ground-mount project size.

The 15 km eligibility cap is generous, and it diverges from the grid- proximity value function, which already decays to zero by 5 km (§3.1). A parcel 5–15 km from its feeder is therefore scored low, not hard-excluded: it could in principle justify a costly line extension, and a hard cut there would be a false negative.

A non-gating flag, coned_network_export_constrained, is appended (not excluded) for any parcel whose centroid falls inside a Con Edison secondary-network area; the export economics are priced as a discount in Stage 1 rather than as a gate.

net_buildable_acres computation. Net buildable acres derives from total parcel acres, the wetland/floodplain coverage, the critical-habitat flag, and slope:

if total_acres is null or ≤ 0:           net_buildable_acres = null
elif in_critical_habitat:                net_buildable_acres = 0.0
else:
    remainder = total_acres × (1 − clamp01((wetlands_pct + floodplain_pct) / 100))
    if slope_mean_pct ≥ 15.0:            remainder = remainder × 0.5     # slope-halving
    net_buildable_acres = max(0, remainder)

The slope-halving uses the mean parcel slope ≥ 15%; because slope is also its own graded scoring component, this halving (rather than a hard zero) avoids double-penalizing the same constraint.

A note on what the gate currently does. On the live population the gate is non-binding: it excludes 0 of 2,046,724 parcels and 0 of 500 known install-parcels. Its categories are mechanism-correct, but its real-world safety is therefore untested by present data. See §7.

Stage 1: Graded suitability (the core formula)

For a surviving parcel, the suitability of an archetype is the weighted sum of value functions, multiplied by the product of discounts, clamped to [0, 1] and scaled to [0, 100]:

suitability = clamp01( ( Σᵢ weightᵢ · valueᵢ )  ·  Πⱼ discountⱼ )
score       = round( suitability × 100.0 , 1 )

A missing discount input resolves to 1.0, the multiplicative neutral.

3.1 Weights (each archetype's weights sum to 1.0)

Input Ground-mount weight Rooftop weight
Hosting-capacity headroom (v_hc_headroom) 0.40 0.40
Grid proximity (v_grid_proximity) 0.30 0.30
Buildable area (v_buildable) 0.20 n/a
Roof area, usable (v_roof_area) n/a 0.30
Slope / terrain (v_slope) 0.10 n/a

The weights encode one domain principle: for distribution-scale solar, grid access dominates land. Hosting-capacity headroom and grid proximity together carry 0.70 of the weight in both archetypes. Rooftop has no terrain or buildable-land term; the 0.30 that ground-mount splits across buildable (0.20) and slope (0.10) is repurposed entirely to usable roof area (0.30). The weights are engineering judgments, not empirically calibrated; §6.1 reports the test showing the ranking is robust to them.

Figure 7 · Input weights by archetype
0.000.100.200.300.40GROUND-MOUNThosting-capacity headroom0.40grid proximity0.30buildable area0.20slope / terrain0.10Σ 1.00ROOFTOPhosting-capacity headroom0.40grid proximity0.30usable roof area0.30Σ 1.00
Grid access dominates land: hosting-capacity headroom + grid proximity carry 0.70 in both archetypes. Rooftop repurposes ground-mount’s buildable + slope share entirely to usable roof area. Weights are uncalibrated engineering judgments.

3.2 Value functions vᵢ : input → [0, 1]

Every value function is a continuous, monotone, saturating piecewise-linear interpolation over a fixed set of anchor points: below the first anchor the value equals the first anchor's y; above the last it equals the last anchor's y; in between it is linear. There are no step-band discontinuities. Anchors are stated as (input, value) pairs.

v_hc_headroom: available hosting capacity in MW. Null or ≤ 0 → 0.0.

MW headroom 0.0 1.0 3.0 5.0
value 0.00 0.40 0.75 1.00

The value saturates at 5 MW because 5 MW-AC is the distribution-level interconnection ceiling for this project class under New York's Standardized Interconnection Requirements (effective August 1, 2025). A CDG project cannot exceed it, so headroom beyond 5 MW carries zero marginal value. This is a regulatory ceiling, not a grid-physics one.

v_grid_proximity: straight-line distance from the parcel centroid to the nearest usable feeder line, in metres. Null → 0.0.

metres 0 250 750 1,500 3,000 5,000
value 1.00 0.95 0.80 0.45 0.10 0.00

The curve decays to ~0 by 3 km and fully to 0 by 5 km, anchored to interconnection-cost economics rather than raw distance: a sub-5 MW CDG project can typically justify a line extension of ~1–3 km; beyond ~3 km the upgrade cost is usually fatal. The applicant bears that cost, and no rule caps an individual applicant's share. Two points of precision (critique C5): the cost-sharing mechanism the PSC adopted on April 14, 2022 caps a utility's unrecovered upgrade costs at 2% of its distribution and sub-transmission capital investment budget per fiscal year, which protects the utility's other customers rather than the applicant; and NYSEIA's Cost-Sharing 2.0 petition (Case 24-E-0621, open as of June 2026, comments through May 2026) seeks a cap at 115% of the CESIR estimate, binding for 36 months. An adopted cap would shift the cost distribution that any future cost model trains on (§6.3).

Con Edison secondary-network override. Inside a Con Edison secondary-network area, grid proximity is not computed from feeder distance; it is set to a fixed PROX_NETWORK_DEFAULT = 0.95. The published radial-feeder layer barely maps the dense network core, so the measured distance to the nearest mapped radial feeder there is a coverage artifact (a network-core parcel can be kilometres from a mapped radial even though the grid runs under the street). 0.95 represents excellent-but-not-perfect access. The export economics of network areas are priced separately as a discount (§3.3), so this is not double-counting, and the engine logs which path fired (network-default vs. distance-based) on every parcel.

v_roof_area: usable roof area, in m², of the parcel's single largest building (building footprint × a usable-area derate: 0.60 for flat commercial roofs, 0.25 for pitched residential). A 10 m² minimum footprint applies at ingest to the Microsoft (upstate) source only; NYC Open Data footprints carry no minimum. Null or ≤ 0 → 0.0. Rooftop only. The derate is currently selected from the parcel's property class (NY class code beginning "2" → residential 0.25; otherwise 0.60) and applied to the largest building, rather than from each building's own roof geometry, a proxy that mis-derates genuinely mixed-use lots (§7).

usable m² 0 200 500 1,000 2,500 5,000
value 0.00 0.30 0.55 0.75 0.92 1.00

The curve is monotone and saturating, not linear; a linear map would merely reproduce the raw-area baseline. As a rule of thumb: ~200 m² ≈ a 25 kW system → 0.30; ~1,000 m² ≈ 125 kW → 0.75; ~5,000 m² and up is MW-scale → 1.00 (at roughly 8 m²/kW of usable roof).

v_buildable: net buildable acres (from Stage 0). Not ground-mount, or null → 0.0. Ground-mount only.

net acres 0 8 25 40
value 0.00 0.25 0.70 1.00

The 8-acre and 40-acre anchors are set from the NREL land-use benchmark for utility-scale PV, roughly 7 to 8 acres per MW-AC (Ong et al. 2013, NREL/TP-6A20-56290), which places 8 acres near a 1 MW-AC minimum-viable project and 40 acres near a 5 MW-AC system. They are not drawn from the Model Solar Energy Local Law, which defines its tiers by capacity and on-site consumption and contains no capacity-to-acreage ratio. The 25-acre mid-tier is a derived interpolation point, about 3 MW-AC at the same benchmark, and carries no external citation.

v_slope: mean parcel slope in percent. Null → 0.5 (neutral). Ground-mount only.

slope % 0 5 10 15
value 1.00 0.85 0.55 0.00

Slope ≥ 15% is also a hard gate (Stage 0 #4), so the graded penalty operates on the 0–15% band and reaches 0 exactly at the gate threshold. The null default is 0.5 (neutral) rather than the 0.0 used for v_buildable/v_roof_area: a missing roof or missing parcel area is genuine evidence of absence (no roof, no land), whereas a missing slope reading is genuine ignorance about a terrain that is, on the New York parcels we score, usually mild. The default is neutral. Because slope is near-dead-weight on the current population (§6.1), this choice barely moves the ranking either way.

Figure 8 · Value functions vᵢ : input → [0,1]
0.51.0HOSTING CAP.0–5 MW0.51.0GRID PROX.0–5000 m0.51.0ROOF AREA0–5000 m²0.51.0BUILDABLE0–40 ac0.51.0SLOPE0–15 %
Each input maps through a continuous, monotone, saturating piecewise-linear curve over fixed regulatory/economic anchor points. No step discontinuities.

3.3 Discounts dⱼ : input → (0, 1] (multiplicative friction)

The four discounts apply multiplicatively, in the order [farmland, flood/wetland, queue, ConEd- network]. Each is a friction in (0, 1]; a missing input resolves to 1.0. None is a hard gate.

Discount Formula Magnitude Notes
discount_farmland 1.0 − 0.15 × clamp01(prime_farmland_pct / 100) 0.15 Prime/statewide-important farmland triggers a state notice-of-intent and mitigation-payment process, not a permit block, so this is a mild discount, not a gate. Null → 1.0.
discount_flood_wetland rooftop: 1.0 − 0.30 × clamp01((floodplain_pct + wetlands_pct) / 100); ground-mount: 1.0 0.30 (rooftop only) Archetype-aware.1 Ground-mount is neutral here because the usable-area loss is already owned by net buildable acres (§3.1); applying it twice would double-count the same geography. Rooftop has no buildable-area term, so this is its sole flood/wetland channel. Null coverage → 0%.
discount_queue 1.0 − 0.60 × clamp01(queue_saturation) 0.60 queue_saturation = queued_mw / available_hc_mw. Published hosting capacity is headroom before queued DG, so a feeder with a large queue relative to its headroom is heavily discounted. Null → 1.0.
discount_coned_network constant by archetype ground-mount 0.15; rooftop 0.85 Con Edison area networks are no-export by default. For ground-mount (always export-scale community solar) this is a near-gate (0.15); for rooftop it is softer (0.85), reflecting that small net-metered systems are only lightly constrained while > 50 kW-AC export systems bind. Not in a network → 1.0.

One input-join detail on discount_queue: 1,328 of 4,766 feeders (28%) publish no queued-DG figure, and the live input join coalesces that absence to a saturation of 0 rather than null. The discount is identical either way (1.0), but the displayed queue_saturation does not distinguish an empty queue from unpublished queue data.

With the Stage-0 gate currently non-binding, the multiplicative structure carries the gating in practice: a severe discount dominates the additive core no matter how strong that core is. A ground-mount parcel with every value function at 1.0 (Σ wᵢ vᵢ = 1.0) that sits inside a Con Edison network area scores 1.0 × 0.15 = 0.15 → 15, regardless of how strong its grid and land are: the no-export constraint dominates.

Figure 9 · Multiplicative friction discounts dⱼ
0.00.51.00.850100%
FARMLAND
d = 1 − 0.15·pct
0.00.51.00.700100%
FLOOD + WETLAND
rooftop · 1−0.30·pct
0.00.51.00.4001.0
QUEUE SAT.
d = 1 − 0.60·sat
CONED-NETWORK · CONSTANT dⱼ
not in network1.00in network · rooftop0.85in network · ground-mount0.15
missing input → 1.00 · dashed cap = no friction (1.0)
Friction multiplies, never subtracts; a missing input resolves to 1.0. Flood/wetland is a rooftop-only discount. For ground-mount the same coverage is counted once, via the net-buildable-acres reduction (DL-020), so it is neutral here. The ConEd-network discount is a near-gate for export-scale ground-mount (0.15) and soft for rooftop (0.85).
Figure 10 · How friction compounds: the multiplicative discount cascade
0255075100100Σ wᵢ·vᵢ-10.0farmland×0.90-13.5flood/wet×0.85-22.9queue×0.70-8.1network×0.8545.5score
A worked rooftop parcel begins with a perfect value-sum (100) and loses a compounding share to each friction: prime farmland (×0.90), flood/wetland (×0.85), a saturated interconnection queue (×0.70), and a ConEd-network export limit (×0.85). It lands at a score of 45.5. Because the discounts multiply rather than subtract, no single strength can pay a constraint back, and a fatal one (ground-mount in a network area, ×0.15) collapses the score on its own.

Stage 2: Economic & interconnection-risk signals (pass-through)

Stage 2 surfaces economic and interconnection-risk signals alongside the score (for ranking and diligence) rather than folding them into the single number, because they live on scales not commensurable with a 0–1 suitability. Two signal fields ride on every score row. queue_saturation also drives discount_queue in Stage 1, so it is a real scored input as well as a displayed metric; in the live join, a feeder with no published queued-DG figure surfaces as saturation 0 (§3.3). Value-stack eligibility (VDER/LSRV: New York's Value of Distributed Energy Resources tariff and its Locational System Relief Value adder) is currently unpopulated: the field exists in the schema and the API but is false for every parcel, pending an LSRV-area ingest.

A size-aware interconnection-risk band is also implemented, as a coarse size-only first cut.2 It maps a parcel's buildable capacity (ground-mount ≈ net buildable acres ÷ ~8 ac/MW-AC; rooftop ≈ usable roof area ÷ ~8 m²/kW) onto three bands: low below 300 kW-AC, moderate from 300 to 500 kW-AC, and high at or above 500 kW-AC. These breakpoints predate the verified mapping of New York's SIR review tracks (50 kW-AC or less, the simplified process; above 50 up to 300 kW-AC, the expedited path with a UL 1741 supplement SA inverter; above that toward the 5 MW-AC ceiling, full review with a Coordinated Electric System Interconnection Review (CESIR) likely)3 and diverge from the regulatory bright lines at 50 and 300 kW-AC; a code fix is queued for the next re-score. Unknown size → null, never a favorable default. A parcel has no intrinsic project size, so the band is a proxy. The optional enrichment with feeder-level CESIR study-cost percentiles depends on further data ingest (§7).

Stage 3: Confidence / data readiness (high / medium / low)

This label is a data-readiness (fitness-for-use) rating, not a probability: it reports whether a parcel's inputs are fresh, complete, and in-scope. It is not calibrated to any outcome and is not a measure of site quality (a low-scoring parcel can be high-readiness, and vice versa), and it is kept orthogonal to the 0–100 score, never multiplied into it.4 It is gated purely on data quality, using these thresholds:

Threshold Value Meaning
_HC_FRESH_DAYS 220 days ≈ 7 months, within the semi-annual hosting-capacity refresh cycle.
_HC_STALE_DAYS 400 days > ~13 months: the feeder has missed a refresh.
_CLOSE_FEEDER_M 2,000 m A confidently close, well-mapped feeder.
_FAR_FEEDER_M 10,000 m A feeder far enough that the linkage is doubtful.

Rules. Return low if any of: available_hc_mw, dist_to_feeder_m, or total_acres is null; the parcel is in a Con Edison network area (network hosting capacity is per-area, not feeder- accurate); the hosting-capacity age exceeds 400 days; or the feeder distance exceeds 10,000 m. Otherwise return high only if all of: the hosting capacity is fresh (≤ 220 days) and the feeder is close (≤ 2,000 m) and slope is present. Anything else is medium.

On the live snapshot the three tiers are approximately 61% high, 3% medium, and 36% low (they sum to 100%). The large high share is up from 497,929 parcels (≈ 24%) under the prior v0.4.0 rule, not because parcels became more suitable, but as a definitional change: the prior rule capped otherwise-ready parcels at medium whenever their feeder was not reconciled to a canonical substation, a linkage the score never uses.5 Removing that requirement reveals that most parcels have fresh, complete, in-scope inputs. The 36% low tier is driven by Con Edison network membership (per-area hosting capacity), null inputs, and stale hosting-capacity dates. The 220-day and 2-km breakpoints are not tuned to rebalance the tier distribution.6 The thin medium band (≈ 3%) is the near-binary in-between; a queued per-flag panel will surface which gate is borderline rather than collapse it to one word.

4. The two archetypes, and when each applies

Both archetypes are scored for every parcel; the headline is the first eligible one in the order ground-mount → rooftop.

  • Ground-mount is the primary land use: utility/community-scale and land-driven. It uses all four ground-mount inputs (hosting-capacity headroom, grid proximity, buildable area, slope) and is subject to the extra Stage-0 gates (slope ≥ 15% and net buildable < 8 ac). A parcel that clears the buildable-area floor is reported as ground-mount.
  • Rooftop is the community-DG fallback: roof-driven, for parcels too small for ground-mount. It drops slope and buildable land entirely (terrain is irrelevant to a roof) and adds usable roof area. It has no acreage floor, which keeps dense urban parcels (most of New York City) in scope: a small Manhattan lot with a large flat commercial roof can be a strong rooftop site even though it could never host a ground array.

Why first-eligible and not higher score: the two archetypes renormalize different weight vectors onto non-comparable scales, so a rooftop's roof-area term can numerically out-rank a ground-mount composite on a large rural parcel that is, in reality, a ground-mount site. Preferring the first eligible archetype encodes the real-world precedence (if a parcel can host ground-mount, that is the project) and avoids a scale artifact. Because rooftop has no buildable-area gate, the vast majority of parcels in the dense-urban counties surface as rooftop headlines, which makes the overall ranking substantially a usable-roof-size ranking modulated by grid capacity (quantified in §6.1).

5. Data and provenance

Each score row cites its parcel, environmental-flag, substation, and hosting-capacity provenance; the remaining inputs (roof, network membership, slope, and the individual environmental layers) are documented at the dataset level here, and a per-county sources endpoint serves the full inventory. The table enumerates the datasets, what each provides, and its refresh cadence. Hosting capacity is assembled from all six New York investor-owned utilities into a single per-feeder layer of 4,766 feeders.

Dataset Source What it provides Cadence
Hosting capacity (6 IOUs) National Grid, Con Edison/CECONY, NYSEG, RG&E, Central Hudson, Orange & Rockland published HC layers Per-feeder available PV hosting capacity (MW), queued DG (MW), feeder geometry, utility-named substation, HC refresh date PV/storage HC semi-annual (≈ April / October); queued-DG monthly where published. Per-feeder as-of dates vary within and across utilities (the live layer spans 2025-04 to 2026-06); Stage 3 prices that staleness per parcel
Substations National electric-substation point layer (ORNL/HIFLD) Canonical substation identity, geometry, operator, max voltage, line count Periodic (infrequent national refresh)
Interconnection queue NY DPS Standardized Interconnection Requirements (SIR) monthly inventory: all six IOUs fully (NYSEG and RG&E publish a joint file), plus PSEG Long Island partially (energized Y/N only; no withdrawn status) Per-application status (energized / active / withdrawn), estimated upgrade (CESIR) cost, technology, developer identity (5 of 6 utilities; National Grid redacts it), milestone dates Monthly (publisher cadence); the live ingested snapshot is as-of 2026-03 (PSEG-LI 2025-12)
Parcels NY statewide tax-parcel service (county-direct for Monroe) Geometry, total acres, property class, assessed value, owner/address, roll-year vintage Per refresh
Slope USGS 3DEP 1/3 arc-second DEM Per-parcel mean slope (%), derived; the DEM itself is never stored Per refresh (DEM updates infrequently)
Wetlands USFWS National Wetlands Inventory (USGS-WIM service) Per-parcel wetland coverage (%) Per refresh
Floodplain FEMA National Flood Hazard Layer (regulatory Special Flood Hazard Area) Per-parcel 100-year floodplain coverage (%) Per refresh
Critical habitat USFWS designated critical habitat Per-parcel critical-habitat intersection (boolean) Per refresh
Prime farmland USDA NRCS Soil Data Access (SSURGO) Per-parcel prime-farmland coverage (%) Per refresh
Network areas Con Edison secondary/area-network polygons Network-export-constraint membership flag Per refresh
Buildings / roof NYC Open Data Building Footprints (five boroughs); Microsoft US Building Footprints (upstate counties). FEMA USA Structures is specified as a gap-fill source but not yet ingested Per-parcel usable roof area (m²), building count, largest-building footprint Per refresh
Calibration positives / developer identity NYSERDA CDG dataset (Complete + Pipeline rows; the contractor column carries developer identity) Energized community-solar installs spatially joined to parcels for validation; also the only public source naming developers in National Grid territory Source refreshes monthly; archived monthly by cron to dated snapshots

Five provenance details materially affect interpretation:

  1. Hosting-capacity semantics. Published HC is headroom after connected DG but before queued DG. The per-feeder PV value we use (the maximum nodal HC on the feeder) therefore overstates immediately connectable capacity, which is why discount_queue exists. The queued-DG figure that feeds the discount comes from the utilities' HC layers, not from the SIR inventory; the SIR inventory is the outcome and archival substrate (§6.3).
  2. Feeder selection at score time. A parcel is matched to the nearest feeder line with PV > 0 (including feeders not reconciled to a canonical substation) via a planar nearest- neighbour search re-ranked by true geographic distance. We do not use the reconciled substation point for proximity; doing so once wrongly excluded a parcel 0.47 km from its feeder because that feeder's substation was 16 km away.7
  3. Environmental coverage is now statewide-within-footprint. In the live v0.5.1 model the environmental layers (wetlands, floodplain, critical habitat, prime farmland) are populated across all ten scored counties, a correction over v0.5.0, in which they were ingested only over a three-county bounding box and defaulted to neutral elsewhere.8 The wetland source was re-ingested from the authoritative USGS-WIM National Wetlands Inventory service, with the per- parcel overlaps independently verified (§8). Two caveats remain and are stated in §7: prime farmland was re-ingested footprint-wide but has not been independently ground-truthed, and there is no parcel-footprint (setback / internal-road) subtraction beyond the environmental overlap.
  4. Roof-join coverage. 1,795,203 of 2,046,724 parcels (87.7%) carry a parcels_roof row; the remainder have no joined building footprint and score zero usable roof area on the rooftop archetype's dominant input.
  5. Monthly archival snapshots. Point-in-time snapshots of the SIR queue (5th of each month), all six hosting-capacity layers (6th), and the NYSERDA CDG dataset (8th) are archived monthly by scheduled jobs into dated tables. The published HC and SIR state is not reconstructable retroactively, and the archive begins June 2026; §6.3's temporal-validation panel depends on this cadence.

6. Validation program and results

The validation gate is pre-registered. Validation splits into two families: internal-validity legs that need no outcome data (and are therefore independent of the 10-county footprint), and outcome-validation legs that test the score against real build outcomes (and are fundamentally limited by the presence-only problem of §2).

Current validation status

Leg Substrate Status
Internal validity (rank stability, ablation) v0.5.1 snapshot Pass; re-run 2026-06-09 (§6.1)
Outcome gate (within-county lift@50) v0.5.1 live FAIL: 1.156, 95% CI [0.836, 1.462]; loses to size baselines (§6.2)
TGB demand-de-confounded read v0.4.0, post-hoc Parity with random (1.082 vs 1.038); exploratory (§6.2)
CESIR cost corroboration Complete-case SIR Directionally supportive ($281 vs $112/kW); null under hostile imputation (§6.2)
Conditional-energization gate SIR queue Pre-registered, DRAFT, no-peek rule in force (§6.3)9

6.1 Internal validity: what we have shown

These legs touch no outcome data; they ask only whether the ranking is well-behaved. Both legs were re-run on the live v0.5.1 snapshot (feasibility_scores_v2026_06_06, 2026-06-09), frozen in metrics_rank_stability_v0_5_1.json / metrics_ablation_v0_5_1.json; the v0.4.0 runs remain frozen alongside and read the same way.

Leg 1: Rank-stability under weight perturbation. We re-score all eligible parcels from their stored value functions and discount product, perturbing every Stage-1 weight by × (1 ± φ) with φ = 0.25 (±25%), renormalizing to sum 1, across 500 seeded Monte-Carlo draws, and measure the retention of the published top-k shortlist (the fraction of the nominal top-k still present in the perturbed top-k). The recompute-vs-stored sanity check correlated 1.000. Results (n = 2,046,724 parcels; 500 draws; φ = 0.25):

Shortlist k Retention (median) [p5, p95]
Top 0.1% 2,046 0.949 [0.887, 0.987]
Top 1% 20,467 0.937 [0.848, 0.976]
Top 5% 102,336 0.951 [0.860, 0.986]
Top 500 (fixed) 500 0.988 [0.506, 0.998]

The screening shortlist (top 0.1–5%) retains ~94–95% of its members under ±25% weight perturbation, so the exact weight values are not load-bearing. One nuance: the literal top-500 ordering has a wide tail (median 0.988, fifth percentile 0.506) because many rooftop parcels cluster at the score ceiling (v_grid_proximity = 0.95, v_hc_headroom = 1.0) and reshuffle under perturbation. The operative robust unit is the top 1–5%, not the exact tip. This leg perturbs weights only; perturbing value- function anchors and discount magnitudes is a documented follow-up.

Leg 2: Component ablation. We zero each Stage-1 input's weight in turn, renormalize the survivors, re-score, and measure churn = 1 − Jaccard(nominal top-k, ablated top-k). High churn means the input drives the ranking; near-zero means it is near-dead-weight on current data. Sorted by top-1% churn (n = 2,046,724):

Archetype · input Top-1% churn Top-5% churn Reading
rooftop · roof_area 0.949 0.642 Dominant driver of the rooftop-heavy shortlist.
rooftop · hc_headroom 0.260 0.464 Strong secondary.
ground_mount · buildable 0.217 0.018 Moderate.
ground_mount · hc_headroom 0.201 0.057 Moderate.
ground_mount · grid_proximity 0.161 0.031 Moderate.
rooftop · grid_proximity 0.153 0.235 Muted; see below.
ground_mount · slope 0.046 0.006 Near-dead-weight on the current population.

The rooftop ranking is substantially a usable-roof-size ranking modulated by grid capacity. Rooftop grid-proximity is muted because the Con Edison network override flattens proximity for the many NYC network-area parcels. Slope is near- dead-weight on the current low-weight, ground-mount-only population, but it is kept because it is mechanism-correct; our policy is to cut a component only if it is structurally inert, not merely data-limited.

Neither leg touches outcome data, so both results are independent of the ten-county footprint. Shortlist robustness to weights does not extend to input-data corrections: the v0.5.1 environmental re-ingest retained only 6 of 50 of the prior ground-mount top-50 (§8),8 because the ground-mount ranking keys on the buildable-area term. The binding sensitivity is data provenance, not weight tuning.

Figure 11 · Internal validity 1: rank-stability under ±25% weight perturbation
0.000.250.500.751.00Top 0.1%k=2,0460.949 [0.89, 0.99]Top 1%k=20,4670.937 [0.85, 0.98]Top 5%k=102,3360.951 [0.86, 0.99]Top 500fixed0.988 [0.51, 1.00]JACCARD OVERLAP · 500 SEEDED DRAWS
Across 500 seeded draws, the top 0.1–5% shortlist retains ~94–95% of its members under ±25% weight perturbation, so the exact weight values are not load-bearing. The literal top-500 tip is noisier.
Figure 12 · Internal validity 2: ablation (leave-one-out top-k churn = 1 − Jaccard)
0.000.250.500.751.00HIGHER CHURN = MORE LOAD-BEARINGtop 1%top 5%roof_arearooftop0.9490.703hc_headroomrooftop0.2580.422buildableGM0.2170.019hc_headroomGM0.2140.058grid_proxGM0.1680.033grid_proxrooftop0.1600.218slopeGM0.0650.008
Higher churn = the input drives the ranking. The rooftop shortlist is a usable-roof-size ranking modulated by grid capacity, exactly as designed; slope is near-dead-weight on the current population but kept as mechanism-correct.

6.2 Outcome validation: results

We tested the score against the 500 distinct parcels carrying a completed NYSERDA CDG install (spatially joined from ~1,402 statewide geocoded installs; all non-residential, median 83.9 kW-DC). The pre-registered primary endpoint is within-county lift at the top 50%: the ratio of the installs' density in the model's top-half to the population baseline, computed within county so that geography is not the thing being measured, with a feeder-cluster bootstrap and a gate on the 95% CI lower bound exceeding 1.0 (parity). The live result, with every comparison ranker on the same within-county axis:

Ranker Within-county lift@50 Gate
Platt v0.5.1 model score (live) 1.156, 95% CI [0.836, 1.462] FAIL: CI lower bound < 1.0
Building count (1-column sort) 2.000 beats model
Acreage (1-column sort) 1.912 beats model
Roof area (1-column sort) 1.905 beats model
Composite size 1.852 beats model
Random 0.996 n/a
Proximity (1-column sort) 0.472 n/a

The model's point estimate crosses parity (1.156 > 1.0) and it edges random (0.996), but the CI lower bound is below 1.0 (so the gate fails) and the score loses to trivial one-column size sorts: the model's CI upper bound (1.462) sits below every size baseline's point estimate (building count 2.000, acreage 1.912, roof area 1.905). The result is stable across versions (v0.4 was 1.144 [0.833, 1.448] and v0.5.0 was 1.144 [0.824, 1.437]), confirming that the v0.5.1 environmental correction improved the inputs and the shortlist (§8) without moving the measured lift (n = 500; 195 feeder clusters; the interval shifts slightly because the bootstrap is re-run per snapshot).

Because decision-makers act on the top of a list, not its top half, we also report the finer operating points (critique C9).10 These are exploratory reporting on the same substrate, not a new gate (full bootstrap detail in docs/validation/metrics_v2026_06_09_liftk.json):

Ranker Lift@1% Lift@5% Lift@10%
Platt v0.5.1 model score (live) 11.20 [7.71, 15.95] 6.36 [4.40, 8.34] 3.86 [2.43, 5.38]
Building count 13.20 [7.88, 20.69] 4.63 [3.20, 6.47] 3.40 [2.78, 4.16]
Acreage 22.40 [15.95, 31.53] 10.88 [8.86, 13.41] 7.56 [7.10, 8.18]
Roof area 26.41 [18.97, 36.97] 12.21 [10.62, 14.52] 7.90 [7.36, 8.53]
Random 0.80 [0.00, 1.49] 0.88 [0.53, 1.29] 0.98 [0.73, 1.28]

The reading is consistent with the gate. The model concentrates installs far above random at every operating point (CI lower bounds 7.7, 4.4, and 2.4), and it edges building count at @5% and @10% on the point estimate (overlapping CIs), but it sits below the pure size sorts (acreage, roof area) at every k. At the operating points developers act on, a one-column size sort beats the screen. (Roof area and building count are computed on the 462 of 500 installs carrying a parcels_roof row, 174 clusters, exactly as the frozen gate run treated missing values.)

Two further outcome angles point the same way:

  • A demand-de-confounded re-analysis. Using a target-group-background design (background = the 364 install-bearing parcels compared against parcels with usable roof ≥ 200 m², differencing out "demand lives where buildings are"), the model sat at parity with random (model within-county lift ≈ 1.082; random ≈ 1.038). This is exploratory and post-hoc (run on v0.4.0, not a frozen pre-registration).
  • An upgrade-cost corroboration. Withdrawn interconnection projects showed a median CESIR cost of $281/kW versus $112/kW for energized projects on a complete-case basis (directionally supportive), but this collapsed to a null under a hostile missing-data imputation, and the score- vs-cost link was underpowered (Spearman ≈ 0.00 across only 149 feeders). The sign is stable; the magnitude is not.

Two constraints cap all three outcome legs. The SIR queue spans all 62 New York counties (after county-name normalization) while scoring covers ten, so every score-requiring outcome leg is limited to the scoring footprint. And the available positives are demand-confounded, survivorship-biased, and positives-only: the presence-only / collider problem of §2. We did not tune the model to the test after the gate failed.

Summary: the screen loses to simple size baselines on raw outcome lift and sits at parity with random once demand is differenced out. It is not a demonstrated predictor. Feasibility is not identifiable from positives-only, applicant-conditioned outcomes. The gate fails because the data cannot yet support a predictive claim. The screen passes every internal-validity test in §6.1.

Figure 13 · Outcome gate: within-county lift@50 (fails the pre-registered gate)
0.00.51.01.52.0Building count (naive)2.00Acreage (naive)1.91Roof area (naive)1.91Composite size (naive)1.85Platt score (live model)1.156Random baseline1.00Proximity (naive)0.47PARITY 1.0n = 500 installs · 195 feeder clusters · lift@50 = capture / chance
The live model (1.156) beats random (0.996) but its 95% CI [0.836, 1.462] crosses parity, so the pre-registered gate fails. The model also loses to one-column size sorts (building count 2.00, acreage 1.912, roof 1.905). This is the presence-only confound of §2: installs cluster on large parcels for developer and market reasons, so a density test rewards measuring demand, not feasibility. The size sorts are not better feasibility models. Reported honestly, not tuned away.
Figure 14 · Score distribution: installs vs full population (live model)
020406080100FEASIBILITY SCORE · 0–100CDG install-parcelsn = 50033.580.1p50 58.1Full populationn = 2,046,72445.670.7p50 55.2
Installs sit modestly above the population by median (58.1 vs 55.2), a weak signal consistent with the gate result. Bars mark p25–p90; the square marks the median.
Figure 15 · De-confounded for demand, the model sits at parity with chance
0.00.51.01.5Platt model score1.082Random baseline1.038PARITY 1.0EXPLORATORY · POST-HOC
A target-group-background re-analysis (n = 364 install parcels, compared against a background of parcels with usable roof ≥ 200 m² to difference out “demand lives where buildings are”) puts the model’s within-county lift@50 (1.082) essentially level with random (1.038). The run is exploratory and post-hoc (v0.4.0, not a frozen pre-registration), so we read it as a direction, not a result: once demand is removed, the residual feasibility signal in the available data is near zero.

6.3 The path forward: conditional energization, not feasibility

The conclusion of §6.2 is that feasibility cannot be recovered from the data New York produces, and no quantity of forward data changes that, because the barrier is identification rather than sample size. We change the estimand.

The interconnection queue contains a labeled negative class: withdrawn applications. Among community-distributed-generation applications we observe energized projects, withdrawn projects, and active ones still pending. Conditioning on the fact that a developer pursued a site is not a defect here. It defines the population we predict in. A model trained on applicants and deployed on applicants estimates the correct conditional distribution, and the collider objection of §2, which is fatal to a causal claim about feasibility, does not bind a predictive model used inside its own conditioning regime. The estimand becomes the probability and timing of energization for a project already under development.

Two limits bound this; both were verified against the live data. First, the queue records no reason for withdrawal. We read the current inventory template column by column across utilities, and a withdrawn project carries only a status flag, with no field that separates an interconnection failure from a lost offtake or a financing collapse. The achievable model is therefore all-cause energization: the probability a pursued project energizes. That is its label, not feasibility. Second, the model speaks only to the applicant population. Extending it to the millions of parcels no one has applied to develop is a selection shift; the model does not extend there. The broad 0-to-100 screen stays a separate breadth layer for prospecting; the conditional model is the precision layer that ranks sites a developer is already weighing.

The right method is competing-risks survival analysis, because the queue has two absorbing states that compete, energized and withdrawn, alongside a censored active state. A subdistribution-hazard model yields the cumulative incidence directly, the probability of energization by a given month, which is the quantity a developer or a lender wants. A cost regression sits beside it. Predicting the CESIR upgrade cost in dollars per kW from feeder state and project features is the number that most often kills New York distribution solar, and no public model predicts distribution-scale CESIR cost for New York.

Point-in-time feature snapshotting prevents label leakage. Today's hosting-capacity headroom on a feeder reflects whether past projects energized or withdrew, so joining current grid state to a past application's outcome would feed the model its answer. Every feature must be taken as of the application date. The monthly archival jobs (§5) exist to build this leak-proof panel: features as of the application date, joined to resolved outcomes. The hosting-capacity history exists only from June 2026 forward, so the panel accrues from that date. The model is then validated temporally, trained on everything resolved before a date and tested on what resolves after. That is the validation that mimics deployment.

The gate for that work is pre-registered as a numeric DRAFT artifact, docs/validation/conditional-energization-preregistration.md, with a no-peek rule in force: no estimation may run before the freeze commit hash is recorded.9 Three co-primary endpoints must all pass. E1, discrimination: Uno's IPCW time-dependent C-index at the 36-month horizon, 95% CI lower bound > 0.50 and point estimate ≥ 0.60. E2, calibration: the IPCW Brier score reported as an index of prediction accuracy, IPA ≥ 0.05 with CI lower bound > 0 against the covariate-free within-county Aalen-Johansen reference. E3, ranking: within-county lift@10 with CI lower bound > 1.0, point estimate ≥ 1.20, and a paired same-replicate bootstrap difference with CI lower bound > 0 against both the size baseline and the queue-position baseline. The substrate at draft is approximately 1,601 energized, 9,119 withdrawn, and 2,033 censored CDG applications, with PSEG Long Island excluded and a pre-registered Con Edison-excluded sensitivity. The lift@k operating point may be amended once, pre-freeze, from the developer-conversation answer; the freeze then requires founder sign-off. Until that gate is cleared, the product is a screen. Calibration, once the gate clears, will use whichever monotone method the sample supports: beta or Platt scaling while the resolved set is small, and isotonic regression once it is not.

7. Limitations

We group limitations by severity. The first tier changes how the current output should be used; the second is fixable with data and pipeline work already scoped; the third is inherent to a screen of this design and is retained by choice.

Figure 16 · The buildable-area right-skew: 97.6% fall below the ground-mount floor
< 2 ac93.8%1,844,5952–8 ac3.8%74,2278–25 ac1.5%29,67625–40 ac0.4%7,375≥ 40 ac0.6%10,8498-acre ground-mount floor · 97.6% of parcels fall below it
Net buildable acres are severely right-skewed. 93.8% of parcels carry under two buildable acres, and only about 1.5% reach the 8 to 25 acre range. A flat acreage minimum would erase almost the entire dataset, which is why the gate is archetype-aware: ground-mount requires at least 8 net acres, while rooftop has no floor and keeps dense urban parcels in scope.

Tier 1: Material (changes how to use the output today)

  • The score is a relative suitability index, not a probability, and not a validated predictor of build outcomes (§2, §6.2). This is the headline caveat and the reason it ships labeled improved, not-yet-validated interim.
  • Weights and value-function anchors are uncalibrated engineering judgments. Mitigated, not removed, by the rank-stability result (§6.1): the exact weights are not load-bearing, but they have not been fit to outcomes.
  • The eligibility gate is currently non-binding (0 of 2,046,724 parcels excluded), so its real- world safety is untested by present data even though its categories are mechanism-correct. The environmental fill-in has now happened (v0.5.1) and the gate still excludes 0 parcels outright, because wetlands bind only the ground-mount minimum-acreage gate and parcels failing it fall back to rooftop (ground-mount eligibility dropped from 50,371 to 44,229 parcels). Prime farmland is a Stage-1 discount, not a gate input, and cannot produce exclusions. Until the gate excludes a parcel, treat it as a stated intention rather than a demonstrated filter.
  • The rooftop usable-area derate is selected by parcel class, not per building. The derate (0.60 flat / 0.25 pitched) is chosen from the parcel's property class and applied to its single largest building, and roof area is the dominant rooftop driver (ablation top-1% churn 0.95). For a mixed-use parcel (residential class, large flat commercial roof) this can mis-estimate usable roof by up to ~2.4× (the ratio of the flat to the pitched derate). The fix is per-building, class-aware derating;11 the per-building roof signals exist only for NYC while the affected shortlisted parcels are upstate, so the durable fix is LiDAR-derived and is gated on outcome validity.12
  • Reported roof area is a roofprint and may overstate the true footprint. Upstate building footprints are satellite-traced roofprints; because usable roof area dominates the rooftop ranking, this systematic inflation may be as material as the derate approximation, and no height or roof-type source currently corrects it.12

Tier 2: Fixable with data / pipeline work (scoped)

  • Coverage is ten New York counties. Statewide is a roadmap item; every score-requiring outcome test is currently capped by this footprint (§6.2).
  • Prime farmland was re-ingested footprint-wide in v0.5.1 but has not been independently ground-truthed,8 and there is no parcel-footprint subtraction (setbacks, internal roads) beyond the environmental overlap, so for many parcels net buildable acres still approximates total acres. The v0.5.1 wetland/floodplain re-ingest closed the larger version of this gap (environmental flags are now populated across all ten counties), but the farmland ground-truthing and footprint-subtraction items remain.
  • Stage 2 is partially a stub. The LSRV value-stack flag is unpopulated: it is false for every parcel, pending an LSRV-area ingest, and exists today as schema and API plumbing only. Queue saturation is populated on every row, with unpublished queued-DG surfacing as 0 (§3.3). The size-aware interconnection-risk band is implemented as a size-only first cut;2 its breakpoints diverge from the SIR bright lines pending a code fix (§3, Stage 2), and its optional feeder-level CESIR-cost enrichment remains data-gated.
  • Usable-roof-area has error sources the model does not capture: rooftop obstructions, fire-code setbacks, partial-polygon-vs-true-roof, tree/scan occlusion, footprint-vs-imagery temporal mismatch, and multi-building parcel linkage. Any of these can dominate usable-area error even with a correct flat/pitched derate, which is why a heavier roof fix is gated on outcome validity rather than pursued now.12
  • Substation reconciliation is incomplete. Feeder-to-substation name matching achieves a 52.8%–87.1% match rate across utilities, an any-tier match fraction (exact, whole-token subset, or 2 km nearest), not a gold-set-validated recall. It affects only the data-readiness label and the substation citation, never the grid score, which keys on the nearest feeder line; unreconciled feeders are still scored.7
  • Hosting capacity is a periodic snapshot. A parcel's score reflects the last published grid state (headroom before queued DG, hence the queue discount); the data-readiness label is gated on its recency (§3, Stage 3).

Tier 3: Inherent / minor (retained by choice)

  • Slope is near-dead-weight on the current population (ablation top-1% churn 0.065). It is kept as mechanism-correct, but it currently barely moves the ranking.
  • The buildable-area distribution is severely right-skewed. On the v0.5.1 data the 90th-percentile parcel has only ~0.95 buildable acres, and only ~18,224 parcels (~0.9%) have ≥ 25 usable acres, which is why the gate is archetype-aware (ground-mount ≥ 8 net ac; rooftop has no floor), so that dense urban parcels are not erased.
  • The Con Edison-network rooftop discount (0.85) is provisional and evidence-contradicted. The realized CDG population skews to larger non-residential systems (median ~84 kW-DC), not the small net-metered systems the 0.85 softening assumed, so the rooftop network discount is likely too lenient (it should probably sit closer to the ground-mount 0.15 than to 1.0). We have not yet re-fit it because doing so credibly depends on the same outcome data the gate awaits.

8. Version history: v0.1 → v0.5.1

The score model is versioned independently of any release tag. The current engine reports v0.5.1; the legacy additive engine reports v0.1.0. The live view is repointed with a single statement and is instantly reversible: the v0.5.0, v0.4.0, v0.3.0, and v0.1.0 snapshots are all retained as rollback targets.

Current live: v0.5.1 (flipped 2026-06-05).13 The latest change is a data correction, not a scoring-logic change: the environmental layers were re-ingested (most consequentially a wetland source-swap to the authoritative USGS-WIM National Wetlands Inventory service) and per-parcel flags were recomputed across all ten counties. This corrects an env-blind footprint in v0.5.0 (the environmental tables were largely unpopulated when v0.5.0 was scored), moving ~11% of parcels. The same frozen gate returns within-county lift@50 = 1.156 [0.836, 1.462]: still failing, still below the size baselines (§6.2). The flagship ground-mount shortlist, however, changed materially (the live top-50 retained only 6 of the prior 50) because v0.5.0 had been surfacing parcels that are genuinely 50–60% wetland; the corrected list is clean. The correction was adversarially verified, which caught and forced the fix of an environmental under-count in one county before the change went live.8

v0.5.0 (live 2026-06-04 → 06-05). A correctness pass with three engine changes: the flood/wetland double-count resolved (the discount made archetype-aware);1 the data-readiness label decoupled from substation-name reconciliation;5 and the Stage-2 interconnection-risk band implemented.2 A regression run through the same frozen gate held the lift unchanged (1.144 [0.824, 1.437]); the fixes improved construct validity without moving the outcome correlation.

v0.4: fixing the anti-ranking finding. The first outcome-ranking validation found that v0.3 anti-ranked energized installs (they landed below the population median; lift@50 0.39, worse than random). The diagnosis identified two surfacing-blocking defects, fixed together in one re-score: (1) the Con Edison-network proximity artifact (the radial-feeder distance inside network areas was a coverage artifact suppressing strong urban parcels) was replaced by PROX_NETWORK_DEFAULT = 0.95; and (2) the rooftop archetype, which had no size input, gained v_roof_area (weight 0.30, from the buildable + slope share rooftop does not use). v0.4 then failed the pre-registered gate (1.144 [0.833, 1.448]) but passed both internal-validity legs, and was flipped live as a labeled improved, not-yet-validated interim.

v0.3: queue and network signals became real scored inputs (discount_queue and discount_coned_network began firing on live data), the grid-proximity curve was re-anchored to interconnection-cost economics (full decay by 5 km), and the network rooftop discount was softened from 0.60 to 0.85.

v0.2: the four-stage gated additive-multiplicative re-architecture that replaced v0.1's purely additive sum: the hard eligibility gate, the multiplicative (Σ wᵢ vᵢ) · Π dⱼ formula, continuous monotone value functions, multiplicative discounts with neutral 1.0 "unknown" defaults, the two-archetype structure with the first-eligible headline rule, and a confidence model in which high is reachable. A mid-cycle fix corrected feeder selection to use the nearest feeder line rather than the reconciled substation point, resolving ~1,489 wrong exclusions.

v0.1: the initial compensatory additive model (superseded). Eight inputs contributed signed points against fixed caps. It had four fatal defects that motivated the rewrite: disqualifiers were subtractable penalties (a high grid score could out-vote a fatal constraint); three inputs (queue, opposition, VDER) were frozen at favorable neutrals, so ~30 of 100 points carried no signal and inflated scores; the buildable term used coarse, mis-scaled step bands; and high confidence was structurally unreachable.

Document errata (post-release corrections to this document, after v0.5.1 shipped).

  • 2026-06-06. Three regulatory anchors were corrected after verification against the primary SIR document: the SIR effective date (August 1, 2025; previously misstated as March 2025), the interconnection review tracks (≤ 50 kW-AC simplified; above 50 up to 300 kW-AC expedited with a UL 1741 supplement SA inverter, previously misstated as supplement SB; full review toward the 5 MW-AC ceiling above that), and the v_buildable acreage anchors (re-attributed from the Model Solar Energy Local Law, which carries no acreage ratio, to the NREL land-use benchmark, Ong et al. 2013). §6.3 was reframed to all-cause conditional energization in the same change.3
  • 2026-06-09. The posture was corrected from "at parity with simple size baselines" (wrong: the model's CI upper bound sits below every size baseline's point estimate) to "loses to size baselines"; "feasibility score" was relabeled "screening score"; "non-compensatory" was relabeled "gated additive-multiplicative"; and the exploratory lift@1/5/10 table was added to §6.2.10
  • 2026-06-09. The §6.3 conditional gate was pre-registered as a numeric DRAFT artifact with a no-peek rule,9 and an external verification round closed the cost-sharing (C5) and VDER-attribution (C6) items now reflected in §3.2 and the glossary.14

Figure 17 · Model version history
v0.1
Additive weighted sum
compensation bug · dead inputs
v0.2
Four-stage non-compensatory
(Σwᵢvᵢ)·Πdⱼ
v0.3
Queue + ConEd-network become real inputs
grid-proximity re-anchored to 5 km
v0.4LIVE
Network-proximity fix + usable-roof-area signal
LIVE · interim
A 10-day build from an additive prototype to the live four-stage screen; each version’s snapshot is retained for instant one-line rollback.
Figure 18 · The env correction: a cleaner flagship shortlist
< 20% wet20–50%≥ 50% wetbefore correctionmean 14.3%6 ≥50%after correctionmean 2.4%0 ≥50%each bar = the 50 highest-scoring ground-mount parcels · 6 / 50 retained after the correction
Re-ingesting the wetlands data (USGS-WIM NWI) reshaped the top-50 ground-mount shortlist: the six sites that were ≥ 50% wetland are gone and the mean wetland coverage of the top 50 fell from 14.3% to 2.4%. Only 6 of the prior 50 survive, and the GM-eligible set tightened from 50,371 to 44,229. The correction removes false-positive wetland sites; it does not move the validated gate (§6.2).

Glossary

  • CDG (community distributed generation): New York's program for shared community-solar projects; the source of our completed-install positives.
  • Hosting capacity: the MW of new distributed generation a feeder can accept without grid upgrades, as published per-feeder by each utility.
  • Feeder: a distribution circuit; the unit at which hosting capacity and queue pressure are published and at which we match parcels to the grid.
  • Presence-only data: a dataset of observed successes (here, completed installs) with no labeled true negatives; absolute prevalence is not recoverable from it.
  • Survivorship / demand confound: completed installs reflect feasibility and developer demand, market access, and timing jointly; the four are not separable from successes alone.
  • Collider / Berkson selection effect: conditioning on a variable downstream of two causes (here, interconnection application) induces a spurious association between them; it opens, rather than closes, the feasibility–demand confound.
  • Target-group-background (TGB) design: a presence-only evaluation that compares positives against a background of plausible candidates (here, roofed parcels) rather than all land, to difference out demand.
  • Relative suitability index: a score that ranks parcels relative to one another; ordering is meaningful, absolute level is not a probability.
  • Lift@k / within-county lift@k: the density of true installs in the model's top-k% relative to a baseline; within-county computes it inside each county so the metric is not just measuring geography.
  • SIR: New York's Standardized Interconnection Requirements; the source of the monthly interconnection-queue inventory (including withdrawals).
  • CESIR is the Coordinated Electric System Interconnection Review, the full study (and cost) generally required for systems above 300 kW-AC, up to the 5 MW-AC ceiling.
  • VDER / LSRV is the Value of Distributed Energy Resources tariff and its Locational System Relief Value adder, the value-stack signals surfaced in Stage 2. VDER is a New York PSC construct (Phase One Order, March 9, 2017), implemented with NYSERDA. NYISO has no role in it.
  • UL 1741 (supplement SA) is the inverter certification the current SIR requires for the expedited path, which is open to systems above 50 kW-AC up to 300 kW-AC. Supplement SB, aligned to IEEE 1547-2018, is the newer revision; the expedited exception in the current SIR text cites SA.
  • DC:AC ratio: the ratio of a project's panel (DC) nameplate to its inverter (AC) rating (≈ 1.3 here); the regulatory ceilings are stated in AC.

Notes and references

This page is the public methodology of record, generated from the same document that governs the production engine. The references below are entries in Platt's internal, dated decision log and build specifications, which record when each choice was made and why; the full log, the frozen pre- registrations, and the source code are available to partners under diligence.

Footnotes

  1. Flood/wetland discount made archetype-aware: neutral for ground-mount (where the usable- area loss is already counted in net buildable acres), retained for rooftop. 2

  2. Stage-2 size-aware interconnection-risk band implemented as a size-only first cut with breakpoints at 300 kW-AC and 500 kW-AC. These predate the DL-030 SIR verification and diverge from the regulatory bright lines at 50 and 300 kW-AC; a code fix is queued (§3, Stage 2). 2 3

  3. Regulatory anchors verified against the primary SIR document and corrected (2026-06-06): effective date August 1, 2025; review tracks ≤ 50 kW-AC simplified, above 50 up to 300 kW-AC expedited under UL 1741 supplement SA, full review toward the 5 MW-AC ceiling; the 8/40-acre anchors re-attributed to the NREL land-use benchmark (Ong et al. 2013). The Stage-2 band's 300/500 kW-AC breakpoints predate this verification; a code fix is queued. 2

  4. "Confidence" reframed as a data-readiness (fitness-for-use) rating; a field rename and a per-flag readiness panel are queued.

  5. Data-readiness label decoupled from substation-name reconciliation (the score keys on the nearest feeder line, not the reconciled substation). 2

  6. Data-readiness research: cutpoints are not moved to rebalance the tier distribution.

  7. Feeder selection keys on the nearest feeder line (including unreconciled feeders), not the reconciled substation point. 2

  8. Environmental cascade: NWI re-ingested via the USGS-WIM service, per-parcel flags recomputed across all ten counties, adversarially verified (an Erie under-count was caught and fixed before release). 2 3 4

  9. Conditional-energization gate pre-registered as a numeric DRAFT (docs/validation/conditional-energization-preregistration.md); the no-peek rule is in force until the freeze commit hash is recorded; companion resume/redirect/kill criteria are pre-specified in docs/re-evaluation-criteria.md. 2 3

  10. Posture and naming corrections (2026-06-09): the loses-to-size-baselines posture, the screening-score relabel, the gated additive-multiplicative relabel, and the exploratory lift@1/5/10 table (docs/validation/metrics_v2026_06_09_liftk.json). 2

  11. A per-building, class-aware roof derate (NYC roof-height/feature codes, upstate occupancy) was specified; the shipped pipeline used the parcel-class proxy pending the LiDAR fix.

  12. Roof fixes (per-building derate, roofprint inflation, and the broader usable-area error sources) deferred to a LiDAR-derived solution gated on outcome validity. 2 3

  13. v0.5.1 flipped live 2026-06-05; one-line reversible rollback to the v0.5.0 snapshot.

  14. External verification round (2026-06-09): the 2% cost-sharing cap and the 115%-of-CESIR petition (Case 24-E-0621) in §3.2, and the VDER attribution (PSC Phase One Order, March 9, 2017) in the glossary.