教學課程:建置客戶流失模型 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:建置客戶流失模型

在本教學課程中,您可以使用 Amazon Redshift ML 透過 CREATE MODEL 命令建立客戶流失模型,並針對使用者案例執行預測查詢。然後,您可以使用 CREATE MODEL 命令所產生的 SQL 函數來實作查詢。

您可以使用簡單的 CREATE MODEL 命令來匯出訓練資料、訓練模型、匯入模型,以及準備 Amazon Redshift 預測函數。使用 CREATE MODEL 陳述式,將訓練資料指定為資料表或 SELECT 陳述式。

此範例會使用歷史資訊來建構行動電信業者的客戶流失機器學習模型。首先, SageMaker 訓練您的機器學習模型,然後使用任意客戶的設定檔資訊測試您的模型。驗證模型後,Amazon SageMaker 將模型和預測功能部署到 Amazon Redshift。您可以使用預測函數來預測客戶是否會流失。

使用案例範例

您可以使用 Amazon Redshift ML 解決其他二進制分類問題,例如預測銷售潛在客戶是否會結案。您還可以預測金融交易是否為詐騙。

工作

  • 必要條件

  • 步驟 1:將資料從 Amazon S3 載入到 Amazon Redshift

  • 步驟 2:建立機器學習模型

  • 步驟 3:執行模型的預測

必要條件

若要完成本教學課程,您需要以下先決條件:

  • 您必須為 Amazon Redshift ML 設定一個 Amazon Redshift 叢集。若要這麼做,請使用針對 Amazon Redshift ML 管理進行叢集和組態設定的文件。

  • 您用來建立模型的 Amazon Redshift 叢集,以及用來暫存訓練資料和儲存模型成品的 Amazon S3 儲存貯體必須位於相同 AWS 區域。

  • 若要下載 SQL 命令和本文件中使用的範例資料集,請執行下列其中一項:

    • 下載 SQL 命令客戶活動檔案鮑魚檔案

    • 使用對 AWS CLI 於 Amazon S3,運行以下命令。您可以使用自己的目標路徑。

      aws s3 cp s3://redshift-downloads/redshift-ml/tutorial-scripts/redshift-ml-tutorial.sql </target/path> aws s3 cp s3://redshift-downloads/redshift-ml/customer_activity/customer_activity.csv </target/path> aws s3 cp s3://redshift-downloads/redshift-ml/abalone_xgb/abalone_xgb.csv </target/path>

步驟 1:將資料從 Amazon S3 載入到 Amazon Redshift

使用 Amazon Redshift 查詢編輯器 v2 編輯和執行查詢,以及視覺化結果。

執行下列查詢會建立名為 customer_activity 的資料表,並從 Amazon S3 擷取範例資料集。

DROP TABLE IF EXISTS customer_activity; CREATE TABLE customer_activity ( state varchar(2), account_length int, area_code int, phone varchar(8), intl_plan varchar(3), vMail_plan varchar(3), vMail_message int, day_mins float, day_calls int, day_charge float, total_charge float, eve_mins float, eve_calls int, eve_charge float, night_mins float, night_calls int, night_charge float, intl_mins float, intl_calls int, intl_charge float, cust_serv_calls int, churn varchar(6), record_date date ); COPY customer_activity FROM 's3://redshift-downloads/redshift-ml/customer_activity/' REGION 'us-east-1' IAM_ROLE default FORMAT AS CSV IGNOREHEADER 1;

步驟 2:建立機器學習模型

流失率是我們在此模型中的目標輸入。模型的所有其他輸入都是有助於建立函數以預測流失的屬性。

下列範例會使用 CREATE MODEL 作業,並使用客戶年齡、郵遞區號、支出和案例等輸入,來提供預測客戶是否處於作用中狀態的模型。在下列範例中,請將 DOC-EXAMPLE-BUCKET 取代為您的 Amazon S3 儲存貯體。

CREATE MODEL customer_churn_auto_model FROM ( SELECT state, account_length, area_code, total_charge/account_length AS average_daily_spend, cust_serv_calls/account_length AS average_daily_cases, churn FROM customer_activity WHERE record_date < '2020-01-01' ) TARGET churn FUNCTION ml_fn_customer_churn_auto IAM_ROLE default SETTINGS ( S3_BUCKET '<DOC-EXAMPLE-BUCKET>' );

上述範例中的 SELECT 查詢會建立訓練資料。TARGET 子句會指定 CREATE MODEL 操作用來學習如何預測的機器學習標籤資料欄。目標資料欄「流失率」會指出客戶是否仍然具有作用中的會員資格或已暫停會員資格。S3_BUCKET 欄位是您先前建立的 Amazon S3 儲存貯體名稱。Amazon S3 存儲桶用於在 Amazon 紅移和亞馬遜之間共享培訓數據和成品。 SageMaker其餘的資料欄是用於預測的特徵。

如需 CREATE MODEL 命令的基本使用案例的語法和特徵摘要,請參閱簡單 CREATE MODEL

