Creating recommenders (AWS SDKs)
After you create a Domain dataset group and import data, you can create recommenders for
your domain use cases. A recommender is a
Domain dataset group resource that generates recommendations.
For all use cases, you can configure the columns used when training. For more information,
see Configuring columns used when training.
For Top picks for your
or Recommended for you
use cases, Amazon Personalize
uses exploration when recommending items. For more information, see Configuring exploration.
Creating a recommender
Create a recommender for a domain use case with the following code. Give your recommender
a name and provide your Domain dataset group's Amazon Resource Name (ARN). For
recipeArn
, provide the ARN for your use case. Run this code for each of your
domain use cases. The available use cases depend on your domain. For a list of use cases,
their ARNs, and their requirements, see Choosing a use case.
- SDK for Python (Boto3)
-
import boto3
personalize = boto3.client('personalize')
create_recommender_response = personalize.create_recommender(
name = 'recommender name
',
recipeArn = 'recipe ARN
',
datasetGroupArn = 'dataset group ARN
'
)
recommender_arn = create_recommender_response['recommenderArn']
print('Recommender ARN:' + recommender_arn)
- SDK for Java 2.x
-
public static String createRecommender(PersonalizeClient personalizeClient,
String name,
String datasetGroupArn,
String recipeArn) {
long maxTime = 0;
long waitInMilliseconds = 30 * 1000; // 30 seconds
String recommenderStatus = "";
try {
CreateRecommenderRequest createRecommenderRequest = CreateRecommenderRequest.builder()
.datasetGroupArn(datasetGroupArn)
.name(name)
.recipeArn(recipeArn)
.build();
CreateRecommenderResponse recommenderResponse = personalizeClient.createRecommender(createRecommenderRequest);
String recommenderArn = recommenderResponse.recommenderArn();
System.out.println("The recommender ARN is " + recommenderArn);
DescribeRecommenderRequest describeRecommenderRequest = DescribeRecommenderRequest.builder()
.recommenderArn(recommenderArn)
.build();
maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60;
while (Instant.now().getEpochSecond() < maxTime) {
recommenderStatus = personalizeClient.describeRecommender(describeRecommenderRequest).recommender().status();
System.out.println("Recommender status: " + recommenderStatus);
if (recommenderStatus.equals("ACTIVE") || recommenderStatus.equals("CREATE FAILED")) {
break;
}
try {
Thread.sleep(waitInMilliseconds);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
return recommenderArn;
} catch(PersonalizeException e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
return "";
}
- SDK for JavaScript v3
// Get service clients and commands using ES6 syntax.
import { CreateRecommenderCommand, PersonalizeClient } from
"@aws-sdk/client-personalize";
// create personalizeClient
const personalizeClient = new PersonalizeClient({
region: "REGION"
});
// set the recommender's parameters
export const createRecommenderParam = {
name: "RECOMMENDER_NAME", /* required */
recipeArn: "RECIPE_ARN", /* required */
datasetGroupArn: "DATASET_GROUP_ARN" /* required */
}
export const run = async () => {
try {
const response = await personalizeClient.send(new CreateRecommenderCommand(createRecommenderParam));
console.log("Success", response);
return response; // For unit tests.
} catch (err) {
console.log("Error", err);
}
};
run();
Configuring exploration
For Top picks for your
or Recommended for you
use cases,
Amazon Personalize uses exploration when recommending items. Exploration involves testing different item
recommendations to learn how users respond to items with very little interaction data. You
can configure exploration with the following:
-
Emphasis on exploring less relevant items (exploration weight) – Configure how
much to explore. Specify a decimal value between 0 to 1. The default is 0.3. The closer the value is to 1, the more exploration. With more exploration,
recommendations include more items with less interactions data or relevance based on previous behavior. At zero, no
exploration occurs and recommendations are based on current data
(relevance).
-
Exploration item age cutoff – Specify the maximum item age in days since
the latest interaction across all items in the Interactions dataset. This defines the scope of item exploration based on
item age. Amazon Personalize determines item age based on its creation timestamp or, if creation timestamp data is missing, interactions data. For
more information how Amazon Personalize determines item age, see Creation timestamp data.
To increase the items Amazon Personalize considers
during exploration, enter a greater value. The minimum is 1 day and the default is 30 days. Recommendations might include items
that are older than the item age cut off you specify. This is because these items are
relevant to the user and exploration didn't identify them.
The following code shows how to configure exploration when you create a recommender. The
example uses the default values.
- SDK for Python (Boto3)
-
import boto3
personalize = boto3.client('personalize')
create_recommender_response = personalize.create_recommender(
name = 'recommender name
',
recipeArn = 'arn:aws:personalize:::recipe/aws-vod-top-picks',
datasetGroupArn = 'dataset group ARN
',
recommenderConfig = {"itemExplorationConfig": {"explorationWeight": "0.3
", "explorationItemAgeCutOff": "30
"}}
)
recommender_arn = create_recommender_response['recommenderArn']
print('Recommender ARN:' + recommender_arn)
- SDK for JavaScript v3
// Get service clients and commands using ES6 syntax.
import { CreateRecommenderCommand, PersonalizeClient } from
"@aws-sdk/client-personalize";
// create personalizeClient
const personalizeClient = new PersonalizeClient({
region: "REGION"
});
// set the recommender's parameters
export const createRecommenderParam = {
name: "RECOMMENDER_NAME", /* required */
recipeArn: "RECIPE_ARN", /* required */
datasetGroupArn: "DATASET_GROUP_ARN", /* required */
recommenderConfig: {
itemExplorationConfig: {
explorationWeight: "0.3",
explorationItemAgeCutOff: "30"
}
}
};
export const run = async () => {
try {
const response = await personalizeClient.send(new CreateRecommenderCommand(createRecommenderParam));
console.log("Success", response);
return response; // For unit tests.
} catch (err) {
console.log("Error", err);
}
};
run();
Configuring columns used when training
You can modify the columns Amazon Personalize considers
when training the models backing your recommender. By default, Amazon Personalize uses all columns that can be used when training.
Columns with the boolean data type and custom non-categorical string fields aren't used.
You can't exclude EVENT_TYPE columns.
You can change the columns used when training to control what data Amazon Personalize uses when creating your recommender.
You might do this to experiment with different combinations of training data. Or you might exclude columns without meaningful data.
For example, you might have a column that you want to use only to filter recommendations. You can
exclude this column from training and Amazon Personalize considers it only when filtering.
To exclude columns from training, provide the excludedDatasetColumns
object in the trainingDataConfig
as part of the recommender configuration.
For each key, provide the dataset type. For each value, provide the list of columns to exclude.
The following code shows how to exclude columns from training when you create a recommender.
- SDK for Python (Boto3)
-
import boto3
personalize = boto3.client('personalize')
create_recommender_response = personalize.create_recommender(
name = 'recommender name
',
recipeArn = 'recipe name
',
datasetGroupArn = 'dataset group ARN
',
recommenderConfig = {
"trainingDataConfig": {
"excludedDatasetColumns": {
"datasetType
": ["COLUMN_A
", "COLUMN_B
"]
}
}
}
)
recommender_arn = create_recommender_response['recommenderArn']
print('Recommender ARN:' + recommender_arn)
- SDK for JavaScript v3
// Get service clients and commands using ES6 syntax.
import { CreateRecommenderCommand, PersonalizeClient } from
"@aws-sdk/client-personalize";
// create personalizeClient
const personalizeClient = new PersonalizeClient({
region: "REGION"
});
// set the recommender's parameters
export const createRecommenderParam = {
name: "RECOMMENDER_NAME", /* required */
recipeArn: "RECIPE_ARN", /* required */
datasetGroupArn: "DATASET_GROUP_ARN", /* required */
recommenderConfig: {
trainingDataConfig: {
excludedDatasetColumns: {
"DATASET_TYPE": ["COLUMN_A", "COLUMN_B"]
}
}
}
};
export const run = async () => {
try {
const response = await personalizeClient.send(new CreateRecommenderCommand(createRecommenderParam));
console.log("Success", response);
return response; // For unit tests.
} catch (err) {
console.log("Error", err);
}
};
run();