Deletion vs Imputation: How to Choose
Every missing-data problem ends in the same fork: delete the incomplete rows (or columns), or fill the gaps with estimates. Neither is universally right. The choice hangs on three questions — how much is missing, why it's missing, and how much the affected column matters to your analysis.
Quick answer: Delete when missingness is small (under ~5%) and plausibly unrelated to the data (MCAR) — the cost is trivial and the result stays honest. Impute when missingness is moderate (5–40%) and explainable by other observed columns (MAR), using KNN or MICE rather than plain mean fill. When a column is mostly empty or missing for reasons tied to its own value (MNAR), neither trick fixes it — drop the column or model the missingness explicitly.
What three factors should drive the decision?
Missingness percentage, missingness mechanism, and column importance. Percentage sets the stakes: dropping 2% of rows is harmless, dropping 40% is a different study. Mechanism sets what's valid: deletion is unbiased only under MCAR, imputation assumes MAR. Importance sets how much effort is justified: a throwaway feature doesn't deserve MICE, and a key predictor doesn't deserve a lazy mean fill.
- Percentage: measure per column (
df.isna().mean()) and the complete-case fraction across all analysis columns together — small per-column gaps compound, as shown in the listwise deletion math. - Mechanism: reason about the collection process, not just the numbers — the MCAR/MAR/MNAR distinction is explained with examples in MAR vs MCAR vs MNAR.
- Importance: is the column your target, a core predictor, or a nice-to-have?
Is there a simple decision flowchart?
Yes — walk these steps in order and stop at the first rule that fires. It won't cover every edge case, but it lands on a defensible choice for the vast majority of real datasets:
- Is the missing value your target/outcome variable? → Delete those rows. Never impute the thing you're trying to predict or measure.
- Is the value missing because it can't logically exist (spouse age for singles, discount code when none used)? → Neither delete nor impute; encode it as its own category or restructure the analysis.
- Is a single column more than ~50% missing? → Drop the column (keep a missingness indicator if the gap itself might be informative).
- Is total row loss from complete-case analysis under ~5%, with no pattern linking missingness to other variables? → Delete rows (listwise). Cheap, simple, defensible.
- Does missingness correlate with other observed columns (MAR-like)? → Impute with a method that uses those columns: KNN or MICE. See imputation methods compared.
- Do you suspect the value is missing because of its own value (MNAR)? → No standard fix. Run the analysis under multiple assumptions, report the range, and say so plainly.
When is deletion the better choice even if imputation is possible?
When simplicity buys more credibility than the recovered rows buy power. If you have 500,000 rows and lose 3%, imputation adds machinery, assumptions, and code paths for a negligible gain. Deletion is also better when the incomplete rows are suspect for other reasons (bot traffic, test accounts, half-abandoned survey sessions) — those rows are often low quality across the board, and imputing their gaps launders bad records into your sample.
The reverse holds in small datasets: with 300 rows and 15% missingness, every deleted row costs real statistical power, and a proper imputation earns its complexity.
Can I mix deletion and imputation in one dataset?
Yes — and you usually should. The unit of decision is the column, not the dataset. A typical mixed strategy: drop rows missing the target, drop one 70%-empty column, median-fill two minor numeric features with indicators, and MICE-impute the key predictor that's 20% missing. Document each choice separately. The only rule: make these decisions on training data and apply the identical, already-fitted pipeline to test data.
How should I report what I did?
State the numbers, the mechanism assumption, and the method — in one honest paragraph. Readers don't punish missing data; they punish discovering it in a footnote later. A reporting template worth stealing:
Of 12,400 records, salary was missing in 1,860 (15%).
Missingness was associated with department (chi-square p < 0.01),
consistent with MAR; values were imputed with MICE (m = 20)
using age, department, and tenure. Results using complete
cases only (n = 10,540) are shown in Appendix B.
That last sentence is the credibility move: showing your conclusion survives both handling strategies is the strongest evidence the missing data didn't drive the result. If the two versions disagree, that disagreement is the finding — investigate before publishing either. For the full toolbox, see handling missing data.
Pro Tip: Run your analysis both ways — complete cases and imputed — whenever the choice feels close. If the answers agree, report either with the other as a sensitivity check. If they diverge, the missingness mechanism matters more than you assumed, and that's worth understanding before you ship a number.
← Back to Data Analysis Tips