Ottawa Residential Market Opportunity

Statistical methodology, geographic construction, validation and decision rationale

Author

Gabriel Martinez Guzman

Published

October 11, 2026

TECHNICAL METHODOLOGY · ANONYMIZED PORTFOLIO EDITION · OCTOBER 2026
NoteWhat this document does and does not establish

This is a documented, preference-based geographic market-screening method, not a statistically fitted demand model. It explains how candidate advertising territories were constructed from the 2021 Census, which analytical choices were made, why they were made, how results were checked, and what uncertainty remains. No historical advertising enquiries, signed contracts, customer response or revenue were used to estimate or validate the weights.

0.1 Methodology at a glance

The central problem was to select practical locations in which an early-stage Ottawa residential landscaping business could test limited advertising expenditure. Housing suitability, neighbourhood-level household income and operational proximity are observable screening inputs; actual demand is not. The analysis therefore uses an explicit multi-criteria index to rank possible places for a pilot, rather than predicting customers or sales.

As such, a future phase could model weekly enquiries with Poisson or negative-binomial regression, model conversions with binomial/logistic methods, and estimate uncertainty in contract value or gross contribution. It could also evaluate whether the original index predicts enquiries per advertising dollar better than a simpler housing-only or distance-only baseline.

315Ottawa–Gatineau CMA tracts initially considered
218tracts meeting Ottawa area-overlap rule
217tracts with final index inputs
1,391linked dissemination areas assessed
31whole tracts assigned to seven territories
Step Analytical question Resulting decision
1. Define scope Which statistical units count as Ottawa? Area-based city overlap; preserve whole CT values
2. Explore data Which variables represent relevant business considerations? Housing types, median household income, and distance
3. Encode preferences What types of homes should count more heavily? Management-selected relative dwelling weights
4. Compare criteria How to combine housing and income without mixing their units? Percentile transformation and approved 80/20 index
5. Improve spatial precision Where is housing within very large CT polygons? Official DA–CT linkage and finer-grained housing counts
6. Apply operating priorities How does distance change attractiveness? Housing-weighted DA accessibility factor
7. Build usable territories How to turn CT ranks into coherent marketing areas? Explore top-40 adjacency, then document seven connected territories
8. Validate assumptions Would geographic imprecision materially alter scores? Quality flags and four-tract geometric sensitivity analysis
9. Make a decision Which territory merits a first advertising test? Alta Vista / Elmvale, with Chapel Hill as an alternative

The distinction between decisions and estimates is fundamental: the selected weights reflect business priorities communicated during the project. The Census supplies the measured covariates; it does not supply the relative desirability of detached versus row houses, the proper housing/income trade-off, or the cost of working farther away.

1 Research question, scope and unit of analysis

1.1 The decision problem

The management question was: Where should the company concentrate a limited residential advertising budget, considering the kind of housing it can serve, local income conditions, and travel practicality?.

A useful formalization is to construct a score \(M_i^{\mathrm{adj}}\) for each eligible Ottawa census tract \(i\), where larger values reflect stronger agreement with the chosen business preferences. Adjacent tracts are then combined into candidate advertising territories and assessed on multiple summary measures.

1.2 Why census tracts and dissemination areas serve different roles

A census tract (CT) is the unit on which the initial housing–income index is constructed and the building block for final marketing territories. A dissemination area (DA) is a smaller 2021 Census geography used to approximate where the housing stock lies within a CT for distance calculations. The final colour-coded territories are unions of complete CTs.

For notation, let \(i\in\mathcal U\) index the \(N=217\) eligible tracts, and \(j\in\mathcal D(i)\) denote a DA linked to tract \(i\). The 1,391 linked DAs cover the 217 eligible CTs; some DA housing observations are missing. These units are not a probability sample of Ottawa residents: the analysis ranks a defined collection of published census geographies, subject to the geographic inclusion rule and data availability.

2 Data sources and geographic construction

2.1 Source datasets and identifiers

The source pipeline used the following 2021 Statistics Canada products and an Ottawa neighbourhood boundary service:

Source Project use Important technical detail
Census Profile: CMAs / tracts (98-401-X2021007) Tract dwelling counts, median household income and exploratory indicators Match unique 2021 DGUID and characteristic ID
Census Profile: Ontario dissemination areas (98-401-X2021006) DA-level occupied dwellings and dwelling-type counts Very large flat file; targeted row extraction
2021 CT boundary file CT geographic polygons Transform to projected metric CRS before distance/area operations
2021 Census subdivision boundary file City of Ottawa polygon City census-subdivision identifier 3506008
2021 DA boundary file DA geometry and representative-point distances Ontario DA polygons linked using DGUID
2021 Dissemination Geographies Relationship File (2021_98260004.csv) Authoritative DA-to-CT membership Contains repeated DAs at dissemination-block level; deduplicate
Ottawa Neighbourhood Study boundaries Human-readable area context Spatial-area overlays, not household allocations

