

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
<a name="feature-store-fraud-detection-notebook"></a>

**penting**  
Kebijakan IAM 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 kebijakan IAM memungkinkan Studio dan Studio Classic membuat sumber daya tetapi tidak mengizinkan penandaan, kesalahan "AccessDenied" dapat terjadi saat mencoba membuat sumber daya. Untuk informasi selengkapnya, lihat [Berikan izin untuk menandai sumber daya AI SageMaker](security_iam_id-based-policy-examples.md#grant-tagging-permissions).  
[AWS kebijakan terkelola untuk Amazon SageMaker AI](security-iam-awsmanpol.md)yang 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](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-featurestore/sagemaker_featurestore_fraud_detection_python_sdk.html). Kami menyarankan Anda menjalankan notebook ini di Studio Classic, instance notebook, atau Jupyter Lab karena kode dalam panduan ini konseptual dan tidak berfungsi penuh jika disalin.

Gunakan yang berikut ini untuk mengkloning [aws/ amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples) GitHub repositori, yang berisi contoh notebook.
+ **Untuk Studio Klasik**

  Peluncuran pertama Studio Classic. Anda dapat membuka Studio Classic jika Studio atau Studio Classic diaktifkan sebagai pengalaman default Anda. Untuk membuka Studio Classic, lihat[Luncurkan Amazon SageMaker Studio Classic Menggunakan Konsol Amazon SageMaker AI](studio-launch.md#studio-launch-console).

  Kloning [aws/ amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples) GitHub repositori ke Studio Classic dengan mengikuti langkah-langkah di. [Mengkloning Repositori Git di Amazon Studio Classic SageMaker](studio-tasks-git.md)
+ **Untuk instance SageMaker notebook Amazon**

  Pertama luncurkan contoh SageMaker notebook dengan mengikuti instruksi di[Akses Instans Notebook](howitworks-access-ws.md).

  Kemudian, ikuti instruksi di[Tambahkan repositori Git ke akun Amazon SageMaker AI Anda](nbi-git-resource.md).

Sekarang setelah Anda memiliki notebook contoh SageMaker AI, navigasikan ke `amazon-sagemaker-examples/sagemaker-featurestore` direktori dan buka notebook contoh [Deteksi Penipuan dengan Amazon SageMaker Feature Store](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-featurestore/sagemaker_featurestore_fraud_detection_python_sdk.html).

## Langkah 1: Siapkan sesi Toko Fitur Anda
<a name="feature-store-setup"></a>

Untuk mulai menggunakan Feature Store, buat sesi SageMaker AI, 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 default SageMaker AI dan menambahkan awalan khusus ke dalamnya.

**catatan**  
Peran yang Anda gunakan untuk menjalankan buku catatan harus memiliki kebijakan terkelola berikut yang dilampirkan padanya: `AmazonSageMakerFullAccess` dan`AmazonSageMakerFeatureStoreAccess`. Untuk informasi tentang menambahkan kebijakan ke peran IAM Anda, lihat[Menambahkan kebijakan ke peran IAM Anda](feature-store-adding-policies.md).

```
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
<a name="feature-store-load-datasets"></a>

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
<a name="feature-store-set-up-feature-groups-fraud-detection"></a>

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` dan`transaction`. 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
<a name="feature-store-set-up-record-identifier-event-time"></a>

Pada langkah ini, Anda menentukan nama pengenal catatan dan nama fitur waktu acara. Nama ini dipetakan ke kolom fitur yang sesuai dalam data Anda. Misalnya, dalam contoh deteksi penipuan, kolom yang diminati adalah`TransactionID`. `EventTime`dapat 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
<a name="feature-store-load-feature-definitions"></a>

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 menggunakan`load_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](https://docs.aws.amazon.com/sagemaker/latest/dg/data-wrangler-data-export.html#data-wrangler-data-export-feature-store) 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 untuk Python (Boto3) implementasi, yang dapat Anda gunakan alih-alih SageMaker Python SDK.

```
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
<a name="feature-store-setup-create-feature-group"></a>

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_uri`Ini 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 adalah`Created`. Status lain yang mungkin adalah`CreateFailed`,`Deleting`, atau`DeleteFailed`.

## Langkah 7: Bekerja dengan grup fitur
<a name="feature-store-working-with-feature-groups"></a>

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

**Topics**
+ [Jelaskan grup fitur](#feature-store-describe-feature-groups)
+ [Daftar grup fitur](#feature-store-list-feature-groups)
+ [Menempatkan catatan dalam grup fitur](#feature-store-put-records-feature-group)
+ [Mendapatkan catatan dari grup fitur](#feature-store-get-records-feature-group)
+ [Hasilkan perintah sarang DDL](#feature-store-generate-hive-ddl-commands-feature-group)
+ [Membangun dataset pelatihan](#feature-store-build-training-dataset)
+ [Tulis dan jalankan kueri Athena](#feature-store-write-athena-query)
+ [Hapus grup fitur](#feature-store-delete-feature-group)

### Jelaskan grup fitur
<a name="feature-store-describe-feature-groups"></a>

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

```
feature_group.describe()
```

### Daftar grup fitur
<a name="feature-store-list-feature-groups"></a>

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

```
sagemaker_client.list_feature_groups()
```

### Menempatkan catatan dalam grup fitur
<a name="feature-store-put-records-feature-group"></a>

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
<a name="feature-store-get-records-feature-group"></a>

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
<a name="feature-store-generate-hive-ddl-commands-feature-group"></a>

`FeatureStore`Kelas SageMaker Python SDK juga menyediakan fungsionalitas untuk menghasilkan perintah Hive DDL. 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
<a name="feature-store-build-training-dataset"></a>

Feature Store secara otomatis membuat katalog AWS Glue data saat Anda membuat grup fitur dan Anda dapat menonaktifkannya jika diinginkan. 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
<a name="feature-store-write-athena-query"></a>

Anda menulis kueri menggunakan SQL pada 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
<a name="feature-store-delete-feature-group"></a>

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 [API Hapus grup fitur](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteFeatureGroup.html).