quactuary package¶
Subpackages¶
- quactuary.distributions package
- Submodules
- quactuary.distributions.frequency module
- quactuary.distributions.severity module
- Module contents
- quactuary.future package
Submodules¶
quactuary.backend module¶
Backend selection and execution module.
Provides plumbing to choose between quantum (Qiskit) and classical execution backends. Abstracts backend management so user-facing models receive numeric results regardless of execution mode.
Examples
>>> from quactuary.backend import get_backend, set_backend
>>> manager = get_backend()
>>> set_backend('quantum', provider='AerSimulator')
- class quactuary.backend.BackendManager(backend)¶
Bases:
object
Manager for quantum and classical backends.
Manages backend assignments and executes quantum circuits or classical simulations.
- __init__(backend)¶
Initialize a BackendManager.
- Parameters:
backend – Backend instance (e.g., Qiskit backend or custom classical engine).
- get_backend()¶
Retrieve the active backend.
- Returns:
The current backend instance.
- run(circuit)¶
Execute a circuit on the active backend.
- Parameters:
circuit – QuantumCircuit or equivalent object to run.
- Returns:
Execution result or job output.
- Return type:
Result
Examples
>>> result = backend_manager.run(qc)
- set_backend(backend)¶
Override the active backend.
- Parameters:
backend – New backend instance.
- quactuary.backend.get_backend()¶
Retrieve or initialize the global BackendManager.
- Returns:
Singleton backend manager instance.
- Return type:
- quactuary.backend.set_backend(mode, provider=None, **kwargs)¶
Configure the global execution backend.
- Parameters:
mode (str) – Type of execution (‘quantum’ or ‘classical’).
provider (Optional[str]) – Quantum provider name (‘AerSimulator’, ‘IBMQ’).
**kwargs – Additional settings (e.g., backend credentials, simulation parameters).
- Returns:
The newly assigned backend instance.
- Raises:
ImportError – If Qiskit or packaging dependencies are missing for quantum mode.
ValueError – If mode or provider is unsupported.
Examples
>>> set_backend('quantum', provider='AerSimulator') >>> set_backend('classical', backend='numpy')
- quactuary.backend.use_backend(mode, provider=None, **kwargs)¶
Context manager for temporary backend configuration.
- Parameters:
mode (str) – Execution mode override (‘quantum’ or ‘classical’).
provider (Optional[str]) – Quantum provider name.
**kwargs – Additional backend settings.
- Yields:
BackendManager – Manager with temporary backend applied.
Examples
>>> with use_backend('quantum', provider='AerSimulator') as mgr: ... result = mgr.run(circuit)
quactuary.entities module¶
Insurance entity models for policy terms, inforce buckets, and portfolios.
This module defines the core business objects for representing insurance policy terms (PolicyTerms), aggregation buckets (Inforce), and collections of buckets (Portfolio).
Examples
>>> from quactuary.entities import PolicyTerms, Inforce, Portfolio
>>> terms = PolicyTerms(per_occ_deductible=100.0, coinsurance=0.8)
>>> bucket = Inforce(n_policies=50, freq=freq_model, sev=sev_model, terms=terms)
>>> portfolio = Portfolio([bucket])
- class quactuary.entities.Inforce(n_policies: int, freq: FrequencyModel, sev: SeverityModel, terms: PolicyTerms, name: str = 'Unnamed Bucket')¶
Bases:
object
Bucket of policies sharing frequency and severity characteristics.
- Parameters:
n_policies (int) – Number of policies in this bucket.
freq (FrequencyModel) – Claim count distribution.
sev (SeverityModel) – Claim severity distribution.
terms (PolicyTerms) – Policy terms and layer definitions.
name (str, optional) – Bucket label. Defaults to “Unnamed Bucket”.
- classical_sample(n_sims
int) -> np.ndarray: Monte Carlo aggregate loss sample.
- classical_sample(n_sims: int = 100000)¶
Generate Monte Carlo aggregate loss samples for the bucket.
- Parameters:
n_sims (int, optional) – Number of simulation runs. Defaults to 100000.
- Returns:
Aggregate loss per simulation.
- Return type:
np.ndarray
Examples
>>> samples = bucket.classical_sample(n_sims=50000)
- freq: FrequencyModel¶
- n_policies: int¶
- name: str¶
- sev: SeverityModel¶
- terms: PolicyTerms¶
- class quactuary.entities.PolicyTerms(per_occ_deductible: float = 0.0, coinsurance: float = 1.0, per_occ_limit: float | None = None, agg_limit: float | None = None, attachment: float = 0.0, coverage: str = 'OCC')¶
Bases:
object
Terms defining insurance policy layer details.
- per_occ_deductible¶
Deductible per occurrence.
- Type:
float
- coinsurance¶
Insurer share proportion (1.0 = 100%).
- Type:
float
- per_occ_limit¶
Per-occurrence limit.
- Type:
Optional[float]
- agg_limit¶
Aggregate limit.
- Type:
Optional[float]
- attachment¶
Attachment point for excess-of-loss.
- Type:
float
- coverage¶
Coverage type (e.g., “OCC”, “CLAIMS-MADE”).
- Type:
str
- agg_limit: float | None¶
- attachment: float¶
- coinsurance: float¶
- coverage: str¶
- per_occ_deductible: float¶
- per_occ_limit: float | None¶
- class quactuary.entities.Portfolio(iterable=(), /)¶
Bases:
list
Portfolio of in-force buckets.
Extends list to include portfolio-level operations.
Examples
>>> p1 = Portfolio([bucket1]) >>> p2 = Portfolio([bucket2]) >>> combined = p1 + p2
- total_policies() int ¶
Compute the total number of policies in the portfolio.
- Returns:
Sum of n_policies across all buckets.
- Return type:
int
Examples
>>> portfolio.total_policies() 1500
quactuary.pricing module¶
Pricing module for actuarial loss models.
This module provides classes to price excess loss and compute risk measures for insurance portfolios, using classical simulation methods (Monte Carlo, FFT) with optional quantum acceleration via Qiskit.
Notes
Classical methods include Monte Carlo and FFT via external libraries. Quantum acceleration uses Qiskit backends managed by BackendManager.
Examples
>>> from quactuary.pricing import ExcessLossModel, RiskMeasureModel
>>> model = ExcessLossModel(inforce, deductible=1000.0, limit=10000.0)
>>> result = model.compute_excess_loss()
- class quactuary.pricing.ActuarialModel(inforce, deductible=None, limit=None, backend=None, **kw)¶
Bases:
QuantumModelMixin
Base class for actuarial pricing models with optional quantum support.
Provides common interface for portfolio-based loss models using classical or quantum backends.
- Parameters:
deductible (Optional[float]) – Layer deductible.
limit (Optional[float]) – Layer limit.
backend (Optional[BackendManager]) – Execution backend override.
**kw – Additional model-specific settings.
- layer_deductible¶
Deductible for the layer.
- Type:
Optional[float]
- layer_limit¶
Limit for the layer.
- Type:
Optional[float]
- backend¶
Backend manager for execution.
- Type:
- __init__(inforce, deductible=None, limit=None, backend=None, **kw)¶
Initialize an ActuarialModel.
- Parameters:
deductible (Optional[float]) – Layer deductible.
limit (Optional[float]) – Layer limit.
backend (Optional[BackendManager]) – Execution backend.
**kw – Additional settings (ignored).
- Raises:
TypeError – If inforce is not an Inforce or Portfolio.
- class quactuary.pricing.ExcessLossModel(inforce, deductible=None, limit=None, **kw)¶
Bases:
ActuarialModel
Pricing model for aggregate excess loss.
Computes the loss exceeding a deductible up to a layer limit for an insurance portfolio.
- Parameters:
Examples
>>> model = ExcessLossModel(inforce, deductible=1000, limit=10000) >>> losses = model.compute_excess_loss()
- compute_excess_loss(backend=None)¶
Compute aggregate excess loss for the portfolio.
- Parameters:
backend (Optional[BackendManager]) – Execution backend override.
- Returns:
Excess loss result (e.g., numeric array or DataFrame).
- Return type:
Any
- Raises:
NotImplementedError – Method not yet implemented.
- class quactuary.pricing.RiskMeasureModel(inforce, deductible=None, limit=None, **kw)¶
Bases:
ActuarialModel
Pricing model for risk measures (VaR, TVaR).
Computes quantile-based risk metrics for insurance portfolios, with optional quantum acceleration.
- Parameters:
Examples
>>> rm = RiskMeasureModel(inforce) >>> var = rm.value_at_risk(alpha=0.99)
- tail_value_at_risk(alpha=0.95, backend=None)¶
Compute the Tail Value at Risk (TVaR) at the given confidence level.
- Parameters:
alpha (float, optional) – Confidence level (0 < alpha < 1). Defaults to 0.95.
backend (Optional[BackendManager]) – Execution backend override.
- Returns:
Estimated TVaR value.
- Return type:
float
- Raises:
NotImplementedError – Method not yet implemented.
- value_at_risk(alpha=0.95, backend=None)¶
Compute the Value at Risk (VaR) at the given confidence level.
- Parameters:
alpha (float, optional) – Confidence level (0 < alpha < 1). Defaults to 0.95.
backend (Optional[BackendManager]) – Execution backend override.
- Returns:
Estimated VaR value.
- Return type:
float
- Raises:
NotImplementedError – Method not yet implemented.
quactuary.quantum module¶
Quantum actuarial integration module.
Centralizes quantum computing support across actuarial models, providing consistent circuit construction, execution, and result handling.
Examples
>>> from quactuary.quantum import QuantumModelMixin, QuantumResult
>>> class MyModel(QuantumModelMixin):
... pass
- class quactuary.quantum.QuantumModelMixin¶
Bases:
object
Mixin providing quantum circuit creation and execution capabilities.
Include this mixin in model classes to enable quantum algorithms via Qiskit.
- class quactuary.quantum.QuantumResult¶
Bases:
object
Container for results from quantum computations.
Models can convert these results into user-facing formats (e.g., numbers or DataFrames).
- intervals¶
Confidence intervals for estimates.
- Type:
dict[str, tuple[float, float]]
- samples¶
Raw samples obtained from quantum execution.
- Type:
Optional[np.ndarray]
- metadata¶
Additional run details.
- Type:
dict
- quactuary.quantum.__init__(self)¶
Initialize the QuantumModelMixin.
This method can perform setup tasks required before building circuits.