The pipeline used NAD83 / UTM zone 18N (EPSG:26918) for area and distance calculations. This matters because buffering or computing areas directly in latitude–longitude degrees is not an appropriate substitute for metric geometry in this workflow.

NoteData vintage and public citation

These are 2021 Census geographic definitions and estimates, not an October 2026 snapshot of current Ottawa housing or income. However, as new data from the 2026 Census becomes available throughout 2027, we can update the scores and review our recommendations. Source links and catalogue references appear at the end of the document.

2.2 Step 1: Select tracts substantially inside Ottawa

The tract Profile was initially restricted to the 2021 Ottawa–Gatineau CMA tract set (315 CT identifiers in the recorded run). Each tract polygon \(G_i\) was intersected with the official City of Ottawa boundary \(O\). The overlap percentage was

\[ r_i=100\times\frac{\operatorname{Area}(G_i\cap O)}{\operatorname{Area}(G_i)}. \]

The selection criterion was \(r_i\geq50\%\). This was a pragmatic inclusion rule: it avoids treating every tract that barely touches the city as fully relevant, while keeping complete published CT observations. The intersection/area operation yielded 218 selected tracts. One of these lacked the complete housing/income inputs needed for ranking, leaving 217 eligible tracts.

Please note that this threshold is not a design-based statistical estimator. If a qualifying CT extends outside Ottawa, its entire published CT count still contributes to its score. This is a deliberate geographic approximation, not an assertion that all housing counted lies within the city.

2.3 Step 2: Attach readable neighbourhood names

CTs were overlaid with Ottawa Neighbourhood Study polygons. For each intersection the pipeline calculated the proportion of CT polygon area overlapping an ONS neighbourhood. Overlaps of at least 5% of CT area were retained as descriptive location context. These labels help nontechnical readers orient themselves, but they do not mean that the stated fraction of residents or dwellings is located in that neighbourhood. Named candidate territories were subsequently defined with explicit CT membership, not by taking all tracts with a certain place name.

3 Exploratory variable assessment and model scope

3.1 Variables examined before choosing the final index

The exploratory stage considered housing types, owner-occupancy rates, bedroom/room indicators, median dwelling value, median household income, recent construction and growth. The purpose was to test which variables added distinct decision-relevant information and to avoid indiscriminately stacking correlated indicators in a composite score.

For example, owner occupancy and ground-oriented dwelling share can be related; median dwelling value and median household income can be related; bedrooms and number of rooms can also move together. Including all of them without a substantive argument could count the same underlying characteristic more than once. The script recorded exploratory Pearson and Spearman correlations between selected pairs. These served as descriptive dependency checks, not coefficient selection through a fitted predictive model.

The adopted index uses dwelling counts by structural type and median household income. Business geography enters separately through the accessibility multiplier.

4 Constructing the housing-suitability score

4.1 Step 3: Translate management’s dwelling preferences into numerical weights

For CT \(i\) define the published number of occupied dwellings of each selected structural type:

  • \(D_i\): single-detached houses;
  • \(S_i\): semi-detached houses;
  • \(R_i\): row houses.

The project documented a management preference for detached homes over semi-detached homes, and for semi-detached homes over row houses. The initial, ultimately retained relative weights were 1, 0.5, and \(1/6\), respectively. The resulting housing measure is

\[ \boxed{H_i=D_i+0.5S_i+\frac{1}{6}R_i.} \]

The coefficients are preference multipliers by management. In this rubric, two semi-detached homes or six row homes contribute the same score as one detached home. This is an accounting convention to encode service preferences by management and not evidence that a semi-detached home has half the expected revenue or that one in six row houses will buy landscaping.

Worked example (illustrative; not an observed tract). Suppose a CT contains 200 detached houses, 60 semi-detached houses and 120 row houses. Then

\[H=200+0.5(60)+\tfrac16(120)=200+30+20=250.\]

The result 250 is weighted housing units, not 250 likely customers. It simply assigns priority to different kinds of dwellings according to the chosen scale.

4.2 Why use counts rather than percentages?

