Where the paper stands
Written for a coauthor who has been away. Everything here comes
from the committed record — state.md and its changelog, the frozen spec,
the data manifest, each person's session file, the draft, and the run log. No round
is open at the moment this was written.
Executive summary
The paper is Valuation by Adjusted Multiples: value a firm by the median of its peers' EV/EBITDA multiples after adjusting each peer separately for how it differs from the subject firm on each characteristic, the way a house appraiser does. The adjustments are cubic splines and read straight off as feature-to-multiple curves. The claim is not that this beats machine learning — that bar was deliberately dropped last month — but that it matches a tuned gradient-boosting frontier while beating every classical comparables method by a wide margin, and does so with a procedure an analyst can show a client.
The empirics are in good shape and have been through the two-build gate. Under the frozen least-squares spec, pooled median absolute error on the non-microcap panel is 0.226 for the adjusted multiple against 0.232 for the raced frontier; on the mean and root-mean-squared criteria the adjusted multiple wins by statistically significant margins in both independent builds on both panels (0.311 against 0.328, and 0.444 against 0.481). Against classical comparables the gaps run 15 to 37 percent, in 25 of 25 years, on all three criteria, on both panels. The one soft cell is the non-microcap median gap against the frontier, which came out significant in one build and not the other and is pinned to be reported as marginal.
What changed most recently is a shift in the kind of work being done. Since 11 August the project has stopped adding results and started attacking the ones it has. Kevin ran a draft reading pass that restructured the paper and rebuilt the exhibits; Kerry ran two adversarial critique passes over the empirics and the prose. That produced one settled decision (keep the smoothing-parameter selection on the direct fit, adopt Kevin's prior-year convention), one objection killed with a reason (the missing temporal holdout), an exploratory branch on the peer rule, and a prose-only revision of the whole draft that has not been merged.
The single thing most needing attention is a pair of findings raised by an adversarial reviewer on 15 August that nobody has yet checked. Each is a single file read. One says the frontier is denied the lagged market-cap variable that the peer band is built on, which would make the paper's "identical information set" sentences false as written and, on the reviewer's own indicative refit, would put the frontier ahead of the adjusted multiple on all three criteria. The other says IPO peers are banded on the very price they are scored against, and the abstract's 17 percent IPO flip depends on it. These outrank everything else open, because they could change what the paper claims rather than how it defends itself.
The headline numbers
Frozen L2 spec, pooled over 2001–2025, common evaluation frames of 37,526 non-microcap and 25,410 microcap firm-years. Lower is better.
| Non-microcap panel | Median |e| | Mean |e| | RMSE |
|---|---|---|---|
| Adjusted multiple (the paper's method) | 0.226 | 0.311 | 0.444 |
| Raced machine-learning frontier (tuned L2 gradient boosting) | 0.232 | 0.328 | 0.481 |
| Frontier's best-median configuration (tuned L1), disclosed | 0.229 | — | — |
| Alford (industry-median comparables) | 0.311 | — | — |
| Bhojraj–Lee (warranted-multiple comparables) | 0.359 | — | — |
The median gap against the raced frontier is 0.006 — small, and the marginal cell. The gaps against the classical comparables are 0.085 and 0.133, roughly 27 and 37 percent, and they hold in every year of the sample. That asymmetry is the paper: parity with the black box, dominance over what practitioners actually use.
What is settled
Through the gate. Do not reopen these without a reason and a round.
-
30 July, promoted 4 August
The two canonical panels.
panel_nonmicro.parquet(44,273 × 48) andpanel_micro.parquet(45,588 × 48) were built twice independently from the raw sources and reconciled — observation counts within 0.24 percent, ROA, sales growth and age medians agreeing to the digit, Alphabet's market cap to the dollar. They are read-only in~/Dropbox/multiples/data/global/and everyone estimates on them. Nothing else has been promoted since. -
12 August
The lead specification is least-squares appraisal curves, frozen in full in
method_spec.md: sum-form objective, cubic B-spline basis with L1 total variation on second differences, fitting target winsorized 1 and 99 percent within year with fold-pure bounds, smoothing grid [0.03 … 300] with every optimum interior, five-fold cross-validation stratified by sub-industry, paired year-block bootstrap. Pinball (median-fit) survives as the disclosed robustness variant. -
12 August
That spec was implemented twice, independently. Kevin's Replicator worked clean-room from a results-redacted brief with its own solver and its own optimality certificates. Every spline cell agreed within 0.001 pooled median error on both panels, the non-microcap evaluation frame was exact at 37,526 rows, the target was bit-identical, and the selected smoothing parameter matched in 49 of 50 panel-years. The gradient-boosting cells differ by 0.0017 to 0.0028 — fold-partition sensitivity, now measured twice: our estimator is fold-robust and the boosted trees are not.
-
12–13 August
Dominance over classical comparables, both builds: 15 to 37 percent better, 25 of 25 years, all three criteria, both panels. The construction question raised in round nine was closed in favour of the canonical comparables code.
-
12 August
Standing against the frontier at equal tuning budget: significant on mean and RMSE in both builds on both panels; significant on median error on the microcap panel in both builds; marginal on median error on the non-microcap panel, and pinned to be reported that way. Against the frontier's best-median configuration the median is parity, with mean and RMSE still ours.
-
12 August
The peer step earns its place. Removing it and fitting the curves directly is significantly worse everywhere.
-
13 August
Interpretability is free even inside our own family. A fully tuned non-additive version of the adjustment beats the raced frontier on all three criteria but only ties the additive lead at the median and loses both tails. The same conservative configuration was chosen in all 25 years.
-
Round 10, user ruling
The success bar is parity with the frontier plus interpretability plus dominance over classical comparables — not beating a black box. This replaced the earlier "must beat Geertsema–Lu" standard and should not be relitigated.
-
27 July
The peer rule is locked: firm-specific size-and-industry comparables, leave-one-out, factor-of-two band on lagged market cap, GICS backoff from sub-industry outward, pruned to the ten closest by size. It has never been tuned on accuracy, which is a defensible posture and is documented as such.
-
Round 6, and permanent
The adjustment function never sees price. A feature manifest carrying log market cap alongside log assets, leverage, cash-to-assets, EBITDA margin and log sales lets the model rebuild its own target algebraically; that bug once voided an entire round's residual-stage conclusions. Every external feature set is screened for the same leakage before use.
-
15 August
Smoothing-parameter selection stays on the direct fit, with Kevin's prior-year convention adopted. Tuning end-to-end against the peer-step objective is the theoretically right object but puts the backfit inside the cross-validation loop for about five times the cost, and the larger correction is already known to be immaterial (0.0009 to 0.0017 in pooled median error, never significant). The cost accepted is that the internet appendix's non-additive variant is tuned end-to-end while the flagship is not; that gets one sentence of disclosure and a flatness statistic, not a re-run.
-
15 August
The "no temporal holdout" objection is dead, with a reason worth keeping: the analyst's information set at the valuation date includes the whole contemporaneous cross-section, so contemporaneous leave-one-out is the frame that matches the use. A temporal holdout would measure parameter stability, which is a different question. The clause was struck from the draft.
Open issues
Blocking
Is the frontier denied a variable our estimator uses?
The paper says in two places that the two methods see an identical information set. The peer band is built on lagged log market cap, and the spline feature list withholds that variable from the frontier. An adversarial reviewer reading the estimation code reported that adding it moved the frontier from 0.2389 to 0.1861 at the median — ahead of us on all three criteria. The reviewer's own harness reproduced the untuned base cell at 0.2389 against the appendix's stated 0.2424, so the magnitude is indicative rather than certified.
Resolved by: one file read, then a decision. If it holds, either give the frontier the variable or take it out of the peer band, which is what Peer Rule B would do. Either way the "identical information set" sentences are wrong as written and have to change.
Are IPO peers banded on the price they are scored against?
Section 9 says IPO peers are drawn under the unchanged rule. The reviewer reports that
ipo/code/09_score_ipos.py bands on the IPO's own first-month market cap,
which is also the quantity the actual enterprise value is built from. No comparator gets
an analogous channel. The 17 percent IPO flip in the abstract depends on this.
Resolved by: one file read. If it holds, the IPO section needs rebuilding and the abstract needs rewriting.
Three decisions queued for the Monday coauthor discussion
Kevin's session file parks these on the humans. First, whether the tuned scored peer rule is promoted to the main body or stays in the internet appendix — it is now significantly better than the locked rule on all three criteria on three of the four samples, and ties the median on the flagship. Second, whether to adopt the prior-year smoothing convention in a spec round on principle, which would unify the three tuning conventions but requires the frontier's 27-configuration race to move symmetrically and the headline to be re-gated with two builds. Third, whether a peer-rule redesign round opens; the natural design is the scored rule with a size cap, since the scored rule is tighter on size at the median but has an unbounded tail — 1.3 percent of pairs exceed a factor of three, with extremes around 200 times.
Resolved by: the humans deciding. Nothing further can be run on the peer rule or the smoothing convention until they do.
In flight
A second independent implementation of the lead spec
project/kerry-back/eta-retune-spec.md is drafted, not promoted to the
frozen spec, and no implementer has been spawned. Two purposes: every existing
least-squares build lives in Kevin's tree, so the headline has no second-author check;
and the frontier, direct-method and gradient-boosting arms still need running under the
prior-year smoothing convention. Waiting on a claimed round.
Only one side of the headline comparison has moved to the new convention
Kevin scoped his prior-year run to the locked-rule cell and the scored peer-rule arms. The adjusted multiple's own error rises about 0.001. Whether the margin against the frontier widens or narrows is unmeasured — and it ought to widen, since the frontier selects over 27 configurations directly on its scored criterion while the smoothing parameter selects over nine values through a proxy.
A prose revision of the whole draft, unmerged
draft/econ-human-revised.tex is a complete prose-only alternative to
main.tex — no number changed, every exhibit byte-identical. It has not been
merged and the decision is open: merge it, cherry-pick from it, or drop it. It carries
four query markers flagging suspected inconsistencies in the current draft (three sample
counts, 0.56 against 0.669, four-times against three-times, and yield-versus-multiple
vocabulary in section 10). Separately,
draft/prose-edits-pending.md holds three reviewers' writing findings,
deduplicated and adjudicated but deliberately unapplied.
The draft reading pass
Queue is in project/kevin-crotty/draft_punchlist.md. Kerry's prose
revision postdates Kevin's reading baseline, so the next reads have to be against the
current file. When the pass ends: drop the endfloat preamble line, recompile, and
snapshot the PDF into draft/archive/ if it is a milestone. Also carried:
GICS display names in the Geertsema–Lu table.
Peer Rule B, specified but not started
An exploratory branch opened 15 August; nothing has been run and the locked rule is untouched. Rule B takes all other firms at the finest GICS level yielding at least five, never leaving the sector, with no size band, no size pruning and no cap — so market capitalisation plays no part in peer selection at all. The motivation is auditability, not accuracy: under the locked rule, Lowe's and Home Depot share a sub-industry but are not peers, because Home Depot is 2.54 times larger, so Lowe's peers come out as TJX, Booking, Nike, Starbucks, Chipotle, McDonald's, MercadoLibre, Airbnb, Ferrari and Marriott. No analyst defends that in a fairness opinion. Rule B would also make the estimator genuinely price-free, which dissolves the first blocking question above.
Resolved by: three decisions before any run — peer pool drawn from the panel or the universe, cap or no cap, and which targets. The gate is deliberately not "does it beat Rule A" but whether the accuracy cost is worth a defensible peer set, with the threshold argued before the numbers land. Prior evidence points the other way on accuracy and is recorded so it is not rediscovered.
Open questions
Six exhibit families are still single-build
The EV/Sales section, the IPO section, the analyst comparison, the firm-age result, the non-additive tuning race and the returns results were all built once, are disclosed as such in print, and need two-build gates if any of them is promoted to the settled tier. The returns results in particular have never been replicated.
Deferred
Decided not to do yet, with reasons
The fold-seed sweep was skipped at Kevin's ruling on 12 August, once fold-partition sensitivity had been measured twice and found to sit in the boosted trees rather than in our estimator. The frontier's sector-by-size heatmap was built and then dropped at the gate on 14 August, purely on placement — it would have arrived before the machine-learning method is introduced — and the exploration is kept in the workspace; it could re-enter later in the paper. The prose edits are unapplied by explicit instruction. And the peer-rule redesign is deferred to a round of its own rather than being folded into ongoing work.
Chronology
Newest first. Decisions lead each day; the runs and commits behind them are folded away.
15 August — two threads, both adversarial
Kerry ran two critique passes over the draft and the estimation code. Four things came out: the smoothing-selection decision settled; the temporal-holdout objection killed; two code facts verified by reading the source and closed or scoped; and two further findings raised that nobody has yet checked — the two blocking items above. Deliverables were all documents: a critique memo with equations and per-finding verification status, the adjudicated prose-edit list, the prose-only draft revision, and two exploratory specs. Nothing was estimated and no subagent was spawned.
Kevin, on the same day, landed three items. The direct fit was shown to estimate a genuinely different function from the peer-step adjustment — same program, different object — so the draft now writes it separately, with a new appendix section and a diagnostic behind it: firm-level correlation averaging 0.81 across 25 years, sub-industry effects correlating only 0.38, and the 2025 log-assets curves close to mirror images with the peer-step amplitude twice as large. The scored peer rule was then tuned under the frozen spec on all four samples, which is the evidence behind Monday's promotion question. And Kerry's cross-validation selection leak was quantified and found immaterial.
16 commits, 7 recorded runs (plus 6 stamped 16 August in the run log)
- Kerry: prose revision of
main.texwith the empirical-critique memo; spec for a second least-squares implementation and the pending prose-edit list; Peer Rule B spec; the smoothing decision written into the spec; the no-holdout clause struck. - Kevin:
16_gdirect_gpeer.pyfor the direct-versus-peer diagnostic;08_peer_tuned_frozen.pyfive times plus its readout for the four-sample scored rule;10_eta_prioryear.pyand11_eta_prioryear_readout.pyfor the selection-leak quantification. - Housekeeping:
/round,/report, the chronology tool and the writing guide brought into the repo.
14 August — the draft reading pass
Kevin restructured the paper. Section 2 became a full estimator exposition, multiple-agnostic; section 3 covers implementation; section 4 states the exact construction of every alternative model, which had never been in print before; results now come before the worked example; the old appendix A was absorbed and deleted. Bastianello, Décaire and Guenzel's 2025 field evidence was worked in — a multiple is the reference point in only 13 to 15 percent of analyst reports, which is the practice licence for an anchor-and-adjust procedure. Loss-makers became negative-EBITDA firms throughout. Exhibits were renumbered by discussion order and moved to the end for reading.
The frontier's sector-by-size heatmap was built and dropped at the gate, on placement. The exploration was kept: same geography as ours, frontier better on the largest information-technology firms (0.25 against 0.36) and worse across communication services.
6 commits, 7 recorded runs
- Draft restructure; explicit alternative-model constructions; the field-evidence cites.
- Exhibit pass: tables 1, 3, 8 and 9 rebuilt, returns tables merged, figure touches.
- Runs:
01_summstats_meansd.py,14_frozen_metrics.py,02_fig_composition.py,15_heatmap_frontier.py.
13 August — the draft switched, and four claims died honestly
Round 11 closed and was approved. The paper now reads as the least-squares paper throughout, with the canonical comparables everywhere, which closed a construction flag left open since round nine. Four new sections went in — EV/Sales, IPOs, analysts, firm age — all single-build and flagged as such. The non-additive tuning race was run and reported. The worked example became GE Aerospace: raw 15.3 times, adjusted 24.8, actual 28.7, so the miss falls from +0.63 to +0.15, and the out-of-sample version lands within 3 percent.
Four claims died in the re-runs and were dropped rather than defended: the previous worked example's error-halving punchline, the direct method's age gradient, the frontier's significant edge on old firms, and the untuned non-additive reversal, which the tuning race superseded. A real exactness bug in the frontier decomposition was found and fixed en route, and the other exhibits verified against it.
Also that day, a convention fix: the run record had been silently excluded from git for everyone by an ignore rule that could never have worked, since git cannot un-ignore a file inside an ignored directory. It is now committed.
16 commits, 63 recorded runs
- Internet appendix re-run end to end under the frozen spec; the no-beta arm shows beta is worth a significant 0.004 to the frontier and next to nothing to us.
- The rings figure redesigned twice at Kevin's direction; the full-sample re-run strengthens the other-sector share from 52 to 59 percent.
- Runs dominated by
10_gstore_lam.py,06_gl_figure.py(twelve times), the frozen-cell and example-candidate scripts, and the non-additive tuning race.
12 August — the specification switched to least squares, then converged
Kevin decided in the morning to switch the lead specification from median-fit to least-squares curves, ran an adversary pass and a set of decisive runs, and froze the spec at the afternoon gate. Three rulings came with it: the three error criteria are co-equal, with the text quoting the median; the raced frontier is the tuned least-squares boosting model, because it is the frontier's own objective and its smoother gives the exact implicit-peer-weight decomposition we use as a differentiator; and the tuned median-fit configuration is disclosed as the frontier's best-median arm.
By the evening the frozen spec had been implemented twice, independently, and reconciled the same day. That is when the marginality of the non-microcap median gap surfaced — significant in one build, not in the other — and Kevin pinned it to be reported as marginal rather than argued away.
Two things explored on the side that still matter. Full-sample analysis of the frontier's implicit peer weights showed the average firm's valuation nets 52 percent of its weight from other sectors, where ours is structurally zero. And De Franco, Hope and Larocque's evidence on actual analyst peer sets — 92 percent same sector, about half same industry — showed real analysts are less concentrated than our rule, which softened the preference for keeping concentration.
16 commits, 47 recorded runs
- Decisive runs: fold-pure winsorization immaterial; equal-budget tuning race, under which the same-loss headline stands; smoothing-grid extension with zero pick changes in 50 panel-years.
- The one claim weakened by the switch: microcap EV/Sales against the median-fit frontier went from significant to not, and a wide-grid re-run proved it genuine rather than a grid artifact.
- Runs: the analyst race, EV/Sales and IPO satellites, the returns rebuild with its own monthly pull, the loss 2×2, the frontier tuning sweeps.
11 August — the loss-function program that caused the switch
Least-squares curves beat the production median-fit spec on the full panel, replicated across two builds, with the clean-room replicator using its own solver and exact-optimum certificates. The penalty family turned out to be presentation rather than substance: ridge and elastic net tie the total-variation penalty, but total variation sets 55 to 57 percent of the curvature and class terms exactly to zero, so the piecewise-straight interpretability is free. The asymmetry that made the decision easy: the same objective hurts the boosted-tree frontier, so the adjusted multiple wins under either objective.
Kevin also directed that draft-edit incorporation proceed without a claimed round, drafting both a robustness treatment and a full least-squares version and deciding later — which is the path that led to the 12 August switch.
17 commits, 50 recorded runs
- The exposition note, nine pages, with a worked example and the exact frontier peer weights — realizing an example the draft had been promising since July.
- A flag for Kerry: the public website's frontier tab runs on a local panel with its own folds rather than the canonical one, which is why its numbers differ from the paper's. The difference was reproduced exactly.
draft/archive/established, with dated PDFs of superseded drafts.
5–10 August — Kevin's exploratory program
Kevin brought up his own workspace, ten exploratory stubs and three replications, along with an IPO probe, a pre-2001 sample extension probe and the EV/Sales work. Onboarding was made Windows-aware in the process. The heavy run days here — 180 recorded runs on 6 August alone — are the horse-race and network-industry-classification sweeps behind that program.
3 commits, 399 recorded runs across four days
- Dominated by
run_race.py(79),run_tnic_race.py(51),05_adjusted97.py(30),run_year.pyand01_uni97.py(25 each).
3–4 August — the repository as it now works
Kerry restructured a single-person project into one three coauthors can
work in without colliding: per-author folders keyed on the git name, portable paths, a single
canonical data folder with a promotion gate, static provenance extraction, a round lock, and
the working-protocols page. The paper files were renamed to main.tex and
ia.tex, the Overleaf bridge was wired and documented, and the changelog in
state.md was started. Everything before this date lives in the dated section
headings of state.md and in the narrative file, not in git.
25 commits
- Per-author trees;
project/commonrenamed toproject/global; the canonical data folder; provenance tooling and a pre-commit hook keeping the diagrams current; the econ-write and econ-review skills vendored; LaTeX build noise untracked.
Before 3 August — what the repository does not hold
The project's first two weeks predate the git history and are recorded
only in the dated blocks of state.md and in
project/global/narrative-kerry-back-20260803.md. The arc there is worth knowing,
because most of it is abandoned directions. The original thesis — that an anchored additive
model beats pooled machine learning on IPO-like outliers — was killed by its own round-two
empirics, which found boosted trees already robust in sparse regions. Text-based peers died
as a novelty claim, return prediction as a headline was dropped as crowded and near-tautological,
the merger-and-acquisition wedge died on data coverage, and rules-of-thumb from model
explanations died as descriptive and fragile. A leakage bug in round six voided every
residual-stage conclusion of that round and produced the price-free rule that still governs the
estimator. A market-cap bug on 30 July — market cap taken per share class rather than per company
— invalidated the panel, every estimator, every figure and the published artifact, and forced the
rebuild that produced the canonical panels. The peer rule was locked on 27 July after a
nearest-neighbour design was tried and superseded. And in round ten the success bar itself moved:
beating the machine-learning frontier was replaced by matching it with an interpretable
procedure.
Who is doing what
| Person | Last worked on | Holds now | Waiting on them |
|---|---|---|---|
| Kerry Back | Adversarial review of the empirics and the prose, 15 August. Settled the smoothing decision, killed the temporal-holdout objection, opened Peer Rule B, wrote a prose-only revision of the draft. | No lock. Three written specs and one revised draft, none acted on. | The two unverified findings — the single most urgent thing on the project. Also the merge-or-drop decision on the revised draft, and the Peer Rule B spec questions. |
| Kevin Crotty | The draft reading pass, 14–15 August, plus the scored peer rule tuned on all four samples and the selection-leak quantification. | No lock. The reading-pass punchlist. | Three items queued for the Monday discussion: promoting the scored peer rule, the smoothing-convention round, and whether a peer-rule redesign round opens. |
| Bob Dittmar | Nothing recorded. No author folder, no commits, no runs. | — | Whether a third independent build is expected. |
The changelog is current — no commit on this project landed without a dated entry after it,
so nothing in the chronology above is reconstructed guesswork. The one gap is structural rather
than procedural: the project's first two weeks predate the repository, and their record is prose
in state.md rather than commits and runs.