rippy


Namerippy JSON
Version 0.0.8 PyPI version JSON
download
home_pageNone
SummaryReinsurance Pricing in Python!
upload_time2024-10-21 17:26:55
maintainerNone
docs_urlNone
authorJames Norman
requires_python>=3.10
licenseMIT License
keywords reinsurance actuarial insurance
VCS
bugtrack_url
requirements numpy scipy
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # rippy
ReInsurance Pricing in PYthon!

## Getting Started

Install rippy from pypi:

```pip install rippy```

## Introduction

Rippy is a simple, fast and lightweight simulation-based reinsurance modeling package. It has two main components:

1. Frequency-Severity, otherwise known as compound distribution simulation

    Rippy contains the ```FrequencySeverityModel``` class to set up and simulate from compound distributions with a variety of frequency and severity distributions

    ```python
    from rippy import FrequencySeverityModel, Distributions
    claims = FrequencySeverityModel(Distributions.Poisson(5),Distributions.Pareto(0.5,100000)).generate()
    ```

2. Reinsurance contract calculation
   
   Rippy can then calculate the recoveries of a number of types of reinsurance contract for the simulated claims.

   ```python
   from rippy import XoL
   xol_layer = XoL(name="Layer 1", limit=1000000, excess=100000, premium=1000)
   xol_layer.apply(claims)
   xol_layer.print_summary()
    ```


Rippy is based on the scientific python stack of numpy and scipy for fast performance. It can optionally run on a GPU for extremely fast performance. It is designed for interoperability with numpy and ndarrays, so for example the simulated claims can be operated on with
numpy ufuncs:

```python
import numpy as np
capped_claims = np.minimum(claims,2000000)
```

Under the hood/bonnet, rippy represents the simulations of the Frequency-Severity model in sparse storage, keeping two lists of simulation indices and values: 

|sim_index | values|
|-----|-----|
| 0 | 13231.12
| 0 | 432.7 |
| 2 | 78935.12 |
| 3 | 3213.9 |
| 3 | 43843.1 |
| ...| ...|

Frequency-Severity simulations can be aggregated (summed within a sim_index), which results in a standard ```np.ndarray```

```python
aggregate_claims = claims.aggregate()

```

```python
np.array([13663.82,0,78935,12,47957.0,....])
```

### Configuring the simulation settings

The global number of simulations can be changed from the ```config``` class (the default is 100,000 simulations)

```python
from rippy import config
config.n_sims = 1000000
```

The global random seed can also be configured from the ```config``` class

```python
config.set_random_seed(123456)
```

Rippy 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 rippy uses the cupy library. Install the dependencies by running

```
pip install rippy[gpu]
```

To enable GPU mode, set the RIPPY_USE_GPU environment variable to 1.
```linux
export RIPPY_USE_GPU=1
```
on Linux or
```
set RIPPY_USE_GPU=1
```
on Windows. Set it to anythin else to revert to using a CPU


## Project Status

Rippy 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
* Adding support for Catastrophe loss generation and reinsurance contracts
* Adding support for more reinsurance contract types (Surplus, Stop Loss etc)
* Grouping reinsurance contracts into programs and structures
* Stratified sampling and Quasi-Monte Carlo methods
* Reporting dashboards

## Issues

Please log issues in github

## Contributing

