Blog AWS Indonesia

Keterlibatan Pengguna Secara Prediktif Menggunakan Amazon Pinpoint dan Amazon Personalize

Note: Tulisan ini ditulis oleh John Burry, seorang Solution Architect dari tim AWS Customer Engagement.

Keterlibatan Pengguna secara Prediktif atau Predictive User Engagement (PUE) mengacu pada integrasi pembelajaran mesin (machine learning / ML) dan layanan-layanan yang berinteraksi dengan pelanggan. Dengan melakukan implementasi sebuah solusi PUE, Anda dapat menggabungkan prediksi berbasis pembelajaran dengan notifikasi langsung dan analisa perilaku pelanggan Anda.

Blog ini menunjukkan pada Anda bagaimana cara menyiapkan sebuah solusi PUE dengan menggunakan Amazon Pinpoint dan Amazon Personalize. Keuntungan utama dari tulisan ini adalah Anda dapat melakukan implementasi solusi ini bahkan jika Anda sebelumnya tidak punya pengalaman dengan pembelajaran mesin. Dengan mengikuti langkah-langkah yang disajikan dalam blog ini, Anda akan mampu membangun model anda sendiri di layanan Personalize, mengintegrasikannya dengan Pinpoint, dan mulai mengirimkan pesan yang dipersonalisasi untuk pelanggan anda.

Menggunakan Solusi AWS

Solusi ini tersedia sebagai AWS Solutions yang resmi. Untuk informasi lebih lanjut silahkan kunjungi halaman Predictive User Engagement pada laman AWS Solutions.

Templat CloudFormation di Solution tidak termasuk data untuk pelatihan ML. Setelah Anda menerapkan templat CloudFormation, Anda dapat menyelesaikan langkah-langkah dibawah untuk menciptakan sebuah model ML yang bisa anda gunakan untuk keperluan demonstrasi.

Persiapan

Sebelum menjalankan langkah-langkah dalam tulisan ini Anda perlu menyiapkan hal-hal berikut:

  • Membuat pengguna admin di Amazon Identity and Account Management (IAM). Untuk informasi lebih lanjut lihat Creating Your First IAM Admin User and Group di Panduan Pengguna IAM. Anda perlu memilih kredensial pengguna ini sewaktu Anda menyiapkan AWS Command Line Interface.
  • Pasang Python 3 dan pip package manager. Python 3 terinstal secara standar pada versi Linux dan macOS terbaru. Jika belum terinstall di komputer anda, Anda dapat mengunduh installer dari halaman web Python.
  • Gunakan pip untuk memasang modul-modul berikut:
    • awscli
    • boto3
    • jupyter
    • matplotlib
    • sklearn
    • sagemaker

    Untuk informasi lebih lanjut mengenai instalasi modul, lihat Installing Python Modules di dokumentasi Python 3.X .

  • Lakukan konfigurasi AWS Command Line Interface (AWS CLI). Sewaktu proses konfigurasi, Anda harus memilih region AWS standar. Solusi ini menggunakan Amazon Sagemaker untuk membangun model ML, maka Region yang Anda pilih harus region yang mendukung Amazon Sagemaker. Untuk daftar lengkap region yang mendukung Sagemaker, lihat AWS Service Endpoints pada AWS General Reference. Untuk informasi lebih lanjut tentang menyiapkan AWS CLI, lihat Configuring the AWS CLI di Panduan Pengguna AWS Command Line Interface
  • .Install Git. Git telah terinstall secara standar pada banyak versi Linux dan macOS. Jika Git belum terinstal di komputer anda, Anda dapat mengunduh installer dari halaman web Git.

Langkah 1: Buat Projek Amazon Pinpoint

Pada bagian ini, Anda membuat dan melakukan konfigurasi sebuah projek di Amazon Pinpoint. Projek ini berisi semua pelanggan yang akan kita sasar, dan juga data rekomendasi yang terkait dengan tiap pelanggan. Nanti, kita akan menggunakan data ini untuk menciptakan segmentasi dan kampanye.