新增伺服器端加密的許可 (選用)

Amazon Redshift 默認情況下使用 Amazon SageMaker 自動駕駛儀進行培訓。特別是,Amazon Redshift 會將訓練資料安全地匯出到客戶指定的 Amazon S3 儲存貯體。如果您未指定KMS_KEY_ID,資料會預設為使用伺服器端加密 SSE-S3 進行加密。

當您使用具有 AWS KMS 受管理金鑰 (SSE-MMS) 的伺服器端加密輸入時,請新增下列權限:

{ "Effect": "Allow", "Action": [ "kms:Encrypt" "kms:Decrypt" ] }

如需 Amazon SageMaker 角色的詳細資訊,請參閱 Amazon SageMaker 開發人員指南中的 Amazon SageMaker 角色

檢查模型訓練的狀態 (選擇性)

您可以使用 SHOW MODEL 命令來知道模型何時準備就緒。

使用下列操作來檢查模型的狀態。

SHOW MODEL customer_churn_auto_model;

下列為上一個操作的輸出範例。

+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Key | Value | +--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Model Name | customer_churn_auto_model | | Schema Name | public | | Owner | awsuser | | Creation Time | Tue, 14.06.2022 17:15:52 | | Model State | TRAINING | | | | | TRAINING DATA: | | | Query | SELECT STATE, ACCOUNT_LENGTH, AREA_CODE, TOTAL_CHARGE / ACCOUNT_LENGTH AS AVERAGE_DAILY_SPEND, CUST_SERV_CALLS / ACCOUNT_LENGTH AS AVERAGE_DAILY_CASES, CHURN | | | FROM CUSTOMER_ACTIVITY | | | WHERE RECORD_DATE < '2020-01-01' | | Target Column | CHURN | | | | | PARAMETERS: | | | Model Type | auto | | Problem Type | | | Objective | | | AutoML Job Name | redshiftml-20220614171552640901 | | Function Name | ml_fn_customer_churn_auto | | Function Parameters | state account_length area_code average_daily_spend average_daily_cases | | Function Parameter Types | varchar int4 int4 float8 int4 | | IAM Role | default-aws-iam-role | | S3 Bucket | DOC-EXAMPLE-BUCKET | | Max Runtime | 5400 | +--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+

模型訓練完成後,model_state 變數會變成 Model is Ready,且預測函數會變為可用。

步驟 3:執行模型的預測

您可以使用 SQL 陳述式來檢視預測模型所做的預測。在此範例中,CREATE MODEL 操作所建立的預測函數會命名為 ml_fn_customer_churn_auto。預測函數的輸入引數會對應於特徵的類型,例如 varchar 會用於 state,而整數會用於 account_length。預測函數的輸出類型與 CREATE MODEL 陳述式的 TARGET 資料欄相同。

  1. 您用了 2020-01-01 之前的資料訓練模型,因此現在您可以在測試集上使用預測功能。以下查詢顯示 2020-01-01 之後註冊的客戶是否會經歷流失的預測。

    SELECT phone, ml_fn_customer_churn_auto( state, account_length, area_code, total_charge / account_length, cust_serv_calls / account_length ) AS active FROM customer_activity WHERE record_date > '2020-01-01';
  2. 下列範例針對不同的使用案例使用相同的預測函數。在此案例中,Amazon Redshift 會從不同州的客戶中 (記錄日期大於 2020-01-01),預測流失者和非流失者的比例。

    WITH predicted AS ( SELECT state, ml_fn_customer_churn_auto( state, account_length, area_code, total_charge / account_length, cust_serv_calls / account_length ) :: varchar(6) AS active FROM customer_activity WHERE record_date > '2020-01-01' ) SELECT state, SUM( CASE WHEN active = 'True.' THEN 1 ELSE 0 END ) AS churners, SUM( CASE WHEN active = 'False.' THEN 1 ELSE 0 END ) AS nonchurners, COUNT(*) AS total_per_state FROM predicted GROUP BY state ORDER BY state;
  3. 下列範例會使用預測函數來預測某州中流失的客戶百分比。在此案例中,Amazon Redshift 會預測記錄日期大於 2020-01-01 的流失百分比。

    WITH predicted AS ( SELECT state, ml_fn_customer_churn_auto( state, account_length, area_code, total_charge / account_length, cust_serv_calls / account_length ) :: varchar(6) AS active FROM customer_activity WHERE record_date > '2020-01-01' ) SELECT state, CAST((CAST((SUM( CASE WHEN active = 'True.' THEN 1 ELSE 0 END )) AS FLOAT) / CAST(COUNT(*) AS FLOAT)) AS DECIMAL (3, 2)) AS pct_churn, COUNT(*) AS total_customers_per_state FROM predicted GROUP BY state ORDER BY 3 DESC;

如需 Amazon Redshift ML 的相關資訊,請參閱下列文件:

如需機器學習的相關資訊,請參閱下列文件: