Skip to main content

Of the Actuary, By the Actuary, For the Actuary: A Python package for actuarial risk modeling and simulation

Project description

ActRisk

PyPI version Python 3.8+ License: MIT Code style: black

A Python package for actuarial risk modeling and simulation.

Features

  • Risk Modeling: Advanced tools for actuarial risk analysis
  • Monte Carlo Simulations: High-performance simulation capabilities
  • Parallel Processing: Optimized for large-scale computations
  • Configuration Management: Flexible YAML-based configuration system
  • Statistical Analysis: Comprehensive statistical tools for risk assessment

Installation

From PyPI (recommended)

pip install actrisk

From Source

git clone https://github.com/jzhng105/actrisk.git
cd actrisk
pip install -e .

Development Installation

git clone https://github.com/jzhng105/actrisk.git
cd actrisk
pip install -e .[dev]

Quick Start

from actrisk.core import actfitter
from actstats import actuarial as act

# Load configuration
config = Config('config.yaml')

sev_data = act.lognormal(0.5,0.2).rvs(size=10000)

#############################
###### Fit Severity #########
#############################
# User specifies distributions and metrics 
distribution_names = config.distributions['severity']
metrics = config.metrics

sev_fitter = actfitter(sev_data, distributions=distribution_names, metrics=metrics)
sev_fitter.fit()
sev_fitter.best_fits
sev_fitter.selected_fit

Documentation

Features in Detail

Configuration Management

# Initialize fitter with config file
config = utils.Config('code/config.yaml')

Fit Severity

sev_data = act.lognormal(0.5,0.2).rvs(size=10000)

#############################
###### Fit Severity #########
#############################
# User specifies distributions and metrics 
distribution_names = config.distributions['severity']
metrics = config.metrics

sev_fitter = DistributionFitter(sev_data, distributions=distribution_names, metrics=metrics)
sev_fitter.fit()
sev_fitter.best_fits
sev_fitter.selected_fit
sev_fitter.get_selected_dist()
# Selecting a distribution manually
sev_fitter.select_distribution('uniform')
selected_fit = sev_fitter.selected_fit

print("Selected fitting distribution:", selected_fit['name'])
print("Parameters:", selected_fit['params'])
print("AIC:", selected_fit['aic'])
print("BIC:", selected_fit['bic'])

# Calculating statistics
sev_fitter.calculate_statistics().to_csv('outputs/statistics.csv')

# Plotting predictions
sev_fitter.plot_predictions()

# Produce summary
sev_fitter.summary().to_csv('outputs/summary.csv')

# Generating samples
samples = sev_fitter.sample(size=10)
print("Generated samples:", samples)

samples = sev_fitter.sample_mixed(0.1, 0.1, size=10)

Fit Frequency

#############################
###### Fit frequency ########
#############################
distribution_names = config.distributions['frequency']
metrics = config.metrics

freq_fitter = DistributionFitter(freq_data, distributions=distribution_names, metrics=metrics)
freq_fitter.distributions
freq_fitter.fit()
freq_fitter.best_fits
freq_fitter.selected_fit

Stochastic Simulation

#####################################
###### Stochastic Simulation ########
#####################################
freq_dist = freq_fitter.selected_fit['name']
freq_params = freq_fitter.get_selected_params()
sev_dist = sev_fitter.selected_fit['name']
sev_params = sev_fitter.get_selected_params()


simulator = stk.StochasticSimulator(freq_dist, freq_params, sev_dist, sev_params, 100, True, 1234, 0.6, 'frank', 0.6)
simulator = stk.StochasticSimulator(freq_dist, freq_params, sev_dist, sev_params, 100, True, 1234, 0.6)
simulator = stk.StochasticSimulator(freq_dist, freq_params, sev_dist, sev_params, 100, True, 1234)

simulations = simulator.gen_agg_simulations()
simulator.all_simulations
simulator.calc_agg_percentile(99.2)
simulator.plot_distribution()
simulator.results.mean()
simulator.plot_correlated_variables()
simulator.all_simulations
print(pd.DataFrame(simulator.analyze_results()))

##### Generate correlated mutivariate distribution
corr_matrix_file = 'code/utils/corr_matrix.csv'
dist_list_file = 'code/utils/dist_list.json'
simulator = stk.StochasticSimulator(freq_dist, freq_params, sev_dist, sev_params, 10000, True, 1034, 0.6)
simulator.gen_multivariate_corr_simulations(corr_matrix_file, dist_list_file, True)
simulator._all_simulations_data
data = pd.DataFrame(simulator._all_simulations_data)
data_t = data.transpose()
# Compute correlation matrix
correlation_matrix = data_t.corr()
print(correlation_matrix)

Development

Setting up Development Environment

# Clone the repository
git clone https://github.com/jzhng105/actrisk.git
cd actrisk

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Workflow

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Add tests for new functionality
  5. Ensure all tests pass (pytest)
  6. Commit your changes (git commit -m 'Add amazing feature')
  7. Push to the branch (git push origin feature/amazing-feature)
  8. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Citation

If you use ActRisk in your research, please cite:

@software{actrisk2025,
  title={ActRisk: A Python package for actuarial risk modeling and simulation},
  author={Juntao Zhang},
  year={2025},
  url={https://github.com/jzhng105/actrisk}
}

Support

Changelog

See CHANGELOG.md for a list of changes and version history.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

actrisk-0.1.0.0.tar.gz (17.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

actrisk-0.1.0.0-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

Details for the file actrisk-0.1.0.0.tar.gz.

File metadata

  • Download URL: actrisk-0.1.0.0.tar.gz
  • Upload date:
  • Size: 17.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.11

File hashes

Hashes for actrisk-0.1.0.0.tar.gz
Algorithm Hash digest
SHA256 80b261dde9c26c0e03081128be840384764b328814cddafff1bfeac9e8d9bbee
MD5 ba71d7a3da6a64f9b9d348ba83252bcd
BLAKE2b-256 3d25e93663e001180a4418069153e55aae6d269f65657e8a95733f2fe8030393

See more details on using hashes here.

File details

Details for the file actrisk-0.1.0.0-py3-none-any.whl.

File metadata

  • Download URL: actrisk-0.1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 16.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.11

File hashes

Hashes for actrisk-0.1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 54c34fe0c44735c1974e7e7ed817e6a115c67286337e25e9ebf87d9be283ed1c
MD5 9c0e1c5bf399bd4cab47dea7eb23b947
BLAKE2b-256 9252f4802d844db6c2507df3694512fba97ccc1ee58cf7ace545be6a48096c59

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page