Skip to main content

The PyCFRL package implements algorithms to ensure counterfactual fairness in reinforcement learning and provides tools for evaluating the value and counterfactual fairness of reinforcement learning policies.

Project description

PyCFRL: A Python Library for Counterfactually Fair Reinforcement Learning

PyPI version PyPI total downloads PyPI monthly downloads PyPI weekly downloads License

Documentation: PyCFRL Documentation.

Software paper: PyCFRL: A Python library for counterfactually fair offline reinforcement learning via sequential data preprocessing.

Note: This library was originally named CFRL, but we later changed the name to PyCFRL.

Installation

$ pip install pycfrl

A Brief Introduction to Counterfactual Fairness

Counterfactual fairness is one variation of fairness metrics. However, unlike well-known group fairness metrics such as demographic parity and equal opportunity, counterfactual fairness defines fairness based on causal reasoning and enforces it at the individual level. In short, a reinforcement learning policy is counterfactually fair if, at every time step, it would assign the same decisions with the same probabilities for an individual had the individual belong to a different subgroup defined by some sensitive attribute (such as race and gender). At its core, counterfactual fairness views the observed states and rewards as biased proxies of the (unobserved) true underlying states and rewards, where the bias is often a result of the observed sensitive attribute. Thus, to ensure counterfactual fairness, we want the policy to be based on the true underlying states and rewards rather than their biased proxies.

We refer interested readers to Kusner et al. (2017) for a detailed discussion of counterfactual fairness in the single-stage predictions setting, and to Wang et al. (2025) for a detailed discussion of counterfactual fairness in the reinforcement learning setting.

Key Functionalities

PyCFRL is designed with two main functionalities:

  1. Provide algorithms that enforce counterfactual fairness for reinforcement learning policies. The current version of PyCFRL implements the sequential data preprocessing algorithm proposed by Wang et al. (2025) for offline reinforcement learning. The algorithm takes in an offline RL trajectory and outputs a preprocessed, bias-free trajectory. The preprocessed trajectory can then be passed to any existing offline reinforcement learning algorithms for training, and the learned policy should be approximately counterfactually fair.

  2. Provide a platform to evaluate RL policies based on counterfactual fairness. After passing in their policy and a trajectory dataset from the target environment, users can assess how well their policies perform in the target environment in terms of the discounted cumulative reward and counterfactual fairness metric.

High-level Design

Module Functionalities
reader Implements functions that read tabular trajectory data from either a .csv file or a pandas.Dataframe into a format required by PyCFRL. Also implements functions that export trajectory data to either a .csv file or a pandas.Dataframe.
preprocessor Implements the data preprocessing algorithm introduced in Wang et al. (2025).
agents Implements a fitted Q-iteration (FQI) algorithm, which learns RL policies and makes decisions based on the learned policy. Users can also pass a preprocessor to the FQI; in this case, the FQI will be able to take in unpreprocessed trajectories and directly output counterfactually fair policies.
environment Implements a synthetic environment that produces synthetic data as well as a simulated environment that simulates the transition dynamics of the environment underlying some real-world RL trajectory data. Also implements functions for sampling trajectories from the synthetic and simulated environments.
evaluation Implements functions that evaluate the value and counterfactual fairness of a trained policy. Depending on the user's needs, the evaluation can be done either in a synthetic environment or in a simulated environment.

Workflow Chart

A general PyCFRL workflow is as follows: First, simulate a trajectory using environment or read in a trajectory using reader. Then, train a preprocessor using preprocessor to remove the bias in the trajectory data. After that, pass the preprocessed trajectory into the FQI algorithm in agents to learn a counterfactually fair policy. Finally, use functions in evaluation to evaluate the value and counterfactual fairness of the trained policy. See ... for more detailed workflow examples.

Examples

We provide a few short code examples showcasing some key use cases of PyCFRL.

1. Trajectory Preprocessing Only: See here.

2. Preprocessing + Policy Learning: See here.

3. Assessing Preprocessors using Synthetic Data: See here.

4. Assessing Policies using Real Data: See here.

Testing

We provide unit tests as well as integration tests for the main functions of the PyCFRL. The tests can be found in the tests folder of the PyCFRL repository. To run the test, first install pytest:

$ pip install pytest

Then run

$ python -m pytest

Note that this library relies heavily on machine learning and deep learning methods such as neural networks. The outputs from these methods are not exactly predictable because of the stochasticity involved. Therefore, most of the tests focus on testing the shape and data type of the outputs rather than the value of the outputs.

Note: Currently, the 'lm' model type is not supported. Thus, pytest will skip the test cases that involve the 'lm' model type.

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

pycfrl-0.3.2.tar.gz (2.6 MB view details)

Uploaded Source

Built Distribution

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

pycfrl-0.3.2-py3-none-any.whl (52.0 kB view details)

Uploaded Python 3

File details

Details for the file pycfrl-0.3.2.tar.gz.

File metadata

  • Download URL: pycfrl-0.3.2.tar.gz
  • Upload date:
  • Size: 2.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.8

File hashes

Hashes for pycfrl-0.3.2.tar.gz
Algorithm Hash digest
SHA256 7204e15e3c4e4dbe2d3cdeab06ead86524c8db2e6b3a763238ec05354e480a35
MD5 a3babfbf20e39542a7f49a5a0ecdc6cf
BLAKE2b-256 eba33fa8d69e7b07b015972e54b946bf66b5e873f6115809a05fe29e1362b74c

See more details on using hashes here.

File details

Details for the file pycfrl-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: pycfrl-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 52.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.8

File hashes

Hashes for pycfrl-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6178e07836230d0a72c97b8f177dad722ae67354f98b91efceb4f3fe9c2c68fe
MD5 c01dad8ccf75000c8a7029167260e738
BLAKE2b-256 1a67d94c41245c75d724d4f3f8b864b7f7f783db0d9275c14e86d7c69cf92a01

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