The decision is to identify areas with enough potentially relevant homes to justify advertising. A high fraction of detached houses in a tiny tract can represent fewer absolute opportunities than a moderate fraction in a much larger tract. A weighted count addresses the volume question; using a share alone would not. The trade-off is that physically larger tracts can look attractive even when their homes are far from the business; that drawback motivates the later DA-based geographic adjustment.

4.3 Alternative dwelling-weight scenarios

Before retaining the original dwelling coefficients, the project examined variants (for the exploratory set that passed the early 70/70 screen):

Scenario Detached Semi-detached Row Rationale
Management baseline 1.00 0.50 0.1667 Explicitly favours detached projects
Moderate preference 1.00 0.75 0.35 Less sharply discounts other ground-oriented types
Equal preference 1.00 1.00 1.00 Tests a no-preference counterfactual

Ranks and top-ten overlap were compared across these specifications; the documented working policy remained the baseline. The alternative scenarios were robustness exercises.

5 Combining housing and household income

5.1 Step 4: Why add income at all?

Suitable dwelling inventory answers how many relevant homes exist under the chosen housing preferences. Median household income contributes a distinct (though imperfect) area-level purchasing-power context. A wealthy tract with few suitable homes, or a tract with many suitable homes but weaker income characteristics, illustrates why the two objectives can compete.

The analysis inspected the relationship directly. Across the eligible tracts, the recorded Spearman correlation between weighted housing and tract median household income was approximately 0.629. This is positive but not perfect agreement.

The income measure is the published median household income for a CT.

5.2 Step 5: Resolve incompatible measurement scales

Raw \(H_i\) is in preference-weighted dwelling units; median household income \(I_i\) is in Canadian dollars. Simply calculating \(0.8H_i+0.2I_i\) would have no defensible interpretation, because adding differently scaled quantities makes the result arbitrary and unit-dependent.

Instead, the script used dplyr::percent_rank() to transform each input into a relative position across the same 217 eligible CTs:

\[ p(H_i)=\frac{\operatorname{rank}_{\min}(H_i)-1}{N-1},\quad p(I_i)=\frac{\operatorname{rank}_{\min}(I_i)-1}{N-1},\quad N=217. \]

Here \(\operatorname{rank}_{\min}\) assigns the smallest rank to tied values, consistent with the implementation of percent_rank() for nonmissing observations. The smallest observed value receives 0, the largest normally receives 1, and ties may produce shared percentiles. The calculation was made on a fixed set of 217 complete-case tracts, rather than recomputing percentiles after applying a travel restriction.

This standardization makes the two characteristics numerically comparable as relative ranks, not economically interchangeable. For example, a one-percentile-point increase in housing is not the same physical change in every part of the distribution; large differences in house counts may be compressed while small differences may affect ordering.

5.3 Step 6: Adopt an explicitly preference-weighted index

The scenario analysis compared the following housing/income weighting schemes:

Scenario Housing Income Meaning
Housing only 100% 0% Ranking without income information
Housing dominant 90% 10% Small role for income context
Adopted 80% 20% Management-approved compromise
More balanced 70% 30% Greater role for income
Even split 50% 50% Treat both transformed ranks equally

The adopted score for tract \(i\) was

\[ \boxed{M_i=100\left[0.80\,p(H_i)+0.20\,p(I_i)\right].} \]

The 80/20 allocation was a business decision after comparing alternatives, not a result of fitting conversion data, optimizing an objective against revenue, or estimating statistical significance. Housing received four times the index weight of income because the business prioritized a sizeable pool of housing relevant to its services while still wishing to acknowledge purchasing-power context.

Interpretation of 80/20: if \(p(H_i)\) rises by 0.01 while \(p(I_i)\) is fixed, \(M_i\) rises by 0.8 index points; an equivalent 0.01 rise in income percentile raises it by 0.2 points. It does not mean 80% of actual demand is attributable to housing or 20% of profit to income.

Worked example (illustrative). Suppose \(p(H_i)=0.80\) and \(p(I_i)=0.60\) for a particular tract. The baseline score is

\[M_i=100[0.8(0.80)+0.2(0.60)]=100(0.76)=76.\]

The value 76/100 represents the tract’s ranking under a chosen rubric—not a 76% likelihood of an advertising enquiry or a statistically estimated probability.

5.4 What the weight-sensitivity analysis established

The adopted 80/20 ranking and a pure housing-only ranking had a recorded Spearman rank correlation of approximately 0.986; seven of the housing-only top ten tracts remained in the 80/20 top ten. Thus, the two complete CT rankings were highly similar, while the top few positions could still change. The high correlation shows the index is empirically insensitive to adding a modest income weight in overall rank order.

