어떤 확률 분포를 써야 할까요? 몬테카를로 모델의 분포 선택 가이드
분포는 이름으로 고르지 말고, 불확실한 값에 관해 아는 것으로 고르세요. 전문가가 낸 최저, 최빈, 최고 값이 있으면 PERT 분포나 삼각 분포, 비용이나 기간처럼 위쪽 꼬리가 긴 양수는 로그정규 분포, 좌우 대칭인 측정값은 정규 분포, 고장까지의 시간은 와이블 분포, 사건의 횟수는 푸아송 분포, 일어나거나 일어나지 않는 사건은 베르누이 분포, 0과 1 사이의 비율은 베타 분포, 합이 전체가 되어야 하는 여러 비율은 디리클레 분포, 한 기간의 최댓값은 검벨 분포나 GEV, 건수와 크기가 모두 불확실한 손실의 합계는 복합 분포가 맞고, 과거 데이터가 있으면 거기에 적합한 분포를 씁니다. 아래 분포 찾기는 질문을 한두 개 하고 분포 이름을 알려 줍니다. xellstorm에는 직접 만든 표를 포함해 모두 52개의 분포가 있습니다.
내게 맞는 분포 찾기
불확실한 값을 가장 잘 설명하는 항목을 고르세요. 답 하나로 부족하면 그 아래에 두 번째 질문이 열립니다.
분포 한눈에 보기
파라미터 이름은 xellstorm의 분포 메뉴와 같습니다. 어느 분포든 절단(두 한계 사이의 값만 남김)과 이동을 함께 쓸 수 있습니다.
| 분포 | 용도 | 파라미터 | 엑셀에서 뽑기 |
|---|---|---|---|
| PERT | 한계가 있는 전문가 추정, 최빈값을 가장 믿을 때 | 최소, 최빈, 최대 | BETA.INV(RAND(), α, β, min, max) |
| 삼각 분포 | 한계가 있는 전문가 추정, 한계 근처의 값도 나올 수 있을 때 | 최소, 최빈, 최대 | IF와 SQRT를 쓴 수식, 가이드 참고 |
| 균등 분포 | 어느 값도 더 나올 만하지 않은 범위 | 최소, 최대 | min+(max-min)*RAND() |
| 정규 분포 | 대칭인 변동: 측정값, 오차, 여러 부분의 합 | 평균, 표준편차 | NORM.INV(RAND(), mean, sd) |
| 로그정규 분포 | 위쪽 꼬리가 긴 양수: 비용, 손실, 기간 | s, scale, loc | LOGNORM.INV(RAND(), LN(median), s) |
| 감마 분포 | 양수이고 오른쪽으로 치우침, 대기 시간 여러 개의 합 | a, scale, loc | GAMMA.INV(RAND(), shape, scale) |
| 베타 분포 | 0과 1 사이의 비중과 비율 | a, b, loc, scale | BETA.INV(RAND(), α, β) |
| 와이블 분포 | 고장까지의 시간: 마모 고장 또는 초기 고장 | 형상, scale, loc | scale*(-LN(1-RAND()))^(1/shape) |
| 지수 분포 | 일정한 비율로 일어나는 무작위 사건 사이의 시간 | scale, loc | -mean*LN(1-RAND()) |
| 푸아송 분포 | 평균 발생률로 한 기간에 일어나는 사건의 수 | 평균 | POISSON.DIST와 COUNTIF로 만든 표, 가이드 참고 |
| 음이항 분포 | 푸아송보다 들쭉날쭉한 횟수: 수요, 몰려서 생기는 불량 | n, p | NEGBINOM.DIST와 COUNTIF로 만든 표 |
| 베르누이 분포 | 사건이 일어남(1) 또는 일어나지 않음(0) | p | IF(RAND()<p, 1, 0) |
| 이항 분포 | n번 시도 중 ‘예’의 수 | n, p | BINOM.INV(n, p, RAND()) |
| 정수 균등 분포 | 범위 안의 정수, 모두 같은 확률 | 하한, 상한 | RANDBETWEEN(low, high) |
| 이산 표 | 가능한 값 몇 개와 각각의 확률 | 값과 확률의 표 | 누적확률을 찾아보는 수식 |
| 백분위수 기반 삼각 분포 | 한계가 아니라 낮은 백분위수와 높은 백분위수로 정하는 삼각 분포 | 하단, 최빈, 상단, 하단 %, 상단 % | – |
| 스튜던트 t 분포 | 대칭이고 꼬리가 두꺼움: 수익률, 이상값이 섞인 오차 | df, loc, scale | loc+scale*T.INV(RAND(), df) |
| 검벨 분포 | 많은 값 중 최댓값: 연간 최대 부하, 홍수 | loc, scale | loc-scale*LN(-LN(RAND())) |
| GEV(일반화 극단값 분포) | 많은 값 중 최댓값: 꼬리가 더 두껍거나 상한이 있을 때 | 형상 (c), loc, scale | loc+scale*(1-(-LN(RAND()))^c)/c |
| Metalog | 여러 백분위수를 지나는 유연한 모양 | 값과 확률의 표 | – |
| 복합 분포 | 크기가 제각각인 사건이 무작위 건수만큼 일어난 합계: 보험금, 손실 | 빈도, 심도, 공제액, 한도 | – |
| 스플라이스(본체 + 꼬리) | 한 점 아래와 위에 서로 다른 분포: 본체와 두꺼운 꼬리 | 분기점 아래, 분기점 위, 분기점, 아래쪽 비율 | – |
| 디리클레(합계의 비율) | 모든 시행에서 합이 합계와 같은 비율: 시장 점유율, 예산 배분 | 셀마다 alpha, 합계 | 셀마다 GAMMA.INV(RAND(), alpha, 1)로 뽑고 그 합으로 나눔 |
xellstorm에는 52개의 분포가 있습니다. 앱 메뉴에 29개가 있고, “그 밖의 분포” 아래에 23개가 더 있습니다. 더 있는 분포는 대부분 엑셀 애드인으로 만든 모델에서 만나는 분포이며, xellstorm이 가져올 때 변환합니다(애드인에서 모델 옮기기 참고).
예제 엑셀 파일: 모든 분포를 엑셀 수식으로
이 페이지의 엑셀 파일에는 분포마다 한 행이 있습니다. 파라미터, RAND()로 뽑은 난수, 그 난수로 뽑은 값, 그리고 수식으로 계산한 평균, P10, P90이 들어 있습니다. F9를 누르면 뽑은 값이 모두 바뀝니다. 마지막 열들에는 같은 분포가 xellstorm 입력으로 들어 있어서, 한 번 실행하면 엑셀로 뽑은 값과 xellstorm으로 뽑은 값을 나란히 볼 수 있습니다. 이 사이트의 가이드는 모두 이 파일의 수식을 이런 추출값 10,000개와 대조해 확인합니다.
| 분포 | 예와 파라미터 | 평균 | P10 | P90 |
|---|---|---|---|---|
| 정규 분포 | 다음 시즌 수요(개) 평균 1,000, 표준편차 200 | 1,000 | 744 | 1,256 |
| 로그정규 분포 | 보험금 청구 1건의 수리비(USD) 중앙값 2,000, ln의 퍼짐 0.8 | 2,754 | 717 | 5,576 |
| 삼각 분포 | 항목 1개의 비용(천 달러 단위) 최소 80, 최빈값 100, 최대 140 | 106.7 | 91.0 | 124.5 |
| PERT | 항목 1개의 비용(천 달러 단위) 최소 80, 최빈값 100, 최대 140 | 103.3 | 89.2 | 118.7 |
| 균등 분포 | 단가(USD) 최소 40, 최대 60 | 50 | 42 | 58 |
| 와이블 분포 | 펌프 수명(시간) 형상 1.5, 척도 20,000 | 18,055 | 4,462 | 34,874 |
| 지수 분포 | 고장 사이의 시간(시간) 평균 500 | 500 | 53 | 1,151 |
| 푸아송 분포 | 한 주의 불만 건수 평균 4 | 4 | 2 | 7 |
| 음이항 분포 | 한 주의 주문 건수, 변동이 더 큰 경우 성공 횟수 4, 확률 0.5 | 4 | 1 | 8 |
| 베르누이 분포 | 리스크 발생(1) 또는 미발생(0) 확률 0.3 | 0.3 | 0 | 1 |
| 이항 분포 | 50개 묶음의 불량품 수 시도 횟수 50, 확률 0.04 | 2 | 0 | 4 |
| 베타 분포 | 갱신하는 고객의 비중 알파 8, 베타 2 | 80.0% | 63.2% | 93.9% |
| 감마 분포 | 수리 세 건을 연달아 끝내는 데 걸리는 일수 형상 3, 척도 2 | 6.0 | 2.2 | 10.6 |
자주 하는 실수
- 비용이나 기간에 정규 분포를 쓰는 것. 정규 분포는 좌우 대칭이고 음수가 나올 수 있습니다. 비용과 기간은 줄어드는 폭보다 초과하는 폭이 더 큽니다.
- P10과 P90을 최소와 최대로 쓰는 것. 결과의 5분의 1이 잘려 나갑니다. 대신 백분위수에 분포를 적합하세요.
LOGNORM.INV에 잘못된 파라미터를 넣는 것. 이 함수는 값이 아니라 로그의 평균과 표준편차를 받습니다.- 확률 × 영향액을 고정된 숫자로 쓰는 것. 리스크는 비용이 전혀 들지 않거나 영향액 전체가 듭니다. 베르누이 분포에 영향액을 곱하면 이 성질이 유지되지만, 기대값은 그렇지 않습니다.
- 함께 움직이는 입력을 서로 독립인 것처럼 뽑는 것. 가격과 물량, 같은 작업 팀을 쓰는 공종의 비용은 함께 오르는 일이 많습니다. 상관관계를 지정하지 않으면 합계의 퍼짐이 너무 좁게 나옵니다.
- 백분위수를 더하는 것. 여러 항목의 P90을 더해도 합계의 P90이 되지 않습니다. 합계 자체를 시뮬레이션하세요(P50, P80, P90 참고).
분포별 가이드
- 가이드
엑셀 PERT 분포: 수식, 평균, 사용 시점
PERT는 최소에서 최대까지의 베타 분포이며 평균은 (최소 + 4 × 최빈 + 최대)/6입니다. 엑셀 BETA.INV 수식, 그리고 PERT와 삼각 분포의 비교. - 가이드
엑셀 삼각 분포: 수식, 평균, PERT와의 차이
삼각 분포는 최소, 최빈값, 최대를 직선 모양의 확률로 바꿉니다. 난수 추출과 백분위수를 구하는 엑셀 수식, 평균, 삼각 분포와 PERT의 비교를 설명합니다. - 가이드
엑셀 균등 분포: 두 값 사이의 난수 만들기
균등 분포는 최소와 최대 사이의 모든 값이 똑같이 나오게 합니다. 엑셀 수식, 정수는 RANDBETWEEN으로 뽑는 방법, 평균, 범위만으로 충분한 경우를 설명합니다. - 가이드
엑셀 정규 분포: NORM.INV, 평균, 표준편차
엑셀에서 NORM.INV(RAND(), mean, sd)로 정규 분포의 난수를 뽑고, P10과 P90을 구하고, 종 모양 곡선이 맞는 경우와 맞지 않는 경우를 확인합니다. - 가이드
엑셀 로그정규 분포: LOGNORM.INV, 인수, 사용 시점
로그정규 분포는 양수이며 오른쪽 꼬리가 깁니다. LOGNORM.INV의 인수가 어떻게 작동하는지, 평균과 표준편차에서 그 인수를 구하는 방법, 언제 쓰는지를 설명합니다. - 가이드
엑셀 감마 분포: 대기 시간, 합계, GAMMA.INV
감마 분포는 여러 단계의 합계 시간처럼 양수이고 오른쪽으로 치우친 값을 나타냅니다. 형상 모수와 척도 모수, 엑셀의 GAMMA.INV와 GAMMA.DIST, 감마 분포와 로그정규 분포의 비교를 설명합니다. - 가이드
엑셀 베타 분포: 불확실한 비중, 비율, 백분율
베타 분포는 0과 1 사이의 불확실한 비중이나 비율을 나타냅니다. 알파와 베타가 무엇을 뜻하는지, 평균과 표준편차에서 알파와 베타를 정하는 방법, 엑셀의 BETA.INV를 설명합니다. - 가이드
엑셀 와이블 분포: 형상 모수, 척도 모수, 고장까지의 시간
와이블 분포는 고장까지의 시간을 모델링합니다. 형상 모수가 1보다 작으면 초기 고장, 1이면 무작위 고장(지수 분포), 1보다 크면 마모 고장입니다. 엑셀 수식, B10 수명, 지수 분포를 설명합니다. - 가이드
엑셀 푸아송 분포: 사건 횟수와 음이항 분포를 쓰는 경우
푸아송(포아송) 분포는 알려진 평균 비율로 일어나는 사건을 한 기간 동안 세는 분포입니다. POISSON.DIST, 역함수 없이 엑셀에서 푸아송 난수 뽑기, 횟수가 더 들쭉날쭉할 때 쓰는 음이항 분포를 설명합니다. - 가이드
엑셀 이항 분포와 베르누이 분포: 예·아니요 사건과 n번 중 횟수
베르누이 분포는 리스크가 일어나는지 아닌지처럼 예·아니요로 갈리는 사건 하나이고, 이항 분포는 n번 시도 중 ‘예’의 횟수를 셉니다. 엑셀 수식, BINOM.DIST와 BINOM.INV, 리스크 관리대장을 설명합니다.
자주 묻는 질문
데이터가 없으면 어떤 분포를 써야 할까요?
그 값을 아는 사람들에게 최저, 최빈, 최고 값을 물어 PERT 분포나 삼각 분포를 씁니다. 그 사람들이 말한 최저값과 최고값이 한계가 아니라 “열 번에 한 번꼴”의 값이라면, 그 백분위수에 분포를 적합합니다. 그런 다음 숫자가 뜻하는 바(평균, P10, P90)를 그 숫자를 낸 사람들과 확인하세요.
비용 추정에는 어떤 분포가 가장 좋을까요?
비용 항목마다 3점 추정으로 PERT 분포나 삼각 분포를 쓰고, 확실한 최댓값이 없으면 로그정규 분포를 씁니다. 일어날 수도 있고 아닐 수도 있는 리스크에는 베르누이 분포에 영향액을 곱합니다. 합계는 추정하지 않고 시뮬레이션합니다. 프로젝트 비용 예비비 예제를 참고하세요.
작업 기간에는 어떤 분포를 써야 할까요?
작업마다 3점 추정으로 PERT 분포나 삼각 분포를 쓰거나, 과거 기간에 적합한 로그정규 분포를 씁니다. 둘 다 위쪽 꼬리가 길 수 있습니다. 전체 일정은 작업 네트워크를 시뮬레이션합니다. 일정 리스크 분석을 참고하세요.
보험금 청구나 운영 손실에는 어떤 분포를 써야 할까요?
한 기간에 손실이 몇 건 생기는지(빈도)와 한 건이 얼마나 큰지(심도)를 따로 모델링하고, 복합 분포로 더합니다. 건수에는 푸아송 분포나 음이항 분포, 크기에는 로그정규, 감마, 파레토 분포를 씁니다. 큰 손실이 보통 손실보다 두꺼운 꼬리를 따르면, 임계값 아래의 본체에 임계값 위의 일반화 파레토 분포를 이어 붙입니다(스플라이스). 따로 모델링하면 각각을 해당 데이터로 확인할 수 있고, 공제액이나 한도도 손실 한 건마다 적용됩니다.
합이 100%가 되는 비율은 어떻게 시뮬레이션하나요?
셀마다 따로 분포를 두지 말고 디리클레 분포로 함께 뽑으세요. 서로 독립인 비율은 합이 100%가 되는 일이 드뭅니다. 엑셀에서는 셀마다 GAMMA.INV(RAND(), alpha, 1)로 값을 뽑고 각 값을 그 합으로 나눕니다. xellstorm에서는 셀 범위에 디리클레(합계의 비율)를 고르면 됩니다.
분포가 내 데이터에 맞는지 어떻게 알 수 있나요?
여러 분포를 적합하고 서로 비교합니다. xellstorm의 “데이터로” 탭은 AIC로 적합 결과의 순위를 매깁니다. AIC는 잘 맞을수록 좋게 평가하고 파라미터가 많을수록 나쁘게 평가합니다. 각 분포의 적합도 검정도 함께 보여 줍니다. 곡선과 히스토그램을 겹쳐 보는 것도 중요합니다. 특히 결정에 중요한 꼬리 부분을 살펴보고, 표본이 작을 때는 결과를 조심해서 읽으세요.
분포를 무엇으로 고르느냐에 따라 결과가 크게 달라지나요?
가운데보다 꼬리가 더 많이 달라집니다. 세 숫자나 평균이 같은 두 모양은 평균이 비슷해도 P90이 다르고, 예산을 넘을 확률도 다른 경우가 많습니다. 중요한 결정이라면 같은 난수에서 두 분포를 시나리오로 돌려 비교하세요.
관련 글
- 가이드
엑셀 몬테카를로 시뮬레이션, 애드인 있어도 없어도
엑셀 모델에서 몬테카를로 시뮬레이션을 실행하는 세 가지 방법: RAND() 수식과 데이터 표, 애드인, 애드인 없는 브라우저 도구. PERT 수식 포함. - 가이드
P50, P80, P90의 의미와 예산을 잡는 기준
P80은 시뮬레이션 결과의 80%가 그 아래에 머무는 비용입니다. 건축 프로젝트의 비용 항목 6개의 P80을 더하면 2,843이지만(천 달러 단위), 항목 합계의 P80은 2,756입니다. - 가이드
@RISK, ModelRisk, Analytic Solver 모델 옮기기
xellstorm은 @RISK, ModelRisk, Analytic Solver의 분포 함수 164개를 읽고, 무엇을 변환했고 어떤 수식을 왜 남겼는지 보여 줍니다.
xellstorm은 엑셀 모델을 브라우저에서 몬테카를로 시뮬레이션하는 도구입니다. 애드인은 필요 없고, 엑셀 파일은 내 컴퓨터 밖으로 나가지 않습니다.