Alpha Research · Paper 9 · The Machine Analyst

The Machine Analyst: Two LLM Fundamental-Valuation Bots, and the Problem of Proving Skill

Abstract

The first eight papers hunted systematic risk premia — paid for providing insurance, liquidity, or financing. This one turns to the thing the quant tradition says a machine cannot do: discretionary fundamental valuation, security by security. We built two bots that value the entire S&P 500 every day. Vinebot is a Damodaran-style intrinsic-value engine that prices everything — a coherent business story drives four value drivers, routed to the right model (FCFF DCF, residual income for balance-sheet firms, FFO for REITs). Buffybot is its opposite: a Buffett-style quality investor that rejects most of the universe through a purely quantitative moat gate and only values the survivors on conservative owner-earnings, waiting for a margin of safety. The defining design choice in both is anti-degeneracy: the language model never outputs a price target. It writes the narrative and sets a few assumptions, clamped to sane bounds; deterministic Python compiles them into value, so every number is auditable and reproducible. As of mid-June 2026 the two engines, built on different philosophies and different math, return the same verdict: the market is richly priced. Vinebot rates just 11% of the S&P 500 a buy and 73% a sell; Buffybot finds 206 wonderful businesses but only 23 of them cheap. More tellingly, they triangulate: across the 485 names both value, their margins of safety rank-correlate at Spearman 0.71 and agree on cheap-versus-rich 85% of the time, converging on 15 two-method longs. And yet we make no claim of skill — because an LLM analyst, uniquely, cannot be backtested: the model has already seen these companies' outcomes through its training cutoff, so any historical replay is contaminated by hindsight. The only valid test is forward, live, and slow. We pre-register it, show by a power analysis that it is a multi-year verdict, and start the clock. The contribution is an honest apparatus, not a Sharpe ratio.

One-line takeaway. Two LLM valuation bots — one that prices everything (Damodaran), one that prices almost nothing (Buffett) — value the whole S&P 500 daily with the LLM constrained to assumptions and Python doing the math. They independently call mid-2026 rich and agree with each other at Spearman 0.71. We still claim no edge: you can't backtest an analyst that has read the future, so the real test is the multi-year forward track record we just started.

1. Introduction

This program has been, until now, a sustained argument against security selection. Paper 4 priced the cost of directional prediction and found it punishing; Papers 1–3 and 6 showed that what pays is providing something — variance insurance, funding, liquidity, roll — not forecasting which asset goes up. The durable edges were modest (~0.4 Sharpe), uncorrelated, and decaying, and the real work was rigor: deflated Sharpe, purged walk-forward, the probability of backtest overfitting. Stock-picking — the analyst staring at one company and judging whether it is cheap — was exactly the activity all that machinery was built to be skeptical of.

So this is a deliberate detour to the other side of the river. Large language models can now read a 10-K, assemble a business narrative, and reason about competitive advantage in a way no factor model can. The obvious question — can an LLM do the job of a fundamental analyst? — is being asked everywhere, usually badly: a chatbot is prompted for a "price target," it confabulates a number, and the number is treated as analysis. We wanted to ask it properly. That requires two things the chatbot version lacks: a discipline that stops the model from hallucinating the answer, and an evaluation that can actually tell skill from luck. This paper is about building both, and about an uncomfortable fact that falls out of the second: the standard tool of this entire series — the backtest — is unavailable here, for a reason specific to language models.

Paper 8 automated the researcher (a machine that writes strategy code). Paper 9 automates the analyst (a machine that makes the discretionary judgment). Both ask whether the LLM can take over a human role in markets; both arrive at the same destination from opposite directions — the model is a powerful hypothesis generator, and rigor, not the model, is what stands between a plausible story and a real edge.

2. Two bots, one discipline

The two bots share a spine and split on philosophy. The spine is the answer to the degenerate-model trap that recurs throughout this series: never let the flexible component produce the conclusion. Here the flexible component is the LLM, and the rule is that it outputs assumptions, Python computes value.

2.1 Vinebot — price everything (Damodaran)

