5.3 Aplicación en riesgos potenciales
Vamos a aplicar los conocimientos adquiridos usando la siguiente información:
# | Riesgo cibernético | Distribución de frecuencia | Param1 | Param2 | Distribución de severidad | Param1 | Param2 | Param3 |
---|---|---|---|---|---|---|---|---|
1 | Intentos de acceso no autorizado a sistemas/datos | Binomial | 40.00 | 0.10 | Exponencial | 0.01 | ||
2 | Ataque escalado a los privilegios | Poisson | 12.30 | Lognormal | 5.00 | 0.70 | ||
5 | Ataque de malware | Poisson | 10.00 | Burr | 2.00 | 3.00 | 0.00125 |
convolucion_BP <- function(n_sim = 10000,
d_freq = "poisson", param_freq = list(lambda = 3),
d_sev = "lognormal", param_sev = list(meanlog = 0, sdlog = 1)) {
# Crear vector para almacenar pérdidas
perdidas <- numeric(n_sim)
for (i in 1:n_sim) {
# Simular número de eventos según d_freq
n_eventos <- switch(d_freq,
"poisson" = rpois(1, param_freq$lambda),
"binomial" = rbinom(1, param_freq$size, param_freq$prob),
stop("Distribución de frecuencia no soportada"))
# Si hay eventos, simular pérdidas individuales
if (n_eventos > 0) {
perdidas_evento <- switch(d_sev,
"lognormal" = rlnorm(n_eventos, meanlog = param_sev$meanlog, sdlog = param_sev$sdlog),
"normal" = rnorm(n_eventos, mean = param_sev$mean, sd = param_sev$sd),
"exponencial" = rexp(n_eventos, rate = param_sev$rate),
stop("Distribución de severidad no soportada"))
perdidas[i] <- sum(perdidas_evento)
}
}
return(list(perdidas=perdidas,PE = mean(perdidas),VaR95 = quantile(perdidas, 0.95), VaR99 = quantile(perdidas, 0.99)))
}
En el caso del primer ejemplo, la pérdida sería:
set.seed(1)
e1 <- convolucion_BP(n_sim = 10000,d_freq = "binomial",d_sev = "exponencial",
param_freq = list(size = 40, prob = 0.10),
param_sev = list(rate = 0.01))
e1$PE
## [1] 400.8696
Es tu turno, calcula la severidad en los casos restantes.