Skip to content

Measure DINS-to-FRAP incident join coverage, each join key a judgment call #60

Description

@ChelseaKR

What

The two datasets describe the same fires from different sides, and neither says how well they meet. This adds a third measurement page, join.html: for each DINS incident, whether a FRAP perimeter record exists for it, and for each FRAP record in the DINS era, whether any inspection records exist. The join is attempted on three keys in turn, each published separately and never merged: IRWIN ID where both carry one; CAL FIRE incident number with year and unit; normalized fire name with year. Counts are published per key: matched, unmatched, and ambiguous (one DINS incident matching several perimeters), with the DINS records and acres each bucket represents.

Why it matters

"Which burned structures have a mapped perimeter" is coverage in the project's own sense, and the answer depends on a join key nobody has audited, so the key is treated the way markers are: three readings, each counted, each with its evidence and cost in docs/MARKERS.md. Name joins are the weakest and the most tempting, and publishing them beside identifier joins shows what they are worth. No record is corrected, no fire is renamed, no rate is drawn per agency. The sibling wildfire-service-territory-overlap met the same naming problem joining a county's records (ADR 0018) and refused rather than guessed; this makes the refusal quantitative.

Scope

  • src/perimeter/join.py: per-key match tables; ambiguity counted, never resolved; the DINS era boundary stated from the earliest incident start date in the file.
  • Artifact site/data/join-coverage.json with is_fixture, per-key {matched, unmatched, ambiguous} in both directions, and a key_basis per key in the style of marker_basis.
  • Page with the three-state key, WCAG gates, and prose-number tracing; a docs/MARKERS.md section for the join keys.
  • Fixtures extended with a shared IRWIN id, a shared incident number, and a name-only near miss.

Out of scope

  • Spatial joins (the sibling's lane) and any "best" key.
  • Damage or loss totals per perimeter.

Done when

  • Fixtures yield the hand-computed match counts per key, with the near miss unmatched under exact name and ambiguous under normalized name.
  • A DINS incident with no start date is counted in its own cohort, not dropped.
  • Zero matches on a key prints "none matched" in words and 0 in the artifact with its denominator.

Pointers

  • src/perimeter/perimeters.py (duplicate-signal keys irwin_id, year_unit_incident_number, year_name_acres), dins.py, schema.py (INCIDENTNUM, INCIDENTNAME, INCIDENTSTARTDATE)
  • docs/MARKERS.md, docs/adr/0003-published-versus-inferred-marker-basis.md

Proposed with AI assistance.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestfeatureMajor new capability proposal

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions