Simulation Workspace

Build the model and run the trials

Core logic: Sample inputs → apply correlation → evaluate formula → summarize the distribution

Use input names exactly as they appear in the table. Supported functions: min(), max(), abs(), sqrt(), pow(), log(), exp(), round(), floor(), ceil().

# Name Distribution Base / Mean / Mode Spread / Std Dev Min Max Weight Actions

Modeling guidance

Choose distributions that match the real uncertainty

-

Use the guidance below to improve assumption quality before you rely on the result.

Normal

Use when variation is roughly symmetric around a center and extreme tails are unlikely to dominate the decision.

Triangular / Uniform

Use when you know practical low and high bounds. Triangular is better when one value is more likely than the rest.

Lognormal / Fixed

Use lognormal for positive-only right-skewed drivers like cost overruns or delays. Use fixed only for true constants.

Weight affects the tornado ranking only. Correlation is modeled through a Gaussian copula, which is appropriate for planning-grade dependency modeling across mixed distributions.

Scenario management

Save, reload, or move full models

Saved scenarios stay in this browser. Exported JSON lets you move a model between devices or keep versioned backups.

Decision helpers

Set targets and planning views faster

Run the simulation to calculate a threshold recommendation for the selected confidence level.

Run the simulation to enable one-click target updates from the current outcome distribution.

How to read the result

The output is a distribution, not a forecast promise. Mean and median describe the center. Percentiles show decision bands.

If the probability of hitting your threshold is weak, review the tornado chart before forcing the target into the plan.

If the correlation matrix had to be softened to become mathematically valid, the app flags that adjustment so you can refine the model.

Output distribution

Distribution view

P10 reference - Optimistic or low-end planning point, depending on metric direction.
P50 reference - Midpoint outcome. Half the trials fall on each side.
P90 reference - Conservative planning point for cost or risk exposure.
Mean minus median gap - A quick skew signal. Larger gaps usually indicate asymmetry or tail risk.

Decision reference points

Planning snapshots

Sensitivity

Tornado chart

Scenario comparison

Compare two models before choosing a plan

Select any two scenarios, including the current working model, to compare threshold confidence, spread, and key drivers side by side.

Save more scenarios to compare alternatives with the current working model.

Decision summary Run comparison

The comparison view will identify which scenario has the stronger threshold confidence and which one carries tighter spread.

Threshold leader -

No comparison yet.

Spread leader -

No comparison yet.

Recommendation

Pick two scenarios and run the comparison to generate a planning recommendation and delta view.

Metric delta view

Metric Scenario A Scenario B Delta (B - A)
No comparison yet.

Top drivers

Waiting for comparison Run the scenario comparison to see the leading drivers for each option.

Instructions

How to use this tool

1

Start from a template or custom model

Choose the closest scenario so the formula, inputs, and target threshold start in the right shape.

2

Set realistic distributions

Do not guess precise numbers. Enter credible centers, spreads, and boundaries based on process evidence or expert ranges.

3

Model dependency on purpose

Use the correlation matrix when inputs rise and fall together. Independent assumptions often understate risk.

4

Read percentiles before making commitments

The mean is useful, but planning and risk decisions usually depend more on percentile bands and threshold probability.

What This Monte Carlo Simulator Helps You Decide

This tool is for situations where one answer is misleading because the real question is a range question: What could happen, how likely is it, and which inputs are driving the spread? That applies to cost estimating, forecast planning, yield risk, schedule exposure, contingency sizing, and any operational model where uncertainty compounds.

The strongest use case is not “predicting the future.” It is making uncertainty explicit so a team can compare options, set targets more honestly, and focus mitigation work on the few variables that actually move the output distribution.

Distribution Guidance

Distribution Best use Interpretation in this tool
Normal Symmetric variation around a center. Base is the mean and spread is the standard deviation. Optional min and max clamp the output.
Triangular Expert-estimated low, likely, and high values. Min and max are required. Base is treated as the most likely value.
Uniform Any value in a range is roughly equally plausible. Min and max define the range. Base and spread are informational only.
Lognormal Positive-only variables with a long right tail. Base is the median-like center and spread is the log-scale sigma.
Fixed Known constants or temporarily locked assumptions. Base is always used. Spread and limits are ignored.

