# QWHPI Data Audit Report Author: Simon-Pierre Boucher — contact@spboucher.ai ## 1. Schema and shape - Rows: 745,119 - Columns: 17 - Date range: 2021-01-04 -> 2026-07-27 - Distinct Monday-labeled weeks with >=1 transaction: 291 - Distinct cities (raw text field): 1,100 - Distinct ids: 745,119 (duplicated ids: 0) -> table saved: outputs/tables/audit_schema.csv (17 rows) ## 2. Missingness -> table saved: outputs/tables/audit_missingness.csv (17 rows) - `buildingType`: 283,206 missing (38.01%) - `ownerType`: 224,999 missing (30.2%) - `yearBuilt`: 137,315 missing (18.43%) - `floorArea`: 115,153 missing (15.45%) - `previousValue`: 78,581 missing (10.55%) - `zipCode`: 75,369 missing (10.12%) - `totalArValue`: 63,160 missing (8.48%) - `street`: 6,688 missing (0.9%) Sentinel / degenerate values (not encoded as null): -> table saved: outputs/tables/audit_sentinel_values.csv (11 rows) - amount <= 0: 0 - amount in (1, 2): 0 - amount < 5000: 0 - floorArea <= 0: 0 - floorArea > 2000 m2: 375 - yearBuilt < 1600: 0 - yearBuilt > 2026: 0 - yearBuilt == 0: 0 - previousValue <= 0: 1,640 - totalArValue <= 0: 17 - lat/lng outside Quebec bbox (44.9-62.7N, -79.8--57W): 0 ## 3. Categorical distributions ### propertyType -> table saved: outputs/tables/audit_dist_propertyType.csv (4 rows) - unifamilial: 443,078 (59.46%) - indéterminé: 107,656 (14.45%) - condo: 100,218 (13.45%) - plex: 94,167 (12.64%) ### buildingType -> table saved: outputs/tables/audit_dist_buildingType.csv (6 rows) - None: 283,206 (38.01%) - single-story: 205,924 (27.64%) - full-story: 188,584 (25.31%) - mansard: 52,808 (7.09%) - split-level: 8,743 (1.17%) - single-wide: 5,854 (0.79%) ### ownerType -> table saved: outputs/tables/audit_dist_ownerType.csv (4 rows) - physical_person: 496,404 (66.62%) - None: 224,999 (30.2%) - legal_person: 22,351 (3.0%) - mixed: 1,365 (0.18%) ## 4. Amount descriptives by propertyType (amount > 0) -> table saved: outputs/tables/audit_amount_by_type.csv (4 rows) - unifamilial: n=443,078 | p01=$60,000 | median=$378,000 | p99=$1,635,000 | max=$345,000,000 - indéterminé: n=107,656 | p01=$52,185 | median=$319,252 | p99=$1,400,000 | max=$75,000,000 - condo: n=100,218 | p01=$103,500 | median=$360,000 | p99=$1,300,000 | max=$18,750,000 - plex: n=94,167 | p01=$75,000 | median=$470,577 | p99=$1,710,000 | max=$42,000,000 -> table saved: outputs/tables/audit_characteristics_by_type.csv (4 rows) ## 5. Duplicate scan - Exact duplicates ignoring id: 665 - Same street+city+date (candidate multi-unit or true dupes): 10,925 - Same street+city+date+amount (strong duplicate candidates): 784 - Addresses (street+city) with >=2 distinct sale dates: 87,787 ## 6. Weekly coverage and liquidity - Continuous Monday grid: 291 weeks (2021-01-04 -> 2026-07-27) - Zero-transaction weeks on the grid: 0 - Median tx/week (province): 2,351 - Min tx/week: 35 | Max: 7,845 - Last 6 weeks (partial-week check): 2026-06-22=4226, 2026-06-29=3581, 2026-07-06=2934, 2026-07-13=2973, 2026-07-20=2197, 2026-07-27=318 -> table saved: outputs/tables/audit_weekly_volume_province.csv (291 rows) -> table saved: outputs/tables/audit_weekly_liquidity_topcities.csv (100 rows) -> table saved: outputs/tables/audit_liquidity_matrix.csv (25 rows) Median weekly transactions, top cities (rows) x type (cols): see audit_liquidity_matrix.csv - {'city': 'Québec', 'condo': 41.5, 'indéterminé': 6.0, 'plex': 21.0, 'unifamilial': 66.0} - {'city': 'Montréal', 'condo': 145.0, 'indéterminé': 39.0, 'plex': 80.0, 'unifamilial': 64.0} - {'city': 'Gatineau', 'condo': 7.0, 'indéterminé': 12.0, 'plex': 12.0, 'unifamilial': 54.0} - {'city': 'Laval', 'condo': 21.0, 'indéterminé': 8.0, 'plex': 8.0, 'unifamilial': 54.0} - {'city': 'Sherbrooke', 'condo': 2.0, 'indéterminé': 6.0, 'plex': 7.0, 'unifamilial': 29.0} - {'city': 'Longueuil', 'condo': 15.0, 'indéterminé': 10.0, 'plex': 9.0, 'unifamilial': 28.0} - {'city': 'Lévis', 'condo': 4.0, 'indéterminé': 6.0, 'plex': 5.0, 'unifamilial': 26.0} - {'city': 'Saguenay', 'condo': 2.0, 'indéterminé': 4.0, 'plex': 8.0, 'unifamilial': 26.0} - {'city': 'Trois-Rivières', 'condo': 2.0, 'indéterminé': 5.0, 'plex': 8.0, 'unifamilial': 23.0} - {'city': 'Terrebonne', 'condo': 3.0, 'indéterminé': 6.0, 'plex': 3.0, 'unifamilial': 22.0} - {'city': 'Saint-Jean-sur-Richelieu', 'condo': 2.0, 'indéterminé': 4.0, 'plex': 3.0, 'unifamilial': 18.0} - {'city': 'Drummondville', 'condo': 1.0, 'indéterminé': 3.0, 'plex': 4.0, 'unifamilial': 16.0} - Top 50 city strings cover 61.4% of transactions -> table saved: outputs/tables/audit_city_top200.csv (200 rows) ## 7. `indéterminé` property type — preliminary look - Count: 107,656 (14.4%) - Median amount: $319,252 (vs unifamilial $378,000) - floorArea missing: 95.6% | yearBuilt missing: 95.2% | buildingType missing: 97.9% - Top buildingType values within indéterminé: None=105,377, single-story=1,089, mansard=601, full-story=557, single-wide=26, split-level=6 - ownerType within indéterminé: None=73,911, physical_person=20,620, legal_person=12,657, mixed=468