Skip to content

Multiple Risk

Determine non-exceedence probabilities for a multiple risks.

Import libraries

import sys
import os

import pandas as pd

from darpi.quantitative.plots import plot_histogram_and_cdf, plot_ppf_curve
from darpi.quantitative.probability import (
    get_histogram_data,
    get_samples,
    get_triangular_distribution,
    get_empirical_cdf,
    get_empirical_ppf,
    sum_samples,
)
from darpi.qualitative.plots import plot_empty_heat_map, add_scatter_to_heat_map

Generate probability of non-exceedance charts for multiple risks

# Identify some risks
risks = {
    "Risk 1": {"costs": (1000, 2000, 5000), "probability": 0.6},
    "Risk 2": {"costs": (2000, 4000, 8000), "probability": 0.8},
    "Risk 3": {"costs": (2800, 4000, 10000), "probability": 0.5},
}

# Get samples for each risk
for risk, details in risks.items():
    a, c, b = details["costs"]
    risk_probability = details["probability"]
    distribution = get_triangular_distribution(a, b, c)
    data = get_samples(distribution=distribution, risk_probability=risk_probability)
    risks[risk]["samples"] = data

# Get summed data
data = sum_samples([risk["samples"] for risk in risks.values()])

# Get plotting data
hist_data = get_histogram_data(data)
cdf_data = get_empirical_cdf(data)
ppf_data = get_empirical_ppf(data)

# Make some plots
fig = plot_histogram_and_cdf(hist_data=hist_data, cdf_data=cdf_data)
fig.write_image("..images/multiple-risk-histogram_cdf.png")
fig = plot_ppf_curve(data=ppf_data)
fig.write_image("..images/multiple-risk-ppf.png")

histogram_cdf ppf

Generate probability of non-exceedance table for multiple risks

get_non_exceedance_table(data).round(2)
cost p
0 0.00 0.00
1 0.00 0.01
2 0.00 0.02
3 0.00 0.03
4 0.00 0.04
... ... ...
96 15155.18 0.96
97 15579.32 0.97
98 16108.59 0.98
99 16887.59 0.99
100 21930.77 1.00

101 rows × 2 columns