Skip to main content

forestci: confidence intervals for Forest algorithms

Python package Documentation status

Forest algorithms are powerful ensemble methods for classification and regression. However, predictions from these algorithms do contain some amount of error. Prediction variability can illustrate how influential the training set is for producing the observed random forest predictions.

forest-confidence-interval is a Python module that adds a calculation of variance and computes confidence intervals to the basic functionality implemented in scikit-learn random forest regression or classification objects. The core functions calculate an in-bag and error bars for random forest objects.

Version 0.9 supports scikit-learn 1.0 through 1.9, including the signature changes introduced in scikit-learn 1.9.

This module is based on R code from Stefan Wager (randomForestCI deprecated in favor of grf) and is licensed under the MIT open source license (see LICENSE). The present project makes the algorithm compatible with scikit-learn.

To get the proper confidence interval, you need to use a large number of trees (estimators). The calibration routine (which can be included or excluded on top of the algorithm) tries to extrapolate the results for an infinite number of trees, but it is instable and it can cause numerical errors: if this is the case, the suggestion is to exclude it with calibrate=False and test increasing the number of trees in the model to reach convergence.

Installation and Usage

Before installing the module you will need numpy, scipy and scikit-learn.

To install forest-confidence-interval, run:

python -m pip install forestci

To install the development version from GitHub, use:

python -m pip install git+https://github.com/scikit-learn-contrib/forest-confidence-interval.git

Usage:

import forestci as fci
ci = fci.random_forest_error(
  forest=model, # scikit-learn Forest model fitted on X_train
  X_train_shape=X_train.shape,
  X_test=X, # the samples you want to compute the CI
  inbag=None,
  calibrate=True,
  memory_constrained=False,
  memory_limit=None,
  y_output=0 # in case of multioutput model, consider target 0
)

Examples

The examples (gallery below) demonstrate the package functionality with random forest classifiers and regression models. The regression examples use a bundled copy of the UCI Auto MPG dataset, while the classifier example simulates how to add measurements of uncertainty to tasks like predicting spam emails. Keeping the regression data in the repository makes documentation builds reproducible without relying on an external data service.

Examples gallery

Rebuilding and publishing the documentation

Documentation builds run only when manually requested, not on pushes or pull requests. In GitHub, open Actions → Documentation build → Run workflow, select the desired branch under Use workflow from, and click Run workflow. For a pull request, select its source branch in this repository, not master; the build checks out and publishes that selected branch. Because every branch publishes to the same website, a new run cancels any previous unfinished run. The workflow must be present on the default branch for GitHub to offer this button. See GitHub's manual workflow instructions.

Each run installs the documentation dependencies, refits the benchmark models, regenerates the calibration table and the 2,000-estimator confidence-width versus observed-error plots, and executes every Python gallery example. Generated tables and images are build outputs, not checked-in inputs; even local incremental builds rerun the generators and gallery scripts. The legacy paper/ folder is not part of this workflow.

Every selected branch publishes to the same documentation website. To preview a PR before merging, run the action on its source branch and follow the deployment link on the completed run. This temporarily replaces the public documentation; it does not create a separate preview URL or merge the PR. To restore the documentation from master, start a new run with master selected and wait for deployment to finish. The last successfully deployed version stays online while a build runs or if it fails. The downloadable github-pages artifact is also available under Artifacts on each run. Python package tests still run automatically as before.

Repository setup: GitHub Pages must use GitHub Actions as its source, and Settings → Environments → github-pages → Deployment branches and tags must allow the branches you want to publish (choose No restriction to permit any selected branch). A master-only environment rule prevents PR branches from deploying even when the workflow itself allows them.

To build locally from the repository root:

python -m pip install -e ".[docs]"
MPLBACKEND=Agg make -C docs html

Open docs/_build/html/index.html after the build. California Housing is fetched on the first run (internet access required); scikit-learn may cache the raw input dataset. Models, tables and plots are always recomputed. Allow several minutes and several GiB of memory: a complete build took about 3 minutes 38 seconds on a four-core Intel MacBook Pro. The calibration benchmark alone previously peaked near 3 GiB. GitHub runner timings may differ. Failures in a generator or gallery example fail the build instead of publishing incomplete results.

Contributing

Contributions are very welcome, but we ask that contributors abide by the contributor covenant.

To report issues with the software, please post to the issue log Bug reports are also appreciated, please add them to the issue log after verifying that the issue does not already exist. Comments on existing issues are also welcome.

Please submit improvements as pull requests against the repo after verifying that the existing tests pass and any new code is well covered by unit tests. Please write code that complies with the Python style guide, PEP8.

E-mail Ariel Rokem, Kivan Polimis, or Bryna Hazelton if you have any questions, suggestions or feedback.

Testing

The project uses a pyproject.toml build configuration and a src/ package layout. Runtime, test, documentation, and development dependencies are declared as project dependency groups, while tests live in the top-level tests/ directory.

For a complete development environment, install the editable package and its development dependencies:

python -m pip install -e ".[dev]"
python -m pytest

To test only against the scikit-learn version already installed in the current environment, install the test runner and then install forestci without resolving dependencies:

python -m pip install pytest==9.0.3
python -m pip install --no-deps -e .
python -m pytest

The GitHub Actions test matrix selects the newest bugfix release from every scikit-learn minor series from 1.0 through 1.9. Scikit-learn 1.0–1.2 are tested on Python 3.10 because those releases do not provide Python 3.12 wheels; all newer series are tested on Python 3.12. A rolling scikit-learn<2.0 job also tests the latest available 1.x release.

Citation

Click on the JOSS status badge for the Journal of Open Source Software article on this project. The BibTeX citation for the JOSS article is below:

@article{polimisconfidence,
  title={Confidence Intervals for Random Forests in Python},
  author={Polimis, Kivan and Rokem, Ariel and Hazelton, Bryna},
  journal={Journal of Open Source Software},
  volume={2},
  number={1},
  year={2017}
}

Metadata

Release files for forestci 0.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for forestci 0.9
File Size Uploaded
forestci-0.9.tar.gz 23.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for forestci 0.9
File Interpreter ABI Platform
forestci-0.9-py3-none-any.whl Python 3 none any Details

Total release size: 37.6 kB

Release files / forestci-0.9.tar.gz

Download URL forestci-0.9.tar.gz
Size 23.7 kB
Tags Source
SHA-256 checksum
How to use checksums
175397148b9f7ddfb02a9b82fb9d0e0039fd292d149d5add16140c6a4111580c
BLAKE2b-256 checksum
How to use checksums
980ace6a392e974e8e88b91b34b91ed64adde60820c056c383e5e6c717fea595
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / forestci-0.9-py3-none-any.whl

Download URL forestci-0.9-py3-none-any.whl
Size 14.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d2f5f02fff6b3c6fc7eca88d6c415ced1c5d8ca32b1c0a0af4ae877d2efeaf35
BLAKE2b-256 checksum
How to use checksums
f1516e32f7f41dcdbe1dd8d4f6995de28efe9c8f9997cc5a28155b9a20c1fc91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

0.9 This release

2 release files

0.8

2 release files

0.7

1 release file

0.6

2 release files

0.5.1

2 release files

0.5

2 release files

0.4.1

2 release files

0.4

2 release files

0.3

3 release files

0.2

3 release files

0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page