Untuk menyiapkan projek Amazon Pinpoint

  1. Masuk ke konsol Amazon Pinpoint di http://console.aws.amazon.com/pinpoint/.
  2. Pada halaman All projects, pilih Create a project. Masukan nama projek dan kemudian pilih Create.
  3. Pada halaman Configure features, dibawah SMS and voice, pilih Configure.
  4. Di bawah General settings, pilih Enable the SMS channel for this project, dan kemudian pilih Save changes.
  5. Pada panel navigasi, di bawah Settings, pilih General settings. Di bagian Project details, salin nilai yang ada dibawah Project ID. Anda akan membutuhkan nilai ini nanti.

Langkah 2: Buat Titik Akhir (Endpoint)

Di Amazon Pinpoint, sebuah endpoint merepresentasikan sebuah metode spesifik untuk menghubungi pelanggan, misalnya alamat surel (untuk pesan surel) atau nomor telepon mereka (untuk pesan SMS). Endpoint juga bisa berisi atribut khusus, dan Anda bisa melakukan asosiasi beberapa endpoint dengan seorang pelanggan. Dalam contoh ini, kita menggunakan atribut-atribut ini untuk menyimpan data rekomendasi yang kita terima dari Amazon Personalize.

Di bagian ini, kita membuat seorang user dan sebuah endpoint baru dengan menggunakan AWS CLI. Kita akan menggunakan endpoint ini untuk menguji pengiriman SMS, dan untuk menguji rekomendasi yang kita terima dari Personalize.

Cara membuat endpoint menggunakan AWS CLI

  1. Di command line, masukan perintah berikut:
    aws pinpoint update-endpoint --application-id <project-id> \
    --endpoint-id 12456 --endpoint-request "Address='<mobile-number>', \
    ChannelType='SMS',User={UserAttributes={recommended_items=['none']},UserId='12456'}"

    Pada contoh diatas, ganti <project-id> dengan nilai Project ID Amazon Pinpoint yang Anda salin pada Langkah 1. Ganti <mobile-number> dengan nomor telepon Anda, mengikuti format format E.164 (contoh, +12065550142).

Perhatikan bahwa endpoint ini berisi UserId dan EndpointId dengan nilai 12456 secara hard-coded. ID ini cocok dengan ID yang akan kita buat nanti sewaktu kita membuat set data Personalize.

Langkah 3: Membuat Segmen dan Kampanye di Amazon Pinpoint

Setelah kita memiliki sebuah endpoint, kita perlu menambahkannya ke sebuah segmen supaya kita bisa menggunakannya dalam sebuah kampanye. Dengan mengirimkan sebuah kampanye, kita bisa melakukan verifikasi bahwa projek Pinpoint kita telah terkonfigurasi dengan benar, dan bahwa kita telah membuat endpoint dengan benar.

Cara membuat segmen dan kampanye

  1. Buka konsol Pinpoint di http://console.aws.amazon.com/pinpoint, kemudian pilih projek yang telah Anda buat di Langkah 1.
  2. Di panel navigasi, pilih Segments, kemudian pilih Create a segment.
  3. Beri nama segmen “No recommendations”. Dibawah Segment group 1, pada menu Add a filter, pilih Filter by user.
  4. Pada menu Choose a user attribute, pilih recommended-items. Ubah nilai filter ke “none”.
  5. Pastikan bahwa bagian estimasi Segmen menunjukan bahwa ada satu buah endpoint yang tersedia, kemudian pilih Create segment.
  6. Pada panel navigasi, pilih Campaigns, kemudian pilih Create a campaign.
  7. Beri nama kampanye “SMS to users with no recommendations”. Dibawah Choose a channel for this campaign, pilih SMS, kemudian pilih Next.
  8. Pada halaman Choose a segment, pilih segmen “No recommendations” yang baru anda buat, kemudian pilih Next.
  9. Dalam penyunting pesan, ketikkan sebuah pesan percobaan, kemudian pilih Next.
  10. Pada halaman Choose when to send the campaign, terima nilai standar yang diberikan, dan kemudian pilih Next.
  11. Pada halaman Review and launch, pilih Launch campaign. Dalam beberapa detik, Anda akan menerima pesan teks di nomor telepon yang anda masukkan ketika membuat endpoint.

Langkah 4: Memuat data contoh ke Amazon Personalize

Sampai saat ini, kita telah selesai menyiapkan Amazon Pinpoint. Sekarang kita bisa mulai memuat data ke dalam Amazon Personalize.

