从海量数据集训练和部署模型:欺诈检测使用案例

随着您的企业进行数字化转型并越来越多地接受在线支付,为了避免损失,必须使用有效的方法来检测并最终防止信用卡欺诈。由于欺诈占所有交易的一小部分,因此通常需要大量数据来构建一个强大而准确的模型,该模型能够以最小的虚假陈述欺诈行为。

体系结构

此体系结构重点介绍如何利用 Oracle Cloud Infrastructure 服务浏览数据集、构建模型以及在 TB 到 PB 级数据上训练此类模型。您可以使用训练的模型以作业的形式执行批处理推断,也可以部署为实时推断 REST 端点。该体系结构有三个主要阶段:收集、分析和行动。

下图说明了此引用体系结构。

下面是 cc-fraud-detection-architecture.png 的说明
插图 cc-fraud-detection-architecture.png 的说明

cc-fraud-detection-architecture-oracle.zip

该体系结构具有以下组成部分:

  • 收集

    收集阶段具有以下组件:

    • 生成数据的设备、传感器和输入。在欺诈检测使用案例中,数据来自销售点 (POS) 系统
    • 实时提取在生成数据点时接收数据点,并且可以使用流处理服务(连接到模型部署)排队到流中,或者应用程序可以通过 API 直接调用推断服务器。实时和历史数据在数据存储(云存储或数据库)中进行对账。
    • 通过上述方法获取的历史数据通常存储在数据库或对象存储中。
    • 云存储可用于暂存数据集以进行探索和模型训练。
    • 提取服务(例如 Oracle Cloud Infrastructure Data Integration 服务或 Oracle GoldenGate)还可以链接和传输外部数据,例如驻留在内部部署或第三方数据存储中的数据集。
  • 分析
    • 浏览、分析和设计模型

      在探索阶段,数据科学家提取一组具有代表性的数据集子集,这些数据集可以适应内存,并从中学习到对手头任务有意义的工程师功能。数据科学家也可以从 Oracle Cloud Infrastructure Data Science 中运行 Oracle Cloud Infrastructure Data Flow 应用程序来提取有代表性的数据集。对于欺诈检测,数据通常包括有关客户(例如,账号、地址、性别、出生日期)和可从中推导其他功能的事务处理(日期、时间、商户、商户地点)的信息,例如,当天时间、年龄、与商户的距离、客户城市人口等。

      对有意义的功能进行工程处理后,您可以测试各种模型以找到最准确的候选人。这意味着使用示例数据集在内存中以小规模训练和评估模型。如果无法做到这一点,数据科学家可以从 Oracle Cloud Infrastructure Data Science 创建和运行数据流应用以训练更大规模的模型

    • 模型培训

      您可以使用 Apache Spark 分布式处理引擎为 Oracle Cloud Infrastructure Data Flow 服务提供支持,以在无法容纳内存(兆字节甚至 PB)的数据集中大规模训练所选模型。

      数据流负责预配驱动程序节点和执行程序节点,这些节点选择配置来处理训练数据量,并且可以根据需要自动扩展。

    • 存储模型对象

      训练的模型已串行化并导出到对象存储。您可以为批推断加载构件,也可以使用它部署模型以进行实时推断。

    • 模型目录

      Oracle Cloud Infrastructure 模型目录用于存储模型代码和对象,并且可以添加与来源和分类相关的元数据,提供自测和定义输入和输出方案的功能。模型目录是模型部署的源。

  • 操作
    • 批推断

      您可以使用“批推断”根据计划评估过去的事件,也可以定期审核模型性能和偏移。批推断使用 Oracle Cloud Infrastructure Data Flow 服务大规模执行。您可以使用对象存储上存储的代码和模型构件,直接从 Oracle Cloud Infrastructure Data Science 记事本创建评分或推断数据流应用程序。

    • 实时推断

      使用模型部署对适合内存的单个或小批量事件执行推断。与数据流应用程序类似,您可以直接从数据科学记事本在模型目录中创建和存储模型。然后,可以在实时数据流上进行推断,也可以通过来自应用的直接 API 调用同步推断。

    • 编排和调度

      使用批时,在调度表或触发器上运行作业通常很有用。您可以使用 Oracle Cloud Infrastructure 数据集成服务执行此类型的编排。该服务可以触发和控制摄取任务、转换并触发培训、评分或推断作业。

