| 1 | −<!-- Author: Simon-Pierre Boucher — contact@spboucher.ai --> |
1 | +<!-- Author: Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca --> |
| 2 | − |
2 | +# 🏠 Airbnb, Residential Rents, and Housing Market Pressure |
| 3 | −<div align="center"> |
3 | + |
| 4 | − |
4 | +**UQO Working Paper No. 5** — *A Hedonic and Spatial Econometric Analysis* |
| 5 | −# 🏠 Airbnb, Residential Rents & Housing Market Pressure |
5 | + |
| 6 | − |
6 | +[-b31b1b?logo=latex&logoColor=white)](paper/main.pdf) |
| 7 | −### *A Hedonic and Spatial Econometric Analysis* |
7 | +[](requirements.txt) |
| 8 | − |
8 | +[](data/raw/README.md) |
| 9 | −**UQO Working Paper No. 5** |
9 | +[](src/) |
| 10 | − |
10 | +[](scripts/) |
| 11 | −<br> |
11 | +[](https://uqo.ca) |
| 12 | − |
12 | +[](mailto:simon-pierre.boucher@uqo.ca) |
| 13 | −[](mailto:contact@spboucher.ai) |
13 | + |
| 14 | −[](https://uqo.ca) |
14 | +> **TL;DR** — Using cross-sectional microdata on **3,456 Airbnb listings** and **8,303 residential rental listings** in |
| 15 | −[](mailto:contact@spboucher.ai) |
15 | +> Quebec, the paper measures the conditional association between nearby short-term-rental activity and monthly rents in |
| 16 | − |
16 | +> a hedonic framework augmented with spatial econometrics. Each additional Airbnb listing within **500 m** is associated |
| 17 | −<br> |
17 | +> with **≈ +0.4 %** monthly rent (0.3–0.5 % across specifications, ≈ $6–10/month at the median), decaying with distance, |
| 18 | − |
18 | +> stronger at the top of the rent distribution (β(τ = 0.90) = 0.0047), and surviving SAR/SEM spatial models |
| 19 | −**— The paper at a glance —** |
19 | +> (ρ̂ = 0.137***), city-clustered SEs and leave-one-city-out checks. Cross-sectional associations, not causal effects. |
| 20 | − |
| |
| 21 | −[](paper/main.pdf) |
| |
| 22 | −[-blueviolet?style=flat-square)]() |
| |
| 23 | −[]() |
| |
| 24 | −[-e63946?style=flat-square)]() |
| |
| 25 | −[]() |
| |
| 26 | −[]() |
| |
| 27 | −[]() |
| |
| 28 | − |
| |
| 29 | −**— Methods —** |
| |
| 30 | − |
| |
| 31 | −[]() |
| |
| 32 | −[-8A2BE2?style=flat-square)]() |
| |
| 33 | −[]() |
| |
| 34 | −[]() |
| |
| 35 | −[]() |
| |
| 36 | − |
| |
| 37 | −**— Stack —** |
| |
| 38 | − |
| |
| 39 | −[](https://www.python.org/) |
| |
| 40 | −[](https://pandas.pydata.org/) |
| |
| 41 | −[](https://www.statsmodels.org/) |
| |
| 42 | −[](https://scikit-learn.org/) |
| |
| 43 | −[](https://pysal.org/) |
| |
| 44 | −[](https://shap.readthedocs.io/) |
| |
| 45 | −[](https://www.latex-project.org/) |
| |
| 46 | − |
| |
| 47 | −**— Quality —** |
| |
| 48 | − |
| |
| 49 | −[]() |
| |
| 50 | −[]() |
| |
| 51 | −[]() |
| |
| 52 | −[]() |
| |
| 53 | − |
| |
| 54 | −</div> |
| |
| 55 | − |
| |
| 56 | −--- |
| |
| 57 | − |
| |
| 58 | −## 🧭 Navigation |
| |
| 59 | − |
| |
| 60 | −| | | | |
| |
| 61 | −|---|---|---| |
| |
| 62 | −| [📜 The Paper](#-the-paper) | [🔍 Abstract](#-abstract) | [📖 Inside the Paper](#-inside-the-paper--section-by-section) | |
| |
| 63 | −| [🏆 Headline Results](#-headline-results) | [📁 Repository Map](#-repository-map) | [💾 Data](#-data) | |
| |
| 64 | −| [⚙️ Pipeline](#️-analysis-pipeline) | [📐 Models](#-econometric-models) | [🛡️ Robustness](#️-robustness-programme) | |
| |
| 65 | −| [🚀 Reproduce](#-reproducing-everything) | [🧰 Environment](#-environment--dependencies) | [✅ Provenance](#-verification--provenance) | |
| |
| 66 | −| [📖 Citation](#-citation) | [📬 Contact](#-contact) | | |
| |
| 67 | − |
| |
| 68 | −--- |
| |
| 69 | − |
| |
| 70 | −## 📜 The Paper |
| |
| 71 | − |
| |
| 72 | −<div align="center"> |
| |
| 73 | − |
| |
| 74 | −> ### **Airbnb, Residential Rents, and Housing Market Pressure:** |
| |
| 75 | −> ### **A Hedonic and Spatial Econometric Analysis** |
| |
| 76 | −> |
| |
| 77 | −> **Simon-Pierre Boucher** — Université du Québec en Outaouais |
| |
| 78 | −> *UQO Working Paper No. 5 · May 2026 · 51 pages · 56 references* |
| |
| 79 | −> |
| |
| 80 | −> [](paper/main.pdf) |
| |
| 81 | − |
| |
| 82 | −</div> |
| |
| 83 | − |
| |
| 84 | −## 🔍 Abstract |
| |
| 85 | − |
| |
| 86 | −> 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**. |
| |
| 87 | −> |
| |
| 88 | −> **Keywords:** Airbnb · short-term rentals · housing rents · hedonic pricing · spatial econometrics · housing affordability · Quebec |
| |
| 89 | −> **JEL:** R21 · R31 · L83 · C21 |
| |
| 90 | |
20 | |
| 91 | --- |
21 | --- |
| 92 | |
22 | |
| 93 | −## 📖 Inside the Paper — Section by Section |
23 | +## 📌 Status |
| 94 | |
24 | |
| 95 | −| § | Section | What it delivers | Key exhibits | |
25 | +| Item | Value | |
| 96 | −|:-:|---|---|---| |
26 | +|---|---| |
| 97 | −| **1** | 🎬 **Introduction** | Motivation, the P2P-platform housing channel, the Canadian evidence gap, magnitude preview vs. Berlin/LA quasi-experiments, three contributions | — | |
27 | +| Version | 1.0 (May 2026) — cover page harmonised to the UQO WP standard, October 2026 | |
| 98 | −| **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 | |
28 | +| SSRN | Abstract ID **7626658** (submitted 2026-10-17, preliminary upload) | |
| 99 | −| **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 | |
29 | +| Journal | not yet submitted | |
| 100 | −| **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 | |
30 | +| Code & data | steps 04–11 and the paper fully reproducible from the committed parquets; raw scraped files not redistributed | |
| 101 | −| **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 | |
| |
| 102 | −| **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 | |
| |
| 103 | −| **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 | — | |
| |
| 104 | −| **8** | 🎯 **Conclusion** | Five findings, cross-design corroboration, no overselling | — | |
| |
| 105 | −| **A–C** | 📎 **Appendices** | Variable dictionary, city-name standardisation, sample attrition · Haversine & KNN-weights formulas, estimator details · supplementary robustness | Tables A1–A2 | |
| |
| 106 | |
31 | |
| 107 | −--- |
32 | +## 🎯 What this paper does |
| 108 | |
33 | |
| 109 | −## 🏆 Headline Results |
34 | +Peer-to-peer platforms can divert dwellings from the long-term rental stock and raise rents nearby. Quasi-experimental |
| |
35 | +evidence exists for Berlin, Los Angeles or Boston, but Canadian evidence is thin. For every rental listing the paper |
| |
36 | +builds Airbnb exposure measures within 250 m, 500 m, 1 km and 2 km buffers (Haversine distances) — count, density, mean |
| |
37 | +nightly price, entire-home share, mean rating, superhost share — and estimates: |
| 110 | |
38 | |
| 111 | −<div align="center"> |
39 | +``` |
| |
40 | +log(rent_i) = α + β · airbnb_count_500m_i + X_i'γ + building-type + city FE + ε_i (Models 1a–1e) |
| |
41 | +``` |
| 112 | |
42 | |
| 113 | −[]() |
43 | +complemented by a hedonic model of Airbnb nightly prices (Models 2a–2c), city-level forward and reverse regressions |
| 114 | −[-f4a261?style=for-the-badge)]() |
44 | +(153 cities), SAR/SEM spatial models estimated by Kelejian–Prucha GMM, quantile regressions and a machine-learning |
| 115 | −[=0.0047-e9c46a?style=for-the-badge)]() |
45 | +benchmark. The discussion benchmarks magnitudes against the quasi-experimental literature and draws policy implications |
| 116 | −[-2a9d8f?style=for-the-badge)]() |
46 | +for CITQ registration and Montreal zoning, while cautioning against causal readings. |
| 117 | −[]() |
| |
| 118 | −[-6d597a?style=for-the-badge)]() |
| |
| 119 | |
47 | |
| 120 | −</div> |
48 | +## 🏆 Headline results |
| 121 | |
49 | |
| 122 | | # | Finding | Evidence | |
50 | | # | Finding | Evidence | |
| 123 | |:-:|---|---| |
51 | |:-:|---|---| |
| 124 | −| 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 | |
52 | +| 1 | Each additional Airbnb listing within 500 m ⇒ ≈ +0.4 % monthly rent (β = 0.0039***) | Table 3 (1c) · §7.1 | |
| 125 | −| 2 | Per-listing association **decays monotonically with distance** | Table 10 · Fig. 4 | |
53 | +| 2 | The per-listing association decays monotonically with distance (0.93 % at 250 m → 0.06 % at 2 km) | Table 10 · Fig. 4 | |
| 126 | −| 3 | Significant at **every quantile**, rising to **0.0047 at τ = 0.90** (~25% above OLS) | Table 7 · Fig. 5 | |
54 | +| 3 | Significant at every quantile, rising to 0.0047 at τ = 0.90 (~25 % above OLS) | Table 7 · Fig. 5 | |
| 127 | −| 4 | **Spatial dependence is substantial** and the coefficient survives GMM spatial models with mild attenuation (0.0034) | Table 6 | |
55 | +| 4 | Substantial spatial dependence (ρ̂ = 0.137***, λ̂ = 0.539); coefficient survives GMM spatial models (0.0034) | Table 6 | |
| 128 | −| 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 | |
56 | +| 5 | Airbnb nightly prices driven by listing characteristics; superhost enters with a *discount* | Table 4 · §7.1 | |
| 129 | −| 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 | |
57 | +| 6 | Robust to city-clustered SEs, size control, log(1 + count), ring decomposition, trimming, leave-one-city-out (0.0038–0.0040) | Table 12 · Fig. 9 | |
| 130 | − |
| |
| 131 | −--- |
| |
| 132 | |
58 | |
| 133 | −## 📁 Repository Map |
59 | +## 🗂 Repository layout |
| 134 | |
60 | |
| 135 | ``` |
61 | ``` |
| 136 | wp5_uqo/ |
62 | wp5_uqo/ |
| 137 | −├── 📄 README.md ← you are here |
63 | +├── README.md |
| 138 | −├── 🔎 AUDIT.md ← forensic audit of the original project |
64 | +├── requirements.txt # pinned dependencies |
| 139 | −├── 📝 CHANGES.md ← restructuring & rewrite log |
65 | +├── docs/ # AUDIT.md · CHANGES.md · PAPER_REVIEW.md · UPGRADE_REPORT.md |
| 140 | −├── 🧪 PAPER_REVIEW.md ← pre-upgrade critical assessment |
| |
| 141 | −├── 📚 UPGRADE_REPORT.md ← literature expansion report (per-ref justification) |
| |
| 142 | −├── 📦 requirements.txt ← pinned dependencies |
| |
| 143 | −│ |
| |
| 144 | ├── data/ |
66 | ├── data/ |
| 145 | −│ ├── raw/ ← airbnb.csv + rent.json (NOT distributed → README) |
67 | +│ ├── raw/ # airbnb.csv + rent.json — NOT distributed (see data/raw/README.md) |
| 146 | −│ └── processed/ ← 5 verified parquet datasets (committed) |
68 | +│ └── processed/ # 5 verified parquet datasets (committed) |
| 147 | −│ |
69 | +├── src/ |
| 148 | −├── src/ ← shared modules |
70 | +│ ├── config.py # all paths & constants |
| 149 | −│ ├── config.py ← all paths & constants |
71 | +│ ├── geo.py # vectorised Haversine matrix |
| 150 | −│ ├── geo.py ← vectorised Haversine matrix |
72 | +│ ├── latex_tables.py # stargazer-style table builder |
| 151 | −│ ├── latex_tables.py ← stargazer-style table builder |
73 | +│ └── plotting.py # publication matplotlib styles |
| 152 | −│ └── plotting.py ← publication matplotlib styles |
74 | +├── scripts/ # 01 → 11 numbered pipeline |
| 153 | −│ |
75 | +├── figures/ # 16 publication PDF figures |
| 154 | −├── scripts/ ← 01 → 11 numbered pipeline |
76 | +├── results/tables/ # 13 LaTeX fragments + 4 CSVs |
| 155 | −├── figures/ ← 16 publication PDF figures |
77 | +├── results/logs/ # data-inspection log |
| 156 | −├── results/tables/ ← 13 LaTeX fragments + 4 CSVs |
78 | +└── paper/ # main.tex + sections/ + appendix/ + references.bib → main.pdf |
| 157 | −├── results/logs/ ← data-inspection log |
| |
| 158 | −│ |
| |
| 159 | −└── paper/ ← LaTeX → 📄 main.pdf (51 pages) |
| |
| 160 | − ├── main.tex · references.bib (56 entries) · Makefile |
| |
| 161 | − ├── sections/ (titlepage + 8 sections) |
| |
| 162 | − └── appendix/ (data · methods · robustness) |
| |
| 163 | ``` |
79 | ``` |
| 164 | |
80 | |
| 165 | −--- |
81 | +## 🚀 Quick start |
| 166 | − |
| |
| 167 | −## 💾 Data |
| |
| 168 | − |
| |
| 169 | −<div align="center"> |
| |
| 170 | |
82 | |
| 171 | −[]() |
83 | +```bash |
| 172 | −[]() |
84 | +python3 -m pip install -r requirements.txt |
| 173 | −[]() |
| |
| 174 | −[]() |
| |
| 175 | − |
| |
| 176 | −</div> |
| |
| 177 | − |
| |
| 178 | −| Dataset | Source | Raw → Clean | Key fields | |
| |
| 179 | −|---|---|---|---| |
| |
| 180 | −| 🛏️ Airbnb listings | Airbnb (scraped) | ~5,000 → **3,456** | nightly price, lat/lon, property type, rating, reviews, superhost | |
| |
| 181 | −| 🏢 Rental listings | Realtor.ca (scraped) | 8,356 → **8,303** | monthly rent, lat/lon, bedrooms, bathrooms, building type, size | |
| |
| 182 | − |
| |
| 183 | −**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. |
| |
| 184 | − |
| |
| 185 | −> 🔒 Raw files are **not distributed** (`data/raw/README.md`). The committed parquets make steps 04–11 and the paper fully reproducible without them. |
| |
| 186 | |
85 | |
| 187 | −--- |
86 | +# steps 01–03 need data/raw/ (not distributed); steps 04–11 run from the committed parquets |
| |
87 | +for s in scripts/0{4..9}_*.py scripts/1{0,1}_*.py; do python3 "$s"; done |
| 188 | |
88 | |
| 189 | −## ⚙️ Analysis Pipeline |
89 | +cd paper && make # latexmk → main.pdf (51 pages) |
| |
90 | +``` |
| 190 | |
91 | |
| 191 | | Step | Script | Produces | ⏱ | |
92 | | Step | Script | Produces | ⏱ | |
| 192 | |:-:|---|---|:-:| |
93 | |:-:|---|---|:-:| |
| 202 | | 10 | `10_robustness_tables_figures.py` | outlier/subsample tables + 3 figures | ⚡ | |
103 | | 10 | `10_robustness_tables_figures.py` | outlier/subsample tables + 3 figures | ⚡ | |
| 203 | | 11 | `11_extended_robustness.py` | clustered SEs · ring · leave-one-out | ~1 min | |
104 | | 11 | `11_extended_robustness.py` | clustered SEs · ring · leave-one-out | ~1 min | |
| 204 | |
105 | |
| 205 | −<sub>⚡ = under 15 s on Apple Silicon. Everything reads/writes through `src/config.py`; fully deterministic (seed 42).</sub> |
106 | +⚡ = under 15 s on Apple Silicon. Fully deterministic (seed 42). |
| 206 | − |
| |
| 207 | −--- |
| |
| 208 | − |
| |
| 209 | −## 📐 Econometric Models |
| |
| 210 | − |
| |
| 211 | −| Model | Specification | Estimator | |
| |
| 212 | −|:-:|---|---| |
| |
| 213 | −| **1a–1e** | `log_rent ~ airbnb_count_500m + X + building type [+ city FE]`; variants: density, entire-home share | OLS · HC1 | |
| |
| 214 | −| **2a–2c** | `log_price ~ mean_rent_city + listing controls [+ city FE]` | OLS · HC1 | |
| |
| 215 | −| **3** | city-level forward & reverse regressions (153 cities) | OLS · HC1 | |
| |
| 216 | −| **4** | SAR & SEM, KNN(k=5) row-standardised weights | GMM — `GM_Lag` / `GM_Error` (Kelejian–Prucha) | |
| |
| 217 | −| **5** | quantile regressions, τ ∈ {.10, .25, .50, .75, .90} + fine grid | IRLS (statsmodels) | |
| |
| 218 | −| **6** | OLS / LASSO / ENet / RF / GBM, 80/20 split, SHAP attribution | scikit-learn | |
| |
| 219 | − |
| |
| 220 | −--- |
| |
| 221 | − |
| |
| 222 | −## 🛡️ Robustness Programme |
| |
| 223 | − |
| |
| 224 | −<div align="center"> |
| |
| 225 | − |
| |
| 226 | −[]() |
| |
| 227 | −[]() |
| |
| 228 | −[]() |
| |
| 229 | −[]() |
| |
| 230 | −[]() |
| |
| 231 | −[]() |
| |
| 232 | −[-2a9d8f?style=flat-square)]() |
| |
| 233 | −[]() |
| |
| 234 | −[]() |
| |
| 235 | − |
| |
| 236 | −</div> |
| |
| 237 | − |
| |
| 238 | −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. |
| |
| 239 | − |
| |
| 240 | −--- |
| |
| 241 | − |
| |
| 242 | −## 🚀 Reproducing Everything |
| |
| 243 | − |
| |
| 244 | −```bash |
| |
| 245 | −git clone https://github.com/spboucher-ai/wp5_uqo.git && cd wp5_uqo |
| |
| 246 | −python3 -m pip install -r requirements.txt |
| |
| 247 | − |
| |
| 248 | −# full pipeline (steps 01–03 optional: need data/raw/) |
| |
| 249 | −for s in scripts/0{4..9}_*.py scripts/1{0,1}_*.py; do python3 "$s"; done |
| |
| 250 | − |
| |
| 251 | −cd paper && latexmk # → paper/main.pdf (51 pages) |
| |
| 252 | −``` |
| |
| 253 | − |
| |
| 254 | −--- |
| |
| 255 | − |
| |
| 256 | −## 🧰 Environment & Dependencies |
| |
| 257 | − |
| |
| 258 | −Verified on **macOS (Apple Silicon) · Python 3.14.4 · TeX Live 2025**. |
| |
| 259 | − |
| |
| 260 | −| Package | Pinned | Role | |
| |
| 261 | −|---|:-:|---| |
| |
| 262 | −| pandas / pyarrow | 3.0.2 / 24.0.0 | wrangling, parquet I/O | |
| |
| 263 | −| numpy / scipy | 2.4.4 / 1.17.1 | Haversine, KD-tree | |
| |
| 264 | −| statsmodels | 0.14.6 | OLS (HC1/cluster), quantile regression | |
| |
| 265 | −| libpysal / spreg | 4.14.1 / 1.9.0 | KNN weights, SAR/SEM (GMM) | |
| |
| 266 | −| scikit-learn | 1.6.1 | LASSO, ENet, RF, GBM | |
| |
| 267 | −| shap | 0.48.0 | SHAP values | |
| |
| 268 | −| matplotlib | 3.10.9 | all figures | |
| |
| 269 | − |
| |
| 270 | −--- |
| |
| 271 | − |
| |
| 272 | −## ✅ Verification & Provenance |
| |
| 273 | |
107 | |
| 274 | −Rebuilt on **2026-08-05** from the original project (kept untouched as backup) under a strict *no-result-changes* policy: |
108 | +## 🗃 Data |
| 275 | |
109 | |
| 276 | −- ✅ 3/3 merged parquets **value-identical** to the originals |
110 | +| Dataset | Source | Raw → Clean | Key fields | |
| 277 | −- ✅ **14/16 tables byte-identical** (2 residual float-level diffs documented in [`AUDIT.md`](AUDIT.md) §8) |
111 | +|---|---|---|---| |
| 278 | −- ✅ All figures regenerated, including 5 missing from the original (which broke its LaTeX build) |
112 | +| Airbnb listings | Airbnb (scraped) | ~5,000 → 3,456 | nightly price, lat/lon, property type, rating, reviews, superhost | |
| 279 | −- ✅ Every text↔table inconsistency corrected *in the prose only* — itemised in [`CHANGES.md`](CHANGES.md) |
113 | +| Rental listings | Realtor.ca (scraped) | 8,356 → 8,303 | monthly rent, lat/lon, bedrooms, bathrooms, building type, size | |
| 280 | −- ✅ All 32 references added in the scholarly upgrade **verified via Crossref/JMLR** (DOIs) — per-reference justification in [`UPGRADE_REPORT.md`](UPGRADE_REPORT.md) |
114 | + |
| 281 | − |
115 | +Spatial merge: for every rental listing × radius r ∈ {250 m, 500 m, 1 km, 2 km}, six metrics computed against all |
| 282 | −--- |
116 | +Airbnb listings via chunked vectorised Haversine distances, plus city-level aggregates (24 exposure variables). Raw |
| 283 | − |
117 | +files are not distributed (`data/raw/README.md`); the committed parquets make steps 04–11 and the paper reproducible. |
| 284 | −## 📖 Citation |
118 | + |
| |
119 | +## 🔬 Methodology |
| |
120 | + |
| |
121 | +1. **Hedonic rent models 1a–1e** — OLS, HC1 SE, building-type and city fixed effects; variants with density and |
| |
122 | + entire-home share (`scripts/06`). |
| |
123 | +2. **Airbnb pricing models 2a–2c** — log nightly price on city mean rent and listing controls. |
| |
124 | +3. **City-level regressions** — forward and reverse, 153 cities. |
| |
125 | +4. **Spatial models** — SAR and SEM, KNN (k = 5) row-standardised weights, Kelejian–Prucha GMM (`spreg.GM_Lag`, |
| |
126 | + `GM_Error`) (`scripts/07`). |
| |
127 | +5. **Quantile regressions** — τ ∈ {0.10, 0.25, 0.50, 0.75, 0.90} plus a fine grid (`scripts/08`). |
| |
128 | +6. **Machine-learning benchmark** — OLS / LASSO / Elastic Net / RF / GBM, 80/20 split, SHAP attribution (`scripts/09`). |
| |
129 | +7. **Robustness** — buffer radii, alternative exposures, subsamples, trimming, city-clustered SEs, size control, |
| |
130 | + log(1 + count), ring decomposition, leave-one-city-out (`scripts/10`, `scripts/11`). |
| |
131 | + |
| |
132 | +## 🖼 Figures & tables inventory |
| |
133 | + |
| |
134 | +| Figure | Content | |
| |
135 | +|---|---| |
| |
136 | +| `map_airbnb`, `map_rent` | Spatial distribution of the two samples | |
| |
137 | +| `dist_airbnb_price`, `dist_rent` | Price and rent distributions | |
| |
138 | +| `airbnb_by_city`, `rent_by_city` | City-level profiles | |
| |
139 | +| `scatter_airbnb_rent`, `rent_by_airbnb_bins`, `rent_airbnb_heatmap` | Exposure–rent relationships | |
| |
140 | +| `coefficient_buffer_comparison` | β across buffer radii (spatial decay) | |
| |
141 | +| `quantile_coefficients` | β(τ) path | |
| |
142 | +| `ml_predicted_vs_actual`, `feature_importance`, `shap_summary` | ML benchmark and attribution | |
| |
143 | +| `coefficient_robustness`, `leave_one_city_out` | Robustness programme | |
| |
144 | + |
| |
145 | +Tables (`results/tables/*.tex`, 13 fragments): summary statistics, city aggregates, hedonic rent models, Airbnb |
| |
146 | +pricing, city-level regressions, spatial models, quantile regressions, ML comparison, buffer robustness, subsample and |
| |
147 | +trimming checks, extended robustness, appendix variable dictionary. |
| |
148 | + |
| |
149 | +## ⚠️ Limitations |
| |
150 | + |
| |
151 | +- Cross-sectional listing data (asking rents and nightly prices), no panel or quasi-experimental variation: estimates |
| |
152 | + are conditional associations. |
| |
153 | +- Airbnb exposure may be endogenous to unobserved neighbourhood amenities; the spatial models and city FE mitigate but do |
| |
154 | + not eliminate this. |
| |
155 | +- Scraped samples are not census-complete; coverage is concentrated in the largest Quebec cities. |
| |
156 | +- Superhost discount and the absence of a city-rent premium in nightly prices diverge from prior work and are discussed, |
| |
157 | + not resolved. |
| |
158 | + |
| |
159 | +## 📝 Citation |
| 285 | |
160 | |
| 286 | ```bibtex |
161 | ```bibtex |
| 287 | @techreport{boucher2026airbnb, |
162 | @techreport{boucher2026airbnb, |
| 288 | author = {Boucher, Simon-Pierre}, |
163 | author = {Boucher, Simon-Pierre}, |
| 289 | title = {Airbnb, Residential Rents, and Housing Market Pressure: |
164 | title = {Airbnb, Residential Rents, and Housing Market Pressure: |
| 290 | A Hedonic and Spatial Econometric Analysis}, |
165 | A Hedonic and Spatial Econometric Analysis}, |
| 291 | − institution = {Universit\'e du Qu\'ebec en Outaouais, |
166 | + institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives}, |
| 292 | − D\'epartement des sciences administratives}, |
| |
| 293 | type = {Working Paper}, |
167 | type = {Working Paper}, |
| 294 | number = {5}, |
168 | number = {5}, |
| 295 | year = {2026}, |
169 | year = {2026}, |
| 296 | − month = {May}, |
170 | + month = {May} |
| 297 | − address = {Gatineau, QC, Canada} |
| |
| 298 | } |
171 | } |
| 299 | ``` |
172 | ``` |
| 300 | |
173 | |
| 301 | −--- |
174 | +## 👤 Author & contact |
| 302 | − |
| |
| 303 | −## 📬 Contact |
| |
| 304 | − |
| |
| 305 | −<div align="center"> |
| |
| 306 | − |
| |
| 307 | −**Simon-Pierre Boucher** |
| |
| 308 | −Département des sciences administratives · Université du Québec en Outaouais |
| |
| 309 | −283, boulevard Alexandre-Taché, Gatineau (Québec) J9A 1L8, Canada |
| |
| 310 | − |
| |
| 311 | −[](mailto:contact@spboucher.ai) |
| |
| 312 | −[](mailto:simon-pierre.boucher@uqo.ca) |
| |
| 313 | − |
| |
| 314 | −<sub>Issues and PRs welcome — please do not request the raw scraped data, which cannot be redistributed.</sub> |
| |
| 315 | |
175 | |
| 316 | −<br><br> |
176 | +**Simon-Pierre Boucher** — Département des sciences administratives, |
| |
177 | +Université du Québec en Outaouais (UQO), Gatineau, QC. |
| |
178 | +📧 [simon-pierre.boucher@uqo.ca](mailto:simon-pierre.boucher@uqo.ca) |
| 317 | |
179 | |
| 318 | −<sub>© 2026 Simon-Pierre Boucher — UQO Working Paper No. 5 · Code and manuscript for academic use.</sub> |
180 | +## 🗒 Notes |
| 319 | |
181 | |
| 320 | −</div> |
182 | +- Format follows `Recherche-UQO/HARMONISATION.md` (2026-10-17): template title page, `natbib` + `aer` bibliography style, |
| |
183 | + `docs/` for the restructuring reports. |
| |
184 | +- The original flat May 2026 project (`immo-wp5-spb-20260519`) is archived in |
| |
185 | + `Recherche-UQO/_archives/versions-mai-2026/airbnb-rents-housing-pressure--immo-wp5-20260519/`; `docs/AUDIT.md` §8 and |
| |
186 | + `docs/CHANGES.md` document the 2026-08-05 rebuild (14/16 tables byte-identical, prose-only corrections). |
| |
187 | +- Build verified 2026-10-17: 0 errors, 0 undefined references, 56 references rendered. |