Metro Analytics
  • Home
  • Markets
  • Intelligence
  • Indicators
  • Forecast
  • Research
  • Enterprise
  • Pricing
  • Home
  • Markets
  • Intelligence
  • Indicators
  • Forecast
  • Research
  • Enterprise
  • Pricing
© 2026 Metro Analytics.
MethodologyData sources and model outputs are clearly labeledResearch only — not investment advice.
Metro Analytics
  • Home
  • Markets
  • Intelligence
  • Indicators
  • Forecast
  • Research
  • Enterprise
  • Pricing
  • Home
  • Markets
  • Intelligence
  • Indicators
  • Forecast
  • Research
  • Enterprise
  • Pricing
Transparency

How scores and forecasts are calculated

What goes into Market Scores, what forecast percentage changes mean, how ranges and confidence work, and how much weight to give extreme outputs, in plain language.

Browse marketsOpen Forecast
Market Score

0 to 100 heuristic from ACS, FRED, and BEA. Not ML.

Rankings

Same score engine; sort key is not the forecast model.

Forecasts

Separate ML service with percent change and uncertainty bands.

Confidence

Wide bands and low confidence mean less certainty, especially on extremes.

Market Score pipeline
Public data

Census ACS, FRED, and BEA feed raw demographic, macro, and income series.

Market Score engine

Five sub-scores are weighted into a single 0 to 100 composite, live in this app.

Rankings & narrative bands

The composite drives sort order and the display-only percentage band on cards.

Forecast pipeline
Home value & macro series

Zillow-style indexes and state GDP/macro features, by city, ZIP, or state.

metro-forecast model

A separate ML service projects the series forward 6, 12, or 24 months.

Scenario % change

Base, Upside, and Downside bands built from the same point forecast and its residuals.

Sections
1. Three different number systems2. How the Market Score is calculated3. What score ranges mean4. Narrative percentage bands on market cards5. How forecast percentage changes are generated6. Ranges, confidence, and extreme values7. National indicators and rankings8. Drivers, momentum, and tags9. How much authority to put in the numbers10. Data sources11. Frequently asked questions

Deeper engineering notes live in the project docs for operators. This page is the product-facing explanation.

1. Three different number systems

Metro Analytics shows three related but separate calculation systems on the same pages. They are easy to confuse because a market card can show a Market Score, a ranking position, and a forecast percentage all at once, in the same sentence of UI copy.

SystemWhat it isPrimary inputsRefresh cadence
Market ScoreA hand-tuned, rules-based composite from 0 to 100Census ACS, FRED, BEAComputed live on each page load
RankingsA sort order built from the same Market Score engineSame as Market ScoreWeekly, via a Monday cron run
ForecastA machine-learning projection of a series over timeHome value indexes, state GDP, macro featuresOn demand, or a stored snapshot

None of these three numbers should be added together, averaged, or converted into one another. A Market Score of 80 and a forecast of "+9%" are answers to two different questions asked with two different tools.

If you only remember one thing from this page: the Market Score and Rankings are a rules engine you can fully audit from the weights below. The Forecast is a statistical model with its own separate uncertainty. Treat them as two independent opinions, not one number expressed two ways.

2. How the Market Score is calculated

Each city or place score blends five sub-scores into a single 0 to 100 composite. Every sub-score is normalized onto the same 0 to 100 scale before it is weighted, so no single input can dominate the result just because its raw units happen to be larger.

The weighted breakdown is shown visually below. Each sub-score uses a piecewise function of its raw input rather than a straight linear formula. For example, the affordability sub-score compares the home-value-to-income ratio against a fixed set of thresholds (a ratio at or below 2.5 scores 95, a ratio above 7.0 scores 20), and the macro sub-score starts from the 30-year mortgage rate before layering adjustments for unemployment and inflation on top.

What happens when data is incomplete

ACS demographic data is required for a score to compute at all. FRED and BEA inputs are treated differently: if either is missing, the engine substitutes a documented, conservative default so the page can still render a useful score, and the market is labeled Partial instead of Live.

InputDefault used when missing
30-year mortgage rate (FRED)7.0%
Unemployment rate (FRED)4.0%
CPI year over year (FRED)3.0%
State per-capita income growth (BEA)3.0%

Because these defaults sit near the middle of their historical ranges, a Partial score is a reasonable estimate rather than a placeholder, but it is still worth checking the data quality badge before relying on the exact number.

Affordability
28%

