Retail Banking Transactions and Fraud Analytics Set (GB)

FINFRD996· 1.9M records · 40 tables · v1.0.0 · Updated 2026-08-26
Finance Retail Banking and Payments Dataset API
CSV JSON SQLfraud-detectionretail-bankingcard-paymentsanti-fraudtransaction-monitoringapp-scamsground-truth-labelsimbalanced-classificationpaymentsuk-banking

Overview

FINFRD996 follows a synthetic United Kingdom retail bank from customer onboarding through account and card issue, everyday card and payment activity, authorisation and decline, fraud detection, investigation, chargeback and recovery. Forty linked tables cover the customer book with effective-dated addresses, contacts, employment and due diligence reviews; the product estate of current accounts, savings and credit cards, each account carrying a full IBAN whose check digits are real modulo-97 digits over its own sort code and account number; the card estate stored the way a compliant warehouse stores it, masked over numbers that were Luhn valid before masking; a merchant estate of seven thousand four hundred merchants on the real ISO 18245 category codes; and a transaction spine of more than a million posted movements over twelve months. Fraud is not a separate population bolted on beside the genuine data. Compromise events are laid over real customers and real cards, so a fraudulent transaction is an ordinary account behaving wrongly, and the two distributions overlap the way they do in life: average genuine spend of one hundred and thirty six pounds against average fraud of four hundred and fifteen, at roughly one transaction in six hundred. Twelve typologies are represented, from card-not-present and counterfeit through account takeover and SIM swap to the six authorised push payment scam categories the reimbursement rules are written against. Two tables make this usable as a benchmark rather than a demonstration. The fraud label is ground truth, confirmed days or weeks after the transaction, and is not what the bank knew at the time. Alongside it sits what the incumbent monitoring actually fired: fourteen thousand alerts at roughly nine percent precision and seventy five percent recall, eight alerts for every confirmed fraud. A model can therefore be scored against the truth and against the estate it would replace, on the same rows. Line-level detail covers the most recent twelve months and monthly aggregates reach back forty-two, which is how a bank really holds it: detail online for about thirteen months, rolled into aggregates after that. Identifiers are drawn from keyed hashes rather than counters, so no column runs 0001, 0002, 0003 and no model can learn the ordering instead of the signal.

Analytics

Four entries from the packaged tables, with the performance the dataset records for them. Every value below is read from the shipped files.

Card fraudCARDnot present, counterfeit, lost and stolen
1,360Confirmed fraud
0.13%Fraud rate
GBP 472,813Gross loss
GBP 163,982Recovered
Confirmed fraud, countConfirmed fraud, count
1 / 4

Row Counts by Table

Counted from the files that ship, not estimated.

TableRows
gb_bank_customers5,000
gb_bank_customer_addresses6,974
gb_bank_customer_contacts10,000
gb_bank_customer_employment5,000
gb_bank_kyc_reviews21,979
gb_bank_accounts9,055
gb_bank_account_holders9,914
gb_bank_cards7,028
gb_bank_card_events13,061
gb_bank_device_bindings10,024
gb_bank_merchants7,400
gb_bank_merchant_terminals13,284
gb_bank_acquirers34
gb_bank_transactions1,060,383
gb_bank_authorisations133,747
gb_bank_declines48,000
gb_bank_reversals8,013
gb_bank_fraud_labels1,687
gb_bank_fraud_alerts14,772
gb_bank_fraud_cases3,926
gb_bank_case_actions13,700
gb_bank_chargebacks794
gb_bank_recoveries363
gb_bank_login_events137,938
gb_bank_account_monthly_balances186,360
gb_bank_customer_monthly_activity210,000
gb_bank_products14
gb_bank_branches134
gb_bank_merchant_categories63
gb_bank_channels8
gb_bank_transaction_types12
gb_bank_decline_reasons12
gb_bank_device_types8
gb_bank_fraud_typologies14
gb_bank_risk_bands4
gb_bank_employment_sectors20
gb_bank_cities60
gb_bank_regions12
gb_bank_countries20
gb_bank_currencies12

