xellstorm Learning center
EN
Open the app

Which probability distribution should I use? A guide for Monte Carlo models

Guide · Updated October 2026

Choose a distribution by what you know about the uncertain number, not by its name. An expert’s low, most likely and high value calls for a PERT or a triangular distribution; a positive amount with a long upper tail, such as a cost or a duration, for a lognormal; a symmetric measurement for a normal; a time to failure for a Weibull; a count of events for a Poisson; an event that happens or not for a Bernoulli; a share between 0 and 1 for a beta, and shares that must add up to a whole for a Dirichlet; the largest value of a period for a Gumbel or a GEV; a total of losses, how many and how large, for a compound distribution; and past data for a fitted distribution. The finder below asks one or two questions and names the distribution; xellstorm offers 52 distributions in all, including your own tables.

Find your distribution

Pick what describes your uncertain number. Where one answer is not enough, a second question opens below it.

What is the uncertain number?
What do the low and the high mean?

PERT

A smooth curve from min to max that peaks at the most likely value and rarely reaches the limits. Its mean, (min + 4 × most likely + max) / 6, stays close to the most likely value.

In xellstorm: choose PERT and type min, likely and max. New inputs start as a PERT.

PERT distribution guide

Triangular

Straight lines from min up to the most likely value and down to max. It spreads wider than a PERT with the same three numbers, a more cautious reading of the estimate.

In xellstorm: choose Triangular and type min, likely and max.

Triangular distribution guide

Uniform

Every value between min and max equally likely. Use it only when you really cannot say which part of the range is more plausible.

In xellstorm: choose Uniform and type min and max.

Uniform distribution guide

A distribution fitted to your percentiles

Used as min and max, a P10 and a P90 would leave out the 20% of outcomes beyond them. Fit a shape that passes through your P10, P50 and P90 instead: lognormal for a long upper tail, normal for a symmetric spread.

In xellstorm: select the input and use “From estimates” in the side panel (PERT, Normal, Lognormal or Triangular), or choose Triangular from percentiles, a triangular set by percentiles.

P50, P80 and P90 explained

A distribution fitted to your data

Let the data choose: fit several shapes and compare how well each one explains the values. Check that the history is still representative, and remember that a small sample says little about the extremes.

In xellstorm: select the input and use “From data” in the side panel. It fits normal, lognormal, gamma, Weibull, beta, Poisson, negative binomial and more, and ranks them.

Worked example: fitting delivery lead times

Bernoulli

1 with probability p, 0 otherwise. Multiply it by the event’s impact to get its cost in each trial: never the average, always all or nothing.

In xellstorm: choose Bernoulli and type p; keep the impact in a cell of its own.

Bernoulli and binomial guide
What kind of count?

Poisson

Whole numbers set by one figure, the average count per period. Its variance equals its mean.

In xellstorm: choose Poisson and type its mean.

Poisson distribution guide

Negative binomial

A count with a variance larger than its mean: more quiet periods and more busy ones than a Poisson. Typical for demand and clustered defects.

In xellstorm: choose Negative binomial and type n and p, or fit it to past counts.

Poisson and negative binomial guide

Binomial

The number of yeses among n independent tries with the same probability p, from 0 to n.

In xellstorm: choose Binomial and type n and p.

Binomial distribution guide
What kind of time?

Weibull

A scale for the typical life and a shape for how failures spread over time: below 1 early failures, above 1 wear-out.

In xellstorm: choose Weibull and type shape and scale.

Weibull distribution guide

Exponential

One number, the mean time between events. Age does not matter: the chance of an event in the next hour is always the same.

In xellstorm: choose Exponential and type the mean as its scale.

Weibull and exponential guide

Lognormal (or PERT from an estimate)

Positive with a long upper tail. With an expert’s three-point estimate of the duration, a PERT does the same job within limits.

In xellstorm: choose Lognormal (s, scale = the median, loc 0), or fit it to past durations.

Lognormal distribution guide

Gamma

The total of several exponential waits: the shape is their number and the scale the mean of each. Also a general positive, right-skewed shape.

In xellstorm: choose Gamma and type a (the shape) and scale.

Gamma distribution guide
One amount, or a total of many?

Lognormal

Most values near the typical one, a few far above it. Its mean lies above its median, which is why budgets built on typical values fall short. A gamma has a similar shape with a thinner tail.

In xellstorm: choose Lognormal, or fit it from a P10, P50 and P90 with “From estimates”.

Lognormal distribution guide

Splice (body + tail)

One distribution below a point and another above it: for example a lognormal for ordinary losses and a generalized Pareto for those beyond a threshold. Give the share below the point, or leave it blank and the two densities meet at the same height.

