🏠 Airbnb, Residential Rents, and Housing Market Pressure
UQO Working Paper No. 5 — A Hedonic and Spatial Econometric Analysis
TL;DR — Using a 2026 cross-section of 3,456 Airbnb listings and 8,303 residential rental listings in Quebec, the paper measures the conditional association between nearby short-term-rental activity and monthly asking rents. With city fixed effects, each additional Airbnb listing within 500 m is associated with ≈ +0.4 % rent (0.3–0.5 % across specifications), decaying per listing with distance, larger at the top of the rent distribution, and unchanged in SAR/SEM models (total impact 0.40 %). Two results qualify this: Conley and FSA-clustered standard errors are ≈ 3× the HC1 errors (t from 17 to ≈ 5.5), and with postal-code-neighbourhood (FSA) fixed effects the coefficient falls to 0.08 % and is not distinguishable from zero under spatial inference. The association is predominantly between neighbourhoods — consistent with STR supply sorting into high-rent neighbourhoods, not with a within-neighbourhood causal effect. Spatially blocked cross-validation erases the apparent advantage of tree-based ML models. Cross-sectional associations, not causal effects.
📌 Status
| Item | Value |
|---|---|
| Version | 1.1 (October 2026) — revised 2026-10-17 by the editorial-board review (docs/REVIEW-REPORT.md, docs/CHANGELOG-REVISION.md); v1.0 May 2026, cover page harmonised October 2026 |
| SSRN | Abstract ID 7626658 (preliminary upload 2026-10-17; v1.1 to be uploaded) |
| Journal | not yet submitted |
| Code & data | steps 04–12 and the paper fully reproducible from the committed parquets (< 1 min total); raw scraped files not redistributed |
🎯 What this paper does
Peer-to-peer platforms can divert dwellings from the long-term rental stock and raise rents nearby. Quasi-experimental evidence exists for Berlin, Los Angeles, Barcelona or Boston, but Canadian evidence is descriptive. For every rental listing the paper builds Airbnb exposure measures within 250 m, 500 m, 1 km and 2 km buffers (Haversine distances) — count, density, mean nightly price, entire-home share — and estimates
log(rent_i) = α + β · airbnb_count_500m_i + X_i'γ + building-type + city FE + ε_i (Model 1c)
log(rent_i) = α + β^F · airbnb_count_500m_i + X_i'γ + building-type + FSA FE + ε_i (Model F2)with HC1, city-clustered, FSA-clustered and Conley spatial HAC standard errors (1–10 km cutoffs); SAR/SEM models by Kelejian–Prucha GMM with LeSage–Pace direct/indirect/total impacts; quantile regressions; a hedonic model of Airbnb nightly prices (full sample and plausibly priced subsample); city-level regressions; and an ML benchmark evaluated under random and spatially blocked (FSA) cross-validation. The discussion benchmarks magnitudes against the quasi-experimental literature in standardised terms and draws implications for Quebec's registration regime and Montreal's zoning rules.
🏆 Headline results
| # | Finding | Evidence |
|---|---|---|
| 1 | City FE: each additional Airbnb listing within 500 m ⇒ ≈ +0.4 % rent (β = 0.0039; 1 SD of exposure ≈ +5.5 %) | Table 4 (1c) · §5.1 |
| 2 | FSA (neighbourhood) FE: β falls to 0.0008; 0.0003 with size control; log(1+count) and 250 m count insignificant; any Airbnb nearby ⇒ −2.8 % within FSA | Table 5 · §5.2 |
| 3 | Spatial inference: Conley / FSA-cluster SE = 0.0007 vs HC1 0.0002 (t 17 → 5–6 with city FE; 2.3 → 1.1–2.0 with FSA FE); city-clustering (Montreal = 59 % of sample) unreliable | Table 6 · §5.3 |
| 4 | Spatial dependence: ρ̂ = 0.134***, λ̂ = 0.544; SAR total impact 0.0040 (direct 0.0034, indirect 0.0005) = OLS | Tables 7–8 · §5.4 |
| 5 | Per-listing coefficient decays with radius (0.93 % at 250 m → 0.06 % at 2 km) while the mean-exposure association accumulates (2.2 % → 5.0 %); quantiles 0.0034–0.0047, rising at τ = 0.90 | Tables 9, 14 · Figs 5, 8 |
| 6 | Spatially blocked CV: RF/GBM R² 0.65 (random folds) → 0.43/0.41 (FSA folds), below OLS (0.47) — the ML advantage is neighbourhood interpolation | Table 13 · §5.8 |
| 7 | Airbnb price field is bimodal (26.5 % of listings > $1,000 "per night"); on the plausibly priced subsample the superhost "discount" disappears and the usual entire-home/size premia reappear; no city-rent premium (θ ≈ 0) | Table 10 · Fig. 4 · §3.1, §5.6 |
| 8 | City-FE estimate robust to clustering, size control, log form, ring decomposition, trimming, leave-one-city-out (0.0038–0.0040) | Tables 15–17 · Figs 9–10 |
🗂 Repository layout
wp5_uqo/
├── README.md
├── requirements.txt # pinned dependencies
├── docs/ # REVIEW-REPORT.md · CHANGELOG-REVISION.md (2026-10-17) · AUDIT.md · CHANGES.md ·
│ # PAPER_REVIEW.md · UPGRADE_REPORT.md (2026-08-05) · main_pre-revision-20261017.pdf
├── data/
│ ├── raw/ # airbnb.csv + rent.json — NOT distributed (see data/raw/README.md)
│ └── processed/ # 5 verified parquet datasets (committed)
├── src/
│ ├── config.py # all paths & constants
│ ├── geo.py # vectorised Haversine matrix
│ ├── latex_tables.py # table builder + readable variable labels
│ └── plotting.py # publication matplotlib styles
├── scripts/ # 01 → 12 numbered pipeline
├── figures/ # 17 publication PDF figures
├── results/tables/ # 18 LaTeX fragments + CSV/JSON records
├── results/logs/ # data-inspection log · pipeline run log
└── paper/ # main.tex + sections/ + appendix/ + references.bib → main.pdf🚀 Quick start
python3 -m pip install -r requirements.txt
# steps 01–03 need data/raw/ (not distributed); steps 04–12 run from the committed parquets
for s in scripts/0{4..9}_*.py scripts/1{0,1,2}_*.py; do python3 "$s"; done
cd paper && make # latexmk → main.pdf (59 pages)| 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 |
4 tables (incl. exposure summary, correlation) + 8 figures | ⚡ |
| 06 | 06_hedonic_models.py |
Models 1–3 → 3 tables (Model 2 with restricted-sample columns) | ⚡ |
| 07 | 07_spatial_models.py |
SAR/SEM (projected-coordinate KNN) + LeSage–Pace impacts + buffer robustness | ⚡ |
| 08 | 08_quantile_models.py |
quantile table + coefficient path | ⚡ |
| 09 | 09_ml_robustness.py |
ML comparison + SHAP figures + random vs FSA-blocked CV | ~30 s |
| 10 | 10_robustness_tables_figures.py |
outlier/subsample tables + 3 figures | ⚡ |
| 11 | 11_extended_robustness.py |
clustered SEs · size · log form · ring · leave-one-out | ⚡ |
| 12 | 12_neighbourhood_fe_inference.py |
FSA fixed effects · Conley / cluster SE comparison | ~20 s |
⚡ = under 5 s on Apple Silicon. Fully deterministic (seed 42).
🗃 Data
| Dataset | Source | Raw → Clean | Key fields |
|---|---|---|---|
| Airbnb listings | Airbnb (scraped, early 2026) | 5,000 → 3,456 (price missing for 30.9 %) | displayed price (bimodal, see §3.1), lat/lon, property type, rating, reviews, superhost, capacity, amenities |
| Rental listings | Realtor.ca (scraped 2026-01-08) | 8,356 → 8,303 | monthly asking rent, lat/lon, bedrooms, bathrooms, building type, size, postal code → FSA |
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, plus city-level aggregates. 333 FSAs (289 non-singleton),
253 municipalities (Montreal 59 %). Raw files are not distributed (data/raw/README.md); the committed parquets make
steps 04–12 and the paper reproducible.
🔬 Methodology
- Hedonic rent models 1a–1e — OLS, HC1 SE, building-type and city fixed effects; density and entire-home share variants (
scripts/06). - Neighbourhood (FSA) fixed effects F1–F6 — within transformation, 250 m / 500 m counts, extensive + intensive margin, log(1+count), size (
scripts/12). - Inference — HC1, cluster-city, cluster-FSA, Conley spatial HAC (Bartlett kernel, 1/2/5/10 km) (
scripts/12). - Spatial models — SAR (GM_Lag, White SE) and SEM (GM_Error), KNN k = 5 on projected km coordinates; LeSage–Pace direct/indirect/total impacts with simulated SEs (
scripts/07). - Quantile regressions — τ ∈ {0.10, 0.25, 0.50, 0.75, 0.90} plus a fine grid (
scripts/08). - Airbnb pricing models 2a–2e — log nightly price on city mean log rent and listing controls; city FE absorb the city rent; restricted sample ≤ $1,000 (
scripts/06). - Machine-learning benchmark — OLS / LASSO / Elastic Net / RF / GBM, 80/20 split, SHAP, random vs FSA-blocked 5-fold CV (
scripts/09). - Robustness — buffer radii, alternative exposures, subsamples, trimming, city-clustered SEs, size, log(1+count), ring decomposition, leave-one-city-out (
scripts/07,10,11).
🖼 Figures & tables inventory
| Figure | Content |
|---|---|
map_airbnb, map_rent |
Spatial distribution of the two samples |
dist_airbnb_price, dist_airbnb_logprice, dist_rent |
Price and rent distributions (log-scale figure documents the bimodal price field) |
airbnb_by_city, rent_by_city |
City-level profiles (generated, not in the paper) |
scatter_airbnb_rent, rent_by_airbnb_bins, rent_airbnb_heatmap |
Exposure–rent relationships (generated, not in the paper) |
coefficient_buffer_comparison |
β across buffer radii (spatial decay) |
quantile_coefficients |
β(τ) path |
ml_predicted_vs_actual, feature_importance, shap_summary |
ML benchmark and attribution |
coefficient_robustness, leave_one_city_out |
Robustness programme |
Tables (results/tables/*.tex, 18 fragments): exposure summary, summary statistics (2), hedonic rent models,
neighbourhood FE, inference comparison, spatial models, spatial impacts, quantile regressions, Airbnb pricing,
city-level regressions, ML comparison, random vs spatial CV, buffer robustness, subsample and trimming checks,
extended robustness, correlation matrix. JSON records: spatial_models.json, neighbourhood_fe.json.
⚠️ Limitations
- Cross-sectional listing data (asking rents and displayed nightly prices), no panel or quasi-experimental variation: estimates are conditional associations; the city-FE estimate is an upper bound on any causal within-neighbourhood effect.
- The Airbnb price field partly records total-stay prices (second mode above $1,000): the full-sample pricing model is unreliable; the count-based rent results are unaffected.
- No room type or host identifiers (entire-home status is a property-type proxy; commercial operation unmeasured).
- Scraped winter samples are not census-complete; Realtor.ca over-represents agent-listed, higher-priced units; coverage concentrated in Montreal.
- Quantile regressions use coarse city groups and non-spatial SEs; quantile and spatial models with FSA FE not estimated.
📝 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 = {October},
note = {Version 1.1}
}👤 Author & contact
Simon-Pierre Boucher — Département des sciences administratives, Université du Québec en Outaouais (UQO), Gatineau, QC. 📧 simon-pierre.boucher@uqo.ca
🗒 Notes
- Revision 2026-10-17 (v1.1): full scientific review by the editorial-board protocol (
Recherche-UQO/REVISION-MASTER-PROMPT.md). Report:docs/REVIEW-REPORT.md; audit trail of every change (old → new numbers, reasons, evidence):docs/CHANGELOG-REVISION.md. Pre-revision PDF:docs/main_pre-revision-20261017.pdf(git tagpre-revision-20261017). Headline interpretation changed: the Airbnb–rent association is predominantly between neighbourhoods (FSA FE, Conley SE); Model 2 superhost "discount" and the Berlin/LA magnitude comparisons of v1.0 were corrected. - Format follows
Recherche-UQO/HARMONISATION.md(2026-10-17): template title page,natbib+aerbibliography style,docs/for reports. - The original flat May 2026 project (
immo-wp5-spb-20260519) is archived inRecherche-UQO/_archives/versions-mai-2026/airbnb-rents-housing-pressure--immo-wp5-20260519/;docs/AUDIT.md§8 anddocs/CHANGES.mddocument the 2026-08-05 rebuild. - Build verified 2026-10-17: 0 errors, 0 undefined references, 67 references rendered (all DOI/Crossref-verified).