Joint Detection of Fraud and Concept Drift inOnline Conversations with LLM-Assisted Judgment
Organizations: School of Computing and Augmented Intelligence, Arizona State University, Tempe, 85281, AZ, USA. · Department of Computer Engineering, Tarsus University, Takbaş M. Kartaltepe S., Tarsus, 33400, Mersin, Türkiye. · HumaConn AI Consulting, Arizona, USA.
Abstract
Detecting fake interactions in digital communication platforms remains a challenging and insufficiently addressed problem. These interactions may appear as harmless spam or escalate into sophisticated scam attempts, making it difficult to flag malicious intent early. Traditional detection methods often rely on static anomaly detection techniques that fail to adapt to dynamic conversational shifts. One key limitation is the misinterpretation of benign topic transitions referred to as concept drift as fraudulent behavior, leading to either false alarms or missed threats. We propose a two stage detection framework that first identifies suspicious conversations using a tailored ensemble classification model. To improve the reliability of detection, we incorporate a concept drift analysis step using a One Class Drift Detector (OCDD) to isolate conversational shifts within flagged dialogues. When drift is detected, a large language model (LLM) assesses whether the shift indicates fraudulent manipulation or a legitimate topic change. In cases where no drift is found, the behavior is inferred to be spam like. We validate our framework using a dataset of social engineering chat scenarios and demonstrate its practical advantages in improving both accuracy and interpretability for real time fraud detection. To contextualize the trade offs, we compare our modular approach against a Dual LLM baseline that performs detection and judgment using different language models.
Figures & tables
| Set | Dialogues | Malicious / benign | Messages per dialogue | Words per message | Fraudulent drift | Genuine drift | No drift |
|---|---|---|---|---|---|---|---|
| Training | 40 | 24 / 16 | 11 (8–16) | 48 | 24 | 9 | 7 |
| Test | 360 | 191 / 169 | 11 (3–20) | 47 | 188 | 95 | 77 |
| Held-out | 1000 | 500 / 500 | 11 (7–23) | 47 | – | – | – |
| Model | Endpoint | Open weights | $ per 1M tokens (in / out) | Role |
|---|---|---|---|---|
| GPT-6 Sol | openai/gpt6_sol | no | 2.00 / 10.00 | P1, J |
| Claude 5 Sonnet | aws/claude5_sonnet | no | 3.30 / 16.50 | P1, J |
| Gemini 3.1 Pro | gcp-deepmind/geminipro3_1 | no | 2.00 / 12.00 | P1, J |
| Llama 4 Maverick | aws/llama4_maverick-17b | yes | 0.24 / 0.97 | P1, J, J ext |
| gpt-oss-120b | aws/gpt-oss-120b | yes | 0.15 / 0.60 | P1, J, J ext |
| Gemma 4 31B (ASU) | asu-air/gemma4_31b_it | yes | 0.14 / 0.40 | P1, J, J ext |
| Model | Acc. | Macro-F1 [95% CI] | Few-shot macro-F1 | $ per 1k conv. | |
|---|---|---|---|---|---|
| Claude 5 Sonnet | 0.833 | 0.828 [0.788, 0.864] | 0.820 | 1.000 | 6.49 |
| Gemma 4 31B (ASU) | 0.822 | 0.820 [0.780, 0.857] | 0.852 | 1.000 | 0.18 |
| GPT-6 Sol | 0.819 | 0.814 [0.773, 0.853] | 0.828 | 1.000 | 2.70 |
| GPT-6 Luna | 0.819 | 0.812 [0.771, 0.850] | 0.821 | 1.000 | 0.16 |
| Gemini 3.1 Pro | 0.808 | 0.802 [0.761, 0.842] | 0.842 | 1.000 | 6.62 |
| Llama 4 Maverick | 0.808 | 0.802 [0.759, 0.841] | 0.803 | 1.000 | 0.30 |
| System | Macro-F1 (mean SD) | vs Joint | |
|---|---|---|---|
| Joint ensemble (trans.) | 0.857 0.038 | – | – |
| SVM (trans.) | 0.857 0.036 | +0.000 | 1.000 |
| Random Forest (trans.) | 0.855 0.044 | -0.002 | 1.000 |
| kNN (trans.) | 0.842 0.035 | -0.015 | 1.000 |
| Joint ensemble (ind.) | 0.818 0.044 | -0.039 | 0.979 |
| Claude 5 Sonnet | 0.820 0.042 | -0.036 | 1.000 |
| Model | Inductive acc. | Inductive macro-F1 | Transductive acc. | Transductive macro-F1 |
|---|---|---|---|---|
| kNN | 0.614 | 0.520 | 0.789 | 0.787 |
| SVM | 0.586 | 0.466 | 0.822 | 0.820 |
| Random Forest | 0.722 | 0.718 | 0.803 | 0.802 |
| Naive Bayes | 0.756 | 0.742 | 0.706 | 0.670 |
| XGBoost | 0.689 | 0.686 | 0.739 | 0.738 |
| k-means | 0.456 | 0.313 | 0.500 | 0.487 |
| System | Prec. | Rec. | Macro-F1 [95% CI] | |
|---|---|---|---|---|
| Joint ensemble (TF-IDF trans.) | 0.838 | 0.964 | 0.888 [0.868, 0.908] | – |
| SVM (TF-IDF trans.) | 0.834 | 0.946 | 0.878 [0.858, 0.899] | 0.364 |
| SVM (TF-IDF ind.) | 0.744 | 0.990 | 0.820 [0.795, 0.844] | 0.001 |
| SVM (te3-large) | 0.816 | 0.906 | 0.851 [0.828, 0.873] | 0.010 |
| Gemma 4 31B (ASU) | 0.695 | 0.930 | 0.754 [0.727, 0.780] | 0.001 |
| Llama 4 Scout (ASU) | 0.706 | 0.840 | 0.743 [0.717, 0.769] | 0.001 |
| Detector | Official balanced | CV detected | CV localized | CV false drift | CV balanced [95% CI] |
|---|---|---|---|---|---|
| OCDD, normal-message ref. | 0.486 | 93% | 78% | 35% | 0.715 [0.656, 0.770] |
| OCDD, dialogue window | 0.450 | 100% | 87% | 99% | 0.443 [0.420, 0.466] |
| Fixed rule (message 4) | 0.448 | 100% | 87% | 99% | 0.441 [0.418, 0.464] |
| Reference | TF-IDF+SVD | te3-large embeddings |
|---|---|---|
| Within-dialogue window | 0.443 [0.420, 0.466] (87% / 99%) | 0.439 [0.417, 0.462] (87% / 99%) |
| Normal-message reference | 0.581 [0.522, 0.635] (52% / 36%) | 0.715 [0.656, 0.770] (78% / 35%) |
| Judge LLM | Fraud. drift | Genuine drift | Joint | No OCDD | Dual- LLM | vs Dual [95% CI] | $/1k Joint | $/1k Dual |
|---|---|---|---|---|---|---|---|---|
| Gemma 4 31B (ASU) | 99% | 0% | 0.872 | 0.874 | 0.810 | +0.062 [+0.020, +0.104] | 0.13 | 0.31 |
| GPT-6 Sol | 97% | 0% | 0.862 | 0.865 | 0.794 | +0.068 [+0.029, +0.106] | 1.32 | 4.21 |
| Llama 4 Maverick | 92% | 20% | 0.852 | 0.860 | 0.791 | +0.062 [+0.025, +0.100] | 0.52 | 0.92 |
| GPT-6 Luna | 91% | 10% | 0.842 | 0.845 | 0.780 | +0.062 [+0.022, +0.103] | 0.069 | 0.24 |
| Llama 4 Scout (ASU) | 93% | 5% | 0.842 | 0.842 | 0.749 | +0.093 [+0.052, +0.136] | 0.099 | 0.19 |
| gpt-oss-120b | 88% | 30% | 0.837 | 0.845 | 0.742 | +0.095 [+0.052, +0.138] | 0.14 | 0.41 |
| LLM | LLM acc. | FN rec. | FP rec. | Judge FP out | Judge TP out | Oracle acc. | Held-out FN rec. |
|---|---|---|---|---|---|---|---|
| Claude 5 Sonnet | 0.828 | 78% | 33% | 59% | 39% | 0.943 | – |
| DeepSeek V4 Pro | 0.797 | 74% | 19% | – | – | 0.930 | – |
| GPT-6 Luna | 0.815 | 78% | 22% | 26% | 10% | 0.935 | 83% |
| GPT-6 Sol | 0.815 | 65% | 26% | 15% | 5% | 0.930 | – |
| Gemini 3.1 Pro | 0.807 | 74% | 30% | 26% | 12% | 0.938 | – |
| Gemma 4 31B (ASU) | 0.818 | 61% | 52% | 11% | 2% | 0.945 | 72% |
| Judge LLM | Whole dialogue | + OCDD location | + fixed location | Prefix to OCDD alarm | Prefix to message 4 |
|---|---|---|---|---|---|
| Gemma 4 31B (ASU) | 0.872 | 0.872 | 0.877 | 0.870 | 0.872 |
| Llama 4 Maverick | 0.852 | 0.850 | 0.865 | 0.825 | 0.822 |
| GPT-6 Luna | 0.842 | 0.825 | 0.825 | 0.852 | 0.862 |
| gpt-oss-120b | 0.837 | 0.845 | 0.860 | 0.805 | 0.802 |
| Llama 4 Scout (ASU) | 0.842 | 0.870 | 0.869 | 0.774 | 0.767 |
Appendix figures & tables4 assets
Supplementary material from the paper’s appendix.
Appendix
| Term | Meaning |
|---|---|
| Abbreviations | |
| CI | Confidence interval (95%, bootstrap) |
| CV | Cross-validation |
| DBSCAN | Density-based spatial clustering of applications with noise |
| GMM | Gaussian mixture model |
| kNN | -nearest neighbours |
| Component | Setting |
|---|---|
| Text representation | TF-IDF on word 1–2-grams, sublinear tf, English stop words, min. document frequency 2, at most 20,000 terms; truncated SVD to 10 components and normalization. Fitted inductively (training texts) and transductively (all texts, no labels). |
| OCDD message spaces | TF-IDF + truncated SVD ( ) and PCA-reduced te3-large embeddings ( ) of individual messages, fitted without labels. |
| OCDD search grid | design {normal-message reference, shift from the opening message}; outlier threshold at the -quantile of held-out normal-message scores, ; ; one-class SVM , RBF kernel, = scale, standardized inputs; nested 5-fold cross-fitting within the training dialogues. |
| OCDD selected | normal-message reference (initiator messages before the first PII request in the training dialogues); embeddings, ; ; ; , (selected on all 400 annotated dialogues; identical design in all CV folds); monitored: initiator messages after the opening one; localization tolerance 2 messages. |
| LLM decoding | temperature 0.0 where accepted (GPT-6 models reject the parameter); maximum output tokens 600 (Claude, Llama, Gemma), 1,000 (Nova), 3,000 (GPT-6, Gemini, gpt-oss), 4,000 (DeepSeek); outputs cut by the limit are re-requested once with a 4 budget (cap 32,000). |
| LLM classification | JSON output (label, confidence, evidence turns, rationale); unparseable outputs counted as benign; few-shot: 4 class-balanced training examples; 1 run per input. |
| Model | Fixed settings | Inner-CV search grid | Selected (official split) |
|---|---|---|---|
| kNN | standardized; Euclidean | n_neighbors {3, 5, 7, 9}; weights {uniform, distance} | n_neighbors=3, weights=distance |
| SVM | standardized; class-balanced; probability outputs | kernel {rbf, linear}; C {0.1, 1.0, 10.0} | C=1.0, kernel=rbf |
| Random Forest | 300 trees; class-balanced | max_depth {None, 6}; max_features {sqrt, 0.3} | max_depth=None, max_features=sqrt |
| Naive Bayes | Complement NB on TF-IDF counts | alpha {0.1, 0.5, 1.0} | alpha=0.1 |
| XGBoost | 300 trees; learning rate 0.05; subsample 0.9 | max_depth {2, 4}; colsample_bytree {0.5, 1.0} | colsample_bytree=0.5, max_depth=2 |
| k-means | 10 initializations | n_clusters {2} | n_clusters=2 |
| Judge LLM | Joint [95% CI] | No OCDD | Dual-LLM | |
|---|---|---|---|---|
| GPT-6 Sol | 0.830 [0.789, 0.868] | 0.841 | 0.814 | 1.000 |
| Llama 4 Maverick | 0.822 [0.781, 0.861] | 0.833 | 0.807 | 1.000 |
| Gemma 4 31B (ASU) | 0.816 [0.773, 0.855] | 0.827 | 0.821 | 1.000 |
| GPT-6 Luna | 0.800 [0.756, 0.844] | 0.811 | 0.795 | 1.000 |
| gpt-oss-120b | 0.800 [0.758, 0.839] | 0.811 | 0.752 | 0.480 |
| Gemini 3.1 Pro | 0.792 [0.749, 0.833] | 0.803 | 0.771 | 1.000 |
Online Anomaly Detection
Online anomaly detection identifies unusual events in data streams as they arrive, adapting to changing conditions while balancing detection speed, accuracy, and false alarms.
See all 60 papers