

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# リアルタイムレコメンデーションのフィルタリング
<a name="filter-real-time"></a>

Amazon Personalize コンソール、 AWS Command Line Interface (AWS CLI)、または AWS SDKs を使用して、リアルタイムのレコメンデーションをフィルタリングできます。

 パーソナライズされたアイテムレコメンデーションや類似のアイテムを取得するとき、リクエストでプロモーションを指定できます。*プロモーション*では、フィルターを使用して設定可能なおすすめアイテムのサブセットに適用される追加のビジネスルールを定義します。詳細については、「[リアルタイムレコメンデーション内のアイテムのプロモーション](promoting-items.md)」を参照してください。

**Topics**
+ [リアルタイムレコメンデーションのフィルタリング (コンソール)](#filter-rt-console)
+ [リアルタイムレコメンデーションのフィルタリング (AWS CLI)](#filter-rt-cli)
+ [リアルタイムレコメンデーション (AWS SDKsフィルタリング](#filter-rt-sdk)

## リアルタイムレコメンデーションのフィルタリング (コンソール)
<a name="filter-rt-console"></a>

コンソールを使用してリアルタイムのレコメンデーションをフィルタリングするには、フィルターを作成してから、それをレコメンデーションのリクエストに適用します。

**注記**  
2020 年 11 月 10 日より前にデプロイされたパラメータとキャンペーンを持つフィルターを使用してレコメンデーションをフィルタリングするには、[UpdateCampaign](API_UpdateCampaign.md) 操作を使用してキャンペーンを再デプロイするか、新しいキャンペーンを作成する必要があります。

### フィルターの作成 (コンソール)
<a name="creating-filter-console"></a>

 コンソールでフィルターを作成するには、フィルタリングされたレコメンデーションを取得するために使用するキャンペーンまたはレコメンダーを含むデータセットグループを選択します。次に、フィルター名とフィルター式を指定します。

**フィルターを作成するには (コンソール)**

1. [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home) で Amazon Personalize コンソールを開き、アカウントにサインインします。

1. フィルタリングしたレコメンデーションを取得するために使用したいキャンペーンやレコメンデーションを含むデータセットグループを選択します。

1. ナビゲーションページで、**[フィルター]** を選択してから、**[新しいフィルターの作成]** を選択します。**[Create filter]** (フィルターの作成) ページが表示されます。  
![\[フィルター名と式フィールドを含むフィルターの作成ページを示します。\]](http://docs.aws.amazon.com/ja_jp/personalize/latest/dg/images/create-filter-page.png)

1. **[Filter name]** (フィルター名) で、フィルターの名前を入力します。レコメンデーションリクエストに適用するときに、この名前でフィルターを選択します。

1. **[Expression]** (式) で、**[Build expression]** (式を作成) または **[Add expression manually]** (式を手動で追加) を選択し、式を作成または挿入します。
   + 式ビルダーを使用するには、**[Build expression]** (式を作成) を選択します。式ビルダーは、正しくフォーマットされたフィルター式を作成するための構造、フィールド、およびガイドラインを提供します。詳細については、「[フィルター式ビルダーの使用](#using-filter-expression-builder)」を参照してください。
   +  独自の式を入力するには、**[Add expression manually]** (式を手動で追加) を選択します。詳細については、「[フィルター式の要素](creating-filter-expressions.md#filter-expression-elements)」を参照してください。

1. [**Finish**] を選択してください。フィルターの概要ページには、フィルターの Amazon リソースネーム (ARN)、ステータス、および完全なフィルター式が表示されます。フィルターを削除するには、**[Delete]** (削除) を選択します。概要ページから移動した後のフィルターの検索と削除については、「[フィルターの削除 (コンソール)](#delete-filter-console)」を参照してください。  
![\[フィルターの ARN と式を含むフィルターの詳細ページを示します。\]](http://docs.aws.amazon.com/ja_jp/personalize/latest/dg/images/filter-details-page.png)

### フィルターの適用 (コンソール)
<a name="apply-filter-console"></a>

 フィルターを適用するには、**[レコメンダーのテスト]** (レコメンダーの場合) または **[キャンペーン結果のテスト]** (カスタムキャンペーンの場合) で、フィルターを選択し、フィルターパラメータ値を入力します。その後、ユーザー向けのレコメンデーションを取得します。

**重要**  
`INCLUDE` 要素を使用するフィルター式の場合、式で定義されているすべてのパラメータの値を指定する必要があります。`EXCLUDE` 要素を使用する式を持つフィルターの場合、`filter-values` を省略できます。この場合、Amazon Personalize は、式のその部分を使用してレコメンデーションをフィルタリングしません。

**フィルターを適用するには (コンソール)**

1. [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home) で Amazon Personalize コンソールを開き、アカウントにサインインします。

1. フィルタリングしたレコメンデーションを取得するために使用したいキャンペーンやレコメンデーションを含むデータセットグループを選択します。

1. データセットグループのタイプに応じて、次のいずれかを行います。

   1. ドメインデータセットグループの場合は、ナビゲーションペインで **[レコメンダー]** を選択します。

   1. Custom データセットグループまたはカスタムリソースの場合、ナビゲーションペインで **[カスタムリソース]**、**[キャンペーン]** の順に選択します。

1. **レコメンダー**または**キャンペーンページで**、ターゲットとなるレコメンダーまたはキャンペーンを選択します。

1. 比較のために、まず、フィルターを適用せずに、レコメンデーションを取得します。**[レコメンダーのテスト]** / **[キャンペーン結果のテスト]** で、レコメンデーションを取得するユーザーの ID または関連アイテムのアイテムの ID を入力し、**[レコメンデーションを取得]** を選択します。上位レコメンデーションを含むテーブルが表示されます。  
![\[フィルターを適用しないレコメンデーション結果を示します。\]](http://docs.aws.amazon.com/ja_jp/personalize/latest/dg/images/Recommendations_no-filter.PNG)

1. **[Filter name]** (フィルター名) のメニューから、作成したフィルターを選択します。フィルターにプレースホルダーパラメータがある場合は、各パラメータに関連付けられたフィールドが表示されます。

1. プレースホルダーパラメータとともにフィルターを使用している場合は、各パラメータに値を入力して、フィルター基準を設定します。1 つのパラメータに複数の値を使用するには、各値をコンマで区切ります。

1. 前のステップと同じ `User ID` または `Item ID` を使用して、**[レコメンデーションを取得]** を選択します。レコメンデーションテーブルが表示されます。  
![\[フィルターが適用されたレコメンデーション結果を示します。\]](http://docs.aws.amazon.com/ja_jp/personalize/latest/dg/images/Recommendations_filter.png)

   例えば、ユーザーが推奨されたアイテムを既に購入していた場合、フィルターはレコメンデーションリストからそのアイテムを削除します。この例では、アイテム 2657、2985 が、ユーザーが購入しなかった最も適切なアイテム (アイテム 2641 および 1573) に置き換えられました。

### フィルター式ビルダーの使用
<a name="using-filter-expression-builder"></a>

**[フィルターの作成]** ページの **[式ビルダー]** は、正しくフォーマットされたフィルターを作成するための構造、フィールド、およびガイドラインを提供します。

![\[[フィルターの作成] ページの [式ビルダー] フィールドを示します。\]](http://docs.aws.amazon.com/ja_jp/personalize/latest/dg/images/expression-builder-empty.png)


フィルター式を作成するには
+ **[タイプ]**、**アクション**、**プロパティ**、**演算子**、および **値** フィールドを使用して、式を作成します。

  **[Value]** (値) で、固定値を入力するか、レコメンデーションを取得する際にフィルター基準を設定するために、\$1** \$1 パラメータ名を入力します。例えば、`$GENRES`。レコメンデーションを取得したら、フィルタリングする 1 つまたは複数の値を指定します。この例では、レコメンデーションを取得するときに、ジャンルまたはジャンルのリストを提供します。

  複数の非パラメータ値をコンマで区切ります。コンマ区切りのパラメータをフィルターに追加することはできません。
**注記**  
**[Property]** (プロパティ) (`dataset.field` 形式) を選択した後、`AND` または `OR` 条件によって連鎖された後続の行の **[Property]** (プロパティ) の値は、同じ `dataset` を使用する必要があります。
+  **\$1** ボタンと **X** ボタンを使用して、行を式に追加したり、式から削除したりします。最初の行を削除することはできません。
+  新しい行については、**[AND]** メニューの `AND`、`IF`、または `OR` 演算子を使用して、連鎖条件を作成します。

  `IF` 条件の場合
  + 各式には 1 つの `IF` アイテムのみを含めることができます。IF 条件を削除すると、式ビルダーはそれに続くすべての `AND` 条件を削除します。
  + `IF` 条件は、`CurrentUser` でフィルタリングする式にのみ使用できます。
+  **[式を追加]** ボタンを選択して、追加のフィルター式を追加し、さらに正確なフィルタリングを行います。各式は最初に独立して評価され、結果は 2 つの結果の和集合になります。
**注記**  
アイテムおよびアイテムインタラクションデータセットの両方、またはアクションおよびアクションインタラクションデータセットの両方を使用するフィルターを作成するには、複数の式を使用する必要があります。**

#### 式ビルダーの例
<a name="expression-builder-example"></a>

次の例は、レコメンデーションを取得するときに指定したジャンル (\$1GENRES プレースホルダーパラメータに留意してください) を持ち、アイテムを除外するフィルターを作成する方法を示しています。フィルターでは、`200` 以上の `DOWNLOAD_COUNT` を持つアイテムも除外されます。ただし、現在のユーザーの年齢が `17` より高い場合に限ります。

![\[式ビルダーを使用してサンプルフィルター式を構築する方法を示します。\]](http://docs.aws.amazon.com/ja_jp/personalize/latest/dg/images/create-filter-expression-builder.png)


### フィルターの削除 (コンソール)
<a name="delete-filter-console"></a>

フィルターを削除すると、データセットグループのフィルターのリストからフィルターが削除されます。

**重要**  
バッチ推論ジョブの進行中は、フィルターを削除できません。

**フィルターを削除するには (コンソール)**

1. [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home) で Amazon Personalize コンソールを開き、アカウントにサインインします。

1. **[Dataset groups]** (データセットグループ) のリストから、削除するフィルターを含むデータセットグループを選択します。

1. ナビゲーションペインで、**[Filters]** (フィルター) を選択します。

1. フィルターのリストから、削除するフィルターを選択し、**[View Details]** (詳細を表示) を選択します。フィルターの詳細ページが表示されます。

1. **[Delete]** (削除) を選択し、確認ダイアログボックスで削除を確認します。

## リアルタイムレコメンデーションのフィルタリング (AWS CLI)
<a name="filter-rt-cli"></a>

を使用してレコメンデーションをフィルタリングするには AWS CLI、フィルターを作成し、 [GetRecommendations](API_RS_GetRecommendations.md)または [GetPersonalizedRanking](API_RS_GetPersonalizedRanking.md)リクエストでフィルター ARN を指定して適用します。

**重要**  
2020 年 11 月 10 日より前にデプロイされたパラメータとキャンペーンを使用してレコメンデーションを持つフィルターを使用してフィルタリングするには、[UpdateCampaign](API_UpdateCampaign.md) コールを使用してキャンペーンを再デプロイするか、新しいキャンペーンを作成する必要があります。

### フィルターの作成 (AWS CLI)
<a name="creating-filter-cli"></a>

次の `create-filter` 操作を使用して、フィルターを作成し、フィルター式を指定します。

`Filter name` をフィルターの名前に、`Dataset group ARN` をデータセットグループの Amazon リソースネーム (ARN) に、それぞれ置き換えます。サンプル `filter-expression` を独自のフィルター式に置き換えます。

```
aws personalize create-filter \
  --name Filter name \
  --dataset-group-arn dataset group arn \
  --filter-expression "EXCLUDE ItemID WHERE Items.CATEGORY IN (\"$CATEGORY\")"
```

 成功すると、フィルター ARN が表示されます。後で使用するために記録します。フィルターがアクティブであることを確認するには、フィルターを使用する前に [DescribeFilter](API_DescribeFilter.md) 操作を使用します。

 API の詳細については、「[CreateFilter](API_CreateFilter.md)」を参照してください。例を含むフィルター式の詳細については、「[フィルター式の構造と要素](creating-filter-expressions.md)」を参照してください。

### フィルターの適用 (AWS CLI)
<a name="applying-filter-cli"></a>

`get-recommendations`、`get-action-recommendations`、または `get-personalized-ranking` 操作を使用する場合は、`filter-arn` と任意のフィルター値をパラメータとして渡すことによってフィルターを適用します。

`get-recommendations` 動作の例を次に示します。`Campaign ARN` をキャンペーンの Amazon リソースネーム (ARN) に、`User ID` をレコメンデーションを取得しているユーザーの ID に、および `Filter ARN` をフィルターの ARN に、それぞれ置き換えます。キャンペーンではなくレコメンダーからレコメンデーションを受け取っている場合は、`--campaign-arn` の代わりに `recommender-arn` を使用して、そのレコメンダーの ARN を指定してください。

式にパラメータがある場合は、`filter-values` オブジェクトを含めます。フィルター式の各パラメータについて、パラメータ名 (大文字と小文字が区別されます) と値を指定します。例えば、フィルター式に `$GENRE` パラメータがある場合は、キーとして*「GENRE」*を指定し、値として 1 つまたは複数のジャンル (`"Comedy"` など) を指定します。複数の値はコンマで区切ります。例えば、`"\"comedy\",\"drama\",\"horror"\"`。

**重要**  
`INCLUDE` 要素を使用してアイテムを含めるフィルター式について、式で定義されているすべてのパラメータの値を指定する必要があります。`EXCLUDE` 要素を使用してアイテムを除外する式を含むフィルターについては、`filter-values` を省略できます。この場合、Amazon Personalize は、式のその部分を使用してレコメンデーションをフィルタリングしません。

```
aws personalize-runtime get-recommendations \
  --campaign-arn Campaign ARN \
  --user-id User ID \
  --filter-arn Filter ARN \
  --filter-values '{
      "Parameter name": "\"value\"",
      "Parameter name": "\"value1\",\"value2\",\"value3\""
    }'
```

### フィルターの削除 (AWS CLI)
<a name="delete-filter-cli"></a>

 フィルターを削除するには、次の `delete-filter` 操作を使用します。`filter ARN` をフィルターの ARN に置き換えます。

```
aws personalize delete-filter --filter-arn Filter ARN
```

## リアルタイムレコメンデーション (AWS SDKsフィルタリング
<a name="filter-rt-sdk"></a>

 AWS SDKs を使用してレコメンデーションをフィルタリングするには、フィルターを作成してから、 [GetRecommendations](API_RS_GetRecommendations.md)または [GetPersonalizedRanking](API_RS_GetPersonalizedRanking.md)リクエストでフィルター ARN を指定して適用します。

**重要**  
2020 年 11 月 10 日より前にデプロイされたパラメータとキャンペーンを使用してレコメンデーションを持つフィルターを使用してフィルタリングするには、[UpdateCampaign](API_UpdateCampaign.md) コールを使用してキャンペーンを再デプロイするか、新しいキャンペーンを作成する必要があります。

### フィルターの作成 (AWS SDKs)
<a name="creating-filter-sdk"></a>

 [CreateFilter](API_CreateFilter.md) 操作で新しいフィルターを作成します。次のコードは、フィルターを作成する方法を示しています。フィルター名、データセットグループの Amazon リソースネーム (ARN) を指定し、フィルター式を指定します。

------
#### [ SDK for Python (Boto3) ]

```
import boto3
 
personalize = boto3.client('personalize')
 
response = personalize.create_filter(
    name = 'Filter Name',
    datasetGroupArn = 'Dataset Group ARN',
    filterExpression = 'EXCLUDE ItemID WHERE Items.CATEGORY IN ($CATEGORY)'
) 
filter_arn = response["filterArn"]
print("Filter ARN: " + filter_arn)
```

------
#### [ SDK for Java 2.x ]

```
public static String createFilter(PersonalizeClient personalizeClient,
                                 String filterName,
                                 String datasetGroupArn,
                                 String filterExpression) {
    try {
        CreateFilterRequest request = CreateFilterRequest.builder()
                .name(filterName)
                .datasetGroupArn(datasetGroupArn)
                .filterExpression(filterExpression)
                .build();

        return personalizeClient.createFilter(request).filterArn();
    }
    catch(PersonalizeException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    return "";
}
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients module and commands using ES6 syntax.
import { CreateFilterCommand } from "@aws-sdk/client-personalize";
import { personalizeClient } from "./libs/personalizeClients.js";
// Or, create the client here.
// const personalizeClient = new PersonalizeClient({ region: "REGION"});

// Set the filter's parameters.
export const createFilterParam = {
  datasetGroupArn: "DATASET_GROUP_ARN" /* required */,
  name: "NAME" /* required */,
  filterExpression: "FILTER_EXPRESSION" /*required */,
};

export const run = async () => {
  try {
    const response = await personalizeClient.send(
      new CreateFilterCommand(createFilterParam),
    );
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------

後で使用するためにフィルター ARN を記録します。フィルターがアクティブであることを確認するには、フィルターを使用する前に [DescribeFilter](API_DescribeFilter.md) 操作を使用します。API の詳細については、「[CreateFilter](API_CreateFilter.md)」を参照してください。例を含むフィルター式の詳細については、「[フィルター式の構造と要素](creating-filter-expressions.md)」を参照してください。

### フィルターの適用 (AWS SDKs)
<a name="applying-filter-sdk"></a>

GetRecommendations、GetActionRecommendations、または GetPersonalizedRanking オペレーションを使用するときには、`filterArn` と任意のフィルターパラメータ値を渡すことによってフィルターを適用します。

次のコードは、フィルタリングされた Amazon Personalize のユーザー向けアイテムレコメンデーションを取得する方法を示しています。レコメンデーションを取得させるユーザーの ID、キャンペーンの Amazon リソースネーム (ARN)、フィルターの ARN を指定します。キャンペーンではなくレコメンダーからレコメンデーションを受け取っている場合は、`recommenderArn` の代わりに `campaignArn` を使用して、そのレコメンダーの ARN を指定してください。

`filterValues` の場合、フィルター式のオプションの各パラメータについて、パラメータ名 (大文字と小文字が区別されます) と 1 つまたは複数の値を指定します。例えば、フィルター式に `$GENRES` パラメータがある場合は、キーとして*「GENRES」*を指定し、値として 1 つまたは複数のジャンル (`"\"Comedy"\"` など) を指定します。複数の値については、各値をコンマで区切ります。例えば、`"\"comedy\",\"drama\",\"horror\""`。

**重要**  
`INCLUDE` 要素を使用してアイテムを含めるフィルター式について、式で定義されているすべてのパラメータの値を指定する必要があります。`EXCLUDE` 要素を使用してアイテムを除外する式を含むフィルターについては、`filter-values` を省略できます。この場合、Amazon Personalize は、式のその部分を使用してレコメンデーションをフィルタリングしません。

------
#### [ SDK for Python (Boto3) ]

```
import boto3

personalize_runtime = boto3.client("personalize-runtime")

response = personalize_runtime.get_recommendations(
    campaignArn = "Campaign ARN",
    userId = "User ID",
    filterArn = "Filter ARN",
    filterValues = {
      "Parameter name": "\"value1\"",
      "Parameter name": "\"value1\",\"value2\",\"value3\""
      ....
    }
)
```

------
#### [ SDK for Java 2.x ]

次の例では、2 つのパラメータを使用しています。1 つは 2 つの値を持ち、もう 1 つは 1 つの値を持ちます。フィルター式に応じて、コードを変更して、parameterName フィールドおよび parameterValue フィールドを追加または削除します。

```
public static void getFilteredRecs(PersonalizeRuntimeClient personalizeRuntimeClient,
                                   String campaignArn,
                                   String userId,
                                   String filterArn,
                                   String parameter1Name,
                                   String parameter1Value1,
                                   String parameter1Value2,
                                   String parameter2Name,
                                   String parameter2Value){

    try {

        Map<String, String> filterValues = new HashMap<>();

        filterValues.put(parameter1Name, String.format("\"%1$s\",\"%2$s\"",
                parameter1Value1, parameter1Value2));
        filterValues.put(parameter2Name, String.format("\"%1$s\"",
                parameter2Value));

        GetRecommendationsRequest recommendationsRequest = GetRecommendationsRequest.builder()
                .campaignArn(campaignArn)
                .numResults(20)
                .userId(userId)
                .filterArn(filterArn)
                .filterValues(filterValues)
                .build();

        GetRecommendationsResponse recommendationsResponse = personalizeRuntimeClient.getRecommendations(recommendationsRequest);
        List<PredictedItem> items = recommendationsResponse.itemList();

        for (PredictedItem item: items) {
            System.out.println("Item Id is : "+item.itemId());
            System.out.println("Item score is : "+item.score());
        }
    } catch (PersonalizeRuntimeException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
}
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients module and commands using ES6 syntax.
import { GetRecommendationsCommand } from "@aws-sdk/client-personalize-runtime";
import { personalizeRuntimeClient } from "./libs/personalizeClients.js";
// Or, create the client here:
// const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: "REGION"});

// Set recommendation request parameters.
export const getRecommendationsParam = {
  campaignArn: "CAMPAIGN_ARN" /* required */,
  userId: "USER_ID" /* required */,
  numResults: 15 /* optional */,
  filterArn: "FILTER_ARN" /* required to filter recommendations */,
  filterValues: {
    PROPERTY:
      '"VALUE"' /* Only required if your filter has a placeholder parameter */,
  },
};

export const run = async () => {
  try {
    const response = await personalizeRuntimeClient.send(
      new GetRecommendationsCommand(getRecommendationsParam),
    );
    console.log("Success!", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------

### フィルターの削除 (AWS Python SDK)
<a name="delete-filter-sdk"></a>

 フィルターを削除するには、次の `delete_filter` の方法を使用します。`filter ARN` をフィルターの ARN に置き換えます。

```
import boto3
personalize = boto3.client("personalize")

response = personalize.delete_filter(
  filterArn = "filter ARN"
)
```