# Collection Équinoxe — hausse de loyer 2026 · 2026 rent increase
CodeML 2026 · JADCO · « Clés en main »

**Estimation finale : 4,80 %** — hausse **effective** à unité identique en 2026 : moyenne des croissances annualisées du loyer effectif
(`sRentEffective`, après les concessions enregistrées) entre deux baux consécutifs d'une même unité (`sPropCode` + `sUnitCode`), pour les baux qui
commencent en 2026. En loyer contractuel (`sRent`) : 6,38 %. Par immeuble : de 4,3 % (The Met) à 5,1 % (Westpark).

**Final estimate: 4.80%** — **effective** same-unit increase in 2026: the average annualised growth of effective rent (`sRentEffective`, after recorded
concessions) between two consecutive leases of the same unit (`sPropCode` + `sUnitCode`), for leases starting in 2026. Contractual rent (`sRent`): 6.38%.
By building: from 4.3% (The Met) to 5.1% (Westpark).

Pressé? Ouvrir `00_START_HERE.html` : il dit quoi lire en cinq minutes. · In a hurry? Open `00_START_HERE.html`: it says what to read in five minutes.

---

## Contenu du dossier · What is in this folder

| Dossier · Folder | Fichier · File | Livrable de la consigne · Deliverable in the brief |
|---|---|---|
| `01_Notebooks/` | `01_Notebook_principal_Equinoxe_2026_FR.ipynb` | **Notebook Jupyter, livrable principal évalué**, construit à partir de `starter.ipynb`, avec `estimate_2026()` et `backtest()` complétées. Déjà exécuté. · **Main graded Jupyter notebook**, built from `starter.ipynb`, with `estimate_2026()` and `backtest()` completed. Already run. |
| | `02_Notebook_copie_anglaise_Equinoxe_2026_EN.ipynb` | Le même notebook en anglais, code identique. · The same notebook in English, identical code. |
| | `05_Modele_parametres_Model_parameters.json` | Paramètres figés de la méthode (voir « Modèle » ci-dessous) · Fixed parameters of the method (see "Model" below) |
| | `requirements.txt`, `external_context.csv`, `external_postorigin_2026.csv`, `building_context.csv` | Nécessaires pour ré-exécuter le notebook; données **publiques** uniquement · Needed to re-run the notebook; **public** data only |
| `02_Presentation/` | `03_Presentation_FR.pdf`, `03_Presentation_EN.pdf`, `03_Film_presentation_1min.mp4` | Présentation devant le jury · Presentation to the jury |
| | `Guide_du_jury_FR.pdf`, `Jury_guide_EN.pdf` | Résumé de deux pages : où trouver chaque critère de la grille · Two-page summary: where each grading criterion is covered |
| | `Rapport_interactif_Interactive_report_FR-EN.html` | Le notebook exécuté en page web (bouton FR/EN), sans rien installer · The executed notebook as a web page (FR/EN switch), nothing to install |
| `03_Prototype_facultatif_Optional_prototype/` | `04_Prototype_facultatif_cockpit_simulation.zip`, `DEMO_ACCESS.txt` | Application / prototype (facultatif) : cockpit de tarification et simulation de résidents fictifs · Application / prototype (optional): pricing cockpit and fictional-resident simulation |
| `04_Technique_Technical/` | `BACKEND_EXPLAINED.md`, `VERIFIED_RESULTS.md`, `Code_complet_modules_et_tests_Full_code_and_tests/` | Comment le moteur fonctionne, ce qui a été vérifié, et les modules Python avec leurs 84 tests · How the engine works, what was verified, and the Python modules with their 84 tests |
| racine · root | `00_START_HERE.html`, `MANIFEST.sha256.json` | Page d'entrée bilingue; empreintes SHA-256 de chaque fichier · Bilingual entry page; SHA-256 of every file |

**Aucune donnée du CRM n'est incluse** : le notebook lit les quatre CSV du concours au moment de l'exécution et n'affiche que des agrégats.
**No CRM data is included**: the notebook reads the four competition CSVs at run time and shows aggregates only.

## Exécuter le notebook · How to run the notebook

1. Python 3.12 ou 3.13, puis · then: `python -m pip install -r requirements.txt` (depuis `01_Notebooks/` · from `01_Notebooks/`)
2. Placer les quatre CSV d'origine du concours **à côté du notebook**, comme pour le starter · Put the four original competition CSVs **next to the notebook**, as for the starter:
   `equinoxe_listings.csv`, `equinoxe_lease_history.csv`, `equinoxe_concessions.csv`, `equinoxe_asking_history.csv`.
   (Facultatif · optional : les garder ailleurs et définir · keep them elsewhere and set `EQUINOXE_DATA_DIR`.)
3. Garder les trois CSV publics du dossier à côté du notebook · Keep the three public CSVs of the folder next to the notebook.
4. Ouvrir le notebook, puis *Restart Kernel / Run All* · Open the notebook, then *Restart Kernel / Run All*. Moins d'une minute · under a minute.
   Aucun accès réseau; les fichiers sources ne sont jamais modifiés · No network access; source files are never modified.

Dans le notebook, chaque étape garde son titre, son résumé (« En bref »), son code et ses résultats visibles; les explications plus longues se déplient
en cliquant sur **Détails**. · In the notebook, each step keeps its title, its summary ("In short"), its code and its results visible; longer explanations
open by clicking **Details**.

## Versions des librairies · Library versions

pandas 2.2.3 · NumPy 2.3.5 · matplotlib 3.11.2 · scikit-learn 1.9.1 · XGBoost 2.1.4 · nbformat 5.11.1 · nbclient 0.11.0 · ipykernel 7.4.0
(versions épinglées dans `requirements.txt` et affichées dans la première cellule de code · pinned in `requirements.txt` and printed in the first code cell).
Le notebook livré a été exécuté le 4 octobre 2026 avec Python 3.13.16; la même exécution sous Python 3.12.7 donne les mêmes chiffres. ·
The delivered notebook was run on 4 October 2026 with Python 3.13.16; the same run under Python 3.12.7 gives the same figures.

## Modèle · Model

La méthode retenue n'est **pas un modèle entraîné** : c'est une combinaison fixe de trois lectures (élan de l'an dernier, conversion du contractuel en effectif
unité par unité, tendance de long terme), par immeuble et par type de bail. Ses paramètres sont figés dans `ForecastSpec` (section 4b du notebook) et dans
`05_Modele_parametres_Model_parameters.json`; les statistiques sont recalculées à partir des baux à chaque exécution. XGBoost et Ridge ont été testés
(section 9) et non retenus : aucun fichier de modèle entraîné n'est donc nécessaire.

The adopted method is **not a trained model**: it is a fixed combination of three readings (last year's momentum, contract-to-effective conversion unit by
unit, long-term trend), by building and by lease type. Its parameters are fixed in `ForecastSpec` (notebook section 4b) and in
`05_Modele_parametres_Model_parameters.json`; statistics are recomputed from the leases at each run. XGBoost and Ridge were tested (section 9) and not
adopted, so no trained model file is needed.

Validation : rejouée au 31 décembre de chaque année de 2020 à 2025, la méthode a une erreur moyenne de 1,14 point. Sur la fenêtre exigée 2023–2025 son erreur
est de 1,29 point, et une simple moyenne historique fait un peu mieux (1,14 point) : nous le montrons tel quel à la section 7.5. ·
Validation: replayed as at 31 December of each year from 2020 to 2025, the method's mean error is 1.14 points. On the required 2023–2025 window it is
1.29 points, and a plain historical average does slightly better (1.14 points): we show that as it is, in section 7.5.

## Sources publiques · Public sources

Valeurs, périodes, dates de publication et liens exacts dans les CSV publics · Exact values, periods, release dates and links are in the public CSVs.

- SCHL / CMHC — Enquête sur les logements locatifs, RMR de Montréal et d'Ottawa : https://www.cmhc-schl.gc.ca
- Statistique Canada — IPC, composante loyers, Québec et Ontario (tableau 18-10-0004-01) : https://www150.statcan.gc.ca
- Tribunal administratif du logement — calcul annuel de l'augmentation de loyer (le pourcentage de base n'est pas un plafond · the base percentage is not a cap) : https://www.tal.gouv.qc.ca
- Ontario — ligne directrice sur l'augmentation des loyers : https://www.ontario.ca/page/rent-increase-guideline
- Contexte par immeuble (`building_context.csv`, contexte seulement · context only) : OpenStreetMap (https://www.openstreetmap.org);
  permis de construire en données ouvertes de Laval et Montréal (https://www.donneesquebec.ca) et d'Ottawa (https://open.ottawa.ca);
  zones inondables de la CMM et de la Ville d'Ottawa; îlots de chaleur INSPQ 2020-2022 (https://www.donneesquebec.ca).

## Références · References

- scikit-learn, *Common pitfalls and recommended practices* (fuite de données, sélection · leakage, selection) : https://scikit-learn.org/stable/common_pitfalls.html
- Hyndman & Athanasopoulos, *Forecasting: Principles and Practice*, validation chronologique · time-series cross-validation : https://otexts.com/fpp3/tscv.html
- XGBoost, TreeSHAP via `pred_contribs` : https://xgboost.readthedocs.io

## Outils d'IA utilisés · AI tools used

Permis par la consigne et cités dans la section Références du notebook · Allowed by the brief and cited in the notebook's References section.

- **Codex (OpenAI)** : audit des composants, correction du protocole d'origine, code et tests du modèle 2.1.0; revue finale de soumission · component audit,
  origin-protocol fixes, code and tests of model 2.1.0; final submission review.
- **Claude (Anthropic; Claude Code avec Opus 5.5, Sonnet 5.5 et Fable 5.1)** : vérification des sources publiques, analyses complémentaires, réorganisation du notebook
  autour du starter, traduction anglaise, prototype, corrections finales de formulation et assemblage du dossier; réactions des résidents **fictifs** de la
  simulation · public-source verification, additional analyses, notebook reorganisation around the starter, English translation, prototype, final wording
  corrections and packaging; reactions of the **fictional** residents in the simulation.
- **Higgsfield** : images vidéo et voix off du film, générées par IA · AI-generated video footage and voice-over of the film.
  Musique · music: « Rising Tide », Kevin MacLeod (incompetech.com), licence CC BY 4.0.

Chaque valeur publique a été revérifiée sur sa source officielle, et chaque calcul du notebook est vérifié par des tests automatiques (84 tests, dossier
`04_Technique_Technical`). L'équipe reste responsable des choix, de leur validation et de la présentation. · Each public value was re-checked against its
official source, and every calculation in the notebook is checked by automated tests (84 tests, folder `04_Technique_Technical`). The team remains
responsible for the choices, their validation and the presentation.
