- Published on
보험 도메인 완전 가이드 — 생명보험부터 손해보험, 보험료 산출까지
- Authors
- Name

들어가며
은행, 증권과 함께 금융 3대 축 중 하나인 보험. 하지만 개발자에게 보험 도메인은 낯설기만 합니다. 언더라이팅? 보험계리? 손해율? 이 글에서 보험의 A to Z를 정리합니다.
보험의 기본 원리
대수의 법칙 (Law of Large Numbers)
import numpy as np
# 개인의 사고는 예측 불가, 하지만 집단의 사고율은 예측 가능!
n_people = [10, 100, 1000, 10000, 100000]
accident_rate = 0.05 # 실제 사고율 5%
for n in n_people:
accidents = np.random.binomial(n, accident_rate)
observed_rate = accidents / n
print(f" {n:>7}명: 관측 사고율 = {observed_rate:.4f} (오차: {abs(observed_rate - accident_rate):.4f})")
# 10명: 0.1000 (오차: 0.0500) ← 부정확
# 100000명: 0.0498 (오차: 0.0002) ← 거의 정확!
# → 가입자가 많을수록 보험사의 예측이 정확해짐
수지상등의 원칙
총 수입 보험료 = 총 지급 보험금 + 운영비
보험료 = 순보험료(위험보험료) + 부가보험료(사업비)
├── 보험금 지급 재원 ├── 설계사 수수료
└── 보험 리스크 대비 ├── 회사 운영비
└── 이윤
보험의 3대 분류
1. 생명보험 (Life Insurance)
사람의 생사에 관한 보험.
종류:
├── 종신보험: 사망 시 보험금 (평생 보장)
│ └── 보험료 비쌈, 상속/유족 보장 목적
├── 정기보험: 일정 기간 내 사망 시 보험금
│ └── 보험료 저렴, 20~30년 설정
├── 양로보험: 사망 또는 만기 시 보험금
│ └── 저축 + 보장 결합
└── 연금보험: 일정 나이부터 연금 지급
└── 노후 대비, 세제 혜택
# 정기보험료 산출 (간략 모델)
def term_insurance_premium(age, coverage, term_years, mortality_table):
"""
순보험료 = Σ (사망확률 × 보험금 × 할인율)
"""
premium = 0
discount_rate = 0.035 # 예정이율 3.5%
for year in range(term_years):
current_age = age + year
mortality = mortality_table[current_age] # 연령별 사망률
# 해당 연도 사망 시 보험금의 현재 가치
pv = coverage * mortality / (1 + discount_rate) ** (year + 1)
premium += pv
# 연납 순보험료 = 총 PV / 연금현가
annuity_factor = sum(1 / (1 + discount_rate) ** y for y in range(1, term_years + 1))
annual_premium = premium / annuity_factor
# 부가보험료 추가 (사업비율 ~30%)
gross_premium = annual_premium / 0.7
return gross_premium
# 30세, 1억 보장, 20년
# premium = term_insurance_premium(30, 100_000_000, 20, mortality_table)
2. 손해보험 (Property & Casualty Insurance)
재물, 배상책임, 비용에 관한 보험.
종류:
├── 화재보험: 건물, 동산 화재 피해
├── 자동차보험
│ ├── 대인배상 I/II: 타인 사망/상해
│ ├── 대물배상: 타인 재물 손해
│ ├── 자기신체: 내 상해
│ ├── 자차: 내 차 수리
│ └── 무보험차: 무보험 상대방 사고
├── 배상책임보험: 제3자에게 끼친 손해
├── 해상보험: 선박, 화물
└── 보증보험: 채무 불이행 보증
# 자동차 보험료 산출 요소
auto_insurance_factors = {
"차량": {
"차종": "K5 (중형)",
"연식": 2024,
"차량가액": 30_000_000,
"용도": "출퇴근",
},
"운전자": {
"나이": 30,
"성별": "남",
"면허_종류": "1종보통",
"사고_이력": 0, # 최근 3년
"보험_가입_기간": 5, # 년
},
"할인/할증": {
"무사고_할인": -15, # %
"블랙박스_할인": -5,
"마일리지_할인": -10,
"다자녀_할인": 0,
"사고_할증": 0,
}
}
# 손해율 = 지급보험금 / 경과보험료 × 100%
# 합산비율(Combined Ratio) = 손해율 + 사업비율
# < 100%: 보험 영업으로 이익
# > 100%: 투자 수익으로 메워야 함
3. 제3보험 (생손보 경계)
생명보험도 아니고 손해보험도 아닌 "사람의 신체"에 관한 보험:
├── 실손의료보험: 실제 치료비 보상 (가장 중요!)
├── 상해보험: 외부 사고로 인한 상해
├── 질병보험: 암, 뇌졸중, 심근경색 등
├── 간병보험: 장기 요양 상태
└── 치아보험: 치과 치료
보험 핵심 용어
| 용어 | 의미 | 개발자 비유 |
|---|---|---|
| 보험료 | 가입자가 내는 돈 | 구독료 |
| 보험금 | 사고 시 받는 돈 | SLA 보상금 |
| 보험가액 | 보험 대상의 실제 가치 | 서버 교체 비용 |
| 보험가입금액 | 보험 계약 금액 | 보상 한도 |
| 면책기간 | 보장 시작 전 대기 기간 | 쿨다운 |
| 면책금(공제) | 보험금에서 빼는 자기 부담금 | 최소 과금 단위 |
| 언더라이팅 | 가입 심사 | 입력 검증 |
| 보험계리사 | 보험료/준비금 계산 전문가 | 데이터 사이언티스트 |
보험료 산출 구조
총 보험료 (Gross Premium)
├── 순보험료 (Net Premium) — 보험금 지급 재원
│ ├── 위험보험료: 사망/사고 확률 기반
│ └── 저축보험료: 만기 환급금 재원 (저축성 보험)
│
└── 부가보험료 (Loading) — 회사 운영비
├── 신계약비: 설계사 수수료 (첫 해 집중)
├── 유지비: 매년 관리 비용
└── 수금비: 보험료 수납 비용
# 보험료 산출의 3대 기초율
class InsuranceBasicRates:
# 1. 예정위험률 (Mortality/Morbidity Rate)
# → 나이/성별/직업별 사망·사고 확률
# → 생명표, 경험통계 기반
mortality_30_male = 0.00098 # 30세 남성 연간 사망확률 0.098%
# 2. 예정이율 (Assumed Interest Rate)
# → 보험사가 운용 수익으로 벌 것으로 예상하는 이율
# → 높을수록 보험료 ↓ (미래 수익으로 상쇄)
assumed_rate = 0.025 # 2.5% (현재 저금리 시대)
# 3. 예정사업비율 (Expense Ratio)
# → 보험료 중 사업비 비율
expense_ratio = 0.25 # 25%
보험사 경영 지표
손해율 (Loss Ratio)
def loss_ratio(claims_paid, earned_premium):
"""손해율 = 지급보험금 / 경과보험료 × 100"""
return (claims_paid / earned_premium) * 100
# 자동차보험: 손해율 80% (높음)
# 생명보험: 손해율 50% (낮음)
# 실손보험: 손해율 120% (적자!)
합산비율 (Combined Ratio) — 보험사의 성적표
def combined_ratio(loss_ratio, expense_ratio):
"""합산비율 = 손해율 + 사업비율"""
return loss_ratio + expense_ratio
# < 100%: 보험 영업만으로 이익 (언더라이팅 이익)
# = 100%: 손익분기
# > 100%: 적자 → 투자 수익으로 메워야 함
# 한국 손해보험 평균: ~105% (영업은 적자, 투자로 보전)
지급여력비율 (RBC, Risk-Based Capital)
# 보험사의 건전성 지표 (금감원 감독)
def rbc_ratio(available_capital, required_capital):
"""지급여력비율 = 가용자본 / 요구자본 × 100"""
return (available_capital / required_capital) * 100
# 최소 100% 이상 유지 필수
# 150% 이상: 건전 (금감원 권고)
# 100% 미만: 적기시정조치 대상!
InsurTech — 보험 + 기술
전통 보험 → InsurTech
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
대면 설계사 영업 → 앱/웹 다이렉트 가입
종이 청구서 → OCR + AI 자동 심사
일률적 보험료 → IoT + AI 맞춤 보험료
수동 사기 탐지 → ML 이상 탐지
수개월 보험금 지급 → 실시간 자동 지급
# AI 보험 사기 탐지 모델 (개념)
features = {
"claim_amount": 50_000_000, # 청구 금액
"days_since_policy": 30, # 가입 후 경과일 (너무 빠른 청구?)
"previous_claims": 5, # 과거 청구 횟수
"medical_consistency": 0.3, # 진단서-청구 일관성 (낮으면 의심)
"provider_fraud_score": 0.8, # 해당 병원의 사기 이력 점수
"claimant_network_risk": 0.6, # 청구자 네트워크 위험도
}
# XGBoost / LightGBM으로 사기 확률 예측
# fraud_probability = model.predict(features)
# > 0.7이면 SIU(특별조사팀) 자동 이관
개발자가 알면 좋은 보험 시스템
보험 시스템 아키텍처:
├── 계약 관리 (Policy Admin)
│ └── 가입, 변경, 해지, 갱신
├── 언더라이팅 (Underwriting)
│ └── 가입 심사, 위험 평가
├── 보험료 산출 (Rating Engine)
│ └── 보험계리 기반 보험료 계산
├── 보험금 청구 (Claims)
│ └── 접수, 심사, 지급, 사기 탐지
├── 수금 (Billing)
│ └── 보험료 수납, 미납 관리
├── 재보험 (Reinsurance)
│ └── 위험 분산 (보험사의 보험)
└── 계리 (Actuarial)
└── 준비금 산출, 상품 설계
📝 퀴즈 — 보험 도메인 (클릭해서 확인!)
Q1. 보험의 기본 원리인 "대수의 법칙"이란? ||개별 사건은 예측 불가하지만, 충분히 큰 집단에서는 사고 발생률이 통계적으로 안정적으로 수렴한다는 법칙. 가입자가 많을수록 보험사의 리스크 예측이 정확해짐||
Q2. 순보험료와 부가보험료의 차이는? ||순보험료: 보험금 지급 재원 (위험보험료 + 저축보험료). 부가보험료: 회사 운영비 (신계약비 + 유지비 + 수금비). 총 보험료 = 순보험료 + 부가보험료||
Q3. 합산비율(Combined Ratio)이 105%인 보험사의 상태는? ||보험 영업만으로는 5% 적자. 지급보험금 + 사업비가 수입보험료보다 5% 많음. 투자 수익으로 메워야 흑자 달성 가능||
Q4. 실손의료보험의 손해율이 120%를 넘는 이유는? ||의료비 상승 + 과잉 진료 + 도덕적 해이. 보험금 지급액이 수입보험료를 크게 초과. 보험사들이 보험료를 지속 인상하는 이유||
Q5. 예정이율이 높아지면 보험료는? ||낮아진다. 보험사가 운용 수익을 더 많이 벌 것으로 예상하므로, 가입자에게 미리 할인해주는 효과||
Q6. RBC 비율이 100% 미만이면? ||금감원의 적기시정조치 대상. 보험금 지급 능력이 부족한 상태로, 신규 영업 제한/자본 확충 명령 등을 받음||