Weighted eventbased probabilistic models
Background
A weighted eventbased model in RiskScape is when each event in the dataset has a specific probability or rate of occurrence associated with it. As opposed to an eventbased model, where each event has an equalprobability within the model itself.
A weighted eventbased model allows a smaller dataset to be used when very rare events need to be included in the dataset. Whereas an eventbased approach might require billions of events in order to include very rare events in the model.
Each event in the weighted eventbased dataset has a rate associated with it.
This is the rate at which this event occurs over the defined time period (usually annually).
For example, a rate of 0.1
for a time period of one year would mean, on average, an event like this is likely to occur every ten years.
Model parameters
The pipeline examples on this page will assume your model defines the following parameter:
$loss_levels
: the losslevels you are interested in for reporting the Annual Exceedance Probability.
An example project.ini
definition might look like the following.
Here the default values for the parameters match our examples.
[model eventbased]
framework = pipeline
location = pipeline.txt
# we are interested in whether any given event exceeds the following loss bands or not
param.loss_levels = [100, 250, 500, 750, 1000]
Event loss table
Refer to Generating an event loss table for how to produce a total loss for each event, based on the hazard data you are using.
Note
You need to ensure the annual occurrence rate for each event is included in the eventloss results.
Here we have assumed this attribute is called occurrence_rate
.
For example, the group
step that you use to produce your eventloss table might look like this:
# Aggregate the losses by event to get a total loss per event.
group(
by: event,
select: {
event.id as eventid,
sum(loss) as total_loss,
event.rate as occurrence_rate
}) as event_loss_table
Annualized Average Loss
To calculate the Annualized Average Loss (AAL) from weighted eventbased data, the example pipeline on this page uses the formula:
Calculating the standard deviation uses the formula:
This is based on the model calculating \(Loss_\text{e}\) as the average loss if the event occurs.
Note
This page is intended as a demonstrative example pipeline for a weighted eventbased model. It is not intended to be an definitive guide to mathematical practices for risk analysis. We recommend that you use an AAL calculation that is appropriate for the specific scenario you are modelling.
Worked example
Given this event loss table:
event 
occurrence rate 
loss 

1 
0.01 
$1100 
2 
0.035 
$500 
3 
0.04 
$600 
4 
0.1 
$200 
5 
0.05 
$800 
To calculate the AAL we sum rate x loss
, which gives us an AAL of $112.50.
event 
occurrence rate 
loss 
rate x loss 

1 
0.01 
$1100 
$11.0 
2 
0.035 
$500 
$17.5 
3 
0.04 
$600 
$24.0 
4 
0.1 
$200 
$20.0 
5 
0.05 
$800 
$40.0 
Total 
0.235 
$3200 
$112.50 
You will notice that the AAL is lower than the loss from any individual event, but this is because it is annualized. For example, the event with the highest loss ($1100) is likely to occur every hundred years, so averaging it over that period gives us an $11 annual loss from that specific event.
To calculate the standard deviation we use rate x loss²
.
Summing this gives us $71250.
Taking the square root of that then gives us a standard deviation of $266.93.
event 
occurrence rate 
loss 
rate x loss² 

1 
0.01 
$1100 
12100 
2 
0.035 
$500 
8750 
3 
0.04 
$600 
14400 
4 
0.1 
$200 
4000 
5 
0.05 
$800 
32000 
Total 
71250 
Pipeline
The following pipeline code will apply the above weighted eventbased AAL calculations to the probabilistic model results.
event_loss_table
>
group(
select: {
sum(total_loss * occurrence_rate) as AAL_mean,
square_root(
sum(
pow(total_loss, 2) * occurrence_rate
)
) as AAL_stddev
})
>
save('averageloss', format: 'csv')
Annual Exceedance Probability
Each event in the results already has an annual rate associated with it, which we can use to calculate the rate of exceedance of any given loss level.
Worked example
Given this event loss table:
event 
occurrence rate 
loss 

1 
0.01 
$1100 
2 
0.035 
$500 
3 
0.04 
$600 
4 
0.1 
$200 
5 
0.05 
$800 
We then sum the occurrence rate for each event that exceeds a given loss level, which gives us the total rate of exceedance. Applying this to our example event loss table gives us:
loss level 
rate of exceedance 

100 
0.235 
250 
0.135 
500 
0.1 
750 
0.06 
1000 
0.01 
We can then use the rate of exceedance to calculate the Annual Exceedance Probability (AEP) with 1  exp(λ * T)
.
loss level 
rate of exceedance 
calculation 
AEP 

100 
0.235 

0.209 
250 
0.135 

0.126 
500 
0.1 

0.095 
750 
0.06 

0.058 
1000 
0.01 

0.01 
A return period, or Average Recurrence Interval (ARI), can also be calculated from the rate.
loss level 
rate of exceedance 
calculation 
ARI 

100 
0.235 

4.26 
250 
0.135 

7.41 
500 
0.1 

10.0 
750 
0.06 

16.67 
1000 
0.01 

100.0 
Pipeline
The following pipeline code will produce an AEP table for a weighted eventbased probabilistic model.
First, we match every losslevel we are interested in to every eventloss result.
We then sum the occurrence rates for each event that exceeds a given losslevel. This gives us the total rate of exceedance for that particular loss level.
We then use the rate_of_exceedance
to calculate the AEP and return period.
event_loss_table
>
select({*, $loss_levels as loss_level})
>
unnest('loss_level')
>
group(
by: loss_level,
select: {
loss_level,
count(total_loss >= loss_level) as count,
sum(if_then_else(total_loss >= loss_level, occurrence_rate, 0.0)) as rate_of_exceedance,
})
>
# convert the rate of exceedance to a probability */
select({*,
annual_exceedance_probability: 1  exp((0.0  rate_of_exceedance) * 1),
return_period: 1 / rate_of_exceedance
})
>
sort('loss_level')
>
save('exceedancetable', format: 'csv')