Municipal 311 deduplication. Converts how many people complained into how many problems exist. Toronto 311 open data, 2025.
Toronto publishes a 311 request's location at one of two precisions, and only the coarse one is common. 84.32% of requests are placed only inside a postal district holding thousands of addresses. 15.68% are placed at an actual street corner. Deduplication needs a corner.
This page does not claim that deduplication reorders Toronto's ward ranking. It claims the opposite, and shows why: at the precision the open data publishes, deduplication reaches too little of the file to reorder anything. The reordering the method can produce needs location the city already holds at the moment of the call, and does not release.
| Location precision | Requests | Share of file | With both street names | Distinct values |
|---|---|---|---|---|
| postal FSA (a district of thousands of addresses) | 421,812 | 84.32% | 0 | 100 |
| street intersection (a corner) | 78,457 | 15.68% | 77,833 | 1 |
| Total | 500,269 | 100.00% |
Unit: service requests. Source: 311 Service Requests 2025,
all 500,269 rows, 2025-01-01 to
2025-12-31. Query location_precision_partition in
sql/10_evidence.sql. The coarse bucket is identified by an
A0A-form value; the fine bucket carries the literal
string Intersection in the postal-code column.
coveragedupe_rate_intersectiondupe_rate_intersectionOnly 8 of 25 wards move, and no ward moves more than 2 places. This is not a reordering.
The arithmetic is the reason, and it is not subtle. Deduplication can only touch the 15.68% of requests that carry a corner, and it removes 13,395 of 500,269 rows, 2.68% of the file. The gaps between adjacent wards in the raw ranking are larger than that. A 2.68% perturbation cannot reorder a list whose neighbouring entries differ by more.
Deduplicated unique-issue count for a ward = requests in that ward with no corner (each its own unique issue, because we cannot prove otherwise) + clusters whose earliest report is in that ward. Anchor attribution avoids double counting clusters at an intersection sitting on a ward boundary; only 8 of 64,438 clusters span more than one ward.
| Ward | Name | Raw requests | Deduplicated issues | Redundant | Dup rate, located | Rank, raw | Rank, dedup | Change |
|---|---|---|---|---|---|---|---|---|
| 10 | Spadina-Fort York | 21,243 | 19,294 | 1,949 | 28.50% | 10 | 12 | -2 |
| 06 | York Centre | 18,852 | 16,360 | 2,492 | 48.91% | 15 | 17 | -2 |
| 11 | University-Rosedale | 27,122 | 26,475 | 647 | 15.56% | 3 | 4 | -1 |
| 19 | Beaches-East York | 27,018 | 26,671 | 347 | 11.44% | 4 | 3 | +1 |
| 02 | Etobicoke Centre | 21,242 | 20,854 | 388 | 12.74% | 11 | 10 | +1 |
| 05 | York South-Weston | 20,772 | 20,371 | 401 | 13.00% | 12 | 11 | +1 |
| 21 | Scarborough Centre | 18,777 | 18,287 | 490 | 17.62% | 16 | 15 | +1 |
| 13 | Toronto Centre | 18,718 | 18,154 | 564 | 13.31% | 17 | 16 | +1 |
| Ward | Name | Raw requests | Deduplicated issues | Redundant | Dup rate, located | Rank, raw | Rank, dedup | Change |
|---|---|---|---|---|---|---|---|---|
| 14 | Toronto-Danforth | 30,476 | 29,898 | 578 | 13.19% | 1 | 1 | 0 |
| 09 | Davenport | 27,124 | 26,699 | 425 | 12.22% | 2 | 2 | 0 |
| 03 | Etobicoke-Lakeshore | 25,874 | 25,277 | 597 | 14.19% | 5 | 5 | 0 |
| 04 | Parkdale-High Park | 25,517 | 25,063 | 454 | 12.35% | 6 | 6 | 0 |
| 08 | Eglinton-Lawrence | 24,221 | 23,761 | 460 | 12.67% | 7 | 7 | 0 |
| 20 | Scarborough Southwest | 22,300 | 22,011 | 289 | 11.68% | 8 | 8 | 0 |
| 12 | Toronto-St. Paul's | 21,747 | 21,386 | 361 | 12.21% | 9 | 9 | 0 |
| 15 | Don Valley West | 19,631 | 19,289 | 342 | 13.78% | 13 | 13 | 0 |
| 25 | Scarborough-Rouge Park | 19,396 | 19,151 | 245 | 10.99% | 14 | 14 | 0 |
| 18 | Willowdale | 15,510 | 15,305 | 205 | 11.36% | 18 | 18 | 0 |
| 24 | Scarborough-Guildwood | 15,439 | 15,199 | 240 | 13.66% | 19 | 19 | 0 |
| 01 | Etobicoke North | 15,406 | 15,103 | 303 | 12.77% | 20 | 20 | 0 |
| 17 | Don Valley North | 13,737 | 13,438 | 299 | 14.74% | 21 | 21 | 0 |
| 07 | Humber River-Black Creek | 13,514 | 13,253 | 261 | 14.39% | 22 | 22 | 0 |
| 22 | Scarborough-Agincourt | 12,690 | 12,271 | 419 | 19.14% | 23 | 23 | 0 |
| 23 | Scarborough North | 12,308 | 11,999 | 309 | 15.95% | 24 | 24 | 0 |
| 16 | Don Valley East | 11,628 | 11,298 | 330 | 15.40% | 25 | 25 | 0 |
Units: requests, issues, rank positions. Source: query
ward_ranking in sql/10_evidence.sql, over all
500,269 rows. Ward boundaries: 25-ward model, 2018
federal riding boundaries.
One further caveat that cuts against the thesis rather than for it: two of the eight moving wards in this table move only because of a data artifact. Removing the automated Bathurst St submitter and the 311 contact-centre feedback records, both documented on the Concentration page, drops the table to 4 wards moving, maximum 1 place. The honest reading of this dataset is that there is no reordering at all.
Income is not a model input. It is joined after every count above is final, and it is read by nothing upstream of any allocation decision. Its only job is to test whether the under-reporting tracks disadvantage. If income were a feature, the system would be allocating on who lives somewhere rather than on what is broken there.
| Relationship | r | t | p | n | Verdict |
|---|---|---|---|---|---|
| Median household income vs raw request count | +0.3725 | +1.925 | 0.0667 | 25 | not significant at n = 25 |
| Median household income vs raw requests per 10,000 residents | +0.3827 | +1.987 | 0.0590 | 25 | not significant at n = 25 |
| Median household income vs deduplicated issues per 10,000 residents | +0.3845 | +1.998 | 0.0577 | 25 | not significant at n = 25 |
| Median household income vs duplicate rate | -0.0987 | -0.476 | 0.6388 | 25 | not significant at n = 25 |
| Ward population vs raw request count | +0.2310 | +1.139 | 0.2666 | 25 | not significant at n = 25 |
Units: Pearson r (dimensionless), t statistic, two-tailed p.
Sources: request counts from sr_raw (311 Service Requests 2025);
median total household income 2020 and population 2021 from City of Toronto
Ward Profiles (25-Ward Model), 2023 release, sheet
2021 One Variable → Statistics Canada 2021 Census.
Correlations computed by Postgres corr() in query
income_correlation; p values by two-tailed t test in
scripts/part1_evidence.py.
Reading these honestly. Higher-income wards do report more, and the sign is the one the reporting-bias literature predicts (Kontokosta & Hong 2021, Kansas City; Minkoff 2016, NYC). But r = +0.3827 at p = 0.059 does not clear the conventional threshold with 25 wards. It is consistent with the literature; it is not independent confirmation of it. And the duplicate rate does not track income at all, r = −0.0987, p = 0.6388, a flat null. Whatever the loud-ward effect is in this data, it is in report volume, not in redundancy per problem.
| Ward | Name | Median household income, 2020 | Population, 2021 | Raw requests | Deduplicated issues | Raw per 10k | Dedup per 10k | Dup rate, located |
|---|---|---|---|---|---|---|---|---|
| 13 | Toronto Centre | $65,000 | 116,930 | 18,718 | 18,154 | 1600.8 | 1552.6 | 13.31% |
| 05 | York South-Weston | $72,000 | 115,675 | 20,772 | 20,371 | 1795.7 | 1761.1 | 13.00% |
| 07 | Humber River-Black Creek | $73,000 | 111,200 | 13,514 | 13,253 | 1215.3 | 1191.8 | 14.39% |
| 22 | Scarborough-Agincourt | $77,000 | 103,690 | 12,690 | 12,271 | 1223.8 | 1183.4 | 19.14% |
| 21 | Scarborough Centre | $78,000 | 111,560 | 18,777 | 18,287 | 1683.1 | 1639.2 | 17.62% |
| 24 | Scarborough-Guildwood | $78,000 | 102,755 | 15,439 | 15,199 | 1502.5 | 1479.1 | 13.66% |
| 16 | Don Valley East | $78,500 | 94,335 | 11,628 | 11,298 | 1232.6 | 1197.6 | 15.40% |
| 20 | Scarborough Southwest | $79,000 | 110,095 | 22,300 | 22,011 | 2025.5 | 1999.3 | 11.68% |
| 01 | Etobicoke North | $81,000 | 115,120 | 15,406 | 15,103 | 1338.3 | 1311.9 | 12.77% |
| 18 | Willowdale | $81,000 | 117,130 | 15,510 | 15,305 | 1324.2 | 1306.7 | 11.36% |
| 06 | York Centre | $82,000 | 107,355 | 18,852 | 16,360 | 1756.0 | 1523.9 | 48.91% |
| 11 | University-Rosedale | $84,000 | 102,385 | 27,122 | 26,475 | 2649.0 | 2585.8 | 15.56% |
| 17 | Don Valley North | $84,000 | 112,590 | 13,737 | 13,438 | 1220.1 | 1193.5 | 14.74% |
| 04 | Parkdale-High Park | $85,000 | 104,715 | 25,517 | 25,063 | 2436.8 | 2393.4 | 12.35% |
| 09 | Davenport | $85,000 | 104,730 | 27,124 | 26,699 | 2589.9 | 2549.3 | 12.22% |
| 12 | Toronto-St. Paul's | $86,000 | 114,095 | 21,747 | 21,386 | 1906.0 | 1874.4 | 12.21% |
| 23 | Scarborough North | $87,000 | 94,025 | 12,308 | 11,999 | 1309.0 | 1276.1 | 15.95% |
| 19 | Beaches-East York | $89,000 | 108,500 | 27,018 | 26,671 | 2490.1 | 2458.2 | 11.44% |
| 10 | Spadina-Fort York | $89,000 | 135,400 | 21,243 | 19,294 | 1568.9 | 1425.0 | 28.50% |
| 03 | Etobicoke-Lakeshore | $90,000 | 139,920 | 25,874 | 25,277 | 1849.2 | 1806.5 | 14.19% |
| 14 | Toronto-Danforth | $93,000 | 104,555 | 30,476 | 29,898 | 2914.8 | 2859.5 | 13.19% |
| 08 | Eglinton-Lawrence | $97,000 | 114,820 | 24,221 | 23,761 | 2109.5 | 2069.4 | 12.67% |
| 02 | Etobicoke Centre | $100,000 | 117,200 | 21,242 | 20,854 | 1812.5 | 1779.4 | 12.74% |
| 15 | Don Valley West | $102,000 | 101,025 | 19,631 | 19,289 | 1943.2 | 1909.3 | 13.78% |
| 25 | Scarborough-Rouge Park | $105,000 | 101,485 | 19,396 | 19,151 | 1911.2 | 1887.1 | 10.99% |
Units: CAD (median total household income, 2020 income year);
residents; service requests; issues; requests per 10,000 residents; percent.
Source: query income_table, joining sr_raw to
ward_income.
Subgroup analysis. This is not the headline. It covers 15.68% of the file.
The full-ward table in section 2 is dominated by the 84.32% of requests that carry no corner and therefore cannot be deduplicated at all. Those rows pass through both columns unchanged and dilute any movement. This narrower table asks a different question: among requests where deduplication is even possible, does the ranking move?
| Ward | Name | Located requests | Deduplicated issues | Dup rate | Rank, raw | Rank, dedup | Change |
|---|---|---|---|---|---|---|---|
| 06 | York Centre | 5,095 | 2,603 | 48.91% | 2 | 12 | -10 |
| 19 | Beaches-East York | 3,034 | 2,687 | 11.44% | 12 | 9 | +3 |
| 14 | Toronto-Danforth | 4,381 | 3,803 | 13.19% | 3 | 2 | +1 |
| 13 | Toronto Centre | 4,237 | 3,673 | 13.31% | 4 | 3 | +1 |
| 03 | Etobicoke-Lakeshore | 4,206 | 3,609 | 14.19% | 5 | 4 | +1 |
| 11 | University-Rosedale | 4,158 | 3,511 | 15.56% | 6 | 5 | +1 |
| 04 | Parkdale-High Park | 3,676 | 3,222 | 12.35% | 7 | 6 | +1 |
| 08 | Eglinton-Lawrence | 3,632 | 3,172 | 12.67% | 8 | 7 | +1 |
| Ward | Name | Located requests | Deduplicated issues | Dup rate | Rank, raw | Rank, dedup | Change |
|---|---|---|---|---|---|---|---|
| 09 | Davenport | 3,477 | 3,052 | 12.22% | 9 | 8 | +1 |
| 15 | Don Valley West | 2,482 | 2,140 | 13.78% | 15 | 16 | -1 |
| 20 | Scarborough Southwest | 2,475 | 2,186 | 11.68% | 16 | 15 | +1 |
| 22 | Scarborough-Agincourt | 2,189 | 1,770 | 19.14% | 19 | 20 | -1 |
| 16 | Don Valley East | 2,143 | 1,813 | 15.40% | 20 | 19 | +1 |
| 07 | Humber River-Black Creek | 1,814 | 1,553 | 14.39% | 23 | 24 | -1 |
| 18 | Willowdale | 1,804 | 1,599 | 11.36% | 24 | 23 | +1 |
| 10 | Spadina-Fort York | 6,839 | 4,890 | 28.50% | 1 | 1 | 0 |
| 05 | York South-Weston | 3,085 | 2,684 | 13.00% | 10 | 10 | 0 |
| 02 | Etobicoke Centre | 3,045 | 2,657 | 12.74% | 11 | 11 | 0 |
| 12 | Toronto-St. Paul's | 2,956 | 2,595 | 12.21% | 13 | 13 | 0 |
| 21 | Scarborough Centre | 2,781 | 2,291 | 17.62% | 14 | 14 | 0 |
| 01 | Etobicoke North | 2,373 | 2,070 | 12.77% | 17 | 17 | 0 |
| 25 | Scarborough-Rouge Park | 2,229 | 1,984 | 10.99% | 18 | 18 | 0 |
| 17 | Don Valley North | 2,028 | 1,729 | 14.74% | 21 | 21 | 0 |
| 23 | Scarborough North | 1,937 | 1,628 | 15.95% | 22 | 22 | 0 |
| 24 | Scarborough-Guildwood | 1,757 | 1,517 | 13.66% | 25 | 25 | 0 |
Units: requests, issues, percent, rank positions. Source:
query ward_ranking_located_only in
sql/10_evidence.sql, over the
77,833 intersection-located requests.
The −10 on York Centre is one street corner, and that corner is a data artifact.
The confound, named. York Centre's 48.91% duplicate rate and its 10-place drop are produced almost entirely by BATHURST ST & CANYON AVE, a single intersection carrying 1,948 Moving Motor Vehicle Noise reports, 1,929 redundant, 14.4% of all redundancy in the city. Those reports arrive at 43–46 second intervals; 30.1% of the gaps between consecutive reports at that corner fall in the 30–60 second band, against 14.7% for every other noise report in Toronto. That signature appears at exactly two places in all 500,269 rows and both are on Bathurst St. It is one automated submitter, not 1,948 residents. Remove it and York Centre's movement disappears. The evidence is set out in full on the Concentration page.
Every other ward in the subgroup table moves by 3 places or fewer, and 10 of 25 do not move at all. Even in the subset built to favour the mechanism, the effect is modest once the artifact is removed.