Deteksi penipuan dengan notebook contoh Feature Store - Amazon SageMaker

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Deteksi penipuan dengan notebook contoh Feature Store

penting

IAMKebijakan khusus yang memungkinkan Amazon SageMaker Studio atau Amazon SageMaker Studio Classic membuat SageMaker sumber daya Amazon juga harus memberikan izin untuk menambahkan tag ke sumber daya tersebut. Izin untuk menambahkan tag ke sumber daya diperlukan karena Studio dan Studio Classic secara otomatis menandai sumber daya apa pun yang mereka buat. Jika IAM kebijakan mengizinkan Studio dan Studio Classic membuat sumber daya tetapi tidak mengizinkan penandaan, kesalahan "AccessDenied" dapat terjadi saat mencoba membuat sumber daya. Untuk informasi selengkapnya, lihat Memberikan izin untuk menandai sumber daya SageMaker.

AWS Kebijakan Terkelola untuk Amazon SageMakeryang memberikan izin untuk membuat SageMaker sumber daya sudah menyertakan izin untuk menambahkan tag saat membuat sumber daya tersebut.

Kode contoh pada halaman ini mengacu pada contoh buku catatan: Deteksi Penipuan dengan Amazon SageMaker Feature Store. Kami menyarankan Anda menjalankan notebook ini di Studio Classic, instance notebook, atau JupyterLab karena kode dalam panduan ini bersifat konseptual dan tidak berfungsi penuh jika disalin.

Gunakan yang berikut ini untuk mengkloning aws/ amazon-sagemaker-examples GitHub repositori, yang berisi contoh notebook.

Sekarang setelah Anda memiliki SageMaker contoh notebook, navigasikan ke amazon-sagemaker-examples/sagemaker-featurestore direktori dan buka contoh notebook Deteksi Penipuan dengan Amazon SageMaker Feature Store.

Langkah 1: Siapkan sesi Toko Fitur Anda

Untuk mulai menggunakan Feature Store, buat SageMaker sesi, sesi Boto3, dan sesi Feature Store. Selain itu, siapkan bucket Amazon S3 yang ingin Anda gunakan untuk fitur Anda. Ini adalah toko offline Anda. Kode berikut menggunakan bucket SageMaker default dan menambahkan awalan kustom ke dalamnya.

catatan

Peran yang Anda gunakan untuk menjalankan buku catatan harus memiliki kebijakan terkelola berikut yang dilampirkan padanya: AmazonSageMakerFullAccess danAmazonSageMakerFeatureStoreAccess. Untuk informasi tentang menambahkan kebijakan ke IAM peran Anda, lihatMenambahkan kebijakan ke IAM peran Anda.

import boto3 import sagemaker from sagemaker.session import Session sagemaker_session = sagemaker.Session() region = sagemaker_session.boto_region_name boto_session = boto3.Session(region_name=region) role = sagemaker.get_execution_role() default_bucket = sagemaker_session.default_bucket() prefix = 'sagemaker-featurestore' offline_feature_store_bucket = 's3://{}/{}'.format(default_bucket, prefix) sagemaker_client = boto_session.client(service_name='sagemaker', region_name=region) featurestore_runtime = boto_session.client(service_name='sagemaker-featurestore-runtime', region_name=region) feature_store_session = Session(     boto_session=boto_session,     sagemaker_client=sagemaker_client,     sagemaker_featurestore_runtime_client=featurestore_runtime )

Langkah 2: Muat dataset dan partisi data ke dalam grup fitur

Muat data Anda ke dalam bingkai data untuk setiap fitur Anda. Anda menggunakan bingkai data ini setelah mengatur grup fitur. Dalam contoh deteksi penipuan, Anda dapat melihat langkah-langkah ini dalam kode berikut.

import numpy as np import pandas as pd import matplotlib.pyplot as plt import io s3_client = boto3.client(service_name='s3', region_name=region) fraud_detection_bucket_name = 'sagemaker-featurestore-fraud-detection' identity_file_key = 'sampled_identity.csv' transaction_file_key = 'sampled_transactions.csv' identity_data_object = s3_client.get_object(Bucket=fraud_detection_bucket_name, Key=identity_file_key) transaction_data_object = s3_client.get_object(Bucket=fraud_detection_bucket_name, Key=transaction_file_key) identity_data = pd.read_csv(io.BytesIO(identity_data_object['Body'].read())) transaction_data = pd.read_csv(io.BytesIO(transaction_data_object['Body'].read())) identity_data = identity_data.round(5) transaction_data = transaction_data.round(5) identity_data = identity_data.fillna(0) transaction_data = transaction_data.fillna(0) # Feature transformations for this dataset are applied before ingestion into FeatureStore. # One hot encode card4, card6 encoded_card_bank = pd.get_dummies(transaction_data['card4'], prefix = 'card_bank') encoded_card_type = pd.get_dummies(transaction_data['card6'], prefix = 'card_type') transformed_transaction_data = pd.concat([transaction_data, encoded_card_type, encoded_card_bank], axis=1) transformed_transaction_data = transformed_transaction_data.rename(columns={"card_bank_american express": "card_bank_american_express"})

