Skip to main content

Roll Rate Analysis

deploy on pypi PyPI Version Downloads

Roll rate analysis is a credit-risk technique used to define the target variable when building Application or Behavioural scorecards. It's an iterative process — this package parametrises the moving parts so each iteration is a few lines of code rather than a fresh notebook.

The library has zero pandas dependency: inputs and outputs are Polars frames.

Installation

From PyPI:

uv add roll-rate-analysis        # uv projects
pip install roll-rate-analysis   # plain pip

Requires Python 3.10 or newer.

What's in the box

Two classes, one method each:

Class Use case
MOMRollRateTable Transition matrix between two consecutive months.
SnapshotRollRateTable Transition matrix between an observation window and a performance window around a snapshot month.

Both expose compute() (full transition matrix) and reduce() (roll_down / stable / roll_up summary). Both return polars DataFrames whose first column (from_state) holds the row label.

Quick start

from roll_rate_analysis import MOMRollRateTable

table = MOMRollRateTable(
    "data/jan.csv",
    "data/feb.csv",
    unique_key_col="id",
    delinquency_col="delq",
    max_delq=6,
)

table.compute()    # polars.DataFrame, full transition matrix
table.reduce()     # polars.DataFrame, roll_down / stable / roll_up percentages

In-memory polars frames work too:

import polars as pl
from roll_rate_analysis import SnapshotRollRateTable

snap = pl.read_csv("data/snap.csv")
obs = [pl.scan_csv(p) for p in ["data/obs1.csv", "data/obs2.csv"]]
perf = [pl.scan_csv(p) for p in ["data/perf1.csv", "data/perf2.csv"]]

table = SnapshotRollRateTable(
    snap, obs, perf,
    unique_key_col="id",
    delinquency_col="delq",
    detailed=True,
    granularity=2,
)
table.compute()

See the notebooks under examples/ for end-to-end walkthroughs.

Development

This project uses uv. Clone and bootstrap with:

git clone https://github.com/alexliap/roll_rate_analysis.git
cd roll_rate_analysis
uv sync --dev

Run the test suite, linter, and formatter:

uv run pytest
uv run ruff check .
uv run ruff format .

Pre-commit hooks (ruff + standard checks) keep the tree clean:

uv run pre-commit install
uv run pre-commit run --all-files

License

MIT — see LICENSE.

Release files for roll-rate-analysis 0.2.0

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

Source distribution (sdist)

Source distribution for roll-rate-analysis 0.2.0
File Size Uploaded
roll_rate_analysis-0.2.0.tar.gz 20.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for roll-rate-analysis 0.2.0
File Interpreter ABI Platform
roll_rate_analysis-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.6 MB

Release files / roll_rate_analysis-0.2.0.tar.gz

Download URL roll_rate_analysis-0.2.0.tar.gz
Size 20.6 MB
Tags Source
SHA-256 checksum
How to use checksums
635a84bb6eca4fe6b7ff6730e6c5b8ac531bb7391bf3eecfcf19626fdf138521
BLAKE2b-256 checksum
How to use checksums
efe6532a00ffc4e2253c4861f3529500a90f7200a25db075b1b7fc3059e86ebe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 11, 2026.

Transparency log

Release files / roll_rate_analysis-0.2.0-py3-none-any.whl

Download URL roll_rate_analysis-0.2.0-py3-none-any.whl
Size 11.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
92bf9be08dae3706d4b6a65f4283546ae9995ccabc6c72d3ca163280ef335beb
BLAKE2b-256 checksum
How to use checksums
6cd98a5afd76a306f90ac5ac9d55c8836b3096b5e472b78046e92d116a09bd5a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.7

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.1

1 release file

0.1.0

1 release file

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