In xellstorm: choose Splice (body + tail), then set the body below the point, the tail above it and the splice point in its row.

Lognormal distribution guide

Compound (frequency × severity)

A count of events drawn from a frequency, such as a Poisson or a negative binomial, and that many sizes drawn from a severity, such as a lognormal, added up in each trial. A year without an event costs nothing; a year with several adds them all. A deductible and a limit can apply to each event.

In xellstorm: choose Compound, then set the frequency, the severity and, if they apply, each event’s deductible and limit in its row.

Poisson guide: counting the events

Gumbel or GEV (generalized extreme value)

The largest of many values follows an extreme value distribution, with a long upper tail. A Gumbel has a fixed shape; a GEV adds a shape parameter for a heavier tail or for values that end at an upper limit. Use the past maxima of each period, not every value.

In xellstorm: choose Gumbel (loc, scale), or fit it to past maxima with “From data”; or choose GEV (generalized extreme value). Its shape (c) is minus the usual ξ, as in scipy: below 0 for a heavy upper tail.

Normal

The bell curve: a mean and a standard deviation. It also describes a total of many small, independent uncertainties.

In xellstorm: choose Normal and type mean and sd.

Normal distribution guide
One share, or several that make up a whole?

Beta

Stays between 0 and 1 by construction. Its mean is alpha / (alpha + beta), and the larger their sum, the narrower it is.

In xellstorm: choose Beta and type a and b (loc 0 and scale 1 for a share).

Beta distribution guide

Dirichlet (shares of a total)

One uncertain share per cell, and in every trial the shares add up to the total. Each cell’s alpha divided by the sum of the alphas is its mean share, and the larger the alphas together, the less the shares vary. Each share on its own follows a beta distribution.

In xellstorm: make the range of cells one input, choose Dirichlet (shares of a total), and type an alpha per cell and the total (1 if you leave it blank).

Beta distribution guide

A time series

Each period starts from the one before, so a bad month carries into the next instead of being redrawn independently. A price that grows by random percentages, a rate that wanders around a level.

In xellstorm: make the row of cells one input and set its draw to “time series (one path)”, then choose GBM (growth), Random walk, AR(1), Mean reversion or Jump diffusion.

Worked example: a cash-flow runway

The distributions at a glance

The parameters are named as in xellstorm’s distribution menu. Every distribution also takes a truncation (keep only values between two limits) and a shift.

Common distributions, what they describe, their parameters in xellstorm and a random draw in Excel
DistributionDescribesParametersDraw in Excel
PERTExpert estimates with limits, most likely value trustedmin, likely, maxBETA.INV(RAND(), α, β, min, max)
TriangularExpert estimates with limits, values near them possiblemin, likely, maxAn IF with SQRT, see the guide
UniformA range with no favoured valuemin, maxmin+(max-min)*RAND()
NormalSymmetric variation: measurements, errors, totals of many partsmean, sdNORM.INV(RAND(), mean, sd)
LognormalPositive amounts with a long upper tail: costs, losses, durationss, scale, locLOGNORM.INV(RAND(), LN(median), s)
GammaPositive, right-skewed; the total of several waitsa, scale, locGAMMA.INV(RAND(), shape, scale)
BetaShares and rates between 0 and 1a, b, loc, scaleBETA.INV(RAND(), α, β)
WeibullTime to failure, wear-out or early failuresshape, scale, locscale*(-LN(1-RAND()))^(1/shape)
ExponentialTime between random events at a steady ratescale, loc-mean*LN(1-RAND())
PoissonEvents in a period at an average ratemeanA table of POISSON.DIST and COUNTIF, see the guide
Negative binomialCounts more uneven than a Poisson: demand, clustered defectsn, pA table of NEGBINOM.DIST and COUNTIF
BernoulliWhether an event happens (1) or not (0)pIF(RAND()<p, 1, 0)
BinomialYeses out of n triesn, pBINOM.INV(n, p, RAND())
Integer uniformWhole numbers in a range, all equally likelylow, highRANDBETWEEN(low, high)
Discrete tableA few possible values with their probabilitiesa table of values and probabilitiesA lookup of cumulative probabilities
Triangular from percentilesA triangular set by a low and high percentile, not limitsbottom, likely, top, bottom %, top %–
Student’s tSymmetric with heavy tails: returns, errors with outliersdf, loc, scaleloc+scale*T.INV(RAND(), df)
GumbelThe largest of many values: annual peak loads, floodsloc, scaleloc-scale*LN(-LN(RAND()))
GEV (generalized extreme value)The largest of many values, with a heavier tail or an upper limitshape (c), loc, scaleloc+scale*(1-(-LN(RAND()))^c)/c
MetalogA flexible shape through several percentilesa table of values and probabilities–
CompoundThe total of a random number of events, each with its own size: claims, lossesfrequency, severity, deductible, limit–
Splice (body + tail)One distribution below a point, another above it: a body and a heavy tailbelow the point, above the point, splice point, share below–
Dirichlet (shares of a total)Shares that add up to a total in every trial: market shares, a budget splitalpha per cell, totalGAMMA.INV(RAND(), alpha, 1) in each cell, divided by their sum

