🏠 Airbnb, Residential Rents & Housing Market Pressure
A Hedonic and Spatial Econometric Analysis
UQO Working Paper No. 5
— The paper at a glance —
— Methods —
— Stack —
— Quality —
🧭 Navigation
| 📜 The Paper | 🔍 Abstract | 📖 Inside the Paper |
| 🏆 Headline Results | 📁 Repository Map | 💾 Data |
| ⚙️ Pipeline | 📐 Models | 🛡️ Robustness |
| 🚀 Reproduce | 🧰 Environment | ✅ Provenance |
| 📖 Citation | 📬 Contact |
📜 The Paper
Airbnb, Residential Rents, and Housing Market Pressure:
A Hedonic and Spatial Econometric Analysis
Simon-Pierre Boucher — Université du Québec en Outaouais UQO Working Paper No. 5 · May 2026 · 51 pages · 56 references
🔍 Abstract
This paper investigates the relationship between Airbnb short-term rental activity and residential rents in Quebec, Canada. Using cross-sectional microdata comprising ~5,000 Airbnb listings and ~8,300 rental listings, we employ a hedonic pricing framework augmented with spatial econometric techniques to quantify the conditional association between nearby Airbnb presence and monthly rents. For each rental listing we construct Airbnb exposure measures within 250 m, 500 m, 1 km, and 2 km buffers using Haversine distances. Baseline estimates indicate that an additional Airbnb listing within 500 m is associated with a statistically significant increase in monthly rent of approximately 0.3–0.5%, controlling for dwelling characteristics, building type, and city fixed effects. Quantile regressions reveal that the association is stronger at the upper tail of the rent distribution. A complementary hedonic model of Airbnb nightly prices indicates that short-term rental pricing is driven primarily by listing characteristics. Robustness checks — alternative buffer radii, subsample analyses, and machine-learning benchmarks — confirm the stability of the rent–exposure association. We discuss policy implications for housing affordability and short-term rental regulation, while cautioning that cross-sectional associations should not be interpreted as causal effects.
Keywords: Airbnb · short-term rentals · housing rents · hedonic pricing · spatial econometrics · housing affordability · Quebec JEL: R21 · R31 · L83 · C21
📖 Inside the Paper — Section by Section
| § | Section | What it delivers | Key exhibits |
|---|---|---|---|
| 1 | 🎬 Introduction | Motivation, the P2P-platform housing channel, the Canadian evidence gap, magnitude preview vs. Berlin/LA quasi-experiments, three contributions | — |
| 2 | 📚 Literature Review | 10 thematic subsections: correlational → quasi-experimental STR evidence, Canadian & Quebec studies, P2P economics, STR pricing, hedonic theory, spatial econometrics, quantile methods, ML in housing, tourism gentrification & regulation, gap statement | 56 refs |
| 3 | 💾 Data | Two scraped microdatasets, cleaning protocol, Haversine spatial buffer merge (6 exposure metrics × 4 radii), summary statistics, geography | Tables 1–2 · Figures 1–3 |
| 4 | 📐 Methodology | Six models: hedonic rent (1a–1e), Airbnb pricing (2a–2c), city-level (3), SAR/SEM via Kelejian–Prucha GMM (4), quantile (5), ML benchmark (6); identification & endogeneity discussion | Equations 1–6 |
| 5 | 📊 Results | β = 0.0039*** per nearby listing; spatial dependence (ρ̂ = 0.137***, λ̂ = 0.539); quantile gradient .0037→.0047; superhost discount; RF test R² = 0.71 | Tables 3–9 · Figures 4–7 |
| 6 | 🛡️ Robustness | Buffer decay, alternative exposures, subsamples, trimming, city-clustered SEs, size control, log form, ring decomposition, leave-one-city-out | Tables 10–12 · Figures 8–10 |
| 7 | 💬 Discussion | Magnitudes benchmarked against Berlin ($6–10 ≈ 7–13 €/listing), LA & Boston; two candid disagreements with the literature; policy for CITQ/Montreal zoning; 7 limitations; future work | — |
| 8 | 🎯 Conclusion | Five findings, cross-design corroboration, no overselling | — |
| A–C | 📎 Appendices | Variable dictionary, city-name standardisation, sample attrition · Haversine & KNN-weights formulas, estimator details · supplementary robustness | Tables A1–A2 |
🏆 Headline Results
| # | Finding | Evidence |
|---|---|---|
| 1 | Each additional Airbnb listing within 500 m ⇒ ≈ +0.4% monthly rent (0.3–0.5% across specs) — ≈ $6–10/month at the median rent, the same order as Berlin's quasi-experimental 7–13 €/listing | Table 3 (1c) · §7.1 |
| 2 | Per-listing association decays monotonically with distance | Table 10 · Fig. 4 |
| 3 | Significant at every quantile, rising to 0.0047 at τ = 0.90 (~25% above OLS) | Table 7 · Fig. 5 |
| 4 | Spatial dependence is substantial and the coefficient survives GMM spatial models with mild attenuation (0.0034) | Table 6 |
| 5 | Airbnb nightly prices driven by listing characteristics; superhost enters with a discount (vs. premia in prior work — discussed, not hidden) | Table 4 · §7.1 |
| 6 | Robust to city-clustered SEs (tighter than HC1), size control, log(1+count), ring decomposition, trimming, and dropping any of the 8 largest cities | Table 12 · Fig. 9 |
📁 Repository Map
wp5_uqo/
├── 📄 README.md ← you are here
├── 🔎 AUDIT.md ← forensic audit of the original project
├── 📝 CHANGES.md ← restructuring & rewrite log
├── 🧪 PAPER_REVIEW.md ← pre-upgrade critical assessment
├── 📚 UPGRADE_REPORT.md ← literature expansion report (per-ref justification)
├── 📦 requirements.txt ← pinned dependencies
│
├── data/
│ ├── raw/ ← airbnb.csv + rent.json (NOT distributed → README)
│ └── processed/ ← 5 verified parquet datasets (committed)
│
├── src/ ← shared modules
│ ├── config.py ← all paths & constants
│ ├── geo.py ← vectorised Haversine matrix
│ ├── latex_tables.py ← stargazer-style table builder
│ └── plotting.py ← publication matplotlib styles
│
├── scripts/ ← 01 → 11 numbered pipeline
├── figures/ ← 16 publication PDF figures
├── results/tables/ ← 13 LaTeX fragments + 4 CSVs
├── results/logs/ ← data-inspection log
│
└── paper/ ← LaTeX → 📄 main.pdf (51 pages)
├── main.tex · references.bib (56 entries) · Makefile
├── sections/ (titlepage + 8 sections)
└── appendix/ (data · methods · robustness)💾 Data
| Dataset | Source | Raw → Clean | Key fields |
|---|---|---|---|
| 🛏️ Airbnb listings | Airbnb (scraped) | ~5,000 → 3,456 | nightly price, lat/lon, property type, rating, reviews, superhost |
| 🏢 Rental listings | Realtor.ca (scraped) | 8,356 → 8,303 | monthly rent, lat/lon, bedrooms, bathrooms, building type, size |
Spatial merge — for every rental listing × radius r ∈ {250 m, 500 m, 1 km, 2 km}, six metrics computed against all Airbnb listings via chunked vectorised Haversine distances: count · density · mean_price · share_entire_home · mean_rating · superhost_share, plus city-level aggregates.
🔒 Raw files are not distributed (
data/raw/README.md). The committed parquets make steps 04–11 and the paper fully reproducible without them.
⚙️ Analysis Pipeline
| Step | Script | Produces | ⏱ |
|---|---|---|---|
| 01 | 01_inspect_raw_data.py |
data dictionary log | ⚡ |
| 02 | 02_clean_airbnb.py |
airbnb_clean.parquet |
⚡ |
| 03 | 03_clean_rent.py |
rent_clean.parquet |
⚡ |
| 04 | 04_merge_data.py |
3 merged parquets (buffer merge) | ~1 min |
| 05 | 05_descriptive_analysis.py |
3 tables + 7 figures | ⚡ |
| 06 | 06_hedonic_models.py |
Models 1–3 → 3 tables | ⚡ |
| 07 | 07_spatial_models.py |
SAR/SEM + buffer robustness | ~1 min |
| 08 | 08_quantile_models.py |
quantile table + coefficient path | ~1 min |
| 09 | 09_ml_robustness.py |
ML comparison + SHAP figures | ~2 min |
| 10 | 10_robustness_tables_figures.py |
outlier/subsample tables + 3 figures | ⚡ |
| 11 | 11_extended_robustness.py |
clustered SEs · ring · leave-one-out | ~1 min |
⚡ = under 15 s on Apple Silicon. Everything reads/writes through src/config.py; fully deterministic (seed 42).
📐 Econometric Models
| Model | Specification | Estimator |
|---|---|---|
| 1a–1e | log_rent ~ airbnb_count_500m + X + building type [+ city FE]; variants: density, entire-home share |
OLS · HC1 |
| 2a–2c | log_price ~ mean_rent_city + listing controls [+ city FE] |
OLS · HC1 |
| 3 | city-level forward & reverse regressions (153 cities) | OLS · HC1 |
| 4 | SAR & SEM, KNN(k=5) row-standardised weights | GMM — GM_Lag / GM_Error (Kelejian–Prucha) |
| 5 | quantile regressions, τ ∈ {.10, .25, .50, .75, .90} + fine grid | IRLS (statsmodels) |
| 6 | OLS / LASSO / ENet / RF / GBM, 80/20 split, SHAP attribution | scikit-learn |
🛡️ Robustness Programme
The Airbnb coefficient stays positive and significant at 1% in every single check; the leave-one-city-out range is 0.0038–0.0040 — excluding Montreal (half the sample) barely moves it.
🚀 Reproducing Everything
git clone https://github.com/spboucher-ai/wp5_uqo.git && cd wp5_uqo
python3 -m pip install -r requirements.txt
# full pipeline (steps 01–03 optional: need data/raw/)
for s in scripts/0{4..9}_*.py scripts/1{0,1}_*.py; do python3 "$s"; done
cd paper && latexmk # → paper/main.pdf (51 pages)🧰 Environment & Dependencies
Verified on macOS (Apple Silicon) · Python 3.14.4 · TeX Live 2025.
| Package | Pinned | Role |
|---|---|---|
| pandas / pyarrow | 3.0.2 / 24.0.0 | wrangling, parquet I/O |
| numpy / scipy | 2.4.4 / 1.17.1 | Haversine, KD-tree |
| statsmodels | 0.14.6 | OLS (HC1/cluster), quantile regression |
| libpysal / spreg | 4.14.1 / 1.9.0 | KNN weights, SAR/SEM (GMM) |
| scikit-learn | 1.6.1 | LASSO, ENet, RF, GBM |
| shap | 0.48.0 | SHAP values |
| matplotlib | 3.10.9 | all figures |
✅ Verification & Provenance
Rebuilt on 2026-08-05 from the original project (kept untouched as backup) under a strict no-result-changes policy:
- ✅ 3/3 merged parquets value-identical to the originals
- ✅ 14/16 tables byte-identical (2 residual float-level diffs documented in
AUDIT.md§8) - ✅ All figures regenerated, including 5 missing from the original (which broke its LaTeX build)
- ✅ Every text↔table inconsistency corrected in the prose only — itemised in
CHANGES.md - ✅ All 32 references added in the scholarly upgrade verified via Crossref/JMLR (DOIs) — per-reference justification in
UPGRADE_REPORT.md
📖 Citation
@techreport{boucher2026airbnb,
author = {Boucher, Simon-Pierre},
title = {Airbnb, Residential Rents, and Housing Market Pressure:
A Hedonic and Spatial Econometric Analysis},
institution = {Universit\'e du Qu\'ebec en Outaouais,
D\'epartement des sciences administratives},
type = {Working Paper},
number = {5},
year = {2026},
month = {May},
address = {Gatineau, QC, Canada}
}📬 Contact
Simon-Pierre Boucher Département des sciences administratives · Université du Québec en Outaouais 283, boulevard Alexandre-Taché, Gatineau (Québec) J9A 1L8, Canada
Issues and PRs welcome — please do not request the raw scraped data, which cannot be redistributed.
© 2026 Simon-Pierre Boucher — UQO Working Paper No. 5 · Code and manuscript for academic use.