The report deliberately records both global similarity (Spearman’s coefficient) and top-of-list stability (top-ten overlap), because a very high overall rank correlation can coexist with consequential changes among a small number of pilot candidates.

6 Measuring geographic accessibility

6.1 Step 7: Why CT centroids proved insufficient

The housing and income index treats all relevant homes in a CT as if they shared the tract’s overall opportunity score. That is reasonable as a preliminary tract ranking but problematic for distance to the operating region. Some Ottawa-edge CTs are geographically large and elongated, with residences clustered in only part of the polygon. A centroid or a single distance assigned to the whole tract can therefore attribute too much accessibility to housing physically concentrated farther away.

A diagnostic example was CT 5050126.04. Its polygon crossed several candidate service-distance thresholds; the initial ranking suggested a promising market, but the spatial pattern of housing did not support treating the entire tract as nearby. In the documented refined calculation, it contained eight linked DAs and had an accessibility multiplier of approximately 0.3695. This means the tract received about 36.95% of its base score under the chosen distance policy.

Methodological response: retain the CT for housing/income ranking, but calculate its operational accessibility from finer DA-level housing data before adjusting the CT score.

6.3 Step 9: Extract DA dwelling counts without loading the entire file

The Ontario DA Census Profile source was approximately 8.18 GB in the recorded workflow. Loading it whole into an R session was unnecessary. The analysis used the companion geographic starting-row index, whose row offsets identify the records for a given DA, and extracted only the four required residential indicators with a single awk pass. It then pivoted the records to one row per DA and cached the compact result.

The characteristic IDs used in the source code were:

Profile characteristic ID Extracted variable Role
41 Total occupied private dwellings Housing-count reconciliation
42 Single-detached dwellings \(D_j\)
43 Semi-detached dwellings \(S_j\)
44 Row-house dwellings \(R_j\)
243 (CT Profile) Median total household income \(I_i\) at CT level

Implementation caution: direct physical-row offsets into large CSV products depend on the specific downloaded release and accompanying index. The script verifies the expected IDs, deduplicated DA records and a recorded sentinel observation. This shortcut is not a general guarantee that future releases have the same row layout.

For DA \(j\), the same dwelling-preference weights give

\[H_j=D_j+0.5S_j+\tfrac16R_j.\]

6.4 Step 10: Define and apply the management-selected distance policy

The distance reference was an approximate operating-region point, not a claim about the actual address of each job site. The original pipeline used a nearby public landmark to define this analytical origin; exact geocoding details and operating-location information are intentionally omitted from the public methodology.

Each DA polygon was represented by a point on its surface (sf::st_point_on_surface()) rather than treating the full DA as a point or assuming the polygon centroid was necessarily interior. Straight-line distance \(d_j\) in kilometres was then computed from the reference using geometries projected to EPSG:26918.

The business preference was for nearby projects, with distance increasingly penalized in 3 km bands, and no proactive advertising priority beyond 24 km:

Straight-line DA representative-point distance \(w(d_j)\)
\(0\le d_j\le3\) km 1.00
\(3<d_j\le6\) km 0.95
\(6<d_j\le9\) km 0.85
\(9<d_j\le12\) km 0.70
\(12<d_j\le15\) km 0.55
\(15<d_j\le18\) km 0.40
\(18<d_j\le21\) km 0.25
\(21<d_j\le24\) km 0.10
\(d_j>24\) km 0.00

These are management-chosen operational penalties. The shape is piecewise constant: a small movement across a band threshold can change the assigned weight discontinuously. A 24 km score of 0.10 and a 24.1 km score of zero illustrate a policy cutoff, not a physical discontinuity in demand. Actual road distances, traffic, travel time with equipment, job scheduling and crew cost are not measured here.

6.5 Step 11: Aggregate DA accessibility to a tract multiplier

For tract \(i\), define the accessibility-weighted share of DA housing opportunity as

\[ \boxed{ A_i=\frac{\sum_{j\in\mathcal D(i)}H_j\,w(d_j)} {\sum_{j\in\mathcal D(i)}H_j} }\qquad (\text{complete DA housing data and positive denominator}). \]

This is a weighted average of DA accessibility weights, where a DA with more preferred dwelling stock contributes more than one with little. If all relevant DA housing falls in a weight-1 band, \(A_i=1\); if all falls beyond the 24 km policy cutoff, \(A_i=0\). In standard complete cases \(0\le A_i\le1\).

Finally, the tract’s distance-adjusted opportunity index is

\[ \boxed{M_i^{\mathrm{adj}}=M_i A_i.} \]

