How to draw a precision-recall curve with interpolation in Python Matplotlib?

A precision-recall curve is a fundamental evaluation metric for binary classification models. With interpolation, we create a monotonically decreasing curve that shows the trade-off between precision and recall at different thresholds.

Understanding Precision-Recall Curves

In machine learning, precision measures the accuracy of positive predictions, while recall measures the completeness of positive predictions. The interpolated curve ensures that precision values are monotonically decreasing as recall increases.

Creating Sample Data

First, let's generate sample recall and precision data points ?

import numpy as np
import matplotlib.pyplot as plt

# Set figure parameters
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# Generate sample recall and precision data
recall = np.linspace(0.0, 1.0, num=10)
precision = np.random.rand(10) * (1.0 - recall)

print("Original Precision values:")
print(precision)
Original Precision values:
[0.73796791 0.62352941 0.31372549 0.23529412 0.36274510 0.19607843
 0.09803922 0.05882353 0.01960784 0.        ]

Applying Interpolation

The interpolation ensures that precision values are monotonically decreasing. We modify each precision value to be the maximum of itself and all subsequent values ?

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# Generate sample data
recall = np.linspace(0.0, 1.0, num=10)
precision = np.random.rand(10) * (1.0 - recall)
original_precision = precision.copy()

# Apply interpolation (make precision monotonically decreasing)
i = recall.shape[0] - 2
while i >= 0:
    if precision[i + 1] > precision[i]:
        precision[i] = precision[i + 1]
    i = i - 1

print("After interpolation:")
print(precision)
After interpolation:
[0.73796791 0.62352941 0.31372549 0.36274510 0.36274510 0.19607843
 0.09803922 0.05882353 0.01960784 0.        ]

Plotting the Precision-Recall Curve

Now we'll create the visualization showing both the original and interpolated curves ?

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [8.00, 5.00]
plt.rcParams["figure.autolayout"] = True

# Generate sample data
recall = np.linspace(0.0, 1.0, num=10)
precision = np.random.rand(10) * (1.0 - recall)
original_precision = precision.copy()

# Apply interpolation
i = recall.shape[0] - 2
while i >= 0:
    if precision[i + 1] > precision[i]:
        precision[i] = precision[i + 1]
    i = i - 1

# Create the plot
fig, ax = plt.subplots()

# Draw the interpolated step curve
for i in range(recall.shape[0] - 1):
    # Vertical line
    ax.plot((recall[i], recall[i]), (precision[i], precision[i + 1]), 'k-', color='red')
    # Horizontal line
    ax.plot((recall[i], recall[i + 1]), (precision[i + 1], precision[i + 1]), 'k-', color='red')

# Plot original precision values
ax.plot(recall, original_precision, 'k--', color='blue', label='Original Precision')

# Add labels and legend
ax.set_xlabel('Recall')
ax.set_ylabel('Precision')
ax.set_title('Precision-Recall Curve with Interpolation')
ax.legend(['Interpolated Curve', 'Original Precision'])
ax.grid(True, alpha=0.3)

plt.show()
[Plot showing precision-recall curve with red step-wise interpolated curve and blue dashed line for original values]

Key Points

  • The red step curve shows the interpolated precision-recall relationship

  • The blue dashed line represents the original precision values

  • Interpolation ensures precision decreases monotonically with increasing recall

  • This visualization helps evaluate model performance across different thresholds

Conclusion

Interpolated precision-recall curves provide a clear visualization of classifier performance by ensuring monotonic precision decrease. This technique is essential for comparing different models and selecting optimal decision thresholds in machine learning applications.

Updated on: 2026-03-26T19:09:41+05:30

929 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements