Roll Rate Analysis
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)
| File | Size | Uploaded | |
|---|---|---|---|
| roll_rate_analysis-0.2.0.tar.gz | 20.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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