Skip to main content

A Python library for estimating success rates when using LLM judges for evaluation

Project description

judgy

A Python library for estimating success rates when using LLM judges for evaluation.

PyPI version Python 3.8+ License: MIT

Overview

When using Large Language Models (LLMs) as judges to evaluate other models or systems, the judge's own biases and errors can significantly impact the reliability of the evaluation. judgy provides tools to estimate the true success rate of your system by correcting for LLM judge bias, and bootstrapping to generate a confidence interval.

Installation

Basic Installation

pip install judgy

With Plotting Support

pip install judgy[plotting]

Development Installation

git clone https://github.com/ai-evals-course/judgy.git
cd judgy
pip install -e .[dev,plotting]

Quick Start

import numpy as np
from judgy import estimate_success_rate

# Your data: 1 = Pass, 0 = Fail
test_labels = [1, 1, 0, 0, 1, 0, 1, 0]      # Human labels on test set
test_preds = [1, 0, 0, 1, 1, 0, 1, 0]       # LLM judge predictions on test set  
unlabeled_preds = [1, 1, 0, 1, 0, 1, 0, 1]  # LLM judge predictions on unlabeled data

# Estimate true pass rate with 95% confidence interval
theta_hat, lower_bound, upper_bound = estimate_success_rate(
    test_labels=test_labels,
    test_preds=test_preds, 
    unlabeled_preds=unlabeled_preds
)

print(f"Estimated true pass rate: {theta_hat:.3f}")
print(f"95% Confidence interval: [{lower_bound:.3f}, {upper_bound:.3f}]")

How It Works

The library implements a bias correction method based on the following steps:

  1. Judge Accuracy Estimation: Calculate the LLM judge's True Positive Rate (TPR) and True Negative Rate (TNR) using labeled test data
  2. Correction: Apply the correction formula to account for judge bias:
    θ̂ = (p_obs + TNR - 1) / (TPR + TNR - 1)
    
    where p_obs is the observed pass rate from the judge
  3. Bootstrap Confidence Intervals: Use bootstrap resampling to quantify uncertainty in the estimate

API Reference

Core Function

estimate_success_rate(test_labels, test_preds, unlabeled_preds, bootstrap_iterations=20000, confidence_level=0.95)

Estimate true pass rate with bias correction and confidence intervals.

Parameters:

  • test_labels: Array-like of 0/1 values (human labels on test set)
  • test_preds: Array-like of 0/1 values (judge predictions on test set)
  • unlabeled_preds: Array-like of 0/1 values (judge predictions on unlabeled data)
  • bootstrap_iterations: Number of bootstrap iterations (default: 20000)
  • confidence_level: Confidence level between 0 and 1 (default: 0.95)

Returns:

  • theta_hat: Point estimate of true pass rate
  • lower_bound: Lower bound of confidence interval
  • upper_bound: Upper bound of confidence interval

Real-World Usage Pattern

from judgy import estimate_success_rate

# Step 1: Collect human labels on a test set
test_labels = [...]  # Human evaluation: 1 = good, 0 = bad

# Step 2: Get LLM judge predictions on the same test set  
test_preds = [...]   # LLM judge predictions: 1 = good, 0 = bad

# Step 3: Get LLM judge predictions on your unlabeled data
unlabeled_preds = [...]  # LLM judge predictions on data you want to evaluate

# Step 4: Estimate the true pass rate
true_rate, lower, upper = estimate_success_rate(test_labels, test_preds, unlabeled_preds)

print(f"Your system's estimated true success rate: {true_rate:.1%}")
print(f"95% confidence interval: [{lower:.1%}, {upper:.1%}]")

Requirements

  • Python 3.8+
  • numpy >= 1.20.0

Testing

Run the test suite:

pytest tests/

Run with coverage:

pytest tests/ --cov=judgy --cov-report=html

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • The Rogan-Gladen correction method for bias correction in diagnostic tests
  • Bootstrap methodology for confidence interval estimation
  • The Python scientific computing ecosystem (NumPy, matplotlib)

Support

If you encounter any issues or have questions, please:

  1. Check the documentation
  2. Search existing issues
  3. Create a new issue with a minimal reproducible example

Note: This library assumes that your LLM judge performs better than random chance (TPR + TNR > 1). If your judge's accuracy is too low, the correction method may not be applicable.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

judgy-0.1.0.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

judgy-0.1.0-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file judgy-0.1.0.tar.gz.

File metadata

  • Download URL: judgy-0.1.0.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.17

File hashes

Hashes for judgy-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5c0649493f38ba0def34b5cb5859efe96162091b5e476c65bdb33ee8a5a868d8
MD5 98847bf9ef51f8ebb3880c95fa04fa37
BLAKE2b-256 29f63b71eb691926713758d64cefe40b08b20bd7273b71151e0dd6a74a03d316

See more details on using hashes here.

File details

Details for the file judgy-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: judgy-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.17

File hashes

Hashes for judgy-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 16e8acf9d1230614b61f641708f4dfa1979f26124ac8d1b70c49a4d3d1a542f1
MD5 d1d6fc97f35cb72c26792826a931d666
BLAKE2b-256 59b24e9cc2bca6af8cf8e2dedf861e3d308b89d23a80ace03e87d91f18375b90

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page