# F1-conf-01 — 12-month CPI inflation from two data vintages ## Question For each month t from 2001-01 to 2026-09, compute g_t = 100 × (P_t / P_{t−12} − 1) for CPIAUCSL (seasonally adjusted), where P comes from the most recent vintage covering that month. Then summarise: overall and sub-period means, five named months, and the extremes. ## Data and exclusions - I used two authoritative inputs: `cpi_vintage_2016-07-15.csv` (834 rows, 1947-01..2016-06) and `cpi_vintage_2026-10-28.csv` (153 rows, 2014-01..2026-09) (`n_input_rows`). - `cpi_assembled.csv` (957 rows) was read only to audit it. It has three assembly errors, listed in `data_issues`: - the overlap months 2014-01..2016-06 carry the older vintage's values; - 2016-07 is missing; - every value from 2016-08 onward sits one month late, which creates a spurious 2026-10 row. Because of these errors I did not use it. The series was rebuilt from the two vintage files. - The 2026-10-28 vintage has an empty cell for 2025-10 (`data_issues`). This value was not imputed. - Exclusion ledger (`out/exclusions.csv`): the window has 309 months (`n_window_months`). One month (2025-10) was removed for lacking P_t, and none were removed for lacking P_{t−12}. That leaves 308 analysed months (`n_analysed`, `n_months_growth`) and 1 missing month (`n_months_missing_growth`, `missing_growth_months`). ## Method - **Index level by month:** the level for 2014-01..2026-09 comes from the 2026-10-28 vintage, including its empty 2025-10 cell. Earlier months use the 2016-07-15 vintage. - **Growth rate:** g_t is computed on a contiguous monthly grid. Growth is missing wherever either level is missing. - **Seam months:** for 2014-01..2014-12 the lagged level is from the 2016 vintage, as the availability rule requires. - **Summaries:** simple arithmetic means over the available g_t. - **Reproducibility:** the computation is deterministic and uses no randomness (`random_seed` = null). `out/analysis.py` regenerates every output. - **Baseline:** the task labels the 2001–2013 sub-period mean as the baseline (`mean_growth_12m_2001_2013`). No further model was needed. ## Results - First month with a growth rate: 2001-01 (`first_growth_month`). Last month with a level: 2026-09 (`last_month`). - Mean 12-month inflation was **2.574%** over the 308 analysed months (`mean_growth_12m`). By sub-period: - 2001-01..2013-12: **2.361%** (`mean_growth_12m_2001_2013`, 156 months, `n_growth_2001_2013`); - 2014-01..2026-09: **2.793%** (`mean_growth_12m_2014_2026`, 152 months, `n_growth_2014_2026`). - Named months: | month | g_t | key | |---|---|---| | 2014-06 | 2.098% | `growth_2014_06` | | 2016-07 | 0.868% | `growth_2016_07` | | 2020-05 | 0.198% | `growth_2020_05` | | 2022-06 | 8.979% | `growth_2022_06` | | 2026-09 | 3.717% | `growth_2026_09` | - Maximum: **8.979% in 2022-06** (`max_growth_12m`, `max_growth_month`). Minimum: **−1.959% in 2009-07** (`min_growth_12m`, `min_growth_month`). - Standard deviation of g_t over the window: 1.741 percentage points (`sd_growth_12m`). - Feasibility is "partial" (`feasibility`, `feasibility_reason`) because g for 2025-10 cannot be computed. All summary estimands were still computed from the 308 available months. ## Uncertainty These figures are computed directly from published data, not estimated from a sample, so there are no sampling standard errors. The remaining uncertainty comes from data revisions: - In the 30 overlapping months the two vintages differ by up to about 0.5 index points, because seasonal factors were revised. - So the 2001–2013 figures would change somewhat under a newer vintage. - The 2014 growth rates combine levels from two vintages. I did not quantify this revision uncertainty. ## Limitations and open issues - **Missing month:** 2025-10 has no published level in the latest vintage, so its g_t is missing. Following the rules, I did not interpolate it. As a result, the 2014–2026 sub-period mean covers 152 of 153 months. - **Mixed vintages:** the rule mixes vintages, so g_t for 2014-01..2014-12 compares a 2026-vintage level with a 2016-vintage level. - **Assembled file:** `cpi_assembled.csv` contains assembly errors and was not used. Using it would have produced wrong overlap values and growth rates shifted by one month after 2016-07. - **Hash mismatch:** the SHA-256 values in `data/README.md` refer to the raw downloads, not the reformatted files, so they could not be checked against the files. The hashes I computed myself are in `out/state/data_audit.md`.