synthetic cfo Back to synthetic cfo
Beat the textbook rules

Beat the textbook rules

Five fixed benchmark tracks (SCFO-BENCH v1.7, engine v1.15.0). Configuration and seed are fixed, so everyone graded on this engine sees byte-identical data. The house baselines are the three detectors from the proof, run here exactly as your model would be: against a database copy with no answer key in the directory. Beat the textbook rules and publish it.

B-01 Sprint · SAP ECC · scale 1,500 · medium fraud · seed 20260101 · 141 labelled fraud records

The entry track: a compact SAP ECC manufacturer with the full four-cycle fraud surface. Fast to generate, fast to evaluate - start here.

#DetectorPrecisionRecallF1GradeWhen
1Targeted forensic rules (ceiling) house baseline0.050.980.10F
2Textbook CAAT rules house baseline0.040.630.07F
3Generic statistical anomaly detection house baseline0.020.240.04F
B-02 P2P Core · SAP ECC · scale 5,000 · medium fraud · seed 20260202 · 449 labelled fraud records

The standard reference track: SAP ECC manufacturing at medium-intensity fraud across procurement, revenue, treasury and the close. The headline comparison number.

#DetectorPrecisionRecallF1GradeWhen
1Targeted forensic rules (ceiling) house baseline0.050.980.10F
2Textbook CAAT rules house baseline0.040.650.07F
3Generic statistical anomaly detection house baseline0.010.100.02F
B-03 Insider Threat · SAP ECC · scale 5,000 · high fraud · seed 20260303 · 1211 labelled fraud records

Five modules including HR/payroll at high intensity: ghost employees, payroll diversion, collusion between the vendor master and the payroll file.

#DetectorPrecisionRecallF1GradeWhen
1Targeted forensic rules (ceiling) house baseline0.120.950.22F
2Textbook CAAT rules house baseline0.110.720.19F
3Generic statistical anomaly detection house baseline0.070.190.10F
B-04 Oracle Cloud · ORACLE · scale 5,000 · medium fraud · seed 20260404 · 466 labelled fraud records

The Oracle Fusion track: retail seasonality, module schemas (AP/AR/CE/GL), medium intensity. Tests whether a model's skills transfer across ERP architectures.

#DetectorPrecisionRecallF1GradeWhen
1Targeted forensic rules (ceiling) house baseline0.121.000.21F
2Textbook CAAT rules house baseline0.090.620.16F
3Generic statistical anomaly detection house baseline0.020.340.03F
B-05 Universal Journal · SAP S4HANA · scale 5,000 · medium fraud · seed 20260505 · 452 labelled fraud records

S/4HANA with ACDOCA: the post-migration world. Pharma procurement discipline, medium intensity. Models trained on ECC structure meet the single-table journal here.

#DetectorPrecisionRecallF1GradeWhen
1Targeted forensic rules (ceiling) house baseline0.050.980.10F
2Textbook CAAT rules house baseline0.040.630.07F
3Generic statistical anomaly detection house baseline0.010.090.02F
How scores get here, and what they cannot prove
Computed, not claimedEvery score on this page was computed on our server from the record ids a signed-in submitter uploaded, graded against the track's answer key by the same scorer that produced the house baselines. Nobody types their own numbers in.
Published by choiceScores appear here only when the submitter ticked publish and named their detector. The name is theirs; no email address is ever shown.
A perfect score proves nothingThe key also ships inside a generated copy of the track, as it does in every package, so anyone can submit the key itself and score 100 percent. That is why the bar that matters is honest daylight between your detector and the house baselines, not a flawless row.
Put your detector on the board

Create a free account, open the Benchmark tab and pick an official track. Press Generate this track to build its data on your account: every plan can, the free one included, and each track costs one generation (on the free plan, one of the month's 5). Run your detector on that copy, then paste the record ids it flags. You get the full scorecard either way; ticking publish with a model name puts it here.

Track definitions are fixed; when the engine moves the tracks are regenerated on it, and a score is ranked beside the baselines only when both were graded on the same engine, never silently. Baselines regenerate byte-identically from proof/bench_baselines.py on the engine version they name.