@RISK, ModelRisk, Analytic Solver 모델 옮기기
xellstorm은 @RISK, ModelRisk, Analytic Solver용으로 만든 엑셀 파일을 애드인 없이 열고, 이들의 분포 함수 164개를 읽어 수식마다 입력으로 바꿉니다. 입력의 파라미터는 내 셀에 연결된 채로 남습니다. 실행 전에 변환한 항목과, 남겨 둔 모든 수식을 이유와 함께 보여 줍니다.
분포 함수 164개는 @RISK 53개, ModelRisk 62개, Analytic Solver 49개입니다. 백분위수로 분포를 지정하는 형식 65개와 절단, 출력 표식, 상관관계 행렬, 다중 시뮬레이션 표도 읽습니다.
@RISK용 엑셀 파일에서 가져오기가 찾아내는 것
예제는 프로젝트 예비비 예제의 건축 견적을 @RISK용 모델에서 흔히 쓰는 방식으로 다시 쓴 것입니다. 비용 항목은 각각 자기 행의 셀을 인수로 받는 =RiskPert(min, most likely, max, RiskName(label))이고, 리스크 이벤트는 확률에 RiskBernoulli를 씁니다. 총비용과 초과분에는 RiskOutput 표식을 달았고, 구조와 MEP는 RiskCorrmat으로 상관관계를 지정했으며, 예산 세 개는 RiskSimtable 하나에 담았습니다. 한 셀은 총비용의 RiskMean을 보고합니다. 두 번째 시트 “Demonstrations”에는 별도의 수식 다섯 개가 있습니다. 변환되는 산술식 두 개와 변환되지 않는 수식 세 개입니다. 파일은 스크립트로 만들었습니다. xellstorm이 읽는 데 @RISK는 필요 없고, 파일을 열어 보는 사용자도 마찬가지입니다.
앱에서는 Distributions 단계의 Import from workbook이 찾은 수식을 목록으로 보여 줍니다(명령줄에서 xellstorm import를 실행해도 같은 목록이 나옵니다). 이 엑셀 파일에서는 입력 12개를 변환합니다. 비용 항목 6개, 리스크 이벤트 4개, 산술 시연 2개입니다. 비용 항목과 리스크 이벤트는 파라미터가 셀에 연결된 채로 남으므로, 엑셀 파일에서 최소값이나 확률을 고치면 다음 실행에 반영됩니다. RiskName(A3)은 각 입력에 그 행의 텍스트를 이름으로 붙입니다. 변환되는 두 시연 수식은 정규 분포 추출값에 계수를 곱한 식과, 평균을 다른 셀에서 계산하는 식입니다. 둘 다 추정치의 출력에는 쓰이지 않습니다.
| 셀 | 엑셀 파일의 수식 | 변환 결과 |
|---|---|---|
| E3 | =RiskPert(B3, | 부지 공사: 최소 B3(100), 최빈 C3(120), 최대 D3(170)의 PERT |
| E4 | =RiskPert(B4, | 기초: 최소 B4(300), 최빈 C4(340), 최대 D4(460)의 PERT |
| E5 | =RiskPert(B5, | 구조: 최소 B5(760), 최빈 C5(820), 최대 D5(1,010)의 PERT |
| E6 | =RiskPert(B6, | MEP: 최소 B6(540), 최빈 C6(610), 최대 D6(780)의 PERT |
| E7 | =RiskPert(B7, | 마감 공사: 최소 B7(400), 최빈 C7(450), 최대 D7(560)의 PERT |
| E8 | =RiskPert(B8, | 장비: 최소 B8(260), 최빈 C8(280), 최대 D8(330)의 PERT |
| D11 | =RiskBernoulli(B11, | 지반 조건: 확률 B11(0.25)의 베르누이 |
| D12 | =RiskBernoulli(B12, | 설계 변경: 확률 B12(0.35)의 베르누이 |
| D13 | =RiskBernoulli(B13, | 공급업체 지연: 확률 B13(0.2)의 베르누이 |
| D14 | =RiskBernoulli(B14, | 악천후: 확률 B14(0.3)의 베르누이 |
| Demonstrations!B3 | =RiskNormal(100, | 평균 100, 표준편차 10의 정규 분포, 추출값에 곱하는 값 1.1. 시연용이며 추정치에는 사용하지 않음 |
| Demonstrations!B4 | =RiskNormal(Estimate!C3*1.1, | 평균 Estimate!C3*1.1(132), 표준편차 10의 정규 분포. 시연용이며 추정치에는 사용하지 않음 |
가져오기는 모델의 나머지도 읽습니다.
- 출력.
RiskOutput("Total cost")표식과RiskOutput("Over budget")표식이 붙은 셀은 각각 그 이름의 출력이 됩니다. 표식은 @RISK에서처럼 0을 더하므로 셀은 그대로 계산됩니다. - 상관관계.
RiskCorrmat(Correlation,1)표식과RiskCorrmat(Correlation,2)표식으로 구조와 MEP를 Correlation이라는 이름의 행렬에 넣고, 순위 상관은 0.6입니다(아래쪽 삼각형만 채워져 있고, 빈 셀은 대각선 반대편 값으로 읽습니다). 값은 가져오는 시점에 엑셀 파일에 들어 있는 행렬에서 읽으며, 가져오기 결과에도 그렇게 표시됩니다. - 시뮬레이션. @RISK에서는
RiskSimtable({2900,3000,3100})함수가 시뮬레이션마다 예산에 값을 하나씩 넣어 줍니다. xellstorm은 기준 실행에서 예산을 2,900에 고정하고 나머지 둘은 시나리오로 추가합니다. 시나리오는 기준 실행과 같은 난수를 쓰므로 예산만 다릅니다. - 통계.
RiskMean은 결과를 셀로 되돌려 보고하는 다른 함수들처럼 분포가 아니므로, 변환하지 않은 항목에도 나오지 않습니다. @RISK 밖에서는 값이 없고(호환성 검사가 해당 셀을 알려 줍니다), 평균은 xellstorm의 결과에 있습니다.
변환되지 않는 수식도 목록에 나옵니다. 두 번째 시트의 3개에는 모두 가져오기가 밝힌 이유가 붙고, 해결 방법도 각각 있습니다.
| 수식 | 제시된 이유 | 대처 방법 |
|---|---|---|
=RiskBinomial(1, | 한 수식에 분포가 여러 개 있으면 변환하지 않습니다. 분포마다 입력 셀을 따로 두어야 합니다 | 나누어 쓰면 됩니다. 리스크 발생 여부는 =RiskBernoulli(0.3) 셀 하나에, 영향은 =RiskTriang(20,40,80) 셀 하나에 두고, 세 번째 셀에서 둘을 곱합니다. 추정치의 리스크 이벤트도 이렇게 만들었습니다. |
=RISKCOMPOUND(RiskPoisson(3), | RISKCOMPOUND에는 정확히 대응하는 xellstorm 기능이 없습니다 | xellstorm에는 복합 분포가 없습니다. 개수와 크기를 각각 별도의 셀에서 모델링하거나, 그 셀을 모델에서 뺍니다. |
=RISKPERTALT(10%, | RISKPERTALT에는 정확히 대응하는 xellstorm 기능이 없습니다 | PERT의 최소, 최빈, 최대를 입력하거나(RiskPert), 변환되는 RiskTrigen에 백분위수를 줍니다. |
변환한 모델 실행
가져온 설정으로 5,000회 시행을 실행하면 평균 총비용은 2,784.7(천 달러 단위)입니다. 같은 분포의 이론 평균, 즉 PERT 평균 (최소 + 4 × 최빈 + 최대) / 6에 각 리스크의 확률 × 영향을 더한 값은 2,784.7이고, 시뮬레이션 평균의 표준오차는 1.7입니다. 구조와 MEP의 순위 상관은 0.60에 도달합니다. RiskSimtable의 예산 세 개를 기준 실행과 시나리오 둘로 실행한 결과입니다.
| 실행 | 예산 | 초과 확률 |
|---|---|---|
| 기준 실행(Simulation 1) | 2,900 | 17.7% |
| Simulation 2 | 3,000 | 5.2% |
| Simulation 3 | 3,100 | 0.7% |
예산이 클수록 초과하는 일이 줄고, 시나리오는 기준 실행과 같은 난수를 쓰므로 행 사이의 차이는 표본 추출이 아니라 예산 때문에 생깁니다.
결과가 애드인과 일치할까요?
모델은 같지만 난수는 다릅니다. 가져오기 규칙은 함수마다 그 함수가 뜻하는 분포를 대응시키고, 파라미터는 벤더 문서대로 옮기며, 같은 분포의 scipy 구현과 대조해 검증합니다. 테스트 데이터를 만드는 스크립트는 각 대응의 평균도 벤더가 문서화한 공식과 대조합니다. 따라서 엑셀 파일의 분포가 모두 변환되면 평균과 백분위수는 표본 추출 잡음만큼만 애드인과 다르고, 시행을 늘릴수록 이 잡음은 줄어듭니다. 위에 나온 표준오차가 평균에서 예상되는 잡음의 크기입니다.
상관관계는 @RISK와 Analytic Solver가 정의하는 대로 순위 상관이며, xellstorm은 지정한 순위 상관에 도달합니다. 그 값을 맞추려고 추출값을 짝짓는 방식은 도구마다 달라서, 상관관계를 지정한 모델은 분포의 꼬리에서 표본 추출 잡음만으로 설명되는 것보다 조금 더 다를 수 있습니다. 엑셀 파일 자체는 바뀌지 않습니다. xellstorm은 파일을 읽기만 하며, 모델은 애드인에서도 그대로 열립니다.
변환되는 항목
- 분포와 산술 인수. 분포는 단독으로 쓸 수도 있고, 양수 곱셈 계수 하나 뒤에 더하기 또는 빼기 오프셋이 최대 하나 붙을 수도 있습니다.
RiskNormal(B1*1.1,B2)*C1+5,5+C1*RiskNormal(B1,B2)같은 식이 변환됩니다. 인수, 곱셈 계수, 오프셋에는 숫자, 단일 셀 참조, 괄호, 연산자(+,−,*,/)를 쓸 수 있습니다. 셀 하나를 가리키는 정의된 이름은 그 셀의 주소로 바뀝니다. 이런 식은 연결을 유지한 채 각 시나리오의 고정 셀을 적용한 뒤에 계산합니다. 모든 참조는 난수에 따라 달라지지 않아야 합니다. 표에서 †로 표시한 함수는 인수가 숫자일 때만 변환됩니다. - 백분위수 형식. @RISK의
…Alt,…AltD함수와 Analytic Solver의…Alt함수(아래 표에 있는 것들)는 백분위수로 분포를 지정합니다. xellstorm은 실행할 때 해당 분포를 정확히 풀어 구하고, 맞는 분포가 없거나 둘 이상이면 오류를 냅니다. - 절단과 이동.
RiskTruncate,RiskTruncate2,RiskTruncateP,RiskShift,VoseXBounds,VosePBounds,VoseShift,PsiTruncate,PsiTruncateP,PsiShift가 해당하며, 애드인별 문서에 있는 순서대로 적용합니다. 분포 바깥의 곱셈 계수와 오프셋은 그 뒤에 적용하고 입력 설정에 따로 표시합니다. - 이름과 고정.
RiskName,PsiName,VoseInput은 입력 이름을 정하고,RiskLock은 입력을 값 하나로 고정합니다. 카탈로그에는 무시하는 속성도 올라 있습니다(Static, Units, Category, Collect, Base, Seed, IsDiscrete, IsDate, Fit, FitInfo, Certify, BaseCase, Library, SixSigma, 벤더 접두사를 붙인 이름).RiskSeed는 경고를 냅니다. 난수열 설정은 유지하지 않으며, 추출값은 xellstorm의 시뮬레이션 시드와 입력 순서가 결정합니다. - 출력.
RiskOutput,VoseOutput,PsiOutput,PsiSimOutput이 출력을 표시합니다. Analytic Solver에서는PsiMean(B1)같은 통계가 B1도 출력으로 만드는데, xellstorm도 마찬가지입니다. - 상관관계와 시뮬레이션. 상관관계는
RiskCorrmat,RiskDepC와RiskIndepC의 쌍,PsiCorrMatrix,PsiCorrDepen과PsiCorrIndep의 쌍이고, 시뮬레이션은RiskSimtable,VoseSimTable,PsiSimParam입니다. - 엑셀 자체 수식.
NORM.INV(RAND(), mean, sd),RANDBETWEEN,IF(RAND() < p, 1, 0)등 이런 형식이 모두 18개이며, 아래에 정리해 두었습니다.
변환되지 않는 항목
한 셀에 분포가 여러 개 있는 경우, 다른 함수 안이나 분모에 분포가 들어 있는 경우, 분포를 직접 나누는 경우, 연산 순서를 바꿔야 하는 연쇄식은 변환되지 않습니다. 예를 들어 (RiskNormal(0,1)+5)*2, RiskNormal(0,1)*2*3 같은 수식은 이유와 함께 남겨 둡니다. RiskNormal(0,1)*(1/C1) 수식은 C1의 값이 유한한 양수이면 변환됩니다. 곱하기 전에 역수를 수식에서 직접 계산하기 때문입니다. 계산 결과가 0 이하가 되는 곱셈 계수, 함수를 호출하거나 난수 셀에 의존하는 인수, 정확히 대응하는 분포가 없는 함수(복합 분포, 시계열 함수, RiskPertAlt 등 형상 파라미터가 두 개인 백분위수 형식), ModelRisk의 U 인수와 코퓰라, 표에 없는 속성도 지원하지 않습니다. 지원하지 않는 애드인 수식은 엔진이 계산할 수 없으며, 호환성 검사가 해당 수식을 알려 줍니다.
지원 함수
표는 가져오기 기능의 규칙 목록에서 그대로 생성하므로, 실제로 변환하는 함수와 정확히 같습니다. “백분위수”는 백분위수로 분포를 지정하는 형식을, †는 숫자만 있을 때 변환되는 함수를 나타냅니다. 각 분포 아래에는 xellstorm 스펙에서 쓰는 이름이 있습니다.
| 분포 (xellstorm 이름) | @RISK | ModelRisk | Analytic Solver |
|---|---|---|---|
베르누이bern | RiskBernoulli | VoseBernoulli | PsiBernoulli |
베타beta | RiskBetaRiskBetaGeneralRiskBetaSubj† | VoseBetaVoseBeta4VoseBetaSubj† | PsiBetaPsiBetaGenPsiBetaSubj† |
이항binom | RiskBinomial | VoseBinomial | PsiBinomial |
Burr XIIburr12 | RiskBurr12 | — | — |
코시cauchy | RiskCauchy백분위수: RiskCauchyAltRiskCauchyAltD | VoseCauchy | — |
카이제곱chi2 | RiskChiSq백분위수: RiskChiSqAltRiskChiSqAltD | VoseChiSq | PsiChiSquare백분위수: PsiChiSquareAlt |
카이, 맥스웰chi | — | VoseChiVoseMaxwell | — |
누적cumul | RiskCumulRiskCumulD† | VoseCumulAVoseCumulD†VoseOgive† | PsiCumul |
Dagum(Burr III)burr | RiskDagum | VoseDagum | PsiDagum |
이산custom | RiskDiscreteRiskDUniform | VoseDiscreteVoseDUniform | PsiDiscretePsiDisUniform |
지수expon | RiskExpon백분위수: RiskExponAltRiskExponAltD | VoseExponVoseExponential | PsiExponential백분위수: PsiExponentialAlt |
극값(최대, 검벨)gumbel_r | RiskExtValue백분위수: RiskExtValueAltRiskExtValueAltD | VoseExtValueMax | PsiMaxExtreme백분위수: PsiMaxExtremeAlt |
극값(최소)gumbel_l | RiskExtValueMin백분위수: RiskExtValueMinAltRiskExtValueMinAltD | — | PsiMinExtreme백분위수: PsiMinExtremeAlt |
Ff | RiskF | VoseF | PsiFDist |
피로 수명(Birnbaum–Saunders)fatiguelife | RiskFatigueLife백분위수: RiskFatigueLifeAltRiskFatigueLifeAltD | VoseFatigue | PsiFatigueLife백분위수: PsiFatigueLifeAlt |
프레셰invweibull | RiskFrechet백분위수: RiskFrechetAltRiskFrechetAltD | — | PsiFrechet백분위수: PsiFrechetAlt |
감마, 얼랑gamma | RiskGammaRiskErlang백분위수: RiskGammaAltRiskGammaAltD | VoseGammaVoseErlang | PsiGammaPsiErlang백분위수: PsiGammaAlt |
일반(상대 가중치)general | RiskGeneral | VoseRelative | — |
일반화 파레토genpareto | — | VoseGPD | — |
히스토그램histogram | RiskHistogrm | VoseHistogram | PsiHistogram |
쌍곡 시컨트hypsecant | RiskHypSecant백분위수: RiskHypSecantAltRiskHypSecantAltD | VoseHS | PsiHypSecant |
초기하hypergeom | RiskHypergeo | VoseHypergeo | PsiHyperGeo |
정수 균등randint | RiskIntUniform | VoseIntUniformVoseStepUniform† | PsiIntUniform |
역가우스invgauss | RiskInvgauss백분위수: RiskInvgaussAltRiskInvgaussAltD | VoseInvGauss | PsiInvNormal |
Johnson SBjohnsonsb | RiskJohnsonSB | VoseJohnsonB | PsiJohnsonSB |
Johnson SUjohnsonsu | RiskJohnsonSU | VoseJohnsonU | PsiJohnsonSU |
쿠마라스와미kumaraswamy | RiskKumaraswamy | VoseKumaraswamyVoseKumaraswamy4 | PsiKumaraswamy |
라플라스laplace | RiskLaplace백분위수: RiskLaplaceAltRiskLaplaceAltD | VoseLaplace | — |
레비levy | RiskLevy백분위수: RiskLevyAltRiskLevyAltD | VoseLevy | PsiLevy백분위수: PsiLevyAlt |
로그 로지스틱fisk | RiskLogLogistic백분위수: RiskLogLogisticAltRiskLogLogisticAltD | VoseLogLogistic | PsiLogLogistic백분위수: PsiLogLogisticAlt |
로지스틱logistic | RiskLogistic백분위수: RiskLogisticAltRiskLogisticAltD | VoseLogistic | PsiLogistic백분위수: PsiLogisticAlt |
로그정규lognorm | RiskLognormRiskLognorm2백분위수: RiskLognormAltRiskLognormAltD | VoseLognormalVoseLognormalE | PsiLogNormalPsiLognormPsiLognorm2백분위수: PsiLogNormalAlt |
음이항, 기하nbinom | RiskGeometRiskNegbin | VoseGeometricVoseNegBinVoseNegBinomVosePolya† | PsiGeometricPsiNegBinomial |
정규norm | RiskNormalRiskErf†백분위수: RiskNormalAltRiskNormalAltD | VoseNormalVoseErf† | PsiNormalPsiErf†백분위수: PsiNormalAlt |
파레토pareto | RiskPareto백분위수: RiskParetoAltRiskParetoAltD | VosePareto | PsiPareto백분위수: PsiParetoAlt |
파레토 II(Lomax)lomax | RiskPareto2백분위수: RiskPareto2AltRiskPareto2AltD | VosePareto2 | PsiPareto2백분위수: PsiPareto2Alt |
피어슨 V(역감마)invgamma | RiskPearson5백분위수: RiskPearson5AltRiskPearson5AltD | VosePearson5 | PsiPearson5백분위수: PsiPearson5Alt |
피어슨 VI(베타 프라임)betaprime | RiskPearson6 | VosePearson6 | PsiPearson6 |
PERTpert | RiskPert | VosePERTVoseModPERT | PsiPert |
푸아송poiss | RiskPoisson | VosePoisson | PsiPoisson |
레일리rayleigh | RiskRayleigh백분위수: RiskRayleighAltRiskRayleighAltD | VoseRayleigh | PsiRayleigh백분위수: PsiRayleighAlt |
역수(로그 균등)loguniform | RiskReciprocal | VoseReciprocal | PsiReciprocal |
스튜던트 tt | RiskStudent백분위수: RiskStudentAltRiskStudentAltD | VoseStudentVoseStudent3† | PsiStudent백분위수: PsiStudentAlt |
삼각triang | RiskTriang | VoseTriangle | PsiTriangular |
백분위수 기반 삼각(Trigen)trigen | RiskTrigen백분위수: RiskTriangAlt | VoseTriangleAlt | PsiTriangGen |
균등unif | RiskUniform백분위수: RiskUniformAltRiskUniformAltD | VoseUniform | PsiUniform |
와이블weibull_min | RiskWeibull백분위수: RiskWeibullAltRiskWeibullAltD | VoseWeibullVoseWeibull3 | PsiWeibull백분위수: PsiWeibullAlt |
| 수식 | xellstorm |
|---|---|
=NORM.INV(RAND(), | norm (loc, scale) |
=NORMINV(RAND(), | norm (loc, scale) |
=mean + sd*NORM.S.INV(RAND()) | norm (loc, scale) |
=LOGNORM.INV(RAND(), | lognorm (mu, sigma) |
=LOGINV(RAND(), | lognorm (mu, sigma) |
=GAMMA.INV(RAND(), | gamma (a, scale) |
=GAMMAINV(RAND(), | gamma (a, scale) |
=BETA.INV(RAND(), | beta (a, b) |
=BETA.INV(RAND(), | beta (a, b, min, max) |
=BETAINV(RAND(), | beta (a, b, min, max) |
=BINOM.INV(n, | binom (n, p) |
=CRITBINOM(n, | binom (n, p) |
=RANDBETWEEN(a, | randint (min, max) |
=a + (b - a)*RAND() | unif (min, max) |
=a + s*RAND() | unif (loc, scale) |
=RAND() | unif |
=IF(RAND() < p, | bern (p) |
=IF(RAND() < p,† | custom (x, prob) |
| 함수 | 애드인 | xellstorm에서의 변환 결과 |
|---|---|---|
RiskTruncate | @RISK | 절단: truncate_min, truncate_max(이동 전에 적용) |
RiskTruncate2 | @RISK | 절단: 이동된 값의 truncate_min, truncate_max(이동량만큼 되돌림) |
RiskTruncateP | @RISK | 절단: truncate_pmin, truncate_pmax(분포의 백분위수) |
RiskShift | @RISK | 이동: shift |
RiskName | @RISK | 이름: 입력 이름 |
RiskLock | @RISK | 고정: 고정값(RiskLock(v) 또는 RiskStatic 값) |
RiskCorrmat | @RISK | 상관관계: 한 행렬에 속한 입력 사이의 순위 상관 |
RiskDepC | @RISK | 상관관계: 쌍 이름이 같은 입력과의 순위 상관 |
RiskIndepC | @RISK | 상관관계: 쌍 이름이 같은 입력과의 순위 상관 |
RiskSimtable | @RISK | 시뮬레이션마다 값 하나: 기준 실행에서는 고정 셀, 이후 시뮬레이션마다 시나리오 하나 |
RiskOutput | @RISK | 출력: 지정한 이름의 출력 |
VoseXBounds | ModelRisk | 절단: truncate_min, truncate_max(이동 전에 적용) |
VosePBounds | ModelRisk | 절단: truncate_pmin, truncate_pmax(분포의 백분위수) |
VoseShift | ModelRisk | 이동: shift |
VoseInput | ModelRisk | 이름: 입력 이름 |
VoseSimTable | ModelRisk | 시뮬레이션마다 값 하나: 기준 실행에서는 고정 셀, 이후 시뮬레이션마다 시나리오 하나 |
VoseOutput | ModelRisk | 출력: 지정한 이름의 출력 |
PsiTruncate | Analytic Solver | 절단, type 1(기본값): 이동 전의 truncate_min, truncate_max; -1: 이동된 값 기준; 3: truncate_pmin, truncate_pmax |
PsiTruncateP | Analytic Solver | 절단: truncate_pmin, truncate_pmax(분포의 백분위수) |
PsiShift | Analytic Solver | 이동: shift |
PsiName | Analytic Solver | 이름: 입력 이름 |
PsiCorrMatrix | Analytic Solver | 상관관계: 한 행렬에 속한 입력 사이의 순위 상관 |
PsiCorrDepen | Analytic Solver | 상관관계: 쌍 이름이 같은 입력과의 순위 상관 |
PsiCorrIndep | Analytic Solver | 상관관계: 쌍 이름이 같은 입력과의 순위 상관 |
PsiSimParam | Analytic Solver | 시뮬레이션마다 값 하나: 기준 실행에서는 고정 셀, 이후 시뮬레이션마다 시나리오 하나 |
PsiOutput | Analytic Solver | 출력: 해당 셀 자체 또는 그 셀이 참조하는 셀들 |
PsiSimOutput | Analytic Solver | 출력: 해당 셀 자체 또는 그 셀이 참조하는 셀들 |
PsiMean | Analytic Solver | 통계: 첫 번째 인수의 셀이 출력이 됨(출력을 다루는 모든 Psi 통계도 마찬가지) |
자주 묻는 질문
@RISK, ModelRisk, Analytic Solver를 설치해야 하나요?
아니요. xellstorm은 .xlsx 파일에서 수식을 직접 읽고 브라우저에서 자체 엔진으로 모델을 계산하므로 엑셀도 애드인도 필요 없습니다. .xls나 .xlsb 파일은 먼저 .xlsx로 저장해야 합니다.
xellstorm이 엑셀 파일을 변경하나요?
아니요. 가져오기는 xellstorm 자체 설정에 입력을 만들 뿐, 내 컴퓨터에 있는 파일에는 쓰지 않습니다. 그래서 모델은 애드인에서도 그대로 열리고 실행됩니다.
상관관계 행렬은 어떻게 처리되나요?
같은 RiskCorrmat 또는 PsiCorrMatrix 범위를 공유하는 입력은 행렬의 순위 상관을 따르며, 값은 가져올 때 셀에서 읽습니다. RiskDepC와 PsiCorrDepen은 입력을 이름이 같은 입력과 짝짓습니다. 읽을 수 없는 쌍(정사각형이 아닌 행렬, 행렬 밖의 위치, 숫자가 없는 셀)은 가져오기 메모에 이름이 나오고, 변환되지 않은 입력은 이유와 함께 목록에 올라 쌍에서 빠집니다. 행렬이 유효한 상관관계 행렬이 아니면 xellstorm이 가장 가까운 유효한 행렬을 쓰고, 앱은 실행 전에 그 행렬을 보여 줍니다.
RiskSimtable은 무엇이 되나요?
기준 실행에서는 첫 번째 값이 그 셀의 값이 되고, 나머지 값은 각각 Simulation 2, Simulation 3 같은 이름의 시나리오가 됩니다. 시나리오는 기준 실행과 같은 난수를 쓰므로 시나리오 사이의 차이는 표의 값에서만 나옵니다.
@RISK, ModelRisk, Analytic Solver는 각 소유자의 상표입니다. xellstorm은 이들과 제휴 관계가 없으며, 함수 이름은 xellstorm이 무엇을 읽는지 설명하려고 적었을 뿐입니다.
관련 글
- 프로젝트 비용과 일정
건설 프로젝트에는 예비비가 얼마나 필요할까요?
예제 풀이: 건축 견적의 최빈 비용 합계를 넘는 시뮬레이션 결과가 94.2%입니다. 몬테카를로로 건설 비용 예비비를 산정합니다. - 가이드
엑셀 몬테카를로 시뮬레이션, 애드인 있어도 없어도
엑셀 모델에서 몬테카를로 시뮬레이션을 실행하는 세 가지 방법: RAND() 수식과 데이터 표, 애드인, 애드인 없는 브라우저 도구. PERT 수식 포함. - 가이드
엑셀 PERT 분포: 수식, 평균, 사용 시점
PERT는 최소에서 최대까지의 베타 분포이며 평균은 (최소 + 4 × 최빈 + 최대)/6입니다. 엑셀 BETA.INV 수식, 그리고 PERT와 삼각 분포의 비교.
xellstorm은 엑셀 모델을 브라우저에서 몬테카를로 시뮬레이션하는 도구입니다. 애드인은 필요 없고, 엑셀 파일은 내 컴퓨터 밖으로 나가지 않습니다.