Membuat kumpulan data dari grup fitur Anda - Amazon SageMaker

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

Membuat kumpulan data dari grup fitur Anda

Setelah grup fitur Feature Store dibuat di toko offline, Anda dapat memilih untuk menggunakan metode berikut untuk mendapatkan data Anda:

  • Menggunakan Amazon SageMaker Python SDK

  • Menjalankan SQL kueri di Amazon Athena

penting

Feature Store membutuhkan data untuk didaftarkan dalam katalog AWS Glue data. Secara default, Feature Store secara otomatis membuat katalog AWS Glue data saat Anda membuat grup fitur.

Setelah Anda membuat grup fitur untuk toko offline Anda dan mengisinya dengan data, Anda dapat membuat kumpulan data dengan menjalankan kueri atau menggunakan SDK untuk bergabung dengan data yang disimpan di toko offline dari grup fitur yang berbeda. Anda juga dapat bergabung dengan grup fitur ke kerangka data panda tunggal. Anda dapat menggunakan Amazon Athena untuk menulis dan menjalankan SQL kueri.

catatan

Untuk memastikan bahwa data Anda mutakhir, Anda dapat mengatur AWS Glue crawler agar berjalan sesuai jadwal.

Untuk menyiapkan AWS Glue crawler, tentukan IAM peran yang digunakan crawler untuk mengakses bucket Amazon S3 toko offline. Untuk informasi selengkapnya, lihat Membuat IAM peran.

Untuk informasi lebih lanjut tentang cara menggunakan AWS Glue dan Athena untuk membangun kumpulan data pelatihan untuk pelatihan model dan inferensi, lihat. Gunakan Feature Store dengan SDK untuk Python (Boto3)

Menggunakan Amazon SageMaker Python SDK untuk mendapatkan data dari grup fitur

Anda dapat menggunakan Feature Store APIs untuk membuat kumpulan data dari grup fitur Anda. Ilmuwan data membuat kumpulan data ML untuk pelatihan dengan mengambil data fitur ML dari satu atau beberapa grup fitur di toko offline. Gunakan create_dataset() fungsi untuk membuat dataset. Anda dapat menggunakan SDK untuk melakukan hal berikut:

  • Buat kumpulan data dari beberapa grup fitur.

  • Buat kumpulan data dari grup fitur dan bingkai data panda.

Secara default, Feature Store tidak menyertakan catatan yang telah Anda hapus dari kumpulan data. Itu juga tidak termasuk catatan duplikat. Rekaman duplikat memiliki ID rekaman dan nilai stempel waktu di kolom waktu acara.

Sebelum Anda menggunakan SDK untuk membuat dataset, Anda harus memulai SageMaker sesi. Gunakan kode berikut untuk memulai sesi.

import boto3 from sagemaker.session import Session from sagemaker.feature_store.feature_store import FeatureStore region = boto3.Session().region_name boto_session = boto3.Session(region_name=region) 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, ) feature_store = FeatureStore(feature_store_session)

Kode berikut menunjukkan contoh pembuatan dataset dari beberapa grup fitur. Cuplikan kode berikut menggunakan contoh grup fitur”base_fg_name", "first_fg_name“, dan”second_fg_name“, yang mungkin tidak ada atau memiliki skema yang sama di dalam Toko Fitur Anda. Disarankan untuk mengganti grup fitur ini dengan grup fitur yang ada di dalam Toko Fitur Anda. Untuk informasi tentang cara membuat grup fitur, lihatLangkah 3: Buat grup fitur.

from sagemaker.feature_store.feature_group import FeatureGroup s3_bucket_name = "offline-store-sdk-test" base_fg_name = "base_fg_name" base_fg = FeatureGroup(name=base_fg_name, sagemaker_session=feature_store_session) first_fg_name = "first_fg_name" first_fg = FeatureGroup(name=first_fg_name, sagemaker_session=feature_store_session) second_fg_name = "second_fg_name" second_fg = FeatureGroup(name=second_fg_name, sagemaker_session=feature_store_session) feature_store = FeatureStore(feature_store_session) builder = feature_store.create_dataset( base=base_fg, output_path=f"s3://{amzn-s3-demo-bucket1}", ).with_feature_group(first_fg ).with_feature_group(second_fg, "base_id", ["base_feature_1"])

Kode berikut menunjukkan contoh membuat dataset dari beberapa grup fitur dan kerangka data panda.

