CoolFace
Datasetpublic

preetisheoran/nfpc-parquet-dataset

AML Mule Account Detection Challenge Data Format: All files are in Apache Parquet format (Snappy compression). Use pandas.read_parquet(), pyarrow.parquet, or any Parquet-compatible reader. Transaction files are split across batch-N/ subdirectories. Primary Objective/Problem Statement Identify mule accounts used for money laundering from banking transaction and account data. Given labelled training data and unlabelled test accounts, predict which test accounts… See the full description on the dataset page: https://huggingface.co/datasets/preetisheoran/nfpc-parquet-dataset.

sourceHugging Faceupdated 7mo agoView on Hugging Face
0likes2kdownloads
Dataset Card

AML Mule Account Detection Challenge

Data Format: All files are in Apache Parquet format (Snappy compression). Use pandas.read_parquet(), pyarrow.parquet, or any Parquet-compatible reader. Transaction files are split across batch-N/ subdirectories.

Primary Objective/Problem Statement

Identify mule accounts used for money laundering from banking transaction and account data. Given labelled training data and unlabelled test accounts, predict which test accounts are mules.

Evaluation

  • —Exact Submission Guidelines will be provided shortly
  • —Evaluation Criteria is listed below:
  • —40% weightage for Model/Feature Ingenuity
  • —Rewarded for creative and innovative ideas in types of models/features used, multiple models/algorithms in series/parallel may be used to generate final predictions
  • —20% weightage for model performance scores
  • —Rewarded for high accuracy/precision scores, calculated scores such as AUC-ROC and F1 scores
  • —15% weightage for avoidance of red-herrings in data
  • —Rewarded for succesfully avoiding several red-herrings injected in the training data
  • —15% weightage for additional insights such as Temporal IOU scores, other insights
  • —10% weightage for report quality
  • —Rewarded for clear and concise insights presented in the report with data-driven logic.

Data Files

Provided to You

FileRowsSizeDescription
customers.parquet159,0002.3 MBCustomer demographics and KYC information
accounts.parquet160,0006.7 MBAccount-level attributes
transactions/~400,000,0008.2 GBIndividual transaction records (5-year window: Jul 2020 - Jun 2025), 396 parts in 4 batches
demographics.parquet~159,0004.6 MBCustomer demographics (name, gender, address, phone)
accounts-additional.parquet~160,0000.9 MBScheme codes per account
transactions_additional/~400,000,0008.4 GBExtended transaction fields, 311 parts in 4 batches
branch.parquet~9,0000.3 MBBranch-level metadata
customer_account_linkage.parquet160,0001.8 MBMaps customers to their accounts
product_details.parquet159,0002.9 MBAggregated product holdings per customer
train_labels.parquet96,0000.6 MBTraining labels — is_mule: 1 = mule, 0 = legitimate
test_accounts.parquet64,0000.4 MBAccount IDs you need to predict on

Total: 720 files, 16.2 GB

Note: transactions/ and transactions_additional/ are split into batch subdirectories (batch-1/, batch-2/, etc.) with up to 100 part files each. To read all parts:

python
import pandas as pd
from glob import glob

# Read all transaction parts
parts = sorted(glob("transactions/batch-*/part_*.parquet"))
df = pd.concat([pd.read_parquet(p) for p in parts], ignore_index=True)

Schema

customers.parquet

ColumnDescription
customer_idUnique customer identifier
date_of_birthDate of birth (YYYY-MM-DD)
relationship_start_dateDate customer relationship began
pan_availablePAN card on file (Y/N)
aadhaar_availableAadhaar on file (Y/N)
passport_availablePassport on file (Y/N)
mobile_banking_flagMobile banking registered (Y/N)
internet_banking_flagInternet banking registered (Y/N)
atm_card_flagATM/debit card issued (Y/N)
demat_flagDemat account linked (Y/N)
credit_card_flagCredit card held (Y/N)
fastag_flagFASTag linked (Y/N)
customer_pinResidential PIN code
permanent_pinPermanent address PIN code

