使用合成数据改进机器学习中大规模不平衡的数据集

在机器学习中处理不平衡的数据集是一项艰巨的挑战,可能包括支付欺诈、诊断癌症或疾病,甚至网络安全攻击等主题。所有这些的共同点是,在整个交易中,只有很小一部分实际上是欺诈行为,而这些交易是我们真正关心检测的。

使用合成数据改进机器学习中大规模不平衡的数据集
在线工具推荐:三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换

这篇文章中,我们将通过训练生成合成数据模型来创建额外的欺诈记录,从而提高流行的 Kaggle 欺诈数据集的准确性。独特的是,该模型将包含来自欺诈性记录及其最近邻居的特征,这些特征被标记为非欺诈性,但与欺诈性记录足够接近,有点“阴暗”。

我们不平衡的数据集

在这篇文章中,我们选择了 Kaggle 上流行的“信用卡欺诈检测”数据集。该数据集包含 2013 年 27 月欧洲信用卡持卡人的标记交易。为了保护用户身份,数据集将敏感特征降维为 1 个浮点列 (V27–10) 和一个时间列(此事务与数据集中第一个事务之间经过的秒数)。在这篇文章中,我们将使用信用卡欺诈数据集中的前 <>k 条记录 - 单击下方以在 Google Colaboratory 中生成以下图表。

https://colab.research.google.com/github/gretelai/gretel-synthetics/blob/master/examples/research/synthetics_knn_classify_and_visualize.ipynb

用于发布的图像
严重不平衡的数据集

指标陷阱

让我们看看使用尖端的 ML 分类器检测欺诈记录时可以获得什么样的性能。首先,我们将数据集划分为训练集和测试集。

用于发布的图像
对默认欺诈数据集进行分类的结果

哇,99.75%的检测率。太棒了,对吧?!也许 - 查看整体模型准确性仅显示模型在整个集合中的表现如何,而不是我们在检测欺诈记录方面的表现。要了解我们实际表现如何,请打印混淆矩阵和准确性报告。

用于发布的图像
在上面我们可以看到,尽管我们的总体准确率为 99.75%,但我们在测试集中错误地分类了 43% 的欺诈示例!

使用合成数据增强欺诈示例

在本节中,我们将重点介绍如何通过使用 gretel-synthetics 生成欺诈记录的其他示例来提高欺诈记录的模型性能和泛化性。让我们从我们想要完成的目标开始 - 我们的目标是生成欺诈记录的额外样本,这将有助于我们的分类器泛化和更好地检测测试集中的欺诈记录。

合成少数群过采样技术

数据科学界实现这一点的一种流行技术称为 SMOTE(Synthetic Minority Oversampling Technique),由 Nitesh Chawla 等人在 2002 年的论文中描述。SMOTE 的工作原理是从少数类中选择示例,在少数类中找到它们最近的邻居,并在它们之间有效地插入新点。SMOTE 无法合并来自少数群体以外的记录的数据,在我们的示例中,这些记录可能包括有用的信息,包括欺诈性或错误标记的记录。

Gretel合成材料与SMOTE的概念

在我们的训练集中只有 31 个欺诈数据样本,这对泛化提出了独特的挑战,因为 gretel-synthetics 利用深度学习技术来学习和生成新样本,而这些样本传统上需要大量数据才能收敛。打开下面的笔记本,使用 Google Colab 免费生成您自己的合成欺诈数据集。

https://colab.research.google.com/github/gretelai/gretel-synthetics/blob/master/examples/research/synthetics_knn_generate.ipynb

通过借用 SMOTE 的方法,即找到欺诈集的最近邻,并纳入多数类中的一些最近邻,我们有机会扩展我们的训练集示例,并从我们的欺诈类(我们称之为阴暗的)记录中吸取一些教训。这种方法不需要对 Gretel Synthetics 进行任何更改,我们只是从欺诈性 + 最近的正邻居(阴暗)记录中智能地选择数据集。让我们开始吧!

为了构建我们的合成模型,将使用 Gretel 的新 DataFrame 训练模式默认值,并在下面设置几个参数来优化结果:

  1. epochs: 7. 将 epochs 设置为尽可能低的设置,以平衡创建有效记录,而不会过度拟合我们有限的训练集。
  2. dp:错误。在这种情况下,无需承担运行差分隐私对准确性的影响。
  3. gen_lines:1000。我们将生成 1000 条记录,以提升我们现有的 31 个正面示例。请注意,并非所有从我们的模型生成的记录都是正的,因为我们合并了一些负面示例,但我们至少应该有几百个新的正示例。
  4. batch_size=32。将所有 30 行拟合到单个神经网络模型中,以保留所有场间相关性,代价是更多记录未通过验证。
  5. 训练模型,生成线条,并仅保留合成数据模型创建的“欺诈性”记录

检查我们的合成数据集

现在让我们看一下我们的合成数据,看看我们是否可以直观地确认我们的合成记录代表了他们接受过训练的欺诈记录。我们的数据集有 30 个维度,因此我们将使用数据科学中称为主成分分析 (PCA) 的降维技术来可视化 2D 和 3D 数据。

下面我们可以看到我们的训练、合成和测试数据集被压缩到两个维度。从视觉上看,除了 883 个原始训练示例之外,31 条新的欺诈性合成记录可能对分类器非常有帮助。我们添加了 7 个测试集的正面示例(其中我们的默认模型错误地分类了 3/7,我们希望增强的合成数据将有助于提高检测率。

用于发布的图像

从我们在图表中看到的内容来看,我们合成生成的欺诈示例可能非常有用!请注意,在训练负集附近似乎是误报示例。如果您看到很多这样的示例,请尝试将NEAREST_NEIGHBOR_COUNT从 5 减少到 3 以获得更好的结果。让我们可视化相同的 PCA 可视化 3 维。

用于发布的图像

从上面的数据集来看,似乎用合成数据来增加我们少数欺诈记录集可能会对模型性能有很大帮助。让我们试试吧!

使用合成数据提升我们的训练数据集

现在,我们重新加载训练和测试数据集,但这次使用新生成的合成记录来扩充现有的训练数据。

用于发布的图像
添加 852 个合成示例将我们的负/正比率从 257 倍降低到 9 倍!

在增强数据集上训练 XGBoost,针对测试数据集运行模型并检查混淆矩阵。

用于发布的图像
通过额外的欺诈示例检测,欺诈检测率提高 14%!

正如我们所看到的,训练机器学习模型以准确检测极端少数群体是一项艰巨的挑战。但是,合成数据创造了一种提高准确性的方法,并可能提高模型泛化到新数据集的能力,并且可以独特地将整个数据集的特征和相关性整合到合成欺诈示例中。

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号