xellstorm offers 52 distributions. The app’s menu lists 29 of them, and 23 more under “More families”, most of those met in models built for Excel add-ins, which xellstorm converts on import (see moving a model from an add-in).

The workbook: every distribution as an Excel formula

The workbook on this page has one row per distribution: its parameters, a random number from RAND(), a draw, and the mean, P10 and P90 by formula. Press F9 and every draw changes. Its last columns hold the same distributions as xellstorm inputs, so a run gives Excel’s draws and xellstorm’s side by side. Each guide on this site checks the workbook’s formulas against 10,000 such draws.

examples/distributions.xlsx: one row per distribution, with the mean, P10 and P90 its formulas calculate
DistributionExample and parametersMeanP10P90
NormalDemand next season (units)
Mean 1,000, Standard deviation 200
1,0007441,256
LognormalRepair cost of one claim (USD)
Median 2,000, Spread of ln 0.8
2,7547175,576
TriangularCost of one item (USD thousands)
Min 80, Most likely 100, Max 140
106.791.0124.5
PERTCost of one item (USD thousands)
Min 80, Most likely 100, Max 140
103.389.2118.7
UniformUnit price (USD)
Min 40, Max 60
504258
WeibullPump life (hours)
Shape 1.5, Scale 20,000
18,0554,46234,874
ExponentialTime between breakdowns (hours)
Mean 500
500531,151
PoissonComplaints in a week
Mean 4
427
Negative binomialOrders in a week, more variable
Successes 4, Probability 0.5
418
BernoulliA risk occurs (1) or not (0)
Probability 0.3
0.301
BinomialDefective units in a batch of 50
Trials 50, Probability 0.04
204
BetaShare of customers who renew
Alpha 8, Beta 2
80.0%63.2%93.9%
GammaDays to finish three repairs in a row
Shape 3, Scale 2
6.02.210.6

Common mistakes

Guides to each distribution

Questions

Which distribution should I use when I have no data?

Ask the people who know the quantity for a low, a most likely and a high value, and use a PERT or a triangular distribution. If their low and high are “one in ten” cases rather than limits, fit a distribution to those percentiles instead. Then check what the numbers imply (mean, P10 and P90) with the people who gave them.

Which distribution is best for cost estimates?

For each cost item, a PERT or triangular distribution from a three-point estimate, or a lognormal when there is no firm maximum. For risks that may or may not occur, a Bernoulli times the impact. The total is then simulated, not estimated: see the project cost contingency example.

Which distribution should I use for task durations?

A PERT or triangular distribution from a three-point estimate of each task, or a lognormal fitted to past durations. Both allow a long upper tail. For the schedule, simulate the network of tasks: see schedule risk analysis.

Which distribution should I use for insurance claims or operational losses?

Model how many losses a period brings and how large each one is separately, and let a compound distribution add them up: a Poisson or a negative binomial for the count, a lognormal, gamma or Pareto for the size. When the large losses follow a heavier tail than the ordinary ones, splice a generalized Pareto above a threshold to the body below it. Modeled apart, each can be checked against its own data, and a deductible or a limit applies to each loss.

How do I simulate shares that add up to 100%?

Draw them together with a Dirichlet distribution, not with a separate distribution in each cell: independent shares rarely add up to 100%. In Excel, draw GAMMA.INV(RAND(), alpha, 1) in each cell and divide each draw by their sum; in xellstorm, choose Dirichlet (shares of a total) for the range of cells.

How do I know whether a distribution fits my data?

Fit several and compare them. xellstorm’s “From data” ranks the fits by AIC, which rewards a good fit and penalizes extra parameters, and shows each one’s goodness-of-fit tests. Look at the histogram against the curve too, especially in the tail that matters for your decision, and be careful with small samples.

Does the choice of distribution change the results much?

It changes the tails more than the middle. Two shapes with the same three numbers or the same mean often give similar averages but different P90s and different chances of exceeding a budget. When it matters, run both as scenarios on the same random draws and compare.

Related

xellstorm is a browser-based Monte Carlo simulation tool for Excel models: no add-in, and the workbook never leaves your computer.