Skip to content
Research Atlas

Regression & Prediction · Lesson 6 of 7

Interpreting and Communicating Models

~13 min

The Concept

Your streamflow model is built, validated, and ready for the policymaker. She asks three questions in sequence: 'How accurate is it?' You say CV R² = 0.81. 'What does that mean in metres of water?' You're momentarily stumped. 'And what could make it wrong?' Now you're genuinely unsure what to say.

A model isn't fully ready for use until you can answer all three questions, and in units the decision-maker understands.

Communicating a model means three things: translating abstract metrics (R², RMSE) into plain-language descriptions of predictive accuracy; showing the actual predictions with honest uncertainty bands; and explaining the model's known limitations and the conditions under which it might fail.

Root mean square error (RMSE, the typical size of a model's mistakes, measured in the same units as what it is predicting) is often more interpretable than R² because it's in the same units as the response. 'Our model predicts streamflow to within ±0.8 m³/s on average' means more to a flood engineer than 'R² = 0.81'.

The Analogy

Telling a policymaker 'R² = 0.81' is like telling someone their exam score is in the 81st percentile, technically informative, but abstract. Telling them 'RMSE = 0.8 m³/s' is like telling them 'you'll usually miss the answer by about this much', in the exact units they actually care about.

The Math (optional)

RMSE summarises prediction error in the original measurement units.

Root Mean Square Error

RMSE=1ni=1n(yiy^i)2RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2}

For each observation, square the error (actual minus predicted), average them, then take the square root. RMSE is in the same units as y, making it directly interpretable.

Code (optional)

model_communication.pypython
import numpy as np
from sklearn.metrics import mean_squared_error

y_actual = np.load("bluewater_streamflow_test.npy")
y_pred   = np.load("bluewater_streamflow_pred.npy")

rmse = np.sqrt(mean_squared_error(y_actual, y_pred))
mae  = np.mean(np.abs(y_actual - y_pred))

print(f"RMSE: {rmse:.3f} m³/s  (typical prediction error)")
print(f"MAE:  {mae:.3f} m³/s   (average absolute error)")
print(f"Mean flow: {y_actual.mean():.2f} m³/s")
print(f"Relative RMSE: {100*rmse/y_actual.mean():.1f}%")

Line by line

  • RMSE penalises large errors more than small ones because of the squaring, it's sensitive to occasional large misses.
  • MAE treats all errors equally, less sensitive to extreme outliers.
  • Relative RMSE (% of mean) contextualises the error: a 0.8 m³/s error means something different if mean flow is 1.0 or 100 m³/s.

Why Real Researchers Care

RMSE and MAE appear in virtually every hydrological model evaluation in published literature. The Nash-Sutcliffe Efficiency (NSE = 1 − MSE/Var(y)), equivalent to R² for predictions vs observations, is the standard skill score for streamflow models. NSE > 0.65 is generally considered 'good' for Bluewater Basin-scale watersheds.

Quick Check

Q1. Your model has R² = 0.78 and RMSE = 4.2 m³/s. Mean streamflow is 2.1 m³/s. What does this tell you about the practical usefulness of the model?

Your Goal

Write a three-sentence model summary for a policymaker about the Bluewater streamflow regression model: one sentence on accuracy (in m³/s), one on what drives predictions, and one on the main limitation.

Hint: Use RMSE or MAE for accuracy, the top predictor coefficient for interpretation, and the cross-validation gap for the limitation.

Teach It Back

Explain why RMSE is often more useful than R² for communicating model performance to a decision-maker who isn't a statistician.

Previous lesson