Nachammai41/underserved-persona_conditioned-fraud-v4-cot
Persona-Conditioned Fraud Detection — CoT Reasoning Companion (v4) A 3,926-row chain-of-thought dataset for SFT and LLM-as-judge work. Each row pairs a v4 fraud-narrative transaction with a step-by-step reasoning trace explaining how an analyst would evaluate it. This is the companion repo to Nachammai41/underserved-persona_conditioned-fraud-v4 (20,300-row narrative dataset + persona/source/typology references). The two are split by size: keep the main repo lean, the CoT traces… See the full description on the dataset page: https://huggingface.co/datasets/Nachammai41/underserved-persona_conditioned-fraud-v4-cot.
Persona-Conditioned Fraud Detection — CoT Reasoning Companion (v4)
A 3,926-row chain-of-thought dataset for SFT and LLM-as-judge work. Each row pairs a v4 fraud-narrative transaction with a step-by-step reasoning trace explaining how an analyst would evaluate it.
This is the companion repo to `Nachammai41/underserved-persona_conditioned-fraud-v4` (20,300-row narrative dataset + persona/source/typology references). The two are split by size: keep the main repo lean, the CoT traces here.
Headline
Quick start
from datasets import load_dataset
cot = load_dataset(
"Nachammai41/underserved-persona_conditioned-fraud-v4-cot",
split="train",
)
print(cot[0]["cot_reasoning_trace"]) # step-by-step reasoning
print(cot[0]["cot_completion"]) # final verdict + supporting analysis
print(cot[0]["narrative_text"]) # the v4 narrative under review
print(cot[0]["is_fraud"]) # ground-truth labelTo enrich a row with full v4 context (persona profile, source citations, typology definitions), load the parent dataset and join on data_uuid:
parent = load_dataset(
"Nachammai41/underserved-persona_conditioned-fraud-v4",
name="all", split="train",
).to_pandas().set_index("data_uuid")
cot_df = cot.to_pandas()
enriched = cot_df.merge(parent, left_on="data_uuid", right_index=True,
how="left", suffixes=("", "_parent"))Schema
Reasoning traces average ~6 KB per row.
How the pairs were selected
For each of the 1,963 fraud rows in the parent v4 dataset:
- Find non-fraud candidates in the same
archetypeand sameinstrument, within the same log-spacedamount_band. - If no strict triple match, relax to (archetype, amount_band).
- Pick one without replacement; record the pairing.
887 of 1,963 fraud rows fell back to the relaxed (archetype, amount_band) match — still 2 of 3 dimensions matched. The result is a roughly balanced "hard negatives" set: each fraud row sits next to a non-fraud row that looks similar on the structured features.
Suggested uses
- SFT for fraud-analyst LLMs — train a model to emit reasoning traces given (transaction metadata + narrative) → verdict.
- LLM-as-judge fine-tuning — distill the reasoning style into a smaller model used in evaluation pipelines.
- CoT data augmentation — combine with the parent's 20,300-row bundle for mixed reasoning + narrative-only training.
- Hard-negatives evaluation set — the 1:1 matched pairs make a clean test bed for measuring how well a fraud detector handles look-alike legitimate transactions.
Citation
@dataset{palaniappan2026underserved,
author = {Palaniappan, Nachammai},
title = {Underserved Financial Fraud Dataset},
year = {2026},
publisher = {HuggingFace},
note = {Created with Adaptive Data by Adaption.
Uncharted Data Challenge, Adaption Labs.},
url = {https://huggingface.co/datasets/nachammai779/underserved-financial-fraud}
}License
CC-BY-4.0. Same provenance and disclaimers as the parent dataset: synthetic transactions about fictional personas, narratives and reasoning traces are LLM-generated, no real persons or real fraud cases involved.
Credits
- Adaption Labs —
reasoning_tracesrecipe (the source of these traces) - Parent dataset (citation-grounded personas + typology + sources): `Nachammai41/underserved-persona_conditioned-fraud-v4`
- Underlying source registry, FinCEN typology, and persona grounding documented in the parent repo's README.