This multiplicative choice applies the accessibility policy to the entire housing–income index, not just the housing component. It expresses the business judgment that even a tract with attractive housing and income context is lower priority if it is operationally distant. The formula is a decision rule; alternative ways to integrate distance could produce different rankings and warrant assessment if priorities change.

End-to-end worked example (illustrative). Continue the hypothetical CT with \(M_i=76\). Assume it contains two DAs with housing weights \(H_1=100\) and \(H_2=150\). Their representative points have accessibility weights \(w(d_1)=1.00\) and \(w(d_2)=0.70\).

\[ A_i=\frac{100(1.00)+150(0.70)}{100+150} =\frac{205}{250}=0.82. \]

The adjusted opportunity score becomes

\[M_i^{\mathrm{adj}}=76(0.82)=62.32.\]

6.6 Spatial limitations of this approximation

A DA representative point is not a known dwelling location. Houses may cluster at one end of a DA, DA polygons can cross distance bands, and some DAs may contain substantial nonresidential land. The calculation is more spatially specific than a whole-CT representative-point assumption but still cannot locate individual households. It also assumes that the structural dwelling mix published at DA level is an adequate substitute for the distribution of potential landscaping work; this has not been verified with job addresses.

7 Data quality, missingness and diagnostic flags

7.1 Step 12: Reconcile CT and DA housing indicators

The CT-level \(H_i\) and the sum of its linked DA-level \(H_j\) values originate from published counts at different geographic aggregation levels. Because of Census publication practices, rounding, possible missing or suppressed observations, and extraction/aggregation differences, they need not match exactly.

For each CT, the pipeline calculated

\[\Delta_i=\sum_{j\in\mathcal D(i)} H_j-H_i\]

and, when \(H_i>0\) and all DA counts were complete,

\[\delta_i=100\,\frac{\Delta_i}{H_i}. \]

The recorded data-quality run reported a median absolute discrepancy of approximately 0.474% among complete CTs, with four complete CTs exceeding 5% in relative difference. This does not prove that all discrepancies came solely from random rounding. The script also checked whether ground-oriented occupied-dwelling counts exceeded the total occupied dwellings and whether reconstructed shares were consistent with published percentage fields.

There were two DAs with unavailable housing scores in the recorded analysis. They were not converted to zero. For a CT with unresolved DA counts, the standard \(A_i\) is left undefined rather than quietly using a downward-biased denominator. One exception is logically possible under the stated policy: if every constituent DA polygon lies entirely beyond the 24 km circle and CT housing is positive, the accessibility factor can be set to zero independent of how the missing dwellings are distributed inside those DAs. This was used for a Richmond tract, 5050151.08. That zero is a statement about the advertising-distance policy, not about actual market demand.

7.2 Step 13: Identify geographic ambiguity at distance-band boundaries

For each DA polygon, the pipeline tested intersection with the 3, 6, …, 24 km radial boundaries. A DA was labelled boundary-uncertain if any of these lines intersected its polygon. Let \(b_j=1\) for such a DA and 0 otherwise. For CT \(i\), the share of its weighted housing in boundary-uncertain DAs is

\[ U_i=\frac{\sum_{j\in\mathcal D(i)}H_jb_j}{\sum_{j\in\mathcal D(i)}H_j}, \]

when the complete-case denominator is available.

The actual needs_review flag was broader than boundary crossing alone. A CT was flagged if any of the following applied:

  1. At least one linked DA had missing weighted housing data;
  2. The CT accessibility factor was unresolved;
  3. The absolute CT-vs-DA housing-score discrepancy exceeded the greater of 20 weighted housing units or 5% of the CT’s weighted housing score;
  4. The uncertain DA housing share met or exceeded 30% (\(U_i\ge0.30\)).

The flag was conservatively treated as true if a necessary diagnostic could not be resolved. The recorded original run identified 93 CTs requiring review, but the exact citywide total is tied to that run and should be regenerated if source data or flag rules change.

This clarifies a point that matters when reading the executive comparison: “areas needing geographic review” counts CTs satisfying these diagnostic criteria. It is by no means a confidence interval. In the leading territories, detailed geometric score ranges were calculated for four selected CTs; not every flagged tract received that extra calculation.

7.3 A careful interpretation of “housing retained”

For a proposed territory \(T\), the source code computed

\[ \text{Housing retained}_T =100\times \frac{\sum_{i\in T}\sum_{j\in\mathcal D(i)}H_j w(d_j)} {\sum_{i\in T}H_i}. \]

