R-squared
/ AR-SKWAIRD /
R-squared answers a fair question that raw error scores can't: is my model actually better than the dumbest reasonable guess? The dumbest guess for a number is to ignore the inputs entirely and always predict the average. R-squared measures how much of the variation in the data your model explains beyond that lazy baseline, on a clean 0-to-1 scale.
An R-squared of 0 means your model is no better than always guessing the mean — it has explained nothing. A 1 means it nails every prediction perfectly. A 0.7 means it accounts for about 70 percent of the ups and downs in the data, leaving 30 percent unexplained. Because it's scale-free, you can compare it across different problems and units in a way you never could with MSE or MAE. (Surprisingly, it can even go negative — that means your model is worse than the mean baseline, a real and humbling possibility.)
The honest caveats are important. A high R-squared does not mean your model is correct, causal, or will work on new data — you can inflate it simply by adding more input variables, even useless ones, which is why people use "adjusted R-squared" to penalize that. And a low R-squared isn't always a failure: some phenomena are genuinely noisy, and explaining even 20 percent of, say, stock movements might be valuable. R-squared describes fit, not truth.
A model predicting exam scores from study hours gets R-squared = 0.64. Reading: study hours explain about 64% of why students' scores differ from the class average; the other 36% comes from everything the model doesn't see — sleep, prior knowledge, luck, plain noise.
R-squared = the fraction of the data's variation your model accounts for.
Adding more input variables can only push plain R-squared up, never down — so a rising R-squared is not proof the model improved. Use adjusted R-squared, which docks points for extra variables, and always confirm the fit holds on held-out data, not just the data it was tuned on.