Cara memuat data ke dalam Amazon Personalize

  1. Pada command line, masukkan perintah berikut untuk menyalin data contoh dan Jupyter Notebooks ke komputer Anda:
    git clone https://github.com/markproy/personalize-car-search.git
  2. Pada command line, pindah ke direktori yang berisi data yang baru Anda salin. Masukkan perintah berikut:
    jupyter notebook

    Sebuah jendela akan terbuka di peramban web Anda.

  3. Pada peramban web Anda, buka notebook pertama (01_generate_data.ipynb). Pada menu Cell, pilih Run all. Tunggu sampai perintah selesai dijalankan.
  4. Buka notebook kedua (02_make_dataset_group.ipynb). Pertama, ganti nilai variabel account_id dengan ID akun AWS anda. Lalu, pada menu Cell, pilih Run all. Langkah ini makan waktu beberapa menit. Pastikan bahwa semua perintah telah dijalankan dengan sukses sebelum anda lanjut ke langkah berikutnya.
  5. Buka notebook ketiga (03_make_campaigns.ipynb). Pertama, ganti nilai variabel account_id dengan ID akun AWS Anda. Lalu, pada menu Cell, pilih Run all. Langkah ini makan waktu beberapa menit. Pastikan bahwa semua perintah telah dijalankan dengan sukses sebelum anda lanjut ke langkah berikutnya.
  6. Buka notebook keempat (04_use_the_campaign.ipynb). Pertama, ganti nilai variabel account_id dengan ID akun AWS Anda. Lalu pada menu Cell, pilih Run all. Langkah ini makan waktu beberapa menit.
  7. Setelah notebook keempat selesai dijalankan, pilih Quit untuk mengakhiri Jupyter Notebook. Anda tidak perlu menjalankan notebook kelima untuk contoh ini.
  8. Buka konsol Amazon Personalize di http://console.aws.amazon.com/personalize. Periksa bahwa Amazon Personalize berisi sebuah dataset group bernama car-dg.
  9. Pada panel navigasi, pilih Campaigns. Pastikan isinya adalah semua kampanye berikut, dan bahwa status untuk setiap kampanye dalam status Active:
    • car-popularity-count
    • car-personalized-ranking
    • car-hrnn-metadata
    • car-sims
    • car-hrnn

Langkah 5: Membuat fungsi Lambda

Kita telah memuat data ke dalam Amazon Personalize, dan sekarang kita perlu membuat sebuah fungsi Lambda untuk memperbarui atribut endpoint di Pinpoint dengan rekomendasi yang disediakan oleh Personalize.

Versi AWS SDK untuk Python yang terdapat dalam Lambda tidak menyediakan pustaka untuk Amazon Personalize. Oleh karena itu, anda perlu mengunduh pustaka ini ke komputer anda, menyimpannya dalam file .zip, dan mengunggah seluruh paket ke Lambda.

