Skip to main content
Profentra

Methodology

How Profentra scores development momentum

A precise description of the algorithm that powers the public momentum pages. Model version momentum-v2.1.0.

1) Overview

Momentum measures where permit activity is accelerating relative to a local baseline, not where absolute volume is highest. Every area receives a bounded 0–100 score plus a state label (COOLING / STABLE / EMERGING / ACCELERATING / BREAKOUT).

2) Data sources and included records

Each market ingests municipal building-permit records from its official open-data feed (Chicago Open Data Socrata, city ArcGIS services, etc.). A record is included when it has a valid activity date and is deduplicated by source permit identity. Records with missing, invalid, or future-dated activity dates are excluded from the calculation and counted in the date-quality factor. Permit statuses are not filtered: issued, active, and completed records all contribute, because momentum measures filing/issuance flow, not current construction. Revised permits and backfills are matched by canonical source key, so a retried or repeated ingest cannot double-count the same permit.

3) Geography

Areas are official boundaries: Chicago community areas, Denver statistical neighborhoods, Nashville community planning areas, and equivalent units per market. Boundary sources are cataloged with AUTHORITATIVE or PARTIAL status. Records are assigned by point-in-polygon; the share of recent city records successfully assigned is published per area as the geography coverage factor.

4) Time windows

  • Recent window: the latest 30 days, ending at compute time.
  • Baseline window: the 90 days immediately preceding the recent window, normalized to a 30-day rate (baseline ÷ 3).
  • Acceleration: recent 30 days versus the prior 30-day window.
  • Persistence: the three most recent 30-day windows versus the 90 days before them.
  • All boundaries use the market's local timezone and a consistent compute timestamp; partial periods are counted as observed.

5) The formula

The score combines three directional components and one evidence gate:

  • Velocity (60%): log-ratio of recent 30-day activity to the normalized baseline, mapped to 0–100 around a neutral 50.
  • Acceleration (20%): log-ratio of recent 30 days to the prior 30 days, same mapping.
  • Persistence (20%): how many of the three latest windows cleared the historical reference rate.
  • Magnitude gate: how far directional evidence may move the score from neutral scales with √(observations ÷ 20). Small samples stay near 50.

Final score = round(50 + (weighted directional sum − 50) × magnitude gate), clamped to 0–100.

6) Minimum samples and missing data

  • Velocity requires at least 12 baseline observations; below that, the velocity component is neutral and the delta is reported as “insufficient baseline data”.
  • Acceleration requires ≥3 observations in the prior window and ≥8 across both windows.
  • Persistence requires ≥9 historical and ≥9 recent observations.
  • Areas below the velocity minimum are not ranking-eligible and appear with an explicit exclusion reason instead of a score.
  • A missing series is displayed as unavailable — never as zero.

7) State labels, ranks, and ties

  • Score < 40 → COOLING; 40–59 → STABLE; 60–69 → EMERGING; ≥70 with corroboration → ACCELERATING; ≥85 with sustained persistence and ≥15 recent observations → BREAKOUT.
  • Public cards show rank (e.g. “Rank #3 of 77 eligible areas”), computed against the full eligible universe for that market — not a position inside the visible top-5 list.
  • Ties are broken deterministically by stable geography ID, so ordering never depends on display order or data arrival.

8) Confidence factors (0–100)

  • Source freshness (25): how current the underlying municipal feed is.
  • Sample sufficiency (30): recent + baseline observations.
  • Baseline sufficiency (30): completeness of the 90-day reference period.
  • Geography quality (10): boundary authority × assignment coverage.
  • Date quality (5): share of records with valid activity dates.

9) Category mix

Each permit is classified Commercial / Residential / Other from its municipal type and work description. Percentages are of the classified population; unclassified records are disclosed separately so counts always reconcile to the included population. A mix with nothing classified is shown as unavailable.

10) Freshness and revisions

Connector ingestion and score recompute run on a daily schedule. Each page states the score-compute time, the source as-of date, and an explicit data status (up to date / delayed / unavailable) in the market's timezone. When a refresh fails, the last valid snapshot stays published and is marked delayed — timestamps are never fabricated. Formula changes ship as a new model version; current version: momentum-v2.1.0.

11) Limits

Permit velocity can lead or lag pricing and may underrepresent off-market dynamics. This is an early signal for deeper diligence, not an investment instruction and not a property-price prediction. Use alongside local underwriting context.

12) Worked example

Area A · recent 30 days: 15 permits · preceding 90 days: 30 permits

Normalized baseline = 30 ÷ 3 = 10 permits per 30 days

Velocity ratio = log((15+1) ÷ (10+1)) ≈ +0.374 → velocity score ≈ 50 + 50 × tanh(0.374 ÷ log 2) ≈ 74.5

With a neutral acceleration/persistence (50 each) and a magnitude gate of √(25 ÷ 20) ≈ 1.12:

Score = round(50 + 0.6 × 24.5 × 1.12) ≈ 66 → EMERGING

Example figures are illustrative; the live page shows the real values for every area.