Monte Carlo Simulation Frequently Asked Questions

When should I use Monte Carlo simulation instead of one-point estimates?

Use it when uncertainty matters enough that a single estimate would hide the likely spread, tail exposure, or probability of missing a target.

Why do correlated inputs matter?

Because real drivers often move together. Treating them as independent usually narrows the output range and understates actual risk.

What does P90 mean?

P90 is the level at or below which 90 percent of outcomes fall. For cost models, teams often use it as a conservative planning value.

Does this tool use exact Pearson correlation for every distribution?

No. It applies the correlation structure through a Gaussian copula. That is a strong practical method, but the exact realized correlation can shift slightly for non-normal distributions.

What is the most common Monte Carlo modeling mistake?

Entering narrow ranges, ignoring dependency, or using arbitrary spreads that make the output appear more certain than the operating reality supports.

Related Tools

Pair this simulator with the Tolerance Stack-Up Analyzer when variation accumulates through dimensions, the Process Capability Helper when you need a direct specification-capability read, and the Multi-Metric Manufacturing Dashboard when the uncertainty needs to connect back to operating performance.

Six Sigma Kaizen | Monte Carlo Stakeholder Report

${escapeHtml(scenarioName)}

Output metric: ${escapeHtml(dom.outputName.value || 'Output')} | Formula: ${escapeHtml(dom.formulaInput.value)}

Generated: ${new Date().toLocaleString()}

Iterations: ${formatNumber(meta.iterations, 0)}

Target rule: ${escapeHtml(directionLabel)}

Threshold: ${formatOutput(meta.target)}

Executive summary

${executiveSummary}

The strongest modeled driver is ${escapeHtml(topDrivers[0]?.name || 'the primary input set')}, which is the first place to challenge assumptions or mitigation plans.

Key outcome summary

Mean
${formatOutput(summary.mean)}
Median (P50)
${formatOutput(summary.p50)}
P10
${formatOutput(summary.p10)}
P90
${formatOutput(summary.p90)}
Std Dev
${formatOutput(summary.stdDev)}
Confidence band
${formatOutput(summary.lowerBand)} to ${formatOutput(summary.upperBand)}
${escapeHtml(directionLabel)}
${formatPercent(summary.probability, 1)}
Mean minus median gap
${formatOutput(summary.mean - summary.p50)}

Planning reference points

Optimistic
${formatOutput(optimistic)}
Base
${formatOutput(base)}
Conservative
${formatOutput(conservative)}

At ${formatPercent(confidenceHelper, 0)} confidence, the matching threshold is ${formatOutput(confidenceThreshold)}.

Top sensitivity drivers

${driverRows}
Input Absolute correlation Weighted impact

Scenario assumptions

${assumptionsRows}
Input Distribution Base / Mean / Mode Spread / Std Dev Min Max Weight

Interpretation and caution

${escapeHtml(document.getElementById('result-summary-text').textContent || '')}