You are welcome to contribute pull requests


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "rippy",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "reinsurance, actuarial, insurance",
    "author": "James Norman",
    "author_email": "James Norman <james.norman@proteusllp.com>",
    "download_url": "https://files.pythonhosted.org/packages/28/f5/f74254360da671ab13a950cefc14d90c833ab1bef2421359d9d42aecdb19/rippy-0.0.8.tar.gz",
    "platform": null,
    "description": "# rippy\nReInsurance Pricing in PYthon!\n\n## Getting Started\n\nInstall rippy from pypi:\n\n```pip install rippy```\n\n## Introduction\n\nRippy is a simple, fast and lightweight simulation-based reinsurance modeling package. It has two main components:\n\n1. Frequency-Severity, otherwise known as compound distribution simulation\n\n    Rippy contains the ```FrequencySeverityModel``` class to set up and simulate from compound distributions with a variety of frequency and severity distributions\n\n    ```python\n    from rippy import FrequencySeverityModel, Distributions\n    claims = FrequencySeverityModel(Distributions.Poisson(5),Distributions.Pareto(0.5,100000)).generate()\n    ```\n\n2. Reinsurance contract calculation\n   \n   Rippy can then calculate the recoveries of a number of types of reinsurance contract for the simulated claims.\n\n   ```python\n   from rippy import XoL\n   xol_layer = XoL(name=\"Layer 1\", limit=1000000, excess=100000, premium=1000)\n   xol_layer.apply(claims)\n   xol_layer.print_summary()\n    ```\n\n\nRippy is based on the scientific python stack of numpy and scipy for fast performance. It can optionally run on a GPU for extremely fast performance. It is designed for interoperability with numpy and ndarrays, so for example the simulated claims can be operated on with\nnumpy ufuncs:\n\n```python\nimport numpy as np\ncapped_claims = np.minimum(claims,2000000)\n```\n\nUnder the hood/bonnet, rippy represents the simulations of the Frequency-Severity model in sparse storage, keeping two lists of simulation indices and values: \n\n|sim_index | values|\n|-----|-----|\n| 0 | 13231.12\n| 0 | 432.7 |\n| 2 | 78935.12 |\n| 3 | 3213.9 |\n| 3 | 43843.1 |\n| ...| ...|\n\nFrequency-Severity simulations can be aggregated (summed within a sim_index), which results in a standard ```np.ndarray```\n\n```python\naggregate_claims = claims.aggregate()\n\n```\n\n```python\nnp.array([13663.82,0,78935,12,47957.0,....])\n```\n\n### Configuring the simulation settings\n\nThe global number of simulations can be changed from the ```config``` class (the default is 100,000 simulations)\n\n```python\nfrom rippy import config\nconfig.n_sims = 1000000\n```\n\nThe global random seed can also be configured from the ```config``` class\n\n```python\nconfig.set_random_seed(123456)\n```\n\nRippy uses the ```default_rng``` class of the ```numpy.random``` module. This can also be configured using the ```config.rng``` property.\n\n### Using a GPU\n\nGPU support requires a CUDA compatible GPU. Internally rippy uses the cupy library. Install the dependencies by running\n\n```\npip install rippy[gpu]\n```\n\nTo enable GPU mode, set the RIPPY_USE_GPU environment variable to 1.\n```linux\nexport RIPPY_USE_GPU=1\n```\non Linux or\n```\nset RIPPY_USE_GPU=1\n```\non Windows. Set it to anythin else to revert to using a CPU\n\n\n## Project Status\n\nRippy is currently a proof of concept. There are a limited number of supported distributions and reinsurance contracts. We are working on:\n\n* Adding more distributions and loss generation types\n* Adding support for Catastrophe loss generation and reinsurance contracts\n* Adding support for more reinsurance contract types (Surplus, Stop Loss etc)\n* Grouping reinsurance contracts into programs and structures\n* Stratified sampling and Quasi-Monte Carlo methods\n* Reporting dashboards\n\n## Issues\n\nPlease log issues in github\n\n## Contributing\n\nYou are welcome to contribute pull requests\n\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "Reinsurance Pricing in Python!",
    "version": "0.0.8",
    "project_urls": {
        "Homepage": "https://github.com/ProteusLLP/rippy",
        "Issues": "https://github.com/ProteusLLP/rippy/issues"
    },
    "split_keywords": [
        "reinsurance",
        " actuarial",
        " insurance"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "be4d5e701446410f62d1d7ad787b19813ad833df1c82a6dfafc483ea074e9edb",
                "md5": "3c026634b412efc85581a165b9af84b5",
                "sha256": "df39ce21dcba97b4ef9190bc209439b0c67198e793c8b0e1bf7f51f0a36b2141"
            },
            "downloads": -1,
            "filename": "rippy-0.0.8-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3c026634b412efc85581a165b9af84b5",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 14093,
            "upload_time": "2024-10-21T17:26:54",
            "upload_time_iso_8601": "2024-10-21T17:26:54.645137Z",
            "url": "https://files.pythonhosted.org/packages/be/4d/5e701446410f62d1d7ad787b19813ad833df1c82a6dfafc483ea074e9edb/rippy-0.0.8-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "28f5f74254360da671ab13a950cefc14d90c833ab1bef2421359d9d42aecdb19",
                "md5": "4f7511cdfa148f656c7e7c3e1fd38e40",
                "sha256": "8fd0d650e52e1843ffff64f0957c97eba55a5ddb86c28e71f60eb86c3a4a7354"
            },
            "downloads": -1,
            "filename": "rippy-0.0.8.tar.gz",
            "has_sig": false,
            "md5_digest": "4f7511cdfa148f656c7e7c3e1fd38e40",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 17338,
            "upload_time": "2024-10-21T17:26:55",
            "upload_time_iso_8601": "2024-10-21T17:26:55.998374Z",
            "url": "https://files.pythonhosted.org/packages/28/f5/f74254360da671ab13a950cefc14d90c833ab1bef2421359d9d42aecdb19/rippy-0.0.8.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-21 17:26:55",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ProteusLLP",
    "github_project": "rippy",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "numpy",
            "specs": [
                [
                    "==",
                    "1.26.4"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    "==",
                    "1.12.0"
                ]
            ]
        }
    ],
    "lcname": "rippy"
}
        
Elapsed time: 4.69568s