Maulana Diki Wicaksono-23031030001-UAS Teknik Simulasi
Soal 3
take home : Kerjakan salah satu simulasi (nomor 1 atau 2) di atas dengan menggunakan R dan laporkan hasilnya. Gunakan set seed sesuai 4 digit terakhir NIM saudara.
Nomor 1
1. (35 poin) PT Ogah Rugi merupakan sebuah perusahaan asuransi yang bergerak dalam perlindungan kendaraan roda empat. Berdasarkan catatan PT Ogah Rugi pada periode 2021-2024, diketahui bahwa banyaknya klaim tiap bulan berdistribusi Poisson dengan rata-rata sebesar 3, sedangkan besarnya masing-masing klaim (dalam ribuan rupiah) berdistribusi Gamma dengan parameter α = 4 dan β = 3500.
PT Ogah Rugi bermaksud menetapkan suatu deductible sedemikian rupa
sehingga (1) PT Ogah Rugi tidak perlu membayar klaim yang nilainya
kurang dari besar deductible tersebut dan (2) PT Ogah Rugi akan
membayarkan manfaat sebesar selisih dari deductible dan klaim pelanggan.
Sebagai contoh, bila ditetapkan deductible sebesar Rp 2 juta, maka
Klaim asuransi Pak Ari sebesar Rp 1.600.000 akan ditolak (tidak
dibayarkan oleh PT Ogah Rugi), dan
Klaim asuransi Pak Bagas sebesar Rp 8.250.000 hanya ditanggung sebesar Rp 6.250.000 oleh PT Ogah Rugi, sisanya ditanggung sendiri oleh Pak Bagas.
PT Ogah Rugi ingin melakukan simulasi guna mengetahui total klaim tahunan yang harus ditanggung oleh PT Ogah Rugi dengan adanya kebijakan deductible tersebut. Menurut manajer, deductible harus ditetapkan antara Rp 500.000 hingga Rp 2.500.000 (naik dengan kelipatan Rp 500.000).
a) (15 poin) Jelaskan secara rinci langkah-langkah simulasi yang perlu dilakukan untuk menyelesaikan masalah tersebut! Perhatikan bahwa prosedur simulasi harus memuat perulangan minimal 500 kali.
b) (10 poin) Sebutkan perintah dalam R yang perlu digunakan untuk menyelesaikan masalah di atas, beserta kegunaannya.
c) (10 poin) Diperkirakan bahwa besar deductible akan berbanding terbalik dengan total klaim tahunan. Berikan satu parameter lain yang seharusnya dipertimbangkan oleh manajer PT Ogah Rugi dalam menetapkan besar deductible. Dapatkah parameter ini diperoleh nilainya dari prosedur simulasi? Jelaskan!
Langkah Simulasi
A. Setup Parameter
# Reproducibility
set.seed(0001)
# PARAMETER SIMULASI
nsim <- 3000 # jumlah pengulangan
lambda <- 3 # rata-rata klaim Poisson per bulan
alpha <- 4 # shape Gamma
beta_thousand <- 3500 # scale Gamma (dalan ribuan rupiah)
n_months <- 12 # klaim per tahun (12 bulan)
# daftar deductible (rupiah)
deductibles <- seq(500000, 2500000, by = 500000)B. Fungsi Simulasi
# Fungsi Smiluasi 1 Tahun untuk Deductible (d)
simulate_one_year <- function(d, lambda, alpha, beta_thousand) {
total_pay <- 0
for (m in 1:12) {
n_claims <- rpois(1, lambda) # jumlah klaim bulan ke-m
if (n_claims > 0) {
claims_thousand <- rgamma(n_claims, shape = alpha,
scale = beta_thousand) # klaim (ribuan rupiah)
claims_rp <- claims_thousand * 1000 # konversi ke rupiah
payments <- pmax(0, claims_rp - d) # pembayaran setelah deductible
total_pay <- total_pay + sum(payments)
}
}
return(total_pay)
}C. Looping Simulasi
D. Hasil Simulasi
### Summary Metrik
compute_metrics <- function(x, alpha = 0.95) {
mean_x <- mean(x)
sd_x <- sd(x)
median_x <- median(x)
p90 <- quantile(x, 0.90)
p95 <- quantile(x, 0.95)
# Expected Shortfall (ES95)
q95 <- as.numeric(p95)
es95 <- mean(x[x > q95])
# 95% Confidence Interval untuk mean
se <- sd_x / sqrt(length(x))
ci_lower <- mean_x - 1.96 * se
ci_upper <- mean_x + 1.96 * se
# Contoh threshold risiko (misal 500 juta)
prob_over_500m <- mean(x > 500e6)
return(list(mean = mean_x,
sd = sd_x,
median = median_x,
p90 = p90,
p95 = p95,
ES95 = es95,
ci_lower = ci_lower,
ci_upper = ci_upper,
prob_over_500m = prob_over_500m))
}# Summary Tabel
metrics_list <- lapply(results, compute_metrics)
summary_table <- do.call(rbind, lapply(names(metrics_list), function(nm) {
m <- metrics_list[[nm]]
data.frame(
deductible = as.numeric(nm),
mean = m$mean,
sd = m$sd,
median = m$median,
p90 = m$p90,
p95 = m$p95,
ES95 = m$ES95,
ci_lower = m$ci_lower,
ci_upper = m$ci_upper,
prob_over_500m = m$prob_over_500m
)
}))
rownames(summary_table) <- NULL
print(summary_table)## deductible mean sd median p90 p95 ES95
## 1 500000 487323530 93593217 482571790 609682973 649849265 692731844
## 2 1000000 468586182 88031349 464366880 585695918 618260302 658960259
## 3 1500000 449711845 88820331 445465974 567723299 607297341 645812268
## 4 2000000 432242903 81803297 429516758 540264026 572185652 608462634
## 5 2500000 415140806 82280484 411970550 523534258 559704058 595471000
## ci_lower ci_upper prob_over_500m
## 1 483974340 490672720 0.4306667
## 2 465436020 471736343 0.3476667
## 3 446533450 452890239 0.2726667
## 4 429315610 435170197 0.2006667
## 5 412196436 418085175 0.1506667
E. Visualisasi
a. Plot Mean Pembayaran VS Deductible
# PLOT RATA-RATA VS DEDUCTIBLE
plot(summary_table$deductible,
summary_table$mean,
type = "b", pch = 19,
ylim = c(min(summary_table$ci_lower), max(summary_table$ci_upper)),
xlab = "Deductible (Rp)",
ylab = "Rata-rata Pembayaran Tahunan",
main = "Rata-rata Pembayaran vs Deductible")
# Tambahkan error bar CI
arrows(summary_table$deductible, summary_table$ci_lower,
summary_table$deductible, summary_table$ci_upper,
angle = 90, code = 3, length = 0.08)b. Histogram untuk Deductible
#HISTOGRAM SETIAP DEDUCTIBLE
par(mfrow = c(2, 3))
for (d in names(results)) {
hist(results[[d]],
breaks = 40,
main = paste("Pembayaran Tahunan\nDeductible:", d),
xlab = "Total Pembayaran (Rp)")
}c. Boxplot Setiap Deductible
par(mar = c(5, 4, 4, 4))
df_long <- stack(results)
names(df_long) <- c("pembayaran", "deductible")
boxplot(pembayaran ~ deductible, data = df_long,
main = "Boxplot Pembayaran: Berbagai Deductible",
xlab = "Deductible",
ylab = "Pembayaran Tahunan (Rp)",
las = 2,
cex.axis = 0.8,
cex.lab = 0.9)