`; } function exportStakeholderReport() { try { const html = buildStakeholderReportHtml(); const blob = new Blob([html], { type: 'text/html;charset=utf-8;' }); const url = URL.createObjectURL(blob); const reportWindow = window.open(url, '_blank', 'noopener,noreferrer'); if (!reportWindow) { throw new Error('The stakeholder report could not be opened. Allow pop-ups for this site and try again.'); } setTimeout(() => URL.revokeObjectURL(url), 10000); clearError(); } catch (error) { showError(error.message || 'The stakeholder report could not be exported.'); } } dom.templateGrid.addEventListener('click', event => { const button = event.target.closest('[data-template-key]'); if (!button) return; loadTemplate(button.dataset.templateKey); resetToTemplate(); }); dom.useCaseChips.addEventListener('click', event => { const button = event.target.closest('[data-template-key]'); if (!button) return; loadTemplate(button.dataset.templateKey); resetToTemplate(); }); dom.inputRows.addEventListener('input', event => { const target = event.target; const index = Number(target.dataset.index); const field = target.dataset.field; if (Number.isInteger(index) && field) { setInputField(index, field, target.value); } }); dom.inputRows.addEventListener('click', event => { const button = event.target.closest('[data-action]'); if (!button) return; const index = Number(button.dataset.index); if (button.dataset.action === 'duplicate') { addInputRow(index); } if (button.dataset.action === 'delete') { deleteInputRow(index); } }); dom.corrBody.addEventListener('input', event => { const target = event.target; const row = Number(target.dataset.row); const col = Number(target.dataset.col); if (Number.isInteger(row) && Number.isInteger(col)) { setCorrelationValue(row, col, target.value); } }); document.getElementById('add-input-btn').addEventListener('click', () => addInputRow()); document.getElementById('run-btn').addEventListener('click', runSimulation); document.getElementById('reset-btn').addEventListener('click', resetToTemplate); document.getElementById('export-btn').addEventListener('click', exportSummaryCsv); document.getElementById('export-report-btn').addEventListener('click', exportStakeholderReport); document.getElementById('apply-confidence-target-btn').addEventListener('click', applyConfidenceTarget); document.getElementById('apply-optimistic-btn').addEventListener('click', () => applyPlanningPreset('optimistic')); document.getElementById('apply-base-btn').addEventListener('click', () => applyPlanningPreset('base')); document.getElementById('apply-conservative-btn').addEventListener('click', () => applyPlanningPreset('conservative')); document.getElementById('save-scenario-btn').addEventListener('click', saveScenario); document.getElementById('update-scenario-btn').addEventListener('click', updateSelectedScenario); document.getElementById('load-scenario-btn').addEventListener('click', loadSelectedScenario); document.getElementById('delete-scenario-btn').addEventListener('click', deleteSelectedScenario); document.getElementById('compare-scenarios-btn').addEventListener('click', compareSelectedScenarios); document.getElementById('export-model-btn').addEventListener('click', exportModelJson); document.getElementById('import-model-btn').addEventListener('click', () => dom.importModelFile.click()); dom.savedScenariosSelect.addEventListener('change', event => { state.selectedScenarioId = event.target.value; }); dom.compareBaseSelect.addEventListener('change', event => { state.compareBaseId = event.target.value; renderScenarioComparisonOptions(); }); dom.compareAltSelect.addEventListener('change', event => { state.compareAltId = event.target.value; renderScenarioComparisonOptions(); }); dom.importModelFile.addEventListener('change', event => { importModelJson(event.target.files && event.target.files[0]); }); dom.autoSeed.addEventListener('change', () => { dom.seedInput.disabled = dom.autoSeed.checked; persistDraft(); }); [dom.outputName, dom.formulaInput, dom.targetThreshold, dom.iterations, dom.confidenceLevel, dom.confidenceTargetSelect, dom.targetDirection, dom.seedInput, dom.chartViewSelect, dom.scenarioNameInput].forEach(element => { element.addEventListener('input', () => { persistDraft(); if (element === dom.scenarioNameInput) { renderScenarioComparisonOptions(); } if (element === dom.formulaInput) { refreshValidationState(); } }); element.addEventListener('change', () => { persistDraft(); if (element === dom.scenarioNameInput) { renderScenarioComparisonOptions(); } if (element === dom.formulaInput) { refreshValidationState(); } if (state.lastRun && (element === dom.confidenceTargetSelect || element === dom.targetDirection)) { updateDecisionHelperNotes(state.lastRun.summary); } if (state.lastRun && element === dom.chartViewSelect) { renderDistributionChart(state.lastRun.summary); } }); }); loadSavedScenarios(); renderSavedScenarios(); renderScenarioComparisonOptions(); restoreDraft(); if (!state.inputs.length) { loadTemplate(DEFAULT_TEMPLATE_KEY); } updateDecisionHelperNotes(null); runSimulation();