“Feature Store 简介”示例笔记本 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

“Feature Store 简介”示例笔记本

重要

允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker资源的自定义 IAM 策略还必须授予向这些资源添加标签的权限。需要向资源添加标签的权限,因为 Studio 和 Studio Classic 会自动标记他们创建的任何资源。如果 IAM 策略允许 Studio 和 Studio Classic 创建资源但不允许标记,则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息,请参阅 提供为资源添加标签 SageMaker的权限

Amazon 适用于亚马逊的托管政策 SageMaker授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

本页上的示例代码是指 Feature Store 简介示例笔记本。我们建议您在 Studio Classic、笔记本实例中运行此笔记本,或者 JupyterLab 因为本指南中的代码是概念性的,如果复制,则无法完全正常运行。

使用以下内容克隆包含示例笔记本的 aws/amazon-sagemaker- GitHub examples 存储库:

现在,您已经有了 SageMaker 示例笔记本,请导航到该amazon-sagemaker-examples/sagemaker-featurestore目录并打开功能商店简介示例笔记本。

第 1 步:设置 SageMaker 会话

要开始使用功能存储,请创建一个 SageMaker 会话。然后,设置要用于功能的亚马逊简单存储服务 (Amazon S3) 存储桶。Amazon S3 存储桶是您的离线存储。以下代码使用 SageMaker 默认存储桶并为其添加自定义前缀。

注意

用于运行笔记本的角色必须附加以下托管策略:AmazonS3FullAccessAmazonSageMakerFeatureStoreAccess。有关向您的 IAM 角色添加策略的信息,请参阅向您的 IAM 角色添加策略

# SageMaker Python SDK version 2.x is required import sagemaker import sys
import boto3 import pandas as pd import numpy as np import io from sagemaker.session import Session from sagemaker import get_execution_role prefix = 'sagemaker-featurestore-introduction' role = get_execution_role() sagemaker_session = sagemaker.Session() region = sagemaker_session.boto_region_name s3_bucket_name = sagemaker_session.default_bucket()

步骤 2:检查数据

在这个笔记本示例中,我们从托管完整笔记本的GitHub 存储库中提取合成数据。

customer_data = pd.read_csv("data/feature_store_introduction_customer.csv") orders_data = pd.read_csv("data/feature_store_introduction_orders.csv") print(customer_data.head()) print(orders_data.head())

下图说明了在 Feature Store 提取数据之前所经历的步骤。在本笔记本中,我们说明了您拥有来自多个来源的数据并希望将它们独立存储在功能商店中的用例。我们的示例考虑了来自数据仓库的数据(客户数据)和来自实时流式传输服务的数据(订单数据)。

该图演示了此示例笔记本在 Feature Store 中创建功能组和提取数据。对于此示例 notebook,在从两个不同的数据源摄取数据之前,会创建两个功能组。客户功能组提取客户数据(数据仓库),而订单功能组提取订单数据(实时流数据)。

步骤 3:创建特征组

我们首先为 customer_data 和 orders_data 创建特征组名称。接下来,我们创建了两个功能组,一个用于customer_data,另一个用于orders_data

import time from time import strftime, gmtime customers_feature_group_name = 'customers-feature-group-' + strftime('%d-%H-%M-%S', gmtime()) orders_feature_group_name = 'orders-feature-group-' + strftime('%d-%H-%M-%S', gmtime())

customers_data和实例化一个FeatureGroup对象:orders_data

from sagemaker.feature_store.feature_group import FeatureGroup customers_feature_group = FeatureGroup( name=customers_feature_group_name, sagemaker_session=sagemaker_session ) orders_feature_group = FeatureGroup( name=orders_feature_group_name, sagemaker_session=sagemaker_session )
import time current_time_sec = int(round(time.time())) record_identifier_feature_name = "customer_id"

EventTime 特征附加到您的数据框。此参数是必需的,并且为每个数据点加上时间戳:

customer_data["EventTime"] = pd.Series([current_time_sec]*len(customer_data), dtype="float64") orders_data["EventTime"] = pd.Series([current_time_sec]*len(orders_data), dtype="float64")

