> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# DeepSeek-R1+ML混合欺诈检测
- URL: https://www.hubwiz.com/blog/hybrid-fraud-detection-with-deepseek-r1-and-ml/
- Published: 2025-02-16T07:57:08.000Z
- Updated: 2025-02-27T10:45:03.000Z
- Description: 本文介绍如何将传统ML与DeepSeek-R1推理引擎结合以提高欺诈检测效率。
- Author: admin
- Tags: APPLICATION, FRAUD DETECTION, DEEPSEEKR1, MACHINE LEARNING, KAGGLE, SKLEARN, PANDAS, #Import 2026-10-14 14:41

在数字交易占主导地位的时代，欺诈已成为一种复杂且无处不在的威胁。到2026年，[全球欺诈损失预计将达到**430亿美元**](https://merchantcostconsulting.com/lower-credit-card-processing-fees/credit-card-fraud-statistics/?ref=hubwiz.com#:~:text=Every%20%241%20lost%20in%20online,fraud%20charged%20to%20their%20company.)，仅在美国，每14秒就发生一起身份盗窃案。随着犯罪分子利用人工智能（AI）发起前所未有的攻击，企业面临一个紧迫的问题：*他们如何才能在这场高风险竞赛中保持领先？*

今天，我们将探讨当配备传统的机器学习模型和推理大型语言模型引擎时，**AI代理**如何使欺诈检测更加可解释和稳健。

> 欺诈挑战的日益增长

请考虑这些惊人的统计数据：

- [**1.34亿美国人**将在其一生中经历信用卡欺诈](https://www.security.org/digital-safety/credit-card-fraud-report/?ref=hubwiz.com)。
- [**网络钓鱼攻击**持续上升至2024年。2024年第三季度看到932,923次攻击，比第二季度的约877,536次有所增加](https://controld.com/blog/phishing-statistics-industry-trends/?ref=hubwiz.com)。
- **深度伪造诈骗**[已经从企业中榨取了数百万美元](https://www.businesswire.com/news/home/20241031656724/en/Deepfake-Fraud-Costs-the-Financial-Sector-an-Average-of-600000-for-Each-Company-Regula%E2%80%99s-Survey-Reveals?ref=hubwiz.com)，使用合成声音模仿CEO授权欺诈性转账。

这是一场军备竞赛：欺诈者正在利用AI驱动的卡测试扩大业务规模，逃避检测，并利用零日漏洞，而防御者（好人）需要同样或更好的自适应工具来保持领先一步。

问题在于，欺诈者正在以比机构更快的速度进行调整，而遗留系统正努力跟上步伐。这些系统的主限制是：

- **基于规则的引擎**：僵化的“如果-则”逻辑无法应对新颖的攻击模式。
- **机器学习**：虽然ML模型擅长检测已知的欺诈模式，但它们是“黑盒”，无法解释决策。更糟糕的是，它们在**数据漂移**——交易行为的变化使得历史数据过时时表现不佳。

## 1、自主AI的兴起

AI代理是能够**推理**、**学习**和**行动**的自主系统，使用API和数据库等工具。与静态ML模型不同，它们可以：

- **分析上下文**：交叉引用交易与用户历史记录、位置和市场趋势。
- **自我改进**：使用强化学习（RL）来适应新威胁。
- **解释决策**：生成易于理解的报告（例如，“凌晨2点在用户家34英里外的城市花费316美元购买杂货是可疑的”）。
- **行为分析**：检测微妙的红旗（例如，仓促的结账流程，账单地址与发货地址不匹配）。

对于本文，我们将为代理配备一个传统的ML模型以及一个推理引擎，以便更好地解释交易。

![](https://www.hubwiz.com/blog/content/images/2025/02/image-656.png)

什么是AI代理

## 2、训练机器学习模型

为了训练我们的ML模型，我们将使用Kaggle上公开的[信用卡交易数据](https://www.kaggle.com/datasets/kartik2112/fraud-detection?ref=hubwiz.com)。该数据集包含超过一百万笔欺诈和非欺诈信用卡交易。

接下来，我们将简要解释训练ML模型的步骤：

- 第一步是删除任何不必要的特征，如名字、姓氏、出生日期等。
- 接下来，我们标记并编码文本特征，如商户名称、类别和街道。
- 最后，我们缩放特征，定义预测标签（is\_fraud=0或1），将数据拆分为训练集和测试集，并训练机器学习模型孤立森林。

确保在最后保存模型，以便稍后由我们的代理作为工具使用。

```
# 导入必要的库  
import pandas as pd  
from sklearn.model_selection import train_test_split  
from sklearn.preprocessing import StandardScaler  
from sklearn.preprocessing import LabelEncoder  
import joblib  
from sklearn.metrics import classification_report  
  
# 保存训练好的模型到文件  
  
# 加载数据集  
data = pd.read_csv('Fraud/fraudTrain.csv')  
data.head()  
data.drop_duplicates()  
# 删除任何无用的列（例如，交易ID）  
data = data.drop(columns=["Unnamed: 0", "first", "last", "state", "city_pop", "job", "dob"])  
# 对分类变量进行编码  
# 标签编码二进制分类特征（例如，性别）  
  
encoder = LabelEncoder()  
data["merchant"] = encoder.fit_transform(data["merchant"])  
data["category"] = encoder.fit_transform(data["category"])  
data["street"] = encoder.fit_transform(data["street"])  
data["trans_num"] = encoder.fit_transform(data["trans_num"])  
data["city"] = encoder.fit_transform(data["city"])  
data["gender"] = encoder.fit_transform(data["gender"])  
data["trans_date_trans_time"] = encoder.fit_transform(data["trans_date_trans_time"])  
  
  
# 保存编码器（这将在预测期间允许加载它）  
joblib.dump(encoder, 'label_encoder.pkl')  
  
# 将特征（X）和目标变量（y）分开  
X = data.drop(columns=['is_fraud'])  
y = data['is_fraud']  
  
# 将数据拆分为训练集和测试集（70%训练，30%测试）  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)  
  
# 缩放数值特征  
scaler = StandardScaler()  
X_train_scaled = scaler.fit_transform(X_train)  
joblib.dump(scaler, 'scaler.pkl')  
  
X_test_scaled = scaler.transform(X_test)  
  
from sklearn.ensemble import IsolationForest  
  
# 训练孤立森林模型（假设1%的欺诈案例，因此设置污染率）  
model = IsolationForest(contamination=0.03, random_state=42)  
model.fit(X_train_scaled)  
# 在测试集上进行预测  
# 孤立森林返回-1表示异常（欺诈），1表示正常交易  
y_pred = model.predict(X_test_scaled)  
  
# 转换预测（-1表示欺诈 -> 1，1表示非欺诈 -> 0）  
y_pred = [1 if x == -1 else 0 for x in y_pred]  
print(classification_report(y_test, y_pred))  
  
joblib.dump(model, 'fraud_model.pkl')

```

让我们测试一下模型在一个样本交易上的效果：

```
# 导入必要的库  
import pandas as pd  
from sklearn.model_selection import train_test_split  
from sklearn.preprocessing import StandardScaler  
from sklearn.preprocessing import LabelEncoder  
import joblib  
import json  
from sklearn.metrics import classification_report  
  
  
# 从文件加载保存的模型  
model = joblib.load('fraud_model.pkl')  
# 加载数据集  
  
transaction = '''{  
        "trans_date_trans_time": "2019-12-09 03:23:21",  
        "cc_num": 2266735643685262,  
        "merchant": "Koepp-Parker",  
        "category": "grocery_pos",  
        "amt": 316.82,  
        "first": "Carlos",  
        "last": "Chung",  
        "gender": "M",  
        "street": "8957 Russell Key",  
        "city": "Grant",  
        "state": "AL",  
        "zip": 35747,  
        "lat": 34.4959,  
        "long": -86.259,  
        "city_pop": 5901,  
        "job": "Curator",  
        "dob": "1972-07-25",  
        "trans_num": "1e787b206a1a9154a5f397dfaa6f6b40",  
        "unix_time": 1355023401,  
        "merch_lat": 35.177042,  
        "merch_long": -86.942305  
    }  
    '''  
  
# 将JSON字符串转换为字典  
transaction_data = json.loads(transaction)  
  
transaction_data = {key: value for key, value in transaction_data.items() if key not in ["first", "last", "state", "city_pop", "job", "dob","is_fraud"]}  
  
df = pd.DataFrame([transaction_data])  
  
# 应用与训练期间相同的预处理：  
encoder = joblib.load('label_encoder.pkl')  
#encoder = LabelEncoder()  
# 对分类变量进行编码  
df["merchant"] = encoder.fit_transform(df["merchant"])  
df["category"] = encoder.fit_transform(df["category"])  
df["street"] = encoder.fit_transform(df["street"])  
df["trans_num"] = encoder.fit_transform(df["trans_num"])  
df["city"] = encoder.fit_transform(df["city"])  
df["gender"] = encoder.fit_transform(df["gender"])  
df["trans_date_trans_time"] = encoder.fit_transform(df["trans_date_trans_time"])  
  
  
scaler = joblib.load('scaler.pkl')  
# 缩放数值特征（使用与训练期间相同的缩放器）  
df_scaled = scaler.transform(df)  
  
# 使用训练好的模型预测交易是否欺诈  
y_pred = model.predict(df_scaled)  
#print(y_pred)  
# 转换预测（-1表示欺诈 -> 1，1表示非欺诈 -> 0）  
is_fraud = 1 if y_pred[0] == -1 else 0  
  
print(f"欺诈交易: {is_fraud}")

```

**欺诈交易: 0**

## 3、设置用于分析交易的LLM

接下来我们要为代理配备一个推理LLM，该LLM将根据交易细节和以前的购买历史分析交易并确定其是否欺诈。

我们将使用[Deepseek模型](https://www.deepseek.com/?ref=hubwiz.com)作为LLM，因为它具有较长的思维链和先进的推理能力（有关更多信息，请参阅此基准测试：[检查此基准测试](https://arxiv.org/html/2501.12948v1?ref=hubwiz.com)）：

![](https://www.hubwiz.com/blog/content/images/2025/02/image-657.png)

基准测试Deepseek

为了本教程，我们将使用UbiAI平台上的DeepSeek-R1-Distill-Llama-70B API。使用UbiAI，我们可以记录和评估每个查询的LLM响应，这对于稍后使用强化学习改进模型至关重要。

![](https://www.hubwiz.com/blog/content/images/2025/02/image-658.png)

UbiAI API用于使用Deepseek

确保设置monitor\_model: True以便能够跟踪每个查询的模型响应。

让我们在UbiAI游乐场中测试一下模型：

![](https://www.hubwiz.com/blog/content/images/2025/02/image-659.png)

看起来工作正常，以下是Deepseek模型的完整响应：

```
<think>  
好吧，我需要分析这笔信用卡交易以确定其是否欺诈。让我一步一步地分析。  
  
首先，交易日期和时间是2019年12月8日，00:26:16。这是很晚的时间，几乎是午夜。我想知道持卡人通常是否会在这样的时间购物。如果Carlos Chung通常在白天购物，这可能是一个红旗。  
  
信用卡号是2266735643685262。我不知道这张卡是否被报告为被盗或与任何先前的欺诈相关联，但这值得检查。也许看看最近是否有任何未经授权的交易在这张卡上。  
  
商户是"Bogisich Inc"，类别是"grocery_pos"，我假设这意味着一家杂货店的销售点。283.51美元的杂货店购买并不太不寻常，但取决于Carlos的通常消费习惯。如果他通常在杂货店花费大约这个金额，这可能是正常的，但如果他通常花费较少，这可能是可疑的。  
  
查看位置详情，交易地点在Grant, AL，邮政编码为35747。纬度和经度是34.4959, -86.259。商户的位置是35.189602, -86.344231。我应该检查这些位置是否合理。如果Carlos在或接近Grant, AL附近的时间进行交易，这可能是合法的。但如果他在其他地方，特别是在远离的地方，那就有问题了。  
  
持卡人的个人信息：Carlos Chung，男性，生于1972年7月25日。他的工作是策展人，这可能意味着他有稳定的收入，但这不一定意味着不是欺诈。他的地址是8957 Russell Key，Grant, AL。我应该验证这是否与存档的账单地址相符。  
  
交易编号是"1dac0908859f67f9d27638bc11df5119"，Unix时间是1354926376。我可以将其Unix时间转换为日期以进行交叉验证。让我快速做一下。Unix时间1354926376对应于2012年12月8日。等等，这很奇怪，因为交易日期是2019-12-08。这里有一个不一致。Unix时间来自2012年，但交易日期是2019年。这没有意义。可能是数据输入错误，但值得注意。  
  
城市人口是5901，这是一个相当小的数字。如果Carlos住在小镇上并且在当地购物，交易可能是正常的。但如果他来自一个更大的城市，这可能会显得异常。  
  
综合来看，主要的红旗是交易时间较晚和Unix时间不匹配。金额不是太高，但时间和位置需要检查。如果Carlos不在Grant, AL，或者如果Unix时间正确但与交易日期不符，这可能表明欺诈。我也应该检查卡片的历史，看看是否有任何其他可疑活动。  
  
我认为我会给这次交易一个欺诈分数为3。有一些可疑点，但在没有更多背景信息的情况下，这不是一个明确的欺诈。值得进一步调查，特别是时间和地点的不一致性。  
</think>  
  
**欺诈分析和建议**  
  
**交易概述：**  
- **日期和时间：** 2019年12月8日，00:26:16（深夜）  
- **商户：** Bogisich Inc（杂货店）  
- **金额：** 283.51美元  
- **位置：** Grant, AL（邮政编码35747）  
- **持卡人：** Carlos Chung  
  
**识别出的红旗：**  
1. **交易时间较晚：** 购买发生在午夜附近，如果持卡人通常在白天购物，这可能是红旗。  
2. **Unix时间不匹配：** Unix时间对应于2012年12月8日，而不是2019年，表明可能存在错误或操纵。  
  
**调查建议：**  
- 验证持卡人在交易日期的位置。  
- 检查卡片历史记录中是否有类似的深夜交易。  
- 调查Unix时间不匹配的原因。  
- 将交易地点与持卡人的已知行踪进行交叉核对。  
  
**欺诈评分：** 3/5  
- 交易有一些可疑元素，特别是时间和日期不一致，需要进一步调查。然而，在没有更多背景信息的情况下，这并不明确是欺诈。  
  
**结论：**  
尽管交易引起了一些担忧，特别是关于时间和日期的一致性问题，但需要进一步调查以确定其是否欺诈。

```

交易分析详细地识别了交易时间较晚、比较商户位置和持卡人位置以及金额。然而，我们需要提供其历史交易以提高分析质量。

## 4、设置欺诈检测AI代理

有几个平台可以让您构建AI代理，例如crewai、[relevance.ai](http://relevance.ai/?ref=hubwiz.com)、n8n、langflow等。但对于本教程，我们将使用[Kudra AI](https://kudra.ai/?ref=hubwiz.com)创建代理，因为它能够处理多种文档类型（PDF、TXT、HTML等）并允许用户上传创建文档数据库，供代理使用：

![](https://www.hubwiz.com/blog/content/images/2025/02/image-660.png)

在Kudra上传的交易

第一步是上传历史交易，代理可以使用这些交易进行分析。在Kudra中，我们可以通过上传txt文件到代理项目中来实现这一点，如图所示。

接下来，我们需要创建两个工具：

- **Fraud\_detector\_ML:** 传统ML模型API，用于预测交易是否欺诈
- **Transaction\_explanator:** LLM推理引擎API，用于根据当前交易和购买历史判断交易是否欺诈。

在Kudra中，我们将这两个API连接为工具到代理。我们可以添加其他工具来帮助代理进一步调查，例如Google地图API来定位商户位置，网站抓取器来获取有关商户的信息等。但为了本教程的目的，我们只给它两个工具。

## 5、可解释性的力量

为了测试代理，我们将测试这个特定交易及其10个最近的购买记录：

*{ “trans\_date\_trans\_time”: “2019–12–09 03:23:21”, “cc\_num”: 2266735643685262, “merchant”: “Koepp-Parker”, “category”: “grocery\_pos”, “amt”: 316.82, “first”: “Carlos”, “last”: “Chung”, “gender”: “M”, “street”: “8957 Russell Key”, “city”: “Grant”, “state”: “AL”, “zip”: 35747, “lat”: 34.4959, “long”: -86.259, “city\_pop”: 5901, “job”: “Curator”, “dob”: “1972–07–25”, “trans\_num”: “1e787b206a1a9154a5f397dfaa6f6b40”, “unix\_time”: 1355023401, “merch\_lat”: 35.177042, “merch\_long”: -86.942305}*

以下是AI代理输出的截图：

![](https://www.hubwiz.com/blog/content/images/2025/02/image-661.png)

我们可以看到代理首先调用了第一个工具 *Fraud\_detector\_ML* 然后是第二个工具 *Transaction\_explanator.*

以下是预测ML模型的输出：{‘is\_fraud’: 0}。这意味着交易不是欺诈。

然而，如果你查看LLM推理器的输出，我们会看到不同的故事：

> ***欺诈分析报告*** 
>  
> ***交易详情：*** 
>  
> ***日期与时间：*** *2019年12月9日，3:23:21* 
>  
> **商户：** *Koepp-Parker* 
>  
> **类别：** *杂货* 
>  
> **金额：** *$316.82* 
>  
> **位置：** *35.177042, -86.942305（距离家约34英里）* 
>  
> **分析：** \*1.\* ***交易时间：*** \*交易发生在清晨，可能不寻常，但没有额外的背景信息，不能作为欺诈的确凿证据。 2.\* ***金额：*** \*金额显著高于普通交易，大多数低于100美元。  
> 前一次大额购买为311.70美元，属于娱乐类别，使这次杂货购买显得特别。 3.\* ***商户类别：*** \*类别不同于前一次大额交易，引发了关于购买性质的疑问。 4.\* **位置：** *商户位于持卡人家34英里之外，这是一个显著的距离，与过去交易地点不符。* 
>  
> **结论：** *高金额、不同的商户类别和远距离位置的组合表明可能存在欺诈活动。* 
> *虽然可能有正当理由，但这些异常情况值得进一步调查。* 
>  
> **建议：** *标记为潜在欺诈。*

LLM的报告包括：

- 时间分析（“交易发生在清晨，可能不寻常”）。
- 地理位置差异（分析商户和持卡人之间的距离约为34英里）。
- 金额（高于普通交易的金额）。

分析非常详尽，将当前交易细节与已知交易进行比较，并找出差异。

最终建议标记交易为欺诈，这与传统的黑盒ML模型的结果**相矛盾**。

此时，我们有两个相互矛盾的信息，可以借助更多的工具或引入人工审核来解决这一矛盾。

通过在传统ML模型中加入推理LLM引擎，我们已经：

- 减少了传统ML模型的黑盒特性
- 添加了额外的LLM推理验证层
- 提高了系统的整体效率

下一步，我们可以甚至添加多个代理协同工作，以提供更精确的建议，因为多代理系统的表现优于单个代理已被证明。

需要注意的是，通用LLM由于其生成性质而不一致且不可靠（与传统的预测ML相反）。例如，我将相同的交易输入10次，其中两次输出为“未欺诈”。这是生成AI领域常见的问题，需要通过强化学习进行微调，我们将在下一节讨论。

## 6、LLM追踪、评估和强化学习

**持续监控**

由于其生成性质，LLM以其不一致性和不可靠性著称。从可靠性的角度来看，记录和监控LLM交互至关重要，原因如下：

- 分析输入/输出以测量任何数据漂移
- 查找输出中的任何异常
- 使用人类或其他LLM作为裁判对LLM响应进行评级，收集奖励数据，用于通过强化学习训练改进模型。

使用UbIAI，每个API调用都会在“监控”部分中记录输入/输出。

![](https://www.hubwiz.com/blog/content/images/2025/02/image-662.png)

UbIAI监控仪表板

![](https://www.hubwiz.com/blog/content/images/2025/02/image-663.png)

UbIAI LLM查询评估

用户可以根据输入/输出对LLM响应进行准确或不准确的评级。使用UbIAI的LLM作为裁判功能，我们可以创建提示并设置输出轨道，以自动设置我们关心的任何指标，如“幻觉”、“真实性”、“事实性”等。

![](https://www.hubwiz.com/blog/content/images/2025/02/image-664.png)

LLM作为裁判配置页面

使用另一个LLM评估LLM响应具有显著优势：

1. **可扩展性**：LLM可以迅速处理大量数据，使其成为大规模评估的理想选择，而这对人类审查员来说是不切实际或不可能的。
2. **成本效益**：与人类评估相比，LLM裁判更具经济性，尤其是在进行广泛的评估任务时。
3. **灵活性**：提示可以轻松调整以评估各种标准，从有用性到品牌语音一致性，无需重新训练模型。
4. **多语言能力**：LLM裁判可以轻松跨多种语言进行评估。

**强化学习**

使用人类或LLM收集的奖励数据，我们可以使用强化学习（RL）来调整LLM的行为以实现期望的目标，平衡多个目标，如准确性、真实性和时效性。

这将是下一篇文章的主题。

## 7、结束语

虽然传统的机器学习模型在检测已知欺诈模式方面非常有效，但它们往往作为黑盒操作，缺乏解释决策的能力。通过将基于推理的LLM与传统ML模型相结合，AI代理提供了更透明、适应性强和高效的欺诈检测方法。

我们的探索展示了这种混合方法如何在几个关键方面增强欺诈检测：

- **提高可解释性**：LLM组件增加了背景和推理，使欺诈检测决策更容易被调查人员和合规团队理解。
- **提高准确性**：AI代理交叉引用交易细节与历史数据，发现单独ML模型可能忽略的异常。
- **持续适应**：通过实施强化学习和监控LLM性能，企业可以微调其欺诈检测系统以应对不断演变的威胁。
- **人工参与集成**：能够将模糊案件标记给人类审核，确保自动化与专家监督之间的平衡。

尽管取得了进展，但仍存在挑战——LLM的响应变化无常，需要持续监控和微调以确保一致性。多代理系统和强化学习可以进一步提高欺诈检测的准确性，同时减少误报。

---

原文链接：[AI Agents in Fraud Detection: Bridging the Gap Between Traditional Machine Learning and Human Reasoning](https://walidamamou.medium.com/ai-agents-in-fraud-detection-bridging-the-gap-between-traditional-machine-learning-and-human-c901524fef58?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处