Sumeetgpt/indian-transaction-categorization-synthetic
Synthetic Indian Bank Transaction Narrations 810 synthetic (text, category) pairs mimicking Indian bank/credit-card statement narrations — built to train the Sumeetgpt/indian-transaction-categorizer SetFit model. Why this exists While building a personal finance app, we searched for a public dataset pairing real Indian transaction narration formats (UPI, NEFT, IMPS, ACH) with spending-category labels, and found none: datasets with real-looking Indian narration… See the full description on the dataset page: https://huggingface.co/datasets/Sumeetgpt/indian-transaction-categorization-synthetic.
Synthetic Indian Bank Transaction Narrations
810 synthetic (text, category) pairs mimicking Indian bank/credit-card statement narrations — built to train the Sumeetgpt/indian-transaction-categorizer SetFit model.
Why this exists
While building a personal finance app, we searched for a public dataset pairing real Indian transaction narration formats (UPI, NEFT, IMPS, ACH) with spending-category labels, and found none: datasets with real-looking Indian narration text have no category labels (built for OCR/document-AI), and datasets with category labels use generic Western merchant names with an "India" tag that doesn't reflect the actual narration shape. This dataset fills that specific gap.
How it was built
Entirely synthetically generated — see synthetic_indian_generator.py in this repo:
- Real public brand names (Swiggy, Zomato, BigBasket, PharmEasy, Netflix, Zerodha, IRCTC, etc.) — facts about which businesses exist, not personal data.
- Randomly generated reference numbers, UPI VPAs, and person names (from a generic name pool) — nothing corresponds to any real person or transaction.
- Narration shapes mirror patterns reverse-engineered while building statement parsers for ICICI, HDFC, Axis, and Scapia — not copied from any real statement content.
- ~65% bank-narration-code style (e.g.
UPI/Swiggy Instamart/swiggy@ybl/Payment/HDFC), ~35% plain-language style (e.g."paid electricity bill BESCOM online"), so a model trained on it handles both input styles.
No real transaction data of any kind is included.
Schema
CSV with two columns:
text— the synthetic narration/descriptioncategory— one of 18 categories (Groceries, Eating Out, Kids Activities, Shopping & Clothing, Medicine & Pharmacy, Hospital & Medical, Utilities, Rent & Mortgage, Transportation & Gas, Entertainment & Subscriptions, Travel, Insurance, Education, Personal Care, Investments & Savings Transfer, ATM & Cash, Fees & Interest, Income & Deposits)
Regenerating / extending
from synthetic_indian_generator import generate_dataset, write_csv
# more examples per category, and/or a different style mix
rows = generate_dataset(examples_per_category=100, natural_fraction=0.4, seed=1)Add merchants to MERCHANTS_BY_CATEGORY or phrasings to NATURAL_PHRASES_BY_CATEGORY to extend coverage.
License
MIT.
