보험 도메인 심화 · 아직 오지 않은 사고와 나눠 진 위험 · 실습
IBNR 을 세고 출재를 대사하기
목표
데이터에 없는 사고를 세는 방법을 익히고, 준비금이 어떤 조각으로 이루어지는지, 재보험 출재가 어긋났을 때 어느 순서로 좁혀 들어가는지를 손으로 해 볼 수 있게 됩니다.
왜 중요한가
결산 시점의 사고 데이터는 언제나 덜 자란 상태입니다. 6월 30일에 6월 사고를 세면 적게 나오는데, 그것은 사고가 적었던 것이 아니라 아직 접수될 시간이 없었던 것입니다. 이 차이를 모르고 "이번 달 손해율이 좋아졌다" 고 보고하면 다음 달에 원래 자리로 돌아오고, 그때는 왜 갑자기 나빠졌냐는 회의가 열립니다.
아직 오지 않은 건의 양은 추측이 아니라 계산입니다. 다 자란 사고월에서 접수 지연 분포를 뽑아 두면, 덜 자란 달이 지금 몇 퍼센트까지 왔는지 알 수 있습니다. 이 실습의 데이터는 결산 기준일이 2026-06-30 이고 접수 지연은 최대 5개월이라, 5개월을 다 채운 사고월은 2026-01 까지 입니다.
준비금은 두 조각입니다.
미지급 발생손해 발생손해액 − 기지급액. 이미 접수된 건의 남은 몫IBNR 추정액 미접수 추정 건수 × 건당 평균 발생손해액두 번째 조각의 평균을 잡을 때 1억을 넘는 대형 건은 빼야 합니다. 대형 건은 따로 개별 추산하는 것이 통상적인 처리이고, 평균에 섞으면 준비금이 억 단위로 부풀려집니다.
마지막으로 재보험입니다. 이 데이터에는 모든 손해에 QS30 비례재보험이 걸려 있어 발생손해액의 30%가 출재됩니다. 그런데 출재 내역이 두 곳에 있습니다 — 회계 원장(월 단위 계상)과 재보험 관리 시스템(건 단위 등록). 원장이 원수 데이터에서 계산된 값이고, 재보험 시스템은 사람이 등록합니다. 그래서 갈라집니다.
단계
1. 오른쪽 예시의 생성기를 /root/ins/make_reserve.py 로 저장하고 python3 make_reserve.py 로 실행하세요. 손해 1,296건, 출재 1,293건, 원장 12개월이 만들어집니다.
2. 사고월 × 접수 지연 개월수 표를 /root/ins/triangle.csv 에 accident_ym,lag0,lag1,lag2,lag3,lag4,lag5,reported 로 적으세요. 사고월 12줄 전부가 들어가야 합니다.
3. 5개월을 다 채운 사고월(2025-07 ~ 2026-01)만 모아 /root/ins/lagrate.csv 에 lag,claims,cum_claims,cum_permille 여섯 줄을 적으세요. cum_permille 은 누적을 전체로 나눈 천분율 정수입니다.
4. 아직 다 자라지 않은 사고월의 최종 건수를 추정해 /root/ins/ibnr.csv 에 accident_ym,reported,max_lag,cum_claims,ultimate,ibnr 로 적으세요.
5. /root/ins/reserve.txt 에 outstanding=, ibnr_claims=, avg_incurred_excl_large=, ibnr_amount=, reserve_total=, avg_incurred_incl_large=, reserve_if_incl_large=, overstated_by= 여덟 줄을 적으세요.
6. 원장과 재보험 시스템을 사고월 단위로 대사해 차이가 0이 아닌 달을 /root/ins/cession_diff.csv 에 accident_ym,ledger,system,diff 로 적고, 건 단위로 좁혀 /root/ins/cession_claims.csv 에 claim_no,accident_ym,incurred,expected,recorded,diff 로 적으세요.
7. /root/ins/netloss.txt 에 gross_incurred=, ceded=, net_retained=, big_claim=, big_net=, net_excl_big=, big_share_pct= 일곱 줄을 적으세요. 출재액은 원장 값을 쓰세요.
8. /root/ins/reserve_report.md 에 ## 확인한 것, ## 준비금, ## 출재 대사, ## 대형 사고, ## 권고 다섯 절로 보고서를 쓰세요. 권고는 세 항목 이상이어야 합니다.
참고
- 두 연월의 개월 차이는
연 × 12 + 월로 바꿔 빼면 됩니다. 문자열 비교로는 나오지 않습니다. - SQLite 의
SUM(lag=0)은 조건이 참인 행을 세어 줍니다.CASE WHEN을 길게 쓰지 않아도 됩니다. - 흔한 실수 1: 3단계에서 전체 사고월로 비율을 뽑는 것. 아직 자라는 중인 달이 섞이면 당월 접수 비율이 실제보다 높게 나옵니다.
- 흔한 실수 2: 4단계에서 나눗셈을 먼저 하는 것. 정수 연산에서는 몫이 1 이 되어 추정치가 그대로 나옵니다.
- 흔한 실수 3: 5단계에서 대형 건을 평균에 포함하는 것. 준비금이 1억 가까이 부풀려집니다.
- 흔한 실수 4: 6단계를 월 단위에서 멈추는 것. "9월이 안 맞습니다" 로는 아무도 손댈 수 없습니다.
단계 8개
- 결산 데이터 만들기
- 지연 삼각형 만들기
- 다 자란 달에서 보고율 뽑기
- 아직 접수되지 않은 건 추정하기
- 준비금을 두 조각으로 계산하기
- 원장과 재보험 시스템 대사하기
- 대형 사고 한 건의 재무 영향 재기
- 결산 보고서 쓰기