한국은행이 7월 기준금리를 2.75%로 올리면서 금리커브가 다시 시장의 화두가 됐다. 커브 관련 업무 — 채권·스왑 평가, ALM 갭 분석, 리스크 측정 — 의 출발점은 언제나 같다. 시장에서 관찰되는 금리(예금·스왑 레이트)로부터 제로커브(zero curve)를 구성하는 것, 이른바 부트스트래핑(bootstrapping)이다.
개념은 교과서에 다 있지만, 실무 구현에서 틀리는 지점은 따로 있다. 이 글은 최소한의 파이썬 코드로 부트스트래핑의 뼈대를 만들고, 실무에서 흔히 밟는 함정을 짚는다.
1. 뼈대: 스왑 레이트에서 제로커브로
연 1회 이자교환을 가정한 단순화된 스왑 커브를 예로 들자. 만기 t년의 파(par) 스왑 레이트 s_t는 “고정 레그의 현재가치 = 1″이 되는 쿠폰이다. 1년부터 순서대로 풀면 각 만기의 할인계수(discount factor)가 하나씩 결정된다.
# 파 스왑 레이트 → 할인계수 부트스트래핑 (연 1회 지급 단순화 버전)
import numpy as np
tenors = np.array([1, 2, 3, 5, 7, 10]) # 만기(년)
swap = np.array([0.0285, 0.0291, 0.0296, 0.0304, 0.0309, 0.0315]) # 파 레이트(예시)
# 중간 만기(4, 6, 8, 9년)는 파 레이트를 선형보간해 채운다
grid = np.arange(1, 11)
par = np.interp(grid, tenors, swap)
df = np.zeros(len(grid)) # 할인계수 저장
for i in range(len(grid)):
# 파 조건: s·Σdf[0..i-1] + (1 + s)·df[i] = 1 (s = 해당 만기의 파 레이트)
annuity = df[:i].sum() # 앞 만기 할인계수의 합(연금계수)
df[i] = (1 - par[i] * annuity) / (1 + par[i])
zero = df ** (-1 / grid) - 1 # 연복리 제로금리로 변환
for t, z, d in zip(grid, zero, df):
print(f"{t:2d}Y zero {z*100:5.2f}% df {d:.6f}")
핵심 재귀식은 한 줄이다: df[i] = (1 - s·Σdf) / (1 + s). 앞 만기의 할인계수 합(연금계수)이 뒤 만기를 결정하는 구조라서, 앞 구간의 오류가 뒤로 전부 전파된다. 그래서 커브는 짧은 만기부터 검증해야 한다.
2. 실무에서 틀리는 지점들
함정 1 — 데이카운트와 지급주기
위 코드는 연 1회·연 단위 만기라는 교과서 가정을 썼다. 실제 원화 IRS는 분기 지급이고, 데이카운트(Act/365 등)에 따라 각 기간의 연금계수가 달라진다. “엑셀과 시스템의 커브가 4bp 다른” 사건의 절반은 데이카운트 불일치에서 나온다.
함정 2 — 보간을 어디에 거는가
파 레이트에 보간할지, 제로금리에 할지, 할인계수(또는 로그 할인계수)에 할지는 결과가 다른 모델 선택이다. 특히 포워드 금리는 보간 방식에 극도로 민감하다. 제로금리 선형보간은 구현이 쉽지만 포워드가 계단식으로 튀는 부작용이 있고, 평가 목적에 따라 허용될 수도, 안 될 수도 있다. 어떤 방식을 쓰는지 문서화되어 있지 않다면 그것부터가 리스크다.
함정 3 — 검증은 리프라이싱으로
완성된 커브의 최소 검증은 “입력으로 쓴 상품을 그 커브로 다시 평가하면 파 값이 나오는가”다.
# 검증: 만들어진 df로 각 만기 파 스왑을 리프라이싱
for i, t in enumerate(grid):
annuity = df[:i+1].sum()
par_check = (1 - df[i]) / annuity # 커브가 내재하는 파 레이트
assert abs(par_check - par[i]) < 1e-10, f"{t}Y 리프라이싱 실패"
이 한 줄의 assert가 배포 전 커브 엔진의 회귀 테스트가 된다. 커브 수정·라이브러리 교체·데이터 소스 변경 때마다 자동으로 돌게 만들어 두면, “커브가 조용히 틀어지는” 사고를 구조적으로 막는다.
3. 금리 국면 전환기에 커브 인프라를 점검해야 하는 이유
금리가 움직이면 커브의 형태(기울기·굽음)가 변하고, 평평한 커브에서 보이지 않던 보간·데이카운트의 차이가 수치로 드러난다. 인상기가 시작된 지금이 커브 구성 로직을 다시 열어볼 적기다.
예시 레이트는 설명을 위한 가상의 수치이며, 특정 시점의 시장 호가가 아니다.