Table Relationships

One parent record and seven child tables, each joined back on the same key.

70%
Loading diagram

Schema

Every table ships with typed columns, referential integrity, and documentation.

gb_bank_customers· Rows: 5,000
ColumnTypeDescription
customer_idvarchar(16)Customer key. Primary key of customers and the foreign key on every table that hangs off a person.
customer_numbervarchar(16)Ten digit customer number as it appears on correspondence. Sparse and non-sequential, so it carries no information about when the customer joined.
forenamevarchar(16)Given name. A real name token; the person is generated.
surnamevarchar(24)Family name, drawn with British frequency weighting so the book is four percent Smith rather than uniform across a list.
sexvarchar(16)Sex recorded at onboarding, F or M.
date_of_birthdateDate of birth, ISO 8601. Drives age-based segmentation and the student product test.
joined_ondateDate the relationship opened, which is not the date any particular account opened.

+9 more columns in gb_bank_customers. The full schema ships with the download.

gb_bank_customer_addresses· Rows: 6,974
ColumnTypeDescription
address_idvarchar(24)Address key. A customer has one row per address they have lived at, not one row.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
address_line_1varchar(32)Street and building number.
address_line_2varchar(32)London borough where the postcode area names one, otherwise empty.
city_namevarchar(24)Human-readable city name. All people and organisations are modelled.
city_idvarchar(16)Stable identifier for city; use it for declared joins.
postcodevarchar(16)UK postcode in the real format, with an area that genuinely serves the town and a district inside that area real range.

+5 more columns in gb_bank_customer_addresses. The full schema ships with the download.

gb_bank_customer_contacts· Rows: 10,000
ColumnTypeDescription
contact_idvarchar(24)Stable identifier for contact; use it for declared joins.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
contact_typevarchar(16)email or mobile.
contact_valuevarchar(56)The address or number. Mail domains are generated and were checked as unregistered at build time; mobile numbers sit in the Ofcom 07700 900xxx drama range, which is reserved and never allocated to a subscriber.
recorded_ondaterecorded on as an ISO 8601 calendar date.
is_primaryvarchar(16)The channel the bank uses first for this contact type.
verification_statusvarchar(16)Whether the channel has been proven to reach the customer. An unverified channel cannot carry a one-time passcode.

+1 more columns in gb_bank_customer_contacts. The full schema ships with the download.

gb_bank_customer_employment· Rows: 5,000
ColumnTypeDescription
employment_idvarchar(16)Stable identifier for employment; use it for declared joins.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
sector_idvarchar(16)Stable identifier for sector; use it for declared joins.
sector_namevarchar(48)Human-readable sector name. All people and organisations are modelled.
declared_income_gbpintegerGross annual income the customer declared, in pounds. Self-declared, so it is what the bank was told rather than what was earned.
employment_typevarchar(24)permanent, fixed_term, part_time, self_employed or not_employed.
declared_ondateWhen the declaration was made. It is not refreshed on every review, so it ages.

+1 more columns in gb_bank_customer_employment. The full schema ships with the download.

gb_bank_kyc_reviews· Rows: 21,979
ColumnTypeDescription
review_idvarchar(24)One customer due diligence review.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
review_datedatereview date as an ISO 8601 calendar date.
risk_bandvarchar(16)Band the review concluded on, which may differ from the band the customer carries now.
review_outcomevarchar(16)cleared or escalated. An escalation does not by itself mean anything was found.
review_triggervarchar(16)onboarding, periodic on the band cadence, or event_driven because something happened.
sar_filedvarchar(16)Whether a suspicious activity report was filed to the NCA off the back of the review.

+1 more columns in gb_bank_kyc_reviews. The full schema ships with the download.

