vc_016 · High-NULL demographic column

Status: ✓ Passing · Last run: 2026-06-04T23:45:15 · Pipeline: v2 · History: 2/2 runs passed (100%)

What was tested

Entity-static dataset where one demographic column (insurance_type) is ~50% NULL — typical for customer data where many users decline to provide certain fields. The clean planted driver (usage_score) is still present; the test is whether the pipeline handles the NULL-heavy column gracefully. Acceptable behaviors: 1. Drop insurance_type at signal-gate (signal-to-noise too low with 50% missing — usage_score still wins on signal recovery) 2. Keep it but encode NULL as its own category — model should still discover usage_score as the primary driver Rejected behaviors: - Crash on NULLs during feature materialization - Allow a NULL-flag feature to dominate importance (would mean 50%-of-rows-NULL accidentally correlates with target by chance, which a working signal-gate should filter)

What we planted in the data

What the system did

Top features by importance:

What we checked — all assertions passed

Status Assertion Detail
row_count_eq_n_entities training rows = 2000, expected = 2000
planted_feature_in_top_k_importance derivative(s) of usage_score in top 3: ['usage_score_raw', 'usage_score_zscore_by_insurance', 'usage_score_centered_by_insurance']
auc_in_band AUC = 0.925 inside band [0.70, 0.95]
no_pipeline_errors clean run

How this could have gone wrong

Why this case matters

Demographics columns at high NULL rates are universal in customer data — phone_carrier, referral_source, secondary_email all routinely have 40-70% missing. The pipeline must degrade gracefully: ideally drop or impute, never crash, never let NULL-derived noise outrank real signal.

Reproducing

# from auto_insight_api/
python -m validation.v2 run vc_016 --pipeline v2 -v

← back to validation report