Observational data cannot tell you which variables to control for. The causal structure
| structure | shape | the correct move |
|---|---|---|
| confounder | `C → T`, `C → Y` | **must** adjust |
| collider | `T → K`, `Y → K` | must **not** adjust |
| mediator | `T → M → Y` | must not, if you want the total effect |
| instrument | `Z → T` | no effect on bias either way |
If a practitioner cannot know the structure, the natural fallback is to let the data choose — add the variable, see if the model improves. It always does:
R² prefers adjusting in all four cases and is right in one. That is exactly the score a rule of "always adjust" would get, so R² carries no information about the choice at all.
Adjusting for the collider raises R² from 0.8003 to 0.9002 — a 12.5% improvement in fit — while moving the estimate 75% away from the truth. Better fit, worse answer, measured on the same data.


Code and full results on GitHub
Every number is read from the file the run produced. github.com/hammasbuilds · kaggle.com/muhammadhammas13