base_data = [[1, 187512346.0, 123, 128], [2, 187512347.0, 168, 258], [3, 187512348.0, 125, 184], [1, 187512349.0, 195, 206]] base_data_df = pd.DataFrame( base_data, columns=["base_id", "base_time", "base_feature_1", "base_feature_2"] ) builder = feature_store.create_dataset( base=base_data_df, event_time_identifier_feature_name='base_time', record_identifier_feature_name='base_id', output_path=f"s3://{s3_bucket_name}" ).with_feature_group(first_fg ).with_feature_group(second_fg, "base_id", ["base_feature_1"])

Feature Store APIs memberi Anda metode pembantu untuk create_dataset fungsi tersebut. Anda dapat menggunakannya untuk melakukan hal berikut:

  • Buat kumpulan data dari beberapa grup fitur.

  • Buat kumpulan data dari beberapa grup fitur dan kerangka data panda.

  • Buat kumpulan data dari satu grup fitur dan kerangka data panda.

  • Buat kumpulan data menggunakan gabungan akurat titik waktu di mana catatan dalam grup fitur yang digabungkan mengikuti secara berurutan.

  • Buat kumpulan data dengan catatan duplikat, alih-alih mengikuti perilaku default fungsi.

  • Buat kumpulan data dengan catatan yang dihapus, alih-alih mengikuti perilaku default fungsi.

  • Buat kumpulan data untuk periode waktu yang Anda tentukan.

  • Simpan dataset sebagai CSV file.

  • Simpan dataset sebagai kerangka data panda.

Grup fitur dasar adalah konsep penting untuk bergabung. Grup fitur dasar adalah grup fitur yang memiliki grup fitur lain atau kerangka data panda yang bergabung dengannya. Untuk setiap dataset

Anda dapat menambahkan metode opsional berikut ke create_dataset fungsi untuk mengonfigurasi cara Anda membuat kumpulan data:

  • with_feature_group— Melakukan penggabungan batin antara grup fitur dasar dan grup fitur lain menggunakan pengenal catatan dan nama fitur target di grup fitur dasar. Berikut ini memberikan informasi tentang parameter yang Anda tentukan:

    • feature_group— Grup fitur yang Anda ikuti.

    • target_feature_name_in_base— Nama fitur di grup fitur dasar yang Anda gunakan sebagai kunci dalam bergabung. Pengenal rekaman di grup fitur lain adalah kunci lain yang digunakan Feature Store dalam bergabung.

    • included_feature_names— Daftar string yang mewakili nama fitur dari grup fitur dasar. Anda dapat menggunakan bidang untuk menentukan fitur yang ingin Anda sertakan dalam kumpulan data.

    • feature_name_in_target— String opsional yang mewakili fitur dalam grup fitur target yang akan dibandingkan dengan fitur target di grup fitur dasar.

    • join_comparator— Opsional JoinComparatorEnum mewakili komparator yang digunakan saat bergabung dengan fitur target di grup fitur dasar dan fitur dalam grup fitur target. JoinComparatorEnumNilai-nilai ini dapat GREATER_THANGREATER_THAN_OR_EQUAL_TO,,LESS_THAN,LESS_THAN_OR_EQUAL_TO, NOT_EQUAL_TO atau secara EQUALS default.

    • join_type— Opsional JoinTypeEnum mewakili jenis gabungan antara kelompok fitur dasar dan target. JoinTypeEnumNilai-nilai ini dapatLEFT_JOIN,RIGHT_JOIN,FULL_JOIN, CROSS_JOIN atau secara INNER_JOIN default.

  • with_event_time_range— Membuat kumpulan data menggunakan rentang waktu acara yang Anda tentukan.

  • as_of— Membuat kumpulan data hingga stempel waktu yang Anda tentukan. Misalnya, jika Anda menentukan datetime(2021, 11, 28, 23, 55, 59, 342380) sebagai nilainya, buat kumpulan data hingga 28 November 2021.

  • point_time_accurate_join— Membuat kumpulan data di mana semua nilai waktu acara dari grup fitur dasar kurang dari semua nilai waktu acara grup fitur atau kerangka data panda yang Anda ikuti.

  • include_duplicated_records— Menyimpan nilai duplikat dalam grup fitur.

  • include_deleted_records— Menyimpan nilai yang dihapus dalam grup fitur.

  • with_number_of_recent_records_by_record_identifier— Bilangan bulat yang Anda tentukan untuk menentukan berapa banyak catatan terbaru yang muncul di kumpulan data.

  • with_number_of_records_by_record_identifier— Bilangan bulat yang mewakili berapa banyak catatan yang muncul dalam dataset.

