

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Introducción (AWS CLI)
<a name="getting-started-cli"></a>

En este ejercicio, utilizará la AWS Command Line Interface (AWS CLI) para explorar Amazon Personalize. Creará una campaña que devuelve recomendaciones de películas para un ID de usuario determinado.

Antes de empezar este ejercicio, haga lo siguiente:
+ Consulte los de la introducción [Requisitos previos para los ejercicios de introducción](gs-prerequisites.md).
+ Configure la AWS CLI, tal y como se especifica en [Configurar el AWS CLI](aws-personalize-set-up-aws-cli.md).

Cuando termine el ejercicio de introducción, para evitar incurrir en cargos innecesarios, elimine los recursos que ha creado. Para obtener más información, consulte [Requisitos para eliminar recursos de Amazon Personalize](deleting-resources.md). 

**nota**  
La comandos de la AWS CLI de este ejercicio se han probado en Linux. Para obtener información sobre el uso de comandos de AWS CLI en Windows, consulte [Especificación de valores de parámetros para la AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html) en la *Guía del usuario de AWS Command Line Interface*.

## Paso 1: Importar los datos de entrenamiento
<a name="gs-create-ds"></a>

Siga los pasos para crear un grupo de conjuntos de datos, añadir un conjunto de datos al grupo y, a continuación, rellenar el conjunto de datos con los datos de valoraciones de películas.

1. Ejecute el siguiente comando para crear un grupo de conjuntos de datos. Puede cifrar el grupo del conjunto de datos pasando un ARN de clave de [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) y el ARN de un rol de IAM que tenga permisos de acceso a esa clave como parámetros de entrada. Para obtener más información sobre la API, consulte [CreateDatasetGroup](API_CreateDatasetGroup.md).

   ```
   aws personalize create-dataset-group --name MovieRatingDatasetGroup --kms-key-arn {{arn:aws:kms:us-west-2:01234567890:key/1682a1e7-a94d-4d92-bbdf-837d3b62315e}} --role-arn {{arn:aws:iam::01234567890:KMS-key-access}}
   ```

   Se muestra el ARN del grupo de conjuntos de datos, por ejemplo:

   ```
   {
     "datasetGroupArn": "arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieRatingDatasetGroup"
   }
   ```

   Utilice el comando `describe-dataset-group` para mostrar el grupo de conjuntos de datos que ha creado especificando el ARN del grupo de conjuntos de datos que ha obtenido.

   ```
   aws personalize describe-dataset-group \
   --dataset-group-arn arn:aws:personalize:us-west-2:{{acct-id}}:dataset-group/MovieRatingDatasetGroup
   ```

   Se muestran el grupo de conjuntos de datos y sus propiedades, por ejemplo:

   ```
   {
       "datasetGroup": {
           "name": "MovieRatingDatasetGroup",
           "datasetGroupArn": "arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieRatingDatasetGroup",
           "status": "ACTIVE",
           "creationDateTime": 1542392161.262,
           "lastUpdatedDateTime": 1542396513.377
       }
   }
   ```
**nota**  
Espere hasta que el valor de `status` para el grupo de conjuntos de datos sea ACTIVE antes de poder crear un conjunto de datos en el grupo. Esta operación suele ser rápida.

   Si no recuerda el ARN del grupo de conjuntos de datos, utilice el comando `list-dataset-groups` para mostrar todos los grupos de conjuntos de datos que ha creado, junto con sus ARN.

   ```
   aws personalize list-dataset-groups
   ```
**nota**  
Los comandos `describe-object` y `list-objects` están disponibles para la mayoría de los objetos de Amazon Personalize. Estos comandos no se muestran en el resto de este ejercicio, pero están disponibles.

1. Cree un archivo de esquema en formato JSON guardando el siguiente código en un archivo denominado `MovieRatingSchema.json`. El esquema coincide con los encabezados que añadió previamente en `ratings.csv`. El nombre del esquema es `Interactions`, que coincide con uno de los tipos de conjuntos de datos que reconoce Amazon Personalize. Para obtener más información, consulte [Creación de archivos JSON de esquema para los esquemas de Amazon Personalize](how-it-works-dataset-schema.md).

   ```
   {
     "type": "record",
     "name": "Interactions",
     "namespace": "com.amazonaws.personalize.schema",
     "fields": [
         {
             "name": "USER_ID",
             "type": "string"
         },
         {
             "name": "ITEM_ID",
             "type": "string"
         },
         {
             "name": "TIMESTAMP",
             "type": "long"
         }
     ],
     "version": "1.0"
   }
   ```

1. Ejecute el siguiente comando para crear un esquema. Especifique el archivo que guardó en el paso anterior. En el ejemplo, el archivo pertenece a la carpeta actual. Para obtener más información sobre la API, consulte [CreateSchema](API_CreateSchema.md).

   ```
   aws personalize create-schema \
     --name MovieRatingSchema \
     --schema file://MovieRatingSchema.json
   ```

   Se muestra el nombre de recurso de Amazon (ARN) del esquema, por ejemplo:

   ```
   {
     "schemaArn": "arn:aws:personalize:us-west-2:acct-id:schema/MovieRatingSchema"
   }
   ```

1. Ejecute el siguiente comando para crear un conjunto de datos vacío. Proporcione el ARN del grupo de conjuntos de datos y el ARN del esquema que obtuvo en los pasos anteriores. El valor de `dataset-type` debe coincidir con el valor de `name` del esquema del paso anterior. Para obtener más información sobre la API, consulte [CreateDataset](API_CreateDataset.md).

   ```
   aws personalize create-dataset \
     --name MovieRatingDataset \
     --dataset-group-arn arn:aws:personalize:us-west-2:{{acct-id}}:dataset-group/MovieRatingDatasetGroup \
     --dataset-type Interactions \
     --schema-arn arn:aws:personalize:us-west-2:{{acct-id}}:schema/MovieRatingSchema
   ```

   Se muestra el ARN del conjunto de datos, por ejemplo:

   ```
   {
     "datasetArn": "arn:aws:personalize:us-west-2:acct-id:dataset/MovieRatingDatasetGroup/INTERACTIONS"
   }
   ```

