1. Freeze and reconcile the data
Before editing labels, export operator, exchange, bank, and model records. Reconcile:
Opening cash + deposits - withdrawals + settled net result = closing cash + open exposure
Adjust explicitly for bonuses, commission, fees, currency movement, voids, chargebacks, and pending withdrawals. Do not force a mismatch into the profit field.
Worked cash and yield check
The following annual totals are illustrative:
| Item | Amount |
|---|---|
| Settled stake | GBP 1,000 |
| Gross returns | GBP 1,040 |
| Commission and fees | GBP 10 |
| Net profit | GBP 30 |
Net profit = 1,040 - 1,000 - 10 = GBP 30
Yield on settled stake = 30 / 1,000 = 0.03, or 3%
Deposits and withdrawals do not belong in this yield numerator. They are cash transfers, not betting results.
2. Audit completeness
Count every qualified selection, pass, rejected stake, changed price, void, and manual override. Compare the source data with receipts. A record that includes only accepted winners cannot support a performance conclusion.
Record a new version whenever the model, price source, market scope, stake rule, or settlement treatment changes. Report old and new versions separately before considering an aggregate.
3. Evaluate probabilities before returns
For probability-producing methods, calculate proper scores and calibration on forecasts frozen before the event. The original Brier paper establishes a probability verification score. Scikit-learn's calibration guidance explains why a Brier loss alone mixes reliability, resolution, and uncertainty.
Compare with relevant baselines on the same fixtures. A profitable settlement record can coexist with poorly calibrated probabilities, and calibrated probabilities can still be paired with unattractive prices.
4. Evaluate execution and risk
| Layer | Measures |
|---|---|
| Price | Displayed, accepted, and defined closing reference |
| Execution | Requested versus accepted stake, rejection, slippage, limits |
| Return | Net profit, yield, result by locked segment |
| Risk | Maximum drawdown, open exposure, stake concentration, losing paths |
| Process | Overrides, missing rows, rule and version changes |
Add uncertainty around average results. NIST documents how sample variability affects confidence limits for a mean. Do not adopt one universal number of bets as sufficient.
5. Make only prospective changes
Write each change, reason, effective date, and confirmation test. Do not optimize thresholds on the full year and then report the same year as validation. Preserve an untouched later period.
Outcome knowledge can change how people judge the quality of an earlier decision; the original outcome-bias research supports separating the information available at decision time from the eventual result.
Publish a change and coverage table
For every model or process version, report its active dates, eligible events, decisions, passes, attempted bets, accepted bets, settled stake, and missing rows. A method used for only a favourable month should not be blended silently with a year-long baseline. Explain whether the change was planned, triggered by a data failure, or chosen after seeing results.
Add a reconciliation appendix listing unresolved differences and their cash value. A review can pass with a documented immaterial timing difference, but not with missing deposits, unexplained balance adjustments, or settlements assigned to the wrong period. Freeze the final report and its source-file hashes so the next review can reproduce every total rather than relying on a mutable dashboard.
Next step
Use Bankroll Spreadsheet Template for the next part of this topic.
Continue learning
- Next guide: Betting Bankroll Spreadsheet
- Related guide: Betting Budget Plan
Assumptions and limitations
The worked totals are illustrative. An annual report can improve transparency but cannot establish that future returns will match the past. Tax, licensing, and record requirements vary by jurisdiction, and this page is not personal financial or tax advice.

