The problem with two datasets
A recent project of mine called for two things that are easy to build separately and dangerous to build separately: a Power BI dashboard for exploring workforce demographics, and four tuned ML models predicting income bracket from the same population.
The tempting shortcut is two datasets — one imputed and encoded for modeling, one left more human-readable for BI. I deliberately avoided that.
Two datasets drift. A fix applied to one never reaches the other, and by the second refresh cycle, "the data" means two different things depending on who you ask. Six months in, someone's dashboard says one number and someone's model says another, and nobody can explain why without a forensic diff.
So instead, everything here traces back to one governed pipeline (build_master_dataset.py) that produces a single master table — adult_master.csv / .parquet — 48,790 rows, 26 columns, built from the UCI Adult Census Income dataset. Power BI reads the human-readable income_bracket and categorical columns directly. The ML pipeline reads the numeric income_target flag and the same underlying predictors. One source of truth, two consumers.