Langkah 3: Siapkan grup fitur

Saat menyiapkan grup fitur, Anda perlu menyesuaikan nama fitur dengan nama unik dan mengatur setiap grup fitur dengan FeatureGroup kelas.

from sagemaker.feature_store.feature_group import FeatureGroup feature_group_name = "some string for a name" feature_group = FeatureGroup(name=feature_group_name, sagemaker_session=feature_store_session)

Misalnya, dalam contoh deteksi penipuan, dua grup fitur adalah identity dantransaction. Dalam kode berikut, Anda dapat melihat bagaimana nama disesuaikan dengan stempel waktu, dan kemudian setiap grup diatur dengan meneruskan nama dan sesi.

import time from time import gmtime, strftime, sleep from sagemaker.feature_store.feature_group import FeatureGroup identity_feature_group_name = 'identity-feature-group-' + strftime('%d-%H-%M-%S', gmtime()) transaction_feature_group_name = 'transaction-feature-group-' + strftime('%d-%H-%M-%S', gmtime()) identity_feature_group = FeatureGroup(name=identity_feature_group_name, sagemaker_session=feature_store_session) transaction_feature_group = FeatureGroup(name=transaction_feature_group_name, sagemaker_session=feature_store_session)

Langkah 4: Siapkan fitur pengenal catatan dan waktu acara

Pada langkah ini, Anda menentukan nama pengenal catatan dan nama fitur waktu acara. Nama ini memetakan ke kolom fitur yang sesuai dalam data Anda. Misalnya, dalam contoh deteksi penipuan, kolom yang diminati adalahTransactionID. EventTimedapat ditambahkan ke data Anda ketika tidak ada stempel waktu yang tersedia. Dalam kode berikut, Anda dapat melihat bagaimana variabel-variabel ini diatur, dan kemudian EventTime ditambahkan ke data kedua fitur ini.

record_identifier_name = "TransactionID" event_time_feature_name = "EventTime" current_time_sec = int(round(time.time())) identity_data[event_time_feature_name] = pd.Series([current_time_sec]*len(identity_data), dtype="float64") transformed_transaction_data[event_time_feature_name] = pd.Series([current_time_sec]*len(transaction_data), dtype="float64")

Langkah 5: Muat definisi fitur

Anda sekarang dapat memuat definisi fitur dengan melewatkan bingkai data yang berisi data fitur. Dalam kode berikut untuk contoh deteksi penipuan, fitur identitas dan fitur transaksi masing-masing dimuat dengan menggunakanload_feature_definitions, dan fungsi ini secara otomatis mendeteksi tipe data dari setiap kolom data. Untuk pengembang yang menggunakan skema daripada deteksi otomatis, lihat contoh Ekspor Grup Fitur dari Data Wrangler untuk kode yang menunjukkan cara memuat skema, memetakannya, dan menambahkannya sebagai kode FeatureDefinition yang dapat Anda gunakan untuk membuat skema. FeatureGroup Contoh ini juga mencakup AWS SDK for Python (Boto3) implementasi, yang dapat Anda gunakan sebagai pengganti SageMaker PythonSDK.

identity_feature_group.load_feature_definitions(data_frame=identity_data); # output is suppressed transaction_feature_group.load_feature_definitions(data_frame=transformed_transaction_data); # output is suppressed

Langkah 6: Buat grup fitur

Pada langkah ini, Anda menggunakan create fungsi untuk membuat grup fitur. Kode berikut menunjukkan semua parameter yang tersedia. Toko online tidak dibuat secara default, jadi Anda harus mengatur ini True seolah-olah Anda ingin mengaktifkannya. s3_uriIni adalah lokasi bucket S3 dari toko offline Anda.

# create a FeatureGroup feature_group.create(     description = "Some info about the feature group",     feature_group_name = feature_group_name,     record_identifier_name = record_identifier_name,     event_time_feature_name = event_time_feature_name,     feature_definitions = feature_definitions,     role_arn = role,     s3_uri = offline_feature_store_bucket,     enable_online_store = True,     online_store_kms_key_id = None,     offline_store_kms_key_id = None,     disable_glue_table_creation = False,     data_catalog_config = None,     tags = ["tag1","tag2"])

Kode berikut dari contoh deteksi penipuan menunjukkan create panggilan minimal untuk masing-masing dari dua grup fitur yang sedang dibuat.

identity_feature_group.create(     s3_uri=offline_feature_store_bucket,     record_identifier_name=record_identifier_name,     event_time_feature_name=event_time_feature_name,     role_arn=role,     enable_online_store=True ) transaction_feature_group.create(     s3_uri=offline_feature_store_bucket,     record_identifier_name=record_identifier_name,     event_time_feature_name=event_time_feature_name,     role_arn=role,     enable_online_store=True )

Saat Anda membuat grup fitur, dibutuhkan waktu untuk memuat data, dan Anda harus menunggu hingga grup fitur dibuat sebelum Anda dapat menggunakannya. Anda dapat memeriksa status menggunakan metode berikut.

