Press "Enter" to skip to content

时序生成式人工智能

使用GAN生成时间序列合成数据:DoppelGANger

时间序列数据——交通数据、股票价格、天气和能源测量、医疗信号——本质上是随着时间不断生成的数据。

这种时间依赖性为合成数据生成过程引入了新的复杂性:保持时间上的趋势和相关性与保持特征或属性之间的相关性一样重要(我们在表格数据中习惯的那样)。并且,历史时间越长,保持这些关系就越困难。

多年来,数据科学团队一直在尝试定义适合生成高质量合成时间序列数据的方法,其中生成对抗网络(GANs)目前非常流行。

在本文中,我们将深入探讨一种幽默的架构,DoppelGANger——是的,双关语——最近添加到ydata-synthetic软件包中,并探索如何使用它从复杂的时间序列数据集中生成合成数据。

你如何生成时间序列数据的副本?

即使对于经验丰富的数据科学家来说,合成数据生成的主题也可能有些棘手,因为有许多细微差别需要考虑。事实上,确定如何调整数据准备并选择适当的机器学习模型进行数据合成的最佳方法是我们在Data-Centric AI社区讨论的主要主题之一。

在教育目的上,ydata-synthetic一直是我们的首选,我们已经在表格数据上进行了大量测试。这次,我们正在使用最新的用于时间序列合成数据的模型——DoppelGANger进行时间序列数据的实验。

从(很棒的)名称可以看出,DoppelGANger对“Doppelganger”(指相貌相似或者人的替身的德语词)和“GAN”(生成对抗网络)进行了双关语的创意。

作为基于GAN的模型,DoppleGANger遵循GAN的同一一般原则:生成器和判别器通过将生成的合成数据(由生成器创建)与真实数据(判别器或评论家试图与合成数据区分出来的数据)进行比较而不断优化。然而,正如前面提到的,GANs在处理时间序列数据的特殊性方面一直存在困难:

  • GANs难以捕捉长期的时间关系。一种常见的方法是考虑窗口方法,即将数据定义为较短的段,并且仅在这些段上评估模型。这是TimeGAN采用的方法。然而,对于我们需要复制整个时间序列的用例,需要保持长期相关性的情况,这是不可行的;
  • GANs难以处理模态崩溃。如果数据具有多模态分布,最不常见的模态最终会崩溃(消失)。由于测量范围通常高度可变,时间序列数据特别容易受到这种影响;
  • GANs难以映射测量和属性之间的复杂关系。以及不同测量之间的关系。如果您回想一下时间序列数据的结构,这将是一个难以映射账户余额和交易类型(属性)之间关系以及账户余额和其他度量值(例如费用金额)之间关系的情况。

为了克服这些限制,DoppelGANger引入了一些修改,以更好地处理合成时间序列数据的生成:

  • 为了捕捉时间相关性,DoppelGANger使用批量生成。它不是一次生成一条记录,而是生成一批记录。这对于较长的时间序列更好,并有助于保持在生成单个记录时可能会遗忘的时间相关性;
  • 为了解决模态崩溃,DoppleGANger使用自动归一化。不是通过测量的全局最小值和最大值对输入数据进行归一化,而是对每个时间序列信号进行单独归一化。每个序列的最小值和最大值被用作元数据,GAN也学习生成这些元数据,从而缓解了模态崩溃;
  • 为了映射测量和属性之间的关系,DoppleGANger对测量和属性之间的联合分布进行建模,并引入了一个辅助判别器。属性的生成与基于属性的测量的生成解耦,每个生成器使用一个专用生成器。此外,引入了一个辅助判别器,仅对属性进行判别。
DoppelGANger架构概述。图片来源于林等人。

关键优势及适用场景

现在我们已经全面了解了DoppelGANger的架构以及它如何超越一些众所周知的时间序列数据挑战,更容易理解为什么DoppelGANger是如此受欢迎的模型:

  • 准确的时间模式生成:DoppelGANger被设计用于处理数据中的短期和长期模式,因此能够模仿某些特征,如季节变化。例如,在金融时间序列用例中捕捉每周和每年的相关性;
  • 真实的时间相关性:DopplelGANger适用于那些保持测量和属性之间相关性至关重要的用例。例如,在与其他属性相关联的电子商务应用中复制趋势(一周中的某一天,年龄和性别等个人因素,或营销和广告信息);
  • 灵活的生成:DoppleGANger允许根据用户定义的不同元数据/属性分布生成合成数据。通过这种方式,它可以适应罕见事件的增加,例如在医疗设备或欺诈检测交易中常见的事件。

让我们看一个实际的用例,好吗?

实际示例:测量宽带美国

为了探索DoppelGANger的应用,我们将使用在美国联邦通信委员会(FCC)网站上免费提供的Measuring Broadband America(MBA)数据集(许可信息)。这是原始论文中用来展示DoppelGANger模型的数据集之一,报告了来自美国多个家庭的往返时间和数据包丢失率等多个测量值,稍后我们将详细介绍。您可以使用包含完整流程的笔记本来跟随本教程。

要开始教程,我们首先需要为我们的项目创建一个虚拟环境,并安装ydata-synthetic软件包:

安装ydata-synthetic。ydata-synthetic利用Tensorflow

然后,我们可以导入必要的模块,即著名的pandas和matplotlib,以及包含模型和训练参数的合成器模块和DoppelGANger实现:

导入开发所需的软件包

现在我们可以读取数据了。我们看到我们的数据集包含5个具有不同行为的特征:traffic_byte_counter和ping_loss_rate是连续特征,由感兴趣的测量值组成。每个测量都与3个分类特征或元数据相关联,即ISP、技术和州。

这是我们数据集的简短预览:

FCC MBA数据集:测量和元数据的预览。

现在,我们可以开始定义我们的模型和训练参数:

设置模型参数和模型训练参数

这些参数对应于DoppelGANger实现中使用的各种设置:

  • batch_size指定在每个训练迭代中一起处理的样本(数据点)的数量;
  • lr代表“学习率”,确定在训练过程中权重如何响应估计误差的程度;
  • betas是模型的正则化系数,定义了模型如何随时间调整其学习率;
  • latent_dim指定潜空间的维度,潜空间是生成器操作的低维空间;
  • gp_lambda控制损失函数中梯度惩罚项的强度,有助于稳定训练;
  • pac是用于缓解模式崩溃的打包程度;
  • epochs是训练迭代的次数;
  • sequence_lenght是每个时间序列的长度;
  • sample_lenght是时间序列批处理大小,即每个RNN滚动(原始论文中的参数S)生成的时间步数;
  • rounds是每批次的步骤数;
  • measument_cols是数据集中现有的测量值。

有了定义的参数,我们可以训练模型,最后合成新的数据:

模型训练和样本生成

现在我们有了新创建的合成数据,我们可以借助数据可视化来快速确定合成数据是否普遍重现了原始数据的行为。我们可以绘制整个序列或一个较短的时间窗口(56个点)来详细检查初步结果,并决定是否需要调整超参数:

真实数据 vs 合成数据:考虑流量和ping合成的序列长度。

总体而言,结果非常有希望,DoppelGANger能够完全复制我们的整个时间序列,包括短期和长期特征。这是一个简单的数据集示例,具有低维度且没有缺失值等关键问题:对于更复杂的场景,事先彻底探索数据集可能是明智的。

结论

正如我们在本文中讨论的那样,时间序列数据给合成数据生成的过程带来了额外的复杂性,这是很难使用传统的GAN方法来解决的。

DoppelGANger迎接挑战,能够克服这种复杂性,并具有极具潜力的优势,因此在当今数据从业者中非常受欢迎:

  • 强大的数据合成:处理短期和长期关系,DoppelGANger能够创建接近原始数据的新的逼真数据集。这可能是该方法最有趣的用例,让数据科学家在开发周期中为其数据集创建一个数据副本,以进行安全和可自定义的实验;
  • 灵活和可泛化:能够处理包含异构数据(分类、连续、多维数据集)的复杂上下文,DoppelGANger可以处理真实世界数据的整体特征,而不需要进行大量的人工努力,这自然会加快开发速度;
  • 丰富的应用和行业:从数据共享、隐私保护到高保真合成数据生成,DoppelGANger适用于各种用例。这使其在许多不同的行业中非常有趣,例如网络、金融、安全等等。

在一个对数据驱动的洞察力无限渴求的世界中,DoppelGANger提供了一种宝贵的方法,为数据科学家提供他们所需的数据,而无需牺牲隐私或质量,并使他们能够做出智能的孪生决策!

如往常一样,本教程中使用的所有代码都可在我们的代码库中找到,您还可以随时查阅文档以尝试使用包支持的其他模型。

关于我

对数据充满热情。致力于开发数据质量解决方案,帮助数据科学家采用以数据为中心的人工智能。

YData的首席数据官 | LinkedIn

Leave a Reply

Your email address will not be published. Required fields are marked *