Proteus Actuarial Library: A package for building and running stochastic actuarial models in Python.
Project description
Proteus Actuarial Library
An actuarial stochastic modeling library in python.
Note This library is still in development!
Introduction
The Proteus Actuarial Library (PAL) is a simple, fast and lightweight framework for building simulation-based actuarial and financial models. It is originated from the package for reinsurance modeling.
PAL is designed to look after the complicated stuff, such as copulas and simulation re-ordering, providing easy to use objects and clear syntax.
PAL is based on the scientific python stack of numpy and scipy for fast performance. It can optionally run on a GPU using the cupy package for extremely fast performance. It is designed for interoperability with numpy and ndarrays.
Creating stochastic variables and variable containers
Stochastic variables can be created with the StochasticScalar class:
svariable = StochasticScalar([1,2,3,4])
Statistical distributions are available in the distributions module
svariable = distributions.Gamma(alpha=2.5,beta=2).generate()
Variables can be grouped into containers with the ProteusVariable class. ProteusVariables have a dimension and values that can either be a list or dictionary of other variables.
svariable1 = distributions.Gamma(alpha=2.5,beta=2).generate()
svariable2 = distributions.LogNormal(mu=1,sigma=0.5).generate()
variable_container = ProteusVariable(dim_name="line",values={"Motor":svariable1,"Property":svariable2})
Variable containers can be operated on with numpy functions, and can be added, multiplied together etc. If the values are a dictionary then operations involving multiple variable containers will attempt to match on the labels of the dictionary.
Copulas and Couplings
Statistical dependencies between PAL variables can be modelled using copulas. The idea is that the marginal distributions can be sampled independently, and then re-ordered relative to one another using the relative ordering from a sample from a copula.
svariable1 = distributions.Gamma(alpha=2.5,beta=2).generate()
svariable2 = distributions.LogNormal(mu=1,sigma=0.5).generate()
copulas.GumbelCopula(alpha=1.2,n=2).apply([svariable1,svariable2])
The PAL library ensures variables that have been used in formula with other variables (i.e. variables that are coupled) are re-ordered consistently. For example
svariable1 = distributions.Gamma(alpha=2.5,beta=2).generate()
svariable2 = distributions.LogNormal(mu=1,sigma=0.5).generate()
svariable3 = svariable1+svariable2
Because svariable1 and svariable2 have been used in the formula for svariable3, svariable1,svariable2 and svariable3 are coupled together.
If applying a copula between svariable3 and another variable svariable4 results in svariable3 being reordered, svariable1 and svariable2 will be reordered automatically.
Configuring the simulation settings
The global number of simulations can be changed from the config class (the default is 100,000 simulations)
from rippy import config
config.n_sims = 1000000
The global random seed can also be configured from the config class
config.set_random_seed(123456)
PAL uses the default_rng class of the numpy.random module. This can also be configured using the config.rng property.
Using a GPU
GPU support requires a CUDA compatible GPU. Internally PAL uses the cupy library. Install the dependencies by running
pip install pal[gpu]
To enable GPU mode, set the RIPPY_USE_GPU environment variable to 1.
export RIPPY_USE_GPU=1
on Linux or
set RIPPY_USE_GPU=1
on Windows. Set it to anything else to revert to using a CPU
Project Status
PAL is currently a proof of concept. There are a limited number of supported distributions and reinsurance contracts. We are working on:
- Adding more distributions and loss generation types
- Making it easier to work with multi-dimensional variables
- Adding support for Catastrophe loss generation
- Adding support for more reinsurance contract types (Surplus, Stop Loss etc)
- Stratified sampling and Quasi-Monte Carlo methods
- Reporting dashboards
Issues
Please log issues in github
Contributing
You are welcome to contribute pull requests
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file proteus_actuarial_library-0.0.2.tar.gz.
File metadata
- Download URL: proteus_actuarial_library-0.0.2.tar.gz
- Upload date:
- Size: 31.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad1cf049c3048ccc1d9e8b295b0033c737574e92556d95795dc36a347c0a4f87
|
|
| MD5 |
09dd62fb95f880264a51536f2a605272
|
|
| BLAKE2b-256 |
592d0bd645797da67c4c58bad443fe664441db3684f672e5fad6640b6441db3b
|
File details
Details for the file proteus_actuarial_library-0.0.2-py3-none-any.whl.
File metadata
- Download URL: proteus_actuarial_library-0.0.2-py3-none-any.whl
- Upload date:
- Size: 27.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53d7e4296399c188e6d621a3eaae9f35a2726e0898b7b91a4754ab4113eaa23e
|
|
| MD5 |
a5990126d267034ffe32ac17eaa82bdc
|
|
| BLAKE2b-256 |
fbba9c8bf1226ce629002eb3fa6219a683dd7e78262f577ec620287765bb5f78
|