

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

# 使用者個人化配方
<a name="native-recipe-new-item-USER_PERSONALIZATION"></a>

**重要**  
建議使用 [User-Personalization-v2](native-recipe-user-personalization-v2.md) 配方。它可以考慮最多 500 萬個訓練速度更快的項目，並以較低的延遲產生更相關的建議。

使用者個人化 (aws-user-personalization) 配方已針對所有個人化建議案例進行最佳化。它會預測使用者最有可能與之互動的項目。您可以使用使用者個人化來產生串流應用程式的個人化電影建議，或零售應用程式的個人化產品建議。

透過使用者個人化，Amazon Personalize 主要會根據項目互動資料集中的使用者項目互動資料產生建議。它也可以在您的項目和使用者資料集使用任何項目和使用者中繼資料。如需其所使用資料的詳細資訊，請參閱 [必要和選用的資料集](#user-personalization-datasets)。

**Topics**
+ [配方功能](#user-personalization-features)
+ [必要和選用的資料集](#user-personalization-datasets)
+ [屬性和超參數](#bandit-hyperparameters)
+ [使用使用者個人化配方進行訓練 （主控台）](#training-user-personalization-recipe-console)
+ [使用使用者個人化配方進行訓練 (Python SDK)](#training-user-personalization-recipe)
+ [取得建議和記錄曝光 (SDK for Python (Boto3))](#user-personalization-get-recommendations-recording-impressions)
+ [Jupyter 筆記本範例](#bandits-sample-notebooks)

## 配方功能
<a name="user-personalization-features"></a>

產生項目建議時，使用者個人化會使用下列 Amazon Personalize 配方功能：
+ 即時個人化 – 透過即時個人化，Amazon Personalize 會根據使用者不斷變化的興趣更新和調整項目建議。如需詳細資訊，請參閱[即時個人化](use-case-recipe-features.md#about-real-time-personalization)。
+ 探勘 – 透過探勘，建議包括新的項目或互動資料較少的項目。當您有快速變更的目錄，或新項目，例如新聞文章或促銷，當新項目與使用者更相關時，這可改善項目探索和參與。如需探索的詳細資訊，請參閱 [探勘](use-case-recipe-features.md#about-exploration)。
+ 自動更新 – 透過自動更新，Amazon Personalize 會每兩小時自動更新最新的模型 （解決方案版本），以考慮提供建議的新項目。如需詳細資訊，請參閱[自動更新](use-case-recipe-features.md#automatic-updates)。

## 必要和選用的資料集
<a name="user-personalization-datasets"></a>

若要使用使用者個人化，您必須建立[項目互動資料集](interactions-datasets.md)，並匯入至少 1000 個項目互動。Amazon Personalize 主要根據項目互動資料產生建議。

透過使用者個人化，Amazon Personalize 可以使用包含下列項目的項目互動資料：
+ 事件類型和事件值資料 – Amazon Personalize 使用事件類型資料，例如點選或監看事件類型，透過其行為中的任何模式來識別使用者意圖和興趣。此外，您可以在訓練前使用事件類型和事件值資料來篩選記錄。如需詳細資訊，請參閱[事件類型和事件值資料](interactions-datasets.md#event-type-and-event-value-data)。
+ 內容中繼資料 – 內容中繼資料是指您在事件發生時在使用者環境中收集的互動資料，例如其位置或裝置類型。如需詳細資訊，請參閱[內容中繼資料](interactions-datasets.md#interactions-contextual-metadata)。
+ 印模資料 – 印模是使用者與特定項目互動 （點選、觀看、購買等） 時可見的項目清單。如需詳細資訊，請參閱[印象資料](interactions-datasets.md#interactions-impressions-data)。

 下列資料集是選用的，可以改善建議：
+ 使用者資料集 – Amazon Personalize 可以使用您的使用者資料集中的資料來更好地了解您的使用者及其興趣。您也可以使用使用者資料集中的資料來篩選建議。如需有關您可以匯入之使用者資料的資訊，請參閱 [使用者中繼資料](users-datasets.md)。
+ 項目資料集 – Amazon Personalize 可以使用您的項目資料集中的資料來識別其行為中的連線和模式。這有助於 Amazon Personalize 了解您的使用者及其興趣。您也可以使用項目資料集中的資料來篩選建議。如需有關您可以匯入之項目資料的資訊，請參閱 [項目中繼資料](items-datasets.md)。

## 屬性和超參數
<a name="bandit-hyperparameters"></a>

使用者個人化配方具有下列屬性：
+  **名稱** – `aws-user-personalization`
+  **配方 Amazon Resource Name (ARN)** – `arn:aws:personalize:::recipe/aws-user-personalization`
+  **演算法 ARN** – `arn:aws:personalize:::algorithm/aws-user-personalization`

如需詳細資訊，請參閱[選擇配方](working-with-predefined-recipes.md)。

下表說明使用者個人化配方的超參數。*超參數* 是一種演算法參數，您可以調整以改善模型效能。演算法超參數可控制模型的執行方式。特徵化超參數可控制如何篩選要在訓練中使用的資料。選擇超參數最佳值的程序稱為超參數最佳化 (HPO)。如需詳細資訊，請參閱[超參數和 HPO](customizing-solution-config-hpo.md)。

資料表提供每個超參數的下列資訊：
+ **範圍**：[下限、上限]
+ **值類型**：整數、連續 (浮點數)、分類 (布林值、清單、字串)
+ **HPO 可調整**：參數可以參與 HPO 嗎？


| 名稱 | 描述 | 
| --- | --- | 
| 演算法超參數 | 
| hidden\$1dimension |  模型中使用的隱藏變數數量。*隱藏變數* 會重新建立使用者的購買歷史記錄和項目統計資料，以產生排名分數。當您的項目互動資料集包含更複雜的模式時，請指定更多隱藏維度。使用更多隱藏維度需要更大的資料集和更多時間處理。若要決定最佳值，請使用 HPO。若要使用 HPO，請在呼叫 [CreateSolution](API_CreateSolution.md) 和 [CreateSolutionVersion](API_CreateSolutionVersion.md) 操作時將 `performHPO` 設定為 `true`。 預設值：149 範圍：[32, 256] 值類型：整數 HPO 可調整：是  | 
| bptt |  決定是否透過時間技術使用反向傳播。*透過時間的反向傳播* 是一種遞歸神經網路演算法中權重的技術。使用 `bptt` 做為長期信用來連接早期事件的延遲獎勵。例如，延遲獎勵可以是按幾下滑鼠後的購買。早期事件可以是初始的按一下。即使在相同的事件類型中 (例如按一下)，最好還是考慮長期效果，並將總獎勵最大化。若要考慮長期效果，請使用較大的 `bptt` 值。使用更大的 `bptt` 值需要更大的資料集和更多時間來處理。 預設值：32 範圍：[2, 32] 值類型：整數 HPO 可調整：是  | 
| recency\$1mask |  決定模型是否應考慮項目互動資料集的最新熱門趨勢。最新的熱門趨勢可能包括互動事件基礎模式的突然變化。若要訓練模型更多加權最近的事件，請將 `recency_mask` 設定為 `true`。若要訓練模型將過去的互動加權同等，請將 `recency_mask` 設定為 `false`。若要使用同等權重來獲得良好的建議，您可能需要較大的訓練資料集。 預設值：`True` 範圍：`True` 或 `False` 值類型：布林值 HPO 可調整：是  | 
| 特徵化超參數 | 
| min\$1user\$1history\$1length\$1percentile |  要包含在模型訓練中的使用者歷史記錄長度的最小百分位數。*歷史記錄長度* 是有關使用者的資料總量。使用 `min_user_history_length_percentile` 排除歷史記錄長度較短的使用者百分比。歷史記錄短的使用者通常根據項目熱門程度顯示模式，而不是使用者的個人需求或想要顯示模式。移除它們可以訓練模型更專注於資料中的基礎模式。檢閱使用者歷史記錄長度後，請使用長條圖或類似的工具，選擇適當的值。我們建議設定保留大部分使用者的值，但移除邊緣案例。  例如，設定 `min_user_history_length_percentile to 0.05` 和 `max_user_history_length_percentile to 0.95` 包含所有使用者，歷史記錄長度底部或頂端 5% 的使用者除外。 預設值：0.0 範圍：[0.0, 1.0] 值類型：浮點數 HPO 可調整：否  | 
| max\$1user\$1history\$1length\$1percentile |  要包含在模型訓練中的使用者歷史記錄長度的最大百分位數。*歷史記錄長度* 是有關使用者的資料總量。使用 `max_user_history_length_percentile` 排除歷史記錄長度較長的使用者百分比，因為這些使用者的資料往往包含雜訊。例如，機器人可能有一長串的自動化互動。移除這些使用者會限制訓練中的噪音。使用長條圖或類似工具檢閱使用者歷史記錄長度後，請選擇適當的值。我們建議設定保留大部分使用者的值，但移除邊緣案例。 例如，設定 `min_user_history_length_percentile to 0.05` 和 `max_user_history_length_percentile to 0.95` 包含所有使用者，歷史記錄長度底部或頂端 5% 的使用者除外。 預設值：0.99 範圍：[0.0, 1.0] 值類型：浮點數 HPO 可調整：否  | 
| 項目探索行銷活動組態超參數 | 
| exploration\$1weight |  決定建議包含項目互動資料或相關性較少的項目的頻率。值越接近 1.0，探索越多。在零時，不會進行探勘，建議是根據目前的資料 （相關性）。如需更多資訊，請參閱[CampaignConfig](API_CampaignConfig.md)。 預設值：0.3 範圍：[0.0, 1.0] 值類型：浮點數 HPO 可調整：否  | 
| exploration\$1item\$1age\$1cut\$1off |  指定項目互動資料集中所有項目自上次互動以來的最大項目存留期，以天為單位。這會根據項目存留期定義項目探索的範圍。Amazon Personalize 會根據項目的建立時間戳記，或在缺少建立時間戳記資料時，決定項目的存留期。如需 Amazon Personalize 如何決定項目存留期的詳細資訊，請參閱 [建立時間戳記資料](items-datasets.md#creation-timestamp-data)。 若要增加 Amazon Personalize 在探勘期間考慮的項目，請輸入較大的值。最短為 1 天，預設值為 30 天。建議可能包括比您指定的項目存留期截止還舊的項目。這是因為這些項目與使用者相關，而且探勘無法識別它們。 預設值：30.0 範圍：正浮點數 值類型：浮點數 HPO 可調整：否  | 

## 使用使用者個人化配方進行訓練 （主控台）
<a name="training-user-personalization-recipe-console"></a>

若要使用使用者個人化配方在主控台中產生建議，請先使用配方訓練新的解決方案版本。然後使用解決方案版本部署行銷活動，並使用行銷活動取得建議。

**使用使用者個人化配方訓練新的解決方案版本 （主控台）**

1. 在 [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home)：// 開啟 Amazon Personalize 主控台並登入您的帳戶。

1. 使用新的結構描述建立自訂資料集群組，並使用曝光資料上傳資料集。選擇性地將 [CREATION\$1TIMESTAMP]() 和[非結構化文字中繼資料](items-datasets.md#text-data)資料納入您的項目資料集，以便 Amazon Personalize 可以更準確地計算項目的存留期並識別冷項目。

   如需匯入資料的詳細資訊，請參閱 [將訓練資料匯入 Amazon Personalize 資料集](import-data.md)。

1. 在**資料集群組**頁面上，選擇包含具有曝光資料之資料集或資料集的新資料集群組。

1. 在導覽窗格中，選擇**解決方案和配方**，然後選擇**建立解決方案**。

1. 在**建立解決方案**頁面上，針對**解決方案名稱**輸入新解決方案的名稱。

1. 針對**解決方案類型**，選擇**項目建議**，為您的使用者取得項目建議。

1. 針對**配方**，選擇 **aws-user-personalization**。**解決方案組態**區段隨即出現，提供數個組態選項。

1. 在**事件組態**中，如果您的項目互動資料集具有 EVENT\$1TYPE 或 EVENT\$1TYPE 和 EVENT\$1VALUE 資料欄，可選擇使用**事件類型**和**事件值閾值**欄位來選擇 Amazon Personalize 在訓練模型時所使用的項目互動資料。如需詳細資訊，請參閱[選擇用於訓練的項目互動資料](event-values-types.md)。

    如果您有多個事件類型，並使用 User-Personalization-v2 配方或 Personalized-Ranking-v2 配方，您也可以為不同類型的指定不同的權重。例如，您可以設定解決方案，給予比點擊事件更多的購買事件權重。如需詳細資訊，請參閱[使用事件組態最佳化解決方案](optimizing-solution-events-config.md)。

1. 選擇性地為您的解決方案設定超參數。如需使用者個人化配方屬性和超參數的清單，請參閱 [屬性和超參數](#bandit-hyperparameters)。

1. 選擇**建立和訓練解決方案**以開始訓練。**儀表板**頁面隨即顯示。

   您可以導覽至解決方案詳細資訊頁面，以追蹤**解決方案版本**區段中的訓練進度。訓練完成時，狀態為**作用中**。

**建立行銷活動並取得建議 （主控台）**

 當您的解決方案版本狀態為**作用中**時，您就可以建立行銷活動並取得建議，如下所示：

1. 在解決方案詳細資訊頁面或**行銷活動**頁面上，選擇**建立新行銷活動**。

1.  在**建立新的行銷活動**頁面上，針對**行銷活動詳細資訊**，提供以下資訊：
   + **行銷活動名稱：**輸入行銷活動的名稱。您在此處輸入的文字會顯示在行銷活動儀表板和詳細資訊頁面上。
   + **解決方案：**選擇您剛建立的解決方案。
   + **解決方案版本 ID：**選擇您剛建立的解決方案版本 ID。
   + **每秒佈建交易數下限：**設定 Amazon Personalize 支援的每秒佈建交易數下限。有關更多資訊，請參閱 [CreateCampaign](API_CreateCampaign.md) 操作。

1. 針對**行銷活動組態**，請提供下列資訊：
   + **探索權重：**設定要探索多少，其中建議包含項目互動資料較少或相關性更頻繁的項目，您指定的探索越多。值越接近 1，探索越多。在零時，不會進行探勘，建議是根據目前的資料 （相關性）。
   + **探勘項目存留期截止**：輸入項目存留期上限，以最近一次互動的天數為單位，定義項目探勘的範圍。若要增加 Amazon Personalize 在探勘期間考慮的項目數量，請輸入較大的值。

      例如，如果您輸入 10，則只有在探勘期間才會考慮資料集中最近互動後 10 天內具有項目互動資料的項目。
**注意**  
建議可能包括在此時間範圍外沒有項目互動資料的項目。這是因為這些項目與使用者興趣相關，而且不需要探勘即可識別它們。

1. 選擇 **Create campaign (建立活動)**。

1. 在行銷活動詳細資訊頁面上，當行銷活動狀態為**作用中**時，您可以使用行銷活動來取得建議和記錄曝光。如需詳細資訊，請參閱「入門」[步驟 5：取得建議](getting-started-console.md#getting-started-console-get-recommendations)中的 。

    Amazon Personalize 每兩小時會自動更新您的最新解決方案版本，以包含新資料。您的行銷活動會自動使用更新的解決方案版本。如需詳細資訊，請參閱[自動更新](use-case-recipe-features.md#automatic-updates)。

   若要手動更新行銷活動，請先使用主控台或 [CreateSolutionVersion](API_CreateSolutionVersion.md)操作來建立和訓練新的解決方案版本，並將 `trainingMode`設定為 `update`。然後，您可以使用 [UpdateCampaign](API_UpdateCampaign.md)操作，在 主控台的行銷活動頁面上手動更新**行銷活動**。
**注意**  
 Amazon Personalize 不會自動更新您在 2020 年 11 月 17 日之前建立的解決方案版本。

## 使用使用者個人化配方進行訓練 (Python SDK)
<a name="training-user-personalization-recipe"></a>

當您建立資料集群組並使用曝光資料上傳資料集時，您可以使用使用者個人化配方來訓練解決方案。選擇性地將 [CREATION\$1TIMESTAMP]() 和[非結構化文字中繼資料](items-datasets.md#text-data)資料納入您的項目資料集，以便 Amazon Personalize 可以更準確地計算項目的存留期並識別冷項目。如需建立資料集群組和上傳訓練資料的詳細資訊，請參閱[為 Amazon Personalize 結構描述建立結構描述 JSON 檔案](how-it-works-dataset-schema.md)。

**使用 AWS SDK 搭配使用者個人化配方來訓練解決方案**

1. 使用 `create_solution`方法建立新的解決方案。

   將 取代`solution name`為您的解決方案名稱，並將 `dataset group arn`取代為您的資料集群組的 Amazon Resource Name (ARN)。

   ```
   import boto3
   
   personalize = boto3.client('personalize')
   
   print('Creating solution')
   create_solution_response = personalize.create_solution(name = 'solution name', 
                               recipeArn = 'arn:aws:personalize:::recipe/aws-user-personalization', 
                               datasetGroupArn = 'dataset group arn',
                               )
   solution_arn = create_solution_response['solutionArn']
   print('solution_arn: ', solution_arn)
   ```

   如需 aws-user-personalization 配方屬性和超參數的清單，請參閱 [屬性和超參數](#bandit-hyperparameters)。

1. 使用更新的訓練資料建立新的*解決方案版本*，並使用`FULL`下列程式碼片段`trainingMode`將 設定為 。將 取代`solution arn`為您解決方案的 ARN。

   ```
   import boto3
           
   personalize = boto3.client('personalize')
           
   create_solution_version_response = personalize.create_solution_version(solutionArn = 'solution arn', 
                                                                  trainingMode='FULL')
   
   new_solution_version_arn = create_solution_version_response['solutionVersionArn']
   print('solution_version_arn:', new_solution_version_arn)
   ```

1. 當 Amazon Personalize 完成建立解決方案版本時，請使用下列參數建立您的行銷活動：
   + 在步驟 2 中提供新的 `campaign name`和`solution version arn`產生的 。
   + 修改`explorationWeight`項目探索組態超參數，以設定要探索多少。建議項目互動資料或相關性較低的項目，其頻率越接近 1.0。預設值為 0.3。
   + 修改`explorationItemAgeCutOff`項目探索組態超參數參數，以相對於應探索項目的最新互動，提供最長持續時間，以天為單位。值越大，探勘期間會考慮的項目越多。

   使用下列 Python 程式碼片段來建立新的行銷活動，強調在 30 天進行探勘和探勘截止。建立行銷活動通常需要幾分鐘的時間，但可能需要一小時的時間。

   ```
   import boto3
           
   personalize = boto3.client('personalize')
   
   create_campaign_response = personalize.create_campaign(
       name = 'campaign name',
       solutionVersionArn = 'solution version arn',
       minProvisionedTPS = 1,
       campaignConfig = {"itemExplorationConfig": {"explorationWeight": "0.3", "explorationItemAgeCutOff": "30"}}
   )
   
   campaign_arn = create_campaign_response['campaignArn']
   print('campaign_arn:', campaign_arn)
   ```

    透過使用者個人化，Amazon Personalize 每兩小時會自動更新您的解決方案版本，以包含新資料。您的行銷活動會自動使用更新的解決方案版本。如需詳細資訊，請參閱[自動更新](use-case-recipe-features.md#automatic-updates)。

   若要手動更新行銷活動，請先使用主控台或 [CreateSolutionVersion](API_CreateSolutionVersion.md)操作來建立和訓練新的解決方案版本，並將 `trainingMode`設定為 `update`。然後，您可以使用 [UpdateCampaign](API_UpdateCampaign.md)操作，在 主控台的行銷活動頁面上手動更新**行銷活動**。
**注意**  
 Amazon Personalize 不會自動更新您在 2020 年 11 月 17 日之前建立的解決方案版本。

## 取得建議和記錄曝光 (SDK for Python (Boto3))
<a name="user-personalization-get-recommendations-recording-impressions"></a>

建立行銷活動時，您可以使用它來取得使用者的建議並記錄印象。如需使用 AWS SDKs取得批次建議的資訊，請參閱 [建立批次推論任務 (AWS SDKs)](creating-batch-inference-job.md#batch-sdk)。



**取得建議並記錄印象**

1. 呼叫 `get_recommendations` 方法。將 `campaign arn`變更為新行銷活動的 ARN，並將 `user id`變更為使用者的 userId。

   ```
   import boto3
               
   rec_response = personalize_runtime.get_recommendations(campaignArn = 'campaign arn', userId = 'user id')
   print(rec_response['recommendationId'])
   ```

1. 建立新的事件追蹤器以傳送 PutEvents 請求。`event tracker name` 將 取代為事件追蹤器的名稱，並將 `dataset group arn`取代為資料集群組的 ARN。

   ```
   import boto3
           
   personalize = boto3.client('personalize')
   
   event_tracker_response = personalize.create_event_tracker( 
       name = 'event tracker name',
       datasetGroupArn = 'dataset group arn'
   )
   event_tracker_arn = event_tracker_response['eventTrackerArn']
   event_tracking_id = event_tracker_response['trackingId']
   print('eventTrackerArn:{},\n eventTrackingId:{}'.format(event_tracker_arn, event_tracking_id))
   ```

1.  使用步驟 1 `recommendationId`的 和步驟 2 `event tracking id`的 建立新的`PutEvents`請求。此請求會記錄來自使用者工作階段的新印模資料。將 `user id`變更為使用者的 ID。

   ```
   import boto3
               
   personalize_events.put_events(
        trackingId = 'event tracking id',
        userId= 'user id',
        sessionId = '1',
        eventList = [{
        'sentAt': datetime.now().timestamp(),
        'eventType' : 'click',
        'itemId' : rec_response['itemList'][0]['itemId'],        
        'recommendationId': rec_response['recommendationId'],
        'impression': [item['itemId'] for item in rec_response['itemList']],
        }]
   )
   ```

## Jupyter 筆記本範例
<a name="bandits-sample-notebooks"></a>

如需示範如何使用使用者個人化配方的範例 Jupyter 筆記本，請參閱[使用者個人化與探索](https://github.com/aws-samples/amazon-personalize-samples/blob/master/next_steps/core_use_cases/user_personalization/user-personalization-with-exploration.ipynb)。