status = feature_group.describe().get("FeatureGroupStatus")

Saat grup fitur sedang dibuat, Anda menerima Creating sebagai tanggapan. Ketika langkah ini telah selesai dengan sukses, jawabannya adalahCreated. Status lain yang mungkin adalahCreateFailed,Deleting, atauDeleteFailed.

Langkah 7: Bekerja dengan grup fitur

Setelah menyiapkan grup fitur, Anda dapat melakukan salah satu tugas berikut:

Jelaskan grup fitur

Anda dapat mengambil informasi tentang grup fitur Anda dengan describe fungsi tersebut.

feature_group.describe()

Daftar grup fitur

Anda dapat mencantumkan semua grup fitur Anda dengan list_feature_groups fungsi tersebut.

sagemaker_client.list_feature_groups()

Menempatkan catatan dalam grup fitur

Anda dapat menggunakan ingest fungsi ini untuk memuat data fitur Anda. Anda meneruskan bingkai data data fitur, mengatur jumlah pekerja, dan memilih untuk menunggu kembali atau tidak. Contoh berikut menunjukkan menggunakan ingest fungsi.

feature_group.ingest(     data_frame=feature_data, max_workers=3, wait=True )

Untuk setiap grup fitur yang Anda miliki, jalankan ingest fungsi pada data fitur yang ingin Anda muat.

Mendapatkan catatan dari grup fitur

Anda dapat menggunakan get_record fungsi untuk mengambil data untuk fitur tertentu dengan pengenal catatannya. Contoh berikut menggunakan contoh identifier untuk mengambil catatan.

record_identifier_value = str(2990130) featurestore_runtime.get_record(FeatureGroupName=transaction_feature_group_name, RecordIdentifierValueAsString=record_identifier_value)

Contoh respons dari contoh deteksi penipuan:

... 'Record': [{'FeatureName': 'TransactionID', 'ValueAsString': '2990130'},   {'FeatureName': 'isFraud', 'ValueAsString': '0'},   {'FeatureName': 'TransactionDT', 'ValueAsString': '152647'},   {'FeatureName': 'TransactionAmt', 'ValueAsString': '75.0'},   {'FeatureName': 'ProductCD', 'ValueAsString': 'H'},   {'FeatureName': 'card1', 'ValueAsString': '4577'}, ...

Hasilkan perintah sarang DDL

FeatureStoreKelas SageMaker Python SDK juga menyediakan fungsionalitas untuk menghasilkan perintah DDL Hive. Skema tabel dihasilkan berdasarkan definisi fitur. Kolom dinamai setelah nama fitur dan tipe data disimpulkan berdasarkan jenis fitur.

print(feature_group.as_hive_ddl())

Contoh output:

CREATE EXTERNAL TABLE IF NOT EXISTS sagemaker_featurestore.identity-feature-group-27-19-33-00 (   TransactionID INT   id_01 FLOAT   id_02 FLOAT   id_03 FLOAT   id_04 FLOAT  ...

Membangun dataset pelatihan

Toko Fitur secara otomatis membangun sebuah AWS Glue katalog data saat Anda membuat grup fitur dan Anda dapat menonaktifkannya jika Anda mau. Berikut ini menjelaskan cara membuat kumpulan data pelatihan tunggal dengan nilai fitur dari grup fitur identitas dan transaksi yang dibuat sebelumnya dalam topik ini. Selain itu, berikut ini menjelaskan cara menjalankan kueri Amazon Athena untuk menggabungkan data yang disimpan di toko offline dari grup fitur identitas dan transaksi.

Untuk memulai, buat kueri Athena menggunakan athena_query() grup fitur identitas dan transaksi. `table_name` adalah AWS Glue tabel yang dibuat secara otomatis oleh Feature Store.

identity_query = identity_feature_group.athena_query() transaction_query = transaction_feature_group.athena_query() identity_table = identity_query.table_name transaction_table = transaction_query.table_name

Tulis dan jalankan kueri Athena

Anda menulis kueri menggunakan SQL grup fitur ini, lalu jalankan kueri dengan .run() perintah dan tentukan lokasi bucket Amazon S3 agar kumpulan data disimpan di sana.

# Athena query query_string = 'SELECT * FROM "'+transaction_table+'" LEFT JOIN "'+identity_table+'" ON "'+transaction_table+'".transactionid = "'+identity_table+'".transactionid' # run Athena query. The output is loaded to a Pandas dataframe. dataset = pd.DataFrame() identity_query.run(query_string=query_string, output_location='s3://'+default_s3_bucket_name+'/query_results/') identity_query.wait() dataset = identity_query.as_dataframe()

Dari sini Anda dapat melatih model menggunakan kumpulan data ini dan kemudian melakukan inferensi.

Hapus grup fitur

Anda dapat menghapus grup fitur dengan delete fungsi tersebut.

feature_group.delete()

Contoh kode berikut adalah dari contoh deteksi penipuan.

identity_feature_group.delete() transaction_feature_group.delete()

Untuk informasi selengkapnya, lihat Menghapus grup fitur API.