accounts.parquet

ColumnDescription
account_idUnique account identifier
account_statusactive or frozen
product_codeProduct code
currency_codeCurrency (1 = INR)
account_opening_dateDate account was opened
branch_codeBranch identifier
branch_pinBranch location PIN code
avg_balanceAverage balance (can be negative for overdraft)
product_familyS (Savings), K (K-family), O (Overdraft)
nomination_flagNominee registered (Y/N)
cheque_allowedCheque facility available (Y/N)
cheque_availedCheque book opted (Y/N)
num_chequebooksNumber of cheque books issued
last_mobile_update_dateDate of last mobile number change
kyc_compliantKYC compliant (Y/N)
last_kyc_dateDate of last KYC verification
rural_branchRural branch (Y/N)
monthly_avg_balanceMonthly average balance
quarterly_avg_balanceQuarterly average balance
daily_avg_balanceDaily average balance
freeze_dateDate the account was frozen (null if never frozen)
unfreeze_dateDate the account was unfrozen (null if never unfrozen)

Note: customer_id is not in this file. Use customer_account_linkage.parquet to join accounts to customers.

transactions (partitioned)

ColumnDescription
transaction_idUnique transaction identifier
account_idAccount the transaction belongs to
transaction_timestampISO format timestamp
mcc_codeMerchant Category Code
channelTransaction channel (see below)
amountAmount in INR (negative values indicate reversals)
txn_typeD (Debit) or C (Credit)
counterparty_idCounterparty identifier

Transaction channels: UPC (UPI Credit), UPD (UPI Debit), END (E-commerce/POS), IPM (IMPS), STD (Standing instruction debit), P2A (Pay-to-account), FTD (Fund transfer debit), NTD (NEFT debit), MCR (Mobile credit), FTC (Fund transfer credit), MAC (Mobile app), TPD (Third-party debit), APD (Auto-pay debit), CHQ (Cheque), ATW (ATM withdrawal), TPC (Third-party credit), STC (Standing instruction credit), OCD (Over-counter deposit), RCD (Recurring deposit credit), IFD (Internal fund debit), ETD (Electronic transfer debit), NWD (Network debit), CSD (Cash deposit), IFC (Internal fund credit), PCA (Payment card authorization), MAD (Mandate debit), CHD (Clearing house debit), RTD (Return debit), CCL (Credit card linked), OPI (Online payment initiation), CTC (Clearing transfer credit), SID (System-initiated debit), ASD (Auto-sweep debit), IAD (Inter-account debit), SCW (Smart card withdrawal).

customer_account_linkage.parquet

ColumnDescription
customer_idCustomer identifier
account_idAccount identifier

A single customer may hold multiple accounts.

product_details.parquet

ColumnDescription
customer_idCustomer identifier
loan_sumTotal outstanding loan amount (can be negative)
loan_countNumber of active loans
cc_sumTotal credit card outstanding (can be negative)
cc_countNumber of credit cards
od_sumTotal overdraft facility amount (can be negative)
od_countNumber of overdraft accounts
ka_sumTotal balance across K-family accounts
ka_countNumber of K-family accounts
sa_sumTotal balance across savings accounts
sa_countNumber of savings accounts

train_labels.parquet

ColumnDescription
account_idAccount identifier (training set only)
is_mule1 = mule account, 0 = legitimate account
mule_flag_dateDate the account was flagged as a mule (empty for legitimate accounts)
alert_reasonReason the account was flagged (empty for legitimate accounts)
flagged_by_branchBranch code that reported the activity (empty for legitimate accounts)

Note: Labels may contain noise/red-herrings. Not all labels are guaranteed to be correct.

test_accounts.parquet

ColumnDescription
account_idAccount IDs to generate predictions for

demographics.parquet

ColumnDescription
customer_idCustomer identifier
nameFull customer name
genderM or F
address_last_update_dateDate of last address update
addressStreet address and city
phone_numberPhone number
passbook_last_update_dateDate of last passbook update
joint_account_flagJoint account (Y/N)
nri_flagNon-Resident Indian (Y/N)

accounts-additional.parquet

ColumnDescription
account_idAccount identifier
scheme_codeGovernment scheme code (PMJDY, PMSBY, PMJJBY, APY, SCSS, SSA, REGULAR)

transactions_additional (partitioned)

ColumnDescription
transaction_idTransaction identifier (joins to transactions)
mnemonic_codeTransaction type mnemonic (same as channel)
latitudeTransaction location latitude
longitudeTransaction location longitude
ip_addressSource IP address
balance_after_transactionRunning account balance after this transaction
part_transaction_typeCI (Customer Induced), BI (Bank Induced), IP (Interest Paid), IC (Interest Collected)
atm_deposit_channel_codeCDM or CRM for ATM deposits, empty otherwise
transaction_sub_typeCLT_CASH, LOAN, or NORMAL

branch.parquet

ColumnDescription
branch_codeBranch identifier
branch_addressBranch street address
branch_pin_codeBranch location PIN code
branch_cityCity
branch_stateState code
branch_employee_countNumber of employees at the branch
branch_turnoverBranch turnover metric
branch_asset_sizeBranch asset size
branch_typeurban, semi-urban, or rural

Known Mule Behavior Patterns

The following money laundering patterns are known to exist in real-world banking data. Mule accounts in this dataset may exhibit one or more of these behaviors:

  1. 1.Dormant Activation — Long-inactive accounts suddenly showing high-value transaction bursts
  2. 2.Structuring — Repeated transactions just below reporting thresholds (e.g., amounts near 50,000)
  3. 3.Rapid Pass-Through — Large credits quickly followed by matching debits (funds barely rest in the account)
  4. 4.Fan-In / Fan-Out — Many small inflows aggregated into one large outflow, or vice versa
  5. 5.Geographic Anomaly — Transactions from locations inconsistent with the account holder's profile
  6. 6.New Account High Value — Recently opened accounts with unusually high transaction volumes
  7. 7.Income Mismatch — Transaction values disproportionate to account balance or customer profile
  8. 8.Post-Mobile-Change Spike — Sudden transaction surge after a mobile number update (potential account takeover)
  9. 9.Round Amount Patterns — Disproportionate use of exact round amounts (1K, 5K, 10K, 50K)
  10. 10.Layered/Subtle — Weak signals from multiple patterns combined, no single strong indicator
  11. 11.Salary Cycle Exploitation — Laundering disguised within natural salary credit and bill payment cycles at month boundaries
  12. 12.Branch-Level Collusion — Clusters of suspicious accounts at the same branch with shared counterparties and coordinated timing
  13. 13.MCC-Amount Anomaly — Transactions with amounts that are statistical outliers for their merchant category code

Relationships

customers ──(customer_id)──> customer_account_linkage ──(account_id)──> accounts
    |                                                                       |
(customer_id)                                                          (account_id)
    |                                                                       |
    v                                                                       v
demographics                                                          transactions
                                                                            |
                                                                     (transaction_id)
                                                                            |
                                                                            v
                                                                 transactions_additional

customers ──(customer_id)──> product_details
accounts  ──(account_id)──> train_labels / test_accounts
accounts  ──(account_id)──> accounts-additional
accounts  ──(branch_code)──> branch

Submission Format

csv
account_id,is_mule,suspicious_start,suspicious_end
ACCT_000000,0.02,,
ACCT_000003,0.87,2023-11-15T09:30:00,2024-02-20T16:45:00
...

One row per account in test_accounts.parquet:

  • —`is_mule`: Probability score between 0 and 1
  • —`suspicious_start`: ISO timestamp of the beginning of the suspected suspicious activity window (empty if predicted legitimate)
  • —`suspicious_end`: ISO timestamp of the end of the suspected suspicious activity window (empty if predicted legitimate)

The time window should capture when you believe the mule activity occurred. Primary scoring is on is_mule. Time window accuracy is scored separately as a bonus metric using temporal IoU (Intersection over Union) against the ground truth activity period.

Good luck.