ACS median home value relative to median household income. Source: Census ACS.

Supply & demand
25%

Rental vacancy rate, used as a proxy for inventory pressure. Source: Census ACS.

Macro environment
20%

30-year mortgage rate, national unemployment, and CPI year over year. Source: FRED.

Income quality
15%

Local median income against a national reference, adjusted by state income growth. Source: Census ACS + BEA.

Education
12%

Share of adults 25 and older holding a bachelor's degree or higher. Source: Census ACS.

3. What score ranges mean

The composite score is rounded to the nearest whole number and clamped to the 0 to 100 range. That single number is then classified into one of three tiers, shown visually below.

A score of 80 for Flower Mound, Texas, and a score of 62 for Boise, Idaho, means the weighted inputs currently favor Flower Mound across affordability, supply, macro conditions, income, and education. It does not mean prices in Flower Mound will rise 80%, and it does not mean Flower Mound will outperform Boise by 18 percentage points. The score is an ordinal ranking signal, not a rate of return.

Some compact UI surfaces, such as small tag chips on dense tables, use slightly different color cutoffs (75 and 60) purely so the colors read clearly at a glance. The official Hot, Watch, and Cool classification used everywhere else in the product always uses the 72 and 56 thresholds shown above.

Hot72 to 100

Stronger composite conditions across the five weighted inputs.

Watch56 to 71

Mixed signal: neither clearly strong nor clearly cooling.

Cool0 to 55

Weaker composite conditions relative to other tracked markets.

4. Narrative percentage bands on market cards

Market detail pages and ranking cards often show a narrative band such as "+7 to 12%" next to the score. That band comes from a fixed lookup table keyed directly to the composite score. It exists purely to give quick, readable context on a card, and it is not a statistical projection.

Composite scoreNarrative band shown
82 and above+12 to 18%
72 to 81+7 to 12%
62 to 71+3 to 7%
52 to 61+0 to 3%
42 to 51-1 to 2%
Below 42-3 to 6%

Because this table is derived from the score, two markets with the same composite score will always show the same narrative band. Compare this to the Forecast Center, where two markets with identical Market Scores can show completely different forecast percentages, because the forecast model is reasoning about a different set of inputs entirely.

5. How forecast percentage changes are generated

Forecast Center reads from the metro-forecast service whenever FORECAST_API_BASE_URL is configured. When it is not configured, the page states plainly that the Forecast API is not configured, rather than silently substituting Market Score data.

  1. Feature collection. Housing forecasts are built from Zillow-style home value indexes and related features for covered cities and ZIP codes. Economic forecasts instead use state GDP and macro time series.
  2. Model projection. The model predicts a future level of the series at the selected horizon of 6, 12, or 24 months.
  3. Percentage conversion. The percentage change you see on screen is calculated as:

(forecast level / current origin - 1) x 100

  1. Scenario construction. Base, Upside, and Downside are not three separately trained models sharing a name. They are three views of the same underlying point forecast. Base uses an 80% uncertainty band around the point forecast. Upside and Downside widen that band toward the 95% residual range to sketch an optimistic path and a stressed path around the same central prediction.
  2. Snapshot versus live. Where a stored snapshot already exists, the page may show "Stored snapshot" instead of triggering a fresh model run. Both are equally model-derived; snapshot only means the last persisted result is being served rather than recomputed on this page load.

6. Ranges, confidence, and extreme values

The low to high range shown around a forecast is an uncertainty band derived from historical model residuals on the log-transformed series. It is a statistical envelope, not a guaranteed outcome corridor.

Confidence labelWhat it means
HighThe model fit recent history tightly (low mean absolute error on the log scale); expect a narrower band.
ModerateA reasonable fit with some historical error; the band is wider than a high-confidence case.
LowLarger historical errors, often from thin data coverage; expect a noticeably wider band and treat the point estimate cautiously.

Large moves, such as a -37% twelve-month estimate, tend to appear when the model's projected level sits far from today's origin. This is more common with thin ZIP-level coverage, stressed scenarios, or low-confidence fits. That combination is still a model output, and it can still be wrong.

Treat an extreme projection as a prompt to check coverage, confidence, and scenario before acting on it, not as a settled prediction. When in doubt, prefer a high-confidence Base case over a low-confidence Downside extreme.

Not every ZIP or city has forecast coverage. If Forecast reports coverage as unavailable for a geography, that place is simply missing from the forecast catalog, even if it already has a live Market Score elsewhere on the site.

