Gamma
Real-dataset run · ULB credit-card

The same frozen rule, run on real transactions — with the labels withheld until after every decision.

284,807 real rows 492 fraud · 0.173 % Labels opened only at scoring
Dataset under test
ULB
creditcard.csv · PCA-anonymised
sourcedataset/ieee-fraud-detection/creditcard.csv
file_bytes150,828,752
rows_total284,807 · 492 fraud (0.173 %)
rows_loaded75,000 (first-N, file order)
warmup18,750 rows · unlabeled
observablesTime · V1…V28 · Amount
label (Class)withheld until scoring
Calibration — from the unlabeled warmup only (Q = 99.5)
Blind run · predicate → Γ → decision → then reveal label
This sample is deliberately enriched. 60 fraud + 240 legitimate rows (20 % fraud) so both behaviours are visible in 300 rows. True prevalence is 0.173 % — roughly 1 fraud in 578. The live precision below is therefore far better than reality; the measured full-run precision of 0.110 is in the evidence section.
#AmountPredicates · blind Γ_GDecisionLabel
Press Replay to stream real rows through the frozen rule.
What this does — and does not — prove

Two results on the same dataset. Only one of them is detection.

The credit-card corpus appears twice in this project, and the difference between the two runs is the single most important thing on this page.

E1 · conformance

The mapped corpus

rows284,807
PERMIT284,315
SAFE_STATE492
match rate1.000
false permits0

Flawless — and it has to be. A read-only audit of the corpus shows the engine's own inputs were built from the answer.

Leaking inputs — 5 of 12
Gate_A3Gate_A7Lambda_GHARM_RISKReasonCodes
Each has value sets perfectly disjoint across the two classes over all 284,807 rows — standalone classifier accuracy 1.000. ReasonCodes literally contains CLASS_1_FRAUD.
Non-leaking
Gate_A1Gate_A2Gate_A4Gate_A5Gate_A6StaleContext
Conformance, not detection. The 0-false-permit result is a tautology on this corpus.
E12 · blind

The raw dataset

rows_loaded75,000
inputsTime, V1…V28, Amount
calibrationunlabeled warmup, Q=99.5
AUROC0.9116
recall0.8296
precision0.1099

The label is structurally unreachable: it is never passed to the predicate functions, and is opened only by score() after every decision has been chained into the ledger.

The honest reading
AUROC 0.912 says the rule separates fraud from legitimate well. Precision 0.110 says that at a true prevalence of 0.223 %, catching 83 % of fraud costs roughly nine false alarms per catch. Both are true at once. A separability score is not an operating point.
Detection, measured blind. Modest in absolute terms, and reported that way.

Same frozen rule, three datasets

The engine is not tuned per corpus — gamma_decision is imported and used identically. The spread is the finding, disclosed rather than averaged away.

DatasetDomainRowsPrevalencePrecisionRecallF1AUROCMCC
ULBfinancial · PCA-anonymised75,0000.223 %0.1100.8300.1940.9120.299
UNSW-NB15network intrusion telemetry61,74955.06 %0.8570.6610.7460.7610.531
IEEE-CISfinancial · transactions75,0002.561 %0.0650.3490.1100.6110.102

Absolute rates are not comparable across datasets — prevalence and observable feature spaces differ by design. The same rule transfers strongly to ULB, moderately to network telemetry, weakly to IEEE-CIS.

Independent recomputation

What the blind run establishes
  • The decision is made from observables alone, with the label structurally out of reach.
  • Calibration uses an unlabeled warmup prefix — no fitting to the answer.
  • Every decision is sealed into a hash-chained ledger before any label is opened.
  • The same untouched aggregation rule runs on all three datasets.
What it does not establish
  • That Gamma is a fraud detector — precision 0.110 is not a deployable operating point on its own.
  • That the E1 headline (0 false permits on 284,807 rows) is detection. It is conformance.
  • That these results transfer to a corpus with different observables.
  • That a high AUROC implies a usable alert volume at low prevalence.