Skip to content

Unknown-column warning hides removed model inputs behind raw source columns (ten-name cap) #609

Open

Description

@MaxGhenis

Follow-up to #530 / #531 (the aggregated unknown-column warning), found while removing two inputs from policyengine-us (PolicyEngine/policyengine-us#9605).

Problem

The warning names only the first ten unknown columns, sorted, plus a count. On a dataset that also carries raw source columns, those ten slots are taken by names that were never model variables, so a column for a removed model input is never named.

Measured 2026-09-25 by loading the certified US default dataset (populace_us_2024.h5@populace-us-2024-spm-20260909, sha256 6496cc43…) through policyengine_us.Microsimulation on the #9605 branch with policyengine-core 3.32.7. The single warning was:

The dataset contains 191 column(s) that do not match any variable in the tax-benefit system and were ignored: ACTC_CRD, AGI, ANN_VAL, A_AGE, A_ENRLW, A_EXPRRP, A_FAMREL, A_FAMTYP, A_FNLWGT, A_FTPT, … (181 more)

That branch deletes first_home_mortgage_interest and second_home_mortgage_interest, and the dataset carries both, but neither appears: uppercase survey columns sort first. The warning fires on this file whether or not a model input was removed, so it carries no signal there. On a dataset with no raw source columns it works as intended (policyengine-us test tests/microsimulation/data/test_removed_mortgage_interest_inputs.py asserts both names appear).

Options

  1. Removed-input registry (preferred). Let a tax-benefit system declare removed or renamed inputs (name → replacement or guidance). At dataset load, emit a separate warning naming every dataset column that matches the registry, independent of the ten-name cap. This is the only option that tells a user what to do.
  2. Full list at a lower level. Keep the capped WARNING and also log the complete sorted list at INFO or DEBUG.
  3. Ordering. List snake_case names (the model's convention) before other names, so removed inputs outrank raw survey columns. Cheap, but a heuristic.

Acceptance

  • A test that builds a dataset with more than ten unknown columns, one of them a registered removed input, and asserts the warning output names that input and its guidance.
  • The existing Warn when a dataset carries columns that match no variable #531 tests still pass (known columns load unchanged; clean datasets stay quiet).

The data-side counterpart (certified files not shipping raw source columns or stale inputs) is tracked in PolicyEngine/microcosm#673.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions