Commit
Stage D batches N2/N3/N4/N5/L2 — WP02-ECON-02 THEO-01 EDIT-15 THEO-06 ADVE-05 ECON-07 ECON-10 THEO-07 ECON-11 EDIT-12 ECON-05 ADVE-03 EDIT-01 EDIT-02 ADVE-01 EDIT-04 ECON-03 THEO-14 ADVE-02 THEO-04 ADVE-06 ADVE-12 ADVE-09 ADVE-13 DATA-02 ADVE-08 DATA-08 DATA-07 DATA-09 DATA-11 DATA-01 DATA-03 EDIT-08 THEO-11 ADVE-18
N2: scripts/12_specifications_v2.py (11 designs x 5 encoder variants x {raw, centred contrasts, Löwdin}
x {S_main, S_v11, S_nodup} x {rule, langdetect} = 530 cells; unscaled dummies; per-0.10-cosine scale;
HC3 / FSA-clustered t and F(q, G-1); Holm, BH, Romano–Wolf (FSA-cluster bootstrap B=999) on the 55
main-grid cells with a pre-stated 90 % survival criterion; LMG decomposition; domain tests with Holm;
Models A–E on the v2 design; leverage of the raw lot field; --legacy reproduces the 14 v1.2 rows at 1e-14),
scripts/15_spatial_inference.py (Moran's I k=10 with permutation p; Conley 5/10/20 km; decision rule).
N3: scripts/13_multiverse.py (200 phrasing draws x 2 encoders x 3 specs x {raw, centred} x {S_main, S_v11};
the three v1.2 variants reproduced). N4: scripts/14_oos_v2.py (random x20, FSA x20, leave-one-region-out,
GroupKFold by region, k-means distance blocks + 10 km buffer, duplicate-grouped, S_nodup; training-fold FE
with municipality/region/grand-mean fallback; Clark–West, Diebold–Mariano, bootstrap CIs, MCS; price-masked
encoders; --legacy reproduces revision_oos.csv at 1e-16). N5: scripts/16_pca_benchmark.py (Table 9 from a
script; PC1 correlations), scripts/17_inline_numbers.py (results/inline_numbers.json, 2,607 keys),
run_all.sh, tests/ (data, legacy results at rtol 1e-6, embeddings at 1e-5, leakage), environment/
(lock with transitive pins, pip freeze, hardware, HF revisions, SHA-256), data/DATA_AVAILABILITY.md
(users-table exclusion, scrape window 7–11 Jan 2026, shareable extract), LICENSE (MIT), data citation and
model-card entries in references.bib, README runtimes. L2: scripts/18_tables_v2.py (16 tables with labels,
Table 9 regenerated from CSV without self-ratings) and scripts/19_figures_v2.py (fig13–fig16).
results/v2/*.csv|json committed; no data, embeddings or texts.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
modified
.gitignore
+5 −3
@@ -34,13 +34,15 @@ logs/ | ||
| 34 | 34 | # macOS |
| 35 | 35 | .DS_Store |
| 36 | 36 | |
| 37 | −# Project-specific: raw SQLite + processed caches (see data/README.md) | |
| 38 | −data/* | |
| 39 | −!data/README.md | |
| 37 | +# Project-specific: raw SQLite + processed caches (see data/README.md); the directories themselves are | |
| 38 | +# not ignored so that the id+label sample files and data/ref can be committed | |
| 39 | +data/raw/* | |
| 40 | +data/processed/* | |
| 40 | 41 | |
| 41 | 42 | # Stage D (2026-11-03): committed derived reference map and id+label sample files (no text) |
| 42 | 43 | !data/ref/ |
| 43 | 44 | !data/ref/** |
| 45 | +!data/processed/.gitkeep | |
| 44 | 46 | !data/processed/language_sample_300.csv |
| 45 | 47 | !data/processed/dimension_sample_300.csv |
| 46 | 48 | !data/DATA_AVAILABILITY.md |
added
LICENSE
+25 −0
@@ -0,0 +1,25 @@ | ||
| 1 | +MIT License | |
| 2 | + | |
| 3 | +Copyright (c) 2026 Simon-Pierre Boucher | |
| 4 | + | |
| 5 | +Permission is hereby granted, free of charge, to any person obtaining a copy | |
| 6 | +of this software and associated documentation files (the "Software"), to deal | |
| 7 | +in the Software without restriction, including without limitation the rights | |
| 8 | +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| 9 | +copies of the Software, and to permit persons to whom the Software is | |
| 10 | +furnished to do so, subject to the following conditions: | |
| 11 | + | |
| 12 | +The above copyright notice and this permission notice shall be included in all | |
| 13 | +copies or substantial portions of the Software. | |
| 14 | + | |
| 15 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| 16 | +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| 17 | +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
| 18 | +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
| 19 | +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
| 20 | +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
| 21 | +SOFTWARE. | |
| 22 | + | |
| 23 | +The code licence does not cover the data: the Realtor.ca listing database and the | |
| 24 | +listing texts are proprietary platform content and are not distributed (see | |
| 25 | +data/DATA_AVAILABILITY.md). | |
modified
README.md
+11 −2
@@ -152,11 +152,20 @@ python3 scripts/06_tables.py # LaTeX tables from results | ||
| 152 | 152 | python3 scripts/07_revision_extensions.py # ~25 s (+ model downloads on first run) |
| 153 | 153 | python3 scripts/08_revision_tables.py # revision tables + fig12 |
| 154 | 154 | |
| 155 | +./run_all.sh # Stage D (2026-11-03): scripts 09–20, results/v2, v2 tables/figures, tests | |
| 156 | + | |
| 155 | 157 | cd paper && make # latexmk → main.pdf (61 pages) |
| 156 | 158 | ``` |
| 157 | 159 | |
| 158 | −Total runtime ≈ 8 minutes on an Apple-silicon laptop (embeddings cached after the first run). All stochastic steps are | |
| 159 | −seeded (`seed = 42`). Expected checkpoints: step 3 prints `R² = 0.4525 / 0.4647 / 0.4962 / 0.5122 / 0.5118` and | |
| 160 | +Measured runtimes (Stage D run of 2026-11-03, Apple M5 Max 18 cores / 48 GB, macOS 27.0, Python 3.14.4, device `mps`, | |
| 161 | +1-min load 100–160 from concurrent jobs, every script under `nice -n 10` with `OMP_NUM_THREADS=4`): steps 01–08 ≈ 8 min | |
| 162 | +warm (embedding caches present; cold: + 86 s MiniLM and + 30 s multilingual encoding on MPS, + model downloads ≈ 560 MB); | |
| 163 | +Stage D batches (`./run_all.sh`, scripts 09–20): 09 data audit 49 s (+ 55 s with `--llm-labels`), 10 re-encodings 7 min | |
| 164 | +cold / 3 min warm, 11 geometry 1 s, 12 specification grid 3 min 48 s (530 cells + Romano–Wolf B = 999 on 55 cells, 6 workers), | |
| 165 | +13 multiverse 7 min (200 draws × 18 cells), 14 out-of-sample 12 min (257 fold sets, bootstrap and MCS), 15 spatial 10 s, | |
| 166 | +16–20 < 10 s each; `pytest tests` ≈ 45 s (run `tests/test_embeddings.py` in its own process: torch and scikit-learn each load | |
| 167 | +an OpenMP runtime and the mixed process segfaults under load). All stochastic steps are seeded (`seed = 42`; CV seeds 42–61; | |
| 168 | +multiverse seeds 42 + draw). Environment lock, hardware and SHA-256 checksums: `environment/`. Expected checkpoints: step 3 prints `R² = 0.4525 / 0.4647 / 0.4962 / 0.5122 / 0.5118` and | |
| 160 | 169 | `F = 99.53`; step 7 prints `dR2(sims)=0.0475` (D), `0.0174` (D-L), `0.0197` (D-L + FSA FE), `0.0392` (ML-D-L + FSA FE). |
| 161 | 170 | |
| 162 | 171 | ## 🗃 Data |
added
data/DATA_AVAILABILITY.md
+70 −0
@@ -0,0 +1,70 @@ | ||
| 1 | +<!-- Author: Simon-Pierre Boucher — contact@spboucher.ai --> | |
| 2 | + | |
| 3 | +# Data availability statement (Stage D draft, 2026-11-03; to be inserted in §4.1 by the author) | |
| 4 | + | |
| 5 | +## Source and provenance | |
| 6 | + | |
| 7 | +The listings were extracted from the public pages of Realtor.ca (Canadian Real Estate | |
| 8 | +Association, Data Distribution Facility JSON records; every record carries the DDF keys | |
| 9 | +`MlsNumber`, `RelativeURLEn`/`RelativeURLFr`, `TimeOnRealtor`). Listings originating from | |
| 10 | +the Centris broker system of the Quebec real-estate boards appear on Realtor.ca by | |
| 11 | +syndication; "Centris" therefore designates the upstream broker system, not a second | |
| 12 | +source. The extraction ran from **2026-01-07 21:14 UTC to 2026-01-11 17:06 UTC** | |
| 13 | +(field `scrapedAt`, three calendar days of activity), not on a single day. The raw file is | |
| 14 | +the SQLite database `louka.db` (267,902,976 bytes, SHA-256 | |
| 15 | +`5dfba878151002cc9ed912c051bc2662a07492e6c759e13f054d7cc5333fe493`), table `properties` | |
| 16 | +(46,479 listings in five categories; 17,089 single-family houses, of which 17,087 enter the | |
| 17 | +analysis sample). Prices are **asking prices** at the time of extraction; no transaction | |
| 18 | +price and no listing date other than the extraction window is available. | |
| 19 | + | |
| 20 | +## What is not redistributed | |
| 21 | + | |
| 22 | +* `louka.db` itself and the listing texts (`PublicRemarks`): proprietary platform content | |
| 23 | + subject to the Realtor.ca terms of use; the texts cannot be redistributed and are not | |
| 24 | + needed to reproduce any table from the analysis data below. | |
| 25 | +* The embeddings of the texts (`embeddings_*.npy`): a 384-dimensional representation of the | |
| 26 | + proprietary texts, withheld for the same reason. | |
| 27 | +* **The application `users` table.** The database file also contains an application table | |
| 28 | + `users` (columns id, username, password — a credentials schema; 0 rows at the time of the | |
| 29 | + 2026-11-03 audit). This table is never read by any script (the database is opened | |
| 30 | + read-only and immutable, `src/data.py`), it is excluded from every extract, and the | |
| 31 | + shareable extract described below does not contain it. | |
| 32 | + | |
| 33 | +## What is shareable (text-free analysis data, DCAS "analysis data") | |
| 34 | + | |
| 35 | +| File | Content | Rows × cols | | |
| 36 | +|---|---|---| | |
| 37 | +| `data/processed/hedonic_maison_results.csv` | v1.2 analysis dataset: id, price, log price, six structural fields (v1.2 coding), description length, 20 cosine similarities (MiniLM-L6) | 17,087 × 30 | | |
| 38 | +| `data/processed/revision_fields.csv` | language class (stop-word rule), FSA, municipality, lot and floor area (m²) | 17,087 × 6 | | |
| 39 | +| `data/processed/fields_v2.parquet` | Stage D fields: samples (S_main, S_nodup, S_floor), language labels (rule, cleaned rule, langdetect), administrative region, boilerplate / price-mention / collision flags | 17,087 × 20 | | |
| 40 | +| `data/processed/houses_v2.parquet` **minus the `remarks` column** | v2 structural fields (float counts, raw strings, missing indicators, lot/floor m², MLS number, scrape time, postal code) | 17,087 × 36 | | |
| 41 | +| `data/processed/sim_<variant>_{raw,centred,lowdin}.npy`, `sim_<variant>_mean.npy` | 20 similarities per listing for every encoder variant and similarity variant | 17,087 × 20 | | |
| 42 | +| `data/processed/references_{minilm,ml}.npy` | embeddings of the 20 reference texts (the texts are in Appendix Table reference_texts) | 20 × 384 | | |
| 43 | +| `data/processed/token_lengths.parquet` | word-piece counts per listing under both tokenisers | 17,087 × 3 | | |
| 44 | +| `data/processed/language_sample_300.csv`, `dimension_sample_300.csv` (committed) | ids + labels of the two 300-listing validation samples (stop-word rule, langdetect, two independent LLM passes — **LLM-coded, not human-coded**) | 300 × 9 / 300 × 13 | | |
| 45 | +| `data/ref/municipality_region.csv` (committed) | municipality string → administrative region (MAMH Répertoire des municipalités 2026) | 1,075 rows | | |
| 46 | + | |
| 47 | +From these files every estimation script (03–08, 12–17, 20) re-runs without the database; | |
| 48 | +scripts 01, 02, 09, 10 and 11 need `louka.db` / the texts (01, 09) or the embeddings (02, | |
| 49 | +10, 11). SHA-256 of every input and cache: `environment/checksums.txt`. | |
| 50 | + | |
| 51 | +## Codebook (analysis data) | |
| 52 | + | |
| 53 | +`id` Realtor.ca listing id (string) · `mls_number` MLS number (string) · `price` asking price | |
| 54 | +(CAD) · `log_price` · `bedrooms`, `bathrooms`, `half_baths`, `parking`, `stories` counts | |
| 55 | +(v1.2: integers with missing coded 0 and `'1.5'` storeys coded 0; v2: floats, NaN when | |
| 56 | +missing, with `*_missing` indicators) · `land_size` v1.2 raw lot field (mixed units) · | |
| 57 | +`lot_sqm`, `floor_sqm` unit-corrected areas (m²), `lot_unit` ∈ {m2, sqft, ac, hec, | |
| 58 | +dimensions, missing} · `latitude`, `longitude` · `postal_code`, `fsa` (first three | |
| 59 | +characters), `municipality`, `region` · `remarks_length` characters · `boilerplate` (<100 | |
| 60 | +characters or "See listing broker…") · `price_mention` (dollar amount or price-change phrase in | |
| 61 | +the text) · `geo_price_dup` id of the (lat, lon, price) collision group (−1 if none) · | |
| 62 | +`lang_rule`, `lang_rule_clean`, `lang_langdetect` ∈ {fr, en, mixed/other} · `in_main`, | |
| 63 | +`in_v11`, `in_nodup`, `in_floor` sample flags · `sim_<slug>` cosine similarities. | |
| 64 | + | |
| 65 | +## Citation, licence, deposit | |
| 66 | + | |
| 67 | +Data citation (references.bib key `realtor2026ddf`): Canadian Real Estate Association, | |
| 68 | +*Realtor.ca listings, Data Distribution Facility records*, accessed 7–11 January 2026. | |
| 69 | +Code: MIT licence (`LICENSE`). A DOI deposit of the text-free analysis files and code | |
| 70 | +(Zenodo or Borealis) is left to the author after Stage E (DCAS rule 14 pending). | |
modified
data/README.md
+12 −1
@@ -29,6 +29,7 @@ python3 scripts/05_figures.py | ||
| 29 | 29 | python3 scripts/06_tables.py |
| 30 | 30 | python3 scripts/07_revision_extensions.py # 2026-10-17 revision: language, FE, OOS, sensitivity, multilingual encoder |
| 31 | 31 | python3 scripts/08_revision_tables.py |
| 32 | +./run_all.sh # Stage D batches (scripts 09–20) | |
| 32 | 33 | ``` |
| 33 | 34 | |
| 34 | 35 | The pipeline recreates everything under `data/processed/`: |
@@ -41,7 +42,17 @@ The pipeline recreates everything under `data/processed/`: | ||
| 41 | 42 | | `hedonic_maison_results.csv` | analysis dataset used by all models/figures | |
| 42 | 43 | | `embeddings_multilingual.npy` | 17,087 × 384 embeddings from paraphrase-multilingual-MiniLM-L12-v2 (cache, step 07) | |
| 43 | 44 | | `revision_fields.csv` | language class, FSA, municipality, lot and floor area (m²) per listing (step 07) | |
| 44 | −| `legacy/` | pre-refactor artifacts kept for byte-level comparison | | |
| 45 | +| `houses_v2.parquet` | Stage D frame (17,087 × 37: float counts, raw strings, missing indicators, MLS, scrape time, FSA, municipality, lot/floor m², flags; step 09) | | |
| 46 | +| `fields_v2.parquet` | samples (S_main / S_nodup / S_floor), language labels (rule, cleaned rule, langdetect), region, flags (step 09) | | |
| 47 | +| `embeddings_{minilm_256,minilm_chunk,ml_128,ml_512,ml_chunk}[_masked].npy` | 17,087 × 384 encoder variants of the revision (step 10; SHA-256 in `environment/checksums.txt`) | | |
| 48 | +| `references_{minilm,ml}.npy`, `token_lengths.parquet` | reference embeddings; word-piece counts per listing (step 10) | | |
| 49 | +| `sim_<variant>_{raw,centred,lowdin,mean}.npy` | 17,087 × 20 similarity variants (step 11) | | |
| 50 | +| `language_sample_300.csv`, `dimension_sample_300.csv` (committed) | ids + labels of the LLM-coded validation samples (no text) | | |
| 51 | +| `_llm_sample_texts.csv`, `_reference_nearest_texts.csv` | texts for the coding passes / nearest listings — never committed | | |
| 52 | + | |
| 53 | +The pre-refactor `legacy/` folder of the author's checkout is produced by no script and is not part of the pipeline. | |
| 54 | +What can be shared and what cannot (including the application `users` table, never read and never extracted) is stated | |
| 55 | +in `DATA_AVAILABILITY.md`. | |
| 45 | 56 | |
| 46 | 57 | Embeddings are deterministic for a given model version, so a fresh run reproduces the |
| 47 | 58 | committed results exactly (see `docs/CHANGES.md` §3 and `docs/CHANGELOG-REVISION.md` §1). Both |
added
data/processed/dimension_sample_300.csv
+301 −0
@@ -0,0 +1,301 @@ | ||
| 1 | +id,lang_rule,sample_rank,luxe_A,terrain_nature_A,familial_A,tranquillite_A,a_renover_A,luxe_B,terrain_nature_B,familial_B,tranquillite_B,a_renover_B | |
| 2 | +28748489,fr,1,0,1,0,1,1,0,1,0,1,1 | |
| 3 | +28936240,fr,2,0,1,0,1,1,0,1,0,1,1 | |
| 4 | +29132529,fr,3,0,0,0,0,0,0,0,0,0,0 | |
| 5 | +28968074,en,4,0,1,1,1,0,0,1,0,1,0 | |
| 6 | +28988664,en,5,0,1,1,1,0,0,1,1,1,0 | |
| 7 | +28765168,fr,6,1,1,0,1,0,1,0,0,0,0 | |
| 8 | +28882063,fr,7,0,1,1,0,0,0,0,1,0,0 | |
| 9 | +29147909,en,8,0,1,0,0,0,0,0,0,0,0 | |
| 10 | +28848341,en,9,0,1,0,1,0,0,1,0,1,0 | |
| 11 | +28959078,en,10,0,0,0,0,0,0,0,0,0,0 | |
| 12 | +28862424,fr,11,0,1,0,1,0,0,1,0,1,0 | |
| 13 | +28587522,en,12,1,0,0,0,0,0,0,0,0,0 | |
| 14 | +28489623,fr,13,0,1,0,1,0,0,1,0,1,0 | |
| 15 | +29033898,fr,14,0,1,0,1,0,0,1,0,1,0 | |
| 16 | +29132000,en,15,1,1,1,0,0,1,1,0,0,0 | |
| 17 | +28968186,en,16,0,1,0,0,0,0,1,0,0,0 | |
| 18 | +29166446,fr,17,0,1,0,1,0,0,1,0,1,0 | |
| 19 | +29137500,en,18,0,1,1,0,0,0,0,0,0,0 | |
| 20 | +29146307,fr,19,0,0,1,1,0,0,0,1,1,0 | |
| 21 | +29192417,en,20,0,1,0,1,0,0,1,0,1,0 | |
| 22 | +28793571,en,21,1,1,0,0,0,0,1,0,0,0 | |
| 23 | +28981982,fr,22,0,1,0,1,0,0,0,0,1,0 | |
| 24 | +28418662,en,23,1,1,1,0,0,1,1,0,0,0 | |
| 25 | +28964682,fr,24,0,0,1,0,0,0,0,1,0,0 | |
| 26 | +26725338,fr,25,1,1,0,0,0,1,1,0,0,0 | |
| 27 | +27207482,en,26,0,0,1,0,0,0,0,0,0,0 | |
| 28 | +28863577,en,27,1,1,1,1,0,1,0,1,1,0 | |
| 29 | +29142817,fr,28,1,1,0,0,0,1,1,0,0,0 | |
| 30 | +29201659,en,29,0,0,1,0,0,0,0,1,0,0 | |
| 31 | +28730605,en,30,0,0,0,0,1,0,0,0,0,1 | |
| 32 | +28794216,en,31,0,1,0,1,0,0,1,0,1,0 | |
| 33 | +29209024,fr,32,0,0,1,0,0,0,0,0,0,0 | |
| 34 | +28948653,fr,33,0,1,1,1,0,0,0,0,1,0 | |
| 35 | +29167946,fr,34,1,0,0,0,0,0,0,0,0,0 | |
| 36 | +29066840,en,35,0,1,0,0,0,0,1,0,0,0 | |
| 37 | +28753035,fr,36,0,1,0,0,0,0,1,0,0,0 | |
| 38 | +28468763,fr,37,0,1,1,0,0,0,0,1,0,0 | |
| 39 | +29156943,fr,38,0,1,0,1,0,0,0,0,1,0 | |
| 40 | +29222335,fr,39,0,1,1,1,0,0,1,1,1,0 | |
| 41 | +28826831,en,40,1,1,0,1,0,0,1,0,1,0 | |
| 42 | +28639058,fr,41,0,1,0,0,0,0,1,0,0,0 | |
| 43 | +28107302,en,42,0,1,1,0,0,0,1,1,0,0 | |
| 44 | +28586756,fr,43,0,0,0,0,0,0,0,0,0,0 | |
| 45 | +29181706,fr,44,0,0,0,1,0,0,0,0,1,0 | |
| 46 | +28784346,fr,45,0,1,0,0,0,0,1,0,0,0 | |
| 47 | +29155459,en,46,0,1,0,0,0,0,0,0,0,0 | |
| 48 | +28865997,fr,47,0,0,0,0,1,0,0,0,0,1 | |
| 49 | +28921806,fr,48,0,1,0,0,0,0,1,0,0,0 | |
| 50 | +29022332,fr,49,0,0,0,1,0,0,0,0,1,0 | |
| 51 | +29034088,en,50,0,1,1,0,1,0,1,1,0,1 | |
| 52 | +28153110,en,51,1,0,1,0,0,1,0,0,0,0 | |
| 53 | +29012520,en,52,0,1,0,1,0,0,1,0,1,0 | |
| 54 | +28104649,en,53,1,1,0,1,0,1,1,0,1,0 | |
| 55 | +28502907,fr,54,0,1,0,0,0,0,0,0,0,0 | |
| 56 | +28597606,fr,55,0,0,1,1,0,0,0,0,1,0 | |
| 57 | +28883684,en,56,0,0,0,0,0,0,0,0,0,0 | |
| 58 | +29007792,fr,57,0,0,1,1,0,0,0,1,1,0 | |
| 59 | +29171306,fr,58,0,0,1,0,0,0,0,1,0,0 | |
| 60 | +28881966,fr,59,1,1,0,0,0,1,1,0,0,0 | |
| 61 | +28904678,fr,60,0,0,0,0,0,0,0,0,0,0 | |
| 62 | +28948298,fr,61,1,0,0,0,0,0,0,0,0,0 | |
| 63 | +28712395,en,62,1,1,0,0,0,1,1,0,0,0 | |
| 64 | +28749773,fr,63,0,1,0,0,0,0,1,0,0,0 | |
| 65 | +29200859,fr,64,0,1,0,1,0,0,0,0,1,0 | |
| 66 | +28346411,fr,65,0,0,0,0,0,0,0,0,0,0 | |
| 67 | +27817060,en,66,0,0,0,0,0,0,0,0,0,0 | |
| 68 | +29095491,fr,67,0,1,1,1,0,0,1,1,1,0 | |
| 69 | +29111987,en,68,0,0,1,0,0,0,0,0,0,0 | |
| 70 | +29056540,fr,69,1,1,0,1,0,1,1,0,1,0 | |
| 71 | +28508977,en,70,0,1,0,1,1,0,1,0,1,1 | |
| 72 | +28763373,en,71,0,1,1,1,0,0,1,1,1,0 | |
| 73 | +28994555,fr,72,0,1,0,0,0,0,1,0,0,0 | |
| 74 | +28978141,fr,73,0,1,0,1,0,0,1,0,1,0 | |
| 75 | +29176168,en,74,1,1,0,1,0,1,1,0,1,0 | |
| 76 | +29169342,fr,75,0,1,0,0,0,0,0,0,0,0 | |
| 77 | +28927648,en,76,1,1,0,0,0,1,1,0,0,0 | |
| 78 | +29191244,en,77,1,1,0,1,0,1,1,0,1,0 | |
| 79 | +29183574,fr,78,0,0,1,0,0,0,0,0,0,0 | |
| 80 | +28885327,en,79,0,0,1,0,1,0,0,0,0,1 | |
| 81 | +29215508,en,80,0,0,0,1,1,0,0,0,1,1 | |
| 82 | +29111021,fr,81,0,1,0,0,0,0,0,0,0,0 | |
| 83 | +28968085,en,82,0,0,0,1,0,0,0,0,1,0 | |
| 84 | +28846451,en,83,0,1,0,1,0,0,0,0,1,0 | |
| 85 | +29183051,fr,84,0,0,1,0,0,0,0,1,0,0 | |
| 86 | +28803591,en,85,0,1,1,0,0,0,0,1,0,0 | |
| 87 | +29186530,fr,86,0,0,0,0,0,0,0,0,0,0 | |
| 88 | +29038708,en,87,0,1,1,1,0,0,1,0,1,0 | |
| 89 | +29033073,fr,88,0,0,0,0,0,0,0,0,0,0 | |
| 90 | +29184921,fr,89,0,1,1,1,0,0,0,0,1,0 | |
| 91 | +28730541,fr,90,0,0,1,1,0,0,0,0,1,0 | |
| 92 | +28986548,en,91,0,0,1,0,0,0,0,1,0,0 | |
| 93 | +29142782,en,92,0,1,1,0,0,0,0,1,0,0 | |
| 94 | +28923168,fr,93,0,1,1,1,0,0,1,1,1,0 | |
| 95 | +29111473,en,94,0,0,1,1,0,0,0,0,1,0 | |
| 96 | +28939255,en,95,1,1,0,0,0,0,1,0,0,0 | |
| 97 | +28983234,en,96,0,1,0,1,0,0,1,0,1,0 | |
| 98 | +29179870,en,97,0,1,0,1,0,0,1,0,1,0 | |
| 99 | +28756848,fr,98,0,1,0,0,0,0,1,0,0,0 | |
| 100 | +29033257,en,99,0,0,1,0,0,0,0,0,0,0 | |
| 101 | +29128169,fr,100,0,0,0,0,0,0,0,0,0,0 | |
| 102 | +29062819,en,101,0,1,0,0,0,0,1,0,0,0 | |
| 103 | +29179900,fr,102,0,1,0,1,0,0,1,0,1,0 | |
| 104 | +28922285,en,103,0,0,1,0,0,0,0,1,0,0 | |
| 105 | +29055886,en,104,1,1,1,0,0,1,1,0,0,0 | |
| 106 | +28893784,en,105,1,1,0,0,0,1,1,0,0,0 | |
| 107 | +29007799,fr,106,0,1,1,0,0,0,0,1,0,0 | |
| 108 | +27578041,en,107,0,0,1,0,0,0,0,1,0,0 | |
| 109 | +29067891,fr,108,0,1,1,1,0,0,1,1,1,0 | |
| 110 | +28971026,fr,109,0,0,1,1,0,0,0,1,1,0 | |
| 111 | +28717229,fr,110,0,1,0,1,0,0,1,0,1,0 | |
| 112 | +28999625,fr,111,0,0,0,0,1,0,0,0,0,1 | |
| 113 | +28702149,fr,112,0,0,0,1,0,0,0,0,1,0 | |
| 114 | +28806518,fr,113,0,0,0,1,0,0,0,0,1,0 | |
| 115 | +28995717,fr,114,0,0,1,1,0,0,0,1,1,0 | |
| 116 | +28785189,fr,115,0,1,0,1,0,0,1,0,1,0 | |
| 117 | +29124516,fr,116,1,1,0,0,0,1,0,0,0,0 | |
| 118 | +28981449,fr,117,0,1,1,0,0,0,1,1,0,0 | |
| 119 | +28770374,fr,118,0,1,0,1,0,0,1,0,1,0 | |
| 120 | +28995910,en,119,0,0,1,0,0,0,1,0,0,0 | |
| 121 | +28886353,fr,120,0,0,1,0,0,0,0,0,0,0 | |
| 122 | +28785976,fr,121,0,0,1,1,0,0,0,1,1,0 | |
| 123 | +29196781,en,122,0,1,0,1,0,0,1,0,1,0 | |
| 124 | +29073838,en,123,1,0,0,0,0,1,0,0,0,0 | |
| 125 | +29144802,en,124,1,1,0,1,0,0,0,0,1,0 | |
| 126 | +29097811,en,125,0,0,1,1,0,0,0,0,1,0 | |
| 127 | +27350813,en,126,0,1,0,1,1,0,1,0,1,1 | |
| 128 | +29181693,en,127,0,0,1,1,0,0,0,0,1,0 | |
| 129 | +28846027,fr,128,0,1,1,0,0,0,1,1,0,0 | |
| 130 | +29116324,fr,129,0,1,0,0,0,0,0,0,0,0 | |
| 131 | +29220248,fr,130,0,0,1,0,0,0,0,0,0,0 | |
| 132 | +29154570,fr,131,0,1,0,0,0,0,1,0,0,0 | |
| 133 | +29012887,en,132,1,0,0,0,0,1,0,0,0,0 | |
| 134 | +29005130,en,133,1,1,0,1,0,1,1,0,1,0 | |
| 135 | +28883220,en,134,0,1,0,1,0,0,1,0,1,0 | |
| 136 | +29212980,fr,135,0,1,0,0,0,0,1,0,0,0 | |
| 137 | +27734718,en,136,0,0,0,1,1,0,0,0,1,1 | |
| 138 | +29089602,en,137,0,1,1,1,0,0,1,1,1,0 | |
| 139 | +29001537,en,138,1,1,0,1,0,0,1,0,1,0 | |
| 140 | +28964709,fr,139,0,1,0,0,0,0,1,0,0,0 | |
| 141 | +28982260,fr,140,0,1,0,0,0,0,0,0,1,0 | |
| 142 | +28894719,en,141,1,0,1,0,0,1,1,0,0,0 | |
| 143 | +29054248,en,142,0,0,1,0,0,0,0,0,0,0 | |
| 144 | +29069356,en,143,1,1,0,1,0,0,1,0,1,0 | |
| 145 | +28533836,en,144,1,1,0,0,0,1,1,0,0,0 | |
| 146 | +29145509,fr,145,0,1,1,1,0,0,0,1,1,0 | |
| 147 | +28533177,en,146,0,1,0,0,0,0,1,0,0,0 | |
| 148 | +29111469,en,147,0,1,1,1,0,0,0,0,1,0 | |
| 149 | +29190961,en,148,0,1,1,1,0,0,0,0,1,0 | |
| 150 | +28954162,fr,149,1,1,0,0,0,1,1,0,0,0 | |
| 151 | +28736135,en,150,1,0,0,1,0,1,0,0,1,0 | |
| 152 | +27987170,en,151,1,1,0,0,0,1,0,0,0,0 | |
| 153 | +28864726,en,152,0,0,1,0,0,0,0,1,0,0 | |
| 154 | +29063937,en,153,1,1,0,1,0,0,1,0,1,0 | |
| 155 | +28187798,fr,154,0,0,1,0,0,0,0,0,0,0 | |
| 156 | +28821921,en,155,0,0,0,0,0,0,0,0,0,0 | |
| 157 | +29166571,en,156,0,1,0,0,0,0,1,0,0,0 | |
| 158 | +29023495,fr,157,0,1,1,0,0,0,1,1,0,0 | |
| 159 | +29083211,en,158,0,1,0,1,0,0,1,0,1,0 | |
| 160 | +29211992,fr,159,0,1,0,0,0,0,1,0,0,0 | |
| 161 | +28805155,en,160,0,1,1,0,0,0,1,1,0,0 | |
| 162 | +29143751,fr,161,0,1,1,0,0,0,1,1,0,0 | |
| 163 | +29190304,en,162,0,0,1,0,0,0,0,1,0,0 | |
| 164 | +28748485,fr,163,0,0,1,1,1,0,0,1,1,0 | |
| 165 | +27842855,fr,164,0,1,0,0,0,0,0,0,0,0 | |
| 166 | +29142124,fr,165,0,1,0,0,0,0,1,0,0,0 | |
| 167 | +28468355,en,166,0,1,0,1,0,0,1,0,1,0 | |
| 168 | +28924252,fr,167,0,0,0,0,0,0,0,0,0,0 | |
| 169 | +28615665,en,168,1,0,1,0,0,1,0,0,0,0 | |
| 170 | +29135480,fr,169,0,1,0,0,0,0,0,0,0,0 | |
| 171 | +28896850,en,170,1,0,0,0,0,0,0,0,0,0 | |
| 172 | +29163004,fr,171,0,0,1,1,0,0,0,0,1,0 | |
| 173 | +28862232,fr,172,0,1,0,0,0,0,1,0,0,0 | |
| 174 | +28921859,en,173,0,0,0,0,0,0,0,0,0,0 | |
| 175 | +28836453,fr,174,0,0,1,0,0,0,0,1,0,0 | |
| 176 | +28226372,en,175,1,1,0,1,0,1,1,0,0,0 | |
| 177 | +29054995,fr,176,1,0,0,0,0,1,0,0,0,0 | |
| 178 | +29188745,en,177,0,1,0,1,0,0,1,0,1,0 | |
| 179 | +29018801,en,178,0,0,0,1,0,0,0,0,1,0 | |
| 180 | +28967831,fr,179,0,1,0,1,0,0,1,0,1,0 | |
| 181 | +28687560,en,180,1,1,0,1,0,1,1,0,1,0 | |
| 182 | +29174774,en,181,0,1,0,0,0,0,0,0,0,0 | |
| 183 | +28907841,fr,182,0,0,1,0,0,0,0,1,0,0 | |
| 184 | +29190955,en,183,0,1,0,1,0,0,1,0,1,0 | |
| 185 | +29178990,en,184,0,1,0,1,0,0,1,0,1,0 | |
| 186 | +28131720,fr,185,0,1,0,0,0,0,1,0,0,0 | |
| 187 | +28953081,en,186,1,1,0,1,0,1,1,0,1,0 | |
| 188 | +28720146,fr,187,0,1,0,1,0,0,1,0,1,0 | |
| 189 | +28682443,fr,188,0,1,0,0,0,0,0,0,0,0 | |
| 190 | +29084119,en,189,0,0,1,0,0,0,0,0,0,0 | |
| 191 | +28909224,fr,190,0,0,0,0,1,0,0,0,0,1 | |
| 192 | +28852412,fr,191,0,0,0,1,0,0,0,0,1,0 | |
| 193 | +28893109,en,192,0,1,0,1,1,0,1,0,1,1 | |
| 194 | +28478217,en,193,0,0,1,1,0,0,0,1,1,0 | |
| 195 | +29148687,en,194,0,1,1,0,0,0,0,1,0,0 | |
| 196 | +29169316,fr,195,0,1,0,1,1,0,1,0,1,0 | |
| 197 | +28340209,en,196,0,1,0,0,0,0,1,0,0,0 | |
| 198 | +29203036,en,197,0,1,1,0,0,0,0,1,0,0 | |
| 199 | +28846389,en,198,0,1,0,1,0,0,0,0,1,0 | |
| 200 | +29142045,fr,199,0,1,0,1,0,0,0,0,1,0 | |
| 201 | +28698285,en,200,0,1,1,1,0,0,0,1,1,0 | |
| 202 | +28654985,en,201,1,1,1,0,0,1,0,0,0,0 | |
| 203 | +28855442,en,202,1,1,1,1,0,1,1,1,1,0 | |
| 204 | +28958445,en,203,0,1,1,1,0,0,1,0,1,0 | |
| 205 | +28725742,fr,204,0,1,0,1,0,0,1,0,1,0 | |
| 206 | +28746700,fr,205,0,1,1,1,0,0,0,1,1,0 | |
| 207 | +29149043,fr,206,0,0,0,0,1,0,0,0,0,1 | |
| 208 | +29096257,fr,207,0,1,0,0,0,0,1,0,0,0 | |
| 209 | +27447014,fr,208,0,1,0,0,0,0,0,0,0,0 | |
| 210 | +28912945,en,209,0,1,0,1,0,0,1,0,1,0 | |
| 211 | +29151436,fr,210,0,1,0,0,0,0,0,0,0,0 | |
| 212 | +29169631,fr,211,0,0,1,0,0,0,0,1,0,0 | |
| 213 | +29107963,fr,212,0,0,0,0,0,0,1,0,0,0 | |
| 214 | +29011830,en,213,0,1,0,1,0,0,1,0,1,0 | |
| 215 | +28974979,en,214,0,0,1,0,0,0,0,1,0,0 | |
| 216 | +28868423,fr,215,1,1,0,0,0,1,1,0,0,0 | |
| 217 | +28767042,en,216,0,0,1,1,0,0,0,0,1,0 | |
| 218 | +29221271,fr,217,0,0,0,1,0,0,0,0,1,0 | |
| 219 | +27829695,en,218,1,1,0,0,0,1,1,0,0,0 | |
| 220 | +28209838,en,219,1,0,0,0,0,1,0,0,0,0 | |
| 221 | +28976297,fr,220,0,1,1,1,0,0,0,0,1,0 | |
| 222 | +29116034,fr,221,0,0,0,1,0,0,0,0,1,0 | |
| 223 | +29096181,en,222,0,1,0,0,1,0,1,0,0,1 | |
| 224 | +28496581,fr,223,0,1,0,1,0,0,1,0,1,0 | |
| 225 | +28885637,fr,224,0,1,0,0,0,0,1,0,0,0 | |
| 226 | +29007738,en,225,0,1,0,0,0,0,1,0,0,0 | |
| 227 | +29127621,en,226,0,0,0,0,0,0,0,0,0,0 | |
| 228 | +28673920,fr,227,0,1,0,0,0,0,0,0,0,0 | |
| 229 | +29162185,en,228,0,1,1,1,0,0,0,1,1,0 | |
| 230 | +29237657,fr,229,0,0,0,0,0,0,0,0,0,0 | |
| 231 | +28843950,en,230,0,0,1,0,0,0,1,1,0,0 | |
| 232 | +28232025,fr,231,0,1,0,0,0,0,1,0,0,0 | |
| 233 | +29105109,en,232,0,0,1,0,0,0,0,0,0,0 | |
| 234 | +29155340,fr,233,0,0,0,0,0,0,0,0,0,0 | |
| 235 | +29091368,en,234,0,0,0,0,0,0,0,0,0,0 | |
| 236 | +28874326,fr,235,0,0,0,0,0,0,0,0,0,0 | |
| 237 | +29201660,fr,236,0,1,0,1,0,0,1,0,1,0 | |
| 238 | +29051540,fr,237,0,1,0,0,0,0,1,0,0,0 | |
| 239 | +28620381,en,238,0,1,0,1,0,0,1,0,1,0 | |
| 240 | +28333361,fr,239,0,1,0,1,0,0,1,0,1,0 | |
| 241 | +28922096,en,240,1,1,0,1,0,1,1,0,1,0 | |
| 242 | +26946318,en,241,0,1,1,1,0,0,0,0,1,0 | |
| 243 | +29222629,en,242,0,0,0,0,0,0,0,0,0,0 | |
| 244 | +28852278,en,243,0,1,0,0,0,0,0,0,0,0 | |
| 245 | +28988631,fr,244,0,0,1,0,0,0,1,0,0,0 | |
| 246 | +29215592,fr,245,0,0,1,0,0,0,1,1,0,0 | |
| 247 | +29102341,en,246,1,0,0,0,0,1,0,0,0,0 | |
| 248 | +29197346,fr,247,1,1,0,1,0,1,0,0,1,0 | |
| 249 | +28915375,fr,248,1,1,0,1,0,1,1,0,1,0 | |
| 250 | +29215523,fr,249,0,1,0,0,0,0,1,0,0,0 | |
| 251 | +28570375,en,250,0,1,0,1,0,0,1,0,1,0 | |
| 252 | +28758043,en,251,0,1,0,0,0,0,0,0,0,0 | |
| 253 | +29112607,en,252,0,0,1,0,1,0,0,1,0,1 | |
| 254 | +29145496,fr,253,0,0,1,0,1,0,0,0,0,1 | |
| 255 | +28784788,en,254,0,1,0,0,0,0,1,0,0,0 | |
| 256 | +28852555,fr,255,0,0,1,0,0,0,0,0,0,0 | |
| 257 | +29125241,en,256,0,1,0,0,0,0,0,0,0,0 | |
| 258 | +28763351,en,257,0,0,0,0,0,0,0,0,0,0 | |
| 259 | +28860055,en,258,0,1,0,1,0,0,1,0,1,0 | |
| 260 | +29042488,en,259,0,1,0,0,0,0,0,0,1,0 | |
| 261 | +29226529,fr,260,0,0,1,1,0,0,0,1,1,0 | |
| 262 | +28874288,en,261,0,1,1,0,0,0,0,1,1,0 | |
| 263 | +27970357,en,262,1,1,0,0,0,1,1,0,0,0 | |
| 264 | +28873686,fr,263,0,1,0,1,0,0,1,0,1,0 | |
| 265 | +29025562,en,264,0,1,0,1,0,0,1,0,1,0 | |
| 266 | +28979985,en,265,0,0,1,1,0,0,0,1,1,0 | |
| 267 | +29072999,fr,266,0,1,0,0,0,0,0,0,0,0 | |
| 268 | +27090586,fr,267,0,1,0,0,0,0,1,0,0,0 | |
| 269 | +29189133,en,268,0,1,0,1,0,0,1,0,0,0 | |
| 270 | +28496491,fr,269,0,1,0,0,0,0,1,0,0,0 | |
| 271 | +28439073,en,270,0,0,0,1,0,0,0,0,1,0 | |
| 272 | +28888975,fr,271,0,0,0,1,0,0,0,0,1,0 | |
| 273 | +28788370,fr,272,0,0,1,0,0,0,0,1,0,0 | |
| 274 | +29006226,fr,273,0,1,0,1,0,0,1,0,1,0 | |
| 275 | +28892651,fr,274,0,1,0,1,0,0,1,0,1,0 | |
| 276 | +29104944,fr,275,0,1,1,1,0,0,1,1,1,0 | |
| 277 | +28728690,fr,276,0,0,1,0,1,0,0,0,0,1 | |
| 278 | +29003663,fr,277,0,0,1,0,1,0,0,1,0,1 | |
| 279 | +29180380,en,278,0,1,0,1,1,0,1,0,1,1 | |
| 280 | +29012521,fr,279,1,1,0,0,0,1,1,0,0,0 | |
| 281 | +29225211,fr,280,0,0,1,0,0,1,0,1,0,0 | |
| 282 | +29102485,fr,281,0,0,1,1,0,0,0,0,1,0 | |
| 283 | +29142761,fr,282,0,0,0,0,1,0,0,0,0,1 | |
| 284 | +29011858,fr,283,0,0,1,0,0,0,0,1,0,0 | |
| 285 | +28574927,fr,284,0,1,0,0,0,0,0,0,0,0 | |
| 286 | +29141574,en,285,0,1,0,0,0,0,0,0,0,0 | |
| 287 | +29181955,en,286,0,0,1,0,0,0,0,0,0,0 | |
| 288 | +29137577,en,287,0,0,1,0,0,0,0,1,0,0 | |
| 289 | +28776778,fr,288,0,0,0,0,0,0,0,0,0,0 | |
| 290 | +28448754,en,289,0,1,0,1,0,0,1,0,1,0 | |
| 291 | +29196206,en,290,0,0,0,0,0,0,0,0,0,0 | |
| 292 | +28964869,fr,291,1,1,0,1,0,1,1,0,1,0 | |
| 293 | +28669378,en,292,0,1,0,1,0,0,1,0,1,0 | |
| 294 | +29216541,fr,293,0,0,1,1,1,0,0,1,1,1 | |
| 295 | +25423114,fr,294,0,0,0,1,0,0,0,0,1,0 | |
| 296 | +28699964,en,295,0,1,1,1,0,0,0,0,1,0 | |
| 297 | +29222468,en,296,0,0,0,1,0,0,0,0,1,0 | |
| 298 | +29178002,en,297,0,1,1,1,0,0,0,1,1,0 | |
| 299 | +28979952,en,298,1,1,0,0,0,1,0,0,0,0 | |
| 300 | +28964566,en,299,0,0,0,0,0,0,0,0,0,0 | |
| 301 | +28514333,en,300,0,1,0,1,0,0,1,0,1,0 | |
added
data/processed/language_sample_300.csv
+301 −0
@@ -0,0 +1,301 @@ | ||
| 1 | +id,stratum,lang_rule,lang_langdetect,n_fr_sw,n_en_sw,sample_rank,llm_pass_A,llm_pass_B | |
| 2 | +29126557,en,en,en,0,23,1,en,en | |
| 3 | +28388803,fr,fr,fr,28,0,2,fr,fr | |
| 4 | +29192003,en,en,en,2,29,3,en,en | |
| 5 | +28371539,fr,fr,fr,23,3,4,fr,fr | |
| 6 | +28274142,fr,fr,fr,33,2,5,fr,fr | |
| 7 | +29179862,fr,fr,fr,31,1,6,fr,fr | |
| 8 | +29091005,boundary,fr,fr,9,2,7,fr,fr | |
| 9 | +28694854,fr,fr,fr,35,1,8,fr,fr | |
| 10 | +28683780,en,en,en,0,26,9,en,en | |
| 11 | +29227026,en,en,en,0,28,10,en,en | |
| 12 | +29041116,en,en,en,0,19,11,en,en | |
| 13 | +28523747,boundary,fr,fr,3,1,12,fr,fr | |
| 14 | +29142846,fr,fr,fr,32,1,13,fr,fr | |
| 15 | +28824259,en,en,en,0,26,14,en,en | |
| 16 | +28832762,boundary,fr,fr,6,2,15,fr,fr | |
| 17 | +26607607,boundary,fr,fr,9,2,16,fr,fr | |
| 18 | +27952812,en,en,en,0,26,17,en,en | |
| 19 | +29213069,en,en,en,0,36,18,en,en | |
| 20 | +29078522,fr,fr,fr,22,3,19,fr,fr | |
| 21 | +28682366,boundary,fr,fr,5,1,20,fr,fr | |
| 22 | +29090982,boundary,fr,fr,9,2,21,fr,fr | |
| 23 | +28840838,en,en,en,0,27,22,en,en | |
| 24 | +29148690,fr,fr,fr,20,0,23,fr,fr | |
| 25 | +29093012,en,en,en,1,30,24,en,en | |
| 26 | +28617996,fr,fr,fr,13,0,25,fr,fr | |
| 27 | +28369133,fr,fr,fr,36,0,26,fr,fr | |
| 28 | +29090957,boundary,fr,fr,9,2,27,fr,fr | |
| 29 | +29203501,fr,fr,fr,35,0,28,fr,fr | |
| 30 | +29147910,fr,fr,fr,35,0,29,fr,fr | |
| 31 | +28448843,boundary,fr,fr,16,4,30,fr,fr | |
| 32 | +28967751,fr,fr,fr,33,0,31,fr,fr | |
| 33 | +28362688,fr,fr,fr,19,1,32,fr,fr | |
| 34 | +28519309,en,en,en,2,18,33,en,en | |
| 35 | +29094387,boundary,fr,fr,4,1,34,fr,fr | |
| 36 | +28832761,en,en,en,0,25,35,en,en | |
| 37 | +28994340,boundary,fr,fr,17,8,36,mixed,mixed | |
| 38 | +29203117,fr,fr,fr,24,0,37,fr,fr | |
| 39 | +29100670,en,en,en,0,10,38,en,en | |
| 40 | +29073656,fr,fr,fr,15,0,39,fr,fr | |
| 41 | +28953382,en,en,en,0,16,40,en,en | |
| 42 | +29058199,boundary,fr,fr,8,2,41,fr,fr | |
| 43 | +28108562,boundary,fr,fr,10,3,42,fr,fr | |
| 44 | +29076724,boundary,fr,fr,9,2,43,fr,fr | |
| 45 | +29151371,fr,fr,fr,25,0,44,fr,fr | |
| 46 | +27965253,fr,fr,fr,28,2,45,fr,fr | |
| 47 | +28907013,fr,fr,fr,25,0,46,fr,fr | |
| 48 | +29123442,boundary,en,en,2,8,47,en,en | |
| 49 | +29184902,en,en,en,0,19,48,en,en | |
| 50 | +28989356,fr,fr,fr,33,0,49,fr,fr | |
| 51 | +29190917,fr,fr,fr,17,2,50,fr,fr | |
| 52 | +27943192,en,en,en,2,25,51,en,en | |
| 53 | +28981453,boundary,fr,fr,12,3,52,fr,fr | |
| 54 | +29098974,en,en,en,0,25,53,en,en | |
| 55 | +28188325,boundary,fr,fr,8,3,54,fr,fr | |
| 56 | +29007064,boundary,en,en,6,17,55,en,en | |
| 57 | +29212465,en,en,en,0,26,56,en,en | |
| 58 | +28324082,boundary,fr,fr,23,6,57,fr,fr | |
| 59 | +28280207,fr,fr,fr,27,0,58,fr,fr | |
| 60 | +29046560,en,en,en,0,27,59,en,en | |
| 61 | +29132912,en,en,en,0,21,60,en,en | |
| 62 | +28955154,fr,fr,fr,38,0,61,fr,fr | |
| 63 | +28418547,fr,fr,fr,18,0,62,fr,fr | |
| 64 | +28784313,en,en,en,0,21,63,en,en | |
| 65 | +29212470,en,en,en,0,16,64,en,en | |
| 66 | +29186950,boundary,fr,fr,8,2,65,fr,fr | |
| 67 | +28369049,fr,fr,fr,29,2,66,fr,fr | |
| 68 | +29145479,en,en,en,1,35,67,en,en | |
| 69 | +29115418,fr,fr,fr,37,0,68,fr,fr | |
| 70 | +26607560,boundary,fr,fr,9,2,69,fr,fr | |
| 71 | +28890422,en,en,en,2,22,70,en,en | |
| 72 | +28900390,en,en,en,0,15,71,en,en | |
| 73 | +28885345,fr,fr,fr,34,0,72,fr,fr | |
| 74 | +29097893,fr,fr,fr,36,0,73,fr,fr | |
| 75 | +29152090,en,en,en,0,28,74,en,en | |
| 76 | +28973375,boundary,fr,fr,9,2,75,fr,fr | |
| 77 | +28528250,fr,fr,fr,12,2,76,fr,fr | |
| 78 | +28938620,en,en,en,0,18,77,en,en | |
| 79 | +28992196,fr,fr,fr,27,0,78,fr,fr | |
| 80 | +28748774,en,en,en,0,34,79,en,en | |
| 81 | +29012046,en,en,en,1,27,80,en,en | |
| 82 | +28854157,en,en,en,1,36,81,en,en | |
| 83 | +28835255,boundary,fr,fr,5,2,82,fr,fr | |
| 84 | +28736102,boundary,fr,fr,12,4,83,fr,fr | |
| 85 | +28665213,en,en,en,0,26,84,en,en | |
| 86 | +28137976,boundary,fr,fr,9,2,85,fr,fr | |
| 87 | +27768588,fr,fr,fr,33,3,86,fr,fr | |
| 88 | +29224285,boundary,fr,fr,8,2,87,fr,fr | |
| 89 | +29145810,fr,fr,fr,42,1,88,fr,fr | |
| 90 | +29175806,fr,fr,fr,16,2,89,fr,fr | |
| 91 | +29084428,fr,fr,fr,15,1,90,fr,fr | |
| 92 | +29046541,en,en,en,2,33,91,en,en | |
| 93 | +28904535,fr,fr,fr,41,0,92,fr,fr | |
| 94 | +29213554,fr,fr,fr,31,0,93,fr,fr | |
| 95 | +28693791,fr,fr,fr,41,1,94,fr,fr | |
| 96 | +27942977,fr,fr,fr,29,2,95,fr,fr | |
| 97 | +28892846,boundary,en,en,1,5,96,en,en | |
| 98 | +29162150,en,en,en,0,21,97,en,en | |
| 99 | +28777546,boundary,fr,fr,9,2,98,fr,fr | |
| 100 | +28982824,en,en,en,0,21,99,en,en | |
| 101 | +29132285,fr,fr,fr,18,0,100,fr,fr | |
| 102 | +29111007,fr,fr,fr,35,2,101,fr,fr | |
| 103 | +29196450,boundary,fr,fr,26,7,102,fr,fr | |
| 104 | +28783866,en,en,en,0,22,103,en,en | |
| 105 | +28792545,fr,fr,fr,10,1,104,fr,fr | |
| 106 | +29176522,en,en,en,0,23,105,en,en | |
| 107 | +29116050,boundary,fr,fr,8,2,106,fr,fr | |
| 108 | +28909165,boundary,fr,fr,5,1,107,fr,fr | |
| 109 | +29067244,boundary,fr,fr,7,2,108,fr,fr | |
| 110 | +29104943,en,en,en,0,32,109,en,en | |
| 111 | +29144627,boundary,fr,fr,11,3,110,fr,fr | |
| 112 | +28714528,en,en,en,0,28,111,en,en | |
| 113 | +29017273,en,en,en,0,23,112,en,en | |
| 114 | +29171934,fr,fr,fr,29,2,113,fr,fr | |
| 115 | +29207711,en,en,en,0,22,114,en,en | |
| 116 | +28187765,boundary,fr,fr,8,3,115,fr,fr | |
| 117 | +29006807,fr,fr,fr,27,0,116,fr,fr | |
| 118 | +28364312,fr,fr,fr,36,1,117,fr,fr | |
| 119 | +28975659,boundary,fr,fr,16,6,118,fr,fr | |
| 120 | +28951749,fr,fr,fr,32,0,119,fr,fr | |
| 121 | +28870672,boundary,fr,fr,4,1,120,fr,fr | |
| 122 | +29079822,boundary,fr,fr,7,3,121,fr,fr | |
| 123 | +29133864,boundary,fr,fr,8,2,122,fr,fr | |
| 124 | +28832801,boundary,fr,fr,6,2,123,fr,fr | |
| 125 | +27866181,boundary,fr,fr,6,2,124,fr,fr | |
| 126 | +28983959,en,en,en,0,28,125,en,en | |
| 127 | +28548958,en,en,en,0,23,126,en,en | |
| 128 | +29190095,fr,fr,fr,31,0,127,fr,fr | |
| 129 | +27957153,boundary,fr,fr,6,2,128,fr,fr | |
| 130 | +28435213,en,en,en,0,30,129,en,en | |
| 131 | +28496504,en,en,en,0,32,130,en,en | |
| 132 | +28658204,en,en,en,1,26,131,en,en | |
| 133 | +24472976,en,en,en,2,30,132,en,en | |
| 134 | +29188193,boundary,fr,fr,12,3,133,fr,fr | |
| 135 | +28953351,en,en,en,0,28,134,en,en | |
| 136 | +28981516,fr,fr,fr,30,1,135,fr,fr | |
| 137 | +29202625,fr,fr,fr,18,0,136,fr,fr | |
| 138 | +29215563,boundary,fr,fr,8,2,137,fr,fr | |
| 139 | +29040669,fr,fr,fr,33,1,138,fr,fr | |
| 140 | +29063159,boundary,fr,fr,6,2,139,fr,fr | |
| 141 | +28951301,boundary,fr,fr,12,3,140,fr,fr | |
| 142 | +29003637,boundary,fr,fr,6,2,141,fr,fr | |
| 143 | +28691397,fr,fr,fr,16,1,142,fr,fr | |
| 144 | +29208485,boundary,fr,fr,7,2,143,fr,fr | |
| 145 | +28985612,en,en,en,0,20,144,en,en | |
| 146 | +28975458,boundary,fr,fr,13,5,145,fr,fr | |
| 147 | +29188463,fr,fr,fr,39,1,146,fr,fr | |
| 148 | +28796084,boundary,fr,fr,7,3,147,fr,fr | |
| 149 | +28774888,en,en,en,0,31,148,en,en | |
| 150 | +28807217,fr,fr,fr,25,0,149,fr,fr | |
| 151 | +29116814,fr,fr,fr,17,1,150,fr,fr | |
| 152 | +28806696,boundary,fr,fr,8,2,151,fr,fr | |
| 153 | +28892359,fr,fr,fr,24,0,152,fr,fr | |
| 154 | +28974941,boundary,fr,fr,9,2,153,fr,fr | |
| 155 | +28638947,boundary,en,en,3,12,154,en,en | |
| 156 | +29169098,en,en,en,0,28,155,en,en | |
| 157 | +28271507,fr,fr,fr,32,1,156,fr,fr | |
| 158 | +29032786,en,en,en,0,32,157,en,en | |
| 159 | +28161636,boundary,fr,fr,9,3,158,fr,fr | |
| 160 | +28850882,fr,fr,fr,19,1,159,fr,fr | |
| 161 | +28765680,fr,fr,fr,34,1,160,fr,fr | |
| 162 | +27922050,en,en,en,1,30,161,en,en | |
| 163 | +29090673,boundary,fr,fr,9,2,162,fr,fr | |
| 164 | +28539830,en,en,en,0,22,163,en,en | |
| 165 | +29190305,en,en,en,0,5,164,en,en | |
| 166 | +28753019,boundary,fr,fr,6,2,165,fr,fr | |
| 167 | +26701713,en,en,en,0,33,166,en,en | |
| 168 | +27585354,boundary,fr,fr,8,2,167,fr,fr | |
| 169 | +29171264,fr,fr,fr,43,0,168,fr,fr | |
| 170 | +28975275,boundary,fr,fr,13,5,169,fr,fr | |
| 171 | +29162419,boundary,fr,fr,12,3,170,fr,fr | |
| 172 | +29022735,boundary,fr,fr,9,2,171,fr,fr | |
| 173 | +27866189,boundary,fr,fr,6,2,172,fr,fr | |
| 174 | +28642230,boundary,fr,fr,10,4,173,fr,fr | |
| 175 | +28995366,en,en,en,1,20,174,en,en | |
| 176 | +29128646,en,en,en,0,27,175,en,en | |
| 177 | +29173093,en,en,en,0,39,176,en,en | |
| 178 | +28796045,boundary,fr,fr,7,3,177,fr,fr | |
| 179 | +29159292,boundary,en,en,3,7,178,en,en | |
| 180 | +28982276,en,en,en,0,19,179,en,en | |
| 181 | +28702392,en,en,en,1,20,180,en,en | |
| 182 | +28570435,en,en,en,0,37,181,en,en | |
| 183 | +28846660,fr,fr,fr,29,0,182,fr,fr | |
| 184 | +28824797,en,en,en,0,30,183,en,en | |
| 185 | +29216557,fr,fr,fr,36,0,184,fr,fr | |
| 186 | +29033078,fr,fr,fr,23,0,185,fr,fr | |
| 187 | +29092260,fr,fr,fr,44,0,186,fr,fr | |
| 188 | +29037506,fr,fr,fr,23,0,187,fr,fr | |
| 189 | +29161106,boundary,fr,fr,7,2,188,fr,fr | |
| 190 | +28236641,boundary,fr,fr,4,1,189,fr,fr | |
| 191 | +29221177,boundary,fr,fr,9,3,190,fr,fr | |
| 192 | +28215096,fr,fr,fr,27,0,191,fr,fr | |
| 193 | +28730756,boundary,fr,fr,8,3,192,fr,fr | |
| 194 | +29091974,en,en,en,0,11,193,en,en | |
| 195 | +28846167,en,en,en,0,26,194,en,en | |
| 196 | +29067249,boundary,fr,fr,7,2,195,fr,fr | |
| 197 | +29118012,en,en,en,0,24,196,en,en | |
| 198 | +29033091,boundary,fr,fr,8,2,197,fr,fr | |
| 199 | +28397230,fr,fr,fr,12,0,198,fr,fr | |
| 200 | +29056558,boundary,fr,fr,7,2,199,fr,fr | |
| 201 | +28827433,fr,fr,fr,25,0,200,fr,fr | |
| 202 | +29008925,fr,fr,fr,39,0,201,fr,fr | |
| 203 | +29108482,en,en,en,0,34,202,en,en | |
| 204 | +28724695,boundary,fr,fr,15,4,203,fr,fr | |
| 205 | +29139835,en,en,en,0,30,204,en,en | |
| 206 | +29022254,boundary,fr,fr,10,3,205,fr,fr | |
| 207 | +29219667,boundary,mixed,fr,4,3,206,fr,fr | |
| 208 | +29223619,boundary,mixed,fr,2,2,207,fr,fr | |
| 209 | +29025575,en,en,en,0,20,208,en,en | |
| 210 | +28437798,fr,fr,fr,42,0,209,fr,fr | |
| 211 | +28568805,fr,fr,fr,28,0,210,fr,fr | |
| 212 | +28998192,en,en,en,0,26,211,en,en | |
| 213 | +29158505,en,en,en,1,26,212,en,en | |
| 214 | +27843252,fr,fr,fr,23,0,213,fr,fr | |
| 215 | +28554907,boundary,fr,fr,12,3,214,fr,fr | |
| 216 | +29046274,en,en,en,0,21,215,en,en | |
| 217 | +28646250,boundary,fr,fr,8,2,216,fr,fr | |
| 218 | +28754113,fr,fr,fr,31,0,217,fr,fr | |
| 219 | +27639786,boundary,fr,fr,4,2,218,fr,fr | |
| 220 | +29175079,fr,fr,fr,28,2,219,fr,fr | |
| 221 | +28785003,fr,fr,fr,33,2,220,fr,fr | |
| 222 | +28071687,fr,fr,fr,41,2,221,fr,fr | |
| 223 | +28965087,en,en,en,0,21,222,en,en | |
| 224 | +28825461,en,en,en,0,28,223,en,en | |
| 225 | +29168940,fr,fr,fr,34,0,224,fr,fr | |
| 226 | +29001459,fr,fr,fr,34,0,225,fr,fr | |
| 227 | +28873152,fr,fr,fr,26,0,226,fr,fr | |
| 228 | +29101744,en,en,en,1,21,227,en,en | |
| 229 | +29073831,en,en,en,0,28,228,en,en | |
| 230 | +26441822,en,en,en,2,21,229,en,en | |
| 231 | +29218143,en,en,en,0,22,230,en,en | |
| 232 | +28975667,boundary,fr,fr,16,6,231,fr,fr | |
| 233 | +28613327,fr,fr,fr,33,0,232,fr,fr | |
| 234 | +29201450,en,en,en,0,8,233,en,en | |
| 235 | +29139208,boundary,fr,fr,5,2,234,fr,fr | |
| 236 | +29149707,fr,fr,fr,39,0,235,fr,fr | |
| 237 | +29042704,fr,fr,fr,26,0,236,fr,fr | |
| 238 | +29072989,en,en,en,0,26,237,en,en | |
| 239 | +28987990,en,en,en,0,19,238,en,en | |
| 240 | +26974569,fr,fr,fr,9,0,239,fr,fr | |
| 241 | +29181153,en,en,en,0,31,240,en,en | |
| 242 | +29024764,fr,fr,fr,22,0,241,fr,fr | |
| 243 | +29099943,boundary,fr,fr,2,1,242,fr,fr | |
| 244 | +29090969,boundary,fr,fr,9,2,243,fr,fr | |
| 245 | +28776759,boundary,fr,fr,9,2,244,fr,fr | |
| 246 | +28990046,fr,fr,fr,30,0,245,fr,fr | |
| 247 | +27957611,en,en,en,0,27,246,en,en | |
| 248 | +28758814,fr,fr,fr,33,0,247,fr,fr | |
| 249 | +29184602,boundary,fr,fr,7,3,248,fr,fr | |
| 250 | +29133508,fr,fr,fr,41,0,249,fr,fr | |
| 251 | +29123780,en,en,en,0,30,250,en,en | |
| 252 | +28453117,fr,fr,fr,48,0,251,fr,fr | |
| 253 | +28068541,fr,fr,fr,30,0,252,fr,fr | |
| 254 | +29194348,en,en,en,0,24,253,en,en | |
| 255 | +29203825,en,en,en,0,17,254,en,en | |
| 256 | +28187755,boundary,fr,fr,8,3,255,fr,fr | |
| 257 | +29073754,fr,fr,fr,22,0,256,fr,fr | |
| 258 | +28629371,fr,fr,fr,30,0,257,fr,fr | |
| 259 | +29071812,boundary,fr,fr,12,3,258,fr,fr | |
| 260 | +28796028,boundary,fr,fr,7,3,259,fr,fr | |
| 261 | +28917086,en,en,en,0,31,260,en,en | |
| 262 | +28975256,boundary,fr,fr,13,5,261,fr,fr | |
| 263 | +28936955,en,en,en,0,22,262,en,en | |
| 264 | +29011843,en,en,en,2,21,263,en,en | |
| 265 | +28576159,en,en,en,0,19,264,en,en | |
| 266 | +28188241,boundary,fr,fr,8,3,265,fr,fr | |
| 267 | +29136154,en,en,en,0,25,266,en,en | |
| 268 | +29122525,boundary,fr,fr,8,4,267,fr,fr | |
| 269 | +28976407,en,en,en,0,35,268,en,en | |
| 270 | +29105130,fr,fr,fr,25,0,269,fr,fr | |
| 271 | +28889669,en,en,en,1,12,270,en,en | |
| 272 | +29217776,en,en,en,0,31,271,en,en | |
| 273 | +27966587,en,en,en,0,43,272,en,en | |
| 274 | +28796085,boundary,fr,fr,10,4,273,fr,fr | |
| 275 | +28188249,boundary,fr,fr,8,3,274,fr,fr | |
| 276 | +28986043,en,en,en,0,17,275,en,en | |
| 277 | +29078010,fr,fr,fr,23,0,276,fr,fr | |
| 278 | +28992195,boundary,fr,fr,7,2,277,fr,fr | |
| 279 | +29235061,boundary,en,en,4,14,278,en,en | |
| 280 | +28614438,fr,fr,fr,29,2,279,fr,fr | |
| 281 | +28923160,boundary,fr,fr,7,2,280,fr,fr | |
| 282 | +29218073,fr,fr,fr,22,0,281,fr,fr | |
| 283 | +29195311,en,en,en,2,29,282,en,en | |
| 284 | +29172821,boundary,fr,fr,4,2,283,fr,fr | |
| 285 | +29155371,fr,fr,fr,34,2,284,fr,fr | |
| 286 | +28968075,fr,fr,fr,25,0,285,fr,fr | |
| 287 | +28974471,boundary,fr,fr,9,2,286,fr,fr | |
| 288 | +29230381,en,en,en,0,21,287,en,en | |
| 289 | +28862428,boundary,mixed,fr,1,1,288,fr,fr | |
| 290 | +29164866,en,en,en,0,19,289,en,en | |
| 291 | +28836557,boundary,fr,fr,1,0,290,fr,fr | |
| 292 | +27734520,boundary,en,en,4,16,291,en,en | |
| 293 | +28781926,en,en,en,0,26,292,en,en | |
| 294 | +29055851,fr,fr,fr,37,0,293,fr,fr | |
| 295 | +28806536,fr,fr,fr,19,0,294,fr,fr | |
| 296 | +28186216,boundary,fr,fr,14,4,295,fr,fr | |
| 297 | +29002753,fr,fr,fr,34,0,296,fr,fr | |
| 298 | +28739473,en,en,en,0,25,297,en,en | |
| 299 | +29108475,fr,fr,fr,32,0,298,fr,fr | |
| 300 | +28188262,boundary,fr,fr,8,3,299,fr,fr | |
| 301 | +29210166,fr,fr,fr,28,0,300,fr,fr | |
added
environment/checksums.txt
+19 −0
@@ -0,0 +1,19 @@ | ||
| 1 | +# SHA-256 of inputs (never distributed) and of the embedding caches produced by scripts/10_embeddings_v2.py (2026-11-03) | |
| 2 | +5dfba878151002cc9ed912c051bc2662a07492e6c759e13f054d7cc5333fe493 data/raw/louka.db | |
| 3 | +0e4d3cf26c6965423ed84f93a9f7c68ebb5c45dee6568c758f8c2334b16616a2 data/processed/embeddings_maisons.npy | |
| 4 | +97c1a5b0b17ee115f5fbf172c8cc96af77cd553fbd3cd52ca406924e715ae607 data/processed/embeddings_multilingual.npy | |
| 5 | +9924146264da49ed30960c5bb7715b32d94399763ce16c014ff18d56579ef24b data/processed/sim_matrix_maisons.npy | |
| 6 | +d4c52de8d3ef44b8ac91b639a8caa0727a988a826412992b15475cbd4735bf0c data/processed/houses.parquet | |
| 7 | +5d4409503d9b169d6c5a992744bbed1921a0204793c76d2882eac162be6d8c47 data/processed/hedonic_maison_results.csv | |
| 8 | +d50ed861737760d41651b2aead9fdf93a715e24b7167a31adeedb1a976729234 data/processed/revision_fields.csv | |
| 9 | +86a08a19d0cbc1aad6a1d0eac009badd1f5d81010e8a582380f3e77487ab9c74 /Users/simon-pierreboucher/Desktop/UQO/Recherche/Recherche-UQO/immobilier/sharp-hpi-quebec/data/external/MUN.csv | |
| 10 | +# caches (from results/v2/embedding_caches.csv) | |
| 11 | +144d39cfb6a963134c469a3406b66ca032a28d6d1f08fe011f75f470551ea955 data/processed/references_minilm.npy | |
| 12 | +c86aadf0e3f56f7c10305753c08accb78fd8fd1ad6203f84da442b453bff4f1e data/processed/references_ml.npy | |
| 13 | +d2fa6f0121a90ebd327536425f417c97701ed235727dccedb07000ee76078163 data/processed/embeddings_minilm_256.npy | |
| 14 | +f1ab78a2cbd4c06dc5667305c885800ab96bfb17d9743044cc49170c2d11ca13 data/processed/embeddings_minilm_chunk.npy | |
| 15 | +10b7f03f9dcb4d0b9a282c19aed3602cb74561cbde8d8ca0055955dfd808b15f data/processed/embeddings_ml_128.npy | |
| 16 | +03ba867d71a9e79c7f2ccdaadc702edb420fb87b003f38e178c8d8b857f0f73e data/processed/embeddings_ml_512.npy | |
| 17 | +360851d2752ef80a9d576f72be4b35d9383517c9ae3deae8afe6e320e11d08f4 data/processed/embeddings_ml_chunk.npy | |
| 18 | +10b86b56f995f3316c53e3efe672b0f6a4c29c2c92c984f1f1e0d075d2b7defe data/processed/embeddings_minilm_256_masked.npy | |
| 19 | +2ed4ecdbc7a91e7f4707615f93c1737348365de78cba817f1cbf410cd444a362 data/processed/embeddings_ml_chunk_masked.npy | |
added
environment/hardware.md
+14 −0
@@ -0,0 +1,14 @@ | ||
| 1 | +# Hardware, software and models — Stage D run (2026-11-03) | |
| 2 | + | |
| 3 | +| Item | Value | | |
| 4 | +|---|---| | |
| 5 | +| Machine | Apple M5 Max (18 cores), 48 GB unified memory, laptop (hostname MacBookPro-de-simon-pierre-2.local) | | |
| 6 | +| OS | macOS 27.0 build 26A5425a | | |
| 7 | +| Python | Python 3.14.4 at /opt/homebrew/bin/python3 (plain `python3`, user site-packages for scikit-learn 1.6.1) | | |
| 8 | +| Torch device | mps (Metal); MPS-vs-CPU max abs difference on 256 MiniLM embeddings: 2.4e-7 | | |
| 9 | +| Load during the run | 1-min load average 100–160 from concurrent review jobs; all scripts run under `nice -n 10`, Romano–Wolf with 6 workers | | |
| 10 | +| HF model 1 | sentence-transformers/all-MiniLM-L6-v2, revision 1110a243fdf4706b3f48f1d95db1a4f5529b4d41 (max_seq_length 256, mean pooling + normalise, 384 d) | | |
| 11 | +| HF model 2 | sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2, revision e8f8c211226b894fcb81acc59f3b34ba3efd5f42 (max_seq_length 128, mean pooling, 384 d) | | |
| 12 | +| HF hub | HF_HUB_OFFLINE=1 for every run (models served from ~/.cache/huggingface/hub, no download) | | |
| 13 | +| Seeds | 42 everywhere (config.SEED); multiverse draws seed 42 + draw; CV seeds 42..61; bootstrap seed 42 | | |
| 14 | +| Random dependencies | langdetect 1.0.9 with DetectorFactory.seed = 42 | | |
added
environment/pip-freeze-all.txt
+292 −0
@@ -0,0 +1,292 @@ | ||
| 1 | +# Editable install with no version control (age==0.1.0) | |
| 2 | +-e /Users/simon-pierreboucher/Desktop/Recherche-UQO/finance/agentic-general-equilibrium | |
| 3 | +# Editable install with no version control (agentic-valuation==0.1.0) | |
| 4 | +-e /Users/simon-pierreboucher/Desktop/Recherche-UQO/immobilier/agentic-valuation-quebec | |
| 5 | +aiohappyeyeballs==2.6.2 | |
| 6 | +aiohttp==3.13.5 | |
| 7 | +aiosignal==1.4.0 | |
| 8 | +alembic==1.18.4 | |
| 9 | +altair==6.1.0 | |
| 10 | +annotated-doc==0.0.4 | |
| 11 | +annotated-types==0.7.0 | |
| 12 | +anthropic==2.3.0 | |
| 13 | +anyio==4.13.0 | |
| 14 | +appnope==0.1.4 | |
| 15 | +arch==8.0.0 | |
| 16 | +argon2-cffi==25.1.0 | |
| 17 | +argon2-cffi-bindings==25.1.0 | |
| 18 | +arrow==1.4.0 | |
| 19 | +ast_serialize==0.5.0 | |
| 20 | +asttokens==3.0.1 | |
| 21 | +async-lru==2.3.0 | |
| 22 | +attrs==26.1.0 | |
| 23 | +babel==2.18.0 | |
| 24 | +beautifulsoup4==4.14.3 | |
| 25 | +bleach==6.3.0 | |
| 26 | +blinker==1.9.0 | |
| 27 | +branca==0.8.2 | |
| 28 | +cachetools==7.1.3 | |
| 29 | +cairocffi==1.7.1 | |
| 30 | +CairoSVG==2.9.0 | |
| 31 | +catboost==1.2.10 | |
| 32 | +certifi==2026.4.22 | |
| 33 | +cffi==2.0.0 | |
| 34 | +chardet==7.4.3 | |
| 35 | +charset-normalizer==3.4.7 | |
| 36 | +click==8.4.0 | |
| 37 | +cloudpickle==3.1.2 | |
| 38 | +colorlog==6.10.1 | |
| 39 | +comm==0.2.3 | |
| 40 | +contourpy==1.3.3 | |
| 41 | +cryptography==50.0.0 | |
| 42 | +cssselect2==0.9.0 | |
| 43 | +curl_cffi==0.15.0 | |
| 44 | +cycler==0.12.1 | |
| 45 | +datasets==5.0.1 | |
| 46 | +debugpy==1.8.20 | |
| 47 | +decorator==5.3.1 | |
| 48 | +defusedxml==0.7.1 | |
| 49 | +dill==0.4.1 | |
| 50 | +docstring_parser==0.18.0 | |
| 51 | +DoubleML==0.11.3 | |
| 52 | +duckdb==1.5.2 | |
| 53 | +econml==0.16.0 | |
| 54 | +esda==2.8.2 | |
| 55 | +et_xmlfile==2.0.0 | |
| 56 | +executing==2.2.1 | |
| 57 | +faicons==0.2.2 | |
| 58 | +fastapi==0.136.1 | |
| 59 | +fastjsonschema==2.21.2 | |
| 60 | +filelock==3.29.0 | |
| 61 | +Flask==3.1.3 | |
| 62 | +folium==0.20.0 | |
| 63 | +fonttools==4.62.1 | |
| 64 | +formulaic==1.2.1 | |
| 65 | +fpdf2==2.8.7 | |
| 66 | +fqdn==1.5.1 | |
| 67 | +fredapi==0.5.2 | |
| 68 | +frozendict==2.4.7 | |
| 69 | +frozenlist==1.8.0 | |
| 70 | +fsspec==2026.4.0 | |
| 71 | +geopandas==1.1.3 | |
| 72 | +giddy==2.3.8 | |
| 73 | +gitdb==4.0.12 | |
| 74 | +GitPython==3.1.50 | |
| 75 | +graphviz==0.21 | |
| 76 | +great-tables==0.23.0 | |
| 77 | +greenlet==3.5.5 | |
| 78 | +h11==0.16.0 | |
| 79 | +hf-xet==1.5.0 | |
| 80 | +htmltools==0.7.0 | |
| 81 | +httpcore==1.0.9 | |
| 82 | +httpcore2==2.16.0 | |
| 83 | +httptools==0.7.1 | |
| 84 | +httpx==0.28.1 | |
| 85 | +httpx2==2.16.0 | |
| 86 | +huggingface_hub==1.15.0 | |
| 87 | +hypothesis==6.170.12 | |
| 88 | +idna==3.20 | |
| 89 | +importlib_metadata==9.0.0 | |
| 90 | +importlib_resources==7.1.0 | |
| 91 | +iniconfig==2.3.0 | |
| 92 | +interface_meta==2.0.0 | |
| 93 | +ipykernel==7.2.0 | |
| 94 | +ipython==9.13.0 | |
| 95 | +ipython_pygments_lexers==1.1.1 | |
| 96 | +ipywidgets==8.1.8 | |
| 97 | +isoduration==20.11.0 | |
| 98 | +itsdangerous==2.2.0 | |
| 99 | +jedi==0.20.0 | |
| 100 | +Jinja2==3.1.6 | |
| 101 | +jiter==0.18.0 | |
| 102 | +joblib==1.5.3 | |
| 103 | +json5==0.14.0 | |
| 104 | +jsonpointer==3.1.1 | |
| 105 | +jsonschema==4.26.0 | |
| 106 | +jsonschema-specifications==2025.9.1 | |
| 107 | +jupyter==1.1.1 | |
| 108 | +jupyter-console==6.6.3 | |
| 109 | +jupyter-events==0.12.1 | |
| 110 | +jupyter-lsp==2.3.1 | |
| 111 | +jupyter_client==8.8.0 | |
| 112 | +jupyter_core==5.9.1 | |
| 113 | +jupyter_server==2.18.2 | |
| 114 | +jupyter_server_terminals==0.5.4 | |
| 115 | +jupyterlab==4.5.7 | |
| 116 | +jupyterlab_pygments==0.3.0 | |
| 117 | +jupyterlab_server==2.28.0 | |
| 118 | +jupyterlab_widgets==3.0.16 | |
| 119 | +kiwisolver==1.5.0 | |
| 120 | +langdetect==1.0.9 | |
| 121 | +lark==1.3.1 | |
| 122 | +libpysal==4.14.1 | |
| 123 | +librt==0.11.0 | |
| 124 | +lightgbm==4.6.0 | |
| 125 | +linearmodels==7.0 | |
| 126 | +llvmlite==0.47.0 | |
| 127 | +loguru==0.7.3 | |
| 128 | +lxml==6.1.0 | |
| 129 | +maketables==0.1.8 | |
| 130 | +Mako==1.3.12 | |
| 131 | +mapclassify==2.10.0 | |
| 132 | +markdown-it-py==4.2.0 | |
| 133 | +MarkupSafe==3.0.3 | |
| 134 | +matplotlib==3.10.9 | |
| 135 | +matplotlib-inline==0.2.2 | |
| 136 | +mdurl==0.1.2 | |
| 137 | +mgwr==2.2.1 | |
| 138 | +mistune==3.2.1 | |
| 139 | +mlx==0.32.2 | |
| 140 | +mlx-lm==0.31.3 | |
| 141 | +mlx-metal==0.32.2 | |
| 142 | +mpmath==1.3.0 | |
| 143 | +multidict==6.7.1 | |
| 144 | +multimark==0.2.0 | |
| 145 | +multiprocess==0.70.19 | |
| 146 | +multitasking==0.0.13 | |
| 147 | +mypy==2.1.0 | |
| 148 | +mypy_extensions==1.1.0 | |
| 149 | +narwhals==2.20.0 | |
| 150 | +nbclient==0.10.4 | |
| 151 | +nbconvert==7.17.1 | |
| 152 | +nbformat==5.10.4 | |
| 153 | +nest-asyncio==1.6.0 | |
| 154 | +networkx==3.6.1 | |
| 155 | +nokap==0.1.0 | |
| 156 | +notebook==7.5.6 | |
| 157 | +notebook_shim==0.2.4 | |
| 158 | +numba==0.65.1 | |
| 159 | +numpy==2.4.4 | |
| 160 | +openai==3.40.0 | |
| 161 | +opencv-python-headless==4.13.0.92 | |
| 162 | +openpyxl==3.1.5 | |
| 163 | +opentelemetry-api==1.45.1 | |
| 164 | +optuna==4.8.0 | |
| 165 | +packaging==26.1 | |
| 166 | +pandas==3.0.2 | |
| 167 | +pandocfilters==1.5.1 | |
| 168 | +parso==0.8.7 | |
| 169 | +pathspec==1.1.1 | |
| 170 | +patsy==1.0.2 | |
| 171 | +pdfminer.six==20260107 | |
| 172 | +pdfplumber==0.11.10 | |
| 173 | +peewee==4.0.6 | |
| 174 | +pexpect==4.9.0 | |
| 175 | +pillow==12.2.0 | |
| 176 | +platformdirs==4.9.6 | |
| 177 | +playwright==1.62.0 | |
| 178 | +plotly==6.7.0 | |
| 179 | +pluggy==1.6.0 | |
| 180 | +polars==1.40.1 | |
| 181 | +polars-runtime-32==1.40.1 | |
| 182 | +prometheus_client==0.25.0 | |
| 183 | +prompt_toolkit==3.0.52 | |
| 184 | +propcache==0.5.2 | |
| 185 | +protobuf==7.35.0 | |
| 186 | +psutil==7.2.2 | |
| 187 | +ptyprocess==0.7.0 | |
| 188 | +pure_eval==0.2.3 | |
| 189 | +pyalex==0.21 | |
| 190 | +pyarrow==24.0.0 | |
| 191 | +pycparser==3.0 | |
| 192 | +pydantic==2.13.4 | |
| 193 | +pydantic_core==2.46.4 | |
| 194 | +pydeck==0.9.2 | |
| 195 | +pyee==13.0.1 | |
| 196 | +pyfixest==0.60.0 | |
| 197 | +Pygments==2.20.0 | |
| 198 | +pyhdfe==0.2.0 | |
| 199 | +PyJWT==2.13.0 | |
| 200 | +PyMuPDF==1.27.2.3 | |
| 201 | +pyogrio==0.12.1 | |
| 202 | +pyparsing==3.3.2 | |
| 203 | +pypdf==6.14.2 | |
| 204 | +pypdfium2==5.14.0 | |
| 205 | +pyproj==3.7.2 | |
| 206 | +pytest==9.1.1 | |
| 207 | +pytest-asyncio==1.4.1 | |
| 208 | +python-dateutil==2.9.0.post0 | |
| 209 | +python-docx==1.2.0 | |
| 210 | +python-dotenv==1.2.2 | |
| 211 | +python-json-logger==4.1.0 | |
| 212 | +python-multipart==0.0.29 | |
| 213 | +pytz==2026.2 | |
| 214 | +PyYAML==6.0.3 | |
| 215 | +pyzmq==27.1.0 | |
| 216 | +quantecon==0.11.2 | |
| 217 | +referencing==0.37.0 | |
| 218 | +regex==2026.5.9 | |
| 219 | +reportlab==4.5.1 | |
| 220 | +requests==2.34.2 | |
| 221 | +rfc3339-validator==0.1.4 | |
| 222 | +rfc3986-validator==0.1.1 | |
| 223 | +rfc3987-syntax==1.1.0 | |
| 224 | +rich==15.0.0 | |
| 225 | +rpds-py==0.30.0 | |
| 226 | +safetensors==0.7.0 | |
| 227 | +scikit-learn==1.6.1 | |
| 228 | +scipy==1.17.1 | |
| 229 | +seaborn==0.13.2 | |
| 230 | +segno==1.6.6 | |
| 231 | +Send2Trash==2.1.0 | |
| 232 | +sentence-transformers==5.5.0 | |
| 233 | +sentencepiece==0.2.2 | |
| 234 | +setuptools==81.0.0 | |
| 235 | +shap==0.48.0 | |
| 236 | +shapely==2.1.2 | |
| 237 | +shellingham==1.5.4 | |
| 238 | +six==1.17.0 | |
| 239 | +slicer==0.0.8 | |
| 240 | +smmap==5.0.3 | |
| 241 | +sniffio==1.3.1 | |
| 242 | +sortedcontainers==2.4.0 | |
| 243 | +soupsieve==2.8.3 | |
| 244 | +sparse==0.18.0 | |
| 245 | +spglm==1.1.0 | |
| 246 | +splot==1.1.7 | |
| 247 | +spreg==1.9.0 | |
| 248 | +SQLAlchemy==2.0.49 | |
| 249 | +stack-data==0.6.3 | |
| 250 | +starlette==1.0.0 | |
| 251 | +statsmodels==0.14.6 | |
| 252 | +streamlit==1.57.0 | |
| 253 | +sympy==1.14.0 | |
| 254 | +tabulate==0.10.0 | |
| 255 | +tenacity==9.1.4 | |
| 256 | +terminado==0.18.1 | |
| 257 | +threadpoolctl==3.6.0 | |
| 258 | +tinycss2==1.4.0 | |
| 259 | +tokenizers==0.22.2 | |
| 260 | +toml==0.10.2 | |
| 261 | +torch==2.12.0 | |
| 262 | +torch-geometric==2.7.0 | |
| 263 | +torchvision==0.27.0 | |
| 264 | +tornado==6.5.5 | |
| 265 | +tqdm==4.67.3 | |
| 266 | +traitlets==5.15.0 | |
| 267 | +transformers==5.8.1 | |
| 268 | +truststore==0.10.5 | |
| 269 | +typer==0.25.1 | |
| 270 | +typing-inspection==0.4.2 | |
| 271 | +typing_extensions==4.15.0 | |
| 272 | +tzdata==2026.2 | |
| 273 | +uri-template==1.3.0 | |
| 274 | +urllib3==2.7.0 | |
| 275 | +uvicorn==0.47.0 | |
| 276 | +wcwidth==0.7.0 | |
| 277 | +webcolors==25.10.0 | |
| 278 | +webencodings==0.5.1 | |
| 279 | +websocket-client==1.9.0 | |
| 280 | +websockets==16.0 | |
| 281 | +Werkzeug==3.1.8 | |
| 282 | +wheel==0.46.3 | |
| 283 | +widgetsnbextension==4.0.15 | |
| 284 | +wrapt==2.2.0rc10 | |
| 285 | +xgboost==3.2.0 | |
| 286 | +xlrd==2.0.2 | |
| 287 | +xxhash==3.7.0 | |
| 288 | +xyzservices==2026.3.0 | |
| 289 | +yarl==1.24.2 | |
| 290 | +yfinance==1.3.0 | |
| 291 | +zipp==4.1.0 | |
| 292 | +zxing-cpp==3.0.0 | |
added
environment/pip-freeze-user.txt
+48 −0
@@ -0,0 +1,48 @@ | ||
| 1 | +aiohappyeyeballs==2.6.2 | |
| 2 | +aiohttp==3.13.5 | |
| 3 | +aiosignal==1.4.0 | |
| 4 | +alembic==1.18.4 | |
| 5 | +ast_serialize==0.5.0 | |
| 6 | +branca==0.8.2 | |
| 7 | +colorlog==6.10.1 | |
| 8 | +cryptography==50.0.0 | |
| 9 | +datasets==5.0.1 | |
| 10 | +dill==0.4.1 | |
| 11 | +DoubleML==0.11.3 | |
| 12 | +econml==0.16.0 | |
| 13 | +esda==2.8.2 | |
| 14 | +folium==0.20.0 | |
| 15 | +frozenlist==1.8.0 | |
| 16 | +geopandas==1.1.3 | |
| 17 | +giddy==2.3.8 | |
| 18 | +langdetect==1.0.9 | |
| 19 | +libpysal==4.14.1 | |
| 20 | +librt==0.11.0 | |
| 21 | +llvmlite==0.47.0 | |
| 22 | +Mako==1.3.12 | |
| 23 | +mapclassify==2.10.0 | |
| 24 | +mgwr==2.2.1 | |
| 25 | +multidict==6.7.1 | |
| 26 | +multiprocess==0.70.19 | |
| 27 | +mypy==2.1.0 | |
| 28 | +numba==0.65.1 | |
| 29 | +optuna==4.8.0 | |
| 30 | +pathspec==1.1.1 | |
| 31 | +propcache==0.5.2 | |
| 32 | +PyJWT==2.13.0 | |
| 33 | +pyogrio==0.12.1 | |
| 34 | +pypdf==6.14.2 | |
| 35 | +pyproj==3.7.2 | |
| 36 | +quantecon==0.11.2 | |
| 37 | +scikit-learn==1.6.1 | |
| 38 | +shap==0.48.0 | |
| 39 | +shapely==2.1.2 | |
| 40 | +sparse==0.18.0 | |
| 41 | +spglm==1.1.0 | |
| 42 | +splot==1.1.7 | |
| 43 | +spreg==1.9.0 | |
| 44 | +SQLAlchemy==2.0.49 | |
| 45 | +torch-geometric==2.7.0 | |
| 46 | +xxhash==3.7.0 | |
| 47 | +xyzservices==2026.3.0 | |
| 48 | +yarl==1.24.2 | |
added
environment/requirements-lock.txt
+21 −0
@@ -0,0 +1,21 @@ | ||
| 1 | +# Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 2 | +# Pinned environment used for the Stage D revision run (2026-11-03), plain `python3` | |
| 3 | +# (Homebrew Python 3.14.4 + user site-packages, which supplies scikit-learn 1.6.1 as pinned; | |
| 4 | +# `python3 -I` would pick up Homebrew's scikit-learn 1.8.0 — do not use it). | |
| 5 | +numpy==2.4.4 | |
| 6 | +pandas==3.0.2 | |
| 7 | +pyarrow==24.0.0 | |
| 8 | +scipy==1.17.1 | |
| 9 | +scikit-learn==1.6.1 | |
| 10 | +statsmodels==0.14.6 | |
| 11 | +matplotlib==3.10.9 | |
| 12 | +sentence-transformers==5.5.0 | |
| 13 | +torch==2.12.0 | |
| 14 | +# transitive pins (DATA-04) | |
| 15 | +transformers==5.8.1 | |
| 16 | +tokenizers==0.22.2 | |
| 17 | +huggingface_hub==1.15.0 | |
| 18 | +# second language rater (N0.3), pure Python, installed with `pip install --user --break-system-packages langdetect==1.0.9` | |
| 19 | +langdetect==1.0.9 | |
| 20 | +six==1.17.0 | |
| 21 | +pytest==9.1.1 | |
modified
figures/fig10_structural_coefficients.pdf
+0 −0
Binary file not shown.
modified
figures/fig11_residual_diagnostics.pdf
+0 −0
Binary file not shown.
added
figures/fig13_specification_curve.pdf
+0 −0
Binary file not shown.
added
figures/fig13_specification_curve.png
+0 −0
Binary file not shown.
added
figures/fig14_survival.pdf
+0 −0
Binary file not shown.
added
figures/fig14_survival.png
+0 −0
Binary file not shown.
added
figures/fig15_multiverse.pdf
+0 −0
Binary file not shown.
added
figures/fig15_multiverse.png
+0 −0
Binary file not shown.
added
figures/fig16_oos_increments.pdf
+0 −0
Binary file not shown.
added
figures/fig16_oos_increments.png
+0 −0
Binary file not shown.
modified
figures/fig1_model_comparison.pdf
+0 −0
Binary file not shown.
modified
figures/fig3_similarity_distributions.pdf
+0 −0
Binary file not shown.
modified
figures/fig4_quintile_heatmap.pdf
+0 −0
Binary file not shown.
modified
figures/fig5_correlation_matrix.pdf
+0 −0
Binary file not shown.
modified
figures/fig6_scatter_plots.pdf
+0 −0
Binary file not shown.
modified
figures/fig7_methodology.pdf
+0 −0
Binary file not shown.
modified
figures/fig8_r2_decomposition.pdf
+0 −0
Binary file not shown.
modified
paper/references.bib
+23 −0
@@ -1002,3 +1002,26 @@ | ||
| 1002 | 1002 | pages = {303--320}, |
| 1003 | 1003 | doi = {10.1257/aeri.20190499} |
| 1004 | 1004 | } |
| 1005 | + | |
| 1006 | +% --- Stage D (2026-11-03): data citation and model-card citations with pinned revisions (DATA-01, LITE-05) --- | |
| 1007 | +@misc{realtor2026ddf, | |
| 1008 | + author = {{Canadian Real Estate Association}}, | |
| 1009 | + title = {Realtor.ca listings, Data Distribution Facility records (single-family houses, Quebec)}, | |
| 1010 | + year = {2026}, | |
| 1011 | + howpublished = {Public listing pages, \url{https://www.realtor.ca}; extracted 7--11 January 2026 (listings syndicated from the Centris broker system); proprietary, not redistributed}, | |
| 1012 | + note = {Extract: 46,479 listings, 17,087 houses in the analysis sample; SHA-256 5dfba878151002cc\ldots} | |
| 1013 | +} | |
| 1014 | +@misc{minilm_l6_v2_card, | |
| 1015 | + author = {Reimers, Nils and Gurevych, Iryna}, | |
| 1016 | + title = {all-{M}ini{LM}-{L}6-v2 (sentence-transformers model card)}, | |
| 1017 | + year = {2021}, | |
| 1018 | + howpublished = {Hugging Face Hub, \url{https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2}}, | |
| 1019 | + note = {Revision 1110a243fdf4706b3f48f1d95db1a4f5529b4d41; maximum sequence length 256 word-pieces, mean pooling} | |
| 1020 | +} | |
| 1021 | +@misc{paraphrase_multilingual_minilm_card, | |
| 1022 | + author = {Reimers, Nils and Gurevych, Iryna}, | |
| 1023 | + title = {paraphrase-multilingual-{M}ini{LM}-{L}12-v2 (sentence-transformers model card)}, | |
| 1024 | + year = {2020}, | |
| 1025 | + howpublished = {Hugging Face Hub, \url{https://huggingface.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2}}, | |
| 1026 | + note = {Revision e8f8c211226b894fcb81acc59f3b34ba3efd5f42; maximum sequence length 128 word-pieces, mean pooling} | |
| 1027 | +} | |
added
paper/tables/tab_dimension_validation.tex
+27 −0
@@ -0,0 +1,27 @@ | ||
| 1 | +% Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 2 | +% Generated by scripts/18_tables_v2.py from results/v2 — do not edit by hand. | |
| 3 | +\begin{table}[!htbp] | |
| 4 | +\centering | |
| 5 | +\caption{LLM-coded validation of five dimension scores (300 listings).} | |
| 6 | +\label{tab:dimension_validation_llm} | |
| 7 | +\footnotesize | |
| 8 | +\begin{adjustbox}{max width=\textwidth} | |
| 9 | +\begin{tabular}{lR{0.9cm}R{0.7cm}R{0.9cm}R{0.9cm}R{0.9cm}R{0.9cm}R{0.9cm}R{0.9cm}R{2.0cm}} | |
| 10 | +\toprule | |
| 11 | +& & & \multicolumn{2}{c}{\textbf{MiniLM-L6}} & \multicolumn{4}{c}{\textbf{Multilingual chunked}} & \textbf{log price} \\ | |
| 12 | +\cmidrule(lr){4-5} \cmidrule(lr){6-9} | |
| 13 | +\textbf{Dimension} & \textbf{Prev.\ \%} & $\boldsymbol{\kappa}$ & \textbf{raw} & \textbf{centred} & \textbf{raw} & \textbf{centred} & \textbf{raw, fr} & \textbf{raw, en} & \textbf{on label} \\ | |
| 14 | +\midrule | |
| 15 | +Luxury & 15 & 0.85 & 0.47 & 0.56 & 0.78 & 0.85 & 0.84 & 0.88 & 0.515 (0.111)*** \\ | |
| 16 | +Land \& Nature & 54 & 0.60 & 0.62 & 0.76 & 0.80 & 0.83 & 0.86 & 0.77 & 0.198 (0.077)* \\ | |
| 17 | +Family-Friendly & 24 & 0.64 & 0.65 & 0.75 & 0.79 & 0.86 & 0.78 & 0.81 & $-$0.024 (0.089) \\ | |
| 18 | +Quiet \& Peaceful & 44 & 0.96 & 0.54 & 0.65 & 0.74 & 0.79 & 0.74 & 0.76 & $-$0.087 (0.063) \\ | |
| 19 | +Needs Renovation & 7 & 0.95 & 0.51 & 0.61 & 0.66 & 0.77 & 0.81 & 0.61 & $-$0.140 (0.114) \\ | |
| 20 | +\bottomrule | |
| 21 | +\end{tabular} | |
| 22 | +\end{adjustbox} | |
| 23 | +\begin{minipage}{\textwidth} | |
| 24 | +\vspace{4pt}\footnotesize | |
| 25 | +\textit{Notes:} 300 non-boilerplate listings (150 French, 150 English, seed 42, disjoint from the language sample) labelled 0/1 on the five dimensions by \textbf{two independent LLM passes (LLM-coded, not human-coded)}; $\kappa$ = Cohen's kappa between the passes; prevalence and AUCs on the consensus listings. AUC = area under the ROC curve of the listing's own similarity score against the consensus label (0.5 = no discrimination), for the raw and the centred (row-mean-removed) similarities of each encoder, and within each language for the chunked multilingual raw scores. The last column is the HC3 OLS coefficient of log asking price on the five consensus labels with bedrooms, bathrooms, description length and the English indicator as controls ($n = 191$ listings with consensus on all five). Source: \texttt{results/v2/dimension\_validation\_llm.csv}, \texttt{data/processed/dimension\_sample\_300.csv}. \signote | |
| 26 | +\end{minipage} | |
| 27 | +\end{table} | |
added
paper/tables/tab_extended_specs_v2.tex
+49 −0
@@ -0,0 +1,49 @@ | ||
| 1 | +% Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 2 | +% Generated by scripts/18_tables_v2.py from results/v2 — do not edit by hand. | |
| 3 | +\begin{table}[!htbp] | |
| 4 | +\centering | |
| 5 | +\caption{Semantic associations with log asking price per 0.10 cosine, Stage D specifications (main sample, unscaled dummies).} | |
| 6 | +\label{tab:extended_specs_v2} | |
| 7 | +\scriptsize | |
| 8 | +\begin{adjustbox}{max width=\textwidth} | |
| 9 | +\begin{tabular}{lR{1.0cm}R{1.6cm}R{1.0cm}R{1.6cm}R{1.0cm}R{1.6cm}R{1.0cm}R{1.6cm}R{1.0cm}R{1.6cm}R{1.0cm}R{1.6cm}} | |
| 10 | +\toprule | |
| 11 | +\textbf{Dimension} & \multicolumn{2}{c}{D (MiniLM)} & \multicolumn{2}{c}{D-L + FE (MiniLM)} & \multicolumn{2}{c}{v2 design (MiniLM)} & \multicolumn{2}{c}{\textbf{v2 design (ML chunk)}} & \multicolumn{2}{c}{French only (ML)} & \multicolumn{2}{c}{English only (ML)} \\ | |
| 12 | + & \% & 95\% CI & \% & 95\% CI & \% & 95\% CI & \% & 95\% CI & \% & 95\% CI & \% & 95\% CI \\ | |
| 13 | +\midrule | |
| 14 | +Luxury & 9.3** & (6.8, 11.8) & 6.8** & (4.2, 9.5) & 6.5** & (4.4, 8.8) & 10.9** & (8.2, 13.6) & 6.4* & (2.3, 10.8) & 3.2 & (-1.0, 7.5) \\ | |
| 15 | +Entry-Level & 6.3 & (3.2, 9.4) & 5.8** & (2.8, 8.9) & 3.0 & (0.3, 5.8) & $-$3.5 & (-6.1, -0.8) & $-$6.6* & (-10.5, -2.6) & $-$6.2 & (-10.6, -1.7) \\ | |
| 16 | +Renovated & 2.7 & (-0.5, 6.0) & 5.4** & (2.5, 8.4) & $-$0.8 & (-3.2, 1.7) & $-$0.8 & (-2.4, 0.9) & $-$6.4** & (-8.6, -4.1) & $-$3.4 & (-6.8, 0.2) \\ | |
| 17 | +Needs Renovation & $-$5.4 & (-7.7, -3.0) & $-$2.5 & (-4.8, -0.2) & $-$1.0 & (-3.3, 1.4) & $-$11.2** & (-13.9, -8.5) & $-$2.6 & (-6.5, 1.6) & $-$9.2 & (-14.8, -3.2) \\ | |
| 18 | +Bright \& Spacious & $-$6.0 & (-8.2, -3.8) & $-$3.0 & (-5.2, -0.6) & $-$4.4** & (-6.5, -2.3) & 2.2 & (0.2, 4.3) & 2.7 & (-0.3, 5.8) & 1.1 & (-1.8, 4.1) \\ | |
| 19 | +Land \& Nature & 11.0** & (8.8, 13.3) & 12.9** & (10.6, 15.4) & 3.9* & (1.8, 6.2) & 0.3 & (-2.5, 3.3) & 17.3** & (12.0, 22.7) & 16.9** & (10.9, 23.3) \\ | |
| 20 | +Panoramic View & 3.1 & (1.1, 5.1) & $-$2.7 & (-4.9, -0.5) & $-$1.4 & (-3.2, 0.6) & 5.1** & (3.1, 7.2) & 1.5 & (-1.4, 4.5) & $-$0.0 & (-3.2, 3.3) \\ | |
| 21 | +Premium Location & $-$4.4 & (-6.2, -2.5) & $-$9.2** & (-11.3, -7.1) & $-$5.8** & (-8.0, -3.6) & $-$0.9 & (-3.0, 1.2) & $-$1.9 & (-5.3, 1.7) & $-$4.4 & (-7.8, -0.9) \\ | |
| 22 | +Quiet \& Peaceful & $-$8.2** & (-10.5, -5.9) & $-$10.4** & (-12.8, -8.0) & $-$7.2** & (-9.5, -4.7) & $-$5.6** & (-7.4, -3.8) & $-$2.3 & (-4.9, 0.4) & $-$4.0 & (-6.8, -1.0) \\ | |
| 23 | +Income/Investment & $-$2.7 & (-5.2, -0.2) & 2.3 & (-0.1, 4.7) & $-$1.1 & (-3.1, 0.9) & 4.4* & (2.0, 6.8) & 5.2* & (1.9, 8.6) & 10.0** & (5.7, 14.5) \\ | |
| 24 | +Garage \& Parking & 1.7 & (0.2, 3.3) & 0.7 & (-0.7, 2.1) & 1.9* & (0.8, 3.1) & 6.1** & (4.8, 7.5) & 8.0** & (5.8, 10.2) & 4.8** & (2.8, 6.9) \\ | |
| 25 | +Finished Basement & $-$2.8 & (-4.7, -0.7) & $-$3.5** & (-5.3, -1.7) & 1.8 & (0.2, 3.4) & $-$7.9** & (-9.1, -6.7) & $-$6.2** & (-8.1, -4.3) & $-$5.6** & (-7.5, -3.7) \\ | |
| 26 | +Modern/Contemporary & 14.4** & (11.4, 17.5) & 8.3** & (5.7, 11.0) & 8.5** & (6.3, 10.7) & 2.1 & (-0.3, 4.6) & $-$3.4 & (-6.6, -0.0) & $-$0.8 & (-5.4, 3.9) \\ | |
| 27 | +Heritage/Character & 0.5 & (-1.5, 2.6) & $-$1.9 & (-3.7, -0.1) & $-$4.0** & (-5.8, -2.3) & $-$2.2 & (-4.0, -0.4) & 3.6 & (0.9, 6.3) & 8.1** & (5.0, 11.3) \\ | |
| 28 | +Energy Efficient & $-$5.9** & (-7.8, -4.0) & $-$3.9** & (-5.8, -1.9) & $-$2.8* & (-4.4, -1.2) & 0.9 & (-1.2, 3.2) & 4.5* & (2.1, 7.0) & 0.9 & (-2.4, 4.3) \\ | |
| 29 | +Motivated Seller & $-$5.7 & (-8.1, -3.2) & $-$2.6 & (-4.9, -0.2) & $-$0.9 & (-3.2, 1.3) & $-$0.0 & (-2.8, 2.8) & $-$1.3 & (-4.8, 2.3) & 3.4 & (-0.5, 7.4) \\ | |
| 30 | +Family-Friendly & $-$8.1** & (-9.7, -6.5) & $-$4.5** & (-6.2, -2.7) & $-$6.5** & (-8.2, -4.8) & $-$1.0 & (-3.3, 1.4) & $-$5.1* & (-8.1, -2.1) & $-$8.9** & (-12.5, -5.2) \\ | |
| 31 | +Waterfront & 3.4 & (1.7, 5.1) & 10.1** & (7.9, 12.4) & 7.0** & (4.7, 9.3) & 4.8** & (2.8, 6.8) & $-$0.6 & (-3.2, 2.0) & 2.0 & (-1.2, 5.3) \\ | |
| 32 | +New Construction & $-$8.7 & (-11.3, -6.1) & $-$6.7** & (-8.9, -4.5) & $-$0.9 & (-3.0, 1.3) & 8.0** & (5.5, 10.5) & 10.5** & (7.0, 14.1) & 6.8* & (2.7, 11.0) \\ | |
| 33 | +Pool \& Landscaping & 1.2 & (-0.8, 3.2) & 2.1 & (0.3, 3.9) & 7.0** & (5.1, 8.9) & $-$5.3* & (-8.0, -2.5) & $-$13.2** & (-16.7, -9.5) & $-$7.1 & (-11.3, -2.7) \\ | |
| 34 | +\midrule | |
| 35 | +$n$ & 16{,}553 & 16{,}553 & 16{,}553 & 16{,}553 & 9{,}817 & 6{,}733 \\ | |
| 36 | +$R^2$ & 0.515 & 0.668 & 0.726 & 0.743 & 0.618 & 0.712 \\ | |
| 37 | +Within $R^2$ & --- & 0.460 & 0.554 & 0.582 & 0.440 & 0.536 \\ | |
| 38 | +$\Delta R^2$ (block) & 0.045 & 0.020 & 0.013 & 0.030 & 0.048 & 0.045 \\ | |
| 39 | +Block $F(20, G-1)$ & 50.9 & 30.7 & 26.5 & 48.2 & 43.0 & 34.9 \\ | |
| 40 | +Sig. (Holm) & 15 & 12 & 12 & 10 & 11 & 9 \\ | |
| 41 | +Sig. (Romano--Wolf) & 6 & 12 & 12 & 10 & 11 & 7 \\ | |
| 42 | +\bottomrule | |
| 43 | +\end{tabular} | |
| 44 | +\end{adjustbox} | |
| 45 | +\begin{minipage}{\textwidth} | |
| 46 | +\vspace{4pt}\footnotesize | |
| 47 | +\textit{Notes:} Entries are $100\,(e^{0.10\,\hat\gamma_j/\mathrm{sd}_j} - 1)$: the conditional association of log asking price with a 0.10 increase in cosine similarity $j$, on one scale for every column (the French-only and English-only columns included); 95\% intervals use the cluster-robust $t(G-1)$ distribution. Stars follow the Romano--Wolf step-down $p$-values (FSA-cluster bootstrap, $B = 999$) for the 20 similarity coefficients. Sample $S_{\text{main}}$ = 17,087 listings minus 534 boilerplate records; dummies enter unscaled. ``v2 design'' = float storeys, six missing-value indicators, log lot area (m$^2$) with its indicator, description length, English indicator, 415 FSA fixed effects (414 on $S_{\text{main}}$), standard errors clustered by FSA (Conley 5/10/20 km standard errors differ by at most 11\%, Table~\ref{tab:spatial}). ``ML chunk'' = paraphrase-multilingual-MiniLM-L12-v2 with chunk-and-pool encoding of the full text (Table~\ref{tab:truncation}). The block $F$ statistic is referred to $F(20, G-1)$. \signote | |
| 48 | +\end{minipage} | |
| 49 | +\end{table} | |
added
paper/tables/tab_language_contrasts.tex
+36 −0
@@ -0,0 +1,36 @@ | ||
| 1 | +% Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 2 | +% Generated by scripts/18_tables_v2.py from results/v2 — do not edit by hand. | |
| 3 | +\begin{table}[!htbp] | |
| 4 | +\centering | |
| 5 | +\caption{The English-listing contrast per unit, across specifications and encoders.} | |
| 6 | +\label{tab:language_contrasts} | |
| 7 | +\footnotesize | |
| 8 | +\begin{adjustbox}{max width=\textwidth} | |
| 9 | +\begin{tabular}{lR{1.0cm}R{2.0cm}R{1.0cm}R{2.0cm}R{1.6cm}} | |
| 10 | +\toprule | |
| 11 | +& \multicolumn{2}{c}{\textbf{MiniLM-L6}} & \multicolumn{2}{c}{\textbf{Multilingual chunked}} & \textbf{MiniLM, $S_{\text{v1.1}}$} \\ | |
| 12 | +\cmidrule(lr){2-3} \cmidrule(lr){4-5} | |
| 13 | +\textbf{Specification} & \textbf{\%} & \textbf{95\% CI} & \textbf{\%} & \textbf{95\% CI} & \textbf{\%} \\ | |
| 14 | +\midrule | |
| 15 | +D-L (HC3) & +44.3 & [36.4, 52.7] & +29.0 & [26.0, 32.0] & +43.9 \\ | |
| 16 | +D-L, FSA-clustered & +44.3 & [31.3, 58.7] & +29.0 & [21.0, 37.5] & +43.9 \\ | |
| 17 | +D-L + FSA FE & +19.9 & [11.9, 28.4] & +9.4 & [6.4, 12.5] & +19.4 \\ | |
| 18 | +D-L + municipality FE & +21.0 & [13.8, 28.7] & +8.2 & [5.5, 11.0] & +20.8 \\ | |
| 19 | +D-L + FSA FE + lot area & +15.0 & [8.7, 21.6] & +8.3 & [5.7, 10.9] & +14.6 \\ | |
| 20 | +D-L + FSA FE + floor area (subsample) & +12.7 & [3.1, 23.1] & +7.1 & [3.5, 10.8] & +11.9 \\ | |
| 21 | +v2 design: + missing indicators & +14.8 & [8.5, 21.4] & +8.4 & [5.8, 11.1] & +14.5 \\ | |
| 22 | +\midrule | |
| 23 | +\multicolumn{6}{l}{\textit{First-version (v1.2) figures, z-scored dummy: per SD $\to$ per unit (same estimates, rescaled; MiniLM, $n = 17{,}087$)}} \\ | |
| 24 | +\quad D-L & \multicolumn{2}{l}{v1.2 text: +19.5\% per SD} & \multicolumn{2}{l}{per unit: +43.9\% [36.0, 52.2]} & \\ | |
| 25 | +\quad D-L + FSA FE & \multicolumn{2}{l}{v1.2 text: +9.1\% per SD} & \multicolumn{2}{l}{per unit: +19.4\% [11.7, 27.6]} & \\ | |
| 26 | +\quad D-L + FSA FE + lot area & \multicolumn{2}{l}{v1.2 text: +6.9\% per SD} & \multicolumn{2}{l}{per unit: +14.6\% [8.5, 21.1]} & \\ | |
| 27 | +\quad ML-D-L + FSA FE (128 tokens) & \multicolumn{2}{l}{v1.2 text: +4.3\% per SD} & \multicolumn{2}{l}{per unit: +9.0\% [6.0, 12.0]} & \\ | |
| 28 | +\quad ML-D-L + FSA FE + lot area & \multicolumn{2}{l}{v1.2 text: +3.7\% per SD} & \multicolumn{2}{l}{per unit: +7.7\% [5.2, 10.3]} & \\ | |
| 29 | +\bottomrule | |
| 30 | +\end{tabular} | |
| 31 | +\end{adjustbox} | |
| 32 | +\begin{minipage}{\textwidth} | |
| 33 | +\vspace{4pt}\footnotesize | |
| 34 | +\textit{Notes:} English-vs-French contrast $100\,(e^{\hat\beta} - 1)$ with the indicator entered unscaled (per unit), 95\% intervals from the specification's covariance (HC3 or clustered by FSA, $t(G-1)$). The first version z-scored the indicator (share 0.397, SD 0.489) and quoted the per-SD coefficient; the lower panel rescales those stored estimates (\texttt{results/v2/stored\_language\_contrasts.csv}), which the re-estimation on $S_{\text{v1.1}}$ (last column) reproduces. Source: \texttt{results/v2/language\_contrasts\_v2.csv}. | |
| 35 | +\end{minipage} | |
| 36 | +\end{table} | |
added
paper/tables/tab_language_validation.tex
+34 −0
@@ -0,0 +1,34 @@ | ||
| 1 | +% Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 2 | +% Generated by scripts/18_tables_v2.py from results/v2 — do not edit by hand. | |
| 3 | +\begin{table}[!htbp] | |
| 4 | +\centering | |
| 5 | +\caption{Validation of the language classifier: second rater and 300-listing LLM-coded sample.} | |
| 6 | +\label{tab:language_validation} | |
| 7 | +\footnotesize | |
| 8 | +\begin{adjustbox}{max width=\textwidth} | |
| 9 | +\begin{tabular}{p{8.2cm}R{1.8cm}R{1.8cm}p{3.2cm}} | |
| 10 | +\toprule | |
| 11 | +\textbf{Comparison} & & & \\ | |
| 12 | +\midrule | |
| 13 | +\multicolumn{4}{l}{\textit{Panel A: stop-word rule vs langdetect 1.0.9, all 17,087 listings (rows: rule; columns: langdetect)}} \\ | |
| 14 | +& \textbf{fr} & \textbf{en} & \textbf{other} \\ | |
| 15 | +\quad fr & 9{,}843 & 0 & 0 \\ | |
| 16 | +\quad en & 0 & 6{,}779 & 0 \\ | |
| 17 | +\quad mixed & 11 & 3 & 451 \\ | |
| 18 | +\quad Agreement (all) / on non-boilerplate fr--en ($n$ = 16{,}550) & 97.3\% & 100.0\% & $\kappa$ = 1.000 \\ | |
| 19 | +\midrule | |
| 20 | +\multicolumn{4}{l}{\textit{Panel B: 300-listing stratified sample (100 French, 100 English, 100 nearest the 1.5 decision boundary; seed 42), two independent LLM passes}} \\ | |
| 21 | +\quad LLM pass A vs pass B: agreement / $\kappa$ & 100.0\% & 1.000 & consensus $n$ = 300 \\ | |
| 22 | +\quad Stop-word rule vs LLM consensus: agreement / $\kappa$ / boundary stratum & 98.7\% & 0.971 & 96\% \\ | |
| 23 | +\quad langdetect vs LLM consensus: agreement / $\kappa$ / boundary stratum & 99.7\% & 0.993 & 99\% \\ | |
| 24 | +\midrule | |
| 25 | +\multicolumn{4}{l}{\textit{Panel C: cleaned stop-word lists (content words and a/an removed)}} \\ | |
| 26 | +\quad Words: French 37 $\to$ 27; English 32 $\to$ 18 & agreement with v1.2 labels & 99.97\% & \\ | |
| 27 | +\bottomrule | |
| 28 | +\end{tabular} | |
| 29 | +\end{adjustbox} | |
| 30 | +\begin{minipage}{\textwidth} | |
| 31 | +\vspace{4pt}\footnotesize | |
| 32 | +\textit{Notes:} The two LLM passes are independent prompts (English and French wording) given the texts only, without the rule's label; \textbf{they are LLM-coded, not human-coded}, and the human two-coder replication is left to the author. The 465 ``mixed'' listings of the rule are boilerplate records without a description (86.5\% of the 534 boilerplate records; 3 non-boilerplate listings are rule-``mixed'' and are French/English for langdetect and the LLM passes). On $S_{\text{main}}$ the rule and langdetect agree on every listing, so the D-L specifications re-estimated with langdetect labels are identical. Source: \texttt{results/v2/language\_validation.csv}, \texttt{data/processed/language\_sample\_300.csv}. | |
| 33 | +\end{minipage} | |
| 34 | +\end{table} | |
added
paper/tables/tab_lmg.tex
+44 −0
@@ -0,0 +1,44 @@ | ||
| 1 | +% Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 2 | +% Generated by scripts/18_tables_v2.py from results/v2 — do not edit by hand. | |
| 3 | +\begin{table}[!htbp] | |
| 4 | +\centering | |
| 5 | +\caption{Order-free attribution of $R^2$: LMG shares of structure, length, language and the semantic block.} | |
| 6 | +\label{tab:lmg} | |
| 7 | +\footnotesize | |
| 8 | +\begin{adjustbox}{max width=\textwidth} | |
| 9 | +\begin{tabular}{lR{2.2cm}R{1.2cm}R{2.2cm}R{2.2cm}} | |
| 10 | +\toprule | |
| 11 | +\textbf{Block} & \textbf{LMG share of} $\boldsymbol{R^2}$ & \textbf{\%} & \textbf{First-entry gain} & \textbf{Last-entry gain} \\ | |
| 12 | +\midrule | |
| 13 | +\multicolumn{5}{l}{\textit{D-L (v1.2 design, MiniLM-L6, n=17,087)} ($R^2 = 0.518$, total)} \\ | |
| 14 | +\quad Structure & 0.3751 & 72.5 & 0.4525 & 0.3192 \\ | |
| 15 | +\quad Description length & 0.0290 & 5.6 & 0.0433 & 0.0112 \\ | |
| 16 | +\quad Language indicator(s) & 0.0496 & 9.6 & 0.1086 & 0.0054 \\ | |
| 17 | +\quad 20 similarities & 0.0639 & 12.3 & 0.1254 & 0.0174 \\ | |
| 18 | +\quad Language + similarities & 0.1135 & 21.9 & --- & 0.0529 \\ | |
| 19 | +\multicolumn{5}{l}{\textit{D-L (v1.2 design, MiniLM-L6, S\_main)} ($R^2 = 0.520$, total)} \\ | |
| 20 | +\quad Structure & 0.3719 & 71.5 & 0.4530 & 0.3145 \\ | |
| 21 | +\quad Description length & 0.0340 & 6.5 & 0.0598 & 0.0114 \\ | |
| 22 | +\quad Language indicator(s) & 0.0490 & 9.4 & 0.1116 & 0.0055 \\ | |
| 23 | +\quad 20 similarities & 0.0655 & 12.6 & 0.1324 & 0.0176 \\ | |
| 24 | +\quad Language + similarities & 0.1145 & 22.0 & --- & 0.0504 \\ | |
| 25 | +\multicolumn{5}{l}{\textit{D-L + FSA FE (MiniLM-L6, S\_main)} ($R^2 = 0.460$, within)} \\ | |
| 26 | +\quad Structure & 0.3591 & 78.1 & 0.4029 & 0.3219 \\ | |
| 27 | +\quad Description length & 0.0310 & 6.7 & 0.0528 & 0.0115 \\ | |
| 28 | +\quad Language indicator(s) & 0.0128 & 2.8 & 0.0257 & 0.0019 \\ | |
| 29 | +\quad 20 similarities & 0.0569 & 12.4 & 0.0847 & 0.0327 \\ | |
| 30 | +\quad Language + similarities & 0.0697 & 15.2 & --- & 0.0399 \\ | |
| 31 | +\multicolumn{5}{l}{\textit{Preferred: D-L + FSA FE + lot + miss (ml\_chunk, S\_main)} ($R^2 = 0.582$, within)} \\ | |
| 32 | +\quad Structure & 0.4226 & 72.7 & 0.5168 & 0.3374 \\ | |
| 33 | +\quad Description length & 0.0276 & 4.8 & 0.0528 & 0.0080 \\ | |
| 34 | +\quad Language indicator(s) & 0.0138 & 2.4 & 0.0257 & 0.0021 \\ | |
| 35 | +\quad 20 similarities & 0.1174 & 20.2 & 0.1906 & 0.0490 \\ | |
| 36 | +\quad Language + similarities & 0.1313 & 22.6 & --- & 0.0530 \\ | |
| 37 | +\bottomrule | |
| 38 | +\end{tabular} | |
| 39 | +\end{adjustbox} | |
| 40 | +\begin{minipage}{\textwidth} | |
| 41 | +\vspace{4pt}\footnotesize | |
| 42 | +\textit{Notes:} Shapley (LMG) decomposition of $R^2$ over the four regressor blocks, averaged over all orders of entry (16 fits); the shares sum to the full $R^2$ (within-$R^2$ for fixed-effects specifications). ``First-entry gain'' is the $R^2$ of the block alone, ``last-entry gain'' its increment when entered after the other three (the ordering-dependent quantities quoted in the first version). Source: \texttt{results/v2/lmg\_v2.csv}. | |
| 43 | +\end{minipage} | |
| 44 | +\end{table} | |
added
paper/tables/tab_model_comparison_v2.tex
+34 −0
@@ -0,0 +1,34 @@ | ||
| 1 | +% Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 2 | +% Generated by scripts/18_tables_v2.py from results/v2 — do not edit by hand. | |
| 3 | +\begin{table}[!htbp] | |
| 4 | +\centering | |
| 5 | +\caption{Models A--E under the first-version and the corrected (v2) structural design.} | |
| 6 | +\label{tab:model_comparison_v2} | |
| 7 | +\footnotesize | |
| 8 | +\begin{adjustbox}{max width=\textwidth} | |
| 9 | +\begin{tabular}{lR{1.1cm}R{1.3cm}R{1.4cm}R{1.1cm}R{1.3cm}R{1.4cm}} | |
| 10 | +\toprule | |
| 11 | +& \multicolumn{3}{c}{\textbf{v1.2 design (raw fields)}} & \multicolumn{3}{c}{\textbf{v2 design}} \\ | |
| 12 | +\cmidrule(lr){2-4} \cmidrule(lr){5-7} | |
| 13 | +\textbf{Model} & $\boldsymbol{R^2}$ & \textbf{Adj.} $\boldsymbol{R^2}$ & $\boldsymbol{\Delta R^2}$ \textbf{vs A} & $\boldsymbol{R^2}$ & \textbf{Adj.} $\boldsymbol{R^2}$ & $\boldsymbol{\Delta R^2}$ \textbf{vs A} \\ | |
| 14 | +\midrule | |
| 15 | +\multicolumn{7}{l}{\textit{$n = 17{,}087$}} \\ | |
| 16 | +\quad A: structural only & 0.4525 & 0.4523 & --- & 0.4749 & 0.4746 & --- \\ | |
| 17 | +\quad B: + description length & 0.4647 & 0.4645 & 0.012 & 0.4840 & 0.4836 & 0.009 \\ | |
| 18 | +\quad C: A + 20 similarities & 0.4962 & 0.4954 & 0.044 & 0.5128 & 0.5119 & 0.038 \\ | |
| 19 | +\quad D: B + 20 similarities & 0.5122 & 0.5115 & 0.060 & 0.5264 & 0.5255 & 0.051 \\ | |
| 20 | +\quad E: post-selection (descriptive) & 0.5118 & 0.5111 & 0.059 & 0.5263 & 0.5256 & 0.051 \\ | |
| 21 | +\multicolumn{7}{l}{\textit{$S_{\text{main}}$, $n = 16{,}553$}} \\ | |
| 22 | +\quad A: structural only & 0.4530 & 0.4528 & --- & 0.4753 & 0.4750 & --- \\ | |
| 23 | +\quad B: + description length & 0.4699 & 0.4697 & 0.017 & 0.4887 & 0.4883 & 0.013 \\ | |
| 24 | +\quad C: A + 20 similarities & 0.5002 & 0.4994 & 0.047 & 0.5162 & 0.5153 & 0.041 \\ | |
| 25 | +\quad D: B + 20 similarities & 0.5148 & 0.5140 & 0.062 & 0.5290 & 0.5281 & 0.054 \\ | |
| 26 | +\quad E: post-selection (descriptive) & 0.5146 & 0.5139 & 0.062 & 0.5289 & 0.5282 & 0.054 \\ | |
| 27 | +\bottomrule | |
| 28 | +\end{tabular} | |
| 29 | +\end{adjustbox} | |
| 30 | +\begin{minipage}{\textwidth} | |
| 31 | +\vspace{4pt}\footnotesize | |
| 32 | +\textit{Notes:} v1.2 design: integer-parsed counts (storeys 1.5 and missing values coded 0), raw lot-size field with mixed units (maximum $z = 130$, leverage reported in \texttt{results/v2/leverage\_model\_d.csv}). v2 design: float counts with six missing-value indicators and the unit-corrected log lot area with its indicator. MiniLM-L6 similarities, HC3 standard errors. Between the two designs the Model D coefficients move by at most 5.3 HC3 standard errors (Parking; \texttt{results/v2/model\_d\_design\_change.csv}). Model E is a post-selection specification and is reported for description only. | |
| 33 | +\end{minipage} | |
| 34 | +\end{table} | |
added
paper/tables/tab_multiverse.tex
+35 −0
@@ -0,0 +1,35 @@ | ||
| 1 | +% Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 2 | +% Generated by scripts/18_tables_v2.py from results/v2 — do not edit by hand. | |
| 3 | +\begin{table}[!htbp] | |
| 4 | +\centering | |
| 5 | +\caption{Phrasing multiverse: block-level stability and dimension-level survival over 200 random reference phrasings.} | |
| 6 | +\label{tab:multiverse} | |
| 7 | +\footnotesize | |
| 8 | +\begin{adjustbox}{max width=\textwidth} | |
| 9 | +\begin{tabular}{lR{1.0cm}R{0.9cm}R{2.4cm}R{1.0cm}R{0.8cm}R{0.9cm}R{1.6cm}} | |
| 10 | +\toprule | |
| 11 | +\textbf{Specification} & \multicolumn{3}{c}{$\boldsymbol{\Delta R^2}$ \textbf{(block)}} & \textbf{min} $\boldsymbol{F}$ & \multicolumn{2}{c}{\textbf{Sig. (mean)}} & \textbf{Dims} $\boldsymbol{\ge 90 / 70\%}$ \\ | |
| 12 | +\cmidrule(lr){2-4} \cmidrule(lr){6-7} | |
| 13 | + & \textbf{mean} & \textbf{SD} & \textbf{range} & & \textbf{raw} & \textbf{Holm} & \\ | |
| 14 | +\midrule | |
| 15 | +\multicolumn{8}{l}{\textit{MiniLM-L6}} \\ | |
| 16 | +\quad D (v1.2 design, HC3) & 0.0449 & 0.0033 & [0.0363, 0.0555] & 45.8 & 14.0 & 11.8 & 0 / 5 \\ | |
| 17 | +\quad D-L + FSA FE (clustered) & 0.0182 & 0.0027 & [0.0110, 0.0248] & 19.3 & 13.3 & 10.8 & 2 / 2 \\ | |
| 18 | +\quad v2 design: D-L + FSA FE + lot + missing ind. & 0.0119 & 0.0016 & [0.0078, 0.0167] & 15.2 & 13.3 & 10.8 & 2 / 4 \\ | |
| 19 | +\multicolumn{8}{l}{\textit{Multilingual chunked}} \\ | |
| 20 | +\quad D (v1.2 design, HC3) & 0.0545 & 0.0044 & [0.0455, 0.0663] & 49.7 & 15.9 & 14.7 & 3 / 6 \\ | |
| 21 | +\quad D-L + FSA FE (clustered) & 0.0397 & 0.0022 & [0.0335, 0.0457] & 48.7 & 14.6 & 12.7 & 1 / 5 \\ | |
| 22 | +\quad v2 design: D-L + FSA FE + lot + missing ind. & 0.0279 & 0.0017 & [0.0236, 0.0336] & 28.9 & 14.2 & 12.0 & 4 / 6 \\ | |
| 23 | +\midrule | |
| 24 | +\multicolumn{8}{l}{\textit{First-version deterministic variants (MiniLM-L6, Model D, $n = 17{,}087$; reproduced at $10^{-6}$)}} \\ | |
| 25 | +\quad first half & 0.0538 & --- & --- & 63.5 & 15 & --- & --- \\ | |
| 26 | +\quad second half & 0.0432 & --- & --- & 52.6 & 11 & --- & --- \\ | |
| 27 | +\quad reversed & 0.0419 & --- & --- & 51.6 & 11 & --- & --- \\ | |
| 28 | +\bottomrule | |
| 29 | +\end{tabular} | |
| 30 | +\end{adjustbox} | |
| 31 | +\begin{minipage}{\textwidth} | |
| 32 | +\vspace{4pt}\footnotesize | |
| 33 | +\textit{Notes:} 200 random draws; in each draw every reference is rebuilt from a random 60--80\% subset of its comma-separated phrases in random order and re-encoded, the similarities are recomputed from the cached listing embeddings and the specification re-estimated on $S_{\text{main}}$. $\Delta R^2$ is the gain of the 20 similarities; ``min $F$'' the smallest block statistic over the draws (every draw has $p < 0.001$); ``Sig.'' the mean number of individually significant dimensions; the last column counts dimensions whose Holm-significant same-sign share over the draws reaches 90\% / 70\%. The block-level fit is stable (SD of $\Delta R^2 < 0.005$ everywhere); the dimension-level coefficients are not. Source: \texttt{results/v2/multiverse\_summary.csv}, \texttt{multiverse\_blocks.csv}. | |
| 34 | +\end{minipage} | |
| 35 | +\end{table} | |
added
paper/tables/tab_oos_v2.tex
+42 −0
@@ -0,0 +1,42 @@ | ||
| 1 | +% Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 2 | +% Generated by scripts/18_tables_v2.py from results/v2 — do not edit by hand. | |
| 3 | +\begin{table}[!htbp] | |
| 4 | +\centering | |
| 5 | +\caption{Out-of-sample performance of the Stage D specifications under random, FSA-grouped, region-blocked and distance-blocked cross-validation.} | |
| 6 | +\label{tab:oos_v2} | |
| 7 | +\scriptsize | |
| 8 | +\begin{adjustbox}{max width=\textwidth} | |
| 9 | +\begin{tabular}{lR{1.0cm}R{1.1cm}R{1.0cm}R{1.1cm}R{1.0cm}R{1.1cm}R{1.0cm}R{1.1cm}} | |
| 10 | +\toprule | |
| 11 | +\textbf{Specification} & \multicolumn{2}{c}{\textbf{Random 5-fold ($\times 20$)}} & \multicolumn{2}{c}{\textbf{FSA-grouped ($\times 20$)}} & \multicolumn{2}{c}{\textbf{Leave-one-region-out (17)}} & \multicolumn{2}{c}{\textbf{10 distance blocks, 10 km buffer}} \\ | |
| 12 | +\cmidrule(lr){2-3} \cmidrule(lr){4-5} \cmidrule(lr){6-7} \cmidrule(lr){8-9} | |
| 13 | + & $R^2_{\text{oos}}$ & SD & $R^2_{\text{oos}}$ & SD & $R^2_{\text{oos}}$ & SD & $R^2_{\text{oos}}$ & SD \\ | |
| 14 | +\midrule | |
| 15 | +B-L (v2 design, no text) & 0.520 & 0.000 & 0.514 & 0.003 & 0.480 & (0.651) & 0.396 & (0.332) \\ | |
| 16 | +D-L, MiniLM-L6 & 0.532 & 0.001 & 0.523 & 0.003 & 0.483 & (0.627) & 0.384 & (0.335) \\ | |
| 17 | +D-L, ML chunked & 0.553 & 0.001 & 0.545 & 0.003 & 0.507 & (0.650) & 0.405 & (0.308) \\ | |
| 18 | +PCA-20 + L & 0.544 & 0.000 & 0.534 & 0.003 & 0.491 & (0.582) & 0.387 & (0.305) \\ | |
| 19 | +B-L + FSA FE (training-fold FE) & 0.698 & 0.001 & 0.592 & 0.008 & 0.408 & (0.394) & 0.137 & (0.391) \\ | |
| 20 | +D-L + FSA FE, MiniLM-L6 & 0.711 & 0.001 & 0.601 & 0.008 & 0.413 & (0.411) & 0.093 & (0.485) \\ | |
| 21 | +\textbf{D-L + FSA FE, ML chunked (preferred)} & 0.728 & 0.001 & 0.618 & 0.008 & 0.423 & (0.437) & 0.096 & (0.491) \\ | |
| 22 | +PCA-20 + L + FSA FE & 0.722 & 0.001 & 0.612 & 0.009 & 0.399 & (0.425) & 0.133 & (0.426) \\ | |
| 23 | +\midrule | |
| 24 | +\multicolumn{9}{l}{\textit{Increment of the semantic block, $\Delta R^2_{\text{oos}}$ (mean $\pm$ SD over repetitions; Clark--West $p$, first repetition)}} \\ | |
| 25 | +\quad B-L $\to$ D-L, MiniLM-L6 & 0.011$\pm$0.000 & $p$=0.000 & 0.009$\pm$0.001 & $p$=0.000 & 0.003 & $p$=0.000 & $-$0.012 & $p$=0.141 \\ | |
| 26 | +\quad B-L $\to$ D-L, ML chunked & 0.033$\pm$0.000 & $p$=0.000 & 0.031$\pm$0.001 & $p$=0.000 & 0.027 & $p$=0.000 & 0.009 & $p$=0.000 \\ | |
| 27 | +\quad B-L + FE $\to$ D-L + FE, MiniLM-L6 & 0.013$\pm$0.000 & $p$=0.000 & 0.009$\pm$0.002 & $p$=0.000 & 0.005 & $p$=0.000 & $-$0.044 & $p$=0.932 \\ | |
| 28 | +\quad \textbf{B-L + FE $\to$ D-L + FE, ML chunked} & 0.030$\pm$0.000 & $p$=0.000 & 0.026$\pm$0.002 & $p$=0.000 & 0.015 & $p$=0.000 & $-$0.041 & $p$=0.308 \\ | |
| 29 | +\quad B-L + FE $\to$ PCA-20 + L + FE & 0.024$\pm$0.000 & $p$=0.000 & 0.020$\pm$0.003 & $p$=0.000 & $-$0.008 & $p$=0.004 & $-$0.004 & $p$=0.004 \\ | |
| 30 | +\midrule | |
| 31 | +\multicolumn{9}{l}{\textit{Non-nested comparisons (Diebold--Mariano on squared errors, FSA-cluster-robust; first repetition)}} \\ | |
| 32 | +\quad PCA-20 + L + FE vs D-L + FE (ML chunked) & 3.00 & $p$=0.003 & 2.76 & $p$=0.006 & 2.41 & $p$=0.016 & -2.52 & $p$=0.012 \\ | |
| 33 | +\quad D-L + FE: MiniLM-L6 vs ML chunked & 9.27 & $p$=0.000 & 4.65 & $p$=0.000 & 1.34 & $p$=0.181 & 0.19 & $p$=0.851 \\ | |
| 34 | +\quad D-L + FE: ML chunked vs price-masked & -2.95 & $p$=0.003 & -3.50 & $p$=0.001 & -2.40 & $p$=0.017 & -3.54 & $p$=0.000 \\ | |
| 35 | +\bottomrule | |
| 36 | +\end{tabular} | |
| 37 | +\end{adjustbox} | |
| 38 | +\begin{minipage}{\textwidth} | |
| 39 | +\vspace{4pt}\footnotesize | |
| 40 | +\textit{Notes:} Sample $S_{\text{main}}$; pooled out-of-fold $R^2$ (log scale). Random and FSA-grouped folds are repeated 20 times (seeds 42--61; SD over repetitions); the leave-one-region-out and distance-blocked schemes are deterministic (SD over folds in parentheses). Fixed effects are estimated on the training fold; a held-out listing in an FSA unseen in training receives the municipality mean, then the region mean, then the grand mean (every FSA is unseen under the region and distance schemes). Distance blocks are $k$-means clusters of the projected coordinates ($k = 10$); training listings within 10 km of a test listing are removed. Clark--West tests the nested small model against the large one (one-sided); Diebold--Mariano is two-sided (positive statistic favours the second model). Bootstrap intervals of the increments and the model confidence set are in \texttt{results/v2/oos\_v2\_bootstrap.csv} and \texttt{oos\_v2\_mcs.csv}; the v1.2 rows of Table~\ref{tab:oos} are reproduced at $10^{-6}$ by the same engine with \texttt{--legacy}. | |
| 41 | +\end{minipage} | |
| 42 | +\end{table} | |
added
paper/tables/tab_reference_geometry.tex
+44 −0
@@ -0,0 +1,44 @@ | ||
| 1 | +% Author: Simon-Pierre Boucher — contact@spboucher.ai | |
| 2 | +% Generated by scripts/18_tables_v2.py from results/v2 — do not edit by hand. | |
| 3 | +\begin{table}[!htbp] | |
| 4 | +\centering | |
| 5 | +\caption{Geometry of the 20 reference embeddings.} | |
| 6 | +\label{tab:reference_geometry} | |
| 7 | +\scriptsize | |
| 8 | +\begin{adjustbox}{max width=\textwidth} | |
| 9 | +\begin{tabular}{lR{1.0cm}R{1.0cm}lR{1.0cm}R{1.0cm}l} | |
| 10 | +\toprule | |
| 11 | +& \multicolumn{3}{c}{\textbf{MiniLM-L6}} & \multicolumn{3}{c}{\textbf{Multilingual MiniLM-L12}} \\ | |
| 12 | +\cmidrule(lr){2-4} \cmidrule(lr){5-7} | |
| 13 | +\textbf{Dimension} & $\boldsymbol{\|r_{j\perp}\|}$ & \textbf{max cos} & \textbf{nearest reference} & $\boldsymbol{\|r_{j\perp}\|}$ & \textbf{max cos} & \textbf{nearest reference} \\ | |
| 14 | +\midrule | |
| 15 | +Luxury & 0.669 & 0.60 & Renovated & 0.573 & 0.61 & Pool \& Landscaping \\ | |
| 16 | +Entry-Level & 0.608 & 0.69 & Motivated Seller & 0.638 & 0.63 & Income/Investment \\ | |
| 17 | +Renovated & 0.562 & 0.65 & Needs Renovation & 0.640 & 0.60 & New Construction \\ | |
| 18 | +Needs Renovation & 0.690 & 0.65 & Renovated & 0.599 & 0.62 & Motivated Seller \\ | |
| 19 | +Bright \& Spacious & 0.624 & 0.61 & Renovated & 0.569 & 0.59 & Luxury \\ | |
| 20 | +Land \& Nature & 0.595 & 0.70 & Quiet \& Peaceful & 0.404 & 0.82 & Pool \& Landscaping \\ | |
| 21 | +Panoramic View & 0.738 & 0.57 & Bright \& Spacious & 0.665 & 0.61 & Land \& Nature \\ | |
| 22 | +Premium Location & 0.723 & 0.53 & Entry-Level & 0.592 & 0.66 & Family-Friendly \\ | |
| 23 | +Quiet \& Peaceful & 0.567 & 0.70 & Land \& Nature & 0.593 & 0.66 & Family-Friendly \\ | |
| 24 | +Income/Investment & 0.669 & 0.59 & Entry-Level & 0.704 & 0.63 & Entry-Level \\ | |
| 25 | +Garage \& Parking & 0.784 & 0.52 & Income/Investment & 0.791 & 0.51 & Finished Basement \\ | |
| 26 | +Finished Basement & 0.719 & 0.57 & Luxury & 0.659 & 0.55 & Family-Friendly \\ | |
| 27 | +Modern/Contemporary & 0.602 & 0.73 & New Construction & 0.587 & 0.61 & New Construction \\ | |
| 28 | +Heritage/Character & 0.658 & 0.61 & Quiet \& Peaceful & 0.634 & 0.60 & Luxury \\ | |
| 29 | +Energy Efficient & 0.724 & 0.54 & Renovated & 0.748 & 0.51 & Modern/Contemporary \\ | |
| 30 | +Motivated Seller & 0.638 & 0.69 & Entry-Level & 0.640 & 0.62 & Needs Renovation \\ | |
| 31 | +Family-Friendly & 0.708 & 0.53 & Pool \& Landscaping & 0.541 & 0.66 & Premium Location \\ | |
| 32 | +Waterfront & 0.710 & 0.54 & Land \& Nature & 0.640 & 0.70 & Land \& Nature \\ | |
| 33 | +New Construction & 0.586 & 0.73 & Modern/Contemporary & 0.636 & 0.61 & Modern/Contemporary \\ | |
| 34 | +Pool \& Landscaping & 0.624 & 0.61 & Quiet \& Peaceful & 0.449 & 0.82 & Land \& Nature \\ | |
| 35 | +\midrule | |
| 36 | +Gram matrix: mean / max off-diagonal cosine; condition number & 0.47 / 0.73 & \multicolumn{2}{l}{cond.\ 52} & 0.37 / 0.82 & \multicolumn{2}{l}{cond.\ 87} \\ | |
| 37 | +\bottomrule | |
| 38 | +\end{tabular} | |
| 39 | +\end{adjustbox} | |
| 40 | +\begin{minipage}{\textwidth} | |
| 41 | +\vspace{4pt}\footnotesize | |
| 42 | +\textit{Notes:} $\|r_{j\perp}\|$ is the norm of the part of reference embedding $j$ (unit length) that is orthogonal to the span of the other 19 references: the direction actually priced by $\gamma_j$ in a linear model. ``max cos'' is the largest cosine of reference $j$ with another reference. The fitted values of Models C/D depend only on the span of the reference matrix $R$: replacing $R$ by $MR$ for any invertible $M$ leaves $R^2$ unchanged (numerical check: $|\Delta R^2| = 1e-16$, max $|\tilde\gamma - (M')^{-1}\gamma| = 5e-10$, seed 42, \texttt{results/v2/span\_invariance\_check.json}). Source: \texttt{results/v2/reference\_residual\_norms.csv}, \texttt{reference\_gram\_*.csv}. | |
| 43 | +\end{minipage} | |
| 44 | +\end{table} | |
added
paper/tables/tab_sample_audit.tex
+41 −0
Large diff (41 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_spatial.tex
+33 −0
Large diff (33 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_spec_summary_v2.tex
+33 −0
Large diff (33 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_survival.tex
+42 −0
Large diff (42 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/tables/tab_text_comparison.tex
+24 −12
Large diff (47 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_truncation.tex
+32 −0
Large diff (32 lines) is not loaded by default to keep the page fast.Load diff
added
results/inline_numbers.json
+3234 −0
Large diff (3,235 lines) is not loaded by default to keep the page fast.Load diff
added
results/v2/block_tests_v2.csv
+36 −0
Large diff (36 lines) is not loaded by default to keep the page fast.Load diff
added
results/v2/conley_v2.csv
+39 −0
Large diff (39 lines) is not loaded by default to keep the page fast.Load diff
added
results/v2/language_contrasts_v2.csv
+806 −0
Large diff (806 lines) is not loaded by default to keep the page fast.Load diff
added
results/v2/legacy_oos_reproduction.csv
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added
results/v2/legacy_reproduction.csv
+15 −0
Large diff (15 lines) is not loaded by default to keep the page fast.Load diff
added
results/v2/leverage_model_d.csv
+12 −0
Large diff (12 lines) is not loaded by default to keep the page fast.Load diff
added
results/v2/lmg_v2.csv
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added
results/v2/model_d_design_change.csv
+27 −0
Large diff (27 lines) is not loaded by default to keep the page fast.Load diff
added
results/v2/models_ae_v2.csv
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added
results/v2/multiverse_blocks.csv
+3601 −0
Large diff (3,601 lines) is not loaded by default to keep the page fast.Load diff
added
results/v2/multiverse_draws.csv
+10413 −0
Large diff (10,413 lines) is not loaded by default to keep the page fast.Load diff
Diff truncated — file too large.