Skip to main content

pyGAM

Generalized Additive Models in Python.

:rocket: Version 0.12.0 out now! See release notes here.

pyGAM is a package for building Generalized Additive Models in Python, with an emphasis on modularity and performance.

The API is designed for users of scikit-learn or scipy.

Documentation · Tutorials · Medium article
Open Source Apache 2.0 GC.OS Sponsored
Community !discord !slack
CI/CD github-actions readthedocs
Code !pypi !conda !python-versions !black
Downloads PyPI - Downloads PyPI - Downloads Downloads
Citation !zenodo

Documentation

Installation

pip install pygam

Acceleration

Most of pyGAM's computations are linear algebra operations.

To speed up optimization on large models with constraints, it helps to have intel MKL installed.

It is currently a bit tricky to install a Numpy linked to the MKL routines with Conda because you have to be careful with which channel you are using. Pip's Numpy-MKL is outdated.

An alternative is to use a third-party build:

pip install numpy scipy --extra-index-url https://urob.github.io/numpy-mkl

Contributing - HELP REQUESTED

Contributions are most welcome!

You can help pyGAM in many ways including:

  • Working on a known bug.
  • Trying it out and reporting bugs or what was difficult.
  • Helping improve the documentation.
  • Writing new distributions, and link functions.
  • If you need some ideas, please take a look at the issues.

To start:

  • fork the project and cut a new branch
  • install pygam, editable with developer dependencies (in a new python environment)
pip install --upgrade pip
pip install -e ".[dev]"

Make some changes and write a test...

  • Test your contribution (eg from the .../pyGAM): py.test -s
  • When you are happy with your changes, make a pull request into the main branch of the main project.

About

Generalized Additive Models (GAMs) are smooth semi-parametric models of the form:

$$g\left(\mathbb{E}[y|X]\right)=\beta_0+f_1(X_1)+f_2(X_2)+\dots+f_p(X_p)$$

where $X = [X_1, X_2, ..., X_p]$ are independent variables, $y$ is the dependent variable, and $g$ is a link function that relates our predictor variables to the expected value of the dependent variable.

The feature functions $f_i$ are built using penalized B-splines, which allow us to automatically model non-linear relationships without having to manually try out many different transformations on each variable.

GAMs extend generalized linear models by allowing non-linear functions of features while maintaining additivity.

Since GAMs are additive, it is easy to examine the effect of each $X_i$ on $y$ individually while holding all other predictors constant.

As a result, GAMs are a class of very flexible and interpretable models, which also make it is easy to incorporate prior knowledge and control overfitting.

Citing pyGAM

Please consider citing pyGAM if it has helped you in your research or work:

Daniel Servén, & Charlie Brummitt. (2018, March 27). pyGAM: Generalized Additive Models in Python. Zenodo. DOI: 10.5281/zenodo.1208723

BibTex:

@misc{daniel\_serven\_2018_1208723,
  author       = {Daniel Servén and
                  Charlie Brummitt},
  title        = {pyGAM: Generalized Additive Models in Python},
  month        = mar,
  year         = 2018,
  doi          = {10.5281/zenodo.1208723},
  url          = {https://doi.org/10.5281/zenodo.1208723}
}

References

  1. Simon N. Wood, 2006 Generalized Additive Models: an introduction with R

  2. Hastie, Tibshirani, Friedman The Elements of Statistical Learning https://www.sas.upenn.edu/~fdiebold/NoHesitations/BookAdvanced.pdf

  3. James, Witten, Hastie, Tibshirani, and Taylor An Introduction to Statistical Learning with Applications in Python https://hastie.su.domains/ISLP/ISLP_website.pdf.download.html

  4. Paul Eilers & Brian Marx, 1996 Flexible Smoothing with B-splines and Penalties https://sites.stat.washington.edu/courses/stat527/s14/readings/EilersMarx_StatSci_1996.pdf

  5. Kim Larsen, 2015 GAM: The Predictive Modeling Silver Bullet http://multithreaded.stitchfix.com/assets/files/gam.pdf

  6. Paul Eilers, Brian Marx, and Maria Durbán, 2015 Twenty years of P-splines https://e-archivo.uc3m.es/rest/api/core/bitstreams/4e23bd9f-c90d-4598-893e-deb0a6bf0728/content

  7. Keiding, Niels, 1991 Age-specific incidence and prevalence: a statistical perspective https://academic.oup.com/jrsssa/article-abstract/154/3/371/7106499

Metadata

Release files for pygam 0.12.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 pygam 0.12.0
File Size Uploaded
pygam-0.12.0.tar.gz 82.4 kB Details

Built distribution (wheel)

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

Total release size: 167.0 kB

Release files / pygam-0.12.0.tar.gz

Download URL pygam-0.12.0.tar.gz
Size 82.4 kB
Tags Source
SHA-256 checksum
How to use checksums
7c098dfbfbb7a6b9fa4e1a579380e3b0b866fe8fa56f9d852ffdeaecfe56d5ea
BLAKE2b-256 checksum
How to use checksums
6295f5866f7f8fa2a5a7f55b4711cd23fa592e03e2988f3ea769e4cf884b1a46
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Dec 18, 2025.

Transparency log

Release files / pygam-0.12.0-py3-none-any.whl

Download URL pygam-0.12.0-py3-none-any.whl
Size 84.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e66597040fc9b6f113a5a9229fc42fb4ea60e8f55942a3b438caccf0512835f4
BLAKE2b-256 checksum
How to use checksums
352dcb0cd5865a8dac8869cdd01df17c2c0c94d9aa22b167e1bbfa01559dd3a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Dec 18, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.12.0 This release

2 release files

0.11.0

2 release files

0.10.1

2 release files

0.10.0

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.3

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

1 release file

0.2.17

1 release file

0.2.16

1 release file

0.2.15

1 release file

0.2.14

1 release file

0.2.13

1 release file

0.2.12

1 release file

0.2.11

1 release file

0.2.10

1 release file

0.2.9

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