Technical detail: the numerator uses DA-level housing scores after accessibility discount, while the denominator uses published CT-level housing scores. The measure is a convenient indicator of how much of the original tract-level weighted inventory remains after the DA-distance transformation, but a small part of the percentage can also reflect CT–DA reconciliation differences. It should therefore not be read as an exact fraction of physically accessible houses, nor as the output of a pure distance-only retention experiment with perfectly identical denominators.

This nuance does not prevent the metric from being useful for relative screening, but it belongs in the methodology rather than being omitted for the sake of a simpler narrative.

8 Building the final candidate advertising territories

8.1 Step 14: Re-rank tracts after accessibility adjustment

After estimating \(M_i\) and \(A_i\), the pipeline computed \(M_i^{\mathrm{adj}}=M_i A_i\) and ranked all CTs with a defined adjusted score in descending order. The ranking used min_rank(desc(adjusted_market_score)); tied scores share the same minimum rank. The published map and top-20 checks are based on this adjusted ranking, not simply the housing-only or unadjusted 80/20 ranking.

This stage exposed a structural problem with using unadjusted CT scores as a direct advertising list: a large, income-favourable tract might score highly even if its relevant housing is concentrated beyond the preferred operating distance. The DA aggregation corrected for this under the policy’s assumptions. Conversely, lower unadjusted scores could remain competitive when housing is comparatively near the operating region.

8.2 Step 15: Explore geographic connectivity among the top 40

A ranked list is not the same as a usable marketing area. CTs ranked near each other may be separated by substantial travel distances, and advertising platforms may not accept arbitrary individual CTs as selectable units. To move from ranked units to an operational plan, the project first took the 40 highest-ranked adjusted CTs as an exploratory candidate set.

It used sf::st_relate(..., pattern = 'F***1****') to define a CT adjacency matrix based on shared one-dimensional boundary segments (rather than merely touching at one corner). With CTs as graph vertices and shared-boundary relations as undirected edges, the connected components were calculated using igraph. This exploratory top-40 exercise produced 11 components in the recorded run.

Why not use the 11 components as final areas? The connected-components calculation enforces a geometric property, not marketing practicality. A component may be too fragmented for an affordable campaign, awkwardly shaped, inconsistent with readable local place descriptions, or too broad given operational capacity. Connectivity is necessary for the chosen contiguous-territory presentation but not sufficient for an economically good ad region.

8.3 Step 16: Assemble and verify seven management-facing territories

The final step was a manual, documented grouping of 31 distinct CTs from the exploratory top-40 candidate set into seven territories. Each territory’s composition was stored as an explicit list of CT identifiers. Checks confirmed (i) no CT was assigned to two territories, (ii) each identifier belonged to the candidate set, and (iii) each proposed territory formed one connected component under the same shared-boundary relation.

It is important not to overstate this step. The workflow did not solve a formal integer-programming or revenue-maximization problem to determine seven globally optimal zones. The seven territories are practical, reproducible candidate groupings, informed by the tract ranking, neighbourhood geography and business decision context. Their number and boundaries could change following advertising-platform constraints, driving-time analysis or updated service priorities.

Figure 1: Seven proposed, geographically connected marketing territories across Ottawa. Coloured polygons are complete census tracts.

Geographic disclosure: the small plotted reference symbol indicates an approximate analytical origin used by the original model; it is not a public contact or job-site address. The geographic image should be reviewed for operational sensitivity before wide distribution. The polygons are candidate territories, not confirmed Google Ads targeting units.

8.4 Step 17: Summarize territories without inventing territory-level statistics

The summary results answer several different questions:

  • Number of CTs: how many geographically connected tract units were assembled.
  • Median adjusted CT score: the median \(M_i^{\mathrm{adj}}\) among CTs in the territory. This is the typical member-tract score, not a separately computed territory-wide index.
  • Accessible weighted housing: \(\sum_{i\in T}\sum_{j\in\mathcal D(i)}H_jw(d_j)\), interpreted as a relative distance-adjusted inventory score, not leads or counts of clients.
  • Housing retained: the mixed DA-adjusted/CT-total percentage defined in the prior section.
  • Review flags: number of member CTs meeting at least one data/geographic diagnostic.
  • Tract income range: minimum and maximum of member CTs’ published median incomes; not a pooled household median for the entire territory.

A median of member CT scores should not be compared to a sum of accessible housing as though the two columns measured the same concept. The first describes typical index quality of the CTs; the second describes aggregate accessible inventory under the weighting rules. The choice of first advertising territory therefore requires a business trade-off, not just picking the highest number in whichever column looks most impressive.

