Tide: A Customisable Dataset Generator for Anti-Money Laundering Research
Organizations: University of Amsterdam, The Netherlands · Jožef Stefan Institute, Slovenia · University of Amsterdam/University of Twente, The Netherlands
Abstract
The lack of accessible transactional data significantly hinders machine learning research for Anti-Money Laundering (AML). Privacy and legal concerns prevent the sharing of real financial data, while existing synthetic generators focus on simplistic structural patterns and neglect the temporal dynamics (timing and frequency) that characterise sophisticated laundering schemes. We present Tide, an open-source synthetic dataset generator that produces graph-based financial networks incorporating money laundering patterns defined by both structural and temporal characteristics. Tide enables reproducible, customisable dataset generation tailored to specific research needs. We release two reference datasets with varying illicit ratios (LI: 0.10%, HI: 0.19%), alongside the implementation of state-of-the-art detection models. Evaluation across these datasets reveals condition-dependent model rankings: LightGBM achieves the highest PR-AUC (78.05) in the low illicit ratio condition, while XGBoost performs best (85.12) at higher fraud prevalence. These divergent rankings demonstrate that the reference datasets can meaningfully differentiate model capabilities across operational conditions. Tide provides the research community with a configurable benchmark that exposes meaningful performance variation across model architectures, advancing the development of robust AML detection methods.
Figures & tables
| Feature | AMLSim ( Suzumura and Kanezashi, 2021 ) | AMLWorld ( Altman and others, 2023 ) | SynthAML ( Jensen et al., 2023 ) | Tide (Ours) |
|---|---|---|---|---|
| Core Approach | Agent-Based | Virtual World Agents | Statistical (Copulas) | Pattern Injection |
| Executable Generator | ✓ | ✗ | ✗ | ✓ |
| Pre-loaded Pattern Library | ✓ 1 | ✓ 1 | ✗ | ✓ 2 |
| Custom Pattern Injection | ✗ | ✗ | ✗ | ✓ |
| Precise Temporal Control | ✗ | ✗ | ✗ | ✓ |
| Zero-Shot (No Real Data) | ✓ | ✓ | ✗ | ✓ |
| Attribute | Description | Type |
|---|---|---|
| node_id | Unique identifier for each node. | String |
| node_type | The type of the entity. | Categorical |
| country_code | Country where the entity is based. | String |
| is_fraudulent | Label indicating whether node is part of a fraud pattern. | Boolean |
| risk_score | Value in [0, 0.9] expressing the probability of an entity being fraudulent. | Float |
| Component | Description | Type |
|---|---|---|
| Source and target node IDs. | String | |
| Relationship type: transaction or ownership . | Categorical | |
| Transaction amount. | Float | |
| Timestamp of the interaction. | Timestamp | |
| Time since the source node’s last transaction. | Timedelta | |
| Transaction category. | Categorical |
| Type | Source Avg | Gen. Median | Gen. Mean | ||
|---|---|---|---|---|---|
| Payment | 3.8 | 1.2 | $60 (FRPS) | $46 | $218 |
| Transfer | 5.5 | 2.0 | $1,634 (FRPS) | $221 | $1,863 |
| Withdrawal | 4.8 | 0.9 | $198 (FRPS) | $130 | $546 |
| Deposit † | 5.3 | 1.5 | — | $220 | $977 |
| Type | FRPS Share † | Generated Share |
|---|---|---|
| Payment | 91% | 68% |
| Transfer | 7% | 12% |
| Withdrawal | 2% | 8% |
| Deposit | — | 11% |
| Variant | Nodes | Edges | Illicit ratio | Imbalance |
|---|---|---|---|---|
| LI | 36,629 | 7,642,030 | 0.10% | 959:1 |
| HI | 36,653 | 7,618,299 | 0.19% | 531:1 |
| Model | Illicit Ratio | |
|---|---|---|
| LI (0.10%) | HI (0.19%) | |
| GIN | ||
| GIN+EU | ||
| PNA | ||
| LightGBM+GFP | ||
| XGBoost+GFP | ||
| Attribute | Description | Type |
|---|---|---|
| Name | An individual’s full name. | String |
| Age group | The individual’s age group. | Categorical |
| Occupation | The individual’s occupation. | Categorical |
| Gender | The individual’s gender. | Categorical |
| Attribute | Description | Type |
|---|---|---|
| business_category | The primary sector or type of business activity. | Categorical |
| incorporation_year | The year the business was legally incorporated. | Integer |
| number_of_employees | Approximate number of people employed by the business. | Integer |
| is_high_risk_category | Flag for businesses in a high-risk category. | Boolean |
| Attribute | Description | Type |
|---|---|---|
| account_category | Type of account (e.g., Current, Savings, Cash). | Categorical |
| currency | The currency used by the account. | String |
| owner_id | ID of the Individual or Business that owns this account. | String |
| institution_id | ID of the Financial Institution that hosts this account. | String |
| Attribute | Description | Type |
|---|---|---|
| institution_name | Name of the financial institution. | String |
| country | Country of legal registration or regulation. | String |
| Entity Type | Risk Factor | Weight ( ) |
| Individual | Base risk | 0.05 |
| High-risk age group | 0.15 | |
| High-risk occupation | 0.12 | |
| Business | Base risk | 0.10 |
| Cash-intensive business category | 0.25 | |
| Very small company ( 5 employees) | 0.10 |
| Pattern | Topology | Timing | Additional layering |
|---|---|---|---|
| Overseas Transfers | 1 → n overseas (n=2–5) | Periodic (7/14/30d) | ✓ |
| Rapid Movement | n → 1 → cash-out (n=2–7) | Burst (1–24h delay) | ✓ |
| Front Business | Cash → business → overseas | Paired (0.5–6h) | ✓ |
| U-Turn | Source → chain → return | Sequential (1–5d/hop) | Inherent |
| Synchronised | n → 1 recipient (n=3–8) | Coordinated (2h window) | — |
| Pattern | Group | Fraud feature countered |
| Random everyday payments | Baseline | — |
| High-value transactions | Baseline | — |
| Salary payments | Baseline | — |
| Fraudster background | Baseline | Behavioural anomaly |
| Legitimate bursts | Counter-leakage | Temporal clustering |
| Legitimate periodic | Counter-leakage | Periodic timing |
| Parameter | Value |
|---|---|
| Batch size | 128 |
| Patterns | Scatter-gather, temporal cycles, |
| simple cycles, vertex statistics | |
| Scatter-gather window | 6 hours |
| Cycle / vertex stats window | 1 day |
| Max simple cycle length | 10 |
| FRPS Category | Volume (B) | Share |
|---|---|---|
| Non-prepaid debit cards | 87.8 | 42.2% |
| Credit cards | 51.1 | 24.6% |
| ACH debit transfers | 20.3 | 9.8% |
| Prepaid debit cards | 18.1 | 8.7% |
| ACH credit transfers | 15.9 | 7.6% |
| Checks | 11.2 | 5.4% |
| Parameter | LightGBM | XGBoost |
|---|---|---|
| n_estimators | 1000 | 1000 |
| max_depth | 6 | 6 |
| num_leaves | 64 | – |
| learning_rate | 0.01 | 0.01 |
| reg_lambda (L2) | 5.0 | 5.0 |
| reg_alpha (L1) | 1.5 | 0.5 |
| Parameter | GIN | GIN+EU | PNA |
|---|---|---|---|
| hidden dimension | 64 | 64 | 64 |
| number of layers | 4 | 4 | 2 |
| dropout | 0.2 | 0.2 | 0.1 |
| final dropout | 0.5 | 0.5 | 0.5 |
| learning rate | 0.001 | ||
| weight decay | 0.0005 | ||
| Model | F1 | Precision | Recall | PR-AUC | Lift | Youden’s J | ROC-AUC |
|---|---|---|---|---|---|---|---|
| GIN | |||||||
| GIN+EU | |||||||
| PNA | |||||||
| LightGBM+GFP | |||||||
| XGBoost+GFP | |||||||
| LightGBM |
| Model | F1 | Precision | Recall | PR-AUC | Lift | Youden’s J | ROC-AUC |
|---|---|---|---|---|---|---|---|
| GIN | |||||||
| GIN+EU | |||||||
| PNA | |||||||
| LightGBM+GFP | |||||||
| XGBoost+GFP | |||||||
| LightGBM |
| Configuration | Transactions | Total ( ) | Wall-time | Peak Memory |
|---|---|---|---|---|
| [millions] | [millions] | [s] | [MB] | |
| Test-1k | ||||
| Test-2k | ||||
| Test-3.5k | ||||
| Test-5k | ||||
| Test-8k |
| Metric | Value | Target |
|---|---|---|
| Pearson correlation ( ) | 0.970 | |
| -value | 0.00137 | |
| Scaling exponent ( ) | 1.164 | |
| Coefficient of determination ( ) | 0.976 |