1# F1-conf-01 — 12-month CPI inflation from two data vintages23## Question4For 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.56## Data and exclusions7- 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`).8- `cpi_assembled.csv` (957 rows) was read only to audit it. It has three assembly errors, listed in `data_issues`:9 - the overlap months 2014-01..2016-06 carry the older vintage's values;10 - 2016-07 is missing;11 - every value from 2016-08 onward sits one month late, which creates a spurious 2026-10 row.1213 Because of these errors I did not use it. The series was rebuilt from the two vintage files.14- The 2026-10-28 vintage has an empty cell for 2025-10 (`data_issues`). This value was not imputed.15- 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`).1617## Method18- **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.19- **Growth rate:** g_t is computed on a contiguous monthly grid. Growth is missing wherever either level is missing.20- **Seam months:** for 2014-01..2014-12 the lagged level is from the 2016 vintage, as the availability rule requires.21- **Summaries:** simple arithmetic means over the available g_t.22- **Reproducibility:** the computation is deterministic and uses no randomness (`random_seed` = null). `out/analysis.py` regenerates every output.23- **Baseline:** the task labels the 2001–2013 sub-period mean as the baseline (`mean_growth_12m_2001_2013`). No further model was needed.2425## Results26- First month with a growth rate: 2001-01 (`first_growth_month`). Last month with a level: 2026-09 (`last_month`).27- Mean 12-month inflation was **2.574%** over the 308 analysed months (`mean_growth_12m`). By sub-period:28 - 2001-01..2013-12: **2.361%** (`mean_growth_12m_2001_2013`, 156 months, `n_growth_2001_2013`);29 - 2014-01..2026-09: **2.793%** (`mean_growth_12m_2014_2026`, 152 months, `n_growth_2014_2026`).30- Named months:3132 | month | g_t | key |33 |---|---|---|34 | 2014-06 | 2.098% | `growth_2014_06` |35 | 2016-07 | 0.868% | `growth_2016_07` |36 | 2020-05 | 0.198% | `growth_2020_05` |37 | 2022-06 | 8.979% | `growth_2022_06` |38 | 2026-09 | 3.717% | `growth_2026_09` |3940- Maximum: **8.979% in 2022-06** (`max_growth_12m`, `max_growth_month`). Minimum: **−1.959% in 2009-07** (`min_growth_12m`, `min_growth_month`).41- Standard deviation of g_t over the window: 1.741 percentage points (`sd_growth_12m`).42- 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.4344## Uncertainty45These 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:46- In the 30 overlapping months the two vintages differ by up to about 0.5 index points, because seasonal factors were revised.47- So the 2001–2013 figures would change somewhat under a newer vintage.48- The 2014 growth rates combine levels from two vintages.4950I did not quantify this revision uncertainty.5152## Limitations and open issues53- **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.54- **Mixed vintages:** the rule mixes vintages, so g_t for 2014-01..2014-12 compares a 2026-vintage level with a 2016-vintage level.55- **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.56- **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`.57