🧠 AI with Python – 📊 Reliability Diagrams
Posted on: February 19, 2026
Description:
In many real-world machine learning systems, predicted probabilities are more important than class labels. A model might predict an event with 85% confidence — but does that event actually occur 85% of the time?
Accuracy alone cannot answer this question.
In this project, we explore Reliability Diagrams, an enhanced form of calibration visualisation that helps evaluate how trustworthy predicted probabilities truly are.
Understanding the Problem
Classification models often output probabilities using predict_proba().
However:
- A model can have high accuracy but poor probability estimates.
- Some models are overconfident.
- Others are systematically under-confident.
In domains like healthcare, finance, insurance, and fraud detection, reliable probability estimates are critical for decision-making.
What Is a Reliability Diagram?
A reliability diagram extends a calibration curve by:
- Plotting predicted probability vs observed frequency
- Adding a histogram showing prediction distribution
This gives insight into:
- Calibration quality
- Confidence concentration
- Prediction bias patterns
A perfectly calibrated model lies on the diagonal line.
1. Train a Classification Model
We first train a classifier on structured data.
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(
n_estimators=200,
random_state=42
)
model.fit(X_train, y_train)
2. Generate Predicted Probabilities
We extract probabilities for the positive class.
y_probs = model.predict_proba(X_test)[:, 1]
3. Compute Calibration Data
from sklearn.calibration import calibration_curve
prob_true, prob_pred = calibration_curve(
y_test,
y_probs,
n_bins=10
)
The data is divided into bins, and predicted probability is compared against actual frequency.
4. Plot the Reliability Diagram
plt.plot([0, 1], [0, 1], linestyle="--")
plt.plot(prob_pred, prob_true, marker="o")
Additionally, we visualize the distribution of predictions using a histogram.
How to Interpret the Diagram
- Curve on diagonal → well calibrated
- Below diagonal → overconfident model
- Above diagonal → underconfident model
The histogram reveals whether predictions are concentrated in extreme confidence regions.
Why Reliability Diagrams Matter
Even models with strong ROC-AUC scores can be poorly calibrated.
Reliability diagrams help:
- Validate probability trustworthiness
- Detect systematic bias
- Improve decision thresholds
- Support regulatory compliance
They are essential in probability-driven systems.
Key Takeaways
- Reliability diagrams evaluate probability accuracy.
- Calibration is different from classification accuracy.
- Overconfident models can be risky in production.
- Histograms reveal prediction confidence distribution.
- Essential for high-stakes ML systems.
Conclusion
Reliability diagrams provide a complete view of model probability behavior by combining calibration curves with prediction distribution analysis. They are a critical tool for building trustworthy, interpretable machine learning systems — strengthening the Advanced Visualization & Interpretability module in the AI with Python series.
Code Snippet:
# 📦 Import Required Libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.calibration import calibration_curve
# 🧩 Load Dataset
data = load_breast_cancer()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = data.target
# ✂️ Train/Test Split
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.3,
random_state=42,
stratify=y
)
# 🤖 Train Model
model = RandomForestClassifier(
n_estimators=200,
random_state=42
)
model.fit(X_train, y_train)
# 📊 Generate Predicted Probabilities
y_probs = model.predict_proba(X_test)[:, 1]
# 📈 Compute Calibration Curve
prob_true, prob_pred = calibration_curve(
y_test,
y_probs,
n_bins=10
)
# 📊 Plot Reliability Diagram
fig, ax = plt.subplots(2, 1, figsize=(6, 8))
# Perfect calibration line
ax[0].plot([0, 1], [0, 1], linestyle="--", label="Perfect Calibration")
# Model calibration curve
ax[0].plot(prob_pred, prob_true, marker="o", label="Model")
ax[0].set_xlabel("Predicted Probability")
ax[0].set_ylabel("True Probability")
ax[0].set_title("Reliability Diagram")
ax[0].legend()
# Histogram of prediction distribution
ax[1].hist(y_probs, bins=10, edgecolor="black")
ax[1].set_xlabel("Predicted Probability")
ax[1].set_ylabel("Count")
ax[1].set_title("Prediction Probability Distribution")
plt.tight_layout()
plt.show()
No comments yet. Be the first to comment!