Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tutorial: Membangun model klasifikasi multi-kelas
Dalam tutorial ini, Anda menggunakan Amazon Redshift ML untuk membuat model pembelajaran mesin yang memecahkan masalah klasifikasi multi-kelas. Algoritma klasifikasi multi-kelas mengklasifikasikan titik data menjadi salah satu dari tiga kelas atau lebih. Kemudian, Anda menerapkan kueri menggunakan SQL fungsi yang dihasilkan CREATE MODEL perintah.
Anda dapat menggunakan CREATE MODEL perintah untuk mengekspor data pelatihan, melatih model, mengimpor model, dan menyiapkan fungsi prediksi Amazon Redshift. Gunakan CREATE MODEL operasi untuk menentukan data pelatihan baik sebagai tabel atau SELECT pernyataan.
Untuk mengikuti tutorial, Anda menggunakan dataset publik E-Commerce Sales Forecast
Contoh kasus penggunaan
Anda dapat memecahkan masalah klasifikasi multi-kelas lainnya dengan Amazon Redshift ML, seperti memprediksi produk terlaris dari lini produk. Anda juga dapat memprediksi buah mana yang terkandung dalam gambar, seperti memilih apel atau pir atau jeruk.
Tugas
-
Prasyarat
-
Langkah 1: Muat data dari Amazon S3 ke Amazon Redshift
-
Langkah 2: Buat model pembelajaran mesin
-
Langkah 3: Lakukan prediksi dengan model
Prasyarat
Untuk menyelesaikan tutorial ini, Anda harus menyelesaikan pengaturan Administratif untuk Amazon Redshift Ml.
Langkah 1: Muat data dari Amazon S3 ke Amazon Redshift
Gunakan editor kueri Amazon Redshift v2 untuk menjalankan kueri berikut. Kueri ini memuat data sampel ke Amazon Redshift.
-
Query berikut membuat tabel bernama
ecommerce_sales
.CREATE TABLE IF NOT EXISTS ecommerce_sales ( invoiceno VARCHAR(30), stockcode VARCHAR(30), description VARCHAR(60), quantity DOUBLE PRECISION, invoicedate VARCHAR(30), unitprice DOUBLE PRECISION, customerid BIGINT, country VARCHAR(25) );
-
Kueri berikut menyalin data sampel dari dataset E-Commerce Sales Forecast
ke dalam ecommerce_sales
tabel.COPY ecommerce_sales FROM 's3://redshift-ml-multiclass/ecommerce_data.txt' IAM_ROLE default DELIMITER '\t' IGNOREHEADER 1 REGION 'us-east-1' MAXERROR 100;
Membagi data
Saat Anda membuat model di Amazon Redshift ML, SageMaker secara otomatis membagi data Anda menjadi set pelatihan dan pengujian, sehingga SageMaker dapat menentukan akurasi model. Dengan memisahkan data secara manual pada langkah ini, Anda akan dapat memverifikasi keakuratan model dengan mengalokasikan set prediksi tambahan.
Gunakan SQL pernyataan berikut untuk membagi data menjadi tiga set untuk pelatihan, validasi, dan prediksi.
--creates table with all data CREATE TABLE ecommerce_sales_data AS ( SELECT t1.stockcode, t1.description, t1.invoicedate, t1.customerid, t1.country, t1.sales_amt, CAST(RANDOM() * 100 AS INT) AS data_group_id FROM ( SELECT stockcode, description, invoicedate, customerid, country, SUM(quantity * unitprice) AS sales_amt FROM ecommerce_sales GROUP BY 1, 2, 3, 4, 5 ) t1 ); --creates training set CREATE TABLE ecommerce_sales_training AS ( SELECT a.customerid, a.country, a.stockcode, a.description, a.invoicedate, a.sales_amt, (b.nbr_months_active) AS nbr_months_active FROM ecommerce_sales_data a INNER JOIN ( SELECT customerid, COUNT( DISTINCT( DATE_PART(y, CAST(invoicedate AS DATE)) || '-' || LPAD( DATE_PART(mon, CAST(invoicedate AS DATE)), 2, '00' ) ) ) AS nbr_months_active FROM ecommerce_sales_data GROUP BY 1 ) b ON a.customerid = b.customerid WHERE a.data_group_id < 80 ); --creates validation set CREATE TABLE ecommerce_sales_validation AS ( SELECT a.customerid, a.country, a.stockcode, a.description, a.invoicedate, a.sales_amt, (b.nbr_months_active) AS nbr_months_active FROM ecommerce_sales_data a INNER JOIN ( SELECT customerid, COUNT( DISTINCT( DATE_PART(y, CAST(invoicedate AS DATE)) || '-' || LPAD( DATE_PART(mon, CAST(invoicedate AS DATE)), 2, '00' ) ) ) AS nbr_months_active FROM ecommerce_sales_data GROUP BY 1 ) b ON a.customerid = b.customerid WHERE a.data_group_id BETWEEN 80 AND 90 ); --creates prediction set CREATE TABLE ecommerce_sales_prediction AS ( SELECT customerid, country, stockcode, description, invoicedate, sales_amt FROM ecommerce_sales_data WHERE data_group_id > 90);
Langkah 2: Buat model pembelajaran mesin
Pada langkah ini, Anda menggunakan CREATE MODEL pernyataan untuk membuat model pembelajaran mesin Anda menggunakan klasifikasi multi-kelas.
Kueri berikut membuat model klasifikasi multi-kelas dengan set pelatihan menggunakan CREATE MODEL operasi. Ganti amzn-s3-demo-bucket dengan bucket Amazon S3 Anda sendiri.
CREATE MODEL ecommerce_customer_activity FROM ( SELECT customerid, country, stockcode, description, invoicedate, sales_amt, nbr_months_active FROM ecommerce_sales_training ) TARGET nbr_months_active FUNCTION predict_customer_activity IAM_ROLE default PROBLEM_TYPE MULTICLASS_CLASSIFICATION SETTINGS ( S3_BUCKET 'amzn-s3-demo-bucket', S3_GARBAGE_COLLECT OFF );
Dalam kueri ini, Anda menentukan jenis masalah sebagaiMulticlass_Classification
. Target yang Anda prediksi untuk model tersebut adalahnbr_months_active
. Ketika SageMaker selesai melatih model, itu menciptakan fungsipredict_customer_activity
, yang akan Anda gunakan untuk membuat prediksi di Amazon Redshift.
Tampilkan status pelatihan model (opsional)
Anda dapat menggunakan SHOW MODEL perintah untuk mengetahui kapan model Anda siap.
Gunakan kueri berikut untuk mengembalikan berbagai metrik model, termasuk status model dan akurasi.
SHOW MODEL ecommerce_customer_activity;
Ketika model siap, output dari operasi sebelumnya harus menunjukkan bahwa Model State
adalahReady
. Berikut ini adalah contoh output dari SHOW MODEL operasi.
+--------------------------+-----------------------------------------------------------------------------------------------+ | Model Name | ecommerce_customer_activity | +--------------------------+-----------------------------------------------------------------------------------------------+ | Schema Name | public | | Owner | awsuser | | Creation Time | Fri, 17.06.2022 19:02:15 | | Model State | READY | | Training Job Status | MaxAutoMLJobRuntimeReached | | validation:accuracy | 0.991280 | | Estimated Cost | 7.897689 | | | | | TRAINING DATA: | | | Query | SELECT CUSTOMERID, COUNTRY, STOCKCODE, DESCRIPTION, INVOICEDATE, SALES_AMT, NBR_MONTHS_ACTIVE | | | FROM ECOMMERCE_SALES_TRAINING | | Target Column | NBR_MONTHS_ACTIVE | | | | | PARAMETERS: | | | Model Type | xgboost | | Problem Type | MulticlassClassification | | Objective | Accuracy | | AutoML Job Name | redshiftml-20220617190215268770 | | Function Name | predict_customer_activity | | Function Parameters | customerid country stockcode description invoicedate sales_amt | | Function Parameter Types | int8 varchar varchar varchar varchar float8 | | IAM Role | default-aws-iam-role | | S3 Bucket | amzn-s3-demo-bucket | | Max Runtime | 5400 | +--------------------------+-----------------------------------------------------------------------------------------------+
Langkah 3: Lakukan prediksi dengan model
Kueri berikut menunjukkan pelanggan mana yang memenuhi syarat untuk program loyalitas pelanggan Anda. Jika model memprediksi bahwa pelanggan akan aktif setidaknya selama tujuh bulan, maka model memilih pelanggan untuk program loyalitas.
SELECT customerid, predict_customer_activity( customerid, country, stockcode, description, invoicedate, sales_amt ) AS predicted_months_active FROM ecommerce_sales_prediction WHERE predicted_months_active >= 7 GROUP BY 1, 2 LIMIT 10;
Jalankan kueri prediksi terhadap data validasi (opsional)
Jalankan kueri prediksi berikut terhadap data validasi untuk melihat tingkat akurasi model.
SELECT CAST(SUM(t1.match) AS decimal(7, 2)) AS predicted_matches, CAST(SUM(t1.nonmatch) AS decimal(7, 2)) AS predicted_non_matches, CAST(SUM(t1.match + t1.nonmatch) AS decimal(7, 2)) AS total_predictions, predicted_matches / total_predictions AS pct_accuracy FROM ( SELECT customerid, country, stockcode, description, invoicedate, sales_amt, nbr_months_active, predict_customer_activity( customerid, country, stockcode, description, invoicedate, sales_amt ) AS predicted_months_active, CASE WHEN nbr_months_active = predicted_months_active THEN 1 ELSE 0 END AS match, CASE WHEN nbr_months_active <> predicted_months_active THEN 1 ELSE 0 END AS nonmatch FROM ecommerce_sales_validation )t1;
Memprediksi berapa banyak pelanggan yang melewatkan entri (opsional)
Kueri berikut membandingkan jumlah pelanggan yang diprediksi aktif hanya selama 5 atau 6 bulan. Model memprediksi bahwa pelanggan ini akan kehilangan program loyalitas. Kueri kemudian membandingkan jumlah yang hampir tidak ketinggalan program dengan nomor yang diperkirakan memenuhi syarat untuk program loyalitas. Kueri ini dapat digunakan untuk menginformasikan keputusan apakah akan menurunkan ambang batas untuk program loyalitas. Anda juga dapat menentukan apakah ada sejumlah besar pelanggan yang diperkirakan hampir tidak ketinggalan program. Anda kemudian dapat mendorong pelanggan tersebut untuk meningkatkan aktivitas mereka untuk mendapatkan keanggotaan program loyalitas.
SELECT predict_customer_activity( customerid, country, stockcode, description, invoicedate, sales_amt ) AS predicted_months_active, COUNT(customerid) FROM ecommerce_sales_prediction WHERE predicted_months_active BETWEEN 5 AND 6 GROUP BY 1 ORDER BY 1 ASC LIMIT 10) UNION (SELECT NULL AS predicted_months_active, COUNT (customerid) FROM ecommerce_sales_prediction WHERE predict_customer_activity( customerid, country, stockcode, description, invoicedate, sales_amt ) >=7);
Topik terkait
Untuk informasi selengkapnya tentang Amazon Redshift ML, lihat dokumentasi berikut:
Untuk informasi selengkapnya tentang pembelajaran mesin, lihat dokumentasi berikut: