The Analyst's Path

Commitment pacing model

A commitment pacing model sizes the commitments a private markets investor signs each year so that its private weight reaches and holds a target. It rolls forward commitments, calls, distributions and net asset value (NAV), and checks the identity that cumulative commitments less cumulative calls equals the unfunded balance. In steady state the annual commitment is a fixed share of NAV: 16% at 12% growth and 25% distributions, which settles NAV at 6.25 times the annual commitment.

6 min readPart of Alternatives in the Portfolio: Allocation, Due Diligence and Real-Asset ValuationOpen in course mode

Advertisement

Committing money to a private fund is nothing like buying a stock. You sign for an amount, the manager calls it over four or five years on a schedule you do not control, and the money comes back over the following six or seven. Hold that in your head and the target-weight problem becomes obvious: to sit at a stable 20% private weight you must run a rolling programme of commitments across vintages, and the commitment you sign this year is sized by arithmetic rather than by conviction.

The model has four moving parts and one identity.

  • Commitments. What you sign for this year. Your only decision variable.
  • Calls. A rate applied to the opening unfunded balance. A 25% call rate on a book of unfunded commitments is a reasonable planning assumption for buyout and growth.
  • Distributions. A rate applied to the grown net asset value, ramping from zero in the first two years to a mature 25%.
  • Net asset value. Rolls forward as NAV(t) = NAV(t-1) x (1 + g) + calls(t) - distributions(t).

The identity that must hold in every period, and the first test of any pacing model: cumulative commitments less cumulative calls equals the outstanding unfunded balance. If it does not, the model is wrong however good the chart looks.

Advertisement

What is the steady-state commitment?

The steady state is worth deriving because it gives you the answer without the table. If the programme is mature and the net asset value is flat, NAV = NAV x (1+g)(1-d) + C, so the annual commitment is C = NAV x [1 - (1+g)(1-d)]. At g = 12% and d = 25%, (1+g)(1-d) = 0.84, so C = 0.16 x NAV and the net asset value settles at 6.25 times the annual commitment. Unfunded settles at C divided by the call rate, which is 4.00 times the annual commitment.

A real portfolio grows, so the target net asset value grows with it, and the commitment must cover the growth as well as the runoff. If the whole portfolio is planned to compound at n, the requirement becomes C = NAV x [(1+n) - (1+g)(1-d)]. At a planning growth of 4.3% the share rises from 0.160 to 0.203 of the target net asset value. Getting this wrong in the conservative direction is the commonest pacing error there is. A programme that commits 16% of its target every year while the portfolio compounds will drift below target forever, and that is exactly what a family office discovers in year eight when it wonders why the private weight keeps falling despite steady commitments.

How do you reach the target from zero?

Reaching the target from zero needs more than the steady-state commitment, because there is nothing to run off yet. The standard device is a proportional controller: commit the steady-state amount plus a fraction of the gap between target and current net asset value, capped at a policy maximum so no single vintage becomes a concentration. Worked Example 1 runs it at a 35% gap-closure with a 10%-of-portfolio cap and lands a programme that crosses 20% in year five, peaks at 22.27% in year six and settles back to 20.14% by year ten.

The overshoot is not a modelling error. It is the pacing model's own version of the J-curve: commitments signed during the ramp are still being called after the target has been reached, and the only way to avoid the bump entirely is to accept a slower ramp. Choose deliberately, and write down which you chose.

{
  "skill": "Building and stress-testing a commitment-pacing model",
  "use": "Have an assistant write the pacing recursion from your stated call rate, distribution ramp, growth rate and target weight, then have it produce a second implementation with a different structure (a per-vintage cash-flow ledger rather than an aggregate roll-forward) so the two can be diffed period by period before either is trusted.",
  "tools": ["Chat assistants with code execution - Claude, ChatGPT, Gemini", "Python: pandas or plain lists for the roll-forward; a spreadsheet for the side-by-side", "Your own commitment and call history, if you have one, as the calibration set"],
  "prompt": "Write Python that runs a commitment-pacing model over fifteen years. Inputs: opening public and private balances, a call rate applied to opening unfunded, a distribution rate schedule applied to grown NAV, a private growth rate, a public growth rate, a spending rate applied to the prior-year total, and a commitment schedule. Outputs: a year-by-year table of commitments, opening unfunded, calls, closing unfunded, distributions, NAV, public balance, total and private weight. Then write three assertions: cumulative commitments minus cumulative calls equals closing unfunded to 1e-9; NAV rebuilt from calls and distributions alone equals the table's NAV to 1e-9; and total equals public plus private in every row. Do not round intermediate values. Finally, solve for the constant commitment that holds the private weight at target in steady state and state the formula you used.",
  "verify": "Recompute at least two full years by hand and confirm the three assertions actually fire on bad input: feed a commitment schedule that over-commits and check the unfunded reconciliation still holds, then deliberately break the distribution rate and check the NAV assertion fails. Trace the call rate and distribution ramp to a named source, either your own realised history or the manager's stated pacing guidance, and Date-check that history against the vintages it came from. An assistant will happily use a 25% call rate because it appeared in a prompt; that number is an assumption about somebody else's behaviour and must be sourced or labelled. Treat any residual in the unfunded reconciliation as a wrong table rather than a rounding artefact, because the relationship is an identity.",
  "diy": "You must be able to derive the steady-state commitment from the roll-forward on paper, because that formula is what tells you instantly whether a proposed programme is under-committed. The gate asks for the derivation, not the code. An assistant can build the table; it cannot tell you that a 10%-of-portfolio vintage cap is the right governance choice for your investor.",
  "market": "IN"
}

Advertisement

Part of the course

This page is part of Alternatives in the Portfolio: Allocation, Due Diligence and Real-Asset Valuation (AL1.04), in Phase 12: Finance Plus, AI and the quant-code track. The module's flashcards and its quiz are in the app.