Skip to main content
Methodology · v1.0 · 2026-05-09

How the activity score is computed

Five inputs. Five weights. Reproducible. Auditable.

v1.0 is editorial expert-derived. Here’s why that’s honest.

The Wild Pest is a young company commercially. We do not yet have the n ≥ 1,000 BC service-record sample size needed to publish a pure quantitative activity report. Pretending otherwise would violate our methodology—and our brand pillars.

v1.0 of this report is therefore an editorial activity index: a deterministic score computed from the curated, publicly-available content we’ve already shipped on this site — 100 hand-written pest×neighbourhood records, 32 area pages with seasonal and housing-stock detail, and 28 species pages with risk and treatment specifics. Each cell’s score is a transparent weighted sum of five signals. Anyone can rebuild it with their own weights, using the open-source code in this repo.

v2.0 (projected Q1 2027 post-Cairo-launch consolidation) will substitute live service-record aggregations for the documented-presence + severity signals. The page URL, the Dataset JSON-LD schema, and the download endpoints will stay identical so external citations don’t break.

The five signals

Each signal is bounded [0, 1]. The cell’s raw score is the weighted sum, then normalised per pest across all 32 areas so the highest-activity area for each species reads exactly 100.

  1. Documented presence— binary 0/1. Does a pest×neighbourhood record exist in our curated dataset? These records are field-team-authored expert content; their presence is itself a meaningful activity signal.
  2. Severity signal— 0 to 1, derived from language-density inside the pest×neighbourhood record. A curated list of high-band tokens (highest, most common, peak activity, every block, callout volume, ...) and mid-band tokens (frequent, active, year-round, ...) is checked against the record’s prose and FAQ answers. Hits accumulate capped at 1.
  3. Housing match— 0 to 1, a curated affinity map between pest type and the area’s housing-stock prose. Carpenter ant activity, for instance, scores high when the area description contains pre-1960, cedar, or mature canopy; bed-bug activity scores high against multi-unit, rental, or mid-rise stock.
  4. Climate match— 0 to 1, hits of pest-keyword tokens against the area’s seasonal notes. If a neighbourhood’s seasonal activity summary already names the species, that’s a activity signal.
  5. Common-pest listing— binary 0/1. Does the area’s commonPestslist include the service category for this pest? This is the field team’s explicit signal that the species is one of the area’s top-5 callout drivers.

Default weights

SignalWeight
documented_presence0.35
severity_signal0.25
housing_match0.15
climate_match0.15
common_pest_listing0.10
Total1.00

Documented presence carries the heaviest weight (0.35) because it gates the most credible signal — field-team-authored content. Severity signal (0.25) and housing/climate matches (0.15 each) round out the score. Common-pest listing is a binary corroborator at 0.10.

Sample-size honesty rules

Every cell is tagged with one of three bands:

  • documented— a curated pest×neighbourhood record exists. The score is grounded in field-team observation.
  • inferred— no record exists, but housing-stock, climate, or common-pest signals are strong enough to publish a non-zero score.
  • insufficient— no signal at all. These cells render as a dash on the heatmap and are excluded from per-pest top-5 lists.

What this report is not

  • Nota quantitative incidence claim. v1.0 is editorial. We’ll switch to quantitative in v2.0 when the service-record sample clears n ≥ 1,000.
  • Nota substitute for an on-site inspection. Activity scores are aggregate area signals; your specific property may differ wildly from your neighbourhood’s average.
  • Not intended for legal, insurance, or regulatory use without independent verification.

Reproducing the report

The full pipeline is:

  1. src/lib/pest-neighbourhood.ts— 100 pest×neighbourhood records
  2. src/lib/location-content.ts— 32 areas with housing + seasonal data
  3. src/lib/pest-library.ts— 28 species with risk + seasonality
  4. src/lib/pest-activity-report.ts— the scoring engine (5 signals, 5 weights)
  5. Run the unit tests: pnpm exec vitest run pest-activity-report
  6. Inspect the JSON output: /api/pest-activity-report/2026.json

Citation format

The Wild Pest. (2026). 2026 Metro Vancouver Pest Activity Report (v1.0). Creative Commons Attribution 4.0. https://thewildpest.com/pest-activity-report/2026