Is This Baccarat Roadmap Data Actually Real? 7 Statistical Tests We Ran On Ourselves
That's not a story to be embarrassed about - it's the opposite. If a dataset can pass 7 statistical tests, you should know how to catch it. The complete method is published here so you can audit any dataset claiming to be real roadmaps.
Contents
- How the dataset gave itself away
- Tests 1-3: Structural regularity
- Tests 4-5: Autocorrelation and streak frequency
- Test 6: The decisive proof - a direct independence violation
- Test 7: Position effects and shoe length distribution
- A 5-step audit workflow for any dataset
- Why this matters as much as picking the right software
1. How the dataset gave itself away
The dataset was evo_data.csv, a simple format: one shoe per row, second column a
string of 0s and 1s (0 = Player, 1 = Banker). Its scale:
At first glance this is a very presentable dataset: large enough, with a Banker/Player split close to the theoretical value (about 49.3% Banker given the house edge). Run the most basic sanity check and it passes.
But after 7 more detailed tests, 6 of them pointed the same way: this was generated by code.
2. Tests 1-3: Structural regularity
Test 1: Geometricity of the run-length distribution
Split each shoe into runs of identical consecutive results. Under independence, run lengths follow a geometric distribution - but real data fluctuates. Length-1 runs at 50% and length-2 at 25% is only the trend; real proportions wobble by several percentage points.
This dataset gave:
| Run length L | Count | Share | Ratio to previous | Geometric theory |
|---|---|---|---|---|
| 1 | 467,241 | 50.4139% | - | 50.0000% |
| 2 | 231,764 | 25.0066% | 0.4960 | 25.0000% |
| 3 | 115,596 | 12.4725% | 0.4988 | 12.5000% |
| 4 | 57,013 | 6.1515% | 0.4932 | 6.2500% |
| 5 | 28,111 | 3.0331% | 0.4931 | 3.1250% |
| 6 | 13,980 | 1.5084% | 0.4973 | 1.5625% |
Ratios of 0.4960 / 0.4988 / 0.4932 / 0.4931 / 0.4973 - all six share-to-share ratios land between 0.49 and 0.50. A real sample of 1.8 million hands does not achieve that consistency.
Test 2: Run-length transition matrix
Next, look at the transition matrix: given the previous run had length L, what is the next run's length? Real shoes show all sorts of structure. This dataset showed strict geometric decay in every single row:
L=1 -> [227072, 112618, 56521, 27994, 13581, 6845]
ratios: 0.496 0.502 0.495 0.485 0.504
L=2 -> [112935, 55759, 27943, 13652, 6717, 3311]
ratios: 0.494 0.501 0.489 0.492 0.493
L=3 -> [55901, 28145, 13984, 6855, 3370, 1722]
ratios: 0.504 0.497 0.490 0.492 0.511
Six rows, all the same. That's not a property of card shoes. It's a property of a generator.
Test 3: Cross-shoe variance of window Banker share
This one we deliberately designed to be easy to pass. We measured how much the Banker share in the first 10 and last 10 hands of each shoe varies across all 32,634 shoes, and compared it to what pure randomness would produce.
All three line up -> this test passes. No forced balancing within windows.
Why include a passing test? Because if all 7 failed, you'd reasonably suspect we were reverse-engineering a conclusion. The honest version shows the passing test too - real data should show real randomness, and this one behaved exactly as expected, which validates the framework itself.
3. Tests 4-5: Autocorrelation and streak frequency
Test 4: Positional autocorrelation
Compute P(hand i = hand i+k). In real shoes this sits near 50%, drifting slightly with sampling noise. Across 13 different k values:
| Shift k | Match rate | 95% CI | Contains 50%? |
|---|---|---|---|
| 1 | 50.0404% | [49.9671%, 50.1136%] | Yes |
| 2 | 49.5663% | [49.4924%, 49.6402%] | No |
| 3 | 49.6029% | [49.5283%, 49.6775%] | No |
| 4 | 49.7829% | [49.7075%, 49.8582%] | No |
| 8 | 50.7412% | [50.6628%, 50.8197%] | No |
| 9 | 50.3791% | [50.2998%, 50.4584%] | No |
| 20 | 50.0218% | [49.9311%, 50.1124%] | Yes |
Several confidence intervals exclude 50%, and the direction is systematic (k=2,3,4 low; k=8,9 high). At a sample size of 1.8 million, consistency like this cannot be sampling noise - it reflects a structural bias baked into the data.
Test 5: Streak frequency vs the independent expectation
Under full independence, the expected number of runs of length L has a known value. Actual versus expected:
| Run length L | Actual | Independent expectation | Ratio |
|---|---|---|---|
| 1 | 467,241 | 1,822,431 | 0.256x |
| 2 | 231,764 | 911,037 | 0.254x |
| 3 | 115,596 | 455,518 | 0.254x |
| 4 | 57,013 | 227,804 | 0.250x |
| 5 | 28,111 | 113,947 | 0.247x |
| 6 | 13,980 | 57,007 | 0.245x |
| 7 | 12,744 | 28,526 | 0.447x |
| 8 | 221 | 14,277 | 0.015x |
Ratios sit at 0.25x for L=1 through L=6, then jump to 0.447x at L=7 and collapse to 0.015x at L=8. A tidy tail that suddenly fractures like that is a data-processing artefact, not card shoes.
4. Test 6: The decisive proof - a direct independence violation
If the earlier tests are only "highly suspicious", this one is not defensible.
The logic is simple. If hands are independent, then after N consecutive identical results, the next hand should still be about 50% likely to continue. Seven Bankers in a row doesn't make the eighth more likely to be a Banker - or less likely. Each hand is an independent coin flip.
Measured result:
| Streak length | Sample | Next hand continues | Real shoes would be |
|---|---|---|---|
| After 3 | 111,505 | 0.0000% | ~50% |
| 4 | 54,929 | 0.0000% | ~50% |
| 5 | 27,009 | 0.0000% | ~50% |
| 6 | 13,465 | 0.0000% | ~50% |
| 7 | 12,484 | 0.0000% | ~50% |
Pull any three 7-run examples from the sample and it's obvious:
01110111[0000000]100101110111011[0000000]1000111[0000000]1110110Every 7-run immediately follows a 4-run, and every run boundary flips the colour. That is not a property of card shoes. It's a property of the segmentation code.
Incidentally, this also explains the absurd "anti-streak wins 95% of the time" result we produced earlier. Running a strategy backtest on synthetic data measures how strong the generator's segmentation logic is, not how accurate a strategy is. Treating such output as evidence about the game is treating a data artefact as a market pattern.
5. Test 7: Position effects and shoe length distribution
Position effects within a shoe
If the data came from real shoes, the closer to the shuffle the composition gets more unusual and card counting becomes more valuable. Real data should show strategy performance differing between the start and end of a shoe.
Measured: continuation rate after 5 in a row, across the four quarters of a shoe, was 0.000% / 0.000% / 0.000% / 0.000%. Identical start to finish - consistent with "generated by a fixed rule", inconsistent with "harvested from real shoes".
Shoe length distribution
Shoe lengths run from 50 to 70 hands in a smooth bell shape (2,230 shoes at 50, 1,793 at 60, 5 at 70). Nothing obviously wrong here, but nothing that carries the signature of a real shoe either.
6. A 5-step audit workflow for any dataset
If you do any analysis on historical roadmaps - your own, someone else's, or bundled with a tool - run these in order. Every step is a plain statistical test. No AI, no toolkit, one Python script.
7. Why this matters as much as picking the right software
Our previous article covered how to choose baccarat prediction software (6 criteria). This one adds another, more fundamental one: the tool itself may be fine while the data it runs on is fake.
Returning to the previous article's core argument, with a correction to the wording. We said:
"The genuinely valuable work is getting the statistics right, not making the model more complex."
Those claims aren't wrong. But there was one thing we didn't do: verify the data was real in the first place. If the data is synthetic, then "win rates drop 8-15 points" could itself be a generator artefact - you cannot run a robustness test in a fake world.
So the correct order is:
- Verify the data - 7 tests, 5 minutes
- Then verify the method - does the backtest hold across disjoint windows?
- Only then the tool - latency, privacy, free tier come last
Get the order wrong and you end up doing due diligence on a precisely calculated hallucination.
Want to run these 7 tests on your own data?
BaccAI offers a 10-minute free trial, no card required. The audit script and decision criteria are published, so you can run it yourself and decide for yourself.
Start free trial →Generating synthetic data for demos and teaching is not inherently wrong - plenty of people do it legitimately. The problem is only ever presenting demo data as real data to support profit claims. Distinguishing the two costs almost nothing. Not distinguishing them costs the most.