R3 — multi-seed comparison with error bars - #22
Merged
Conversation
30 seeds, and the result is sharper and more negative than one run suggested. Nothing is reproduced. The model's own variance is small enough that every real value sits far outside it. Corrects the previous writeup, which called the structural properties 'broadly reproduced' from a single seed on the strength of an 88% cancel ratio against a real 96%. With error bars that gap is 17 standard deviations: the model lands on 87.8% +/- 0.5% every time, consistently in the wrong place. Precise is not the same as right, and one draw could not tell the difference. Reports relative error alongside z because either alone misleads in opposite directions. A precise model can be many sigma out while a few percent wrong; a noisy one can be an order of magnitude wrong and one sigma away. Trade-level kurtosis is the second case — 175 against 11.8, which is 1389% wrong and |z| = 1.4, and a z-only verdict would have called it reproduced. The sign-autocorrelation result stands and sharpens: 35% low at lag 1, 96% low by lag 5, nothing beyond. The lag-1 value is mechanical, not memory. compare.py imports stylized_facts.analyse rather than reimplementing it, so a difference in the analysis cannot masquerade as a difference in the market.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
30 seeds, and the result is sharper and considerably more negative than the single run suggested.
Nothing is reproduced
This corrects my R2 writeup
R2 called the structural properties "broadly reproduced" from one seed, on the strength of an 88% cancel ratio against a real 96%.
With error bars that gap is 17 standard deviations. The model lands on 87.8% ± 0.5% every single time — internally consistent, and consistently in the wrong place. Being precise is not the same as being right, and one draw could not tell the difference. That is the argument for the multi-seed step existing at all.
Both columns are necessary
My first verdict logic used
zalone and called trade-level kurtosis "reproduced" — ZI 175 against a real 11.8, which is 1,389% wrong with |z| = 1.4, purely because the model's variance is enormous.So the table reports relative error too, and either column alone misleads in opposite directions:
Verdicts now distinguish
NOT reproduced,inconclusive (model too variable), andboth ~0(two numbers agreeing only because neither is far from zero).The finding that survives
Sign autocorrelation fails in a specific, interpretable shape: 35% low at lag 1, 96% low by lag 5, nothing beyond. The lag-1 value is mechanical — one market order walking several levels prints several same-signed executions in the same instant — not memory.
Real flow decays over a hundred trades. The question is not whether correlation exists but how far it reaches, and deleting strategic behaviour deletes the reach while leaving the artifact.
Method note
compare.pyimportsstylized_facts.analyserather than reimplementing it, so a difference in the analysis cannot masquerade as a difference in the market. The real side remains a single session with no error bar, which the doc states as a limit rather than glossing.