엑셀 몬테카를로 시뮬레이션, 애드인 있어도 없어도
엑셀 모델에서 몬테카를로 시뮬레이션을 돌리는 방법은 세 가지입니다. RAND() 수식과 데이터 표를 쓰는 방법, 애드인, 엑셀 밖에서 엑셀 파일을 실행하는 도구입니다. 어느 쪽이든 불확실한 입력을 범위에서 뽑아 모델을 수천 번 다시 계산하고, 결과를 확률로 읽습니다. 예산을 넘을 확률, 80% 신뢰 수준에서 넘지 않는 비용, 가장 중요한 입력 같은 답이 나옵니다.
숫자 하나 대신 시뮬레이션하는 이유
스프레드시트는 입력 한 세트에 답 하나를 냅니다. 입력이 추정치이면 그 답이 얼마나 빗나갈 수 있는지 알 수 없고, 답도 대개 낙관적입니다. 최빈 비용을 더하면 비용은 줄어들기보다 초과하기 쉽다는 점이 빠지기 때문입니다. 프로젝트 비용 예제에서 기준 추정치(최빈 비용의 합)는 시뮬레이션 결과의 94.2%에서 실제 비용이 이를 넘습니다. 최선, 기준, 최악 케이스로도 해결되지 않습니다. 답이 세 개 나올 뿐, 각각의 확률은 알려 주지 않습니다.
1. 일반 엑셀, 애드인 없이: RAND() 함수와 데이터 표
엑셀에는 시뮬레이션 명령이 없지만, 작은 모델이라면 함수만으로 충분합니다.
- 불확실한 입력마다 무작위 추출로 바꿉니다.
RAND()는 0과 1 사이의 균등 난수를 반환하고, 역분포 함수가 이를 원하는 범위의 값으로 바꿔 줍니다(수식은 아래 참고). - 계산을 반복합니다. 한 열에 시행 번호 1부터 5,000까지를 넣고, 그 옆 열에서 첫 번호보다 한 행 위에 출력 셀을 가리키는 참조를 둡니다. 그 행부터 아래로 두 열을 선택하고 데이터 › 가상 분석 › 데이터 표를 선택한 다음, 열 입력 셀에 같은 시트의 빈 셀 아무거나 입력합니다. 행마다 엑셀 파일이 다시 계산되므로 행마다 새로운 난수가 뽑힙니다.
- 열을 요약합니다.
AVERAGE,PERCENTILE.INC,COUNTIF(시행 횟수로 나눔)로 평균, P80, 목표 초과 확률을 구하고, 히스토그램 차트로 분포 모양을 봅니다.
| 입력 | 수식 |
|---|---|
| 정규 분포(평균, 표준편차) | =NORM.INV(RAND(), mean, sd) |
| PERT(최소, 최빈, 최대) | =BETA.INV(RAND(), 1+4*(ml-min)/(max-min), 1+4*(max-ml)/(max-min), min, max) |
| 삼각 분포(최소, 최빈, 최대), 추출한 난수는 U에 있음 | =IF(U<(ml-min)/(max-min), min+SQRT(U*(max-min)*(ml-min)), max-SQRT((1-U)*(max-min)*(max-ml))) |
| 리스크 이벤트(확률 p, 비용 c) | =IF(RAND()<p, c, 0) |
이 방법도 통하며 배우기에 좋습니다. 한계는 실제 모델에서 드러납니다.
- 데이터 표는 시행마다 엑셀 파일 전체를 다시 계산하므로 큰 모델은 느려집니다. 계산 옵션을 “데이터 표만 제외하고 자동”으로 두면 그 사이에도 엑셀 파일을 쓸 수 있습니다.
RAND()는 다시 계산할 때마다 새로 추출하므로, 값으로 붙여넣지 않으면 엑셀 파일이 다시 계산될 때마다 결과가 바뀝니다.- 상관관계가 있는 입력, 민감도 분석, 보고서는 모두 직접 수식과 차트를 만들어야 합니다.
2. 엑셀 애드인
@RISK, Crystal Ball, Analytic Solver, ModelRisk 같은 애드인은 엑셀에 분포 함수(예: 셀에 입력하는 PERT 함수)를 더하고, 시행을 대신 실행하며, 차트, 민감도 분석, 보고서를 만듭니다. 엑셀 안에서 실행되므로 사용자마다 엑셀과 애드인을 설치해야 하는데, 많은 회사에서는 IT 부서에 요청해야 합니다.
3. 엑셀 밖에서 엑셀 파일을 실행하는 도구
세 번째는 자체 계산 엔진으로 .xlsx 파일을 읽어 시행을 직접 실행하는 도구입니다. xellstorm이 브라우저에서 이 방식으로 동작합니다.
- 가지고 있는 엑셀 파일을 엽니다. 계산은 브라우저 탭에서 하고, 파일은 업로드하지 않습니다. 호환성 검사가 수식을 엑셀이 저장한 값과 비교해, 엔진이 계산하지 못하는 셀을 표시합니다.
- 모델 맵에서 불확실한 입력을 클릭해 범위를 주고, 추적할 결과를 클릭합니다. 엑셀 파일이 이미
NORM.INV(RAND(), …)나 @RISK, ModelRisk, Analytic Solver의 일반적인 분포 함수를 쓰고 있다면, 지원되는 수식은 파라미터가 셀에 연결된 채 그대로 입력이 됩니다. 위에서 PERT에 쓴BETA.INV수식도 변환되고, 산술식으로 쓴 모양 인수는 연결된 채 실행 전에 계산됩니다(엑셀의 PERT 분포 참고). - 실행에는 시드를 쓰므로 같은 모델은 매번 같은 숫자를 내고, 대부분의 엑셀 파일에서는 시행마다 바뀌는 셀만 다시 계산합니다.
세 가지 방법 비교
| 일반 엑셀 | 엑셀 애드인 | xellstorm | |
|---|---|---|---|
| 설치 | 불필요 | 엑셀에 애드인 설치 | 불필요: 브라우저에서 실행 |
| 분포 | 수식으로 직접 구성 | 다수, 함수 형태 | 48개, 직접 만든 표 포함 |
| 시행 반복 | 데이터 표, 엑셀 파일 전체를 다시 계산 | 내장 | 내장, 대부분의 엑셀 파일에서 바뀌는 부분만 다시 계산 |
| 다음에도 같은 숫자 | 아니요, 값으로 붙여넣지 않으면 | 시드를 고정하면 | 시드를 쓰면 CPU 코어 수와 관계없이 |
| 상관관계, 민감도, 보고서 | 직접 만든 수식과 차트 | 내장 | 내장 |
결과 읽는 법
- 평균
- 시뮬레이션 결과 전체의 평균입니다. 입력이 한쪽으로 치우쳐 있으면 최빈 입력으로 계산한 결과와 다릅니다.
- 백분위수(P10, P50, P80, P90)
- 결과의 10%, 50%, 80%, 90%가 그 값 이하에 머무르는 값입니다. P50은 중앙값이고, P80과 P90은 흔히 쓰는 예산 수준입니다(P 수준 더 알아보기).
- 목표 조건의 확률
- 총비용이 예산을 초과하는 것처럼 어떤 조건을 충족하는 결과의 비율입니다.
- S커브
- 결과값에 따른 누적 확률을 그린 곡선입니다. 어떤 백분위수든, 어떤 값 이하로 끝날 확률이든 읽을 수 있습니다.
- 토네이도 차트
- 다른 입력은 중앙값에 둔 채 입력 하나를 낮은 백분위수에서 높은 백분위수로 움직일 때 결과가 얼마나 움직이는지 보여 줍니다. 막대가 가장 넓은 입력이 가장 중요한 입력입니다(토네이도 차트).
- CVaR(최악 5% 평균)
- 최악 5% 결과의 평균입니다. 나쁜 경우가 얼마나 자주 일어나는지뿐 아니라 얼마나 나쁜지를 보여 줍니다(최악의 경우로 준비금 산정하기).
시행은 몇 회가 필요할까요?
보고하는 숫자가 더 이상 움직이지 않을 만큼이면 됩니다. 시뮬레이션 평균의 잡음은 시행 횟수의 제곱근에 따라 줄어듭니다. 시행 횟수를 4배로 늘리면 절반이 됩니다. 대개 수천 회로 시작하며, P95처럼 분포 끝에 가까운 백분위수는 평균보다 시행이 더 필요합니다. xellstorm은 평균과 백분위수가 정한 허용 오차 안에서 안정될 때까지 실행할 수 있습니다.
자주 묻는 질문
몬테카를로 시뮬레이션은 시나리오 분석과 같은가요?
아닙니다. 시나리오 분석은 최선, 기준, 최악처럼 고른 몇 가지 경우만 계산하며 각각의 확률은 알려 주지 않습니다. 시뮬레이션은 범위에서 수천 가지 조합을 뽑아 각 결과의 확률을 알려 줍니다.
추정에는 어떤 분포를 써야 하나요?
최소, 최빈, 최대로 주어진 전문가 추정에는 PERT나 삼각 분포를 씁니다. 0 아래로 내려갈 수 없고 오른쪽 꼬리가 긴 양에는 로그정규 분포를 씁니다. 발생하거나 발생하지 않는 이벤트에는 확률과 발생 시 비용을 씁니다. 데이터가 있으면 데이터에 분포를 적합합니다.
엑셀 파일을 고쳐야 하나요?
xellstorm에서는 아닙니다. 분포는 엑셀 파일 안이 아니라 옆에 보관되고, Min / Likely / Max 열처럼 이미 있는 셀에서 숫자를 읽어 올 수 있으며, 수식은 작성한 그대로 유지됩니다. 일반 엑셀이나 애드인에서는 범위가 수식이나 애드인 고유의 정의로 엑셀 파일 안에 저장됩니다.
엑셀에서 PERT 분포는 어떻게 만드나요?
엑셀에는 PERT 함수가 없지만, PERT 분포는 최소에서 최대까지로 조정한 베타 분포이므로 BETA.INV로 추출할 수 있습니다. =BETA.INV(RAND(), 1+4*(ml-min)/(max-min), 1+4*(max-ml)/(max-min), min, max)에서 최소(min), 최빈(ml), 최대(max)는 셀 참조로 바꿉니다. 평균은 (최소 + 4 × 최빈 + 최대) / 6입니다. 엑셀의 PERT 분포에서 삼각 분포와 비교합니다.
애드인 없이 엑셀에서 몬테카를로 시뮬레이션을 실행할 수 있나요?
네. =NORM.INV(RAND(), mean, sd) 같은 수식으로 불확실한 입력을 각각 추출하고, 데이터 표로 모델을 반복한 뒤, AVERAGE, PERCENTILE.INC, COUNTIF로 결과를 요약합니다. 또는 엑셀 파일을 xellstorm에서 열면 애드인도 엑셀도 없이 브라우저에서 시행을 실행합니다.
관련 글
- 가이드
엑셀 PERT 분포: 수식, 평균, 사용 시점
PERT는 최소에서 최대까지의 베타 분포이며 평균은 (최소 + 4 × 최빈 + 최대)/6입니다. 엑셀 BETA.INV 수식, 그리고 PERT와 삼각 분포의 비교. - 가이드
P50, P80, P90의 의미와 예산을 잡는 기준
P80은 시뮬레이션 결과의 80%가 그 아래에 머무는 비용입니다. 건축 프로젝트의 비용 항목 6개의 P80을 더하면 2,843이지만(천 달러 단위), 항목 합계의 P80은 2,756입니다. - 가이드
토네이도 차트와 민감도 분석 설명
토네이도 차트는 입력을 하나씩만 움직입니다. xellstorm에서는 기본으로 P10에서 P90까지입니다. 건축 견적에서는 리스크 하나가 비용을 150(천 달러 단위)만큼 움직입니다. - 프로젝트 비용과 일정
건설 프로젝트에는 예비비가 얼마나 필요할까요?
예제 풀이: 건축 견적의 최빈 비용 합계를 넘는 시뮬레이션 결과가 94.2%입니다. 몬테카를로로 건설 비용 예비비를 산정합니다.
xellstorm은 엑셀 모델을 브라우저에서 몬테카를로 시뮬레이션하는 도구입니다. 애드인은 필요 없고, 엑셀 파일은 내 컴퓨터 밖으로 나가지 않습니다.