您可以将类似模式与其他需要非常大数据集的用例一起使用,例如:

  • 预测性维护

    预测性维护是指避免成本并尽可能减少运营中断,从而增加费用,例如安排额外班次、支付加班费、加快运费和其他成本。

  • 能源生产输出

    从风能或太阳能等替代能源农场预测吞吐量需要大量数据,包括当地的天气模式和过去的输出。

  • Smart Manufacturing and Internet of Things (IoT)

    智能制造需要找到提高运营效率的方法来增加收入和利润。这通常需要摄取数亿到数百万个传感器的数据来预测产出、瓶颈或跟踪产品以分析影响,从而提高吞吐量和输出。

  • 健康保险索赔处理

    欺诈也是健康保险索赔中普遍存在的问题。自动确定提交完整性是提高流程效率的关键部分。

  • 处方药分析和物流

    预测一个地点需要哪些类型的处方药是一个复杂的问题,只有大量的数据可以帮助您解决。

  • 健康诊断

    健康诊断通常使用 X 射线或 MRI 等成像技术进行。机器学习在预测疾病时已经证明非常有用,有时甚至比人类更好。此类型的应用程序需要非常大的数据集图像,这些图像由于其多维性而大量。

建议

使用以下建议作为起点。您的要求可能不同于此处描述的体系结构。
  • 网关

    网关可以是专为特定数据收集而设计的定制中心。它也可能是一个数据库,例如 Oracle Autonomous Data WarehouseOracle NoSQL Database Cloud Service 或某个其他数据库。

  • 传输

    使用 Oracle Cloud Infrastructure 数据集成将所有历史数据脱机迁移到 Oracle Cloud Infrastructure Object Storage。数据传输到对象存储后,所有 Oracle Cloud Infrastructure (OCI) 服务都可以访问数据。您还可以使用 Oracle GoldenGate 从内部部署数据库移动数据。

  • 使用 Oracle Cloud Infrastructure 流处理可以实时摄取在 Oracle Cloud Infrastructure Object Storage 中使用或存储的事件和数据。

  • 数据存储
    • 对象存储

      Oracle Cloud Infrastructure Object Storage 是此体系结构中的默认存储。在对象存储中存储结构化、半结构化和非结构化所有数据是经济高效的解决方案。

    • 数据库

      使用 Oracle Autonomous Data WarehouseOracle MySQL 数据库服务或其他 SQL 和 NoSQL 数据库存储必须为分析和报告访问的数据。通常,只有经过处理的数据驻留在数据库中,而原始数据(访问频率较低)更有效地存储在对象存储中。

    • HDFS 数据存储

      Oracle Big Data Cloud Service 提供了一种在 HDFS(Hadoop 分布式文件系统)上存储大量数据的方法。如果您的组织已经利用或正在迁移其他基于 Hadoop 的应用程序,则此选项非常有用。Oracle 提供了指向 Oracle Cloud Infrastructure Object Storage 的 HDFS 连接器,这是推荐的存储平台。

  • 数据科学

    Oracle Cloud Infrastructure 数据科学为数据科学家提供了一个熟悉的开发环境,数据科学家可以通过托管的 Jupyter 实验室和多个基于安全套的环境进行选择。

    数据科学服务支持 Oracle 高级数据科学 (ADS) 库,通过该库可以轻松地创建机器学习模型并将其存储到模型目录中,以及通过模型部署部署部署部署模型。

    Jupyter Lab 接口与提供的预先打包的 Apache Spark 安全套环境相结合,可以轻松地在内存中数据集上浏览和设计基于 Spark 的模型,然后将这些模型部署为 Oracle Cloud Infrastructure Data Flow 应用程序,以运行培训或批处理推断,或者作为模型部署进行实时或内存中推断。

  • 分布式数据处理

    Oracle Cloud Infrastructure Data Flow 提供 Apache Spark 分布式处理引擎即服务,能够在 TB 或甚至 PB 数据上运行处理作业。

    借助 Oracle ADS 库实用程序,在数据科学服务中开发的 Spark 应用程序可以轻松地传输到数据流应用程序,并且可以配置为在任何规模上运行。

