

 Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai Patch 198. Python yang ada UDFs akan terus berfungsi hingga 30 Juni 2026. Untuk informasi lebih lanjut, lihat [posting blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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
<a name="tutorial_multi-class_classification"></a>

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 mengimplementasikan kueri menggunakan fungsi SQL yang dihasilkan oleh perintah CREATE MODEL.

Anda dapat menggunakan perintah CREATE MODEL untuk mengekspor data pelatihan, melatih model, mengimpor model, dan menyiapkan fungsi prediksi Amazon Redshift. Gunakan operasi CREATE MODEL untuk menentukan data pelatihan baik sebagai tabel atau pernyataan SELECT.

Untuk mengikuti tutorial, Anda menggunakan dataset publik [E-Commerce Sales Forecast](https://www.kaggle.com/allunia/e-commerce-sales-forecast), yang mencakup data penjualan pengecer Inggris online. Model yang Anda hasilkan akan menargetkan pelanggan paling aktif untuk program loyalitas pelanggan khusus. Dengan klasifikasi multi-kelas, Anda dapat menggunakan model untuk memprediksi berapa bulan pelanggan akan aktif selama periode 13 bulan. Fungsi prediksi menunjuk pelanggan yang diprediksi akan aktif selama 7 bulan atau lebih untuk masuk ke program.

## Contoh kasus penggunaan
<a name="tutorial_multi-class_classification_tasks"></a>

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
<a name="tutorial_multi-class_classification_prereqs"></a>

Untuk menyelesaikan tutorial ini, Anda harus menyelesaikan [pengaturan Administratif](https://docs.aws.amazon.com/redshift/latest/dg/admin-setup.html) untuk Amazon Redshift Ml.

## Langkah 1: Muat data dari Amazon S3 ke Amazon Redshift
<a name="tutorial_multi-class_classification_step_load"></a>

Gunakan [editor kueri Amazon Redshift v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html) untuk menjalankan kueri berikut. Kueri ini memuat data sampel ke Amazon Redshift.

1. 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)
   );
   ```

1. Kueri berikut menyalin data sampel dari [dataset E-Commerce Sales Forecast](https://www.kaggle.com/allunia/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
<a name="tutorial_multi-class_classification_split_data"></a>

Saat Anda membuat model di Amazon Redshift ML, SageMaker AI secara otomatis membagi data Anda menjadi set pelatihan dan pengujian, sehingga SageMaker AI dapat menentukan akurasi model. Dengan memisahkan data secara manual pada langkah ini, Anda akan dapat memverifikasi keakuratan model dengan mengalokasikan set prediksi tambahan. 

Gunakan pernyataan SQL 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
<a name="tutorial_multi-class_classification_step_create_model"></a>

Pada langkah ini, Anda menggunakan pernyataan CREATE MODEL untuk membuat model pembelajaran mesin Anda menggunakan klasifikasi multi-kelas. 

Kueri berikut membuat model klasifikasi multi-kelas dengan set pelatihan menggunakan operasi CREATE MODEL. 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 sebagai`Multiclass_Classification`. Target yang Anda prediksi untuk model tersebut adalah`nbr_months_active`. Ketika SageMaker AI selesai melatih model, itu menciptakan fungsi`predict_customer_activity`, yang akan Anda gunakan untuk membuat prediksi di Amazon Redshift.

### Tampilkan status pelatihan model (opsional)
<a name="tutorial_multi-class_classification_show_status"></a>

Anda dapat menggunakan perintah SHOW MODEL 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` adalah`Ready`. Berikut ini adalah contoh output dari operasi SHOW MODEL.

```
+--------------------------+-----------------------------------------------------------------------------------------------+
|        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
<a name="tutorial_multi-class_classification_step_perform_predictions"></a>

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)
<a name="tutorial_multi-class_classification_run_validation_prediction"></a>

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)
<a name="tutorial_multi-class_classification_run_missed_entries"></a>

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 akan melewatkan 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
<a name="tutorial_multi-class_classification_related_topics"></a>

Untuk informasi selengkapnya tentang Amazon Redshift ML, lihat dokumentasi berikut:
+ [Biaya untuk menggunakan Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)
+ [OPERASI BUAT MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html)
+ [Fungsi EXPLAIN\$1MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_explain_model_function.html)

Untuk informasi selengkapnya tentang pembelajaran mesin, lihat dokumentasi berikut:
+ [Ikhtisar pembelajaran mesin](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning_overview.html)
+ [Pembelajaran mesin untuk pemula dan ahli](https://docs.aws.amazon.com/redshift/latest/dg/novice_expert.html)
+ [Apa Keadilan dan Penjelasan Model untuk Prediksi Machine Learning?](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html)