7. National indicators and rankings

National indicators, such as mortgage rates, inflation, unemployment, and the national ACS or BEA series, are plain time series with period-over-period change. They describe the U.S. backdrop as a whole. They do not describe any single city's score, and they should not be read as a city-level signal.

Weekly rankings score every place with a population of 50,000 or more using the exact same Market Score engine described above, then sort the results by a clamped, derived sort key. If the rankings table is empty, it means no completed ranking run is available yet, which can happen independently of the national indicators, which can remain fully live at the same time.

8. Drivers, momentum, and tags

Beyond the headline score, each market carries a few short, derived labels that summarize why it scored the way it did. These are computed from the same five sub-scores, not from separate models.

  • Driver is a single short phrase, such as "Affordability & Tight Supply" or "Rate Pressure," chosen from the strongest signal in the underlying sub-scores.
  • Primary drivers is a list of up to four plain-language bullets (for example, "Strong household income" or "Inventory is beginning to loosen") ranked by how strongly each sub-score pushed the composite up or down.
  • Momentum is a coarse directional label like "+3 to 5pt" or "Flat," derived from where the composite sits, not from a trend calculation over time.
  • Tags are short chips such as "Low Supply," "Affordable," or "Rate Sensitive," generated from the same thresholds used elsewhere in the engine, capped at four per market.

All four are presentation layers on top of the Market Score composite. If you want the ground truth behind any of them, the five weighted sub-scores below are the complete explanation.

9. How much authority to put in the numbers

  • Scores are transparent heuristics over public data. They are useful for screening and comparison. They are not an appraisal, an underwriting decision, or a valuation.
  • Forecasts are statistical projections with attached uncertainty bands. They can be directionally useful and can still miss turning points, local shocks, or gaps in the underlying data.
  • Before drawing a conclusion, check the data quality label (Live versus Partial), the forecast confidence tier, and whether you are reading a Market Score narrative band or an actual machine-learning forecast.

Metro Analytics is research tooling only. It is not investment, legal, or financial advice.

10. Data sources

Every number on Metro Analytics traces back to one of four sources. Here's what each one feeds and how often it's refreshed.

Census ACS
Demographics & housing

5-year estimates for ACS median home value, household income, rental vacancy rate, and educational attainment. The ACS home value is owner-estimated, not a live sale or listing price. Powers Affordability, Supply & Demand, Income Quality, and Education.

Refreshed as new ACS vintages are published
FRED
Macro indicators

30-year fixed mortgage rate, national unemployment rate, and CPI year over year. Powers the Macro Environment sub-score and the national Indicator Signal Center.

Daily via the indicators cron job
BEA
State income data

State-level per-capita personal income and its growth rate. Adjusts the Income Quality sub-score up or down relative to the national baseline.

Updated on BEA's quarterly release schedule
metro-forecast
External ML service

A dedicated forecasting service that projects home-value and economic series forward. Entirely separate from the Market Score engine, and only available when configured.

On demand, with stored snapshots where available

11. Frequently asked questions

Is the Market Score the same thing as the Forecast?

No. The Market Score is a rules-based composite over public ACS, FRED, and BEA data, updated live. The Forecast is a separate machine-learning service that projects a series forward in time. They can move independently and should not be compared directly.

Why does a market show “Partial” instead of “Live” data quality?

ACS demographic data is required to compute a score at all. If FRED or BEA data is temporarily missing or incomplete for that market, the engine falls back to documented default values so the page still renders, and it labels itself Partial so you know real macro data was not fully available.

Why did a score or ranking change week over week?

Rankings are recomputed weekly, on Mondays, against the latest available ACS, FRED, and BEA inputs. Small movements in underlying series, or a market crossing a scoring threshold, can shift its position even when nothing looks obviously wrong.

What does it mean if Forecast says a city or ZIP is not covered?

The forecast model has its own coverage catalog, separate from the Market Score engine. A place can have a live Market Score while still being outside metro-forecast's covered geographies.

Should I treat a large negative or positive forecast as a guarantee?

No. Large moves are still model outputs with uncertainty bands attached. Check the confidence label first: low confidence paired with an extreme scenario is a cue to dig into coverage and assumptions, not a settled prediction.

See the methodology in action

Browse live Market Scores and rankings, or open the Forecast Center to see model confidence and scenario bands for yourself.

Browse marketsOpen Forecast