1. Añada los datos de entrenamiento al conjunto de datos.

   1. Ejecute el siguiente comando para crear un trabajo de importación de conjunto de datos. Proporcione el ARN del conjunto de datos y el nombre del bucket de Amazon S3 que obtuvo en los pasos anteriores. Indique el ARN del rol de AWS Identity and Access Management (IAM) que creó en [Creación de un rol de IAM para Amazon Personalize](set-up-required-permissions.md#set-up-create-role-with-permissions). Para obtener más información sobre la API, consulte [CreateDatasetImportJob](API_CreateDatasetImportJob.md).

      ```
      aws personalize create-dataset-import-job \
        --job-name MovieRatingImportJob \
        --dataset-arn arn:aws:personalize:us-west-2:{{acct-id}}:dataset/MovieRatingDatasetGroup/INTERACTIONS \
        --data-source dataLocation=s3://{{amzn-s3-demo-bucket}}/ratings.csv \
        --role-arn {{roleArn}}
      ```

      Se muestra el ARN del trabajo de importación de conjunto de datos, por ejemplo:

      ```
      {
        "datasetImportJobArn": "arn:aws:personalize:us-west-2:acct-id:dataset-import-job/MovieRatingImportJob"
      }
      ```

   1. Compruebe el estado utilizando el comando `describe-dataset-import-job`. Proporcione el ARN del trabajo de importación de conjunto de datos que obtuvo en el paso anterior. Para obtener más información sobre la API, consulte [DescribeDatasetImportJob](API_DescribeDatasetImportJob.md).

      ```
      aws personalize describe-dataset-import-job \
        --dataset-import-job-arn arn:aws:personalize:us-west-2:{{acct-id}}:dataset-import-job/MovieRatingImportJob
      ```

      Se muestran las propiedades del trabajo de importación del conjunto de datos y su estado. En un principio, el valor de `status` es CREATE PENDING; por ejemplo:

      ```
      {
        "datasetImportJob": {
            "jobName": "MovieRatingImportJob",
            "datasetImportJobArn": "arn:aws:personalize:us-west-2:acct-id:dataset-import-job/MovieRatingImportJob",
            "datasetArn": "arn:aws:personalize:us-west-2:acct-id:dataset/MovieRatingDatasetGroup/INTERACTIONS",
            "dataSource": {
                "dataLocation": "s3://amzn-s3-demo-bucket/ratings.csv"
            },
            "roleArn": "role-arn",
            "status": "CREATE PENDING",
            "creationDateTime": 1542392161.837,
            "lastUpdatedDateTime": 1542393013.377
        }
      }
      ```

      La importación del conjunto de datos finaliza cuando el estado es ACTIVO. En ese momento, estará listo para entrenar el modelo utilizando el conjunto de datos especificado.
**nota**  
La importación lleva tiempo. Espere hasta que se haya completado la importación del conjunto de datos para entrenar el modelo con el conjunto de datos.

## Paso 2: Crear una solución (entrenar el modelo)
<a name="gs-create-solution"></a>

Para entrenar un modelo, cree la configuración para entrenarlo mediante la operación [CreateSolution](API_CreateSolution.md) y deje activado el entrenamiento automático. La solución comienza automáticamente a entrenar la primera solución en una hora.

Para entrenar un modelo, se utiliza una receta y sus datos de entrenamiento. Amazon Personalize proporciona un conjunto de recetas predefinidas. Para obtener más información, consulte [Elección de una receta](working-with-predefined-recipes.md). Para este ejercicio, debe usar la receta User-Personalization-v2.

1. Cree la configuración de entrenamiento de un modelo con el siguiente comando. Este comando crea una solución que utiliza el entrenamiento automático. Crea automáticamente una nueva versión de solución cada siete días (el valor predeterminado).

   ```
   aws personalize create-solution \
     --name MovieSolution \
     --dataset-group-arn arn:aws:personalize:us-west-2:{{acct-id}}:dataset-group/MovieRatingDatasetGroup \
     --recipe-arn arn:aws:personalize:::recipe/aws-user-personalization-v2 \ 
     --perform-auto-training \
     --solution-config "{\"autoTrainingConfig\": {\"schedulingExpression\": \"rate(7 days)\"}}"
   ```

   Se muestra el ARN de la solución, por ejemplo:

   ```
   {
     "solutionArn": "arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution"
   }
   ```

1. Compruebe el estado del proceso de *creación* con el comando `describe-solution`. Proporcione el ARN de la solución que se devolvió en el paso anterior. Para obtener más información sobre la API, consulte [DescribeSolution](API_DescribeSolution.md).

   ```
   aws personalize describe-solution \
     --solution-arn arn:aws:personalize:us-west-2:{{acct-id}}:solution/MovieSolution
   ```

   Se muestran las propiedades de la solución, entre ellas, `status`, para la operación de creación. Por ejemplo:

   ```
   {      
     "solution": {
         "name": "MovieSolution",
         "solutionArn": "arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution",
         "performHPO": false,
         "performAutoML": false,
         "recipeArn": "arn:aws:personalize:::recipe/aws-user-personalization-v2",
         "datasetGroupArn": "arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieRatingDatasetGroup",
         "solutionConfig": {
               "algorithmHyperParameters": {
                   "apply_recency_bias": "true"
               },
               "featureTransformationParameters": {},
               "autoTrainingConfig": {
                   "schedulingExpression": "rate(7 days)"
               }
          },
         "status": "ACTIVE",
         "creationDateTime": "2021-05-12T16:27:59.819000-07:00",
         "lastUpdatedDateTime": "2021-05-12T16:27:59.819000-07:00"
     }
   }
   ```

1.  Con el entrenamiento automático, el entrenamiento de versiones de solución comienza una vez que el estado de la solución sea ACTIVE. Una vez que comience el entrenamiento, puede obtener el nombre de recurso de Amazon (ARN) de la versión de solución con el siguiente comando [ListSolutionVersions](https://docs.aws.amazon.com/personalize/latest/dg/API_ListSolutionVersions.html): 

   ```
   aws personalize list-solution-versions --solution-arn arn:aws:personalize:us-west-2:{{acct-id}}:solution/MovieSolution
   ```

1. Compruebe el estado del proceso de *entrenamiento* de la versión de solución utilizando el comando `describe-solution-version`. Proporcione el ARN de versión de solución que se devolvió en el paso anterior. Para obtener más información sobre la API, consulte [DescribeSolutionVersion](API_DescribeSolutionVersion.md).

   ```
   aws personalize describe-solution-version \
     --solution-version-arn arn:aws:personalize:us-west-2:{{acct-id}}:solution/MovieSolution/{{version-id}}
   ```

   Se muestran las propiedades de la versión de solución y el valor de `status` del entrenamiento. En un principio, el estado mostrado es CREATE PENDING; por ejemplo:

   ```
   {
     "solutionVersion": {
         "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution/<version-id>",
         ...,
         "status": "CREATE PENDING"
     }
   }
   ```

1. Cuando la versión de la solución de `status` se muestre como ACTIVE, el entrenamiento habrá terminado.

   Ahora puede revisar las métricas de entrenamiento y crear una campaña con la versión de la solución.
**nota**  
El entrenamiento lleva tiempo. Espere hasta que finalice el entrenamiento (cuando el estado del *entrenamiento* de la versión de solución sea ACTIVE) para poder utilizar esta versión de solución en una campaña.

1. Puede validar el rendimiento de la versión de solución revisando sus métricas. Ejecute el siguiente comando para obtener las métricas de la versión de solución. Proporcione el ARN de la versión de la solución que se devolvió anteriormente. Para obtener más información sobre la API, consulte [GetSolutionMetrics](API_GetSolutionMetrics.md).

   ```
   aws personalize get-solution-metrics \
     --solution-version-arn arn:aws:personalize:us-west-2:{{acct-id}}:solution/MovieSolution/{{version-id}}
   ```

   A continuación, se muestra una respuesta de ejemplo:

   ```
   {
     "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/www-solution/<version-id>",
     "metrics": {
           "coverage": 0.0485,
           "mean_reciprocal_rank_at_25": 0.0381,
           "normalized_discounted_cumulative_gain_at_10": 0.0363,
           "normalized_discounted_cumulative_gain_at_25": 0.0984,
           "normalized_discounted_cumulative_gain_at_5": 0.0175,
           "precision_at_10": 0.0107,
           "precision_at_25": 0.0207,
           "precision_at_5": 0.0107
       }
   }
   ```

## Paso 3: Crear una campaña (implementar la solución)
<a name="gs-create-campaign"></a>

Para poder obtener recomendaciones, debe implementar una versión de la solución. La implementación de una solución también se conoce como crear una campaña. Una vez que haya creado una campaña, su aplicación cliente puede obtener recomendaciones utilizando la API [GetRecommendations](API_RS_GetRecommendations.md).

1. Ejecute el siguiente comando para crear una campaña. Proporcione el ARN de versión de solución que se devolvió en el paso anterior. Para obtener más información sobre la API, consulte [CreateCampaign](API_CreateCampaign.md).

   ```
   aws personalize create-campaign \
     --name MovieRecommendationCampaign \
     --solution-version-arn arn:aws:personalize:us-west-2:{{acct-id}}:solution/MovieSolution/{{version-id}} \
     --min-provisioned-tps 1
   ```

   A continuación, se muestra una respuesta de ejemplo:

   ```
   {
     "campaignArn": "arn:aws:personalize:us-west-2:acct-id:campaign/MovieRecommendationCampaign"
   }
   ```

1. Ejecute el siguiente comando para comprobar el estado de la implementación: Proporcione el ARN de la campaña que se devolvió en el paso anterior. Para obtener más información sobre la API, consulte [DescribeCampaign](API_DescribeCampaign.md).

   ```
   aws personalize describe-campaign \
     --campaign-arn arn:aws:personalize:us-west-2:{{acct-id}}:campaign/MovieRecommendationCampaign
   ```

   A continuación, se muestra una respuesta de ejemplo:

   ```
   {
     "campaign": { 
         "name": "MovieRecommendationCampaign",
         "campaignArn": "arn:aws:personalize:us-west-2:acct-id:campaign/MovieRecommendationCampaign",
         "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution/<version-id>",
         "minProvisionedTPS": "1",
         "creationDateTime": 1543864775.923,
         "lastUpdatedDateTime": 1543864791.923,
         "status": "CREATE IN_PROGRESS"
     }
   }
   ```
**nota**  
Espere hasta que la propiedad `status` se muestre como ACTIVE para poder obtener recomendaciones de la campaña.

## Paso 4: Obtener recomendaciones
<a name="gs-test"></a>

Ejecute el comando `get-recommendations` para obtener recomendaciones. Proporcione el ARN de la campaña que se devolvió en el paso anterior. En la solicitud, debe especificar un ID de usuario del conjunto de datos de valoraciones de películas. Para obtener más información sobre la API, consulte [GetRecommendations](API_RS_GetRecommendations.md).

**nota**  
No todas las recetas admiten la API `GetRecommendations`. Para obtener más información, consulte [Elección de una receta](working-with-predefined-recipes.md).  
El comando de la AWS CLI que se utiliza en este paso, `personalize-runtime`, no coincide con el de los pasos anteriores.

```
aws personalize-runtime get-recommendations \
  --campaign-arn arn:aws:personalize:us-west-2:{{acct-id}}:campaign/MovieRecommendationCampaign \
  --user-id 123
```

Como respuesta, la campaña devuelve una lista de recomendaciones de elementos (ID de películas) que podrían gustarle al usuario. La lista está ordenada por orden descendente de relevancia para el usuario.

```
{
  "itemList": [
      {
          "itemId": "14"
      },
      {
          "itemId": "15"
      },
      {
          "itemId": "275"
      },
      {
          "itemId": "283"
      },
      {
          "itemId": "273"
      },
      ...
  ]
}
```