| 1 |
|
−<!-- Author: Simon-Pierre Boucher — contact@spboucher.ai --> |
| 2 |
|
− |
| 3 |
|
−<div align="center"> |
| 4 |
|
− |
| 5 |
|
−# 🏠 Airbnb, Residential Rents & Housing Market Pressure |
| 6 |
|
− |
| 7 |
|
−### *A Hedonic and Spatial Econometric Analysis* |
| 8 |
|
− |
| 9 |
|
−**UQO Working Paper No. 5** |
| 10 |
|
− |
| 11 |
|
−<br> |
| 12 |
|
− |
| 13 |
|
−[](mailto:contact@spboucher.ai) |
| 14 |
|
−[](https://uqo.ca) |
| 15 |
|
−[](mailto:contact@spboucher.ai) |
| 16 |
|
− |
| 17 |
|
−<br> |
| 18 |
|
− |
| 19 |
|
−**— The paper at a glance —** |
| 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 |
|
1 |
+<!-- Author: Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca --> |
|
2 |
+# 🏠 Airbnb, Residential Rents, and Housing Market Pressure |
|
3 |
+ |
|
4 |
+**UQO Working Paper No. 5** — *A Hedonic and Spatial Econometric Analysis* |
|
5 |
+ |
|
6 |
+[-b31b1b?logo=latex&logoColor=white)](paper/main.pdf) |
|
7 |
+[](requirements.txt) |
|
8 |
+[](data/raw/README.md) |
|
9 |
+[](src/) |
|
10 |
+[](scripts/) |
|
11 |
+[](https://uqo.ca) |
|
12 |
+[](mailto:simon-pierre.boucher@uqo.ca) |
|
13 |
+ |
|
14 |
+> **TL;DR** — Using cross-sectional microdata on **3,456 Airbnb listings** and **8,303 residential rental listings** in |
|
15 |
+> Quebec, the paper measures the conditional association between nearby short-term-rental activity and monthly rents in |
|
16 |
+> a hedonic framework augmented with spatial econometrics. Each additional Airbnb listing within **500 m** is associated |
|
17 |
+> with **≈ +0.4 %** monthly rent (0.3–0.5 % across specifications, ≈ $6–10/month at the median), decaying with distance, |
|
18 |
+> stronger at the top of the rent distribution (β(τ = 0.90) = 0.0047), and surviving SAR/SEM spatial models |
|
19 |
+> (ρ̂ = 0.137***), city-clustered SEs and leave-one-city-out checks. Cross-sectional associations, not causal effects. |
| 90 |
20 |
|
| 91 |
21 |
--- |
| 92 |
22 |
|
| 93 |
|
−## 📖 Inside the Paper — Section by Section |
|
23 |
+## 📌 Status |
| 94 |
24 |
|
| 95 |
|
−| § | Section | What it delivers | Key exhibits | |
| 96 |
|
−|:-:|---|---|---| |
| 97 |
|
−| **1** | 🎬 **Introduction** | Motivation, the P2P-platform housing channel, the Canadian evidence gap, magnitude preview vs. Berlin/LA quasi-experiments, three contributions | — | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
|
25 |
+| Item | Value | |
|
26 |
+|---|---| |
|
27 |
+| Version | 1.0 (May 2026) — cover page harmonised to the UQO WP standard, October 2026 | |
|
28 |
+| SSRN | Abstract ID **7626658** (submitted 2026-10-17, preliminary upload) | |
|
29 |
+| Journal | not yet submitted | |
|
30 |
+| Code & data | steps 04–11 and the paper fully reproducible from the committed parquets; raw scraped files not redistributed | |
| 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 |
|
−[]() |
| 114 |
|
−[-f4a261?style=for-the-badge)]() |
| 115 |
|
−[=0.0047-e9c46a?style=for-the-badge)]() |
| 116 |
|
−[-2a9d8f?style=for-the-badge)]() |
| 117 |
|
−[]() |
| 118 |
|
−[-6d597a?style=for-the-badge)]() |
|
43 |
+complemented by a hedonic model of Airbnb nightly prices (Models 2a–2c), city-level forward and reverse regressions |
|
44 |
+(153 cities), SAR/SEM spatial models estimated by Kelejian–Prucha GMM, quantile regressions and a machine-learning |
|
45 |
+benchmark. The discussion benchmarks magnitudes against the quasi-experimental literature and draws policy implications |
|
46 |
+for CITQ registration and Montreal zoning, while cautioning against causal readings. |
| 119 |
47 |
|
| 120 |
|
−</div> |
|
48 |
+## 🏆 Headline results |
| 121 |
49 |
|
| 122 |
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 | |
| 125 |
|
−| 2 | Per-listing association **decays monotonically with distance** | Table 10 · Fig. 4 | |
| 126 |
|
−| 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 | |
| 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 | |
| 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 | |
| 130 |
|
− |
| 131 |
|
−--- |
|
52 |
+| 1 | Each additional Airbnb listing within 500 m ⇒ ≈ +0.4 % monthly rent (β = 0.0039***) | Table 3 (1c) · §7.1 | |
|
53 |
+| 2 | The per-listing association decays monotonically with distance (0.93 % at 250 m → 0.06 % at 2 km) | Table 10 · Fig. 4 | |
|
54 |
+| 3 | Significant at every quantile, rising to 0.0047 at τ = 0.90 (~25 % above OLS) | Table 7 · Fig. 5 | |
|
55 |
+| 4 | Substantial spatial dependence (ρ̂ = 0.137***, λ̂ = 0.539); coefficient survives GMM spatial models (0.0034) | Table 6 | |
|
56 |
+| 5 | Airbnb nightly prices driven by listing characteristics; superhost enters with a *discount* | Table 4 · §7.1 | |
|
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 | |
| 132 |
58 |
|
| 133 |
|
−## 📁 Repository Map |
|
59 |
+## 🗂 Repository layout |
| 134 |
60 |
|
| 135 |
61 |
``` |
| 136 |
62 |
wp5_uqo/ |
| 137 |
|
−├── 📄 README.md ← you are here |
| 138 |
|
−├── 🔎 AUDIT.md ← forensic audit of the original project |
| 139 |
|
−├── 📝 CHANGES.md ← restructuring & rewrite log |
| 140 |
|
−├── 🧪 PAPER_REVIEW.md ← pre-upgrade critical assessment |
| 141 |
|
−├── 📚 UPGRADE_REPORT.md ← literature expansion report (per-ref justification) |
| 142 |
|
−├── 📦 requirements.txt ← pinned dependencies |
| 143 |
|
−│ |
|
63 |
+├── README.md |
|
64 |
+├── requirements.txt # pinned dependencies |
|
65 |
+├── docs/ # AUDIT.md · CHANGES.md · PAPER_REVIEW.md · UPGRADE_REPORT.md |
| 144 |
66 |
├── data/ |
| 145 |
|
−│ ├── raw/ ← airbnb.csv + rent.json (NOT distributed → README) |
| 146 |
|
−│ └── processed/ ← 5 verified parquet datasets (committed) |
| 147 |
|
−│ |
| 148 |
|
−├── src/ ← shared modules |
| 149 |
|
−│ ├── config.py ← all paths & constants |
| 150 |
|
−│ ├── geo.py ← vectorised Haversine matrix |
| 151 |
|
−│ ├── latex_tables.py ← stargazer-style table builder |
| 152 |
|
−│ └── plotting.py ← publication matplotlib styles |
| 153 |
|
−│ |
| 154 |
|
−├── scripts/ ← 01 → 11 numbered pipeline |
| 155 |
|
−├── figures/ ← 16 publication PDF figures |
| 156 |
|
−├── results/tables/ ← 13 LaTeX fragments + 4 CSVs |
| 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) |
|
67 |
+│ ├── raw/ # airbnb.csv + rent.json — NOT distributed (see data/raw/README.md) |
|
68 |
+│ └── processed/ # 5 verified parquet datasets (committed) |
|
69 |
+├── src/ |
|
70 |
+│ ├── config.py # all paths & constants |
|
71 |
+│ ├── geo.py # vectorised Haversine matrix |
|
72 |
+│ ├── latex_tables.py # stargazer-style table builder |
|
73 |
+│ └── plotting.py # publication matplotlib styles |
|
74 |
+├── scripts/ # 01 → 11 numbered pipeline |
|
75 |
+├── figures/ # 16 publication PDF figures |
|
76 |
+├── results/tables/ # 13 LaTeX fragments + 4 CSVs |
|
77 |
+├── results/logs/ # data-inspection log |
|
78 |
+└── paper/ # main.tex + sections/ + appendix/ + references.bib → main.pdf |
| 163 |
79 |
``` |
| 164 |
80 |
|
| 165 |
|
−--- |
| 166 |
|
− |
| 167 |
|
−## 💾 Data |
| 168 |
|
− |
| 169 |
|
−<div align="center"> |
|
81 |
+## 🚀 Quick start |
| 170 |
82 |
|
| 171 |
|
−[]() |
| 172 |
|
−[]() |
| 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. |
|
83 |
+```bash |
|
84 |
+python3 -m pip install -r requirements.txt |
| 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 |
92 |
| Step | Script | Produces | ⏱ | |
| 192 |
93 |
|:-:|---|---|:-:| |
| 202 |
103 |
| 10 | `10_robustness_tables_figures.py` | outlier/subsample tables + 3 figures | ⚡ | |
| 203 |
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> |
| 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 |
|
106 |
+⚡ = under 15 s on Apple Silicon. Fully deterministic (seed 42). |
| 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 |
| 277 |
|
−- ✅ **14/16 tables byte-identical** (2 residual float-level diffs documented in [`AUDIT.md`](AUDIT.md) §8) |
| 278 |
|
−- ✅ All figures regenerated, including 5 missing from the original (which broke its LaTeX build) |
| 279 |
|
−- ✅ Every text↔table inconsistency corrected *in the prose only* — itemised in [`CHANGES.md`](CHANGES.md) |
| 280 |
|
−- ✅ All 32 references added in the scholarly upgrade **verified via Crossref/JMLR** (DOIs) — per-reference justification in [`UPGRADE_REPORT.md`](UPGRADE_REPORT.md) |
| 281 |
|
− |
| 282 |
|
−--- |
| 283 |
|
− |
| 284 |
|
−## 📖 Citation |
|
110 |
+| Dataset | Source | Raw → Clean | Key fields | |
|
111 |
+|---|---|---|---| |
|
112 |
+| Airbnb listings | Airbnb (scraped) | ~5,000 → 3,456 | nightly price, lat/lon, property type, rating, reviews, superhost | |
|
113 |
+| Rental listings | Realtor.ca (scraped) | 8,356 → 8,303 | monthly rent, lat/lon, bedrooms, bathrooms, building type, size | |
|
114 |
+ |
|
115 |
+Spatial merge: for every rental listing × radius r ∈ {250 m, 500 m, 1 km, 2 km}, six metrics computed against all |
|
116 |
+Airbnb listings via chunked vectorised Haversine distances, plus city-level aggregates (24 exposure variables). Raw |
|
117 |
+files are not distributed (`data/raw/README.md`); the committed parquets make steps 04–11 and the paper reproducible. |
|
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 |
161 |
```bibtex |
| 287 |
162 |
@techreport{boucher2026airbnb, |
| 288 |
163 |
author = {Boucher, Simon-Pierre}, |
| 289 |
164 |
title = {Airbnb, Residential Rents, and Housing Market Pressure: |
| 290 |
165 |
A Hedonic and Spatial Econometric Analysis}, |
| 291 |
|
− institution = {Universit\'e du Qu\'ebec en Outaouais, |
| 292 |
|
− D\'epartement des sciences administratives}, |
|
166 |
+ institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives}, |
| 293 |
167 |
type = {Working Paper}, |
| 294 |
168 |
number = {5}, |
| 295 |
169 |
year = {2026}, |
| 296 |
|
− month = {May}, |
| 297 |
|
− address = {Gatineau, QC, Canada} |
|
170 |
+ month = {May} |
| 298 |
171 |
} |
| 299 |
172 |
``` |
| 300 |
173 |
|
| 301 |
|
−--- |
| 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> |
|
174 |
+## 👤 Author & contact |
| 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. |