Vinebot follows Aswath Damodaran's [1] doctrine that every asset has an intrinsic value and the analyst's job is to estimate it honestly: a credible story disciplines the numbers. A frontier model (Claude sonnet for the batch, opus for the day's marquee name) reads fundamentals and news and returns a JSON object: a two-to-four-sentence business narrative plus four value drivers — revenue growth, target operating margin, reinvestment efficiency (sales-to-capital), and risk (beta, failure probability). It is told the rules it may not break (terminal growth never exceeds the risk-free rate; margins converge to sustainable economics, not peaks; reconcile with the market). Then a deterministic engine takes over. Each driver is clamped to a defensible range — terminal growth to $[-3\%,\ r_f]$, beta to $[0.5, 2.2]$, margins to $[-10\%, 70\%]$ — and the value is compiled explicitly:

$\text{FCFF}_t = R_t\,m_t\,(1-\tau) - \dfrac{R_t - R_{t-1}}{s2c}, \qquad V_0 = \sum_{t=1}^{H}\dfrac{\text{FCFF}_t}{(1+\text{WACC})^t} + \dfrac{\text{TV}_H}{(1+\text{WACC})^H} - \text{net debt}.$

Crucially, the bot routes each company to the right model, because a single DCF mis-handles balance-sheet businesses. Operating firms get the FCFF DCF above; banks, insurers, lenders, capital-markets firms, regulated utilities and capital-intensive issuers get a residual-income (excess-return) model, $V = B_0 + \sum (\text{ROE}_t - k_e)\,B_{t-1}/(1+k_e)^t$, where ROE fades to a durable premium over the cost of equity [4]; REITs get an FFO/AFFO model on cash flow rather than GAAP earnings. The margin of safety is $(V_0 - P)/P$, mapped to a STRONG BUY…STRONG SELL rating. Coverage marches through the index a sector-balanced batch a day, and a full-sweep job values every name; the result is a live, auditable valuation of all 503 constituents.

2.2 Buffybot — price almost nothing (Buffett)

Buffybot inverts the stance. Following Graham–Dodd and Buffett's owner-earnings idea [2][3], it assumes most businesses are un-valuable — too unpredictable to forecast — and that the analyst's edge is the discipline to wait. Before any LLM is invoked, a deterministic quality gate scores each company 0–100 purely from the numbers: level and consistency of returns on capital (30 + 22 points), margin stability as a proxy for pricing power (16), balance-sheet strength (16), cash conversion (10), and share-count discipline (6). Hard disqualifiers — negative equity, sub-hurdle returns, leverage above a ceiling, recurring losses — send a name straight to the "too hard" pile regardless of score. Only survivors enter the watchlist of wonderful businesses; the LLM then reads the quality dossier and judges what a spreadsheet cannot — the moat and its durability, the circle of competence, management's capital allocation — and sets one number, a conservative normalized owner-earnings growth. Python capitalizes owner earnings (net income + D&A − maintenance capex) at that growth, discounted at the higher of CAPM cost of equity and a fixed opportunity-cost hurdle, and only flags a buy at a real margin of safety. Most days there is nothing to do. That is the design working, not failing.

The two are siblings by construction — Buffybot reuses Vinebot's data layer, gateway, store, and serving — so any difference in their verdicts comes from method, not plumbing. That makes them a controlled experiment in machine valuation, which §4 exploits.

3. What the bots see in mid-2026

Run across the whole index (Vinebot's full sweep dated 2026-06-23; Buffybot's 2026-06-24), the two engines deliver a strikingly concordant macro read: there is very little cheap (Figure 1). Vinebot rates only 57 of 503 names (11.3%) a buy and 367 (73.0%) a sell; just 15.1% trade below the bot's estimate of DCF value, and the mean margin of safety is −0.36. Buffybot, scanning the same universe, finds 206 wonderful businesses (41% clear the quality gate) — but of those, only 23 are cheap enough to buy (4.6% of the universe), while 123 of the 206 are outright richly priced. Two engines, opposite philosophies, one verdict: quality is abundant in this market; cheap quality is not.

Rating breadth for both bots; both lean heavily to sell, indicating a richly-priced market
Figure 1. Rating breadth in mid-June 2026. Left: Vinebot across all 503 S&P 500 names — only 11% are a buy. Right: Buffybot across its 206-name wonderful-business watchlist — only 23 of them, and 23 of the whole 503-name universe, clear the margin-of-safety bar. The picture is a fully-valued-to-rich market, read two independent ways.

The shape of the cheapness is just as telling (Figure 3). Sorting Vinebot's median margin of safety by sector, no sector screens cheap — every median is negative — but the ordering is a coherent value-and-balance-sheet tilt. The least-rich corners are yield and balance-sheet businesses: telecom (≈0%), REITs (−4%), banks (−9%), insurers (−24%), payments and utilities. The richest are exactly where the 2024–26 enthusiasm concentrated: semiconductors (−73%), broad technology (−57%), capital markets, materials, aerospace, and energy. Whatever skill these bots may or may not have, this chart says plainly what they are implicitly betting on — and §7 returns to why that matters for how we would ever benchmark them.

Vinebot median margin of safety by sector; all negative, with yield/balance-sheet sectors least-rich and growth richest
Figure 3. The implicit bet. Vinebot's median margin of safety by sector (full index). Nothing is cheap, but the gradient is a textbook value tilt: yield and balance-sheet sectors are least-rich; high-multiple growth and cyclicals are the most expensive. An edge here would have to be more than this tilt — see §7.

4. Triangulation: do two methods agree?

The one thing we can measure rigorously today is internal: when two independent valuation methods look at the same company, do they agree? They do, and more than chance would allow. Across the 485 names both bots assign a numeric value, the margins of safety rank-correlate at Spearman $\rho = 0.71$ and agree on the basic cheap-versus-rich call 84.5% of the time (355 both-rich, 55 both-cheap, only 75 disagreements; Figure 2). This is a non-trivial result: a discounted-cash-flow engine and an owner-earnings engine — with different inputs, different discount rules, and a quality gate in front of one of them — are not just both bearish in aggregate, they rank the same names the same way.

Scatter of Vinebot vs Buffybot margin of safety; strong positive relationship, Spearman 0.71
Figure 2. Cross-bot agreement on the 485 names both value. Each point is a company: Vinebot's DCF margin of safety (x) against Buffybot's owner-earnings margin of safety (y). The mass lies on the diagonal in the both-rich (red) and both-cheap (green) quadrants; Spearman 0.71, sign agreement 85%. Fifteen names land in the both-cheap quadrant — the two-method longs.

Where they converge on the upside, the overlap is a watchlist worth naming. Fifteen companies are simultaneously a Vinebot buy and a Buffybot buy from inside its wonderful-business set (Table 1) — names that pass a quality gate, clear an owner-earnings margin of safety, and look cheap on an independent DCF. These are the highest-conviction longs the system can produce, precisely because two unrelated methods had to agree.

TickerCompanyVinebot MOSBuffybot MOSQuality
PYPLPayPal+1.65+0.2985
UHSUniversal Health Services+1.63+0.2969
ITGartner+1.18+0.3094
CMCSAComcast+0.86+0.7870
ACNAccenture+0.73+0.3089
CTSHCognizant+0.61+0.3181
GDDYGoDaddy+0.59+0.3082
LULULululemon Athletica+0.57+0.3095
SOLVSolventum+0.50+0.3173
BRBroadridge Financial+0.44+0.2975
CFCF Industries+0.38+0.3085
ADBEAdobe+0.32+0.2896
INTUIntuit+0.31+0.2979
ACGLArch Capital+0.31+0.4585
DECKDeckers Brands+0.26+0.2897

One honest caution, because it is the whole point of this series. Agreement is not correctness. Two methods can share a bias as easily as a truth — and these two share plenty: the same yfinance fundamentals, the same discounted-cash-flow worldview, the same instinct to penalize a high multiple. A Spearman of 0.71 is consistent with both engines being two implementations of the same value factor. Figure 3 all but says so. So triangulation buys us internal consistency and reproducibility; it does not buy us alpha. For that we need a forward test — and here we hit the wall.

5. The proving problem: why you can't backtest an LLM analyst

The natural next move, everywhere else in this program, would be a backtest: run the bot "as of" each historical date, value the universe, and measure whether cheap-rated names beat expensive ones. For a language model, this test is invalid, and not fixably so.

The reason is look-ahead of a kind no purge or embargo can remove. When the model values a company "as of 2019," it already knows — from training data running years past 2019 — how the company actually did: the margin it printed, the product that failed, the multiple it re-rated to. Its "forecast" is contaminated by hindsight it cannot un-know. Worse, the contamination is unauditable: there is no log of what the weights memorized, and instructing the model to "pretend it is 2019" is unreliable — models leak future knowledge through exactly the channels that make them good. A historical replay of an LLM analyst therefore measures memory, not foresight, and flatters skill in a way that cannot be corrected. This is the mirror of Paper 8's lesson. There, the danger was a strategy fit to a window; the fix was widening the window. Here the danger is a model fit to the entire past, and there is no window left to widen — the only uncontaminated data is data that does not yet exist.

So the only valid evaluation is genuinely forward: value today, wait, mark to what happens next. Both bots are built for exactly this. Every rating is a tracked call that opens when the rating bucket changes and stays open until it changes again; performance measures each call's dividend-adjusted return from entry over 7/30/90-day horizons and since-open, benchmarked against SPY, direction-adjusted so a correct SELL counts as a win. It is honest by construction — and, as of this writing, empty of signal: the live history is days old, so every horizon is essentially unfilled. Any performance number quotable today is noise, and we quote none.

How long until it isn't noise? A power analysis sets expectations, and they call for patience. Treat the long-short portfolio implied by the ratings as one return series with Sharpe $S$; to reject $S=0$ at $t\approx2$ needs $t = S\sqrt{T}$, i.e. $T \approx (2/S)^2$ years. A standalone $S=0.3$ book would need ~44 years; even a generous $S=0.5$ needs ~16. What rescues the test is breadth. By the fundamental law of active management [5], $\text{IR} \approx \text{IC}\cdot\sqrt{N}$: with a cross-section of ~500 names re-rated continuously, a small but stable per-name information coefficient compounds into a usable portfolio IR, and the cleanest early read is the cumulative cross-sectional IC — the rank correlation of margin of safety with forward return — which gains power from names and time at once. Realistically this still means a multi-year verdict, quite possibly never if there is no edge. That is the honest timeline, and we have started the clock; the live scorecards update daily and will be published as they fill.

6. Verdict

What can we claim, and what can't we? We can claim a disciplined, auditable, reproducible valuation apparatus: two LLM analysts that cover an entire index every day, that never hallucinate a price target because the model is confined to clamped assumptions while deterministic Python does the arithmetic, that route each business to the right model, and that — built on opposite philosophies — triangulate at Spearman 0.71 and converge on a nameable short-list. We cannot claim skill. Not yet, and not by any backtest, for a reason peculiar to language models: the analyst has already read the future.

The right way to use an LLM as a fundamental analyst is to forbid it the conclusion and demand the assumptions — and then to admit that proving it works is a forward problem measured in years, not a backtest measured in an afternoon. The apparatus is the deliverable; the verdict is pending, and pending honestly.

That is a fitting place for this series to arrive. Eight papers argued that in liquid markets the edge is not prediction but provision, and that rigor — not the signal — is the asset. Paper 9 points the most powerful prediction machine ever built at the most prediction-heavy task in markets, and the same discipline applies without flinching: constrain the model so it cannot grade itself, benchmark against the factor it is secretly loading on, and trust only what survives a window the model was not born into. For an autonomous strategy in Paper 8, that window was more historical data. For a machine analyst, it is the future. We will keep both bots running, in public, and let the only uncontaminated data there is — tomorrow's — return the verdict.

7. Limitations & future work

The benchmark problem is the deep one. Figure 3 shows the bots are implicitly long cheap, low-multiple, balance-sheet-heavy sectors. If the forward track record is positive, the burden is to show it is more than value beta — the honest null is not the S&P 500 but a matched value/quality factor, and the bots must beat that, net of turnover, to have earned the word "alpha." Data quality. Fundamentals come from a free feed (yfinance / EDGAR); restatements, mis-mapped sectors, and stale TTM figures inject noise the polished narrative can hide. Nondeterminism. The LLM runs at non-zero temperature, so two runs of the same name can set different drivers; the clamps bound the damage but day-to-day rating churn is real and must be measured, not assumed away. Selection at index scale. Five hundred names re-rated daily is a multiple-comparisons machine; breadth aids statistical power but also guarantees some calls look brilliant by luck — the cross-sectional IC, not a hand-picked winner, is the object to track. Capacity and cost. The universe is large-cap and liquid, so capacity is not the binding constraint; the cost is compute — every valuation is tokens — and "alpha per dollar of inference" is a real metric we have not yet booked. Future work. Beyond simply letting the scorecards fill: benchmark the long-short against an explicit value factor; add a contamination probe (re-value a set of names with their identities masked, to gauge how much of the verdict is memory versus reasoning); and, if a forward edge survives all of it, fold a capacity-aware equity sleeve into the live book of Paper 7. Until then, the machine analyst is a well-built instrument with an honest dial reading not yet measurable — which, in this program, is a respectable place to stand.

References

  1. A. Damodaran (2017). Narrative and Numbers: The Value of Stories in Business. Columbia Business School Publishing. Also Investment Valuation, 3rd ed. (story → drivers → value; sector-specific models).
  2. B. Graham & D. Dodd (1934). Security Analysis. McGraw-Hill. (Margin of safety.)
  3. W. Buffett (1986). “Owner Earnings,” appendix to the Berkshire Hathaway shareholder letter. (Owner earnings = net income + D&A − maintenance capex.)
  4. J. Ohlson (1995). “Earnings, Book Values, and Dividends in Equity Valuation.” Contemporary Accounting Research 11(2). (Residual-income / excess-return valuation.)
  5. R. Grinold (1989). “The Fundamental Law of Active Management.” Journal of Portfolio Management 15(3); Grinold & Kahn, Active Portfolio Management, 2nd ed. ($\text{IR} \approx \text{IC}\sqrt{N}$.)
  6. V. Dhar (2026). “The Damodaran Bot.” vasantdhar.substack.com. (The DBOT concept that inspired Vinebot.)
  7. D. Bailey & M. López de Prado (2014). “The Deflated Sharpe Ratio.” Journal of Portfolio Management 40(5). (Why index-scale selection demands a strict null.)
  8. B. Vine (2026). Alpha Research, Papers 1–8. Live bots: Vinebot, Buffybot.