Frozen October 2026 territory results, ordered by median adjusted tract score.
Candidate territory CTs Median adjusted CT score Accessible housing score Housing retained CTs for review
Chapel Hill 4 67.2 4,667 87.4% 2
Alta Vista / Elmvale 5 60.8 5,617 92.6% 2
Beacon Hill / Rothwell 4 55.4 3,867 92.8% 1
Old Ottawa corridor 3 53.8 2,704 85.5% 1
Pineview / Riverview 4 53.3 3,765 94.9% 3
Orleans / Queenswood 5 52.3 4,813 77.3% 2
Portobello / Fallingbrook 6 47.2 4,793 66.4% 3

A key contrast is that Alta Vista / Elmvale had the largest accessible housing score (5,617) of the seven territories, approximately 20% more than Chapel Hill (4,667), whereas Chapel Hill had the higher median adjusted member-tract score (67.2 versus 60.8). These values are based on the agreed model and cannot themselves tell us which area will generate the greatest number of customers or highest project value.

9 Targeted geometric sensitivity analysis

9.1 Step 18: Distinguish flagged uncertainty from inferential uncertainty

The DA representative-point approximation assigns one distance weight to each DA’s aggregated housing stock. For a DA that straddles a 3 km boundary, a different placement of houses inside the polygon could legitimately change the assigned distance weight. The project addressed this with a geometric bounds exercise for four CTs belonging to Alta Vista / Elmvale and Chapel Hill.

For each DA \(j\), define:

\[ d_j^{\min}=\min_{x\in G_j}\operatorname{dist}(x,o), \qquad d_j^{\max}=\max_{x\in G_j}\operatorname{dist}(x,o), \]

where \(G_j\) is the DA polygon and \(o\) is the fixed operating reference. In the source implementation, \(d_j^{\min}\) came from the point-to-polygon distance and \(d_j^{\max}\) from maximum vertex-to-origin distance in the metric projection.

Since the policy weight \(w(d)\) does not increase with distance, the extreme applicable weights are

\[w_j^{\mathrm{low}}=w(d_j^{\max}),\qquad w_j^{\mathrm{high}}=w(d_j^{\min}).\]

Then the complete-case tract multipliers and scores satisfy the constructed geometric bracketing:

\[ A_i^{\mathrm{low}}=\frac{\sum_jH_jw_j^{\mathrm{low}}}{\sum_jH_j}, \quad A_i^{\mathrm{current}}=\frac{\sum_jH_jw(d_j)}{\sum_jH_j}, \quad A_i^{\mathrm{high}}=\frac{\sum_jH_jw_j^{\mathrm{high}}}{\sum_jH_j}, \]

\[ M_i A_i^{\mathrm{low}}\;\le\; M_i A_i^{\mathrm{current}}\;\le\; M_i A_i^{\mathrm{high}}. \]

9.2 Observed priority-tract sensitivity results

Geometric sensitivity scenarios for four priority CTs. Low/high are extreme possible geographic scores, not inferential intervals.
Territory CT identifier Current rank DA housing in sensitive polygons Low Current High
Alta Vista / Elmvale 5050006.00 1 41.3% 80.2 82.8 83.8
Alta Vista / Elmvale 5050005.00 11 58.2% 59.8 60.8 63.9
Chapel Hill 5050125.04 3 91.1% 72.1 78.1 79.8
Chapel Hill 5050125.11 15 100.0% 46.3 56.2 61.6

The first Alta Vista / Elmvale tract, 5050006.00, had an observed adjusted score of 82.8 with geometric bounds 80.2–83.8, a comparatively narrow range. By contrast, Chapel Hill tract 5050125.11 had a current score 56.2 and a wider range 46.3–61.6. Both remain possible markets to test, but the second score is more sensitive to where housing may lie within the underlying DAs. This distinction helps explain why a flag should trigger interpretation and follow-up, not automatic exclusion.

The “DA housing in sensitive polygons” percentages describe housing represented by DAs whose distance weight could change under geometric extremes.They are not percentages of incorrect data.

10 Business interpretation and final recommendation

10.1 Why Alta Vista / Elmvale was prioritized

The final recommendation was to start with a limited advertising pilot in Alta Vista / Elmvale, while retaining Chapel Hill as a credible alternative and Beacon Hill / Rothwell as a contingency candidate. The reasoning combined the final territory results with management’s priorities.

If management changes the services offered, minimum job size, travel preferences or advertising budget, the scoring and pilot decision should be revisited.

10.2 How this analysis should be used

