Expectations / Methodology
Survey of Professional Forecasters expectations layer: methodology
This route is a read-only expectations layer over data/parquet/spf_point.parquet and data/parquet/spf_micro.parquet, the normalized consensus and anonymized respondent exports built by scripts/build_spf.py. It publishes what the Federal Reserve Bank of Philadelphia's Survey of Professional Forecasters (SPF) respondents said. It does not fit a model, smooth a series, or infer any missing expectation off-platform.
1. Source and local coverage
- Primary source: Federal Reserve Bank of Philadelphia, Survey of Professional Forecasters (SPF). The local
spf-documentation.pdfis the authoritative codebook for the horizon and variable definitions below. - Cadence: quarterly. Per the Philadelphia Fed SPF FAQ, the questionnaire is sent on the day the BEA releases its first estimate of GDP, the deadline is about 10 days later, and publication is about three days after the deadline.
- Local consensus parquet:
spf_point.parquet, 86,074 rows, 54 variables, with surveys from 1968Q4 through 2026Q2. - Local respondent parquet:
spf_micro.parquet, 1,959,101 observations, 60 variables, and 463 anonymized forecaster IDs. - Local RECESS coverage: 41,541 non-null point responses from 1968Q4 through 2026Q2. Horizons 1 through 4 each cover 231 survey rounds and horizon 5 covers 227. Respondent counts vary by survey and horizon; the page reports
nfor every latest point and every historical hover value. - Displayed vintage: the route and this methodology page query the latest survey round from the parquet at render time. They do not depend on a live release-calendar date.
2. What is selected
The shipped tables and revision view surface five headline SPF variables from the broader file:
| Code | Official variable name | Official definition / unit | Why it is on the page |
|---|---|---|---|
RGDP | Real Gross National Product/Gross Domestic Product | Billions of real dollars. Seasonally adjusted. Annual rate. Real GNP prior to 1992; real GDP 1992-present. | Real activity level |
CPI | CPI Inflation Rate | Annualized percentage points. Seasonally adjusted. Based on quarterly average index level. | Headline inflation |
COREPCE | Core PCE Inflation Rate | Annualized percentage points. Seasonally adjusted. Based on quarterly average index level. | Core inflation measure the Fed watches closely |
UNEMP | Civilian Unemployment Rate | Percentage points. Seasonally adjusted. Quarterly average. | Labor-market slack |
TBOND | 10-Year Treasury Bond Rate | Percentage points. Not seasonally adjusted. Quarterly average. | Long risk-free rate |
The new median path and dispersion panels select RGDP, CPI, UNEMP, and TBOND from that same five-variable list. COREPCE remains in the shipped tables and revisions, but is not added to the new panels. The full SPF parquet carries many more variables (NGDP, EMP, INDPROD, HOUSING, BOND, BAABOND, long-horizon inflation series, implied real rates, and others). They stay in the file but are not surfaced on this page.
3. Mean versus median
The SPF parquet carries both stat='mean' and stat='median'. The route exposes that choice explicitly in the URL and on the page header:
?stat=median= the median consensus?stat=mean= the mean consensus
The shipped latest-path table, revision table, hero values, and unemployment vintage chart honor that selection. The three added panels are deliberately median-only, even when the shipped views display means:
- latest quarterly median paths
- respondent interquartile-range histories
- horizon-6 median forecast errors
That boundary is stated on the page and is never inferred from the URL switch.
The recession-probability exhibits are separate from that switch. They recompute the mean, median, and quartiles from non-null individual RECESS responses in spf_micro.parquet; they never read the published mean or median from spf_point.parquet and never average an already-aggregated statistic.
4. Horizon grammar
The SPF point sheets use the Philadelphia Fed's horizon grammar, preserved verbatim in the parquet:
1: prior quarter's preliminary value2: current-quarter nowcast3to6: one to four quarters aheadAtoD: current calendar year through three calendar years aheadLR: long-run value (not used on this route)
The page's quarterly path begins at 2, not 1, because horizon 1 is not a forward quarter.
RECESS horizon grammar
RECESS has its own official horizon definition and must not inherit the level-sheet mapping above. It measures the respondent-assigned probability, in percentage points, that real output declines from one quarter to the next:
| Code | Target event in a survey conducted in quarter t | Target quarter |
|---|---|---|
RECESS1 | Real output in t is below its level in t-1 | survey quarter |
RECESS2 | Real output in t+1 is below its level in t | one quarter after survey; the Anxious Index |
RECESS3 | Real output in t+2 is below its level in t+1 | two quarters after survey |
RECESS4 | Real output in t+3 is below its level in t+2 | three quarters after survey |
RECESS5 | Real output in t+4 is below its level in t+3 | four quarters after survey |
The mapping is calendar-quarter aware. For example, in a 2025Q4 survey the five targets are 2025Q4, 2026Q1, 2026Q2, 2026Q3, and 2026Q4. The executable quality fixture also checks a 1999Q4 to 2000 rollover so an off-by-one or year-boundary error fails the gate.
The output concept changes with the source survey: real GNP before 1992Q1, fixed-weighted real GDP from 1992 through 1995, and chain-weighted real GDP thereafter. These probabilities are not NBER recession classifications.
5. What each exhibit computes
Recession-probability path and history
The latest path groups individual, non-null variable='RECESS', kind='point' responses by survey round and horizon. For each available group it returns only these bounded aggregates:
- non-null respondent count
- arithmetic mean probability
- median probability
- continuous 25th percentile
- continuous 75th percentile
Missing responses are absent; they are never recoded to zero. Missing horizon groups remain missing rather than being filled or interpolated. The arithmetic mean is the average probability assigned by respondents, not the percentage of respondents predicting that a decline will occur. No respondent or survey weights are applied because the Philadelphia Fed documentation does not specify them for this calculation.
The historical panel fixes the definition at RECESS2 in every survey. It therefore traces the same next-quarter event horizon, known as the Anxious Index, rather than mixing current-quarter and varying-ahead forecasts. The line shows the mean respondent-assigned probability, the dashed line shows the median response, and the band spans the 25th to 75th percentiles. Each hover value reports the non-null n for that survey.
Both exhibits report professional-forecaster beliefs. They are not FinObservatory model estimates, probabilities inferred from realized data, the fraction of respondents making a binary recession call, or realized recession indicators.
Latest path table
For the latest survey round in the local parquet, the table shows:
- quarterly horizons
2to6 - annual horizons
A,B, andC
These are direct SPF point forecasts from spf_point.parquet. No transformation is applied other than row/column layout.
Revision table
For the same five variables, the revision table compares the latest local survey against the immediately previous local survey:
- current-quarter nowcast revision = latest
horizon='2'minus priorhorizon='2' - four-quarters-ahead revision = latest
horizon='6'minus priorhorizon='6' - next-calendar-year revision = latest
horizon='B'minus priorhorizon='B'
These are differences between two published SPF consensus points, not model-implied deltas.
Median path small multiples
The latest-survey panel uses horizons 2 through 6, from the current-quarter nowcast through four quarters ahead:
CPI,UNEMP, andTBONDuse the publishedstat='median'values fromspf_point.parquet.RGDPis stored as a real-GDP level, so growth is computed respondent by respondent from paired adjacent microdata levels:100 * ((current / previous)^4 - 1). The median is taken only after this transformation. Growth is never computed from aggregate median levels.
Target quarters are mapped from the survey quarter with horizon 2 at delta zero and horizon 6 at delta four.
One-year-ahead dispersion
The dispersion panel uses the full horizon-6 history in spf_micro.parquet. For each survey-variable pair it reports:
- the continuous 25th percentile
- the continuous median
- the continuous 75th percentile
- interquartile range = 75th percentile minus 25th percentile
- the non-null respondent count
For RGDP, each respondent's paired horizon-5 and horizon-6 levels are transformed to annualized quarterly growth before any percentile is computed. The latest response count is shown separately for each variable because panel participation differs across variables.
One-year-ahead forecast errors
The error panel matches each published horizon-6 SPF median to the complete realized quarter four quarters after its survey round. The sign convention is always:
error = forecast - realized
A positive value is an overforecast; a negative value is an underforecast. Realized mappings are limited to the three separately sourced comparators already on disk:
| SPF variable | Realized series | Transformation |
|---|---|---|
CPI | FRED CPIAUCSL | Average the three monthly index levels in each complete quarter, then compute annualized quarter-over-quarter growth. Both the target and previous quarters must be complete. |
UNEMP | FRED UNRATE | Average the three monthly observations in each complete quarter. |
TBOND | FRED DGS10 | Average daily observations within completed calendar quarters. |
No error comparator is added for RGDP or COREPCE. The latest matched target in the current data is 2026Q2, using the 2025Q2 horizon-6 forecasts.
Vintage chart
The vintage chart uses UNEMP because it has the cleanest realized comparator already on disk:
- each thin line is one SPF unemployment forecast path from survey quarter through four quarters ahead (
2to6) - surveys shown: 2019Q1 through 2025Q2
- realized line: quarterly average of monthly
UNRATEfromfred_macro.parquet
The vintage chart remains distinct from the median-only forecast-error panel. It honors the page's mean-versus-median switch and shows whole unemployment paths against the direct quarterly-average realized comparator.
6. Out of scope by design
- probability-bin SPF series
- any FinObservatory nowcast or forecast
- any realized-series mapping beyond
CPIAUCSL,UNRATE, andDGS10 - any subscriber-only gating