将要素定义加载到您的功能组:

customers_feature_group.load_feature_definitions(data_frame=customer_data) orders_feature_group.load_feature_definitions(data_frame=orders_data)

以下命令分别调create用创建两个功能组和:customers_feature_grouporders_feature_group

customers_feature_group.create( s3_uri=f"s3://{s3_bucket_name}/{prefix}", record_identifier_name=record_identifier_feature_name, event_time_feature_name="EventTime", role_arn=role, enable_online_store=True ) orders_feature_group.create( s3_uri=f"s3://{s3_bucket_name}/{prefix}", record_identifier_name=record_identifier_feature_name, event_time_feature_name="EventTime", role_arn=role, enable_online_store=True )

为了确认您的功能组已创建,我们使用DescribeFeatureGroupListFeatureGroups API 进行显示:

customers_feature_group.describe()
orders_feature_group.describe()
sagemaker_session.boto_session.client('sagemaker', region_name=region).list_feature_groups() # We use the boto client to list FeatureGroups

步骤 4:将数据摄取到特征组

创建功能组后,我们可以将数据放入其中。如果您使用的是 SageMaker Amazon SDK for Python (Boto3),请使用 ingest API 调用。如果你使用的是适用于 Python 的 SDK (Boto3),那就使用 API。PutRecord这两个选项都只需不到 1 分钟就能摄取数据。此示例使用 SageMaker 适用于 Python 的 SDK (Boto3),因此它使用了 API 调用:ingest

def check_feature_group_status(feature_group): status = feature_group.describe().get("FeatureGroupStatus") while status == "Creating": print("Waiting for Feature Group to be Created") time.sleep(5) status = feature_group.describe().get("FeatureGroupStatus") print(f"FeatureGroup {feature_group.name} successfully created.") check_feature_group_status(customers_feature_group) check_feature_group_status(orders_feature_group)
customers_feature_group.ingest( data_frame=customer_data, max_workers=3, wait=True )
orders_feature_group.ingest( data_frame=orders_data, max_workers=3, wait=True )

我们使用任意的客户记录 ID 573291,利用 get_record 来检查数据是否已摄取到特征组中。

customer_id = 573291 sample_record = sagemaker_session.boto_session.client('sagemaker-featurestore-runtime', region_name=region).get_record(FeatureGroupName=customers_feature_group_name, RecordIdentifierValueAsString=str(customer_id))
print(sample_record)

以下内容演示如何使用获取一批记录。batch_get_record

all_records = sagemaker_session.boto_session.client( "sagemaker-featurestore-runtime", region_name=region ).batch_get_record( Identifiers=[ { "FeatureGroupName": customers_feature_group_name, "RecordIdentifiersValueAsString": ["573291", "109382", "828400", "124013"], }, { "FeatureGroupName": orders_feature_group_name, "RecordIdentifiersValueAsString": ["573291", "109382", "828400", "124013"], }, ] )
print(all_records)

第 5 步:清理

在这里,我们删除了我们创建的功能组。

customers_feature_group.delete() orders_feature_group.delete()

步骤 6:后续步骤

在此示例笔记本中,您学习了如何开始使用 Feature Store、创建功能组以及如何向其中提取数据。

有关如何使用功能商店进行欺诈检测用例的高级示例,请参阅使用功能商店进行欺诈检测

第 7 步:程序员代码示例

在此笔记本中,我们使用了各种不同的 API 调用。它们中的大多数都可以通过 SageMaker Python SDK 访问,但有些仅存在于 Boto3 中。您可以直接在功能商店对象上调用 SageMaker Python SDK API 调用,而要调用 Boto3 中存在的 API 调用,则必须先通过 Boto3 和 SageMaker 会话访问 Boto3 客户端:例如。sagemaker_session.boto_session.client()

以下是此笔记本的 API 调用列表。这些调用存在于 Boto3 中SDK for Python并存在于 Boto3 中,供您参考:

适用于 Python 的 SDK (Boto3) API 调用

describe() ingest() delete() create() load_feature_definitions()

Boto3 API 调用

list_feature_groups() get_record()