gb_bank_accounts· Rows: 9,055
ColumnTypeDescription
account_idvarchar(24)Account key. Primary key of accounts and the foreign key on every transaction.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
product_idvarchar(16)Stable identifier for product; use it for declared joins.
sort_codevarchar(16)Six digit UK sort code in nn-nn-nn form.
account_numbervarchar(16)Eight digit UK account number.
ibanvarchar(32)Full IBAN. The check digits are real ISO 13616 modulo-97 digits over this sort code and account number, so the value validates in any IBAN library.
bicvarchar(16)SWIFT BIC of the issuing bank.

+8 more columns in gb_bank_accounts. The full schema ships with the download.

gb_bank_account_holders· Rows: 9,914
ColumnTypeDescription
holder_idvarchar(24)One person on one account. A joint account has two rows.
account_idvarchar(24)Stable identifier for account; use it for declared joins.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
holder_rolevarchar(16)primary or joint. Both can transact; the primary receives correspondence.
added_ondateadded on as an ISO 8601 calendar date.
gb_bank_cards· Rows: 7,028
ColumnTypeDescription
card_idvarchar(24)Card key. Primary key of cards and the foreign key on a card transaction.
account_idvarchar(24)Stable identifier for account; use it for declared joins.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
schemevarchar(16)Card scheme the product runs on.
binintegerBank identification number, the first six digits. Assigned inside this dataset and not an ITA allocation.
masked_panvarchar(24)The card number as a compliant warehouse stores it: first six, six asterisks, last four. The underlying number was Luhn valid before masking.
last_fourvarchar(8)Last four digits, which is what a customer quotes and what a dispute is matched on.

+7 more columns in gb_bank_cards. The full schema ships with the download.

gb_bank_card_events· Rows: 13,061
ColumnTypeDescription
event_idvarchar(24)Stable identifier for event; use it for declared joins.
card_idvarchar(24)Stable identifier for card; use it for declared joins.
event_typevarchar(16)issued, reissued, blocked or expired.
event_atvarchar(32)When the event happened, UTC.
event_reasonvarchar(24)Why the event happened. On a block this is the difference between a lost card and a suspected compromise.
notestextFree-text note left by the operator. Empty on automated events.
gb_bank_device_bindings· Rows: 10,024
ColumnTypeDescription
device_idvarchar(24)A device the customer has used for digital banking.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
device_typevarchar(24)Kind of device. Joins gb_bank_device_types.
bound_atvarchar(32)When the device was first seen on the relationship.
is_primaryvarchar(16)True for the single row of this type that the ERP treats as the default for the vendor.
trust_statevarchar(16)trusted or unrecognised. A payment from an unrecognised device shortly after binding is the account takeover signature.
device_fingerprintvarchar(24)Opaque device fingerprint. Stable per device, meaningless across datasets.

+1 more columns in gb_bank_device_bindings. The full schema ships with the download.

gb_bank_merchants· Rows: 7,400
ColumnTypeDescription
merchant_idvarchar(24)Merchant key. Foreign key on card transactions, declines and alerts.
merchant_numbervarchar(24)Thirteen digit acquirer merchant identifier, as it appears in the scheme message.
merchant_namevarchar(56)Trading name. Generated from British place-name and trade morphology; no row names a real trading company.
mccvarchar(8)ISO 18245 merchant category code. Joins gb_bank_merchant_categories.
category_groupvarchar(16)Internal sourcing category label for the segment, as a buyer would name it.
city_idvarchar(16)Stable identifier for city; use it for declared joins.
country_codevarchar(8)ISO 3166-1 alpha-2 country code.

+6 more columns in gb_bank_merchants. The full schema ships with the download.

