SPB Git

spb/wp10_uqo Public

UQO Working Paper No. 10 — The assessment gap in Quebec: vertical and horizontal inequity in municipal property assessment.

TeX 55.9% Python 44%
9.6 KB · 201 lines markdown
Rendered Raw Blame History
1<!-- Author: Simon-Pierre Boucher — contact@spboucher.ai -->2# ⚖️ The Assessment Gap in Quebec34**UQO Working Paper No. 10** — *Vertical and Horizontal Inequity in Municipal5Property Valuation: Evidence from 522,769 Sales Matched to the Assessment Roll*67[![Paper](https://img.shields.io/badge/paper-PDF%20(29%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf)8[![Python](https://img.shields.io/badge/python-3.11%2B-3776AB?logo=python&logoColor=white)](requirements.txt)9[![Data](https://img.shields.io/badge/data-745%2C119%20matched%20sales%20·%20parquet-4051b5)](data/raw/README.md)10[![Estimation](https://img.shields.io/badge/estimation-statsmodels%20·%20linearmodels%20(AbsorbingLS%20%2B%20IV2SLS)-4051b5)](src/wp10/models.py)11[![Reproducible](https://img.shields.io/badge/reproducible-end--to--end%20pipeline-2e7d32)](scripts/)12[![Institution](https://img.shields.io/badge/UQO-D%C3%A9pt.%20des%20sciences%20administratives-16365c)](https://uqo.ca)13[![Author](https://img.shields.io/badge/author-Simon--Pierre%20Boucher-16365c)](mailto:contact@spboucher.ai)14[![Contact](https://img.shields.io/badge/contact-contact%40spboucher.ai-a02020?logo=maildotru&logoColor=white)](mailto:contact@spboucher.ai)1516> **TL;DR** — Matching 522,769 Quebec residential sales (2021–2026) to the triennial17> assessment rolls that tax them, this paper delivers the **first province-wide audit18> of property-assessment equity in Canada**. Within the same municipality × roll ×19> year, the elasticity of the assessment ratio w.r.t. price is **−0.34** (Cheng FE)20> and still **−0.08** under Clapp's measurement-error-robust IV. **99% of21> municipalities** fail the IAAO uniformity standard, **95%** fail its vertical-equity22> standard — Montréal is the lone progressive large market. The median dwelling in the23> bottom local price decile pays **~65% more property tax** than uniform assessment24> would imply; the top decile pays ~5% less.2526---2728## 📖 Table of contents29301. [What this paper does](#-what-this-paper-does)312. [Headline results](#-headline-results)323. [Repository layout](#-repository-layout)334. [Quick start](#-quick-start)345. [The pipeline, step by step](#-the-pipeline-step-by-step)356. [Data](#-data)367. [Methodology](#-methodology)378. [Figures & tables inventory](#-figures--tables-inventory)389. [Limitations](#-limitations)3910. [Citation](#-citation)4011. [Author & contact](#-author--contact)4142---4344## 🎯 What this paper does4546Quebec taxes every dwelling in proportion to its **assessed value**, redrawn on a47triennial roll whose values must, by statute (art. 46 LFM), reflect market conditions48at a single reference date. If assessments are *regressive* — cheap homes overvalued49relative to expensive ones — the effective tax rate falls with wealth, silently.50This project measures that gap at province scale:5152```53ln AV_i = α_c(i) + β · ln SP_i + ε_i      (c = municipality × roll × sale-year)54```5556- **γ = β − 1** is the elasticity of the assessment ratio w.r.t. price57  (γ < 0 ⇒ regressive), identified **within** 2,884 market-timing cells;58- the **Clapp (1990) rank IV** purges the attenuation bias that pushes naïve59  ratio studies toward spurious regressivity;60- the full **IAAO ratio-study battery** (median ratio, COD, PRD, PRB) with61  bootstrap CIs is computed for every municipality with ≥ 100 usable sales;62- quantile profiles, subgroup elasticities, horizontal-dispersion regressions and63  an exact **intra-municipal tax-shift** calculation complete the audit.6465## 🏆 Headline results6667| Object | Estimate |68|---|---|69| Cheng elasticity, pooled OLS | β = 0.812 (0.029) |70| Cheng elasticity, cell FE | **β = 0.656 (0.029)** → γ = −0.344 |71| Clapp rank-IV (error-robust) | **β = 0.917 (0.021)** → γ = −0.083 |72| Quantile profile β(τ), τ = .10 → .90 | 0.87 → **0.49** (failure concentrated at the top) |73| Province-wide PRB (2021 / 2024) | −0.104 / −0.002 (staleness mechanism) |74| Municipalities with PRB < 0 | **99%** (95% below IAAO band) |75| Median municipality COD | 26 (IAAO ceiling: 15) |76| Excess tax, bottom ↔ top local decile | **+65% ↔ −5%** (median) |77| The exception | Montréal: PRB **+0.07**, progressive in all 6 years |7879Sub-group anatomy: condos γ = −0.12 vs single-family −0.45 / plex −0.49;80land share > 0.4 → −0.50; age > 60 y → −0.43; large markets (>10k sales) −0.27.8182## 🗂 Repository layout8384```85wp10_uqo/86├── data/87│   ├── raw/                  # matched sales–roll snapshot (see data/raw/README.md)88│   └── processed/            # analysis.parquet (built by step 01)89├── src/wp10/                 # reusable package90│   ├── config.py             # paths, thresholds, constants91│   ├── sample.py             # sample construction & variable definitions92│   ├── iaao.py               # COD / PRD / PRB + bootstrap CIs93│   ├── models.py             # Cheng FE, Clapp IV, quantiles, horizontal, tax shift94│   └── plotstyle.py          # journal-calibre matplotlib style (validated palette)95├── scripts/                  # the pipeline, in order96│   ├── 01_build_sample.py97│   ├── 02_iaao_stats.py98│   ├── 03_estimate_regressions.py99│   ├── 04_make_figures.py100│   └── 05_make_tables.py101├── results/102│   ├── reproduced/           # every CSV the scripts emit103│   └── tables/               # LaTeX tables input by the paper104├── figures/                  # 10 publication figures (PNG, 300 dpi)105└── paper/                    # main.tex + sections/ + references.bib → main.pdf106```107108## 🚀 Quick start109110```bash111cd wp10_uqo112python3 -m pip install -r requirements.txt113114# place the parquet snapshot in data/raw/ (see data/raw/README.md), then:115python3 scripts/01_build_sample.py         # 745,119 → 522,769 sales116python3 scripts/02_iaao_stats.py           # IAAO diagnostics + bootstrap117python3 scripts/03_estimate_regressions.py # FE / IV / quantile / heterogeneity / tax shift118python3 scripts/04_make_figures.py         # 10 figures119python3 scripts/05_make_tables.py          # 10 LaTeX tables120121cd paper && make                           # compile main.pdf (latexmk)122```123124Total runtime ≈ 5 minutes on an Apple-silicon laptop; peak RAM ≈ 6 GB.125126## 🗃 Data127128745,119 residential-market transactions (Jan 2021 – Jul 2026) matched at the129**parcel level** to the assessment roll in force at the sale date (median match130distance 0.6 m; every retained sale reproduces the roll value exactly). From the131roll: total/land/building assessed values, lot & floor areas, year built, unit132count, CUBF use code, roll vintage and the statutory market-condition date.133Sample cascade (details in the paper, §4): residential CUBF → match quality →134valid AV/SP → 1/99% ratio trim within roll vintage → cells ≥ 20 sales135**522,769 sales, 625 municipalities, 2,884 cells**.136137## 🔬 Methodology1381391. **IAAO diagnostics** (Standard on Ratio Studies, 2013) within140   municipality × sale-year blocks, aggregated by median — COD, PRD, PRB with141   percentile-bootstrap CIs (`src/wp10/iaao.py`).1422. **Cheng (1974) log-log regression** with 2,884 absorbed fixed effects143   (linearmodels `AbsorbingLS`), SEs clustered on 625 municipalities.1443. **Clapp (1990) rank IV** — Z ∈ {−1,0,+1} from within-cell rank agreement of145   ln AV and ln SP, 2SLS on demeaned data (`IV2SLS`) — the conservative bound.1464. **Quantile regressions** on within-cell demeaned data (τ = .10….90).1475. **Heterogeneity**: separate FE estimates by class, age, land share, roll lag,148   municipality size, sale year.1496. **Horizontal inequity**: |ln r − cell median| regressed on characteristics.1507. **Tax shift**: r / cell-median − 1 by within-cell price decile — exact %151   over/under-payment under Quebec's exemption-free ad valorem rule.152153## 🖼 Figures & tables inventory154155| Figure | Content |156|---|---|157| `fig_ratio_dist` | ratio distribution + by roll lag (Panels A/B) |158| `fig_time` | median ratio by month × roll vintage (staleness drift) |159| `fig_binscatter` | within-cell ln ratio vs ln price, 20 bins — the core fact |160| `fig_quantile` | β(τ) profile with FE/IV benchmarks |161| `fig_heterogeneity` | forest plot of subgroup γ |162| `fig_prb_muni`, `fig_cod` | municipal PRB / COD distributions vs IAAO bands |163| `fig_map` | province map of municipal PRB (Montréal exception) |164| `fig_taxshift` | excess tax burden by local price decile |165| `fig_robustness` | γ_FE vs γ_IV across 10 sample variants |166167Tables (`results/tables/*.tex`): summary stats, IAAO province-wide, ten largest168markets, vertical regressions, quantiles, heterogeneity, horizontal, tax shift,169robustness, Paglin–Fogarty.170171## ⚠️ Limitations172173- Sales < $50k absent from the source registry; residual non-arm's-length174  transfers may survive screens (bottom-decile shift = upper bound).175- 2021–2026 is an unusually turbulent market — levels statistics are176  period-specific (the within-market elasticity is not).177- No appeals, renovations, or owner demographics observed.178- Montréal's progressivity may partly reflect borough-level composition.179180## 📝 Citation181182```bibtex183@techreport{boucher2026assessmentgap,184  author      = {Boucher, Simon-Pierre},185  title       = {The Assessment Gap in Quebec: Vertical and Horizontal Inequity186                 in Municipal Property Valuation},187  institution = {Universit\'e du Qu\'ebec en Outaouais,188                 D\'epartement des sciences administratives},189  type        = {Working Paper},190  number      = {10},191  year        = {2026},192  month       = {August}193}194```195196## 👤 Author & contact197198**Simon-Pierre Boucher** — Département des sciences administratives,199Université du Québec en Outaouais (UQO), Gatineau, QC.200📧 [contact@spboucher.ai](mailto:contact@spboucher.ai)201