DCF 모델 빌더은(는) 무엇을 하나요?
개요
이 스킬은 투자은행 기준을 따르는 기관 수준의 DCF 모델을 생성하여 기업 가치를 평가합니다. 각 분석은 상세한 Excel 모델(DCF 시트 하단에 민감도 분석 포함)을 생성합니다.
도구
- 사용자가 제공한 모든 정보와 데이터 소싱에 사용 가능한 MCP 서버를 기본적으로 활용합니다.
중요 제약 사항 — 먼저 읽어주세요
이 제약 사항은 모든 DCF 모델 구축 과정에 적용됩니다. 시작하기 전에 검토하세요:
환경: Office JS vs Python/openpyxl:
- Excel 내에서 실행 중인 경우(Office 추가 기능 / Office JS 환경): Office JS를 직접 사용하고 Python/openpyxl을 사용하지 마세요.
range.formulas = [["=D19*(1+$B$8)"]]와 같이 수식을 작성하세요. 별도의 재계산 단계가 필요하지 않습니다. Excel이 기본적으로 계산합니다. 스타일링에는range.format.*를 사용하세요. 동일한 수식-대-하드코드 규칙이 적용됩니다. 파생 셀에는.values대신.formulas를 설정하세요. - 독립 실행형 .xlsx 파일을 생성하는 경우(실시간 Excel 세션 없음): 아래 설명된 대로 Python/openpyxl을 사용한 후 전달 전에
recalc.py를 실행하세요. - 이 스킬의 나머지 부분은 openpyxl 예제를 사용합니다. Office JS 환경에서는 Office JS API 호출로 변환하세요. 그러나 모든 원칙(수식 문자열, 셀 주석, 섹션 체크포인트, 민감도 테이블 루프)은 동일하게 적용됩니다.
⚠️ Office JS 병합된 셀 함정: 병합된 셀로 섹션 헤더를 작성할 때 병합된 범위에서 .merge()를 호출한 다음 .values를 설정하지 마세요. Office JS는 여전히 범위의 원래 차원을 보고하며 InvalidArgument: 입력 배열의 행 또는 열 수가 범위의 크기 또는 차원과 일치하지 않습니다 오류를 발생시킵니다. 대신 단일 셀에 값을 먼저 기록한 다음 전체 범위를 병합하고 서식을 지정하세요:
// 잘못된 방법 — InvalidArgument 발생:
const hdr = ws.getRange("A7:H7");
hdr.merge();
hdr.values = [["시장 데이터 및 주요 입력"]]; // 1x1 배열 vs 1x8 범위 → 실패
// 올바른 방법 — 단일 셀에 값을 먼저 기록한 다음 병합 + 서식 지정:
ws.getRange("A7").values = [["시장 데이터 및 주요 입력"]];
const hdr = ws.getRange("A7:H7");
hdr.merge();
hdr.format.fill.color = "#1F4E79";
hdr.format.font.bold = true;
hdr.format.font.color = "#FFFFFF";
이는 DCF의 모든 병합된 섹션 헤더(시장 데이터, 시나리오 블록, 현금흐름 예측, 잔존 가치, 가치 평가 요약, 민감도 테이블)에 적용됩니다.
하드코드 대신 수식 사용 (절대적 규칙):
- 모든 예측, 마진, 할인 계수, PV 및 민감도 셀은 반드시 라이브 Excel 수식이어야 합니다. Python에서 계산된 값을 숫자로 기록해서는 안 됩니다.
- openpyxl 사용 시:
ws["D20"] = "=D19*(1+$B$8)"가 올바릅니다.ws["D20"] = calculated_revenue는 잘못된 방법입니다. - 허용되는 유일한 하드코딩된 숫자는 다음과 같습니다: (1) 원시 과거 데이터 입력, (2) 가정 드라이버(성장률, WACC 입력, 잔존 성장률), (3) 현재 시장 데이터(주가, 부채 잔액).
- Python에서 무언가를 계산하고 결과를 기록하는 자신을 발견하면 즉시 중단하세요. 모델은 사용자가 가정을 변경할 때 유연하게 대응해야 합니다.
사용자와 단계별로 확인 (처음부터 끝까지 바로 구축하지 마세요):
- 데이터 검색 후 → 사용자에게 원시 데이터 블록(수익, 마진, 주식 수, 순부채)을 보여주고 예측 전에 확인을 받으세요.
- 수익 예측 후 → 예측된 매출과 성장률을 보여주고 마진 구축 전에 확인하세요.
- FCF 구축 후 → 전체 FCF 일정을 보여주고 WACC 계산 전에 논리를 확인하세요.
- WACC 계산 후 → 계산과 입력을 보여주고 할인 전에 확인하세요.
- 잔존 가치 + PV 후 → 자기자본 브리지(EV → 자기자본 가치 → 주당 가치)를 보여주고 민감도 테이블 전에 확인하세요.
- 각 단계에서 오류를 포착하세요. 민감도 테이블 구축 후 잘못된 마진 가정이 발견되면 모든 하위 항목을 다시 구축해야 합니다.
민감도 테이블:
- 행과 열에 홀수 개수를 사용하세요(표준: 5x5, 때로는 7x7) — 이는 항상 정확한 중앙 셀을 보장합니다.
- 중앙 셀 = 기본 사례. 중간 행 헤더와 중간 열 헤더가 모델의 실제 가정과 정확히 일치하도록 축 값을 구축하세요(예: 기본 WACC = 9.0%인 경우 중간 행은 9.0%, 잔존 성장률 = 3.0%인 경우 중간 열은 3.0%). 따라서 중앙 셀의 출력은 모델의 실제 암시적 주가와 같아야 합니다. 이것이 테이블이 올바르게 구축되었는지 확인하는 검증 기준입니다.
- 중앙 셀을 강조 표시하려면 중간 파란색 채우기(
#BDD7EE) + 굵은 글꼴을 사용하여 기본 사례 셀을 즉시 확인할 수 있도록 하세요. - 모든 셀(일반적으로 3개 테이블 × 25개 셀 = 75개)을 전체 DCF 재계산 수식으로 채웁니다.
- openpyxl 루프(또는 Office JS 루프)를 사용하여 프로그래밍 방식으로 수식을 작성하세요.
- 플레이스홀더 텍스트, 선형 근사, 수동 단계가 필요하지 않습니다.
- 각 셀은 해당 가정 조합에 대해 전체 DCF를 재계산해야 합니다.
셀 주석:
- 각 하드코딩된 값이 생성될 때 셀 주석을 추가하세요.
- 형식: "출처: [시스템/문서], [날짜], [참조], [URL(해당하는 경우)]"
- 모든 파란색 입력은 다음 섹션으로 이동하기 전에 주석이 있어야 합니다.
- 끝으로 연기하거나 "TODO: 출처 추가"를 작성하지 마세요.
모델 레이아웃 계획:
- 수식을 작성하기 전에 모든 섹션의 행 위치를 정의하세요.
- 먼저 모든 헤더와 레이블을 작성하세요.
- 두 번째로 모든 섹션 구분선과 빈 행을 작성하세요.
- 그런 다음 고정된 행 위치를 사용하여 수식을 작성하세요.
- 생성 직후 수식을 테스트하세요.
수식 재계산:
- 전달하기 전에
python recalc.py model.xlsx 30을 실행하세요. - 상태가 "성공"이 될 때까지 모든 오류를 수정하세요.
- 수식 오류가 전혀 없어야 합니다(#REF!, #DIV/0!, #VALUE! 등).
시나리오 블록:
- 베어/베이스/불 케이스에 대해 별도의 블록을 만드세요.
- 각 블록 내에서 예측 연도에 걸쳐 가정을 수평으로 표시하세요.
- IF 수식 사용:
=IF($B$6=1,[Bear 셀],IF($B$6=2,[Base 셀],[Bull 셀])) - 수식이 올바른 시나리오 블록 셀을 참조하는지 확인하세요.
DCF 프로세스 워크플로우
1단계: 데이터 검색 및 검증
MCP 서버, 사용자 제공 데이터 및 웹에서 데이터를 가져옵니다.
데이터 소스 우선순위:
- MCP 서버 (구성된 경우) - Daloopa와 같은 제공업체의 구조화된 재무 데이터
- 사용자 제공 데이터 - 사용자의 연구에서 얻은 과거 재무 데이터
- 웹 검색/가져오기 - 필요할 때 현재 가격, 베타, 부채 및 현금
검증 체크리스트:
- 순부채 vs 순현금 확인(평가에 중요)
- 희석된 발행 주식 수 확인(최근 자사주 매입/발행 확인)
- 과거 마진이 비즈니스 모델과 일치하는지 확인
- 수익 성장률을 업계 벤치마크와 교차 확인
- 세율이 합리적인지 확인(일반적으로 21-28%)
2단계: 과거 분석 (3-5년)
분석 및 문서화:
- 수익 성장 추세: CAGR 계산, 성장 동인 식별
- 마진 추이: 총 마진, EBIT 마진, FCF 마진 추적
- 자본 집약도: D&A 및 CapEx(매출 대비 %)
- 운전자본 효율성: NWC 변화(매출 성장 대비 %)
- 수익성 지표: ROIC, ROE 추세
요약 테이블 생성:
과거 지표 (LTM):
수익: X백만 달러
수익 성장률: X% CAGR
총 마진: X%
EBIT 마진: X%
D&A(매출 대비 %): X%
CapEx(매출 대비 %): X%
FCF 마진: X%
3단계: 수익 예측 구축
방법론:
- 최신 실제 수익(LTM 또는 가장 최근 회계연도)에서 시작
- 각 예측 연도에 성장률 적용
- 달러 금액과 계산된 성장률(%)을 모두 표시
성장률 프레임워크:
- 1-2년차: 근접 가시성을 반영한 높은 성장
- 3-4년차: 업계 평균으로 점진적 완화
- 5년차+: 잔존 성장률에 근접
수식 구조:
- 수익(Y