The assumption ledger

Every number, where it came from, and how wide it could be

One table holds every figure the simulation runs on. Each row says what the value is, which of five origins it has, how wide the band around it is, and for anything read from a document, the exact line it was read from. Nothing is blended into a single confident figure.

How the engine draws from itWhat the brief does with it

A default sitting under a decision worth six figures is the most useful thing this software can point at.

Monthly revenuedocumentGross margindocumentPrice elasticitydefaultMonthly churndocumentCompetitor reactiondefaultContracted revenuedefaultLargest customer sharederivedCost per headderived

The ledger is the honest part. Everything else is arithmetic on top of it.

A simulation is exactly as good as the numbers it was given, and most tools handle that by hiding the numbers. This one puts them in one list, sorts the guesses to the top, and tells you which of them is actually moving your answer. If that list makes you uncomfortable, the list is working.

Five origins

Where a number can come from

OriginWhat it meansBandWeight in the confidence score
DocumentRead from a file you uploaded, with the supporting line quoted on the rowNarrowest. Just under half the base width for that kind of numberFull
UserTyped in by you, which also locks the rowNarrowest of all, a quarter of the base widthFull
DerivedWorked out from things that were read, such as headcount times cost per head, or revenue divided by customersAbout seventy percent of the base widthSeven tenths
AIProposed by a language model reading prose the rules could not parseThree quarters of the base widthHalf
DefaultAn industry starting point, used because nothing in your record said anything about itFull base widthFifteen hundredths

Base width depends on the kind of number. Elasticity is uncertain even when you have measured it; headcount read from a payroll file is not. Ratios and scores are clamped so a band can never take them outside nought to one, and counts can never go negative.

A row

What every line of the ledger carries

The point of the quote is that you can check it in ten seconds. A gross margin of thirty one percent sitting next to the sentence it was read from is a different thing from a gross margin of thirty one percent sitting on its own.

  • The key and a readable label, so the row is findable by either
  • The value and its unit: money, ratio, count, months or a score from nought to one
  • The low and high of the band, which is what the Monte Carlo draws between
  • A confidence between nought and one, set from the origin and from how sure the extractor was
  • The origin, the source file, the chunk and the exact quote where there is one
  • A note explaining how it was arrived at, written by whichever code path set it
  • Whether the row is locked

Bands

The band is the argument, not decoration

Before every replication the engine walks this table and draws a value for each numeric row: lowest at the bottom of the band, most likely at the value in the ledger, highest at the top, using a triangular distribution. Two hundred replications means two hundred slightly different but internally consistent companies.

So the tenth and the ninetieth on your answer are not error bars bolted on at the end. They are the direct consequence of how much your own record pins down. Replace a default with a figure from a document and the band narrows, and the next run says so.

This is also why widening a band is a legitimate move. If you genuinely do not know your elasticity within a factor of two, say so in the ledger and let the brief report an answer that is honest about it.

  • A row with no band, or a band of zero width, is used exactly as it stands
  • A band never takes a ratio outside nought to one, whatever the multiplier says
  • You can set the low and high by hand as well as the value

Locking

Type over a number and a rebuild will not undo it

Editing a row sets its origin to user and locks it. A locked row is skipped when the ledger is rebuilt, which happens every time you add a file or rebuild the graph. Your churn figure survives the arrival of a new customer list.

Take the lock off and the next rebuild takes the row back over. That is the right behaviour when you typed a placeholder in week one and have since uploaded the file that actually answers it.

The pattern to aim for is simple. Run once, read the defaults at the top of the brief, and replace the two or three that the sensitivity analysis says are carrying the answer. A twin does not need a perfect ledger. It needs an honest one with the load bearing rows nailed down.

Confidence

One number for how much of the model is standing on guesses

1.0
Weight for a document or user row
Something you uploaded, or something you typed
0.7
Weight for a derived row
Worked out from rows that came from your record
0.5
Weight for a model estimate
Proposed from prose, never taken as read
0.15
Weight for an industry default
Doing a job nobody has given it evidence for

The confidence score is the weighted average across every row in the ledger. It is the same number the overview calls readiness, and the brief states it in plain English: of so many assumptions behind this run, so many came from something you uploaded or typed, so many were worked out from those, and so many are industry defaults.

Sensitivity

Which assumption is actually moving the answer

Confidence tells you how much of the ledger is guessed. Sensitivity tells you whether it matters, and the two are not the same thing. A default you have no evidence for is harmless if the answer does not depend on it.

The analysis takes one assumption at a time, pins it to the bottom of its own band, runs the scenario, pins it to the top of the same band, runs again, and records how far cumulative operating profit over the whole window moved between the two. While a row is pinned its band is removed from the draw, so the swing measured is that row and nothing else.

The results are ranked by swing, largest first. That ranking is the shopping list: go and find evidence for the top two and the answer stops being an opinion.

How a sweep differs from this

640 runs of one scenario

The usual suspects

The rows the brief puts at the top, and why

AssumptionWhy it carries so muchWhere it comes from if you have not given it one
ElasticityIt sets both halves of the price response, the churn half and the new business half. Nothing else in the model has that reach.An industry starting point, and the single most load bearing default in the whole system
Monthly churnIt is the base the multiplier moves from, and it decides where the customer count settles against new businessTypical monthly logo churn for your industry
Gross marginIt converts every revenue movement into a profit movement, so it scales the entire answerRead from a profit and loss, taken as one minus the cost of goods share, or an industry figure
Competitor reactionIt decides how much of your move gets matched, and therefore how long any advantage lastsAn industry figure, raised when the graph holds several competitors
Contract locked shareIt decides how much of your base can react at all this monthAn industry figure. Upload contracts and this stops being a guess
Switching costIt damps the customer response to a price gap, and it is what holds an anchored account in placeAn industry figure between nought and one
Top customer shareIt is the size of the hole if that account leavesCounted from your customer list when you have one. Guessed low when you do not, which flatters the answer

Industry priors are starting points, not findings. They are there so a twin with a thin record still runs, and they are sorted to the top of the brief precisely so they do not stay.

Find out what your answer is standing on

The ledger is visible before you run anything and before you pay for anything. If the defaults look wrong, they probably are, and replacing one takes about a minute.

Build a twinWhat it cannot tell you