vc_015 · Mixed-type numeric column (currency as STRING)

Status: ✓ Passing · Last run: 2026-06-04T23:43:41 · Pipeline: v2 · History: 3/3 runs passed (100%)

What was tested

Real-world failure mode: customer revenue data loaded from CSV with values stored as STRING in a mix of formats — "$1,200.00", "950", "1.5k", blanks. The column LOOKS numeric to a human but BQ has it typed as STRING. Tests how the v2 pipeline handles type-mismatched features. Any of these is acceptable behavior: 1. Coerce/clean the STRING values and use revenue as a real feature (best case — signal is recovered) 2. Drop the column at the signal gate (acceptable — model loses the planted signal but the pipeline ran cleanly) 3. Halt with a clear "revenue is STRING but looks numeric" issue (also acceptable — surfaces the data quality issue) Failing behaviors the case rejects: - Treat as a categorical and explode into N one-hot columns - Crash with a "STRING can't be averaged" error in feature_materialize - Silently produce a model with no warning AND no signal recovery

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
feature_count_below final feature count = 10 (≤ 30)
no_pipeline_errors clean run
pipeline_halted_with halted with text containing 'near random': '[ml_sanity] CV AUC = 0.456 is near random — features may not be predictive'

How this could have gone wrong

Why this case matters

Currency / amount columns stored as STRING is one of the top three data-quality issues we see in customer uploads (along with dup entity keys and high-null demographics). The pipeline must degrade gracefully — either parse it, drop it, or surface a clear data-quality warning. Catastrophic failure (exploding the feature space or crashing on AVG) is a customer-visible bug.

Reproducing

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

← back to validation report