SPB Git

spb/wp29_uqo

Public

# F1-conf-01 — 12-month CPI inflation from two data vintages

# Scientific question

Compute the 12-month growth rate of the U.S. consumer price index (CPIAUCSL, seasonally adjusted) for every month from 2001-01 through 2026-09 and summarise it. The estimand for month t is g_t = 100 × (P_t / P_{t−12} − 1) in percent, where P is the index level taken from the most recent data vintage in which that month is available; the summary estimands are the mean of g_t over the window, the sub-period means for 2001-01 … 2013-12 and 2014-01 … 2026-09, a few named months, and the months of the maximum and minimum growth.

# Inputs

  • data/cpi_vintage_2016-07-15.csv — observed data: CPIAUCSL as published by BLS/FRED in the ALFRED vintage of 2016-07-15, months 1947-01 to 2016-06 (834 rows). Columns date (ISO, first day of month), cpi (index, 1982–84 = 100). Source, retrieval date, license and SHA-256 in data/README.md.
  • data/cpi_vintage_2026-10-28.csv — observed data: CPIAUCSL in the ALFRED vintage of 2026-10-28, extract restricted to months 2014-01 to 2026-09 (153 rows). Same columns. An empty cpi cell means that the source reports no value for that month.
  • data/cpi_assembled.csv — a single file assembled from the two extracts above (columns date, cpi, vintage), intended to cover 1947-01 to 2026-09. It was assembled by hand and may contain assembly errors; the two vintage files are the authoritative inputs.

# Information-availability rules

  • For each month, the index level to use is the value from the most recent vintage in which that month is available (the 2026-10-28 vintage where it covers the month, the 2016-07-15 vintage otherwise).
  • Growth rates must only be computed from index levels that exist in the sources; do not interpolate or impute missing index levels. Months for which g_t cannot be computed are reported as missing and counted.
  • Use only the files under data/.

# Required outputs

  • out/results.json with the keys:
key type unit meaning
task_id string — "F1-conf-01"
first_growth_month string YYYY-MM first month of the window with a growth rate (expected "2001-01" if computable)
last_month string YYYY-MM last month of the window for which an index level exists in the sources
n_months_growth integer months months in the window with a computable g_t
n_months_missing_growth integer months months in the window without a computable g_t
n_analysed integer months same as n_months_growth
mean_growth_12m number percent mean of g_t over the window
mean_growth_12m_2001_2013 number percent baseline: mean of g_t over 2001-01 … 2013-12
mean_growth_12m_2014_2026 number percent mean of g_t over 2014-01 … 2026-09
growth_2014_06, growth_2016_07, growth_2020_05, growth_2022_06, growth_2026_09 number percent g_t for those months
max_growth_12m, max_growth_month number, string percent, YYYY-MM maximum g_t in the window and its month
min_growth_12m, min_growth_month number, string percent, YYYY-MM minimum g_t in the window and its month
feasibility string — "complete", "partial" or "infeasible"
feasibility_reason string or null — explanation if not complete
data_issues array of {"issue","handling"} — every data problem detected and how it was handled (empty list if none)
n_input_rows object rows {file name: number of data rows read (excluding the header)} for every file under data/ that was read
random_seed integer or null — seed used, if any
  • out/analytic.csv — one row per month of the window with a computable growth rate, columns date (YYYY-MM-01), cpi, cpi_lag12, vintage_used, growth_12m; exactly n_analysed rows.
  • out/exclusions.csv — the exclusion ledger with columns step, rule, n_before, n_after, n_removed, rationale; one row per step from the rows you start from to the n_analysed rows of out/analytic.csv (n_before − n_removed = n_after on every row; each step's n_before equals the previous step's n_after).
  • out/report.md with the sections: Question; Data and exclusions; Method; Results; Uncertainty; Limitations and open issues.
  • out/analysis.py — running ~/wp29/venv/bin/python out/analysis.py from the workspace root must regenerate out/results.json, out/analytic.csv and out/exclusions.csv from data/ only, deterministically.
  • out/claims.json — a list of the central claims of the report: [{"id": "C1", "text": "...", "results_keys": ["..."], "status": "supported"|"unsupported"|"not_evaluated", "caveat": "..."}].

# Constraints

  • No network access. Python: ~/wp29/venv/bin/python (numpy, pandas, scipy, statsmodels available). Do not modify data/.
  • This task is designed to be completed in well under 20 minutes of work.
Files · main
Menu

Theme