Skip to main content

ROLCH: Regularized Online Learning for Conditional Heteroskedasticity

Open Source Love License: MIT GitHub Release Downloads Tests Docs

Rename

rolch is an acronym for "Regularized Online Learning for Conditional Heteroskedasticity". As distributional regression is more than conditinoal heteroskedasticity, we have decided to rename the package to ondil. This ist the last release under the name rolch. The new package will be available under the name ondil on PyPI and GitHub.

Introduction

This package provides an online estimation of models for distributional regression, respectively, models for conditional heteroskedastic data. The main contribution is an online/incremental implementation of the generalized additive models for location, shape and scale (GAMLSS, see Rigby & Stasinopoulos, 2005) developed in Hirsch, Berrisch & Ziel, 2024.

Please have a look at the documentation or the example notebook.

We're actively working on the package and welcome contributions from the community. Have a look at the Release Notes and the Issue Tracker.

Distributional Regression

The main idea of distributional regression (or regression beyond the mean, multiparameter regression) is that the response variable $Y$ is distributed according to a specified distribution $\mathcal{F}(\theta)$, where $\theta$ is the parameter vector for the distribution. In the Gaussian case, we have $\theta = (\theta_1, \theta_2) = (\mu, \sigma)$. We then specify an individual regression model for all parameters of the distribution of the form

$$g_k(\theta_k) = \eta_k = X_k\beta_k$$

where $g_k(\cdot)$ is a link function, which ensures that the predicted distribution parameters are in a sensible range (we don't want, e.g. negative standard deviations), and $\eta_k$ is the predictor. For the Gaussian case, this would imply that we have two regression equations, one for the mean (location) and one for the standard deviation (scale) parameters. Distributions other than the normal distribution are possible, and we have already implemented them, e.g., Student's $t$-distribution and Johnson's $S_U$ distribution. If you are interested in another distribution, please open an Issue.

This allows us to specify very flexible models that consider the conditional behaviour of the variable's volatility, skewness and tail behaviour. A simple example for electricity markets is wind forecasts, which are skewed depending on the production level - intuitively, there is a higher risk of having lower production if the production level is already high since it cannot go much higher than "full load" and if, the turbines might cut-off. Modelling these conditional probabilistic behaviours is the key strength of distributional regression models.

Example

Basic estimation and updating procedure:

import rolch
import numpy as np
from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True)

# Model coefficients 
equation = {
    0 : "all", # Can also use "intercept" or np.ndarray of integers / booleans
    1 : "all", 
    2 : "all", 
}

# Create the estimator
online_gamlss_lasso = rolch.OnlineGamlss(
    distribution=rolch.DistributionT(),
    method="lasso",
    equation=equation,
    fit_intercept=True,
    ic="bic",
)

# Initial Fit
online_gamlss_lasso.fit(
    X=X[:-11, :], 
    y=y[:-11], 
)
print("Coefficients for the first N-11 observations \n")
print(online_gamlss_lasso.beta)

# Update call
online_gamlss_lasso.update(
    X=X[[-11], :], 
    y=y[[-11]]
)
print("\nCoefficients after update call \n")
print(online_gamlss_lasso.beta)

# Prediction for the last 10 observations
prediction = online_gamlss_lasso.predict(
    X=X[-10:, :]
)

print("\n Predictions for the last 10 observations")
# Location, scale and shape (degrees of freedom)
print(prediction)

Installation & Dependencies

The package is available from pypi - do pip install rolch and enjoy.

ROLCH is designed to have minimal dependencies. We rely on python>=3.10, numpy, numba and scipy in a reasonably up-to-date versions.

Authors

  • Simon Hirsch, University of Duisburg-Essen & Statkraft
  • Jonathan Berrisch, University of Duisburg-Essen
  • Florian Ziel, University of Duisburg-Essen

Acknowledgements & Disclosure

Simon is employed at Statkraft and gratefully acknowledges support received from Statkraft for his PhD studies. This work contains the author's opinion and not necessarily reflects Statkraft's position.

Contributing

We welcome every contribution from the community. Feel free to open an issue if you find bugs or want to propose changes.

We're still in an early phase and welcome feedback, especially on the usability and "look and feel" of the package. Secondly, we're working to port distributions from the R-GAMLSS package and welcome according PRs.

To get started, just create a fork and get going. We will modularize the code over the next versions and increase our testing coverage. We use ruff and black as formatters.

Install from source:

  1. Clone this repo.
  2. Install the necessary dependencies from the requirements.txt using conda create --name <env> --file requirements.txt.
  3. Run python3 -m build to build the wheel.
  4. Run pip install dist/rolch-0.1.0-py3-none-any.whl with the accurate version. If necessary, append --force-reinstall
  5. Enjoy.O

Metadata

Release files for rolch 0.2.5

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

Source distribution (sdist)

Source distribution for rolch 0.2.5
File Size Uploaded Provenance Actions
rolch-0.2.5.tar.gz 46.9 kB Without provenance Details for rolch-0.2.5.tar.gz

Built distribution (wheel)

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

Total release size: 101.4 kB

Release files / rolch-0.2.5.tar.gz

Download URL rolch-0.2.5.tar.gz
Size 46.9 kB
Tags Source
SHA-256 checksum
How to use checksums
484a9a444a3726b79339760a68dd386499d9c2f10ff1c6cd4f9449ddb28ed07b
BLAKE2b-256 checksum
How to use checksums
34fc372df0092a7847293eb95a5c72909480b9f6ad24f7012496e389cf017291
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release files / rolch-0.2.5-py3-none-any.whl

Download URL rolch-0.2.5-py3-none-any.whl
Size 54.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
96fcfa396924b58afe9b4533240238c560b39bb519b3e72c620d0540e03faffe
BLAKE2b-256 checksum
How to use checksums
f4410891b23e8583dbe78941ac3d3dc795db78c0dcd8254f1b8ec7ed0d95e242
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Security for rolch 0.2.5

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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