gb_bank_merchant_terminals· Rows: 13,284
ColumnTypeDescription
terminal_idvarchar(24)A physical terminal or an e-commerce gateway.
merchant_idvarchar(24)Stable identifier for merchant; use it for declared joins.
terminal_numbervarchar(16)Eight digit terminal identifier inside the merchant estate.
terminal_typevarchar(24)countertop, portable, unattended or ecommerce_gateway. Unattended terminals carry a different fraud profile because nobody is watching.
city_idvarchar(16)Stable identifier for city; use it for declared joins.
contactless_capablevarchar(16)Whether the terminal accepts contactless.
gb_bank_acquirers· Rows: 34
ColumnTypeDescription
acquirer_idvarchar(16)Acquiring bank that presents the merchant transaction into the scheme.
acquirer_namevarchar(40)Human-readable acquirer name. All people and organisations are modelled.
country_codevarchar(8)ISO 3166-1 alpha-2 country code.
interchange_bpsnumeric(6,3)Interchange the acquirer pays, in basis points of transaction value.
gb_bank_transactions· Rows: 1,060,383
ColumnTypeDescription
transaction_idvarchar(24)Transaction key. Primary key of the spine and the foreign key from labels, alerts, chargebacks, reversals and authorisations.
transaction_referencevarchar(16)Twelve character acquirer-style reference, which is what appears on a statement and what a customer quotes in a dispute.
account_idvarchar(24)Stable identifier for account; use it for declared joins.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
card_idvarchar(24)Card used. Empty on transactions that did not involve a card, such as a faster payment.
merchant_idvarchar(24)Merchant paid. Empty on transactions with no merchant, such as an internal transfer.
terminal_idvarchar(24)Stable identifier for terminal; use it for declared joins.

+14 more columns in gb_bank_transactions. The full schema ships with the download.

gb_bank_authorisations· Rows: 133,747
ColumnTypeDescription
authorisation_idvarchar(24)The authorisation message, which is what a real-time model actually scores.
transaction_idvarchar(24)Stable identifier for transaction; use it for declared joins.
account_idvarchar(24)Stable identifier for account; use it for declared joins.
card_idvarchar(24)Stable identifier for card; use it for declared joins.
merchant_idvarchar(24)Stable identifier for merchant; use it for declared joins.
authorised_atvarchar(32)When the authorisation was requested, always before the transaction settled.
authorised_amount_gbpnumeric(9,2)Amount authorised, which can differ from the amount that finally settles.

+8 more columns in gb_bank_authorisations. The full schema ships with the download.

gb_bank_declines· Rows: 48,000
ColumnTypeDescription
decline_idvarchar(24)A declined authorisation. These never became transactions, which is why they are here and not on the spine.
account_idvarchar(24)Stable identifier for account; use it for declared joins.
card_idvarchar(24)Stable identifier for card; use it for declared joins.
merchant_idvarchar(24)Stable identifier for merchant; use it for declared joins.
declined_atvarchar(32)When the authorisation was refused, UTC.
decline_datedatedecline date as an ISO 8601 calendar date.
decline_monthvarchar(16)Year and month of the refusal.

+7 more columns in gb_bank_declines. The full schema ships with the download.

gb_bank_reversals· Rows: 8,013
ColumnTypeDescription
reversal_idvarchar(24)A reversal against a settled transaction.
transaction_idvarchar(24)Stable identifier for transaction; use it for declared joins.
account_idvarchar(24)Stable identifier for account; use it for declared joins.
reversed_atvarchar(32)When the reversal posted, UTC.
reversed_amount_gbpnumeric(8,2)Amount reversed. Equal to the original in a full reversal, less in a partial one.
currency_codevarchar(8)Stable code for currency; its companion description carries the meaning.
reversal_reasonvarchar(24)Why it was reversed. A merchant refund and a duplicate charge look the same on a statement and are not the same event.

+1 more columns in gb_bank_reversals. The full schema ships with the download.

gb_bank_fraud_labels· Rows: 1,687
ColumnTypeDescription
label_idvarchar(24)One confirmed fraud. The ground truth table.
transaction_idvarchar(24)Stable identifier for transaction; use it for declared joins.
card_idvarchar(24)Stable identifier for card; use it for declared joins.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
typology_codevarchar(32)Stable code for typology; its companion description carries the meaning.
loss_classvarchar(16)How the loss is categorised for reporting. Joins the same column on gb_bank_fraud_typologies.
confirmed_atvarchar(32)When the fraud was confirmed, which is days or weeks AFTER the transaction. Training on features observable only at this timestamp leaks the future into the model.

