ModelRisk example · Projects and construction
Bid Pricing: Margin versus Chance of Winning
What markup should we bid? The trade-off between the chance of winning and the profit if we win.
From the model’s saved run
Which markup?
Chance of winning, expected profit (all tenders, won or lost), the margin on a won job, and the chance of a loss: on a won job, and on any tender.
S-curve (cumulative probability) of 4% markup, 8% markup, 12% markup from the saved simulation.
| Markup | Chance of winning | Expected profit, US$m | Margin if we win, US$m | Loss if we win | Cost above bid, any tender |
|---|---|---|---|---|---|
| 0% | 94.9% | −0.44 | −0.31 | 62.0% | 58.8% |
| 2% | 88.5% | −0.13 | 0.02 | 46.6% | 41.2% |
| 4% | 78.1% | 0.09 | 0.31 | 33.3% | 26.0% |
| 6% | 65.8% | 0.23 | 0.57 | 20.7% | 13.6% |
| 8% | 51.7% | 0.27 | 0.82 | 11.8% | 6.1% |
| 10% | 38.5% | 0.26 | 1.06 | 5.4% | 2.1% |
| 12% | 26.1% | 0.18 | 1.28 | 2.1% | 0.6% |
| 14% | 16.0% | 0.09 | 1.51 | 0.5% | 0.1% |
| 16% | 9.3% | 0.01 | 1.74 | 0.1% | 0.0% |
| 18% | 4.8% | −0.06 | 1.95 | 0.0% | 0.0% |
| 20% | 2.3% | −0.10 | 2.17 | 0.0% | 0.0% |
| Markup with the highest expected profit | 8% |
Margin if we win: before the bid cost. Loss if we win against cost above the bid on any tender: the gap is the winner's curse.
Histogram of Expected profit (US$m, left axis) from the saved simulation.
The business question
A contractor is preparing a price for a US$20 million building contract, awarded on price alone. Four competitors are bidding. Everyone is estimating the same job, and everyone's estimate is wrong by a few per cent — but not by the same amount.
The contractor wins most easily when its own estimate is the one that missed costs the others saw: a won job is then too often one whose cost was underestimated, and it loses money — the winner's curse. A high markup is profitable when it wins, but rarely wins.
The model draws the job's true cost and the four competitors' bids from it, and evaluates eleven markups on the same simulated tenders, so that the best markup can be read off and its risk understood.
- Who it is for
- Estimating and bid managers, commercial directors and business-development teams.
- Main outputs
- For each markup from 0% to 20%: the chance of winning, the expected profit, the profit if the job is won and the chance of a loss on a won job · the markup with the highest expected profit · profit distributions at three markups · drivers.
How the model works
Three sheets after this one, read from left to right. Each one feeds the next.
Inputs sheet
The base estimate, a factor for how far the real cost can differ from it, a market factor for prices that affect everyone, the pattern of competitors' bids relative to our estimate, and the cost of preparing the bid.
Bids sheet
The job's true cost = our estimate × our estimating error × the market factor. Each competitor bids the true cost × its own ratio (its estimating error and its markup). For each markup our bid is our estimate × (1 + markup).
We win if it is below the lowest competitor bid; profit = bid − true cost if we win, minus the bid cost in any case.
Results sheet
For each markup: the chance of winning, the expected profit, the profit if we win, and the chance of a loss on a won job. The markup with the highest expected profit; and the profit range at three markups.
ModelRisk techniques
Find similar models
- Product
- Type
- Application
- Uses
The results in detail
Profit at three markups
The range of profit over all tenders, won or lost.
| Measure | Unit | Value |
|---|---|---|
| 4% markup: 10th percentile of profit | US$m | −0.71 |
| 8% markup: 10th percentile of profit | US$m | −0.15 |
| 12% markup: 10th percentile of profit | US$m | −0.15 |
| 4% markup: 90th percentile of profit | US$m | 0.99 |
| 8% markup: 90th percentile of profit | US$m | 1.27 |
| 12% markup: 90th percentile of profit | US$m | 1.33 |
What drives the profit at the markup in detail
Lowest and highest mean profit at the markup on the Inputs sheet over ten equal groups of each input (VoseSimSensitivityMean).
Tornado chart: the inputs ranked by how far the mean output moves across each input’s range.
The ranking as a table 6 inputs
| Input (ranked by influence) | Lowest mean | Highest mean | Rank |
|---|---|---|---|
| Our cost factor | −0.10 | 0.49 | 1 |
| Competitor 2 bid ratio | −0.08 | 0.40 | 2 |
| Competitor 4 bid ratio | −0.06 | 0.40 | 3 |
| Competitor 1 bid ratio | −0.06 | 0.38 | 4 |
| Competitor 3 bid ratio | −0.06 | 0.38 | 5 |
| Market factor | 0.15 | 0.34 | 6 |
How to read these results
- Expected profit counts every tender, won or lost: a low markup wins often but earns little or loses money, a high markup earns well but rarely wins. The best markup balances the two.
- Every competitor bids off the same true cost. When our estimate is too low, theirs mostly are not, so our bid looks cheap exactly when the job will cost us more: the chance of a loss on a won job is well above the chance that the cost exceeds our bid on any tender. That gap, in the last two columns, is the winner's curse.
- The market factor moves the true cost and every bid together, so it matters less to the decision than our own estimating error: the tornado chart shows where better estimating would pay off.
- Bid costs are paid on every tender, so a markup that almost never wins still has a small negative expected profit.
See it move. Open the workbook, change an input on the Inputs sheet and run the simulation: every table and chart on this page updates in Excel.
Inputs and assumptions
Every assumption in the model, with its uncertainty and where it comes from. The figures are illustrative.
The job and our estimate 4 inputs
What the job will really cost, against our estimate of it.
| Assumption | Unit | Uncertainty | Low | Most likely | High |
|---|---|---|---|---|---|
| Base estimate of our costEstimator's most likely cost at tender. | US$m | Fixed | 20.00 | ||
| Our estimating error (true cost ÷ estimate)Past jobs: final cost between 7% under and 12% over the tender estimate. | × | PERT | 0.93 | 1.00 | 1.12 |
| Market price factorMaterials and labour prices over the bid period: they move the job's true cost, and so every bid. | × | PERT | 0.95 | 1.00 | 1.07 |
| Cost of preparing the bidEstimating and design time; paid whatever the outcome. | US$m | Fixed | 0.15 | ||
Competitors 3 inputs
4 competitors. Each estimates the same job, with its own error, and adds its markup: its bid ÷ the job's true cost.
| Assumption | Unit | Value |
|---|---|---|
| Competitor bid ratio: lowFrom past tenders whose final cost became known. | × true cost | 1.00 |
| Competitor bid ratio: most likelyMost common ratio. | × true cost | 1.12 |
| Competitor bid ratio: highHighest ratio seen. | × true cost | 1.28 |
Detail 1 input
| Assumption | Unit | Value |
|---|---|---|
| Markup analysed in detailOne of the eleven markups (0% to 20% in steps of 2%): the tornado chart on the Results sheet. | markup | 8% |
Units and conventions
- Money
- US$ million (US$m).
- Markup
- Bid = base estimate × (1 + markup).
- Bid ratio
- A competitor's bid divided by the job's true cost, from past tenders whose final cost became known.
- Winner's curse
- We win most easily when our estimate is too low: the chance of a loss on a won job is higher than on any tender.
Key assumptions and limitations
- Award
- Lowest price wins; no negotiation, no quality score, no tie.
- Competitors
- Four competitors with the same bid pattern. Their errors are independent of ours and of each other's, and they do not react to our price.
- Costs
- Every bid is linked to the job's true cost; the market factor moves it for everyone.
- Data
- The tender and the bid history are invented for this example.
How to use it
- Enter your estimate and the cost uncertainty on the Inputs sheet.
- Calibrate the competitors' bid ratios from your tender history (their bid ÷ your estimate).
- Run a simulation from the ModelRisk ribbon (10,000 samples with a fixed seed are set).
- Read the best markup, then decide whether its chance of a loss on a won job is acceptable.
The tornado chart fills in after a simulation with ModelRisk’s classic engine.
ModelRisk functions used
- VosePERT
- Our estimating error, the market factor and each competitor's bid ratio.
- VoseInput, VoseOutput
- Name the uncertain inputs and the outputs: win, profit and loss-on-win at every markup.
- VoseSimMean
- Statistics of the simulation for the tables and charts on the Results sheet.
- VoseSimSensitivityMean
- The tornado chart: every VoseInput ranked by how far the mean profit at the markup in detail moves across its range.
Further reading
- Sensitivity analysis in Excel: a tornado chart step by step (Vose guide)
- Friedman, L. (1956). A competitive-bidding strategy. Operations Research 4(1), 104–112.
- Thaler, R. H. (1988). Anomalies: the winner's curse. Journal of Economic Perspectives 2(1), 191–202.
Download the workbook and run it yourself. It opens in Excel with ModelRisk. The free trial runs every example model.
Related example models
- ModelRisk★★★★★Material Price Escalation and Procurement StrategyBuy the steel now, as needed, or with a price cap?Monthly steel and concrete price paths over 18 months and four ways of buying the steel, on the same paths.
- ModelRisk★★★★★Hedging Production with Swaps and CollarsSwap, collar or puts?Monthly price paths and production with outages, and four hedging strategies compared on the same paths.
- ModelRisk★★★★★Reinsurance Programme: Excess of Loss and Quota ShareWhat does reinsurance cost, and what does it buy?Every claim split between the insurer and two excess-of-loss layers, a quota share on top; four programmes compared on the same claims.
An illustrative example: the figures are invented for teaching and do not describe a real company, project or asset. Last updated 9 October 2026.