Cara membuat fungsi Lambda

  1. Dalam sebuah penyunting teks, buat sebuah berkas baru. Masukan kode berikut.
    # Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
    #
    # This file is licensed under the Apache License, Version 2.0 (the "License").
    # You may not use this file except in compliance with the License. A copy of the
    # License is located at## http://aws.amazon.com/apache2.0/
    #
    # This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
    # OF ANY KIND, either express or implied. See the License for the specific
    # language governing permissions and limitations under the License.
    
    AWS_REGION = "<region>"
    PROJECT_ID = "<project-id>"
    CAMPAIGN_ARN = "<car-hrnn-campaign-arn>"
    USER_ID = "12456"
    endpoint_id = USER_ID
    
    from datetime import datetime
    import json
    import boto3
    import logging
    from botocore.exceptions import ClientError
    
    DATE = datetime.now()
    
    personalize           = boto3.client('personalize')
    personalize_runtime   = boto3.client('personalize-runtime')
    personalize_events    = boto3.client('personalize-events')
    pinpoint              = boto3.client('pinpoint')
    
    def lambda_handler(event, context):
        itemList = get_recommended_items(USER_ID,CAMPAIGN_ARN)
        response = update_pinpoint_endpoint(PROJECT_ID,endpoint_id,itemList)
        
        return {
            'statusCode': 200,
            'body': json.dumps('Lambda execution completed.')
        }
        
    def get_recommended_items(user_id, campaign_arn):
        response = personalize_runtime.get_recommendations(campaignArn=campaign_arn, 
                                                           userId=str(user_id), 
                                                           numResults=10)
        itemList = response['itemList']
        return itemList
        
    def update_pinpoint_endpoint(project_id,endpoint_id,itemList):
        itemlistStr = []
        
        for item in itemList:
            itemlistStr.append(item['itemId'])
    
        pinpoint.update_endpoint(
        ApplicationId=project_id,
        EndpointId=endpoint_id,
        EndpointRequest={
                            'User': {
                                'UserAttributes': {
                                    'recommended_items': 
                                        itemlistStr
                                    }
                                }
                            }
        )
        
        return

    Pada kode diatas lakukan perubahan berikut :

    • Ganti <region> dengan nama Region AWS yang akan anda pakai, seperti us-east-1.
    • Ganti <project-id> dengan ID projek Amazon Pinpoint yang anda buat sebelumnya.
    • Ganti <car-hrnn-campaign-arn> dengan Amazon Resource Name (ARN) dari kampanye car-hrnn di Amazon Personalize. Anda dapat menemukan nilai ini di konsol Amazon Personalize
  2. Simpan berkas dengan nama pue-get-recs.py.
  3. Buat dan aktifkan sebuah virtual environment. Dalam virtual environment, gunakan pip untuk mengunduh versi terakhir pustaka boto3 dan botocore. Untuk prosedur lengkapnya, lihat Updating a Function with Additional Dependencies With a Virtual Environment di Panduan Pengembang AWS Lambda. Setelah itu, tambahkan file pue-get-recs.py ke berkas .zip yang berisi pustaka.
  4. Buka konsol IAM di http://console.aws.amazon.com/iam. Buat sebuah role. Tambahkan policy berikut pada role:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "logs:CreateLogStream",
                    "logs:DescribeLogGroups",
                    "logs:CreateLogGroup",
                    "logs:PutLogEvents",
                    "personalize:GetRecommendations",
                    "mobiletargeting:GetUserEndpoints",
                    "mobiletargeting:GetApp",
                    "mobiletargeting:UpdateEndpointsBatch",
                    "mobiletargeting:GetApps",
                    "mobiletargeting:GetEndpoint",
                    "mobiletargeting:GetApplicationSettings",
                    "mobiletargeting:UpdateEndpoint"
                ],
                "Resource": "*"
            }
        ]
    }
  5. Buka Lambda console at http://console.aws.amazon.com/lambda, kemudian pilih Create function.
  6. Buat sebuah fungsi Lambda baru dari awal. Pilih runtime Python 3.7. Di bawah Permissions, pilih Use an existing role, kemudian pilih role IAM yang baru Anda buat. Setelah selesai, pilih Create function.
  7. Unggah berkas .zip yang berisi fungsi Lambda dan pustaka boto3 dan botocore.
  8. Di bawah Function code, ganti isi Handler menjadi pue-get-recs.lambda_handler. Simpan perubahan yang anda buat.

Setelah Anda selesai membuat fungsi, Anda bisa mengujinya untuk memastikan fungsi tersebut disiapkan dengan benar.

Cara menguji fungsi Lambda

  1. Pada menu Select a test event, pilih Configure test events. Pada jendela Configure test events, Isi Event name, kemudian pilih Create.
  2. Pilih tombol Test untuk menjalankan fungsi.
  3. Jika fungsi berjalan dengan sukses, buka konsol Amazon Pinpoint di http://console.aws.amazon.com/pinpoint.
  4. Pada panel navigasi, pilih Segments, lalu pilih segmen “No recommendations” yang Anda buat sebelumnya. Pastikan bahwa jumlah total endpoint adalah 0. Ini nilai yang diharapkan; segmen difilter supaya hanya berisi endpoint tanpa atribut rekomendasi, tapi ketika Anda menjalankan fungsi Lambda, fungsi itu menambahkan rekomendasi ke endpoint yang diuji.

Langkah 7: Membuat segmen dan kampanye dari isi rekomendasi

Pada bagian ini, kita akan membuat sebuah segmen sasaran berdasarkan data rekomendasi yang diberikan oleh set data Personalize. Kita nanti akan menggunakan segmen tersebut untuk membuat sebuah kampanye.