+5 more columns in gb_bank_fraud_labels. The full schema ships with the download.

gb_bank_fraud_alerts· Rows: 14,772
ColumnTypeDescription
alert_idvarchar(24)One alert the incumbent monitoring raised.
transaction_idvarchar(24)Stable identifier for transaction; use it for declared joins.
account_idvarchar(24)Stable identifier for account; use it for declared joins.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
card_idvarchar(24)Stable identifier for card; use it for declared joins.
alerted_atvarchar(32)When the alert fired, UTC. Within minutes of the transaction, which is what makes it usable in real time.
alert_datedatealert date as an ISO 8601 calendar date.

+7 more columns in gb_bank_fraud_alerts. The full schema ships with the download.

gb_bank_fraud_cases· Rows: 3,926
ColumnTypeDescription
case_idvarchar(24)Investigation case reference in the CS-year-number form an analyst quotes.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
account_idvarchar(24)Stable identifier for account; use it for declared joins.
opened_atvarchar(32)When the case was opened, UTC.
opened_datedateopened date as an ISO 8601 calendar date.
opened_monthvarchar(16)Year and month the case opened.
closed_atvarchar(32)When the case closed. Empty on a case still open at the end of the window.

+6 more columns in gb_bank_fraud_cases. The full schema ships with the download.

gb_bank_case_actions· Rows: 13,700
ColumnTypeDescription
action_idvarchar(24)One step in the investigation, in order.
case_idvarchar(24)Stable identifier for case; use it for declared joins.
action_atvarchar(32)When the step was taken, UTC. Steps are in order within a case.
action_typevarchar(24)What the investigator did at that step.
agent_idvarchar(16)Stable identifier for agent; use it for declared joins.
action_notetextInvestigator note on the step. Empty where the action speaks for itself.
gb_bank_chargebacks· Rows: 794
ColumnTypeDescription
chargeback_idvarchar(24)A chargeback raised against a card transaction.
transaction_idvarchar(24)Stable identifier for transaction; use it for declared joins.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
raised_atvarchar(32)When the chargeback was raised with the scheme, UTC.
raised_datedateraised date as an ISO 8601 calendar date.
raised_monthvarchar(16)Year and month it was raised, for joining to monthly reporting.
disputed_amount_gbpnumeric(9,2)Amount disputed, which is normally the full transaction.

+5 more columns in gb_bank_chargebacks. The full schema ships with the download.

gb_bank_recoveries· Rows: 363
ColumnTypeDescription
recovery_idvarchar(24)Money actually recovered against a loss.
transaction_idvarchar(24)Stable identifier for transaction; use it for declared joins.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
recovered_atvarchar(32)When the money was actually recovered, which is well after the loss.
recovered_amount_gbpnumeric(9,2)Amount recovered, usually less than the loss.
currency_codevarchar(8)Stable code for currency; its companion description carries the meaning.
recovery_routevarchar(24)scheme_chargeback for card losses, psr_reimbursement where the customer was made whole under the APP reimbursement rules.

+1 more columns in gb_bank_recoveries. The full schema ships with the download.

gb_bank_login_events· Rows: 137,938
ColumnTypeDescription
login_idvarchar(24)One authentication attempt on a digital channel.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
device_idvarchar(24)Stable identifier for device; use it for declared joins.
occurred_atvarchar(32)When the authentication attempt happened, UTC.
login_datedatelogin date as an ISO 8601 calendar date.
login_monthvarchar(16)Year and month of the attempt.
channel_codevarchar(24)Stable code for channel; its companion description carries the meaning.

+5 more columns in gb_bank_login_events. The full schema ships with the download.

gb_bank_account_monthly_balances· Rows: 186,360
ColumnTypeDescription
balance_idvarchar(24)One account, one month.
account_idvarchar(24)Stable identifier for account; use it for declared joins.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
balance_monthvarchar(16)Year and month the row closes.
closing_balance_gbpnumeric(10,2)Balance at month end. Negative where the account is overdrawn or is a credit card.
total_debits_gbpnumeric(10,2)Money out during the month.
total_credits_gbpnumeric(9,2)Money in during the month.

+3 more columns in gb_bank_account_monthly_balances. The full schema ships with the download.

gb_bank_customer_monthly_activity· Rows: 210,000
ColumnTypeDescription
activity_idvarchar(24)One customer, one month.
customer_idvarchar(16)Stable identifier for customer; use it for declared joins.
activity_monthvarchar(16)Year and month.
transaction_countintegerTransactions across all of the customer accounts that month.
total_spend_gbpnumeric(10,2)Total value across all of their accounts that month.
cnp_transaction_countintegerHow many were card-not-present, which is the exposure that matters for remote fraud.
fraud_transaction_countintegerHow many were confirmed fraudulent.

+2 more columns in gb_bank_customer_monthly_activity. The full schema ships with the download.

gb_bank_products· Rows: 14
ColumnTypeDescription
product_idvarchar(16)Stable identifier for product; use it for declared joins.
product_namevarchar(40)Human-readable product name. All people and organisations are modelled.
product_familyvarchar(16)current, savings or credit_card.
monthly_fee_gbpintegerAccount fee charged monthly, zero on fee-free products.
interest_rate_pctnumeric(6,2)Credit interest on a savings product, or representative APR on a card.
default_limit_gbpintegerArranged overdraft on a current account, or the starting credit limit on a card.
currency_codevarchar(8)Stable code for currency; its companion description carries the meaning.

+2 more columns in gb_bank_products. The full schema ships with the download.

