SPB Git

spb/wp37_uqo

Public

This looks like a research repository (LaTeX, bibliography, figures). Preview Research Mode· enable it with research: true on the API.

History
NameLast commitUpdated
config phase3: preregistration frozen (hypotheses H1-H6, estimands, basket, QGPAI...
data phase9: full re-run (identical summaries), independent recomputation audit,...
experiments phase4-7: model B episode classification + event study by feed type, robustness,...
literature phase8: full manuscript (12 sections + appendix), verified bibliography,...
paper final: tier C validation counts aligned with round-3 labels
reports final: recalibrated matching numbers in prose, LLM cost total, recompiled...
research final: recalibrated matching numbers in prose, LLM cost total, recompiled...
src final: recalibrated matching numbers in prose, LLM cost total, recompiled...
tests phase8: full manuscript (12 sections + appendix), verified bibliography,...
.gitignore chore: WP37 skeleton from UQO template, verbatim mandate, raw-data provenance
CLAUDE.md chore: WP37 skeleton from UQO template, verbatim mandate, raw-data provenance
Makefile phase8: full manuscript (12 sections + appendix), verified bibliography,...
pyproject.toml phase4: models A (dispersion), C (spillovers), D (indices), E (basket MIP), F...
README.md final: recalibrated matching numbers in prose, LLM cost total, recompiled...
requirements-lock.txt phase4: models A (dispersion), C (spillovers), D (indices), E (basket MIP), F...
README.md source

# WP37 — The Hidden Architecture of Grocery Prices: Promotions, Retail Competition, and the Cost of Living in Quebec

UQO Working Paper No. 37 — Simon-Pierre Boucher, Département des sciences administratives, Université du Québec en Outaouais. Version 1.0, November 2026.

Reproducible research pipeline built on a read-only snapshot of the Food-Ka database (owner export, 2026-11-01). Nothing in production was modified; the raw snapshot is not committed (data/raw/README.md documents provenance and checksum).

# Layout

text
CLAUDE.md                     mandate (verbatim)
config/settings.yaml          paths, seed (20261101), snapshot identity, scope
config/basket.yaml            preregistered 30-item basket (frozen)
research/preregistration.md   frozen hypotheses H1–H6, estimands, analysis plan (sha256 in research/decisions.md)
research/decisions.md         decision log and amendments A-001 … A-003
src/ingestion                 snapshot → parquet; Statistics Canada WDS benchmarks
src/cleaning                  unit normalisation, retailer hierarchy, daily/weekly panel reconstruction, coverage
src/matching                  tiered cross-banner matching, UPC calibration, LLM second annotation, validation
src/econometrics              matched panels, Model A (dispersion), B (promotions), C (spillovers), robustness
src/indices                   Model D (indices), Model E (basket MIP), QGPAI
src/forecasting               Model F (rolling-origin forecasts)
src/reports                   Phase 1 audit, LaTeX tables, figures
literature/                   seed references, Crossref-verified metadata, evidence matrix
experiments/                  JSON summaries of every model
paper/                        main.tex, sections/, tables/, figures/, references.bib, main.pdf
reports/                      phase0_feasibility, phase1_data_audit, referee_1, referee_2, limitations, reproducibility
logs/                         run ledger (md + jsonl), manifests with SHA-256 of outputs, pipeline log
tests/                        pytest (units, panel invariants, matching rules, output consistency)

# Reproduce

text
make env          # uv venv (Python 3.12) + pinned deps (requirements-lock.txt)
make ingest panel match validate phase4 phase5 robust tables figures paper
make test

The LLM second annotation (src/matching/llm_annotate.py) needs ANTHROPIC_API_KEY in .env; its labels are stored in data/processed/match_validation_sample.csv so the rest of the pipeline runs without API access. Total LLM cost of the project: 1.58 USD (four annotation runs, logged in logs/run_ledger.jsonl).

# Key design decisions (see reports/phase0_feasibility.md and reports/phase1_data_audit.md)

  • Posted price = weekly duration-weighted modal price (store-mixture noise in anti-bot storefront feeds).
  • Primary matching tiers A (UPC) + B (brand + package + identical token set); C and D in sensitivity only.
  • No store geography, no regular-price history, no quantities: H4 geography and QGPAI component 5 are explicitly not computed.

Clone wp37_uqo

Anonymous clone and fetch. Pushing requires the owner's personal access token.

ZIP tar.gz snapshot of main
Files · main
Menu

Theme