I spent two days evaluating Google's TimesFM 3.0 against 118,857 bars of Nasdaq futures tape, strictly causal and session confined. Short version: it is a competent, very small, very cheap component, and it produced no trading edge.
Direction accuracy on price: 50.0%. Exactly fifty. On error magnitude it came in 7.4% worse than assuming the next value equals the last one.
Four framings. Coarser bars did not help. A reframing built deliberately to suit its known strengths did not help. Feeding it side information through its supported covariate channel made forecasts worse at every horizon.
The most interesting failure: I built a probability signal from its own quantile output. When it was most confident it was most wrong. 24.7% hit rate against a 34.3% base rate. Anti-informative when confident is worse than useless, because useless does not tempt you to size up.
The reason is architectural rather than bad luck. It is stateless. Every predict() call sees only the array you hand it, nothing carries between calls, and there is no text interface, so there is no channel through which to tell it anything. It cannot represent "this signal is void while that condition holds." That is a state machine and there is nowhere in a numeric array to put one.
To be fair to it: on a series with stable repeating structure it beat naive by 98.7% zero-shot with 100% direction accuracy. It runs in about 1.3 GB of VRAM, roughly 8% of a mid-range consumer GPU, at about 8 ms per series batched. And on a random walk it did slightly worse than doing nothing, at 47% direction, which is correct behaviour rather than a defect: a model that appeared to forecast a random walk would be inventing structure.
"Foundation" describes how a model was trained and how it transfers. It does not describe competence.
https://michaelhairetis.medium.com/a-foundation-model-is-not-a-foundation-a3edf3383be9
Top comments (0)