翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Feature Store サンプルノートブックの概要
重要
Amazon SageMaker Studio または Amazon SageMaker Studio Classic に Amazon SageMaker リソースの作成を許可するカスタム IAM ポリシーでは、これらのリソースにタグを追加するアクセス許可も付与する必要があります。Studio と Studio Classic は、作成したリソースに自動的にタグ付けするため、リソースにタグを追加するアクセス許可が必要になります。IAM ポリシーで Studio と Studio Classic によるリソースの作成が許可されていても、タグ付けが許可されていない場合は、リソースを作成しようとしたときに「AccessDenied」エラーが発生する可能性があります。詳細については、「SageMaker AI リソースにタグ付けするためのアクセス許可を提供する」を参照してください。
SageMaker リソースを作成するためのアクセス許可を付与する AWS Amazon SageMaker AI の マネージドポリシー には、それらのリソースの作成中にタグを追加するためのアクセス許可もあらかじめ含まれています。
このトピックのサンプルコードは、「Introduction to Feature Store
サンプルノートブックなどを提供する GitHub レポジトリ (aws/amazon-sagemaker-examples
-
Studio Classic の場合
Studio Classic を起動します。Studio または Studio Classic がデフォルトのエクスペリエンスとして有効になっている場合は、Studio Classic を開くことができます。Studio Classic を開く手順については、「Amazon SageMaker AI コンソールを使用して Studio Classic を起動する」を参照してください。
aws/amazon-sagemaker-examples
の GitHub レポジトリを Studio Classic にクローンするには、「SageMaker Studio Classic で Git リポジトリのクローンを作成する」の手順を実行します。 -
Amazon SageMaker ノートブックインスタンスの場合
「ノートブックインスタンスへのアクセス」の手順に従って、SageMaker ノートブックインスタンスを起動します。
「サンプルノートブックにアクセスする」の指示に従って、サンプルがノートブックに既に含まれているかを確認します。含まれていない場合は、「Amazon SageMaker AI アカウントに Git リポジトリを追加する」の手順を実行します。
SageMaker AI サンプルノートブックを作成したので、 amazon-sagemaker-examples/sagemaker-featurestore
ディレクトリに移動し、Feature Store 入門
ステップ 1: SageMaker AI セッションを設定する
Feature Store の使用を開始するには、SageMaker AI セッションを作成します。次に、特徴量に使用する Amazon Simple Storage Service (Amazon S3) バケットを設定します。Amazon S3 バケットはオフラインストアです。次のコードでは、SageMaker AI のデフォルトバケットを使用してカスタムプレフィックスを追加します。
注記
ノートブックの実行に使用するロールには、AmazonS3FullAccess
と AmazonSageMakerFeatureStoreAccess
のマネージドポリシーががアタッチされている必要があります。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())
次の図は、特徴量ストアにデータが取り込まれる前のデータ処理ステップを説明しています。このノートブックでは、複数ソースからのデータがあり、これらのデータを特徴量ストアに別々に保存するユースケースについて説明します。この例では、データウェアハウスのデータ (顧客データ) とリアルタイムストリーミングサービスのデータ (注文データ) を考えます。
![このサンプルノートブックの特徴量ストアでの特徴量グループの作成とデータインジェスト](images/feature-store/feature-store-intro-diagram.png)
ステップ 3: 特徴グループを作成する
まず、customer_data と orders_data の特徴グループ名を作成します。この後、次のとおり customer_data
に 1 つと orders_data
に 1 つの、2 つの特徴量グループを作成します。
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
と orders_data
の FeatureGroup
オブジェクトをインスタンス化します。
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_group
と orders_feature_group
という 2 つの特徴量グループを作成します。
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 )
特徴量グループが作成されたことを確認するには、 DescribeFeatureGroup
API と ListFeatureGroups
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 AI を使用している場合は AWS SDK for Python (Boto3)、 ingest
API コールを使用します。SDK for Python (Boto3) を使用している場合は、PutRecord
API を使用します。この両方のオプションのデータ取り込みには 1 分もかかりません。この例では、SageMaker AI SDK for Python (Boto3) を使用しているため、 ingest
API コールを使用します。
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 )
get_record
を任意の顧客レコード ID「573291」で使用して、データが特徴量グループに取り込まれているかを確認します。
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:次のステップ
このサンプルノートブックでは、特徴量ストアの使用を開始し、特徴量グループを作成して、特徴量グループにデータを取り込む方法を説明しました。
不正検出のユースケースで特徴量ストアを使用する方法の高度な例については、「Fraud Detection with Feature Store
ステップ 7: プログラマー向けのサンプルコード
このノートブックでは、さまざまな API コールを使いました。そのほとんどは SageMaker Python SDK からアクセスできますが、Boto3 内でのみ提供されているものもあります。Feature Store オブジェクトで SageMaker Python SDK API コールを直接呼び出すことができますが、Boto3 内に存在する API コールを呼び出すには、まず Boto3 および SageMaker AI セッションを介して Boto3 クライアントにアクセスする必要があります。たとえば、 ですsagemaker_session.boto_session.client()
。
このノートブックの API コールの一覧は、以下のとおりです。このような呼び出しは SDK for Python 内で提供され、リファレンスとして Boto3 で提供されています。
SDK for Python (Boto3) API コール
describe() ingest() delete() create() load_feature_definitions()
Boto 3 の API コール
list_feature_groups() get_record()