gb_bank_branches· Rows: 134
ColumnTypeDescription
branch_idvarchar(16)Stable identifier for branch; use it for declared joins.
branch_namevarchar(56)Human-readable branch name. All people and organisations are modelled.
city_idvarchar(16)Stable identifier for city; use it for declared joins.
sort_codevarchar(16)Six digit UK sort code in nn-nn-nn form. Assigned inside this dataset; not an allocation of any real institution.
opened_ondateopened on as an ISO 8601 calendar date.
branch_statusvarchar(16)Whether the branch is still trading. Closed branches keep their accounts.
gb_bank_merchant_categories· Rows: 63
ColumnTypeDescription
mccvarchar(8)ISO 18245 merchant category code. The real four digit scheme code.
mcc_descriptionvarchar(72)Official ISO 18245 title for the code.
category_groupvarchar(16)Coarser grouping this dataset adds over the standard, so a query can ask for fuel without listing both service station codes.
risk_weightnumeric(4,1)Relative fraud propensity of the category in this simulation, 1.0 being average. A modelling input, not part of the standard.
gb_bank_channels· Rows: 8
ColumnTypeDescription
channel_codevarchar(24)How the payment reached the bank.
channel_namevarchar(40)Human-readable channel name. All people and organisations are modelled.
presentment_modevarchar(24)Whether the card was physically present, remote, or no card was involved.
volume_sharenumeric(6,3)Share of transactions on the channel across the portfolio.
gb_bank_transaction_types· Rows: 12
ColumnTypeDescription
transaction_typevarchar(24)The instrument and direction together, for example faster_payment_out.
transaction_type_namevarchar(24)Human-readable transaction type name. All people and organisations are modelled.
directionvarchar(16)Whether the type moves money out of the account or into it.
gb_bank_decline_reasons· Rows: 12
ColumnTypeDescription
decline_reasonvarchar(24)Why the authorisation was refused.
decline_reason_namevarchar(48)Human-readable decline reason name. All people and organisations are modelled.
reason_groupvarchar(24)Whether the refusal was about balance, limits, authentication, card status, risk, the acquirer or a technical failure.
gb_bank_device_types· Rows: 8
ColumnTypeDescription
device_typevarchar(24)Kind of device a digital session came from.
device_type_namevarchar(24)The device type in words.
form_factorvarchar(16)mobile, tablet, desktop or unknown. Fraud rates differ sharply between them, so this is worth a feature on its own.
gb_bank_fraud_typologies· Rows: 14
ColumnTypeDescription
typology_codevarchar(32)The fraud pattern, in the vocabulary a UK fraud team uses.
typology_namevarchar(48)Human-readable typology name. All people and organisations are modelled.
typology_familyvarchar(16)card, digital, app, mule or first_party. APP means the customer authorised the payment themselves, which changes both the liability and the detection problem.
typology_descriptionvarchar(104)Human-readable meaning of typology.
base_rate_per_millenumeric(5,2)Incidence per thousand eligible transactions used to drive the simulation. A modelling input, published so the class balance is reproducible.
loss_classvarchar(16)How the loss is categorised for reporting: card_fraud, unauthorised, app_scam, mule or first_party.
gb_bank_risk_bands· Rows: 4
ColumnTypeDescription
risk_bandvarchar(16)Customer due diligence band under the money laundering regulations.
risk_band_namevarchar(16)Human-readable risk band name. All people and organisations are modelled.
severity_orderintegerSort order, 1 lowest. Use this rather than sorting the band alphabetically.
policy_notevarchar(72)What the band obliges the bank to do.
gb_bank_employment_sectors· Rows: 20
ColumnTypeDescription
sector_idvarchar(16)Stable identifier for sector; use it for declared joins.
sector_namevarchar(48)ONS-style industry section the customer declared.
gb_bank_cities· Rows: 60
ColumnTypeDescription
city_idvarchar(16)Stable identifier for city; use it for declared joins.
city_namevarchar(24)Human-readable city name. All people and organisations are modelled.
region_idvarchar(16)Stable identifier for region; use it for declared joins.
latitudenumeric(8,4)City centre latitude in decimal degrees, WGS 84.
longitudenumeric(7,4)City centre longitude in decimal degrees, WGS 84.
populationintegerApproximate urban population, used to weight where customers and merchants are.
gb_bank_regions· Rows: 12
ColumnTypeDescription
region_idvarchar(16)Stable identifier for region; use it for declared joins.
region_namevarchar(32)Real ONS region or devolved nation name.
country_codevarchar(8)ISO 3166-1 alpha-2 country code.
gb_bank_countries· Rows: 20
ColumnTypeDescription
country_codevarchar(8)ISO 3166-1 alpha-2 country code.
country_namevarchar(32)Country name in English.
currency_codevarchar(8)Stable code for currency; its companion description carries the meaning.
card_usage_weightnumeric(7,4)Share of this portfolio card spend that happens in the country. Sums to one across the table and is what makes a geo-velocity rule worth writing.
gb_bank_currencies· Rows: 12
ColumnTypeDescription
currency_codevarchar(8)ISO 4217 alphabetic currency code.
currency_numericintegerISO 4217 numeric currency code.
currency_namevarchar(24)Human-readable currency name. All people and organisations are modelled.
minor_unitsintegerDigits after the decimal point the currency uses. JPY is 0, sterling is 2.
gbp_ratenumeric(7,4)Units of this currency per pound, held flat for the period so a billing amount reconciles exactly.

Sample Data

A snapshot of real rows from the dataset (values are fully synthetic).

transaction_referencetransacted_atamount_gbpchannel_codemcccountry_codeis_fraudfraud_typology
2OJSM6CMIZ5H2025-07-01T00:00:12Z5.49ecommerce4111GBN
391O0H54PKOY2025-07-01T00:01:03Z30.63pos_chip5942GBN
3Z5OGF3ITPXW2025-07-01T00:02:59Z39.27pos_chip5732GBN

Version History

v1.0.02026-08-26v1.0.0 - first release. Forty tables, 1.94 million rows. Twelve months of line-level transaction detail to 2026-06-30 with forty-two months of monthly aggregates behind it. Ground-truth fraud labels across twelve typologies at 0.16 percent of transactions, with the incumbent rule and model alerting published alongside so a buyer can measure against both.

Related Datasets