OverviewModelsWindows › Model card
WINDOWS
May 2026
Field Guide

How the model finds the next window job.

A look inside the windows-permit model — it scores owner-occupied single-family homes on their odds of pulling any window permit in the next six months, on the same feature machine as the roofing and garage models.

Window replacement is mostly a question of age and activity. Original windows reach the end of their life around fifteen-to-twenty years, so the model leans hardest on how recently the owner pulled any permit (are they renovating?) and how old the house is. It scores 939,989 homes in the age-15+ buy-box and, on a list of fifteen thousand, catches window permits at 6.0× a random draw — a lower multiple than garage only because window permits are far more common (a higher base rate is harder to beat).

Driver clusters · LightGBM gain, aggregated by signal

What the model actually weights.

Owner · 38%
Capacity · 22%
Place · 20%
Age · 12%
$
Approximate share of clustered gain across the top features · the five named clusters ≈ 79% of total gain
01
Owner activity & permits
≈ 30%
The dominant cluster. Recent permit history of any trade — the composite “any non-roof permit recently” is the single biggest feature by a wide margin. A home mid-renovation is the home replacing its windows.
months_since_last_any_non_roof_permit · months_since_any_roof · months_since_last_hvac_permit · months_since_last_windows_permit
02
Capacity & value
≈ 17%
Property size, market and AVM value, value density, HOA tier. Window jobs scale with the home and the owner’s means.
market_total_value · avm_per_living_sqft · building_sqft · lot_sqft · hoa1_fee_value
03
Place — county, neighborhood, storms
≈ 16%
County regime, neighborhood density, and storm exposure — impact-window upgrades spike after hurricanes. Distinct geographic scales.
fips · nearest_storm_name · nearest_storm_km · area_total_props · area_pct_wholeroofs_36m
04
Property age & tenure
≈ 13%
The physical core of window-replacement timing: build year and home age (original windows aging out), plus ownership tenure. Demand is ~6× lower on 0-9y homes — the reason for the age-15 buy-box.
year_built · property_age_yr · days_ownership · months_since_prev_sale
05
Roof & envelope cross-signal
≈ 8%
Roof age and recency: homes doing one envelope project (roof) tend to do others (windows). A modest but consistent cross-trade signal.
roof_age_months · roof_age_months_est · months_since_any_roof
Activity over clock. Where roofing has a dominant physical clock (roof age ≈ 51%) and garage is fully diffuse, windows sits between: owner permit-activity leads (≈ 30%), with property age the physical anchor. Read by cluster, not feature rank. Shares over the top features of the buy-box model.
How the model finds the next window job
Field Guide · 1
WINDOWS
May 2026
Headline numbers

How well it actually works.

6.0×
Lift @ 15K · buy-box
eval 2025-10-31
9.0×
Lift @ 5K · top of list
tightest selection
0.0344
AUC-PR
vs 0.0337 no-buy-box
1.05%
Buy-box base rate
6-mo permit hit rate

Of 939,989 homes in the buy-box (age 15+), about 9,823 (1.05%) pull a window permit in six months — window permits are common, near roofing’s rate. A random 15,000 catches ~158; the model catches roughly 940 — a 6× edge.

Why lower than garage? Not a weaker model — a higher base rate. Window permits (1.05%) are ~9× more common than garage (0.12%), so the top-15K can’t concentrate positives as hard; AUC-PR is actually higher (0.034 vs 0.016). Lift inversely tracks base rate; compare a model to itself over time, not across targets by lift alone.

Lift by list size

Tighter list, sharper edge.

10×9.0×Top 5K7.1×Top 10K6.0×Top 15K
Lift over a random draw at three list depths, buy-box (age 15+) model, eval anchor 2025-10-31. Single-fold — validation-only model, no 6-window cross-validation yet.
Audit findings

What we checked, changed, and left open.

Clean
Leakage audit passed: features T0-bounded. The no-history ablation (drop n_windows_24m/36m + months_since_last_windows_permit) keeps ~94% of lift — demand signal, not autocorrelation.
Validated
Buy-box (property age ≥ 15) raises AUC-PR 0.0337→0.0344, keeps 96% of positives while dropping the dead new-build segment. Adopted as the standard universe.
Closed
NA-categorized variant tested: dropping uncategorized actions loses positives with no ranking gain. Verdict — keep all-actions.
Pending
No ship pipeline yet (validation-only). Age cutoff (15) is domain-reasonable but un-swept.
Anti-signals

What pulls a score down.

Removed before scoring
  • Newer than 15 years
  • Absentee owner
  • Non-individual owner
  • Mobile / manufactured
Profile says “not yet”
  • No recent permit activity
  • Recently replaced windows
  • Low value / small home
Quiet surroundings
  • No recent storm
  • Low-activity neighborhood
  • Low-rate county

Two stages. The age-15+ buy-box (plus single-family, individual, owner-occupied) is a hard filter before scoring. The other columns are in-model signals whose adverse values pull a score down.

Bottom line

Window demand is predictable at about random inside the buy-box, with the highest AUC-PR of the three permit models. Owner permit-activity leads (≈ 30%), with home age the physical anchor — the model bets on “renovating owner, aging windows.” What it can’t see: owner intent before permits surface, and any market outside the seven Florida counties. Validation-only.

windows · FL-7 buy-box · build 6e1d9bf · eval 2025-10-31
Field Guide · 2