考虑事项

针对大型数据集构建和训练模型时,请考虑以下几点。有些特定于欺诈检测用例,但您可以对任何模型设计过程进行最多的插值。

  • 数据收集

    在构建任何机器学习模型时,数据至关重要:数量充足的质量数据至关重要。在欺诈检测样品代码中,我们使用了带有标签的合成交易数据,这些数据是使用最佳猜测的用户配置文件生成的。在实际情况中,事务处理通常不会被标记,并且可能无法检测到或甚至不知道欺诈案例,更不用说标记标签,因此构建正确的数据集是解决问题的第一个挑战。

  • 数据质量

    需要多少数据总是难以回答的问题。一般来说,功能越多,所需的数据就越多。在某些情况下,减少功能数量有助于提高模型性能并避免过度拟合;但在许多情况下,需要更多的数据来提高模型性能。

    If the data can fit in memory, then it is typically more efficient to select a compute shape with enough memory to train on a single node, than work with a distributed processing framework like Apache Spark (or Oracle Cloud Infrastructure Data Flow, its managed equivalent).

  • 数据存储

    原始数据通常很庞大,不直接用于分析。保留原始数据很重要,但是很少用于训练或重新训练模型,因此最好存储在 Oracle Cloud Infrastructure Object Storage 等经济高效的解决方案上。

    用于分析和报告的聚合数据、预测或更一般的数据必须实时,并且更好地存储在数据库中。分析需要的大量数据可以从分布式存储解决方案(例如 HDFS 和 Oracle Big Data Cloud Service)中受益。

  • 功能工程和数据扩充

    摄取的原始数据通常没有足够的信息或格式错误,因此需要对其中的功能进行工程处理。例如,我们可能希望使用客户的年龄,而不是客户的出生日期。大多数机器学习模型并不容易理解的分类文本可以编码为 StringIndexer 或更常用 1 热编码的数字。当分类数据不太可能更改(例如对性别进行编码)时,这非常有用。但是,如果可以随时间变化,使用这些技术将要求在新值到来时重新训练模型,这绝非理想。在这种情况下,可能需要找到一种更好的方式来对此数据进行编码。

    在欺诈检测代码样例中,我们使用合成数据集已生成的经度和纬度作为客户地址的代理。此信息可能不容易从设备源获取,并且需要数据扩充。在数据摄取期间或作为预处理步骤调用外部地理编码服务以将地址转换为地理坐标,将提供所需的信息。

  • 数据浏览

    数据浏览通常针对适合内存的代表性示例数据集执行。如果无法轻松确定示例数据集确实代表完整数据集,并且整个数据集太大,无法容纳内存,则使用 Oracle Cloud Infrastructure Data Flow 构建有关数据集的聚合统计信息并提取代表完整数据集的有意义子示例数据集。示例数据集上的工程功能不代表完整数据集,然后对完整数据集进行培训将导致性能不佳的模型。

  • 模型培训

    要想提高效率,就要优化 Spark。请参阅调整数据流应用程序的大小并按照建议来估计运行特定作业所需的执行程序和计算配置数量。

部署

此参考体系结构的示例在 GitHub 中作为 Jupyter Notebook 提供。

  1. 转至 GitHub 以查看示例记事本。
  2. 按照 README 文档中的说明进行操作。

浏览更多

详细了解 Oracle Cloud Infrastructure Data Flow

查看以下附加资源:

致谢

Authors: Emmanuel Leroy, Niranjan Ghadei, Nishant Patel, Alireza Dibazar