

 Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la [publicación del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Machine learning
<a name="machine_learning"></a>

El machine learning de Amazon Redshift (Amazon Redshift ML) es un servicio robusto basado en la nube que permite a los analistas y los científicos de datos con todos los niveles de habilidades usar tecnología de machine learning con más facilidad. Amazon Redshift ML utiliza un modelo para generar resultados. Puede utilizar modelos de las siguientes maneras:
+ Puede proporcionar los datos que desea para entrenar un modelo y los metadatos asociados a las entradas de datos a Amazon Redshift. A continuación, Amazon Redshift ML crea modelos en Amazon SageMaker AI capaces de detectar patrones en los datos de entrada. Al utilizar sus propios datos para el modelo, puede utilizar Amazon Redshift ML para identificar tendencias en los datos, como la predicción de la pérdida, el valor de por vida del cliente o la predicción de los ingresos. Puede utilizar estos modelos para generar predicciones para los nuevos datos de entrada sin incurrir en costos adicionales.
+ Puede utilizar uno de los modelos fundacionales (FM) proporcionados por Amazon Bedrock, como Claude o Amazon Titan. Con Amazon Bedrock, puede combinar la potencia de los modelos de lenguaje grande (LLM) con los datos de análisis en Amazon Redshift en unos pocos pasos. Si utiliza un modelo de lenguaje grande (LLM) externo, puede utilizar Amazon Redshift para realizar el procesamiento de lenguaje natural (NLP) en los datos. Puede utilizar el NLP para aplicaciones como la generación de texto, el análisis de opiniones o la traducción. Para obtener información acerca del uso de Amazon Bedrock con Amazon Redshift, consulte [Integración de Amazon Redshift ML con Amazon Bedrock](machine-learning-br.md).

**nota**  
**Desactivación del uso de los datos para mejorar el servicio**  
Si utiliza los modelos de Amazon Bedrock, le recomendamos que lea las políticas de AWS sobre cómo el servicio de Amazon Bedrock gestiona los datos. Debe determinar si necesita utilizar una política de exclusión voluntaria para evitar que el servicio utilice los datos para mejorar el modelo o el servicio, en caso de que Amazon Bedrock implemente dicha funcionalidad en el futuro. Para garantizar que el servicio no utilice los datos para tales fines, utilice la política general de exclusión de AWS.   
Para obtener más información, consulte los siguientes temas:  
[Políticas de exclusión de servicios de IA](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html)
[Preguntas frecuentes de Amazon Bedrock](https://aws.amazon.com/bedrock/faqs/)

**nota**  
 Los LLM pueden generar información imprecisa o incompleta. Recomendamos verificar la información que producen los LLM para garantizar que sea precisa y completa.

**Funcionamiento de Amazon Redshift ML con Amazon SageMaker AI**

Amazon Redshift funciona con el Piloto automático de Amazon SageMaker AI para obtener automáticamente el modelo más adecuado y hacer que la función de predicción esté disponible en Amazon Redshift.

En el siguiente diagrama, se ilustra cómo funciona Amazon Redshift ML.

![\[Flujo de trabajo para la integración de Amazon Redshift ML con el Piloto automático de Amazon SageMaker AI.\]](http://docs.aws.amazon.com/es_es/redshift/latest/dg/images/machine_learning_overview.png)


El flujo de trabajo general es el siguiente:

1. Amazon Redshift exporta los datos de formación a Amazon S3. 

1. El Piloto automático de Amazon SageMaker AI procesa previamente los datos de entrenamiento. El *procesamiento previo* cumple funciones esenciales, tales como la imputación de los valores faltantes. Reconoce que ciertas columnas son categóricas (como el código postal), les da el formato adecuado para la formación y realiza muchas otras tareas. Elegir los mejores preprocesadores que se aplicarán en el conjunto de datos de entrenamiento es un problema en sí mismo, por lo que el Piloto automático de Amazon SageMaker AI automatiza su solución.

1. El Piloto automático de Amazon SageMaker AI encuentra el algoritmo y los hiperparámetros del algoritmo que ofrecen el modelo que tiene las predicciones más precisas.

1. Amazon Redshift registra la función de predicción como una función SQL en el clúster de Amazon Redshift.

1. Cuando se ejecutan instrucciones CREATE MODEL, Amazon Redshift utiliza Amazon SageMaker AI para el entrenamiento. Por lo tanto, la formación de su modelo conlleva un costo adicional. Se trata de una partida independiente específica de Amazon SageMaker AI en su factura de AWS. También se paga por el almacenamiento utilizado en Amazon S3 para guardar los datos de formación. No se cobra la inferencia mediante modelos creados con CREATE MODEL que puede compilar y ejecutar en su clúster de Redshift. No se aplican cargos adicionales a Amazon Redshift por utilizar Amazon Redshift ML.

**Topics**
+ [Información general sobre machine learning](machine_learning_overview.md)
+ [Machine learning para principiantes y expertos](novice_expert.md)
+ [Costos de utilizar Amazon Redshift ML](cost.md)
+ [Introducción a Amazon Redshift ML](getting-started-machine-learning.md)
+ [Tutoriales de Amazon Redshift ML](tutorials_for_amazon_redshift_ml.md)
+ [Integración de Amazon Redshift ML con Amazon Bedrock](machine-learning-br.md)

# Información general sobre machine learning
<a name="machine_learning_overview"></a>

Con Amazon Redshift, puede aprovechar las capacidades de machine learning para obtener información valiosa de los datos. Esta información general de machine learning (ML) le muestra cómo explorar, visualizar y preparar los datos para el entrenamiento del modelo y la implementación de ML. Las siguientes secciones lo guiarán a través del proceso de uso de Amazon Redshift ML para desbloquear el potencial de los datos mediante machine learning.

A través de Amazon Redshift ML, puede formar modelos de machine learning con instrucciones SQL e invocarlos en consultas SQL para generar predicciones.

Si desea aprender a utilizar Amazon Redshift ML, puede ver el video que aparece a continuación. 

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/pJF2kYGtO4A/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/pJF2kYGtO4A)


Para obtener información sobre los requisitos previos necesarios para configurar el clúster de Redshift o el grupo de trabajo sin servidor, los permisos y la propiedad para utilizar Amazon Redshift ML, lea las siguientes secciones. En estas secciones, también se describe el funcionamiento sencillo de la formación y las predicciones en Amazon Redshift ML.

## Solución de problemas con machine learning
<a name="solve_problem"></a>

Un modelo de machine learning genera predicciones mediante la búsqueda de patrones en sus datos de formación y la posterior aplicación de dichos patrones a los nuevos datos. En machine learning, se forman estos modelos a través del aprendizaje de los patrones que mejor explican los datos. A continuación, se utilizan los modelos para generar predicciones (también denominadas inferencias) a partir de los nuevos datos. Por lo general, el machine learning es un proceso iterativo en el que se puede seguir mejorando la precisión de las predicciones a través de la modificación de los parámetros y la mejora de los datos de formación. Si se producen cambios en los datos, se vuelven a formar los nuevos modelos a partir del conjunto de datos nuevo. 

Existen diferentes enfoques fundamentales en torno al machine learning para abordar los diversos objetivos empresariales.

### Aprendizaje supervisado en Amazon Redshift ML
<a name="supervised_learning"></a>

Amazon Redshift admite el aprendizaje supervisado, que es el enfoque más común para el análisis empresarial avanzado. El aprendizaje supervisado constituye el enfoque de machine learning preferido cuando se dispone de un conjunto de datos establecido y de un conocimiento del modo en que los datos de entrada específicos predicen diversos resultados empresariales. Este tipo de resultado a veces se denomina etiqueta. En concreto, su conjunto de datos es una tabla con atributos que comprenden características (entradas) y objetivos (salidas). Por ejemplo, supongamos que dispone de una tabla que proporciona la edad y el código postal de los clientes anteriores y actuales. Supongamos que también dispone de un campo “activo” que se encuentra configurado como true para los clientes actuales y como false para quienes hayan suspendido su suscripción. El objetivo del machine learning supervisado consiste en detectar los patrones de edad y código postal que conducen a la deserción de los clientes, tal y como la representan los clientes cuyo objetivo es “False” (Falso). Puede utilizar este modelo para predecir qué clientes son propensos a darse de baja, como suspender su suscripción, para así ofrecer posibles incentivos para retenerlos.

Amazon Redshift admite el aprendizaje supervisado que incluye la regresión, la clasificación binaria y la clasificación multiclase. La regresión se refiere a la problemática de predecir valores continuos, como el gasto total de los clientes. La clasificación binaria se refiere a la problemática de predecir uno de dos resultados, como predecir si un cliente se dará de baja o no. La clasificación multiclase se refiere a la problemática de predecir uno de los muchos resultados, como predecir el elemento en el que podría estar interesado un cliente. Los analistas y los científicos de datos pueden utilizarla para llevar a cabo un aprendizaje supervisado que les permita abordar una serie de problemáticas que van desde los pronósticos, la personalización o la predicción de la deserción de clientes. Asimismo, se puede recurrir al aprendizaje supervisado para resolver distintos problemas, como la predicción de las ventas que se concretarán, la predicción de los ingresos, la detección de fraudes y la predicción del valor de la vida útil del cliente. 

### Aprendizaje sin supervisar en Amazon Redshift ML
<a name="unsupervised_learning"></a>

El aprendizaje sin supervisar utiliza algoritmos de machine learning para analizar y agrupar datos de formación sin etiquetar. Los algoritmos descubren patrones o agrupaciones ocultos. El objetivo es modelar la estructura o distribución subyacente de los datos para obtener más información sobre los datos.

Amazon Redshift admite el algoritmo de clústeres K-Means para resolver un problema de aprendizaje sin supervisar. Este algoritmo resuelve problemas en clústeres en los que desea descubrir agrupaciones en los datos. El algoritmo K-Means intenta encontrar agrupaciones discretas dentro de los datos. Los datos sin clasificar se agrupan y dividen en función de sus similitudes y diferencias. Mediante la agrupación, el algoritmo K-Means determina iterativamente los mejores centroides y asigna cada miembro al centroide más cercano. Los miembros más cercanos al mismo centroide pertenecen al mismo grupo. Los miembros de un grupo son lo más parecido posible a otros miembros del mismo grupo y lo más diferente posible de los miembros de otros grupos. Por ejemplo, el algoritmo de clústeres K-Means se puede utilizar para clasificar ciudades afectadas por una pandemia o para clasificar ciudades en función de la popularidad de los productos de consumo.

Al utilizar el algoritmo K-Means, especifica una entrada `k` que especifica el número de clústeres para buscar en los datos. La salida de este algoritmo es un conjunto de centroides k. Cada punto de datos pertenece a uno de los clústeres k más cercanos a él. Cada clúster se describe mediante su centroide. El centroide se puede considerar como el promedio multidimensional del clúster. El algoritmo K-Means compara las distancias para ver qué tan diferentes son los clústeres entre sí. Generalmente, una distancia mayor indica una mayor diferencia entre los clústeres.

El procesamiento previo de los datos es importante para K-Means, ya que garantiza que las características del modelo se mantengan a la misma escala y produzcan resultados confiables. Amazon Redshift admite algunos procesadores previos de K-Means para la instrucción CREATE MODEL, como StandardScaler, MinMax y NumericPassthrough. Si no desea aplicar ningún procesamiento previo para K-Means, elija NumericPassthrough explícitamente como transformador. Para obtener más información sobre los parámetros de K-Means, consulte [CREATE MODEL con parámetros K-MEANS](r_create_model_use_cases.md#r_k-means-create-model-parameters).

Si desea aprender a realizar una formación sin supervisión con agrupación en clústeres de K-means, puede ver el siguiente video. 

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/TFKgl5d0U_0/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/TFKgl5d0U_0)


## Términos y conceptos de Amazon Redshift ML
<a name="terminology"></a>

Los siguientes términos se utilizan para describir algunos conceptos de Amazon Redshift ML:
+ El *machine learning* en Amazon Redshift forma un modelo con un comando SQL. Amazon Redshift ML y Amazon SageMaker AI administran la totalidad de los procesos de conversión de datos, los permisos, el uso de recursos y la detección del modelo adecuado. 
+ La *formación* es la fase en la que Amazon Redshift crea un modelo de machine learning mediante la ejecución de un subconjunto específico de datos en el modelo. Amazon Redshift AI inicializa automáticamente un trabajo de entrenamiento en Amazon SageMaker AI y genera un modelo. 
+ La *predicción* (también denominada *inferencia*) representa el uso del modelo en las consultas SQL de Amazon Redshift para predecir resultados. En el momento de la inferencia, Amazon Redshift utiliza una función de predicción basada en un modelo que forma parte de una consulta más amplia destinada a generar predicciones. Las predicciones se calculan a nivel local, en el clúster de Redshift, lo que permite proporcionar un alto nivel de rendimiento, una baja latencia y ningún costo adicional.
+ Con *traiga su propio modelo (BYOM)*, puede utilizar un modelo entrenado fuera de Amazon Redshift con Amazon SageMaker AI para la inferencia local dentro de la base de datos de Amazon Redshift. Amazon Redshift ML admite el uso de BYOM en la inferencia local.
+ La *inferencia local* se utiliza si los modelos se entrenan previamente en Amazon SageMaker AI, se compilan con Amazon SageMaker AI Neo y se localizan en Amazon Redshift ML. Si desea importar a Amazon Redshift modelos compatibles con la inferencia local, utilice el comando CREATE MODEL. Amazon Redshift importa los modelos ya entrenados de SageMaker AI llamando a Amazon SageMaker AI Neo. Allí, se compila el modelo y se importa el modelo compilado a Amazon Redshift. Utilice la inferencia local para obtener mayor velocidad y reducir los costos.
+ La *inferencia remota* se utiliza cuando Amazon Redshift invoca un punto de conexión del modelo que se ha implementado en SageMaker AI. La inferencia remota proporciona la flexibilidad necesaria para invocar todo tipo de modelos personalizados y modelos de aprendizaje profundo; por ejemplo, los modelos de TensorFlow que se hayan creado e implementado en Amazon SageMaker AI.

Además, cabe destacar lo siguiente:
+ *Amazon SageMaker AI* es un servicio de machine learning completamente administrado. Con Amazon SageMaker AI, los desarrolladores y los científicos de datos pueden crear, entrenar e implementar fácilmente y de manera directa los modelos en un entorno alojado listo para la producción. Para obtener más información acerca de Amazon SageMaker, consulte [What is Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) en la *Guía para desarrolladores de Amazon SageMaker AI*.
+ El *Piloto automático de Amazon SageMaker AI* es un conjunto de características que entrena y ajusta automáticamente los modelos de machine learning más adecuados para la clasificación o la regresión, en función de sus datos. Mantiene pleno control y visibilidad. El Piloto automático de Amazon SageMaker AI admite datos de entrada en formato tabular. El Piloto automático de Amazon SageMaker AI ofrece una limpieza y preprocesamiento automático de los datos, selección automática de algoritmos para la regresión lineal, clasificación binaria y clasificación multiclase. También admite la optimización automática de hiperparámetros (HPO), la formación distribuida, la instancia automática y la selección del tamaño del clúster. Para obtener más información acerca del Piloto automático de Amazon SageMaker AI, consulte [Automate model development with Amazon SageMaker AI Autopilot](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-automate-model-development.html) en la *Guía para desarrolladores de Amazon SageMaker AI*.
+ *Amazon Bedrock* es un servicio totalmente administrado que ofrece una selección de modelos fundacionales (FM) de alto rendimiento de las principales empresas de IA, como AI21 Labs, Anthropic, Cohere, Meta, Mistral AI, Stability AI y Amazon, a través de una sola API, junto con un amplio conjunto de capacidades necesarias para crear aplicaciones de IA generativa.

# Machine learning para principiantes y expertos
<a name="novice_expert"></a>

Con Amazon Redshift, puede aprovechar las capacidades de machine learning (ML) para obtener información a partir de los datos, si es un principiante o si es un experto en ML. Machine learning es una característica de Amazon Redshift que le permite crear, entrenar e implementar modelos de ML mediante comandos SQL, sin necesidad de una amplia experiencia en ML ni de una compleja ingeniería de datos.

Las siguientes secciones lo guiarán a través del proceso de uso de machine learning, lo que le permitirá desbloquear el potencial completo de los datos con Amazon Redshift.

Amazon Redshift ML le permite formar modelos con un solo comando SQL CREATE MODEL. El comando CREATE MODEL crea un modelo que Amazon Redshift utiliza para generar predicciones basadas en el modelo con construcciones SQL conocidas.

Amazon Redshift ML resulta de gran utilidad cuando no se tiene experiencia en lo que respecta a machine learning, herramientas, lenguajes, algoritmos y API. Gracias a Amazon Redshift ML, no se ve obligado a realizar las tareas complejas y no diferenciadas que se requieren para la integración con un servicio de machine learning externo. Amazon Redshift le permite ahorrar tiempo para formatear y mover datos; administrar controles de permisos; o crear integraciones, flujos de trabajo y scripts personalizados. Se pueden utilizar fácilmente algoritmos de machine learning populares y simplificar las necesidades de formación que requieren una iteración frecuente desde la formación hasta la predicción. Amazon Redshift detecta de forma automática el mejor algoritmo y ajusta el modelo más adecuado para su problema. Puede generar predicciones desde el clúster de Amazon Redshift sin necesidad de trasladar los datos fuera de este ni de interconectarlos con otro servicio ni pagar por su uso.

Amazon Redshift ML ayuda a analistas de datos y científicos de datos a utilizar machine learning. También permite que los expertos en machine learning utilicen sus conocimientos para guiar la instrucción CREATE MODEL y utilizar únicamente los aspectos que especifican. De este modo, se puede acelerar el tiempo que CREATE MODEL necesita a la hora de buscar el mejor candidato, mejorar la precisión del modelo o ambos. 

La instrucción CREATE MODEL ofrece flexibilidad en la manera en que puede especificar los parámetros para el trabajo de formación. Con esta flexibilidad, los principiantes o expertos en machine learning pueden elegir sus procesadores previos, algoritmos, tipos de problemas o hiperparámetros preferidos. Por ejemplo, un usuario interesado en la deserción de los clientes podría especificar para la instrucción CREATE MODEL que el tipo de problema corresponde a una clasificación binaria, la cual funciona bien para los casos de deserción de clientes. A continuación, la instrucción CREATE MODEL acota la búsqueda para encontrar el modelo más adecuado entre los modelos de clasificación binaria. Incluso con la elección del tipo de problema por parte del usuario, aún existen numerosas opciones con las que puede funcionar la instrucción CREATE MODEL. Por ejemplo, CREATE MODEL detecta y aplica las transformaciones de preprocesamiento más adecuadas y determina cuál es la mejor configuración de los hiperparámetros.

Amazon Redshift ML facilita el entrenamiento mediante la búsqueda automática del modelo más adecuado utilizando el Piloto automático de Amazon SageMaker AI. El Piloto automático de Amazon SageMaker AI entrena y ajusta automáticamente en segundo plano el modelo de machine learning más adecuado en función de los datos suministrados. A continuación, Amazon SageMaker AI Neo compila el modelo de entrenamiento y hace que esté disponible para la predicción en su clúster de Redshift. Cuando se ejecuta una consulta de inferencia de machine learning con un modelo formado, la consulta puede utilizar las capacidades de procesamiento masivo en paralelo de Amazon Redshift. Al mismo tiempo, la consulta puede utilizar predicciones basadas en machine learning. 
+ Los *principiantes en machine learning*, con conocimientos generales sobre los diferentes aspectos de esta tecnología, como procesadores previos, algoritmos e hiperparámetros, utilizan la instrucción CREATE MODEL únicamente para aquellos aspectos que especifican. De este modo, se puede acortar el tiempo que CREATE MODEL necesita a la hora de buscar el mejor candidato o mejorar la precisión del modelo. Además, se puede aumentar el valor empresarial de las predicciones mediante la incorporación de conocimientos adicionales sobre la materia, como el tipo de problema o el objetivo. Por ejemplo, en un escenario de deserción de clientes, si el resultado “el cliente no está activo” es poco frecuente, se suele preferir el objetivo F1 en lugar del objetivo de precisión. Como los modelos de alta precisión tal vez predicen que “el cliente está activo” en todo momento, esto se traduce en una alta precisión, pero escaso valor empresarial. Para obtener más información acerca de los objetivos F1, consulte [AutoMLJobObjective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) en la *Referencia de la API de Amazon SageMaker AI*.

  Para obtener más información sobre las opciones básicas de la instrucción CREATE MODEL, consulte [CREATE MODEL simple](r_create_model_use_cases.md#r_simple_create_model).
+ Como *profesional avanzado de machine learning*, puede especificar el tipo de problema y los preprocesadores para ciertas características (aunque no todas). Luego, CREATE MODEL sigue las sugerencias sobre los aspectos especificados. Al mismo tiempo, CREATE MODEL continúa con la detección de los mejores procesadores previos para las características restantes y los mejores hiperparámetros. Para obtener más información sobre cómo restringir uno o más aspectos de la canalización de formación, consulte [CREATE MODEL con guía para el usuario](r_create_model_use_cases.md#r_user_guidance_create_model).
+ Como *experto en machine learning*, puede tomar el control total de la formación y el ajuste de los hiperparámetros. Entonces, la instrucción CREATE MODEL no intenta detectar los procesadores previos, los algoritmos y los hiperparámetros óptimos, ya que es usted quien determina todas las opciones. Para obtener más información sobre cómo utilizar CREATE MODEL con AUTO OFF, consulte [CREATE para modelos XGBoost con AUTO OFF](r_create_model_use_cases.md#r_auto_off_create_model).
+ Como *ingeniero de datos*, puede incorporar un modelo de XGBoost previamente entrenado en Amazon SageMaker AI e importarlo a Amazon Redshift para la inferencia local. Con traiga su propio modelo (BYOM), puede utilizar un modelo entrenado fuera de Amazon Redshift con Amazon SageMaker AI para la inferencia local dentro de la base de datos de Amazon Redshift. Amazon Redshift ML admite el uso de BYOM en la inferencia local o remota.

  Para obtener más información sobre cómo utilizar la instrucción CREATE MODEL para inferencia local o remota, consulte [Bring your own model (BYOM): inferencia local](r_create_model_use_cases.md#r_byom_create_model). 

Los usuarios de Amazon Redshift ML pueden elegir cualquiera de las siguientes opciones para formar e implementar su modelo:
+ Para los tipos de problemas, consulte [CREATE MODEL con guía para el usuario](r_create_model_use_cases.md#r_user_guidance_create_model).
+ Para los objetivos, consulte [CREATE MODEL con guía para el usuario](r_create_model_use_cases.md#r_user_guidance_create_model) o [CREATE para modelos XGBoost con AUTO OFF](r_create_model_use_cases.md#r_auto_off_create_model).
+ Para los tipos de modelo, consulte [CREATE para modelos XGBoost con AUTO OFF](r_create_model_use_cases.md#r_auto_off_create_model).
+ Para los preprocesadores, consulte [CREATE MODEL con guía para el usuario](r_create_model_use_cases.md#r_user_guidance_create_model).
+ Para los hiperparámetros, consulte [CREATE para modelos XGBoost con AUTO OFF](r_create_model_use_cases.md#r_auto_off_create_model).
+ Para bring your own model (BYOM), consulte [Bring your own model (BYOM): inferencia local](r_create_model_use_cases.md#r_byom_create_model).

# Costos de utilizar Amazon Redshift ML
<a name="cost"></a>

Con Amazon Redshift, puede aprovechar las capacidades de machine learning para obtener información a partir de los datos sin necesidad de contar con una amplia experiencia en ingeniería de datos o machine learning. En las siguientes secciones se describen los costos asociados al uso de Amazon Redshift ML, lo que le ayuda a planificar y optimizar los gastos y, al mismo tiempo, aprovechar esta potente integración de machine learning.

## Costos por el uso de Amazon Redshift ML con SageMaker AI
<a name="cost_sm"></a>

Amazon Redshift ML para SageMaker AI usa los recursos de clúster existentes para la predicción, de modo que pueda evitar cargos adicionales de Amazon Redshift. No hay ningún cargo adicional de Amazon Redshift por crear o utilizar un modelo. La predicción se realiza localmente en el clúster de Redshift, por lo que no tiene que pagar más, a menos que necesite redimensionar el clúster. Amazon Redshift ML utiliza Amazon SageMaker AI para entrenar su modelo, lo que conlleva un costo adicional.

Las funciones de predicción que se ejecutan dentro de su clúster de Amazon Redshift no conllevan ningún cargo adicional. La instrucción CREATE MODEL utiliza Amazon SageMaker AI y conlleva un costo adicional. El costo aumenta en función del número de celdas de los datos de formación. El número de celdas se obtiene de multiplicar el número de registros (en la consulta de formación o en los tiempos de la tabla) por el número de columnas. Por ejemplo, cuando una consulta SELECT de la instrucción CREATE MODEL crea 10 000 registros y 5 columnas, se crean 50 000 celdas.

En algunos casos, los datos de formación obtenidos con la consulta SELECT de CREATE MODEL superan el límite de MAX\$1CELLS que se proporcionó (o el límite predeterminado de 1 millón en caso de no haberlo hecho). En estos casos, CREATE MODEL elige de manera aleatoria un número aproximado para MAX\$1CELLS (es decir, los registros del “número de columnas” del conjunto de datos de formación). CREATE MODEL realiza la formación utilizando estas tuplas elegidas de manera aleatoria. Las muestras aleatorias garantizan que el conjunto de datos de formación reducido no tenga ningún tipo de sesgo. Por lo tanto, mediante la configuración de MAX\$1CELLS, puede controlar los costos de formación.

Cuando se utiliza la instrucción CREATE MODEL, se pueden utilizar las opciones MAX\$1CELLS y MAX\$1RUNTIME para controlar los costos, el tiempo y la posible precisión del modelo. 

MAX\$1RUNTIME especifica la cantidad máxima de tiempo que puede durar el entrenamiento en SageMaker AI si se utiliza la opción AUTO ON u OFF. Los trabajos de formación suelen completarse antes que lo establecido en MAX\$1RUNTIME, en función del tamaño del conjunto de datos. Una vez que se haya formado un modelo, Amazon Redshift realiza más trabajo en segundo plano para compilar e instalar los modelos en el clúster. Por lo tanto, CREATE MODEL puede tardar más en completarse que lo establecido en MAX\$1RUNTIME. No obstante, MAX\$1RUNTIME limita la cantidad de tiempo y computación utilizados en SageMaker AI para entrenar el modelo. Puede verificar el estado de su modelo en cualquier momento con la opción SHOW MODEL.

Cuando se ejecuta CREATE MODEL con AUTO ON, Amazon Redshift ML recurre al Piloto automático de Amazon SageMaker AI para explorar de forma automática e inteligente diferentes modelos (o candidatos) con el objetivo de encontrar el más adecuado. MAX\$1RUNTIME limita la cantidad de tiempo y de cómputo empleados. Si MAX\$1RUNTIME se establece con un valor demasiado bajo, es posible que no se disponga de tiempo suficiente para explorar ni siquiera un candidato. Si ve el error “Autopilot candidate has no models” (El candidato de Autopilot no tiene modelos), vuelva a ejecutar CREATE MODEL con un valor para MAX\$1RUNTIME más grande. Para obtener más información sobre este parámetro, consulte [MaxAutoMLJobRuntimeInSeconds](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLJobCompletionCriteria.html) en la *Referencia de la API de Amazon SageMaker AI*.

Cuando se ejecuta CREATE MODEL con AUTO OFF, MAX\$1RUNTIME representa un límite de tiempo de ejecución del trabajo de entrenamiento en SageMaker AI. Los trabajos de formación suelen completarse en menos tiempo en función del tamaño del conjunto de datos y de otros parámetros utilizados, como num\$1rounds en MODEL\$1TYPE XGBOOST.

También se pueden controlar los costos o acortar el tiempo de formación al especificar un valor menor para MAX\$1CELLS cuando se ejecuta CREATE MODEL. Una *celda* es una entrada en la base de datos. Cada fila corresponde a tantas celdas como columnas, cuyo ancho puede ser fijo o variable. MAX\$1CELLS limita el número de celdas y, por tanto, el número de ejemplos de formación utilizados a la hora de formar el modelo. De forma predeterminada, MAX\$1CELLS se configura en 1 millón de celdas. La reducción de MAX\$1CELLS disminuye el número de filas del resultado de la consulta SELECT en CREATE MODEL que Amazon Redshift exporta y envía a SageMaker AI para entrenar un modelo. Por lo tanto, la reducción de MAX\$1CELLS disminuye el tamaño del conjunto de datos utilizado para la formación de los modelos, tanto con AUTO ON como con AUTO OFF. Este enfoque permite reducir los costos y el tiempo de formación de los modelos. Para ver información sobre los tiempos facturación y entrenamiento de un trabajo de entrenamiento específico, elija **Trabajos de entrenamiento** en Amazon SageMaker AI.

El aumento de MAX\$1RUNTIME y MAX\$1CELLS suele mejorar la calidad del modelo, ya que permite a SageMaker AI ver más candidatos. De esta manera, SageMaker AI puede dedicar más tiempo entrenar a cada candidato y emplear más datos para entrenar mejores modelos. Si desea disponer de una iteración o exploración más rápida de su conjunto de datos, utilice MAX\$1RUNTIME y MAX\$1CELLS con valores más bajos. Si desea mejorar la precisión de los modelos, utilice MAX\$1RUNTIME y MAX\$1CELLS con valores más altos.

Para obtener más información sobre los costos asociados a los distintos números de celdas y los detalles de la prueba gratuita, consulte [Precios de Amazon Redshift](https://aws.amazon.com/redshift/pricing).

## Costos por el uso de Amazon Redshift ML con Amazon Bedrock
<a name="cost_sm"></a>

El uso de Amazon Redshift ML con Amazon Bedrock genera costos adicionales. Para obtener más información, consulte [Precios de Amazon Bedrock](https://aws.amazon.com/bedrock/pricing/).

# Introducción a Amazon Redshift ML
<a name="getting-started-machine-learning"></a>

Amazon Redshift ML permite a los usuarios de SQL crear, formar e implementar con más facilidad modelos de machine learning mediante comandos SQL conocidos. Con Amazon Redshift ML, puede utilizar los datos en el clúster de Redshift para entrenar modelos con Amazon SageMaker AI. Luego, los modelos se localizan y se pueden generar predicciones en una base de datos de Amazon Redshift. Amazon Redshift ML admite actualmente los algoritmos de machine learning: XGBoost (AUTO ON y OFF) y perceptron multicapa (AUTO ON), K-Means (AUTO OFF) y Linear Learner.

**Topics**
+ [Agrupe y ajuste la configuración para la administración de Amazon Redshift ML](#admin-setup)
+ [Uso de la explicabilidad del modelo con Amazon Redshift ML](#clarify)
+ [Métricas de probabilidad de Amazon Redshift ML](#probability_metrics)

## Agrupe y ajuste la configuración para la administración de Amazon Redshift ML
<a name="admin-setup"></a>

Antes de trabajar con Amazon Redshift ML, complete la configuración del clúster y establezca los permisos para utilizar este servicio.

### Configuración del clúster para utilizar Amazon Redshift ML
<a name="cluster-setup"></a>

Antes de trabajar con Amazon Redshift ML, complete los siguientes requisitos previos.

Como administrador de Amazon Redshift, complete la siguiente configuración única para utilizar clústeres aprovisionados de Amazon Redshift. Para utilizar Amazon Redshift ML con Amazon Redshift sin servidor, consulte [Introducción a Amazon Redshift sin servidor](https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html).

Para realizar la configuración de clúster por única ver para Amazon Redshift ML 

1. Cree un clúster de Redshift con la Consola de administración de AWS o la AWS Command Line Interface (AWS CLI). Asegúrese de adjuntar la política de AWS Identity and Access Management (IAM) cuando crea el clúster. Para obtener más información sobre los permisos necesarios para utilizar Amazon Redshift ML con Amazon SageMaker AI, consulte [Permisos necesarios para usar machine learning (ML) de Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html#iam-permission-ml?) 

1. Cree el rol de IAM necesario para utilizar Amazon Redshift ML de una de las siguientes formas:
   + Para usar SageMaker AI con Amazon Redshift ML, cree un rol de IAM con las políticas `AmazonS3FullAccess` y `AmazonSageMakerFullAccess`. Si planea crear también modelos de previsión, adjunte también la política `AmazonForecastFullAccess` al rol.
   + Para usar Amazon Bedrock con Amazon Redshift ML, cree un rol de IAM con las políticas `AmazonS3FullAccess` y `AmazonBedrockFullAccess`.
   + Le recomendamos que cree un rol de IAM a través de la consola de Amazon Redshift que tiene la política de `AmazonRedshiftAllCommandsFullAccess` con permisos para ejecutar comandos SQL, como CREATE MODEL. Amazon Redshift utiliza un mecanismo fluido basado en la API para crear roles de IAM mediante programación en su Cuenta de AWS a su nombre. Amazon Redshift adjunta automáticamente políticas administradas existentes de AWS al rol de IAM. Este enfoque significa que puede permanecer dentro de la consola de Amazon Redshift y no tiene que cambiar a la consola de IAM para crear roles. Para obtener más información, consulte [Creación de un rol de IAM como predeterminado para Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/default-iam-role.html).

     Cuando se crea un rol de IAM como predeterminado para su clúster, incluya `redshift` como parte del nombre del recurso o utilice una etiqueta específica de RedShift para etiquetar esos recursos.

     Para usar los modelos fundacionales de Amazon Bedrock, agregue la siguiente sección:

     ```
     // Required section if you use Bedrock models.
     {
        "Effect": "Allow",
        "Action": "bedrock:InvokeModel",
        "Resource": [
            "arn:aws:bedrock:<region>::foundation-model/*"
        ]
     }
     ```
   + Si desea crear un rol de IAM que tenga una política más restrictiva, puede emplear la siguiente política. Asimismo, puede modificarla para que se adapte a sus necesidades.

     El bucket `redshift-downloads/redshift-ml/` de Amazon S3 es el lugar donde se almacenan los datos de muestra utilizados en otros pasos y ejemplos. Puede quitarlo si no necesita cargar datos de Amazon S3. O bien, puede reemplazarlo con otros buckets de Amazon S3 que utilice para cargar datos en Amazon Redshift. 

     Los valores *`your-account-id`*, *`your-role`* y `amzn-s3-demo-bucket` son los que se especifican como parte del comando CREATE MODEL.

     (Opcional) Utilice la sección de claves de AWS KMS que corresponde a la política de muestra si especifica una clave de AWS KMS mientras utiliza Amazon Redshift ML. El valor *`your-kms-key`* es la clave que se utiliza como parte del comando CREATE MODEL.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "cloudwatch:PutMetricData",
                     "ecr:BatchCheckLayerAvailability",
                     "ecr:BatchGetImage",
                     "ecr:GetAuthorizationToken",
                     "ecr:GetDownloadUrlForLayer",
                     "logs:CreateLogGroup",
                     "logs:CreateLogStream",
                     "logs:DescribeLogStreams",
                     "logs:PutLogEvents",
                     "sagemaker:*Job*",
                     "sagemaker:AddTags",
                     "sagemaker:CreateModel",
                     "sagemaker:CreateEndpoint",
                     "sagemaker:CreateEndpointConfig",
                     "sagemaker:DeleteEndpoint",
                     "sagemaker:DeleteEndpointConfig",
                     "sagemaker:DeleteModel"
                 ],
                 "Resource": "*"
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "iam:PassRole",
                     "s3:AbortMultipartUpload",
                     "s3:GetObject",
                     "s3:DeleteObject",
                     "s3:PutObject"
                 ],
                 "Resource": [
                     "arn:aws:iam::111122223333:role/<your-role>",
                     "arn:aws:s3:::amzn-s3-demo-bucket/*",
                     "arn:aws:s3:::redshift-downloads/*"
                 ]
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "s3:GetBucketLocation",
                     "s3:ListBucket"
                 ],
                 "Resource": [
                     "arn:aws:s3:::amzn-s3-demo-bucket",
                     "arn:aws:s3:::redshift-downloads"
                 ]
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "kms:CreateGrant",
                     "kms:Decrypt",
                     "kms:DescribeKey",
                     "kms:Encrypt",
                     "kms:GenerateDataKey*"
                  ],
                  "Resource": [
                     "arn:aws:kms:us-east-1:111122223333:key/<your-kms-key>"
                  ]
             }
         ]
     }
     ```

------

1. Para permitir que Amazon Redshift y SageMaker AI asuman el rol para interactuar con otros servicios, añada la siguiente política de confianza al rol de IAM.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": [
             "redshift.amazonaws.com",
             "sagemaker.amazonaws.com",
             "forecast.amazonaws.com"
           ]
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. (Opcional) Cree un bucket de Amazon S3 y una clave AWS KMS. Amazon Redshift los utiliza para almacenar los datos de entrenamiento enviados a Amazon SageMaker AI y recibir el modelo entrenado de Amazon SageMaker AI.

1. (Opcional) Cree diferentes combinaciones de roles de IAM y buckets de Amazon S3 que permitan controlar el acceso a diferentes grupos de usuarios.

1. Cuando activa el enrutamiento de VPC mejorado, el tráfico entre Redshift ML y el bucket de S3 pasa por la VPC privada. Para obtener más información sobre el enrutamiento de la VPC, consulte [Enrutamiento de VPC mejorado en Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html).

   Para obtener más información sobre los permisos necesarios para especificar una VPC privada para el trabajo de ajuste de hiperparámetros, consulte [Permisos necesarios para usar el machine learning de Amazon Redshift con Amazon SageMaker AI](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html).
**nota**  
Las llamadas de inferencia realizadas a modelos remotos de IA de SageMaker no pasan por LA VPC.

Para obtener información sobre cómo utilizar la instrucción CREATE MODEL con objeto de comenzar a crear modelos para diferentes casos de uso, consulte [CREATE MODEL](r_CREATE_MODEL.md).

### Administración de permisos y propiedad
<a name="permissions-ownership"></a>

Al igual que con otros objetos de base de datos, como tablas o funciones, Amazon Redshift vincula la creación y el uso de modelos de ML para acceder a los mecanismos de control. Para crear un modelo que ejecute funciones de predicción, se dispone de distintos permisos. 

En los siguientes ejemplos, se utilizan dos grupos de usuarios, `retention_analyst_grp` (creador del modelo) y `marketing_analyst_grp` (usuario del modelo) para demostrar cómo Amazon Redshift administra el control de acceso. El analista de retención crea modelos de machine learning que el otro conjunto de usuarios puede emplear gracias a los permisos obtenidos. 

Un superusuario puede utilizar el permiso GRANT USER o GROUP para crear modelos de machine learning con la siguiente instrucción.

```
GRANT CREATE MODEL TO GROUP retention_analyst_grp;
```

Los usuarios o los grupos que tengan este permiso pueden crear un modelo en cualquier esquema del clúster siempre que el usuario cuente con el permiso habitual CREATE en el SCHEMA. El modelo de machine learning forma parte de la jerarquía de esquemas del mismo modo que las tablas, las vistas, los procedimientos y las funciones definidas por el usuario. 

En el supuesto de que ya exista un esquema `demo_ml`, conceda a los dos grupos de usuarios el permiso correspondiente al esquema de la siguiente manera.

```
GRANT CREATE, USAGE ON SCHEMA demo_ml TO GROUP retention_analyst_grp;
```

```
GRANT USAGE ON SCHEMA demo_ml TO GROUP marketing_analyst_grp;
```

Para permitir que otros usuarios utilicen la función de inferencia de machine learning, conceda el permiso EXECUTE. En el siguiente ejemplo, se utiliza el permiso EXECUTE para conceder al GRUPO marketing\$1analyst\$1grp el permiso de usar el modelo.

```
GRANT EXECUTE ON MODEL demo_ml.customer_churn_auto_model TO GROUP marketing_analyst_grp;
```

Utilice la instrucción REVOKE con CREATE MODEL y EXECUTE para revocar esos permisos que se habían otorgado a los usuarios o los grupos. Para obtener más información sobre comandos de control de permisos, consulte [GRANT](r_GRANT.md) y [REVOKE](r_REVOKE.md).

## Uso de la explicabilidad del modelo con Amazon Redshift ML
<a name="clarify"></a>

Con la explicabilidad del modelo en Amazon Redshift (ML), utiliza valores de importancia de características para ayudar a comprender cómo contribuye cada atributo de los datos de formación al resultado previsto. 

La explicabilidad del modelo ayuda a mejorar los modelos de machine learning (ML) al explicar las predicciones que hacen los modelos. La explicabilidad del modelo ayuda a explicar cómo estos modelos hacen predicciones utilizando un enfoque de atribución de características. 

Amazon Redshift ML incorpora la explicabilidad del modelo para proporcionar la funcionalidad de explicación del modelo a los usuarios de Amazon Redshift ML. Para obtener más información sobre el modelo de explicabilidad, consulte [¿Qué es la equidad y la explicabilidad del modelo en las predicciones de machine learning?](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html) en la *Guía para desarrolladores de Amazon SageMaker AI*.

La explicabilidad del modelo también monitorea las inferencias que hacen los modelos en producción para la desviación de la atribución de características. También proporciona herramientas para ayudarlo a generar informes de gobernanza de modelos que puede utilizar para informar a los equipos de riesgo y conformidad, así como a los reguladores externos.

Cuando especifica la opción AUTO ON o AUTO OFF al utilizar la instrucción CREATE MODEL, una vez finalizado el trabajo de entrenamiento del modelo, SageMaker AI crea la salida de la explicación. Puede utilizar la función EXPLAIN\$1MODEL para consultar el informe de explicabilidad en formato JSON. Para obtener más información, consulte [Funciones de machine learning.](ml-function.md).

## Métricas de probabilidad de Amazon Redshift ML
<a name="probability_metrics"></a>

 En los problemas de aprendizaje supervisado, las etiquetas de clase son el resultado de predicciones que utilizan los datos de entrada. Por ejemplo, si utiliza un modelo para predecir si un cliente volvería a suscribirse a un servicio de streaming, las posibles etiquetas son “probable” e “improbable”. Redshift ML proporciona la capacidad de las métricas de probabilidad, que asignan una probabilidad a cada etiqueta para indicar su probabilidad. Esto le ayuda a tomar decisiones más informadas en función de los resultados previstos. En Amazon Redshift ML, las métricas de probabilidad están disponibles al crear modelos AUTO ON con un tipo de problema de clasificación binaria o clasificación multiclase. Si omite el parámetro AUTO ON, Redshift ML asume que el modelo debe tener AUTO ON. 

### Creación del modelo
<a name="probability_metrics_create_model"></a>

 Al crear un modelo, Amazon Redshift detecta automáticamente el tipo de modelo y el tipo de problema. Si se trata de un problema de clasificación, Redshift crea automáticamente una segunda función de inferencia que puede utilizar para generar probabilidades en relación con cada etiqueta. El nombre de esta segunda función de inferencia es el nombre de la función de inferencia especificada seguido de la cadena `_probabilities`. Por ejemplo, si asigna a la función de inferencia el nombre `customer_churn_predict`, el nombre de la segunda función de inferencia es `customer_churn_predict_probabilities`. A continuación, puede consultar esta función para obtener las probabilidades de cada etiqueta. 

```
CREATE MODEL customer_churn_model
FROM customer_activity
    PROBLEM_TYPE BINARY_CLASSIFICATION
TARGET churn
FUNCTION customer_churn_predict
IAM_ROLE {default}
AUTO ON
SETTINGS ( S3_BUCKET 'amzn-s3-demo-bucket'
```

### Obtención de probabilidades
<a name="probability_metrics_create_model_get_probability"></a>

 Una vez que la función de probabilidad esté lista, la ejecución del comando devuelve un [tipo SUPER](https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html) que contiene matrices de las probabilidades devueltas y sus etiquetas asociadas. Por ejemplo, el resultado `"probabilities" : [0.7, 0.3], "labels" : ["False.", "True."]` significa que la etiqueta False tiene una probabilidad de 0,7 y la etiqueta True tiene una probabilidad de 0,3. 

```
SELECT customer_churn_predict_probabilities(Account_length, Area_code, 
            VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, 
            Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, 
            Intl_charge, Cust_serv_calls) 
FROM customer_activity;
            
customer_churn_predict_probabilities
 --------------------
 {"probabilities" : [0.7, 0.3], "labels" : ["False.", "True."]} 
 {"probabilities" : [0.8, 0.2], "labels" : ["False.", "True."]}
 {"probabilities" : [0.75, 0.25], "labels" : ["True.", "False"]}
```

 Las matrices de probabilidades y etiquetas siempre se ordenan por sus probabilidades en orden descendente. Puede escribir una consulta para que devuelva solo la etiqueta predicha con la probabilidad más alta mediante la anulación de la anidación de los resultados SUPER devueltos de la función de probabilidad. 

```
SELECT prediction.labels[0], prediction.probabilities[0]
            FROM (SELECT customer_churn_predict_probabilities(Account_length, Area_code, 
            VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, 
            Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, 
            Intl_charge, Cust_serv_calls) AS prediction
FROM customer_activity);

  labels   | probabilities
-----------+--------------
 "False."  | 0.7
 "False."  | 0.8
 "True."   | 0.75
```

Para simplificar las consultas, puede almacenar los resultados de la función de predicción en una tabla.

```
CREATE TABLE churn_auto_predict_probabilities AS 
             (SELECT customer_churn_predict_probabilities(Account_length, Area_code, 
             VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, 
             Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins,
             Intl_calls, Intl_charge, Cust_serv_calls) AS prediction
FROM customer_activity);
```

Puede consultar la tabla con los resultados para devolver solo las predicciones que tengan una probabilidad superior a 0,7.

```
SELECT prediction.labels[0], prediction.probabilities[0]
FROM churn_auto_predict_probabilities
WHERE prediction.probabilities[0] > 0.7;

  labels   | probabilities
-----------+--------------
 "False."  | 0.8
 "True."   | 0.75
```

Mediante la notación de índice, puede obtener la probabilidad de una etiqueta específica. En el ejemplo siguiente se devuelven las probabilidades de todas las etiquetas `True.`.

```
SELECT label, index, p.prediction.probabilities[index]
FROM churn_auto_predict_probabilities p, p.prediction.labels AS label AT index
WHERE label='True.';

  label  | index | probabilities
---------+-------+---------------
 "True." |     0 | 0.3
 "True." |     0 | 0.2
 "True." |     0 | 0.75
```

 En el siguiente ejemplo se devuelven todas las filas que tienen una etiqueta `True` con una probabilidad superior a 0,7, lo que indica que es probable que el cliente abandone. 

```
SELECT prediction.labels[0], prediction.probabilities[0]
FROM churn_auto_predict_probabilities
WHERE prediction.probabilities[0] > 0.7 AND prediction.labels[0] = "True.";

labels     | probabilities
-----------+--------------
 "True."   | 0.75
```

# Tutoriales de Amazon Redshift ML
<a name="tutorials_for_amazon_redshift_ml"></a>

Puede utilizar Amazon Redshift ML para entrenar modelos de machine learning mediante instrucciones SQL y, a continuación, invocar los modelos en consultas SQL para realizar predicciones. El machine learning en Amazon Redshift forma un modelo con un comando SQL. Amazon Redshift AI inicializa automáticamente un trabajo de entrenamiento en Amazon SageMaker AI y genera un modelo. Una vez creado el modelo, puede realizar predicciones en Amazon Redshift mediante la función de predicción del modelo.

Siga los pasos de estos tutoriales para obtener más información acerca de las características de Amazon Redshift ML:
+ [Tutorial: Creación de modelos de deserción de clientes](tutorial_customer_churn.md): en este tutorial, utilizará Amazon Redshift ML para crear un modelo de deserción de clientes con el comando CREATE MODEL y ejecutará consultas de predicción para situaciones de usuario. A continuación, implementará consultas mediante la función SQL que genera el comando CREATE MODEL.
+ [Tutorial: Creación de modelos de agrupación en clústeres k-means](tutorial_k-means_clustering.md): en este tutorial, utilizará Amazon Redshift ML para crear, entrenar e implementar un modelo de machine learning basado en el [algoritmo k-means](url-sm-dev;k-means.html).
+ [Tutorial: Creación de modelos de clasificación multiclase](tutorial_multi-class_classification.md): en este tutorial, utilizará Amazon Redshift ML para crear un modelo de machine learning que resuelva los problemas de clasificación multiclase. El algoritmo de clasificación multiclase clasifica los puntos de datos en una de tres o más clases. A continuación, implementará consultas mediante la función SQL que genera el comando CREATE MODEL. 
+ [Tutorial: Creación de modelos XGBoost](tutorial_xgboost.md): en este tutorial, creará un modelo con datos de Amazon S3 y ejecutará consultas de predicción con el modelo mediante Amazon Redshift ML. El algoritmo XGBoost es una implementación optimizada del algoritmo de árboles aumentados. 
+ [Tutorial: Creación de modelos de regresión](tutorial_regression.md): en este tutorial, utilizará Amazon Redshift ML para crear un modelo de regresión de machine learning y ejecutar consultas de predicción en el modelo. Los modelos de regresión le permiten predecir resultados numéricos, como el precio de una casa o cuántas personas utilizarán el servicio de alquiler de bicicletas de una ciudad. 
+ [Tutorial: Creación de modelos de regresión con aprendizaje lineal](tutorial_linear_learner_regression.md): en este tutorial, creará un modelo de aprendizaje lineal con datos de Amazon S3 y ejecutará consultas de predicción con el modelo mediante Amazon Redshift ML. El algoritmo de aprendizaje lineal de SageMaker AI resuelve problemas de regresión o clasificación multiclase. 
+ [Tutorial: Creación de modelos de clasificación multiclase con aprendizaje lineal](tutorial_linear_learner_multi-class_classification.md): en este tutorial, creará un modelo de aprendizaje lineal con datos de Amazon S3 y, a continuación, ejecutará consultas de predicción con el modelo mediante Amazon Redshift ML. El algoritmo de aprendizaje lineal de SageMaker AI resuelve problemas de regresión o clasificación. 

# Tutorial: Creación de modelos de deserción de clientes
<a name="tutorial_customer_churn"></a>

En este tutorial, utilizará Amazon Redshift ML para crear un modelo de deserción de clientes con el comando CREATE MODEL y ejecutará consultas de predicción para situaciones de usuario. A continuación, implementará consultas mediante la función SQL que genera el comando CREATE MODEL.

Se puede utilizar un comando sencillo CREATE MODEL para exportar datos de formación, formar un modelo, importar ese modelo y preparar una función de predicción de Amazon Redshift. Utilice la instrucción CREATE MODEL para especificar los datos de formación en forma de tabla o con la instrucción SELECT.

Este ejemplo utiliza información histórica para construir un modelo de machine learning sobre las bajas de clientes de un operador de telefonía móvil. En primer lugar, SageMaker AI entrena el modelo de machine learning y, a continuación, lo prueba utilizando la información de perfil de un cliente arbitrario. Una vez validado el modelo, Amazon SageMaker AI implementa el modelo y la función de predicción en Amazon Redshift. Puede usar la función de predicción para predecir si un cliente va a darse de baja o no.

## Ejemplos de casos de uso
<a name="tutorial_customer_churn_tasks"></a>

Puede resolver otros problemas de clasificación binaria con Amazon Redshift ML, como predecir si un cliente potencial de ventas se cerrará o no. También puede predecir si una transacción financiera es fraudulenta o no.

**Tareas**
+ Requisitos previos
+ Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
+ Paso 2: Crear el modelo de machine learning
+ Paso 3: Realizar predicciones con el modelo

## Requisitos previos
<a name="tutorial_customer_churn_prereqs"></a>

Para completar este tutorial, necesita los siguientes requisitos previos:
+ Debe configurar un clúster de Amazon Redshift para Amazon Redshift ML. Para ello, utilice la documentación relativa a la [Agrupación y ajuste de la configuración para la administración de Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/admin-setup.html).
+ El clúster de Amazon Redshift que se utiliza para crear el modelo y el bucket de Amazon S3 que se utiliza para preparar los datos de entrenamiento y almacenar los artefactos del modelo deberán estar en la misma región de AWS.
+ Para descargar los comandos SQL y el conjunto de datos de muestra utilizados en esta documentación, realice una de las siguientes acciones:
  + Descargue los [comandos SQL](https://s3.amazonaws.com/redshift-downloads/redshift-ml/tutorial-scripts/redshift-ml-tutorial.sql), el [archivo de actividad del cliente](https://s3.amazonaws.com/redshift-downloads/redshift-ml/customer_activity/customer_activity.csv) y el [archivo de Abalone](https://s3.amazonaws.com/redshift-downloads/redshift-ml/abalone_xg/abalone.csv).
  + A través de la AWS CLI para Amazon S3, ejecute el siguiente comando. Puede utilizar su propia ruta de destino.

    ```
    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>
    ```

## Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
<a name="tutorial_customer_churn_step_load"></a>

Use el [editor de consultas de Amazon Redshift v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html) para editar y ejecutar consultas y visualizar los resultados.

Al ejecutar las consultas siguientes, se crea una tabla llamada `customer_activity` y se incorpora el conjunto de datos de ejemplo desde 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;
```

## Paso 2: Crear el modelo de machine learning
<a name="tutorial_customer_churn_step_create_model"></a>

La deserción es nuestro objetivo de entrada en este modelo. Todas las demás entradas del modelo son atributos que ayudan a crear una función para predecir la deserción.

En el siguiente ejemplo, se utiliza la operación CREATE MODEL para ofrecer un modelo que prediga si un cliente permanecerá activo. Para ello, se utilizan distintos datos, como edad del cliente, código postal, gasto y casos. En el siguiente ejemplo, reemplace amzn-s3-demo-bucket por el bucket de Amazon S3 propio.

```
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 'amzn-s3-demo-bucket'
);
```

La consulta SELECT del ejemplo anterior crea los datos de entrenamiento. La cláusula TARGET especifica cuál es la columna que corresponde a la etiqueta de machine learning que utiliza la operación CREATE MODEL para aprender a generar predicciones. La columna de destino “churn” (deserción) indica si el cliente todavía tiene una suscripción activa o si la ha suspendido. El campo S3\$1BUCKET es el nombre del bucket de Amazon S3 que ha creado anteriormente. El bucket de Amazon S3 se utiliza para compartir los datos y artefactos de entrenamiento entre Amazon Redshift y Amazon SageMaker AI. Las columnas restantes corresponden a las características que se utilizan para la predicción.

Para ver un resumen de la sintaxis y las características de un caso de uso básico del comando CREATE MODEL, consulte [CREATE MODEL simple](https://docs.aws.amazon.com/redshift/latest/dg/r_create_model_use_cases.html#r_simple_create_model).

### Añadir permisos para el cifrado del lado del servidor (opcional)
<a name="tutorial_customer_churn_encryption"></a>

Amazon Redshift utiliza de forma predeterminada el Piloto automático de Amazon SageMaker AI para el entrenamiento. En concreto, Amazon Redshift exporta de forma segura los datos de entrenamiento al bucket de Amazon S3 que especifica el cliente. Si no se especifica un `KMS_KEY_ID`, los datos se cifran mediante el cifrado del servidor SSE-S3 de forma predeterminada.

Si cifra la entrada mediante el cifrado del lado del servidor con una clave administrada por AWS KMS (SSE-MMS), agregue los siguientes permisos:

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

Para obtener más información acerca de los roles de Amazon SageMaker, consulte [Amazon SageMaker AI roles](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html) en la *Guía para desarrolladores de Amazon SageMaker AI*.

### Comprobar el estado del entrenamiento del modelo (opcional)
<a name="tutorial_customer_churn_check_status"></a>

Puede utilizar el comando SHOW MODEL para saber cuándo está listo el modelo.

Utilice la siguiente operación para comprobar el estado del modelo.

```
SHOW MODEL customer_churn_auto_model;
```

A continuación se muestra un ejemplo de la salida de la operación anterior.

```
+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
|           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         |                                                                        amzn-s3-demo-bucket                                                                     |
|       Max Runtime        |                                                                             5400                                                                              |
+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
```

Una vez finalizado el entrenamiento del modelo, la variable `model_state` se convierte en `Model is Ready` y la función de predicción pasa a estar disponible.

## Paso 3: Realizar predicciones con el modelo
<a name="tutorial_customer_churn_step_perform_predictions"></a>

Puede usar instrucciones SQL para ver las predicciones realizadas por el modelo de predicción. En este ejemplo, la función de predicción creada por la operación CREATE MODEL se denomina `ml_fn_customer_churn_auto`. Los argumentos de entrada para la función de predicción corresponden a los tipos de características, como varchar para `state` y entero para `account_length`. La salida de la función de predicción es del mismo tipo que la columna TARGET de la instrucción CREATE MODEL.

1. Ha entrenado el modelo con datos anteriores al 01/01/2020, por lo que ahora usa la función de predicción en el conjunto de pruebas. La siguiente consulta muestra las predicciones sobre si los clientes que se inscribieron después de 01-01-2020 se darán de baja o no.

   ```
   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';
   ```

1. El siguiente ejemplo utiliza la misma función de predicción para un caso de uso diferente. En este caso, Amazon Redshift predice la proporción de usuarios que se han dado de baja y los que no lo han hecho entre clientes de diferentes estados en los que la fecha de registro es posterior al 01-01-2020.

   ```
   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;
   ```

1. El siguiente ejemplo utiliza la función de predicción para el caso de uso consistente en predecir el porcentaje de clientes que se dan de baja en un estado. En este caso, Amazon Redshift predice el porcentaje de deserción con una fecha de registro posterior al 01/01/2020.

   ```
   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;
   ```

## Temas relacionados
<a name="tutorial_customer_churn_related_topics"></a>

Para obtener más información sobre Amazon Redshift ML, consulte la siguiente documentación:
+ [Costos de utilizar Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)
+ [Comando CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html)
+ [Función EXPLAIN\$1MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_explain_model_function.html)

Para obtener más información sobre machine learning, consulte la siguiente documentación:
+ [Información general sobre machine learning](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning_overview.html)
+ [Machine learning para principiantes y expertos](https://docs.aws.amazon.com/redshift/latest/dg/novice_expert.html)
+ [Qué es la equidad y la explicabilidad del modelo para las predicciones de machine learning?](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html)

# Tutorial: Creación de modelos de agrupación en clústeres k-means
<a name="tutorial_k-means_clustering"></a>

En este tutorial, utilizará Amazon Redshift ML para crear, entrenar e implementar un modelo de machine learning basado en el [algoritmo k-means](url-sm-dev;k-means.html). Este algoritmo resuelve problemas en clústeres en los que desea descubrir agrupaciones en los datos. K-means ayuda a agrupar datos que aún no se han etiquetado. Para obtener más información sobre la agrupación en clústeres k-means, consulte [Funcionamiento de la agrupación en clústeres de k-means](https://docs.aws.amazon.com/sagemaker/latest/dg/algo-kmeans-tech-notes.html) en la Guía para desarrolladores de Amazon SageMaker.

Utilizará una operación CREATE MODEL para crear un modelo k-means a partir de un clúster de Amazon Redshift. Se puede utilizar un comando CREATE MODEL para exportar datos de entrenamiento, entrenar un modelo, importar ese modelo y preparar una función de predicción de Amazon Redshift. Utilice la operación CREATE MODEL para especificar los datos de entrenamiento en forma de tabla o con la instrucción SELECT.

En este tutorial, utilizará k-means en el conjunto de datos de [Global Database of Events, Language, and Tone (GDELT)](https://aws.amazon.com/public-datasets/gdelt/), que monitoriza las noticias en todo el mundo y los datos que se almacenan segundo a segundo cada día. k-means agrupa eventos que tienen tonos, actores o ubicaciones similares. Los datos se almacenan a modo de varios archivos en Amazon Simple Storage Service en dos carpetas diferentes. Las carpetas son históricas (abarcan los años 1979-2013) y hay actualizaciones diarias a partir del año 2013. En este ejemplo, usamos el formato histórico y traemos datos de 1979.

## Ejemplos de casos de uso
<a name="tutorial_k-means_clustering_tasks"></a>

Puede resolver otros problemas de agrupamiento en clústeres con Amazon Redshift ML, como el agrupamiento de clientes que tienen hábitos de visualización similares en un servicio de streaming. También puede usar Redshift ML para predecir la cantidad óptima de centros de envío para un servicio de entrega.

**Tareas**
+ Requisitos previos
+ Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
+ Paso 2: Crear el modelo de machine learning
+ Paso 3: Realizar predicciones con el modelo

## Requisitos previos
<a name="tutorial_k-means_clustering_prereqs"></a>

Para completar este tutorial, debe realizar el procedimiento de [configuración administrativa](https://docs.aws.amazon.com/redshift/latest/dg/admin-setup.html) de Amazon Redshift ML.

## Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
<a name="tutorial_k-means_clustering_step_load"></a>

1. Use el [editor de consultas de Amazon Redshift v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html) para ejecutar la siguiente consulta. La consulta descarta la tabla `gdelt_data` en el esquema público si existe y crea una tabla con el mismo nombre en el esquema público.

   ```
   DROP TABLE IF EXISTS gdelt_data CASCADE;
   
   CREATE TABLE gdelt_data (
       GlobalEventId bigint,
       SqlDate bigint,
       MonthYear bigint,
       Year bigint,
       FractionDate double precision,
       Actor1Code varchar(256),
       Actor1Name varchar(256),
       Actor1CountryCode varchar(256),
       Actor1KnownGroupCode varchar(256),
       Actor1EthnicCode varchar(256),
       Actor1Religion1Code varchar(256),
       Actor1Religion2Code varchar(256),
       Actor1Type1Code varchar(256),
       Actor1Type2Code varchar(256),
       Actor1Type3Code varchar(256),
       Actor2Code varchar(256),
       Actor2Name varchar(256),
       Actor2CountryCode varchar(256),
       Actor2KnownGroupCode varchar(256),
       Actor2EthnicCode varchar(256),
       Actor2Religion1Code varchar(256),
       Actor2Religion2Code varchar(256),
       Actor2Type1Code varchar(256),
       Actor2Type2Code varchar(256),
       Actor2Type3Code varchar(256),
       IsRootEvent bigint,
       EventCode bigint,
       EventBaseCode bigint,
       EventRootCode bigint,
       QuadClass bigint,
       GoldsteinScale double precision,
       NumMentions bigint,
       NumSources bigint,
       NumArticles bigint,
       AvgTone double precision,
       Actor1Geo_Type bigint,
       Actor1Geo_FullName varchar(256),
       Actor1Geo_CountryCode varchar(256),
       Actor1Geo_ADM1Code varchar(256),
       Actor1Geo_Lat double precision,
       Actor1Geo_Long double precision,
       Actor1Geo_FeatureID bigint,
       Actor2Geo_Type bigint,
       Actor2Geo_FullName varchar(256),
       Actor2Geo_CountryCode varchar(256),
       Actor2Geo_ADM1Code varchar(256),
       Actor2Geo_Lat double precision,
       Actor2Geo_Long double precision,
       Actor2Geo_FeatureID bigint,
       ActionGeo_Type bigint,
       ActionGeo_FullName varchar(256),
       ActionGeo_CountryCode varchar(256),
       ActionGeo_ADM1Code varchar(256),
       ActionGeo_Lat double precision,
       ActionGeo_Long double precision,
       ActionGeo_FeatureID bigint,
       DATEADDED bigint
   );
   ```

1. La siguiente consulta carga los datos de muestra en la tabla `gdelt_data`.

   ```
   COPY gdelt_data
   FROM 's3://gdelt-open-data/events/1979.csv' 
   REGION 'us-east-1'
   IAM_ROLE default 
   CSV
   DELIMITER '\t';
   ```

### Examinar los datos de entrenamiento (opcional)
<a name="tutorial_k-means_clustering_examine"></a>

Para ver en qué datos se entrenará su modelo, utilice la siguiente consulta.

```
SELECT
    AvgTone,
    EventCode,
    NumArticles,
    Actor1Geo_Lat,
    Actor1Geo_Long,
    Actor2Geo_Lat,
    Actor2Geo_Long
FROM
    gdelt_data LIMIT 100;
```

## Paso 2: Crear el modelo de machine learning
<a name="tutorial_k-means_clustering_create_model"></a>

El siguiente ejemplo utiliza el comando CREATE MODEL para crear un modelo que agrupa los datos en siete clústeres. El valor K es el número de clústeres en los que se dividen los puntos de datos. El modelo clasifica los puntos de datos en clústeres en los que los puntos de datos son más similares entre sí. A través de la agrupación en clústeres de los puntos de datos en grupos, el algoritmo k-means determina de forma iterativa el mejor centro del clúster. A continuación, el algoritmo asigna cada punto de datos al centro del clúster más cercano. Los miembros más cercanos al mismo centro del clúster pertenecen al mismo grupo. Los miembros de un grupo son lo más parecido posible a otros miembros del mismo grupo y lo más diferente posible de los miembros de otros grupos. El valor K es subjetivo y depende de los métodos que miden las similitudes entre los puntos de datos. Puede cambiar el valor K para suavizar los tamaños de los clústeres si están distribuidos de manera desigual.

En el siguiente ejemplo, reemplace amzn-s3-demo-bucket por el bucket de Amazon S3 propio.

```
CREATE MODEL news_data_clusters
FROM
    (
        SELECT
            AvgTone,
            EventCode,
            NumArticles,
            Actor1Geo_Lat,
            Actor1Geo_Long,
            Actor2Geo_Lat,
            Actor2Geo_Long
        FROM
            gdelt_data
    ) FUNCTION news_monitoring_cluster 
    IAM_ROLE default 
    AUTO OFF 
    MODEL_TYPE KMEANS 
    PREPROCESSORS 'none' 
    HYPERPARAMETERS DEFAULT
    EXCEPT
    (K '7') 
    SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

### Comprobar el estado del entrenamiento del modelo (opcional)
<a name="tutorial_k-means_clustering_check_status"></a>

Puede utilizar el comando SHOW MODEL para saber cuándo está listo el modelo.

Para comprobar el estado del modelo, utilice la siguiente operación SHOW MODEL y determine si `Model State` es `Ready`.

```
SHOW MODEL NEWS_DATA_CLUSTERS;
```

Cuando el modelo esté listo, la salida de la operación anterior debería mostrar que `Model State` es `Ready`. A continuación se muestra un ejemplo de la salida de la operación SHOW MODEL.

```
+--------------------------+------------------------------------------------------------------------------------------------------+
|        Model Name        |                                          news_data_clusters                                          |
+--------------------------+------------------------------------------------------------------------------------------------------+
|       Schema Name        |                                                public                                                |
|          Owner           |                                               awsuser                                                |
|      Creation Time       |                                       Fri, 17.06.2022 16:32:19                                       |
|       Model State        |                                                READY                                                 |
|        train:msd         |                                             2973.822754                                              |
|      train:progress      |                                              100.000000                                              |
|     train:throughput     |                                            237114.875000                                             |
|      Estimated Cost      |                                               0.004983                                               |
|                          |                                                                                                      |
|      TRAINING DATA:      |                                                                                                      |
|          Query           | SELECT AVGTONE, EVENTCODE, NUMARTICLES, ACTOR1GEO_LAT, ACTOR1GEO_LONG, ACTOR2GEO_LAT, ACTOR2GEO_LONG |
|                          |                                           FROM GDELT_DATA                                            |
|                          |                                                                                                      |
|       PARAMETERS:        |                                                                                                      |
|        Model Type        |                                                kmeans                                                |
|    Training Job Name     |                                redshiftml-20220617163219978978-kmeans                                |
|      Function Name       |                                       news_monitoring_cluster                                        |
|   Function Parameters    |       avgtone eventcode numarticles actor1geo_lat actor1geo_long actor2geo_lat actor2geo_long        |
| Function Parameter Types |                             float8 int8 int8 float8 float8 float8 float8                             |
|         IAM Role         |                                         default-aws-iam-role                                         |
|        S3 Bucket         |                                            amzn-s3-demo-bucket                                       |
|       Max Runtime        |                                                 5400                                                 |
|                          |                                                                                                      |
|     HYPERPARAMETERS:     |                                                                                                      |
|       feature_dim        |                                                  7                                                   |
|            k             |                                                  7                                                   |
+--------------------------+------------------------------------------------------------------------------------------------------+
```

## Paso 3: Realizar predicciones con el modelo
<a name="tutorial_k-means_clustering_step_perform_predictions"></a>

### Identificar los clústeres
<a name="tutorial_k-means_clustering_identify_clusters"></a>

Puede encontrar agrupaciones discretas identificadas en los datos por su modelo, también conocidas como clústeres. Un clúster es el conjunto de puntos de datos que está más cerca de su centro de clúster que de cualquier otro centro de clúster. Dado que el valor K representa el número de clústeres del modelo, también representa el número de centros de clúster. La siguiente consulta identifica los clústeres mostrando el clúster asociado a cada `globaleventid`.

```
SELECT
    globaleventid,
    news_monitoring_cluster (
        AvgTone,
        EventCode,
        NumArticles,
        Actor1Geo_Lat,
        Actor1Geo_Long,
        Actor2Geo_Lat,
        Actor2Geo_Long
    ) AS cluster
FROM
    gdelt_data;
```

### Comprobar la distribución de los datos
<a name="tutorial_k-means_clustering_check_distribution"></a>

Puede comprobar la distribución de los datos entre los clústeres para ver si el valor K que eligió ha provocado que los datos se distribuyeran de manera uniforme. Utilice la siguiente consulta para determinar si los datos están distribuidos de manera uniforme en los clústeres.

```
SELECT
    events_cluster,
    COUNT(*) AS nbr_events
FROM
    (
        SELECT
            globaleventid,
            news_monitoring_cluster(
                AvgTone,
                EventCode,
                NumArticles,
                Actor1Geo_Lat,
                Actor1Geo_Long,
                Actor2Geo_Lat,
                Actor2Geo_Long
            ) AS events_cluster
        FROM
            gdelt_data
    )
GROUP BY
    1;
```

Puede cambiar el valor K para suavizar los tamaños de los clústeres si no están distribuidos de manera uniforme.

### Determinar los centros de clúster
<a name="tutorial_k-means_clustering_determine_centers"></a>

Un punto de datos está más cerca de su centro de clúster que de cualquier otro centro de clúster. Por lo tanto, encontrar los centros de clúster le ayuda a definir los clústeres.

Ejecute la siguiente consulta para determinar los centros de clúster en función del número de artículos por código de evento.

```
SELECT
    news_monitoring_cluster (
        AvgTone,
        EventCode,
        NumArticles,
        Actor1Geo_Lat,
        Actor1Geo_Long,
        Actor2Geo_Lat,
        Actor2Geo_Long
    ) AS events_cluster,
    eventcode,
    SUM(numArticles) AS numArticles
FROM
    gdelt_data
GROUP BY
    1,
    2;
```

### Mostrar información sobre puntos de datos en un clúster
<a name="tutorial_k-means_clustering_data_points_info"></a>

Utilice la siguiente consulta para devolver los datos de los puntos asignados al quinto clúster. Los artículos seleccionados deben tener dos actores.

```
SELECT
    news_monitoring_cluster (
        AvgTone,
        EventCode,
        NumArticles,
        Actor1Geo_Lat,
        Actor1Geo_Long,
        Actor2Geo_Lat,
        Actor2Geo_Long
    ) AS events_cluster,
    eventcode,
    actor1name,
    actor2name,
    SUM(numarticles) AS totalarticles
FROM
    gdelt_data
WHERE
    events_cluster = 5
    AND actor1name <> ' '
    AND actor2name <> ' '
GROUP BY
    1,
    2,
    3,
    4
ORDER BY
    5 desc;
```

### Mostrar datos sobre eventos con actores del mismo código étnico
<a name="tutorial_k-means_clustering_show_events_data"></a>

La siguiente consulta cuenta la cantidad de artículos escritos sobre eventos de tono positivo. La consulta también requiere que los dos actores tengan el mismo código étnico y devuelve a qué grupo está asignado cada evento.

```
SELECT
    news_monitoring_cluster (
        AvgTone,
        EventCode,
        NumArticles,
        Actor1Geo_Lat,
        Actor1Geo_Long,
        Actor2Geo_Lat,
        Actor2Geo_Long
    ) AS events_cluster,
    SUM(numarticles) AS total_articles,
    eventcode AS event_code,
    Actor1EthnicCode AS ethnic_code
FROM
    gdelt_data
WHERE
    Actor1EthnicCode = Actor2EthnicCode
    AND Actor1EthnicCode <> ' '
    AND Actor2EthnicCode <> ' '
    AND AvgTone > 0
GROUP BY
    1,
    3,
    4
HAVING
    (total_articles) > 4
ORDER BY
    1,
    2 ASC;
```

## Temas relacionados
<a name="tutorial_k-means_clustering_related_topics"></a>

Para obtener más información sobre Amazon Redshift ML, consulte la siguiente documentación:
+ [ Costes de utilizar Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)
+ [Operación CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html)
+ [ Función EXPLAIN\$1MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_explain_model_function.html)

Para obtener más información sobre machine learning, consulte la siguiente documentación:
+ [Información general sobre machine learning](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning_overview.html)
+ [Machine learning para principiantes y expertos](https://docs.aws.amazon.com/redshift/latest/dg/novice_expert.html)
+ [Qué es la equidad y la explicabilidad del modelo para las predicciones de machine learning?](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html)

# Tutorial: Creación de modelos de clasificación multiclase
<a name="tutorial_multi-class_classification"></a>

En este tutorial, utilizará Amazon Redshift ML para crear un modelo de machine learning que resuelva los problemas de clasificación multiclase. El algoritmo de clasificación multiclase clasifica los puntos de datos en una de tres o más clases. A continuación, implementará consultas mediante la función SQL que genera el comando CREATE MODEL.

Se puede utilizar un comando CREATE MODEL para exportar datos de entrenamiento, entrenar un modelo, importar ese modelo y preparar una función de predicción de Amazon Redshift. Utilice la operación CREATE MODEL para especificar los datos de entrenamiento en forma de tabla o con la instrucción SELECT.

Para seguir el tutorial, utilice el conjunto de datos público [E-Commerce Sales Forecast](https://www.kaggle.com/allunia/e-commerce-sales-forecast) (Previsión de ventas de comercio electrónico), que incluye datos de ventas de un minorista en línea del Reino Unido. El modelo que genere se dirigirá a los clientes más activos para un programa especial de fidelización de clientes. Con la clasificación multiclase, puede usar el modelo para predecir cuántos meses estará activo un cliente durante un período de 13 meses. La función de predicción designa a los clientes que se prevé que estarán activos durante 7 o más meses para la admisión al programa.

## Ejemplos de casos de uso
<a name="tutorial_multi-class_classification_tasks"></a>

Puede resolver otros problemas de clasificación multiclase con Amazon Redshift ML, como predecir el producto más vendido de una línea de productos. También puede predecir qué fruta contiene una imagen, por ejemplo, seleccionar manzanas, peras o naranjas.

**Tareas**
+ Requisitos previos
+ Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
+ Paso 2: Crear el modelo de machine learning
+ Paso 3: Realizar predicciones con el modelo

## Requisitos previos
<a name="tutorial_multi-class_classification_prereqs"></a>

Para completar este tutorial, debe realizar el procedimiento de [configuración administrativa](https://docs.aws.amazon.com/redshift/latest/dg/admin-setup.html) de Amazon Redshift ML.

## Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
<a name="tutorial_multi-class_classification_step_load"></a>

Use el [editor de consultas de Amazon Redshift v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html) para ejecutar las siguientes consultas. Estas consultas cargan los datos de muestra en Amazon Redshift.

1. En la siguiente consulta, se crea una tabla llamada `ecommerce_sales`.

   ```
   CREATE TABLE IF NOT EXISTS ecommerce_sales (
       invoiceno VARCHAR(30),
       stockcode VARCHAR(30),
       description VARCHAR(60),
       quantity DOUBLE PRECISION,
       invoicedate VARCHAR(30),
       unitprice DOUBLE PRECISION,
       customerid BIGINT,
       country VARCHAR(25)
   );
   ```

1. La siguiente consulta copia los datos de muestra del [conjunto de datos E-Commerce Sales Forecast](https://www.kaggle.com/allunia/e-commerce-sales-forecast) (Previsión de ventas de comercio electrónico) en la tabla `ecommerce_sales`.

   ```
   COPY ecommerce_sales
   FROM
       's3://redshift-ml-multiclass/ecommerce_data.txt' 
   IAM_ROLE default 
   DELIMITER '\t' 
   IGNOREHEADER 1 
   REGION 'us-east-1' 
   MAXERROR 100;
   ```

### Dividir los datos
<a name="tutorial_multi-class_classification_split_data"></a>

Al crear un modelo en Amazon Redshift ML, SageMaker AI divide automáticamente los datos en conjuntos de entrenamiento y de prueba para que SageMaker AI pueda determinar la precisión del modelo. Al dividir manualmente los datos en este paso, podrá verificar la precisión del modelo asignando un conjunto de predicciones adicional. 

Utilice la siguiente instrucción SQL para dividir los datos en tres conjuntos para el entrenamiento, la validación y la predicción.

```
--creates table with all data
CREATE TABLE ecommerce_sales_data AS (
    SELECT
        t1.stockcode,
        t1.description,
        t1.invoicedate,
        t1.customerid,
        t1.country,
        t1.sales_amt,
        CAST(RANDOM() * 100 AS INT) AS data_group_id
    FROM
        (
            SELECT
                stockcode,
                description,
                invoicedate,
                customerid,
                country,
                SUM(quantity * unitprice) AS sales_amt
            FROM
                ecommerce_sales
            GROUP BY
                1,
                2,
                3,
                4,
                5
        ) t1
);

--creates training set
CREATE TABLE ecommerce_sales_training AS (
    SELECT
        a.customerid,
        a.country,
        a.stockcode,
        a.description,
        a.invoicedate,
        a.sales_amt,
        (b.nbr_months_active) AS nbr_months_active
    FROM
        ecommerce_sales_data a
        INNER JOIN (
            SELECT
                customerid,
                COUNT(
                    DISTINCT(
                        DATE_PART(y, CAST(invoicedate AS DATE)) || '-' || LPAD(
                            DATE_PART(mon, CAST(invoicedate AS DATE)),
                            2,
                            '00'
                        )
                    )
                ) AS nbr_months_active
            FROM
                ecommerce_sales_data
            GROUP BY
                1
        ) b ON a.customerid = b.customerid
    WHERE
        a.data_group_id < 80
);

--creates validation set
CREATE TABLE ecommerce_sales_validation AS (
    SELECT
        a.customerid,
        a.country,
        a.stockcode,
        a.description,
        a.invoicedate,
        a.sales_amt,
        (b.nbr_months_active) AS nbr_months_active
    FROM
        ecommerce_sales_data a
        INNER JOIN (
            SELECT
                customerid,
                COUNT(
                    DISTINCT(
                        DATE_PART(y, CAST(invoicedate AS DATE)) || '-' || LPAD(
                            DATE_PART(mon, CAST(invoicedate AS DATE)),
                            2,
                            '00'
                        )
                    )
                ) AS nbr_months_active
            FROM
                ecommerce_sales_data
            GROUP BY
                1
        ) b ON a.customerid = b.customerid
    WHERE
        a.data_group_id BETWEEN 80
        AND 90
);

--creates prediction set
CREATE TABLE ecommerce_sales_prediction AS (
    SELECT
        customerid,
        country,
        stockcode,
        description,
        invoicedate,
        sales_amt
    FROM
        ecommerce_sales_data
    WHERE
        data_group_id > 90);
```

## Paso 2: Crear el modelo de machine learning
<a name="tutorial_multi-class_classification_step_create_model"></a>

En este paso, utilizará la instrucción CREATE MODEL para crear el modelo de machine learning mediante la clasificación multiclase. 

La siguiente consulta crea el modelo de clasificación multiclase con el conjunto de entrenamiento mediante la operación CREATE MODEL. Reemplace amzn-s3-demo-bucket por el bucket de Amazon S3 propio.

```
CREATE MODEL ecommerce_customer_activity
FROM
    (
        SELECT
            customerid,
            country,
            stockcode,
            description,
            invoicedate,
            sales_amt,
            nbr_months_active
        FROM
            ecommerce_sales_training
    ) TARGET nbr_months_active FUNCTION predict_customer_activity IAM_ROLE default PROBLEM_TYPE MULTICLASS_CLASSIFICATION SETTINGS (
        S3_BUCKET 'amzn-s3-demo-bucket',
        S3_GARBAGE_COLLECT OFF
    );
```

En esta consulta, se especifica el tipo de problema como `Multiclass_Classification`. El objetivo que predice para el modelo es `nbr_months_active`. Cuando SageMaker AI termina de entrenar el modelo, crea la función `predict_customer_activity`, que utilizará para hacer predicciones en Amazon Redshift.

### Comprobar el estado del entrenamiento del modelo (opcional)
<a name="tutorial_multi-class_classification_show_status"></a>

Puede utilizar el comando SHOW MODEL para saber cuándo está listo el modelo.

Utilice la siguiente consulta para devolver varias métricas del modelo, incluidos el estado y la precisión del modelo.

```
SHOW MODEL ecommerce_customer_activity;
```

Cuando el modelo esté listo, la salida de la operación anterior debería mostrar que `Model State` es `Ready`. A continuación se muestra un ejemplo de la salida de la operación SHOW MODEL.

```
+--------------------------+-----------------------------------------------------------------------------------------------+
|        Model Name        |                                  ecommerce_customer_activity                                  |
+--------------------------+-----------------------------------------------------------------------------------------------+
|       Schema Name        |                                            public                                             |
|          Owner           |                                            awsuser                                            |
|      Creation Time       |                                   Fri, 17.06.2022 19:02:15                                    |
|       Model State        |                                             READY                                             |
|   Training Job Status    |                                  MaxAutoMLJobRuntimeReached                                   |
|   validation:accuracy    |                                           0.991280                                            |
|      Estimated Cost      |                                           7.897689                                            |
|                          |                                                                                               |
|      TRAINING DATA:      |                                                                                               |
|          Query           | SELECT CUSTOMERID, COUNTRY, STOCKCODE, DESCRIPTION, INVOICEDATE, SALES_AMT, NBR_MONTHS_ACTIVE |
|                          |                                 FROM ECOMMERCE_SALES_TRAINING                                 |
|      Target Column       |                                       NBR_MONTHS_ACTIVE                                       |
|                          |                                                                                               |
|       PARAMETERS:        |                                                                                               |
|        Model Type        |                                            xgboost                                            |
|       Problem Type       |                                   MulticlassClassification                                    |
|        Objective         |                                           Accuracy                                            |
|     AutoML Job Name      |                                redshiftml-20220617190215268770                                |
|      Function Name       |                                   predict_customer_activity                                   |
|   Function Parameters    |                customerid country stockcode description invoicedate sales_amt                 |
| Function Parameter Types |                          int8 varchar varchar varchar varchar float8                          |
|         IAM Role         |                                     default-aws-iam-role                                      |
|        S3 Bucket         |                                         amzn-s3-demo-bucket                                    |
|       Max Runtime        |                                             5400                                              |
+--------------------------+-----------------------------------------------------------------------------------------------+
```

## Paso 3: Realizar predicciones con el modelo
<a name="tutorial_multi-class_classification_step_perform_predictions"></a>

La siguiente consulta muestra qué clientes califican para su programa de fidelización de clientes. Si el modelo predice que el cliente estará activo durante al menos siete meses, el modelo seleccionará al cliente para el programa de fidelización.

```
SELECT
    customerid,
    predict_customer_activity(
        customerid,
        country,
        stockcode,
        description,
        invoicedate,
        sales_amt
    ) AS predicted_months_active
FROM
    ecommerce_sales_prediction
WHERE
    predicted_months_active >= 7
GROUP BY
    1,
    2
LIMIT
    10;
```

### Ejecutar consultas de predicción contra los datos de validación (opcional)
<a name="tutorial_multi-class_classification_run_validation_prediction"></a>

Ejecute las siguientes consultas de predicción con los datos de validación para comprobar el nivel de precisión del modelo.

```
SELECT
    CAST(SUM(t1.match) AS decimal(7, 2)) AS predicted_matches,
    CAST(SUM(t1.nonmatch) AS decimal(7, 2)) AS predicted_non_matches,
    CAST(SUM(t1.match + t1.nonmatch) AS decimal(7, 2)) AS total_predictions,
    predicted_matches / total_predictions AS pct_accuracy
FROM
    (
        SELECT
            customerid,
            country,
            stockcode,
            description,
            invoicedate,
            sales_amt,
            nbr_months_active,
            predict_customer_activity(
                customerid,
                country,
                stockcode,
                description,
                invoicedate,
                sales_amt
            ) AS predicted_months_active,
            CASE
                WHEN nbr_months_active = predicted_months_active THEN 1
                ELSE 0
            END AS match,
            CASE
                WHEN nbr_months_active <> predicted_months_active THEN 1
                ELSE 0
            END AS nonmatch
        FROM
            ecommerce_sales_validation
    )t1;
```

### Prediga cuántos clientes no ingresan (opcional)
<a name="tutorial_multi-class_classification_run_missed_entries"></a>

La siguiente consulta compara la cantidad de clientes que se prevé que estarán activos solo durante 5 o 6 meses. El modelo predice que estos clientes se quedarán fuera del programa de fidelización. A continuación, la consulta compara la cantidad que se quedan fuera del programa con el número que se prevé que cumpla los requisitos para el programa de fidelización. Esta consulta podría usarse para tomar una decisión sobre si reducir el umbral del programa de fidelización. También puede determinar si hay una cantidad significativa de clientes que se prevé que se quedarán fuera del programa por poco. A continuación, puede alentar a esos clientes a aumentar su actividad para poder entrar en el programa de fidelización.

```
SELECT
    predict_customer_activity(
        customerid,
        country,
        stockcode,
        description,
        invoicedate,
        sales_amt
    ) AS predicted_months_active,
    COUNT(customerid)
FROM
    ecommerce_sales_prediction
WHERE
    predicted_months_active BETWEEN 5 AND 6
GROUP BY
    1
ORDER BY
    1 ASC
LIMIT
    10)
UNION
(SELECT
      NULL AS predicted_months_active,
    COUNT (customerid)
FROM 
    ecommerce_sales_prediction
WHERE
    predict_customer_activity(
        customerid,
        country,
        stockcode,
        description,
        invoicedate,
        sales_amt
    ) >=7);
```

## Temas relacionados
<a name="tutorial_multi-class_classification_related_topics"></a>

Para obtener más información sobre Amazon Redshift ML, consulte la siguiente documentación:
+ [Costes de utilizar Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)
+ [Operación CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html)
+ [Función EXPLAIN\$1MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_explain_model_function.html)

Para obtener más información sobre machine learning, consulte la siguiente documentación:
+ [Información general sobre machine learning](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning_overview.html)
+ [Machine learning para principiantes y expertos](https://docs.aws.amazon.com/redshift/latest/dg/novice_expert.html)
+ [Qué es la equidad y la explicabilidad del modelo para las predicciones de machine learning?](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html)

# Tutorial: Creación de modelos XGBoost
<a name="tutorial_xgboost"></a>

En este tutorial, creará un modelo con datos de Amazon S3 y ejecutará consultas de predicción con el modelo mediante Amazon Redshift ML. El algoritmo XGBoost es una implementación optimizada del algoritmo de árboles aumentados. XGBoost maneja más tipos de datos, relaciones y distribuciones que otros algoritmos de árboles aumentados. Puede usar XGBoost para problemas de regresión, de clasificación binaria, clasificación multiclase) y de ranking. Para obtener más información sobre el algoritmo XGBoost, consulte [Algoritmo XGBoost](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html) en la Guía para desarrolladores de Amazon SageMaker AI.

Actualmente,la operación `CREATE MODEL` de Amazon Redshift ML con la opción `AUTO OFF` es compatible con XGBoost como `MODEL_TYPE`. Puede proporcionar información relevante, como el objetivo y los hiperparámetros, como parte de `CREATE MODEL`, en función del caso de uso.

En este tutorial, se utiliza el [conjunto de datos de autenticación de billetes](https://archive.ics.uci.edu/ml/datasets/banknote+authentication), que es un problema de clasificación binaria para predecir si un billete determinado es auténtico o falso. 

## Ejemplos de casos de uso
<a name="tutorial_xgboost_tasks"></a>

Puede resolver otros problemas de clasificación binaria con Amazon Redshift ML, como predecir si un paciente está sano o tiene una enfermedad. También puede predecir si un correo electrónico es spam o no.

**Tareas**
+ Requisitos previos
+ Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
+ Paso 2: Crear el modelo de machine learning
+ Paso 3: Realizar predicciones con el modelo

## Requisitos previos
<a name="tutorial_xgboost_prereqs"></a>

Para completar este tutorial, debe realizar el procedimiento de [configuración administrativa](https://docs.aws.amazon.com/redshift/latest/dg/admin-setup.html) de Amazon Redshift ML.

## Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
<a name="tutorial_xgboost_step_load"></a>

Use el [editor de consultas de Amazon Redshift v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html) para ejecutar las siguientes consultas.

La siguiente consulta crea dos tablas, carga los datos de Amazon S3 y divide los datos en un conjunto de entrenamiento y un conjunto de pruebas. Utilizará el conjunto de entrenamiento para entrenar su modelo y crear la función de predicción. A continuación, probará la función de predicción en el conjunto de pruebas.

```
--create training set table
CREATE TABLE banknoteauthentication_train(
    variance FLOAT,
    skewness FLOAT,
    curtosis FLOAT,
    entropy FLOAT,
    class INT
);

--Load into training table
COPY banknoteauthentication_train
FROM
    's3://redshiftbucket-ml-sagemaker/banknote_authentication/train_data/' IAM_ROLE default REGION 'us-west-2' IGNOREHEADER 1 CSV;

--create testing set table
CREATE TABLE banknoteauthentication_test(
    variance FLOAT,
    skewness FLOAT,
    curtosis FLOAT,
    entropy FLOAT,
    class INT
);

--Load data into testing table
COPY banknoteauthentication_test
FROM
    's3://redshiftbucket-ml-sagemaker/banknote_authentication/test_data/' 
    IAM_ROLE default 
    REGION 'us-west-2' 
    IGNOREHEADER 1 
    CSV;
```

## Paso 2: Crear el modelo de machine learning
<a name="tutorial_xgboost_step_create_model"></a>

La siguiente consulta crea el modelo XGBoost en Amazon Redshift ML a partir del conjunto de entrenamiento que creó en el paso anterior. Reemplace `amzn-s3-demo-bucket` con su propio `S3_BUCKET`, que almacenará sus conjuntos de datos de entrada y otros artefactos de Redshift ML.

```
CREATE MODEL model_banknoteauthentication_xgboost_binary
FROM
    banknoteauthentication_train 
    TARGET class 
    FUNCTION func_model_banknoteauthentication_xgboost_binary 
    IAM_ROLE default 
    AUTO OFF 
    MODEL_TYPE xgboost 
    OBJECTIVE 'binary:logistic' 
    PREPROCESSORS 'none' 
    HYPERPARAMETERS DEFAULT
EXCEPT(NUM_ROUND '100') 
SETTINGS(S3_BUCKET 'amzn-s3-demo-bucket');
```

### Comprobar el estado del entrenamiento del modelo (opcional)
<a name="tutorial_xgboost_show_status"></a>

Puede utilizar el comando SHOW MODEL para saber cuándo está listo el modelo.

Utilice la siguiente consulta para supervisar el estado del entrenamiento del modelo.

```
SHOW MODEL model_banknoteauthentication_xgboost_binary;
```

Si el modelo es `READY`, la operación SHOW MODEL también proporciona la métrica `train:error`, como se muestra en el siguiente ejemplo de la salida. La métrica `train:error` es una medida de precisión de su modelo que mide hasta seis decimales. Un valor de 0 es más preciso y un valor de 1 es menos preciso.

```
+--------------------------+--------------------------------------------------+
|        Model Name        |   model_banknoteauthentication_xgboost_binary    |
+--------------------------+--------------------------------------------------+
| Schema Name              | public                                           |
| Owner                    | awsuser                                          |
| Creation Time            | Tue, 21.06.2022 19:07:35                         |
| Model State              | READY                                            |
| train:error              |                                         0.000000 |
| Estimated Cost           |                                         0.006197 |
|                          |                                                  |
| TRAINING DATA:           |                                                  |
| Query                    | SELECT *                                         |
|                          | FROM "BANKNOTEAUTHENTICATION_TRAIN"              |
| Target Column            | CLASS                                            |
|                          |                                                  |
| PARAMETERS:              |                                                  |
| Model Type               | xgboost                                          |
| Training Job Name        | redshiftml-20220621190735686935-xgboost          |
| Function Name            | func_model_banknoteauthentication_xgboost_binary |
| Function Parameters      | variance skewness curtosis entropy               |
| Function Parameter Types | float8 float8 float8 float8                      |
| IAM Role                 | default-aws-iam-role                             |
| S3 Bucket                | amzn-s3-demo-bucket                              |
| Max Runtime              |                                             5400 |
|                          |                                                  |
| HYPERPARAMETERS:         |                                                  |
| num_round                |                                              100 |
| objective                | binary:logistic                                  |
+--------------------------+--------------------------------------------------+
```

## Paso 3: Realizar predicciones con el modelo
<a name="tutorial_xgboost_step_perform_predictions"></a>

### Comprobar la precisión del modelo
<a name="tutorial_xgboost_check_accuracy"></a>

La siguiente consulta de predicción utiliza la función de predicción creada en el paso anterior para comprobar la precisión del modelo. Ejecute esta consulta en el conjunto de pruebas para asegurarse de que el modelo no se corresponde demasiado con el conjunto de entrenamiento. Esta estrecha correspondencia también se conoce como sobreajuste, y el sobreajuste podría hacer que el modelo hiciera predicciones poco fiables.

```
WITH predict_data AS (
    SELECT
        class AS label,
        func_model_banknoteauthentication_xgboost_binary (variance, skewness, curtosis, entropy) AS predicted,
        CASE
            WHEN label IS NULL THEN 0
            ELSE label
        END AS actual,
        CASE
            WHEN actual = predicted THEN 1 :: INT
            ELSE 0 :: INT
        END AS correct
    FROM
        banknoteauthentication_test
),
aggr_data AS (
    SELECT
        SUM(correct) AS num_correct,
        COUNT(*) AS total
    FROM
        predict_data
)
SELECT
    (num_correct :: FLOAT / total :: FLOAT) AS accuracy
FROM
    aggr_data;
```

### Predecir la cantidad de billetes auténticos y falsos
<a name="tutorial_xgboost_predict_amount"></a>

La siguiente consulta de predicción devuelve la cantidad prevista de billetes auténticos y falsos en el conjunto de pruebas.

```
WITH predict_data AS (
    SELECT
        func_model_banknoteauthentication_xgboost_binary(variance, skewness, curtosis, entropy) AS predicted
    FROM
        banknoteauthentication_test
)
SELECT
    CASE
        WHEN predicted = '0' THEN 'Original banknote'
        WHEN predicted = '1' THEN 'Counterfeit banknote'
        ELSE 'NA'
    END AS banknote_authentication,
    COUNT(1) AS count
FROM
    predict_data
GROUP BY
    1;
```

### Encontrar la observación promedio de un billete auténtico y uno falso
<a name="tutorial_xgboost_find_average_observation"></a>

La siguiente consulta de predicción devuelve el valor promedio de cada característica para los billetes que se predice que son auténticos y falsos en el conjunto de prueba.

```
WITH predict_data AS (
    SELECT
        func_model_banknoteauthentication_xgboost_binary(variance, skewness, curtosis, entropy) AS predicted,
          variance,
          skewness,
          curtosis,
          entropy
    FROM
        banknoteauthentication_test
)
SELECT
    CASE
        WHEN predicted = '0' THEN 'Original banknote'
        WHEN predicted = '1' THEN 'Counterfeit banknote'
        ELSE 'NA'
    END AS banknote_authentication,
    TRUNC(AVG(variance), 2) AS avg_variance,
    TRUNC(AVG(skewness), 2) AS avg_skewness,
    TRUNC(AVG(curtosis), 2) AS avg_curtosis,
    TRUNC(AVG(entropy), 2) AS avg_entropy
FROM
    predict_data
GROUP BY
    1
ORDER BY
    2;
```

## Temas relacionados
<a name="tutorial_xgboost_related_topics"></a>

Para obtener más información sobre Amazon Redshift ML, consulte la siguiente documentación:
+ [Costes de utilizar Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)
+ [Operación CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html)
+ [Función EXPLAIN\$1MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_explain_model_function.html)

Para obtener más información sobre machine learning, consulte la siguiente documentación:
+ [Información general sobre machine learning](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning_overview.html)
+ [Machine learning para principiantes y expertos](https://docs.aws.amazon.com/redshift/latest/dg/novice_expert.html)
+ [Qué es la equidad y la explicabilidad del modelo para las predicciones de machine learning?](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html)

# Tutorial: Creación de modelos de regresión
<a name="tutorial_regression"></a>

En este tutorial, utilizará Amazon Redshift ML para crear un modelo de regresión de machine learning y ejecutar consultas de predicción en el modelo. Los modelos de regresión le permiten predecir resultados numéricos, como el precio de una casa o cuántas personas utilizarán el servicio de alquiler de bicicletas de una ciudad. El comando CREATE MODEL se usa en Amazon Redshift con los datos de entrenamiento. A continuación, Amazon Redshift ML compila el modelo, importa el modelo entrenado a Redshift y prepara una función de predicción de SQL. Puede usar la función de predicción en consultas SQL en Amazon Redshift.

En este tutorial, utilizará Amazon Redshift ML para crear un modelo de regresión que prediga el número de personas que utilizan el servicio de bicicletas compartidas de la ciudad de Toronto a cualquier hora del día. Las entradas para el modelo incluyen días festivos y condiciones meteorológicas. Utilizará un modelo de regresión, porque quiere un resultado numérico para este problema.

Puede utilizar el comando CREATE MODEL para exportar datos de entrenamiento, entrenar un modelo y hacer que el modelo esté disponible en Amazon Redshift como una función SQL. Utilice la operación CREATE MODEL para especificar los datos de entrenamiento en forma de tabla o con la instrucción SELECT.

## Ejemplos de casos de uso
<a name="tutorial_regression_tasks"></a>

Puede resolver otros problemas de regresión con Amazon Redshift ML, como predecir el valor de por vida de un cliente. También puede usar Redshift ML para predecir el precio más rentable y los ingresos resultantes de un producto.

**Tareas**
+ Requisitos previos
+ Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
+ Paso 2: Crear el modelo de machine learning
+ Paso 3: Validar el modelo

## Requisitos previos
<a name="tutorial_regression_prereqs"></a>

Para completar este tutorial, debe realizar el procedimiento de [configuración administrativa](https://docs.aws.amazon.com/redshift/latest/dg/admin-setup.html) de Amazon Redshift ML.

## Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
<a name="tutorial_regression_step_load"></a>

Use el [editor de consultas de Amazon Redshift v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html) para ejecutar las siguientes consultas.

1. Debe crear tres tablas para cargar los tres conjuntos de datos públicos en Amazon Redshift. Los conjuntos de datos son los [datos del número de usuarios de bicicletas de Toronto](https://open.toronto.ca/dataset/bike-share-toronto-ridership-data/), los[datos meteorológicos históricos](https://climate.weather.gc.ca/historical_data/search_historic_data_e.html) y los [datos históricos de días festivos](https://github.com/uWaterloo/Datasets/blob/master/Holidays/holidays.csv). Ejecute la siguiente consulta en el editor de consultas de Amazon Redshift para crear las tablas denominadas `ridership`, `weather` y `holiday`.

   ```
   CREATE TABLE IF NOT EXISTS ridership (
       trip_id INT,
       trip_duration_seconds INT,
       trip_start_time timestamp,
       trip_stop_time timestamp,
       from_station_name VARCHAR(50),
       to_station_name VARCHAR(50),
       from_station_id SMALLINT,
       to_station_id SMALLINT,
       user_type VARCHAR(20)
   );
   
   CREATE TABLE IF NOT EXISTS weather (
       longitude_x DECIMAL(5, 2),
       latitude_y DECIMAL(5, 2),
       station_name VARCHAR(20),
       climate_id BIGINT,
       datetime_utc TIMESTAMP,
       weather_year SMALLINT,
       weather_month SMALLINT,
       weather_day SMALLINT,
       time_utc VARCHAR(5),
       temp_c DECIMAL(5, 2),
       temp_flag VARCHAR(1),
       dew_point_temp_c DECIMAL(5, 2),
       dew_point_temp_flag VARCHAR(1),
       rel_hum SMALLINT,
       rel_hum_flag VARCHAR(1),
       precip_amount_mm DECIMAL(5, 2),
       precip_amount_flag VARCHAR(1),
       wind_dir_10s_deg VARCHAR(10),
       wind_dir_flag VARCHAR(1),
       wind_spd_kmh VARCHAR(10),
       wind_spd_flag VARCHAR(1),
       visibility_km VARCHAR(10),
       visibility_flag VARCHAR(1),
       stn_press_kpa DECIMAL(5, 2),
       stn_press_flag VARCHAR(1),
       hmdx SMALLINT,
       hmdx_flag VARCHAR(1),
       wind_chill VARCHAR(10),
       wind_chill_flag VARCHAR(1),
       weather VARCHAR(10)
   );
   
   CREATE TABLE IF NOT EXISTS holiday (holiday_date DATE, description VARCHAR(100));
   ```

1. La siguiente consulta carga los datos de muestra en las tablas que ha creado en el paso anterior.

   ```
   COPY ridership
   FROM
       's3://redshift-ml-bikesharing-data/bike-sharing-data/ridership/' 
       IAM_ROLE default 
       FORMAT CSV 
       IGNOREHEADER 1 
       DATEFORMAT 'auto' 
       TIMEFORMAT 'auto' 
       REGION 'us-west-2' 
       gzip;
   
   COPY weather
   FROM
       's3://redshift-ml-bikesharing-data/bike-sharing-data/weather/' 
       IAM_ROLE default 
       FORMAT csv 
       IGNOREHEADER 1 
       DATEFORMAT 'auto' 
       TIMEFORMAT 'auto' 
       REGION 'us-west-2' 
       gzip;
   
   COPY holiday
   FROM
       's3://redshift-ml-bikesharing-data/bike-sharing-data/holiday/' 
       IAM_ROLE default 
       FORMAT csv 
       IGNOREHEADER 1 
       DATEFORMAT 'auto' 
       TIMEFORMAT 'auto' 
       REGION 'us-west-2' 
       gzip;
   ```

1. La siguiente consulta realiza transformaciones en los conjuntos da datos `ridership` y `weather` para eliminar sesgos o anomalías. La eliminación de sesgos y anomalías mejora la precisión del modelo. La consulta simplifica las tablas mediante la creación de dos nuevas vistas denominadas `ridership_view` y `weather_view`.

   ```
   CREATE
   OR REPLACE VIEW ridership_view AS
   SELECT
       trip_time,
       trip_count,
       TO_CHAR(trip_time, 'hh24') :: INT trip_hour,
       TO_CHAR(trip_time, 'dd') :: INT trip_day,
       TO_CHAR(trip_time, 'mm') :: INT trip_month,
       TO_CHAR(trip_time, 'yy') :: INT trip_year,
       TO_CHAR(trip_time, 'q') :: INT trip_quarter,
       TO_CHAR(trip_time, 'w') :: INT trip_month_week,
       TO_CHAR(trip_time, 'd') :: INT trip_week_day
   FROM
       (
           SELECT
               CASE
                   WHEN TRUNC(r.trip_start_time) < '2017-07-01' :: DATE THEN CONVERT_TIMEZONE(
                       'US/Eastern',
                       DATE_TRUNC('hour', r.trip_start_time)
                   )
                   ELSE DATE_TRUNC('hour', r.trip_start_time)
               END trip_time,
               COUNT(1) trip_count
           FROM
               ridership r
           WHERE
               r.trip_duration_seconds BETWEEN 60
               AND 60 * 60 * 24
           GROUP BY
               1
       );
   
   CREATE
   OR REPLACE VIEW weather_view AS
   SELECT
       CONVERT_TIMEZONE(
           'US/Eastern',
           DATE_TRUNC('hour', datetime_utc)
       ) daytime,
       ROUND(AVG(temp_c)) temp_c,
       ROUND(AVG(precip_amount_mm)) precip_amount_mm
   FROM
       weather
   GROUP BY
       1;
   ```

1. La siguiente consulta crea una tabla que combina todos los atributos de entrada relevantes de `ridership_view` y `weather_view` en la tabla `trip_data`.

   ```
   CREATE TABLE trip_data AS
   SELECT
       r.trip_time,
       r.trip_count,
       r.trip_hour,
       r.trip_day,
       r.trip_month,
       r.trip_year,
       r.trip_quarter,
       r.trip_month_week,
       r.trip_week_day,
       w.temp_c,
       w.precip_amount_mm,CASE
           WHEN h.holiday_date IS NOT NULL THEN 1
           WHEN TO_CHAR(r.trip_time, 'D') :: INT IN (1, 7) THEN 1
           ELSE 0
       END is_holiday,
       ROW_NUMBER() OVER (
           ORDER BY
               RANDOM()
       ) serial_number
   FROM
       ridership_view r
       JOIN weather_view w ON (r.trip_time = w.daytime)
       LEFT OUTER JOIN holiday h ON (TRUNC(r.trip_time) = h.holiday_date);
   ```

### Ver los datos de muestra (opcional)
<a name="tutorial_regression_view_data"></a>

La siguiente consulta muestra las entradas de la tabla. Puede ejecutar esta operación para asegurarse de que la tabla se creó correctamente.

```
SELECT * 
FROM trip_data 
LIMIT 5;
```

A continuación se muestra un ejemplo de la salida de la operación anterior.

```
+---------------------+------------+-----------+----------+------------+-----------+--------------+-----------------+---------------+--------+------------------+------------+---------------+
|      trip_time      | trip_count | trip_hour | trip_day | trip_month | trip_year | trip_quarter | trip_month_week | trip_week_day | temp_c | precip_amount_mm | is_holiday | serial_number |
+---------------------+------------+-----------+----------+------------+-----------+--------------+-----------------+---------------+--------+------------------+------------+---------------+
| 2017-03-21 22:00:00 |         47 |        22 |       21 |          3 |        17 |            1 |               3 |             3 |      1 |                0 |          0 |             1 |
| 2018-05-04 01:00:00 |         19 |         1 |        4 |          5 |        18 |            2 |               1 |             6 |     12 |                0 |          0 |             3 |
| 2018-01-11 10:00:00 |         93 |        10 |       11 |          1 |        18 |            1 |               2 |             5 |      9 |                0 |          0 |             5 |
| 2017-10-28 04:00:00 |         20 |         4 |       28 |         10 |        17 |            4 |               4 |             7 |     11 |                0 |          1 |             7 |
| 2017-12-31 21:00:00 |         11 |        21 |       31 |         12 |        17 |            4 |               5 |             1 |    -15 |                0 |          1 |             9 |
+---------------------+------------+-----------+----------+------------+-----------+--------------+-----------------+---------------+--------+------------------+------------+---------------+
```

### Mostrar la correlación entre los atributos (opcional)
<a name="tutorial_regression_show_correlation"></a>

Determinar la correlación le ayuda a medir la fuerza de la asociación entre los atributos. El nivel de asociación puede ayudarle a determinar qué afecta a la salida objetivo. En este tutorial, la salida objetivo es `trip_count`.

La siguiente consulta crea o reemplaza el procedimiento `sp_correlation`. Se utiliza el procedimiento almacenado denominado `sp_correlation` para mostrar la correlación entre un atributo y otros atributos en una tabla de Amazon Redshift.

```
CREATE OR REPLACE PROCEDURE sp_correlation(source_schema_name in varchar(255), source_table_name in varchar(255), target_column_name in varchar(255), output_temp_table_name inout varchar(255)) AS $$
DECLARE
  v_sql varchar(max);
  v_generated_sql varchar(max);
  v_source_schema_name varchar(255)=lower(source_schema_name);
  v_source_table_name varchar(255)=lower(source_table_name);
  v_target_column_name varchar(255)=lower(target_column_name);
BEGIN
  EXECUTE 'DROP TABLE IF EXISTS ' || output_temp_table_name;
  v_sql = '
SELECT
  ''CREATE temp table '|| output_temp_table_name||' AS SELECT ''|| outer_calculation||
  '' FROM (SELECT COUNT(1) number_of_items, SUM('||v_target_column_name||') sum_target, SUM(POW('||v_target_column_name||',2)) sum_square_target, POW(SUM('||v_target_column_name||'),2) square_sum_target,''||
  inner_calculation||
  '' FROM (SELECT ''||
  column_name||
  '' FROM '||v_source_table_name||'))''
FROM
  (
  SELECT
    DISTINCT
    LISTAGG(outer_calculation,'','') OVER () outer_calculation
    ,LISTAGG(inner_calculation,'','') OVER () inner_calculation
    ,LISTAGG(column_name,'','') OVER () column_name
  FROM
    (
    SELECT
      CASE WHEN atttypid=16 THEN ''DECODE(''||column_name||'',true,1,0)'' ELSE column_name END column_name
      ,atttypid
      ,''CAST(DECODE(number_of_items * sum_square_''||rn||'' - square_sum_''||rn||'',0,null,(number_of_items*sum_target_''||rn||'' - sum_target * sum_''||rn||
        '')/SQRT((number_of_items * sum_square_target - square_sum_target) * (number_of_items * sum_square_''||rn||
        '' - square_sum_''||rn||''))) AS numeric(5,2)) ''||column_name outer_calculation
      ,''sum(''||column_name||'') sum_''||rn||'',''||
            ''SUM(trip_count*''||column_name||'') sum_target_''||rn||'',''||
            ''SUM(POW(''||column_name||'',2)) sum_square_''||rn||'',''||
            ''POW(SUM(''||column_name||''),2) square_sum_''||rn inner_calculation
    FROM
      (
      SELECT
        row_number() OVER (order by a.attnum) rn
        ,a.attname::VARCHAR column_name
        ,a.atttypid
      FROM pg_namespace AS n
        INNER JOIN pg_class AS c ON n.oid = c.relnamespace
        INNER JOIN pg_attribute AS a ON c.oid = a.attrelid
      WHERE a.attnum > 0
        AND n.nspname = '''||v_source_schema_name||'''
        AND c.relname = '''||v_source_table_name||'''
        AND a.atttypid IN (16,20,21,23,700,701,1700)
      )
    )
)';
  EXECUTE v_sql INTO v_generated_sql;
  EXECUTE  v_generated_sql;
END;
$$ LANGUAGE plpgsql;
```

La siguiente consulta muestra la correlación entre la columna objetivo, `trip_count`, y otros atributos numéricos de nuestro conjunto de datos.

```
call sp_correlation(
    'public',
    'trip_data',
    'trip_count',
    'tmp_corr_table'
);

SELECT
    *
FROM
    tmp_corr_table;
```

A continuación se muestra la salida de la operación `sp_correlation` anterior.

```
+------------+-----------+----------+------------+-----------+--------------+-----------------+---------------+--------+------------------+------------+---------------+
| trip_count | trip_hour | trip_day | trip_month | trip_year | trip_quarter | trip_month_week | trip_week_day | temp_c | precip_amount_mm | is_holiday | serial_number |
+------------+-----------+----------+------------+-----------+--------------+-----------------+---------------+--------+------------------+------------+---------------+
|          1 |      0.32 |     0.01 |       0.18 |      0.12 |         0.18 |               0 |          0.02 |   0.53 |            -0.07 |      -0.13 |             0 |
+------------+-----------+----------+------------+-----------+--------------+-----------------+---------------+--------+------------------+------------+---------------+
```

## Paso 2: Crear el modelo de machine learning
<a name="tutorial_regression_create_model"></a>

1. La siguiente consulta divide los datos en un conjunto de entrenamiento y un conjunto de validación al designar el 80 % del conjunto de datos para el entrenamiento y el 20 % para la validación. El conjunto de entrenamiento es la entrada del modelo de ML para identificar el mejor algoritmo posible para el modelo. Una vez creado el modelo, se utiliza el conjunto de validación para validar la precisión del modelo.

   ```
   CREATE TABLE training_data AS
   SELECT
       trip_count,
       trip_hour,
       trip_day,
       trip_month,
       trip_year,
       trip_quarter,
       trip_month_week,
       trip_week_day,
       temp_c,
       precip_amount_mm,
       is_holiday
   FROM
       trip_data
   WHERE
       serial_number > (
           SELECT
               COUNT(1) * 0.2
           FROM
               trip_data
       );
   
   CREATE TABLE validation_data AS
   SELECT
       trip_count,
       trip_hour,
       trip_day,
       trip_month,
       trip_year,
       trip_quarter,
       trip_month_week,
       trip_week_day,
       temp_c,
       precip_amount_mm,
       is_holiday,
       trip_time
   FROM
       trip_data
   WHERE
       serial_number <= (
           SELECT
               COUNT(1) * 0.2
           FROM
               trip_data
       );
   ```

1. La siguiente consulta crea un modelo de regresión para predecir el valor de `trip_count` para cualquier fecha y hora de entrada. En el siguiente ejemplo, reemplace amzn-s3-demo-bucket por el bucket de S3 propio.

   ```
   CREATE MODEL predict_rental_count
   FROM
       training_data TARGET trip_count FUNCTION predict_rental_count 
       IAM_ROLE default 
       PROBLEM_TYPE regression 
       OBJECTIVE 'mse' 
       SETTINGS (
           s3_bucket 'amzn-s3-demo-bucket',
           s3_garbage_collect off,
           max_runtime 5000
       );
   ```

## Paso 3: Validar el modelo
<a name="tutorial_regression_step_validate"></a>

1. Utilice la siguiente consulta para generar aspectos del modelo y buscar la métrica del error cuadrado medio raíz en la salida. El error cuadrado medio es una métrica de precisión típica para los problemas de regresión.

   ```
   show model predict_rental_count;
   ```

1. Ejecute las siguientes consultas de predicción con los datos de validación para comparar el recuento de viajes previsto con el recuento de viajes real.

   ```
   SELECT
       trip_time,
       actual_count,
       predicted_count,
       (actual_count - predicted_count) difference
   FROM
       (
           SELECT
               trip_time,
               trip_count AS actual_count,
               PREDICT_RENTAL_COUNT (
                   trip_hour,
                   trip_day,
                   trip_month,
                   trip_year,
                   trip_quarter,
                   trip_month_week,
                   trip_week_day,
                   temp_c,
                   precip_amount_mm,
                   is_holiday
               ) predicted_count
           FROM
               validation_data
       )
   LIMIT
       5;
   ```

1. La siguiente consulta calcula el error cuadrado medio y el error cuadrado medio raíz basándose en los datos de validación. El error cuadrado medio y el error cuadrado medio raíz se utilizan para medir la distancia entre el destino numérico predicho y la respuesta numérica real. Un buen modelo tiene una puntuación baja en ambas métricas. La siguiente consulta devuelve el valor de ambas métricas.

   ```
   SELECT
       ROUND(
           AVG(POWER((actual_count - predicted_count), 2)),
           2
       ) mse,
       ROUND(
           SQRT(AVG(POWER((actual_count - predicted_count), 2))),
           2
       ) rmse
   FROM
       (
           SELECT
               trip_time,
               trip_count AS actual_count,
               PREDICT_RENTAL_COUNT (
                   trip_hour,
                   trip_day,
                   trip_month,
                   trip_year,
                   trip_quarter,
                   trip_month_week,
                   trip_week_day,
                   temp_c,
                   precip_amount_mm,
                   is_holiday
               ) predicted_count
           FROM
               validation_data
       );
   ```

1. La siguiente consulta calcula el porcentaje de error en el recuento de viajes para cada tiempo de viaje el 01/01/2017. La consulta ordena los tiempos de viaje desde el tiene el error porcentual más bajo hasta el tiempo con el error porcentual más alto.

   ```
   SELECT
       trip_time,
       CAST(ABS(((actual_count - predicted_count) / actual_count)) * 100 AS DECIMAL (7,2)) AS pct_error
   FROM
       (
           SELECT
               trip_time,
               trip_count AS actual_count,
               PREDICT_RENTAL_COUNT (
                   trip_hour,
                   trip_day,
                   trip_month,
                   trip_year,
                   trip_quarter,
                   trip_month_week,
                   trip_week_day,
                   temp_c,
                   precip_amount_mm,
                   is_holiday
               ) predicted_count
           FROM
               validation_data
       )
   WHERE
      trip_time LIKE '2017-01-01 %%:%%:%%'
   ORDER BY
      2 ASC;
   ```

## Temas relacionados
<a name="tutorial_regression_related_topics"></a>

Para obtener más información sobre Amazon Redshift ML, consulte la siguiente documentación:
+ [Costes de utilizar Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)
+ [Operación CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html)
+ [Función EXPLAIN\$1MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_explain_model_function.html)

Para obtener más información sobre machine learning, consulte la siguiente documentación:
+ [Información general sobre machine learning](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning_overview.html)
+ [Machine learning para principiantes y expertos](https://docs.aws.amazon.com/redshift/latest/dg/novice_expert.html)
+ [Qué es la equidad y la explicabilidad del modelo para las predicciones de machine learning?](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html)

# Tutorial: Creación de modelos de regresión con aprendizaje lineal
<a name="tutorial_linear_learner_regression"></a>

En este tutorial, creará un modelo de aprendizaje lineal con datos de Amazon S3 y ejecutará consultas de predicción con el modelo mediante Amazon Redshift ML. El algoritmo de aprendizaje lineal de SageMaker AI resuelve problemas de regresión o clasificación multiclase. Para obtener más información sobre los problemas de regresión y clasificación multiclase, consulte [Problem types for the machine learning paradigms](https://docs.aws.amazon.com/sagemaker/latest/dg/algorithms-choose.html#basic-machine-learning-paradigms) en la Guía para desarrolladores de Amazon SageMaker AI. En este tutorial, resolverá un problema de regresión. El algoritmo de aprendizaje lineal entrena muchos modelos en paralelo y determina automáticamente el modelo más optimizado. Utilice la operación CREATE MODEL en Amazon Redshift, que crea el modelo de aprendizaje lineal mediante SageMaker AI y envía una función de predicción a Amazon Redshift. Para obtener más información sobre el algoritmo de aprendizaje lineal, consulte [Algoritmo de aprendizaje lineal](https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html) en la Guía para desarrolladores de Amazon SageMaker AI.

Se puede utilizar un comando CREATE MODEL para exportar datos de entrenamiento, entrenar un modelo, importar ese modelo y preparar una función de predicción de Amazon Redshift. Utilice la operación CREATE MODEL para especificar los datos de entrenamiento en forma de tabla o con la instrucción SELECT.

Los modelos de aprendizaje lineal optimizan los objetivos continuos o los objetivos discretos. Los objetivos continuos se utilizan para la regresión, mientras que las variables discretas se utilizan para la clasificación. Algunos métodos proporcionan una solución solo para objetivos continuos, como el método de regresión. El algoritmo de aprendizaje lineal proporciona un aumento de la velocidad comparado con las técnicas de optimización de hiperparámetros ingenua, como la técnica Naive Bayes. La técnica de optimización ingenua supone que cada variable de entrada es independiente. Para utilizar el algoritmo de aprendizaje lineal, debe proporcionar columnas que representan las dimensiones de las entradas y filas que representan las observaciones. Para obtener más información sobre el algoritmo de aprendizaje lineal, consulte [Algoritmo de aprendizaje lineal](https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html) en la Guía para desarrolladores de Amazon SageMaker AI. 

En este tutorial, vamos a crear un modelo de aprendizaje lineal que predice la edad del abulón. Utilice el comando CREATE MODEL en el [conjunto de datos del abulón](http://archive.ics.uci.edu/ml/datasets/Abalone) para determinar la relación entre las medidas físicas del abulón. Luego, utilice el modelo para determinar la edad del abulón.

## Ejemplos de casos de uso
<a name="tutorial_linear_learner_regression_tasks"></a>

Puede resolver otros problemas de regresión con el aprendizaje lineal y Amazon Redshift ML, como predecir el precio de una casa. También puede usar Redshift ML para predecir la cantidad de personas que usarán el servicio de alquiler de bicicletas de una ciudad.

**Tareas**
+ Requisitos previos
+ Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
+ Paso 2: Crear el modelo de machine learning
+ Paso 3: Validar el modelo

## Requisitos previos
<a name="tutorial_linear_learner_regression_prereqs"></a>

Para completar este tutorial, debe realizar el procedimiento de [configuración administrativa](https://docs.aws.amazon.com/redshift/latest/dg/admin-setup.html) de Amazon Redshift ML.

## Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
<a name="tutorial_linear_learner_regression_step_load_data"></a>

Use el [editor de consultas de Amazon Redshift v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html) para ejecutar las siguientes consultas. Estas consultas cargan los datos de muestra en Redshift y los dividen en un conjunto de entrenamiento y un conjunto de validación.

1. En la siguiente consulta, se crea la tabla `abalone_dataset`.

   ```
   CREATE TABLE abalone_dataset (
       id INT IDENTITY(1, 1),
       Sex CHAR(1),
       Length float,
       Diameter float,
       Height float,
       Whole float,
       Shucked float,
       Viscera float,
       Shell float,
       Rings integer
   );
   ```

1. La siguiente consulta copia los datos de muestra del [conjunto de datos de abulón](http://archive.ics.uci.edu/ml/datasets/Abalone) en Amazon S3 en la tabla `abalone_dataset` que creó anteriormente en Amazon Redshift.

   ```
   COPY abalone_dataset
   FROM
       's3://redshift-ml-multiclass/abalone.csv' REGION 'us-east-1' IAM_ROLE default CSV IGNOREHEADER 1 NULL AS 'NULL';
   ```

1. Al dividir manualmente los datos, podrá verificar la precisión del modelo asignando un conjunto de predicciones adicional. La siguiente consulta divide los datos en dos conjuntos. La tabla `abalone_training` es para el entrenamiento y la tabla `abalone_validation`l es para validación.

   ```
   CREATE TABLE abalone_training as 
   SELECT 
       *
   FROM
       abalone_dataset
   WHERE
       mod(id, 10) < 8;
   
   CREATE TABLE abalone_validation as 
   SELECT 
       *
   FROM
       abalone_dataset
   WHERE
       mod(id, 10) >= 8;
   ```

## Paso 2: Crear el modelo de machine learning
<a name="tutorial_linear_learner_regression_step_create_model"></a>

En este paso, utilizará la instrucción CREATE MODEL para crear el modelo de machine learning con el algoritmo de aprendizaje lineal. 

La siguiente consulta crea el modelo de aprendizaje lineal con la operación CREATE MODEL mediante el bucket de S3. Reemplace amzn-s3-demo-bucket por el bucket de S3 propio.

```
CREATE MODEL model_abalone_ring_prediction
FROM
    (
        SELECT
            Sex,
            Length,
            Diameter,
            Height,
            Whole,
            Shucked,
            Viscera,
            Shell,
            Rings AS target_label
        FROM
            abalone_training
    ) TARGET target_label FUNCTION f_abalone_ring_prediction IAM_ROLE default MODEL_TYPE LINEAR_LEARNER PROBLEM_TYPE REGRESSION OBJECTIVE 'MSE' SETTINGS (
        S3_BUCKET 'amzn-s3-demo-bucket',
        MAX_RUNTIME 15000
    );
```

### Comprobar el estado del entrenamiento del modelo (opcional)
<a name="tutorial_linear_learner_regression_show_status"></a>

Puede utilizar el comando SHOW MODEL para saber cuándo está listo el modelo.

Utilice la siguiente consulta para supervisar el estado del entrenamiento del modelo.

```
SHOW MODEL model_abalone_ring_prediction;
```

Cuando el modelo esté listo, la salida de la operación anterior tendrá un aspecto semejante al del siguiente ejemplo. Tenga en cuenta que la salida proporciona la métrica `validation:mse`, que es el error cuadrado medio. Utilice el error cuadrado medio para validar la precisión del modelo en el paso siguiente.

```
+--------------------------+----------------------------------------------------------------------------------------------------+
|        Model Name        |                                   model_abalone_ring_prediction                                    |
+--------------------------+----------------------------------------------------------------------------------------------------+
| Schema Name              | public                                                                                             |
| Owner                    | awsuser                                                                                            |
| Creation Time            | Thu, 30.06.2022 18:00:10                                                                           |
| Model State              | READY                                                                                              |
| validation:mse           |                                                                                           4.168633 |
| Estimated Cost           |                                                                                           4.291608 |
|                          |                                                                                                    |
| TRAINING DATA:           |                                                                                                    |
| Query                    | SELECT SEX , LENGTH , DIAMETER , HEIGHT , WHOLE , SHUCKED , VISCERA , SHELL, RINGS AS TARGET_LABEL |
|                          | FROM ABALONE_TRAINING                                                                              |
| Target Column            | TARGET_LABEL                                                                                       |
|                          |                                                                                                    |
| PARAMETERS:              |                                                                                                    |
| Model Type               | linear_learner                                                                                     |
| Problem Type             | Regression                                                                                         |
| Objective                | MSE                                                                                                |
| AutoML Job Name          | redshiftml-20220630180010947843                                                                    |
| Function Name            | f_abalone_ring_prediction                                                                          |
| Function Parameters      | sex length diameter height whole shucked viscera shell                                             |
| Function Parameter Types | bpchar float8 float8 float8 float8 float8 float8 float8                                            |
| IAM Role                 | default-aws-iam-role                                                                               |
| S3 Bucket                | amzn-s3-demo-bucket                                                                                |
| Max Runtime              |                                                                                              15000 |
+--------------------------+----------------------------------------------------------------------------------------------------+
```

## Paso 3: Validar el modelo
<a name="tutorial_linear_learner_regression_step_validate"></a>

1. La siguiente consulta de predicción valida la precisión del modelo en el conjunto de datos `abalone_validation`calculando el error cuadrado medio y el error cuadrado medio raíz.

   ```
   SELECT
       ROUND(AVG(POWER((tgt_label - predicted), 2)), 2) mse,
       ROUND(SQRT(AVG(POWER((tgt_label - predicted), 2))), 2) rmse
   FROM
       (
           SELECT
               Sex,
               Length,
               Diameter,
               Height,
               Whole,
               Shucked,
               Viscera,
               Shell,
               Rings AS tgt_label,
               f_abalone_ring_prediction(
                   Sex,
                   Length,
                   Diameter,
                   Height,
                   Whole,
                   Shucked,
                   Viscera,
                   Shell
               ) AS predicted,
               CASE
                   WHEN tgt_label = predicted then 1
                   ELSE 0
               END AS match,
               CASE
                   WHEN tgt_label <> predicted then 1
                   ELSE 0
               END AS nonmatch
           FROM
               abalone_validation
       ) t1;
   ```

   La salida de la consulta anterior tendrá un aspecto semejante al de este ejemplo. El valor de la métrica del error cuadrado medio debe ser similar al valor de la métrica `validation:mse` que se muestra en la salida de la operación SHOW MODEL.

   ```
   +-----+--------------------+
   | mse |        rmse        |
   +-----+--------------------+
   | 5.1 | 2.2600000000000002 |
   +-----+--------------------+
   ```

1. Utilice la siguiente consulta para ejecutar la operación EXPLAIN\$1MODEL en la función de predicción. La operación devolverá un informe de explicabilidad del modelo. Para obtener más información sobre la operación EXPLAIN\$1MODEL, consulte [Función EXPLAIN\$1MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_explain_model_function.html) en la Guía para desarrolladores de bases de datos de Amazon Redshift.

   ```
   SELECT
       EXPLAIN_MODEL ('model_abalone_ring_prediction');
   ```

   La siguiente información es un ejemplo del informe de explicabilidad del modelo generado por la operación EXPLAIN\$1MODEL anterior. Los valores de cada una de las entradas son valores de Shapley. Los valores de Shapley representan el efecto que tiene cada entrada en la predicción de su modelo, donde las entradas de mayor valor tienen más impacto en la predicción. En este ejemplo, las entradas de mayor valor tienen más impacto en la predicción de la edad del abulón.

   ```
   { 
       "explanations": { 
           "kernel_shap": { 
               "label0": { 
                   "expected_value" :10.290688514709473,
                   "global_shap_values": { 
                       "diameter" :0.6856910187882492,
                       "height" :0.4415323937124035,
                       "length" :0.21507476107609084,
                       "sex" :0.448611774505744,
                       "shell" :1.70426496893776,
                       "shucked" :2.1181392924386994,
                       "viscera" :0.342220754059912,
                       "whole" :0.6711906974084011 
                   } 
               } 
           } 
       },
       "version" :"1.0" 
   };
   ```

1. Utilice la siguiente consulta para calcular el porcentaje de predicciones correctas que el modelo hace sobre los abulones que aún no están maduros. Los abulones inmaduros tienen 10 anillos o menos, y una predicción correcta es precisa dentro de un anillo del número real de anillos.

   ```
   SELECT
       TRUNC(
           SUM(
               CASE
                   WHEN ROUND(
                       f_abalone_ring_prediction(
                           Sex,
                           Length,
                           Diameter,
                           Height,
                           Whole,
                           Shucked,
                           Viscera,
                           Shell
                       ),
                       0
                   ) BETWEEN Rings - 1
                   AND Rings + 1 THEN 1
                   ELSE 0
               END
           ) / CAST(COUNT(SHELL) AS FLOAT),
           4
       ) AS prediction_pct
   FROM
       abalone_validation
   WHERE
       Rings <= 10;
   ```

## Temas relacionados
<a name="tutorial_linear_learner_regression_related_topics"></a>

Para obtener más información sobre Amazon Redshift ML, consulte la siguiente documentación:
+ [Costes de utilizar Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)
+ [Operación CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html)
+ [Función EXPLAIN\$1MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_explain_model_function.html)

Para obtener más información sobre machine learning, consulte la siguiente documentación:
+ [Información general sobre machine learning](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning_overview.html)
+ [Machine learning para principiantes y expertos](https://docs.aws.amazon.com/redshift/latest/dg/novice_expert.html)
+ [Qué es la equidad y la explicabilidad del modelo para las predicciones de machine learning?](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html)

# Tutorial: Creación de modelos de clasificación multiclase con aprendizaje lineal
<a name="tutorial_linear_learner_multi-class_classification"></a>

En este tutorial, creará un modelo de aprendizaje lineal con datos de Amazon S3 y, a continuación, ejecutará consultas de predicción con el modelo mediante Amazon Redshift ML. El algoritmo de aprendizaje lineal de SageMaker AI resuelve problemas de regresión o clasificación. Para obtener más información sobre los problemas de regresión y clasificación multiclase, consulte [Problem types for the machine learning paradigms](https://docs.aws.amazon.com/sagemaker/latest/dg/algorithms-choose.html#basic-machine-learning-paradigms) en la Guía para desarrolladores de Amazon SageMaker AI. En este tutorial, solucionará un problema de clasificación multiclase. El algoritmo de aprendizaje lineal entrena muchos modelos en paralelo y determina automáticamente el modelo más optimizado. Utilice la operación CREATE MODEL en Amazon Redshift, que crea el modelo de aprendizaje lineal mediante SageMaker AI y envía la función de predicción a Amazon Redshift. Para obtener más información sobre el algoritmo de aprendizaje lineal, consulte [Algoritmo de aprendizaje lineal](https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html) en la Guía para desarrolladores de Amazon SageMaker AI.

Se puede utilizar un comando CREATE MODEL para exportar datos de entrenamiento, entrenar un modelo, importar ese modelo y preparar una función de predicción de Amazon Redshift. Utilice la operación CREATE MODEL para especificar los datos de entrenamiento en forma de tabla o con la instrucción SELECT.

Los modelos de aprendizaje lineal optimizan los objetivos continuos o los objetivos discretos. Los objetivos continuos se utilizan para la regresión, mientras que las variables discretas se utilizan para la clasificación. Algunos métodos proporcionan una solución solo para objetivos continuos, como un método de regresión. El algoritmo de aprendizaje lineal proporciona un aumento de la velocidad comparado con las técnicas de optimización de hiperparámetros ingenua, como la técnica Naive Bayes. La técnica de optimización ingenua supone que cada variable de entrada es independiente. El algoritmo de aprendizaje lineal entrena muchos modelos en paralelo y selecciona el modelo más optimizado. Un algoritmo similar es XGBoost, que combina estimaciones de un conjunto de modelos más simples y más débiles para hacer predicciones. Para obtener más información sobre XGBoost, consulte [Algoritmo XGBoost](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html) en la Guía para desarrolladores de Amazon SageMaker AI.

Para utilizar el algoritmo de aprendizaje lineal, debe proporcionar columnas que representan las dimensiones de las entradas y filas que representan las observaciones. Para obtener más información sobre el algoritmo de aprendizaje lineal, consulte [Algoritmo de aprendizaje lineal](https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html) en la Guía para desarrolladores de Amazon SageMaker AI. 

En este tutorial, creará un modelo de aprendizaje lineal que predice los tipos de cubiertas para un área determinada. Utilice el comando CREATE MODEL en el [conjunto de datos Covertype](https://archive.ics.uci.edu/ml/datasets/covertype) de UCI Machine Learning Repository. A continuación, utilice la función de predicción creada por el comando para determinar los tipos de cubierta en un área natural. Un tipo de cubierta forestal suele ser un tipo de árbol. Las entradas que utilizará Redshift ML para crear el modelo incluyen el tipo de suelo, la distancia a las carreteras y la designación de áreas naturales. Para obtener más información sobre el conjunto de datos, consulte el [conjunto de datos Covertype](https://archive.ics.uci.edu/ml/datasets/covertype) de UCI Machine Learning Repository.

## Ejemplos de casos de uso
<a name="tutorial_linear_learner_multi-class_classification_tasks"></a>

Puede resolver otros problemas de clasificación multiclase con el aprendizaje lineal con Amazon Redshift ML, como predecir la especie de una planta a partir de una imagen. También puede predecir la cantidad de un producto que comprará un cliente.

**Tareas**
+ Requisitos previos
+ Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
+ Paso 2: Crear el modelo de machine learning
+ Paso 3: Validar el modelo

## Requisitos previos
<a name="tutorial_linear_learner_multi-class_classification_prereqs"></a>

Para completar este tutorial, debe realizar el procedimiento de [configuración administrativa](https://docs.aws.amazon.com/redshift/latest/dg/admin-setup.html) de Amazon Redshift ML.

## Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
<a name="tutorial_linear_learner_multi-class_classification_step_load"></a>

Use el [editor de consultas de Amazon Redshift v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html) para ejecutar las siguientes consultas. Estas consultas cargan los datos de muestra en Redshift y los dividen en un conjunto de entrenamiento y un conjunto de validación.

1. En la siguiente consulta, se crea la tabla `covertype_data`.

   ```
   CREATE TABLE public.covertype_data (
       elevation bigint ENCODE az64,
       aspect bigint ENCODE az64,
       slope bigint ENCODE az64,
       horizontal_distance_to_hydrology bigint ENCODE az64,
       vertical_distance_to_hydrology bigint ENCODE az64,
       horizontal_distance_to_roadways bigint ENCODE az64,
       hillshade_9am bigint ENCODE az64,
       hillshade_noon bigint ENCODE az64,
       hillshade_3pm bigint ENCODE az64,
       horizontal_distance_to_fire_points bigint ENCODE az64,
       wilderness_area1 bigint ENCODE az64,
       wilderness_area2 bigint ENCODE az64,
       wilderness_area3 bigint ENCODE az64,
       wilderness_area4 bigint ENCODE az64,
       soil_type1 bigint ENCODE az64,
       soil_type2 bigint ENCODE az64,
       soil_type3 bigint ENCODE az64,
       soil_type4 bigint ENCODE az64,
       soil_type5 bigint ENCODE az64,
       soil_type6 bigint ENCODE az64,
       soil_type7 bigint ENCODE az64,
       soil_type8 bigint ENCODE az64,
       soil_type9 bigint ENCODE az64,
       soil_type10 bigint ENCODE az64,
       soil_type11 bigint ENCODE az64,
       soil_type12 bigint ENCODE az64,
       soil_type13 bigint ENCODE az64,
       soil_type14 bigint ENCODE az64,
       soil_type15 bigint ENCODE az64,
       soil_type16 bigint ENCODE az64,
       soil_type17 bigint ENCODE az64,
       soil_type18 bigint ENCODE az64,
       soil_type19 bigint ENCODE az64,
       soil_type20 bigint ENCODE az64,
       soil_type21 bigint ENCODE az64,
       soil_type22 bigint ENCODE az64,
       soil_type23 bigint ENCODE az64,
       soil_type24 bigint ENCODE az64,
       soil_type25 bigint ENCODE az64,
       soil_type26 bigint ENCODE az64,
       soil_type27 bigint ENCODE az64,
       soil_type28 bigint ENCODE az64,
       soil_type29 bigint ENCODE az64,
       soil_type30 bigint ENCODE az64,
       soil_type31 bigint ENCODE az64,
       soil_type32 bigint ENCODE az64,
       soil_type33 bigint ENCODE az64,
       soil_type34 bigint ENCODE az64,
       soil_type35 bigint ENCODE az64,
       soil_type36 bigint ENCODE az64,
       soil_type37 bigint ENCODE az64,
       soil_type38 bigint ENCODE az64,
       soil_type39 bigint ENCODE az64,
       soil_type40 bigint ENCODE az64,
       cover_type bigint ENCODE az64
   ) DISTSTYLE AUTO;
   ```

1. La siguiente consulta copia los datos de muestra del [conjunto de datos Covertype](https://archive.ics.uci.edu/ml/datasets/covertype) en Amazon S3 en la tabla `covertype_data` que creó anteriormente en Amazon Redshift.

   ```
   COPY public.covertype_data
   FROM
       's3://redshift-ml-multiclass/covtype.data.gz' IAM_ROLE DEFAULT gzip DELIMITER ',' REGION 'us-east-1';
   ```

1. Al dividir manualmente los datos, podrá verificar la precisión del modelo asignando un conjunto de pruebas adicional. La siguiente consulta divide los datos en tres conjuntos. La tabla `covertype_training` es para el entrenamiento, la tabla `covertype_validation` es para la validación y la tabla `covertype_test` es para probar su modelo. Utilizará el conjunto de entrenamiento para entrenar el modelo y el conjunto de validación para validar el desarrollo del modelo. A continuación, utilizará el conjunto de pruebas para probar el rendimiento del modelo y comprobar si el modelo está sobreajustado o insuficientemente ajustado en el conjunto de datos.

   ```
   CREATE TABLE public.covertype_data_prep AS
   SELECT
       a.*,
       CAST (random() * 100 AS int) AS data_group_id
   FROM
       public.covertype_data a;
   
   --training dataset
    CREATE TABLE public.covertype_training as
   SELECT
       *
   FROM
       public.covertype_data_prep
   WHERE
       data_group_id < 80;
   
   --validation dataset
    CREATE TABLE public.covertype_validation AS
   SELECT
       *
   FROM
       public.covertype_data_prep
   WHERE
       data_group_id BETWEEN 80
       AND 89;
   
   --test dataset
    CREATE TABLE public.covertype_test AS
   SELECT
       *
   FROM
       public.covertype_data_prep
   WHERE
       data_group_id > 89;
   ```

## Paso 2: Crear el modelo de machine learning
<a name="tutorial_linear_learner_multi-class_classification_step_create_model"></a>

En este paso, utilizará la instrucción CREATE MODEL para crear el modelo de machine learning con el algoritmo de aprendizaje lineal. 

La siguiente consulta crea el modelo de aprendizaje lineal con la operación CREATE MODEL mediante el bucket de S3. Reemplace amzn-s3-demo-bucket por el bucket de S3 propio.

```
CREATE MODEL forest_cover_type_model
FROM
    (
        SELECT
            Elevation,
            Aspect,
            Slope,
            Horizontal_distance_to_hydrology,
            Vertical_distance_to_hydrology,
            Horizontal_distance_to_roadways,
            HIllshade_9am,
            Hillshade_noon,
            Hillshade_3pm,
            Horizontal_Distance_To_Fire_Points,
            Wilderness_Area1,
            Wilderness_Area2,
            Wilderness_Area3,
            Wilderness_Area4,
            soil_type1,
            Soil_Type2,
            Soil_Type3,
            Soil_Type4,
            Soil_Type5,
            Soil_Type6,
            Soil_Type7,
            Soil_Type8,
            Soil_Type9,
            Soil_Type10,
            Soil_Type11,
            Soil_Type12,
            Soil_Type13,
            Soil_Type14,
            Soil_Type15,
            Soil_Type16,
            Soil_Type17,
            Soil_Type18,
            Soil_Type19,
            Soil_Type20,
            Soil_Type21,
            Soil_Type22,
            Soil_Type23,
            Soil_Type24,
            Soil_Type25,
            Soil_Type26,
            Soil_Type27,
            Soil_Type28,
            Soil_Type29,
            Soil_Type30,
            Soil_Type31,
            Soil_Type32,
            Soil_Type33,
            Soil_Type34,
            Soil_Type36,
            Soil_Type37,
            Soil_Type38,
            Soil_Type39,
            Soil_Type40,
            Cover_type
        from
            public.covertype_training
    ) TARGET cover_type FUNCTION predict_cover_type IAM_ROLE default MODEL_TYPE LINEAR_LEARNER PROBLEM_TYPE MULTICLASS_CLASSIFICATION OBJECTIVE 'Accuracy' SETTINGS (
        S3_BUCKET 'amzn-s3-demo-bucket',
        S3_GARBAGE_COLLECT OFF,
        MAX_RUNTIME 15000
    );
```

### Comprobar el estado del entrenamiento del modelo (opcional)
<a name="tutorial_linear_learner_multi-class_classification_show_status"></a>

Puede utilizar el comando SHOW MODEL para saber cuándo está listo el modelo.

Utilice la siguiente consulta para supervisar el estado del entrenamiento del modelo.

```
SHOW MODEL forest_cover_type_model;
```

Cuando el modelo esté listo, la salida de la operación anterior tendrá un aspecto semejante al del siguiente ejemplo. Tenga en cuenta que en la salida se proporciona la métrica `validation:multiclass_accuracy`, que puede ver en el lado derecho del siguiente ejemplo. La precisión multiclase mide el porcentaje de puntos de datos que el modelo clasifica correctamente. Utilizará la precisión multiclase para validar la precisión del modelo en el siguiente paso.

```
+--------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|              Key               |                                                                                                                                                                                                                                                                                                                                                                                                             Value                                                                                                                                                                                                                                                                                                                                                                                                              |
+--------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Model Name                     | forest_cover_type_model                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Schema Name                    | public                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Owner                          | awsuser                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Creation Time                  | Tue, 12.07.2022 20:24:32                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Model State                    | READY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| validation:multiclass_accuracy |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       0.724952 |
| Estimated Cost                 |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       5.341750 |
|                                |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| TRAINING DATA:                 |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Query                          | SELECT ELEVATION, ASPECT, SLOPE, HORIZONTAL_DISTANCE_TO_HYDROLOGY, VERTICAL_DISTANCE_TO_HYDROLOGY, HORIZONTAL_DISTANCE_TO_ROADWAYS, HILLSHADE_9AM, HILLSHADE_NOON, HILLSHADE_3PM , HORIZONTAL_DISTANCE_TO_FIRE_POINTS, WILDERNESS_AREA1, WILDERNESS_AREA2, WILDERNESS_AREA3, WILDERNESS_AREA4, SOIL_TYPE1, SOIL_TYPE2, SOIL_TYPE3, SOIL_TYPE4, SOIL_TYPE5, SOIL_TYPE6, SOIL_TYPE7, SOIL_TYPE8, SOIL_TYPE9, SOIL_TYPE10 , SOIL_TYPE11, SOIL_TYPE12 , SOIL_TYPE13 , SOIL_TYPE14, SOIL_TYPE15, SOIL_TYPE16, SOIL_TYPE17, SOIL_TYPE18, SOIL_TYPE19, SOIL_TYPE20, SOIL_TYPE21, SOIL_TYPE22, SOIL_TYPE23, SOIL_TYPE24, SOIL_TYPE25, SOIL_TYPE26, SOIL_TYPE27, SOIL_TYPE28, SOIL_TYPE29, SOIL_TYPE30, SOIL_TYPE31, SOIL_TYPE32, SOIL_TYPE33, SOIL_TYPE34, SOIL_TYPE36, SOIL_TYPE37, SOIL_TYPE38, SOIL_TYPE39, SOIL_TYPE40, COVER_TYPE |
|                                | FROM PUBLIC.COVERTYPE_TRAINING                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Target Column                  | COVER_TYPE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
|                                |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| PARAMETERS:                    |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Model Type                     | linear_learner                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Problem Type                   | MulticlassClassification                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Objective                      | Accuracy                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| AutoML Job Name                | redshiftml-20220712202432187659                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Function Name                  | predict_cover_type                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Function Parameters            | elevation aspect slope horizontal_distance_to_hydrology vertical_distance_to_hydrology horizontal_distance_to_roadways hillshade_9am hillshade_noon hillshade_3pm horizontal_distance_to_fire_points wilderness_area1 wilderness_area2 wilderness_area3 wilderness_area4 soil_type1 soil_type2 soil_type3 soil_type4 soil_type5 soil_type6 soil_type7 soil_type8 soil_type9 soil_type10 soil_type11 soil_type12 soil_type13 soil_type14 soil_type15 soil_type16 soil_type17 soil_type18 soil_type19 soil_type20 soil_type21 soil_type22 soil_type23 soil_type24 soil_type25 soil_type26 soil_type27 soil_type28 soil_type29 soil_type30 soil_type31 soil_type32 soil_type33 soil_type34 soil_type36 soil_type37 soil_type38 soil_type39 soil_type40                                                                            |
| Function Parameter Types       | int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8 int8                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| IAM Role                       | default-aws-iam-role                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| S3 Bucket                      | amzn-s3-demo-bucket                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| Max Runtime                    |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          15000 |
+--------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
```

## Paso 3: Validar el modelo
<a name="tutorial_linear_learner_multi-class_classification_step_validate"></a>

1. La siguiente consulta de predicción valida la precisión del modelo en el conjunto de datos `covertype_validation` calculando la precisión multiclase. La precisión multiclase es el porcentaje de las predicciones del modelo que son correctas.

   ```
   SELECT
       CAST(sum(t1.match) AS decimal(7, 2)) AS predicted_matches,
       CAST(sum(t1.nonmatch) AS decimal(7, 2)) AS predicted_non_matches,
       CAST(sum(t1.match + t1.nonmatch) AS decimal(7, 2)) AS total_predictions,
       predicted_matches / total_predictions AS pct_accuracy
   FROM
       (
           SELECT
               Elevation,
               Aspect,
               Slope,
               Horizontal_distance_to_hydrology,
               Vertical_distance_to_hydrology,
               Horizontal_distance_to_roadways,
               HIllshade_9am,
               Hillshade_noon,
               Hillshade_3pm,
               Horizontal_Distance_To_Fire_Points,
               Wilderness_Area1,
               Wilderness_Area2,
               Wilderness_Area3,
               Wilderness_Area4,
               soil_type1,
               Soil_Type2,
               Soil_Type3,
               Soil_Type4,
               Soil_Type5,
               Soil_Type6,
               Soil_Type7,
               Soil_Type8,
               Soil_Type9,
               Soil_Type10,
               Soil_Type11,
               Soil_Type12,
               Soil_Type13,
               Soil_Type14,
               Soil_Type15,
               Soil_Type16,
               Soil_Type17,
               Soil_Type18,
               Soil_Type19,
               Soil_Type20,
               Soil_Type21,
               Soil_Type22,
               Soil_Type23,
               Soil_Type24,
               Soil_Type25,
               Soil_Type26,
               Soil_Type27,
               Soil_Type28,
               Soil_Type29,
               Soil_Type30,
               Soil_Type31,
               Soil_Type32,
               Soil_Type33,
               Soil_Type34,
               Soil_Type36,
               Soil_Type37,
               Soil_Type38,
               Soil_Type39,
               Soil_Type40,
               Cover_type AS actual_cover_type,
               predict_cover_type(
                   Elevation,
                   Aspect,
                   Slope,
                   Horizontal_distance_to_hydrology,
                   Vertical_distance_to_hydrology,
                   Horizontal_distance_to_roadways,
                   HIllshade_9am,
                   Hillshade_noon,
                   Hillshade_3pm,
                   Horizontal_Distance_To_Fire_Points,
                   Wilderness_Area1,
                   Wilderness_Area2,
                   Wilderness_Area3,
                   Wilderness_Area4,
                   soil_type1,
                   Soil_Type2,
                   Soil_Type3,
                   Soil_Type4,
                   Soil_Type5,
                   Soil_Type6,
                   Soil_Type7,
                   Soil_Type8,
                   Soil_Type9,
                   Soil_Type10,
                   Soil_Type11,
                   Soil_Type12,
                   Soil_Type13,
                   Soil_Type14,
                   Soil_Type15,
                   Soil_Type16,
                   Soil_Type17,
                   Soil_Type18,
                   Soil_Type19,
                   Soil_Type20,
                   Soil_Type21,
                   Soil_Type22,
                   Soil_Type23,
                   Soil_Type24,
                   Soil_Type25,
                   Soil_Type26,
                   Soil_Type27,
                   Soil_Type28,
                   Soil_Type29,
                   Soil_Type30,
                   Soil_Type31,
                   Soil_Type32,
                   Soil_Type33,
                   Soil_Type34,
                   Soil_Type36,
                   Soil_Type37,
                   Soil_Type38,
                   Soil_Type39,
                   Soil_Type40
               ) AS predicted_cover_type,
               CASE
                   WHEN actual_cover_type = predicted_cover_type THEN 1
                   ELSE 0
               END AS match,
               CASE
                   WHEN actual_cover_type <> predicted_cover_type THEN 1
                   ELSE 0
               END AS nonmatch
           FROM
               public.covertype_validation
       ) t1;
   ```

   La salida de la consulta anterior tendrá un aspecto semejante al de este ejemplo. El valor de la métrica de precisión multiclase debe ser similar al valor de la métrica `validation:multiclass_accuracy` que se muestra en la salida de la operación SHOW MODEL.

   ```
   +-------------------+-----------------------+-------------------+--------------+
   | predicted_matches | predicted_non_matches | total_predictions | pct_accuracy |
   +-------------------+-----------------------+-------------------+--------------+
   |             41211 |                 16324 |             57535 |   0.71627704 |
   +-------------------+-----------------------+-------------------+--------------+
   ```

1. La siguiente consulta predice el tipo de cubierta más común para `wilderness_area2`. Este conjunto de datos incluye cuatro áreas naturales y siete tipos de cubiertas. Un área natural puede tener varios tipos de cubiertas.

   ```
   SELECT t1. predicted_cover_type, COUNT(*) 
   FROM 
   (     
   SELECT 
      Elevation, 
      Aspect,  
      Slope,  
      Horizontal_distance_to_hydrology,  
      Vertical_distance_to_hydrology,   
      Horizontal_distance_to_roadways,  
      HIllshade_9am,  
      Hillshade_noon,  
      Hillshade_3pm , 
      Horizontal_Distance_To_Fire_Points,  
      Wilderness_Area1,  
      Wilderness_Area2,   
      Wilderness_Area3,  
      Wilderness_Area4,  
      soil_type1,
      Soil_Type2,
      Soil_Type3, 
      Soil_Type4, 
      Soil_Type5,  
      Soil_Type6, 
      Soil_Type7,  
      Soil_Type8, 
      Soil_Type9, 
      Soil_Type10 , 
      Soil_Type11,  
      Soil_Type12 , 
      Soil_Type13 ,
      Soil_Type14, 
      Soil_Type15, 
      Soil_Type16,  
      Soil_Type17, 
      Soil_Type18,  
      Soil_Type19,  
      Soil_Type20,  
      Soil_Type21,  
      Soil_Type22,  
      Soil_Type23,  
      Soil_Type24, 
      Soil_Type25,  
      Soil_Type26, 
      Soil_Type27,  
      Soil_Type28,  
      Soil_Type29,  
      Soil_Type30,  
      Soil_Type31, 
      Soil_Type32, 
      Soil_Type33,  
      Soil_Type34, 
      Soil_Type36, 
      Soil_Type37,  
      Soil_Type38,  
      Soil_Type39, 
      Soil_Type40,
      predict_cover_type( Elevation, 
      Aspect,  
      Slope,  
      Horizontal_distance_to_hydrology,  
      Vertical_distance_to_hydrology,   
      Horizontal_distance_to_roadways,  
      HIllshade_9am,  
      Hillshade_noon,  
      Hillshade_3pm , 
      Horizontal_Distance_To_Fire_Points,  
      Wilderness_Area1,  
      Wilderness_Area2,   
      Wilderness_Area3,  
      Wilderness_Area4,  
      soil_type1,
      Soil_Type2,
      Soil_Type3, 
      Soil_Type4, 
      Soil_Type5,  
      Soil_Type6, 
      Soil_Type7,  
      Soil_Type8, 
      Soil_Type9, 
      Soil_Type10,
      Soil_Type11,  
      Soil_Type12, 
      Soil_Type13,
      Soil_Type14, 
      Soil_Type15, 
      Soil_Type16,  
      Soil_Type17, 
      Soil_Type18,  
      Soil_Type19,  
      Soil_Type20,  
      Soil_Type21,  
      Soil_Type22,  
      Soil_Type23,  
      Soil_Type24, 
      Soil_Type25,  
      Soil_Type26, 
      Soil_Type27,  
      Soil_Type28,  
      Soil_Type29,  
      Soil_Type30,  
      Soil_Type31, 
      Soil_Type32, 
      Soil_Type33,  
      Soil_Type34, 
      Soil_Type36, 
      Soil_Type37,  
      Soil_Type38,  
      Soil_Type39, 
      Soil_Type40) AS predicted_cover_type 
   
   FROM public.covertype_test
   WHERE wilderness_area2 = 1)
   t1
   GROUP BY 1;
   ```

   La salida de la operación anterior tendrá un aspecto semejante al del siguiente ejemplo. Esta salida significa que el modelo predijo que la mayor parte de la cubierta es de tipo 1, y que hay alguna cubierta de los tipos 2 y 7.

   ```
   +----------------------+-------+
   | predicted_cover_type | count |
   +----------------------+-------+
   |                    2 |   564 |
   |                    7 |    97 |
   |                    1 |  2309 |
   +----------------------+-------+
   ```

1. La siguiente consulta muestra el tipo de cubierta más común en una sola área natural. La consulta muestra la cantidad de ese tipo de cubierta y el área natural del tipo de cubierta.

   ```
   SELECT t1. predicted_cover_type, COUNT(*), wilderness_area 
   FROM 
   (     
   SELECT 
      Elevation, 
      Aspect,  
      Slope,  
      Horizontal_distance_to_hydrology,  
      Vertical_distance_to_hydrology,   
      Horizontal_distance_to_roadways,  
      HIllshade_9am,  
      Hillshade_noon,  
      Hillshade_3pm , 
      Horizontal_Distance_To_Fire_Points,  
      Wilderness_Area1,  
      Wilderness_Area2,   
      Wilderness_Area3,  
      Wilderness_Area4,  
      soil_type1,
      Soil_Type2,
      Soil_Type3, 
      Soil_Type4, 
      Soil_Type5,  
      Soil_Type6, 
      Soil_Type7,  
      Soil_Type8, 
      Soil_Type9, 
      Soil_Type10 , 
      Soil_Type11,  
      Soil_Type12 , 
      Soil_Type13 ,
      Soil_Type14, 
      Soil_Type15, 
      Soil_Type16,  
      Soil_Type17, 
      Soil_Type18,  
      Soil_Type19,  
      Soil_Type20,  
      Soil_Type21,  
      Soil_Type22,  
      Soil_Type23,  
      Soil_Type24, 
      Soil_Type25,  
      Soil_Type26, 
      Soil_Type27,  
      Soil_Type28,  
      Soil_Type29,  
      Soil_Type30,  
      Soil_Type31, 
      Soil_Type32, 
      Soil_Type33,  
      Soil_Type34, 
      Soil_Type36, 
      Soil_Type37,  
      Soil_Type38,  
      Soil_Type39, 
      Soil_Type40,
      predict_cover_type( Elevation, 
      Aspect,  
      Slope,  
      Horizontal_distance_to_hydrology,  
      Vertical_distance_to_hydrology,   
      Horizontal_distance_to_roadways,  
      HIllshade_9am,  
      Hillshade_noon,  
      Hillshade_3pm , 
      Horizontal_Distance_To_Fire_Points,  
      Wilderness_Area1,  
      Wilderness_Area2,   
      Wilderness_Area3,  
      Wilderness_Area4,  
      soil_type1,
      Soil_Type2,
      Soil_Type3, 
      Soil_Type4, 
      Soil_Type5,  
      Soil_Type6, 
      Soil_Type7,  
      Soil_Type8, 
      Soil_Type9, 
      Soil_Type10,
      Soil_Type11,  
      Soil_Type12, 
      Soil_Type13,
      Soil_Type14, 
      Soil_Type15, 
      Soil_Type16,  
      Soil_Type17, 
      Soil_Type18,  
      Soil_Type19,  
      Soil_Type20,  
      Soil_Type21,  
      Soil_Type22,  
      Soil_Type23,  
      Soil_Type24, 
      Soil_Type25,  
      Soil_Type26, 
      Soil_Type27,  
      Soil_Type28,  
      Soil_Type29,  
      Soil_Type30,  
      Soil_Type31, 
      Soil_Type32, 
      Soil_Type33,  
      Soil_Type34, 
      Soil_Type36, 
      Soil_Type37,  
      Soil_Type38,  
      Soil_Type39, 
      Soil_Type40) AS predicted_cover_type,
      CASE WHEN Wilderness_Area1 = 1 THEN 1
           WHEN Wilderness_Area2 = 1 THEN 2
           WHEN Wilderness_Area3 = 1 THEN 3
           WHEN Wilderness_Area4 = 1 THEN 4
           ELSE 0
      END AS wilderness_area
   
   FROM public.covertype_test)
   t1
   GROUP BY 1, 3
   ORDER BY 2 DESC
   LIMIT 1;
   ```

   La salida de la operación anterior tendrá un aspecto semejante al del siguiente ejemplo.

   ```
   +----------------------+-------+-----------------+
   | predicted_cover_type | count | wilderness_area |
   +----------------------+-------+-----------------+
   |                    2 | 15738 |               1 |
   +----------------------+-------+-----------------+
   ```

## Temas relacionados
<a name="tutorial_linear_learner_multi-class_classification_related_topics"></a>

Para obtener más información sobre Amazon Redshift ML, consulte la siguiente documentación:
+ [Costes de utilizar Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)
+ [Operación CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html)
+ [Función EXPLAIN\$1MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_explain_model_function.html)

Para obtener más información sobre machine learning, consulte la siguiente documentación:
+ [Información general sobre machine learning](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning_overview.html)
+ [Machine learning para principiantes y expertos](https://docs.aws.amazon.com/redshift/latest/dg/novice_expert.html)
+ [Qué es la equidad y la explicabilidad del modelo en las predicciones de machine learning?](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-fairness-and-explainability.html)

# Integración de Amazon Redshift ML con Amazon Bedrock
<a name="machine-learning-br"></a>

En esta sección se describe cómo utilizar la integración de Amazon Redshift ML con Amazon Bedrock. Con esta característica, puede invocar un modelo de Amazon Bedrock mediante SQL y puede utilizar los datos de un almacenamiento de datos de Amazon Redshift para crear aplicaciones de IA generativa, como la generación de texto, el análisis de opiniones o la traducción.

**Topics**
+ [Creación o actualización de un rol de IAM para la integración de Amazon Redshift ML con Amazon Bedrock](#machine-learning-br-iam)
+ [Creación de un modelo externo para la integración de Amazon Redshift ML con Amazon Bedrock](#machine-learning-br-create)
+ [Uso de un modelo externo para la integración de Amazon Redshift ML con Amazon Bedrock](#machine-learning-br-use)
+ [Ingeniería de peticiones para la integración de Amazon Redshift ML con Amazon Bedrock](#machine-learning-br-prompt)

## Creación o actualización de un rol de IAM para la integración de Amazon Redshift ML con Amazon Bedrock
<a name="machine-learning-br-iam"></a>

En esta sección se describe cómo crear un rol de IAM para usar con la integración de Amazon Redshift ML con Amazon Bedrock.

Agregue la siguiente política al rol de IAM que utilice con la integración de Amazon Redshift ML con Amazon Bedrock: 
+ `AmazonBedrockFullAccess`

Para permitir que Amazon Redshift asuma un rol para interactuar con otros servicios, agregue la siguiente política de confianza al rol de IAM:

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": {
            "Service": [
               "redshift.amazonaws.com"
            ]
         },
         "Action": "sts:AssumeRole"
      }
   ]
}
```

------

Si el clúster o el espacio de nombres está en una VPC, siga las instrucciones que se indican en [Agrupe y ajuste la configuración para la administración de Amazon Redshift ML](getting-started-machine-learning.md#admin-setup). 

Si necesita una política más restrictiva, puede crear una que incluya solo los permisos de Amazon Bedrock especificados en las siguientes páginas:
+ [Agrupe y ajuste la configuración para la administración de Amazon Redshift ML](getting-started-machine-learning.md#admin-setup)
+ [ Permisos necesarios para usar machine learning (ML) de Amazon Redshift)](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html#iam-permission-ml?)

Para obtener información sobre la creación de un rol de IAM, consulte [Creación de un rol de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) en la *Guía del usuario de AWS Identity and Access Management*.

## Creación de un modelo externo para la integración de Amazon Redshift ML con Amazon Bedrock
<a name="machine-learning-br-create"></a>

En esta sección se muestra cómo crear un modelo externo para usarlo como interfaz para Amazon Bedrock dentro del almacenamiento de datos de Amazon Redshift.

Para invocar un modelo de Amazon Bedrock desde Amazon Redshift, primero debe ejecutar el comando `CREATE EXTERNAL MODEL`. Este comando crea un objeto modelo externo en la base de datos y una función de usuario asociada que se utiliza para generar contenido de texto con Amazon Bedrock.

El siguiente ejemplo de código muestra un comando `CREATE EXTERNAL MODEL` básico:

```
CREATE EXTERNAL MODEL llm_claude
FUNCTION llm_claude_func
IAM_ROLE '<IAM role arn>'
MODEL_TYPE BEDROCK
SETTINGS (
   MODEL_ID 'anthropic.claude-v2:1',
   PROMPT 'Summarize the following text:');
```

El comando `CREATE EXTERNAL MODEL` tiene una interfaz unificada y coherente con Amazon Bedrock para todos los modelos fundacionales (FM) que admiten mensajes. Esta es la opción predeterminada cuando se usa el comando `CREATE EXTERNAL MODEL` o cuando se especifica explícitamente el tipo de solicitud que será `UNIFIED`. Para obtener más información, consulte la [Documentación de la API de conversión](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) en la *Documentación de la API de Amazon Bedrock*.

Si un FM no admite mensajes, debe establecer la configuración de `request_type` en `RAW`, como se muestra en el ejemplo siguiente. Si establece `request_type` en `RAW`, debe crear la solicitud enviada a Amazon Bedrock cuando utilice la función de inferencia en función del FM seleccionado. Asegúrese de habilitar el acceso al modelo Titan Text G1 - Express en Amazon Bedrock antes de ejecutar el siguiente ejemplo. 

```
CREATE EXTERNAL MODEL titan_raw
FUNCTION func_titan_raw
IAM_ROLE '<IAM role arn>'
MODEL_TYPE BEDROCK
SETTINGS (
   MODEL_ID 'amazon.titan-text-express-v1',
   REQUEST_TYPE RAW,
   RESPONSE_TYPE SUPER);
```

Si necesita más información sobre una solicitud de entrada, como el total de tókenes, puede solicitar `RESPONSE_TYPE` que sea `super` al crear el modelo. 

```
CREATE EXTERNAL MODEL patient_recommendations_v2
FUNCTION patient_recommendations_func_v2
IAM_ROLE '<IAM role arn>'
MODEL_TYPE BEDROCK
SETTINGS (
   MODEL_ID 'anthropic.claude-v2',
   PROMPT 'Generate personalized diet plan for following patient:',
   RESPONSE_TYPE SUPER);
```

El parámetro `PROMPT` del comando `CREATE EXTERNAL MODEL` es una petición estática. Si necesita una petición dinámica para la aplicación, debe especificarla cuando utilice la función de inferencia. Para obtener más información, consulte [Ingeniería de peticiones para la integración de Amazon Redshift ML con Amazon Bedrock](#machine-learning-br-prompt).

Para obtener más información sobre la instrucción `CREATE EXTERNAL MODEL` y sus parámetros y configuración, consulte [CREATE EXTERNAL MODEL](r_create_external_model.md).

## Uso de un modelo externo para la integración de Amazon Redshift ML con Amazon Bedrock
<a name="machine-learning-br-use"></a>

En esta sección se muestra cómo invocar un modelo externo para generar texto en respuesta a las peticiones proporcionadas. Para invocar un modelo externo, utilice la función de inferencia con la que ha creado `CREATE EXTERNAL MODEL`.

**Topics**
+ [Inferencia con modelos de tipo solicitud `UNIFIED`](#machine-learning-br-use-unified)
+ [Inferencia con modelos de tipo solicitud `RAW`](#machine-learning-br-use-raw)
+ [Funciones de inferencia como funciones específicas del principal](#machine-learning-br-use-leader)
+ [Notas sobre el uso de la función de inferencia](#machine-learning-br-use-usage)

### Inferencia con modelos de tipo solicitud `UNIFIED`
<a name="machine-learning-br-use-unified"></a>

La función de inferencia para los modelos con tipo de solicitud `UNIFIED` tiene los tres parámetros siguientes que se transfieren a la función en orden:
+ **Texto de entrada** (obligatorio): este parámetro especifica el texto de entrada que Amazon Redshift transfiere a Amazon Bedrock.
+ **Configuración de inferencia** y **campos de solicitud de modelo adicionales** (opcionales): Amazon Redshift transfiere estos parámetros a los parámetros correspondientes de la API del modelo de conversión. 

En el siguiente ejemplo de código se muestra cómo utilizar una función de inferencia de tipo `UNIFIED`:

```
SELECT llm_claude_func(input_text, object('temperature', 0.7, 'maxtokens', 500))
   FROM some_data;
```

### Inferencia con modelos de tipo solicitud `RAW`
<a name="machine-learning-br-use-raw"></a>

La función de inferencia para los modelos con tipo de solicitud `RAW` solo tiene un parámetro de tipo de datos `SUPER`. La sintaxis de este parámetro depende del modelo de Amazon Bedrock utilizado.

En el siguiente ejemplo de código se muestra cómo utilizar una función de inferencia de tipo `RAW`:

```
SELECT llm_titan_func(
    object(
        "inputText", "Summarize the following text: " | input_text,
        "textGenerationConfig", object("temperature", 0.5, "maxTokenCount", 500)
    )
)
FROM some_data;
```

### Funciones de inferencia como funciones específicas del principal
<a name="machine-learning-br-use-leader"></a>

Las funciones de inferencia de los modelos de Amazon Bedrock se pueden ejecutar como funciones exclusivas del nodo principal cuando la consulta que las utiliza no hace referencia a ninguna tabla. Esto puede resultar útil si quiere hacer una pregunta rápidamente a un LLM.

En el siguiente ejemplo de código se muestra cómo utilizar una función de inferencia específica del principal:

```
SELECT general_titan_llm_func('Summarize the benefits of LLM on data analytics in 100 words');
```

### Notas sobre el uso de la función de inferencia
<a name="machine-learning-br-use-usage"></a>

Tenga en cuenta lo siguiente cuando utilice funciones de inferencia con la integración de Amazon Redshift ML con Amazon Bedrock:
+ Los nombres de los parámetros de todos los modelos de Amazon Bedrock distinguen entre mayúsculas y minúsculas. Si los parámetros no coinciden con los requeridos por el modelo, es posible que Amazon Bedrock los ignore discretamente.
+ El rendimiento de las consultas de inferencia está limitado por las cuotas de tiempo de ejecución de los distintos modelos que ofrece Amazon Bedrock en las distintas regiones. Para obtener más información, consulte [¿Qué es Amazon Bedrock?](https://docs.aws.amazon.com/bedrock/latest/userguide/quotas.html) en la *Guía del usuario de Amazon Bedrock*.
+ Si necesita un rendimiento coherente y garantizado, considere la posibilidad de obtener un rendimiento aprovisionado para el modelo que necesita de Amazon Bedrock. Para obtener más información, consulte [Aumentar la capacidad de invocación de modelos con el rendimiento aprovisionado en Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html) en la *Guía del usuario de Amazon Bedrock*.
+ Las consultas de inferencia con grandes cantidades de datos pueden tener excepciones de limitación. Esto se debe a las cuotas de tiempo de ejecución limitadas de Amazon Bedrock. Amazon Redshift vuelve a intentar las solicitudes varias veces, pero las consultas pueden seguir limitándose porque el rendimiento de los modelos no aprovisionados puede ser variable.
+ Si encuentra excepciones que imponen limitaciones provenientes de Amazon Bedrock, por ejemplo, `Too many requests, please wait before trying again.`, incluso con pequeñas cantidades de datos, compruebe las cuotas en **Service Quotas** en su cuenta de Amazon Bedrock. Compruebe que la cuota de cuenta aplicada sea como mínimo igual al valor de la cuota predeterminada de AWS para las solicitudes de **InvokeModel** para el modelo que está utilizando.

## Ingeniería de peticiones para la integración de Amazon Redshift ML con Amazon Bedrock
<a name="machine-learning-br-prompt"></a>

En esta sección se muestra cómo utilizar las peticiones estáticas con un modelo externo.

Para utilizar peticiones de prefijo y sufijo estáticas para el modelo externo, indíquelas mediante los parámetros `PROMPT` y `SUFFIX` de la instrucción `CREATE EXTERNAL MODEL`. Estas peticiones se agregan a todas las consultas que utilizan el modelo externo.

En el siguiente ejemplo se muestra cómo agregar peticiones de prefijo y sufijo a un modelo externo:

```
CREATE EXTERNAL MODEL llm_claude
FUNCTION llm_claude_func
IAM_ROLE '<IAM role arn>'
MODEL_TYPE BEDROCK
SETTINGS (
   MODEL_ID 'anthropic.claude-v2:1',
   PROMPT 'Summarize the following text:',
   SUFFIX 'Respond in an analytic tone');
```

Para utilizar peticiones dinámicas, puede proporcionarlas al utilizar la función de inferencia concatenándolas en la entrada de la función. En el siguiente ejemplo se muestra cómo utilizar peticiones dinámicas con una función de inferencia:

```
SELECT llm_claude_func('Summarize the following review:' | input_text | 'The review should have formal tone.')
FROM some_data
```