The most defensible next step is a small, explicitly bounded pilot with actual measurement of ad spend, source/location of enquiries, qualified leads, quotations, signed contracts, project revenue, direct costs and travel practicality. A pilot tests the operational consequences of the screening recommendation. Until then, the model has not been validated against observed customer response.

As previously mentioned, the next phase of this project could model weekly callbacks using a Poisson or a negative binomial regression model, at the discretion of management.

10.3 Selected implementation details

Open: core transformations reflected in the original R pipeline
# Tract geographic selection (metric projection)
ct_area <- as.numeric(sf::st_area(ct_geometry))
ottawa_overlap <- as.numeric(sf::st_area(
  sf::st_intersection(ct_geometry, city_geometry)))
keep_ct <- (100 * ottawa_overlap / ct_area) >= 50

# Dwelling preferences
H_ct <- detached_ct + 0.5 * semi_ct + row_ct / 6

# Two standardized criteria; same eligible CT set
pH <- dplyr::percent_rank(H_ct)
pI <- dplyr::percent_rank(median_household_income_ct)
M <- 100 * (0.8 * pH + 0.2 * pI)

# DA-level policy weight, then tract-level weighted mean
w_da <- distance_weight(da_representative_point_km)
A_ct <- sum(H_da * w_da) / sum(H_da)  # complete positive cases only
M_adjusted <- M * A_ct

# Review rule (schematic; evaluated per CT)
needs_review <- missing_da_count > 0 |
  is.na(A_ct) |
  abs(sum_H_da - H_ct) > max(20, 0.05 * H_ct) |
  uncertain_H_da_share >= 0.30
Illustrative transcription, not a self-contained executable script

10.4 Reproduction checks that matter

The recorded pipeline checked, among other things, for the expected numbers of selected CTs and linked DAs, uniqueness of DGUID joins, consistent Census characteristic IDs, missing DA values, plausible 0–1 accessibility multipliers, zero eligibility for a tract whose whole DA geometry was beyond 24 km, and one connected component per territory. It also preserved tract-level comparison files and targeted geographic sensitivity results.

10.5 Principal limitations and threats to validity

Issue Implication for interpretation Useful future improvement
2021 housing and income vintage Current development and purchasing-power patterns may differ Refresh when newer compatible statistics exist
Income is a tract aggregate Cannot infer individual homeowner income or propensity to buy Observe leads, quotes, job types and actual customer characteristics
Preferences were selected, not fitted Score ranks depend on managerial assumptions Sensitivity analysis and eventual outcome-based recalibration
Rank percentiles remove magnitude A 5-point percentile shift has no fixed equivalent in dollars or homes Examine raw inputs alongside index ranks
DA point approximation Spatial within-DA housing distribution is unknown Address-level non-sensitive aggregates or better building-location proxies
Straight-line distances and steps Do not represent driving time or actual travel cost Road-network travel-time estimation; continuous penalties
CT inclusion by 50% polygon overlap Whole CT Census counts may include areas outside Ottawa Test boundary choices; use supported small-area allocation if justified
CT/DA count reconciliation DA and CT aggregates are not perfectly identical Maintain explicit reconciliation and robustness checks
Manual territorial delineation Seven areas are practical candidates, not a globally optimal partition Explicit optimization constraints and platform-aware feasibility
No advertising outcomes No inference about response, conversions, revenue or lift Run prospective tracking, then validation or a powered experiment

10.6 Appendix: explicitly assigned tract membership

The seven proposed territories comprise the following 31 complete CTs, using the short tract identifiers stored in the original analysis. This is the audit trail for the displayed geographic groups; it is not a statement that these CTs are equivalent to official named neighbourhoods.

Candidate territory CT identifiers in the frozen manual assignment
Alta Vista / Elmvale 5050006.00, 5050005.00, 5050007.03, 5050008.00, 5050009.00
Pineview / Riverview 5050011.01, 5050122.02, 5050001.05, 5050001.08
Old Ottawa corridor 5050016.00, 5050017.00, 5050019.00
Chapel Hill 5050125.10, 5050125.04, 5050125.11, 5050125.07
Orleans / Queenswood 5050125.05, 5050125.08, 5050170.03, 5050170.04, 5050170.05
Portobello / Fallingbrook 5050171.12, 5050171.11, 5050171.07, 5050171.05, 5050170.09, 5050170.13
Beacon Hill / Rothwell 5050124.03, 5050120.03, 5050120.02, 5050121.01

10.7 References and documentation

NotePublication and confidentiality

This is an anonymized account of an applied business decision-support project. The operating reference and client-identifying information have been excluded from the text.