Setelah mengonfigurasi kumpulan data, Anda dapat menentukan output menggunakan salah satu metode berikut:

  • to_csv_file— Menyimpan dataset sebagai CSV file.

  • to_dataframe— Menyimpan dataset sebagai kerangka data panda.

Anda dapat mengambil data yang datang setelah periode waktu tertentu. Kode berikut mengambil data setelah stempel waktu.

fg1 = FeatureGroup("example-feature-group-1") feature_store.create_dataset( base=fg1, output_path="s3://example-S3-path" ).with_number_of_records_from_query_results(5).to_csv_file()

Anda juga dapat mengambil data dari periode waktu tertentu. Anda dapat menggunakan kode berikut untuk mendapatkan data untuk rentang waktu tertentu:

fg1 = FeatureGroup("fg1") feature_store.create_dataset( base=fg1, output_path="example-S3-path" ).with_event_time_range( datetime(2021, 11, 28, 23, 55, 59, 342380), datetime(2020, 11, 28, 23, 55, 59, 342380) ).to_csv_file() #example time range specified in datetime functions

Anda mungkin ingin menggabungkan beberapa grup fitur ke kerangka data panda di mana nilai waktu acara grup fitur terjadi selambat-lambatnya waktu peristiwa bingkai data. Gunakan kode berikut sebagai template untuk membantu Anda melakukan join.

fg1 = FeatureGroup("fg1") fg2 = FeatureGroup("fg2") events = [['2020-02-01T08:30:00Z', 6, 1], ['2020-02-02T10:15:30Z', 5, 2], ['2020-02-03T13:20:59Z', 1, 3], ['2021-01-01T00:00:00Z', 1, 4]] df = pd.DataFrame(events, columns=['event_time', 'customer-id', 'title-id']) feature_store.create_dataset( base=df, event_time_identifier_feature_name='event_time', record_identifier_feature_name='customer_id', output_path="s3://example-S3-path" ).with_feature_group(fg1, "customer-id" ).with_feature_group(fg2, "title-id" ).point_in_time_accurate_join( ).to_csv_file()

Anda juga dapat mengambil data yang datang setelah periode waktu tertentu. Kode berikut mengambil data setelah waktu yang ditentukan oleh stempel waktu dalam metode. as_of

fg1 = FeatureGroup("fg1") feature_store.create_dataset( base=fg1, output_path="s3://example-s3-file-path" ).as_of(datetime(2021, 11, 28, 23, 55, 59, 342380) ).to_csv_file() # example datetime values

Contoh kueri Amazon Athena

Anda dapat menulis kueri di Amazon Athena untuk membuat kumpulan data dari grup fitur Anda. Anda juga dapat menulis kueri yang membuat kumpulan data dari grup fitur dan kerangka data panda tunggal.

Eksplorasi Interaktif

Query ini memilih 1000 record pertama. 

SELECT * FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName> LIMIT 1000

Snapshot terbaru tanpa duplikat

Kueri ini memilih catatan non-duplikat terbaru.

SELECT * FROM     (SELECT *,          row_number()         OVER (PARTITION BY <RecordIdentiferFeatureName>     ORDER BY  <EventTimeFeatureName> desc, Api_Invocation_Time DESC, write_time DESC) AS row_num     FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName>) WHERE row_num = 1;

Snapshot terbaru tanpa duplikat dan catatan yang dihapus di toko offline

Kueri ini menyaring semua catatan yang dihapus dan memilih catatan non-duplikat dari toko offline. 

SELECT * FROM     (SELECT *,          row_number()         OVER (PARTITION BY <RecordIdentiferFeatureName>     ORDER BY  <EventTimeFeatureName> desc, Api_Invocation_Time DESC, write_time DESC) AS row_num     FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName>) WHERE row_num = 1 and  NOT is_deleted;

Perjalanan Waktu tanpa duplikat dan catatan yang dihapus di toko offline

Kueri ini menyaring catatan yang dihapus dan memilih catatan non-duplikat dari titik waktu tertentu.

SELECT * FROM     (SELECT *,          row_number()         OVER (PARTITION BY <RecordIdentiferFeatureName>     ORDER BY  <EventTimeFeatureName> desc, Api_Invocation_Time DESC, write_time DESC) AS row_num     FROM <FeatureGroup.DataCatalogConfig.DatabaseName>.<FeatureGroup.DataCatalogConfig.TableName>     where <EventTimeFeatureName> <= timestamp '<timestamp>')     -- replace timestamp '<timestamp>' with just <timestamp>  if EventTimeFeature is of type fractional WHERE row_num = 1 and NOT is_deleted