GARAGE
May 2026
Field Guide

How the model finds the next garage to permit.

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

Garage demand has no single dominant driver — unlike roofing, where roof age is half the signal. Instead the model reads a diffuse picture: is the owner in fix-things-up mode (recent permits of any trade), is the property big and valuable enough to justify the work, where is it, and how long has the owner been there. It scores 701,657 homes in the addressable buy-box. On a list of fifteen thousand it catches garage permits at 10.0× the rate of a random draw — and that edge is not a "did-garage-before" echo: dropping garage permit history barely moves it.

Driver clusters · LightGBM gain, aggregated by signal

What the model actually weights.

Capacity · 28%
Owner · 27%
Place · 21%
Age · 14%
$
Approximate share of clustered gain across the top features · the five named clusters ≈ ≈ 82% of total gain
01
Capacity & value
≈ 23%
Can they afford it and is the structure worth working on. Lot and building size, AVM and market value, value per square foot, HOA tier, and the existing garage's own size. The single biggest cluster — garage projects track property capacity.
lot_sqft · avm_per_living_sqft · market_total_value · building_sqft · hoa1_fee_value · garage_sqft
02
Owner activity & permits
≈ 22%
Recent permit history for any trade — building, HVAC, plumbing, electrical. The composite “any non-roof permit recently” is the top single feature: an owner mid-renovation is the one who adds or rebuilds a garage.
months_since_last_any_non_roof_permit · months_since_last_building_permit · months_since_last_hvac_permit
03
Place — county, neighborhood, storms
≈ 17%
County regime, neighborhood density, and storm exposure (a hurricane that tears off a garage door drives a rebuild). Same geographic machinery the roofing model uses.
fips · nearest_storm_name · nearest_storm_km · area_total_props · area_pct_wholeroofs_36m
04
Property age & tenure
≈ 15%
Older homes reach garage-renovation age; ownership tenure flags both fresh buyers upgrading and long-tenured owners maintaining. Garage work peaks at 35+ years.
year_built · property_age_yr · days_ownership · months_since_prev_sale
05
Garage structure
≈ 5%
Whether the home has a garage and how big — a buy-box pre-condition (you can't redo a garage you don't have) more than a ranking driver once inside the market.
has_garage · n_garage_spaces · garage_type
Diffuse by design. No single feature exceeds ~6% of gain — garage demand is a blend, not a clock. That is the opposite of the roofing model (roof age ≈ 51%). The honest read is by cluster, not by individual feature rank. Shares computed over the top features of the buy-box model.
How the model finds the next garage
Field Guide · 1
GARAGE
May 2026
Headline numbers

How well it actually works.

10.0×
Lift @ 15K · buy-box
eval 2025-10-31
18.6×
Lift @ 5K · top of list
tightest selection
0.0162
AUC-PR
vs 0.0154 no-buy-box
0.12%
Buy-box base rate
6-mo permit hit rate

Of 701,657 homes in the buy-box (has a garage, age 20+), only about 853 (0.12%) pull a garage permit in six months. A random 15,000 catches ~18. The model catches roughly 180 — a 10× edge, on a target ~11× rarer than roof replacement.

Which universe? The 10.0× is measured inside the buy-box — single-family, individual owner, owner-occupied, has a garage, property age ≥ 20. Scoring the raw roofing universe (which includes 18.5% no-garage homes and new builds) inflates lift to 15.8×, but that number is partly the model trivially down-ranking homes that can’t do garage work. The buy-box figure is the honest one.

Lift by list size

Tighter list, sharper edge.

10×20×18.6×Top 5K12.3×Top 10K10.0×Top 15K
Lift over a random draw at three list depths, buy-box model, eval anchor 2025-10-31. Single-fold (no 6-window cross-validation yet) — validation-only model.
Audit findings

What we checked, changed, and left open.

Clean
Leakage audit passed: every feature is T0-bounded; the no-history ablation (drop n_garage_24m) keeps lift within 1.3% — the signal is genuine demand, not “did-garage-before” autocorrelation.
Validated
Buy-box (has-garage + age ≥ 20) raises AUC-PR 0.0154→0.0162 while keeping 78% of positives on 64% of the universe. Adopted as the standard universe.
Closed
NA-categorized variant tested: dropping uncategorized permit actions loses ~25% of positives with no ranking gain. Verdict — keep all-actions.
Pending
No ship pipeline yet (validation-only). Age cutoff (20) is domain-reasonable but un-swept. Shared FA-vintage question applies as it does to roofing.
Anti-signals

What pulls a score down.

Removed before scoring
  • No garage at all
  • Absentee owner
  • Non-individual owner
  • Property younger than 20y
Profile says “not yet”
  • Low value / small lot
  • No recent permit activity
  • Long-settled, quiet parcel
Quiet surroundings
  • No recent storm
  • Low-activity neighborhood
  • Low-rate county

Two stages. The buy-box (single-family, individual, owner-occupied, has-garage, age ≥ 20) is a hard filter applied before scoring. The other columns are in-model signals whose adverse values pull a score down (directions inferred from feature behavior, not SHAP-audited).

Bottom line

Garage demand is predictable — about 10× better than random inside the buy-box — and the signal is real, not an echo of past garage permits. It is diffuse: capacity, owner activity, place, and age each carry a fifth, with no roof-age-style dominant clock. What the model can’t see: owner intent before any permit surfaces, and anything outside the seven Florida counties. Validation-only — no outbound list ships yet.

garage · FL-7 buy-box · build 0d18a7c · eval 2025-10-31
Field Guide · 2