Cara membuat segmen dan kampanye berdasar rekomendasi yang telah dipersonalisasi

  1. Buka konsol Amazon Pinpoint di http://console.aws.amazon.com/pinpoint. Pada halaman All projects, pilih projek yang Anda buat sebelumnya.
  2. Pada panel navigasi, pilih Segments, kemudian pilih Create a segment. Beri nama segmen baru tersebut “Recommendations for product 26304”.
  3. Dibawah Segment group 1, pada menu Add a filter, pilih Filter by user. Pada menu Choose a user attribute, pilih recommended-items. Ubah nilai filter menjadi “26304”. Pastikan bahwa bagian Segment estimate menunjukan ada sebuah endpoint yang tersedia, dan kemudian pilih Create segment.
  4. Pada panel navigasi, pilih Campaigns, kemudian pilih Create a campaign.
  5. Beri nama kampanye “SMS to users with recommendations for product 26304”. Di bawah Choose a channel for this campaign, pilih SMS, kemudian pilih Next.
  6. Pada halaman Choose a segment, pilih segmen “Recommendations for product 26304” yang baru Anda buat, kemudian pilih Next.
  7. Dalam penyunting pesan, ketikkan sebuah pesan percobaan, kemudian pilih Next.
  8. Pada halaman Choose when to send the campaign, biarkan semua nilai standar, kemudian pilih Next.
  9. Pada halaman Review and launch, pilih Launch campaign. Dalam beberapa detik, Anda akan menerima pesan teks di nomor telepon yang Anda masukkan ketika membuat endpoint.

Langkah selanjutnya

Solusi PUE anda sekarang telah siap digunakan. Dari sini, ada beberapa cara untuk melakukan penyesuaian sesuai kebutuhan anda sendiri:

  1. Tingkatkan penggunaan Anda: Jika Anda berencana untuk terus mengirimkan pesan SMS, Anda perlu minta kenaikan batas pengiriman SMS bulanan.
  2. Menggunakan kanal tambahan: Artikel ini menunjukkan proses menyiapkan sebuah kampanye SMS. Anda dapat menambahkan lebih banyak endpoint lagi – untuk kanal email atau push notification misalnya – dan mengasosiasikan kanal tersebut dengan pengguna anda. Anda kemudian dapat menciptakan segmen baru dan kampanye baru di kanal-kanal tersebut.
  3. Membangun model anda sendiri: Artikel ini menggunakan set data contoh, tetapi Amazon Personalize memudahkan Anda menyediakan data sendiri. Untuk mulai membangun model dengan Personalize, Anda harus menyediakan sebuah set data yang berisi informasi tentang pengguna anda, produk anda, dan interaksi anda. Untuk mempelajari lebih lanjut, lihat Getting Started di Panduan Pengembang Amazon Personalize.
  4. Optimisasi model anda: Anda dapat memperkaya model Anda dengan mengirimkan data interaksi dari saluran mobile, web dan kampanye Anda ke Amazon Personalize. Di Pinpoint, Anda dapat menggunakan event streaming untuk memindahakan data langsung ke S3, dan lalu menggunakan data tersebut untuk melatih ulang model Personalize anda. Untuk belajar lebih lanjut tentang streaming events, lihat Streaming App and Campaign Events di Panduan Pengguna Amazon Pinpoint.
  5. Perbarui rekomendasi anda secara berkala: Gunakan API create-campaign untuk membuat sebuah kampanye berulang. Supaya tidak mengirim pesan-pesan lama, tambahkan referensi ARN fungsi pue-get-recs ke properti hook. Dengan menyelesaikan langkah ini, Anda dapat mengatur Pinpoint untuk mengambil data rekomendasi yang paling baru setiap kali kampanye dijalankan. Untuk informasi lebih lanjut tentang bagaimana menggunakan Lambda untuk modifikasi segmen, lihat Customizing Segments with AWS Lambda dalam Panduan Pengembang Amazon Pinpoint.

Tulisan ini berasal dari artikel Predictive User Engagement using Amazon Pinpoint and Amazon Personalize yang ditulis oleh John Burry dan diterjemahkan oleh Adrianus Kurnadi.

Petra Barus

Petra Barus

Petra Novandi Barus is Developer Advocate at Amazon Web Services based in Jakarta. He is passionate in helping startups and developers in Indonesia to reinvent on behalf their customers. Prior to AWS, Petra co-founded UrbanIndo.com as CTO. The startup became the largest real-estate portal in Indonesia and then was acquired by 99.co. During that time Petra had been a happy AWS customer for 8 years. Petra is also very active in local tech communities