

# Ajuste de transformaciones de machine learning en AWS Glue
<a name="add-job-machine-learning-transform-tuning"></a>

Puede ajustar las transformaciones de machine learning en AWS Glue para mejorar los resultados de sus trabajos de limpieza de datos para cumplir sus objetivos. Para mejorar su transformación, puede enseñarle mediante la generación de un conjunto de etiquetas, la adición de etiquetas y, a continuación, la repetición de estos pasos varias veces hasta que disponga de los resultados deseados. También puede realizar el ajuste al modificar algunos parámetros de machine learning. 

Para obtener más información sobre las transformaciones de machine learning, consulte [Coincidencia de registros con FindMatches de AWS Lake Formation](machine-learning.md).

**Topics**
+ [Mediciones de machine learning](machine-learning-terminology.md)
+ [Decidir entre precisión y exhaustividad](machine-learning-precision-recall-tradeoff.md)
+ [Decisión entre exactitud y costo](machine-learning-accuracy-cost-tradeoff.md)
+ [Estimación de la calidad de coincidencias mediante las puntuaciones de confianza de las coincidencias](match-scoring.md)
+ [Enseñanza de la transformación de búsqueda de coincidencias](machine-learning-teaching.md)

# Mediciones de machine learning
<a name="machine-learning-terminology"></a>

Para comprender las mediciones que se utilizan para ajustar la transformación de machine learning, debe estar familiarizado con la siguiente terminología:

**Verdadero positivo (VP)**  
Una coincidencia en los datos que ha encontrado la transformación correctamente. Se denomina a veces "*acierto*".

**Verdadero negativo (VN)**  
Una no coincidencia en los datos que la transformación ha rechazado correctamente.

**Falso positivo (FP)**  
Una no coincidencia en los datos que la transformación clasificó erróneamente como una coincidencia, que, en ocasiones, se denomina *falsa alarma*.

**Falso negativo (FN)**  
Una coincidencia en los datos que la transformación no encontró. Se denomina a veces "*fallo*".

Para obtener más información sobre la terminología que se utiliza en el machine learning, consulte [Confusion matrix (Matriz de confusión)](https://en.wikipedia.org/wiki/Confusion_matrix) en Wikipedia.

Para ajustar sus transformaciones de machine learning, puede cambiar el valor de las siguientes mediciones en la sección de **propiedades avanzadas** de la transformación.
+ **Precisión** mide qué tan bien la transformación encuentra verdaderos positivos entre el número total de registros que identifica como positivos (verdaderos positivos y falsos positivos). Para obtener más información, consulte [Precisión y exhaustividad](https://en.wikipedia.org/wiki/Precision_and_recall) en Wikipedia.
+ La **exhaustividad** mide la facilidad con la que de la transformación encuentra verdaderos positivos en los registros totales en los datos de origen. Para obtener más información, consulte [Precisión y exhaustividad](https://en.wikipedia.org/wiki/Precision_and_recall) en Wikipedia.
+ La**exactitud ** mide la facilidad con la que la transformación encuentra verdaderos positivos y verdaderos negativos. El aumento de la exactitud requiere más recursos informáticos y costos. Sin embargo, también genera una mayor exhaustividad. Para obtener más información, consulte [Precisión y exactitud](https://en.wikipedia.org/wiki/Accuracy_and_precision#In_information_systems) en Wikipedia.
+ El **costo** mide la cantidad de recursos informáticos y, por lo tanto, dinero, necesario para ejecutar la transformación.

# Decidir entre precisión y exhaustividad
<a name="machine-learning-precision-recall-tradeoff"></a>

Cada transformación`FindMatches` contiene un parámetro `precision-recall`. Utilice este parámetro para especificar una de las siguientes opciones:
+ Si está más preocupado por la transformación que indica falsamente que dos registros coinciden cuando realmente no lo hace, debe hacer hincapié en *precisión*. 
+ Si está más preocupado por la transformación que no detecta correctamente los registros que coinciden, debe hacer hincapié en *exhaustividad*.

Puede realizar esta compensación en la consola de AWS Glue o mediante las operaciones de la API de machine learning de AWS Glue.

**Cuándo favorecer la precisión**  
Favorezca la precisión si está más preocupado por el resigo que genera `FindMatches` en un par de registros que coinciden cuando realmente no coinciden. Para favorecer la precisión, elija un valor de compensación de precisión-exhaustividad *superior*. Con un valor más alto, la transformación `FindMatches` requiere más evidencias para decidir que un par de registros debe coincidir. La transformación se ajusta para sesgarse hacia una situación en la que los registros no coinciden.

Por ejemplo, supongamos que va a utilizar `FindMatches` para detectar elementos duplicados en un catálogo de vídeo y proporciona un valor de precisión-exhaustividad más alto para la transformación. Si su transformación detecta incorrectamente que *Star Wars: Una nueva esperanza* es igual que *Star Wars: El imperio contraataca*, es posible que el cliente que quiere *Una nueva esperanza* vea *El imperio contraataca*. Esto sería una experiencia del cliente deficiente. 

Sin embargo, si la transformación no es capaz de detectar que *Star Wars: Una nueva esperanza* y *Star Wars: Episodio IV - Una nueva esperanza* son el mismo elemento, el cliente podría confundirse al principio pero podría reconocerlos como el mismo. Sería un error, pero no tan grave como la situación anterior.

**Cuándo favorecer la exhaustividad**  
Favorezca la exhaustividad si está más preocupado por el riesgo de que se puedan producir errores en los resultados de la transformación `FindMatches` al detectar un par de registros que en realidad no coinciden. Para favorecer la exhaustividad, elija un valor de compensación de precisión-exhaustividad *inferior*. Con un valor más bajo, la transformación `FindMatches` requiere menos evidencias para decidir que un par de registros debe coincidir. La transformación se ajusta para sesgarse hacia una situación en la que los registros coinciden.

Por ejemplo, esto podría ser una prioridad para una organización de seguridad. Supongamos que quiere disponer de coincidencias de clientes en relación con una lista de defraudadores conocidos y es importante determinar si un cliente es un defraudador. Está utilizando `FindMatches` para que la lista de defraudadores coincida con la lista de clientes. Cada vez que `FindMatches` detecta una coincidencia entre las dos listas, se asigna un auditor humano para comprobar que la persona es, de hecho, un defraudador. Es posible que su organización prefiera para elegir la exhaustividad en lugar de la precisión. Es decir, puede emplear auditores para que revisen y rechacen manualmente algunos casos cuando el cliente no sea un defraudador en lugar de no poder identificar que un cliente está, de hecho, en la lista de defraudadores.

**Cómo favorecer tanto la precisión como la exhaustividad**  
La mejor forma de mejorar tanto la precisión como la exhaustividad es etiquetar más datos. A medida que etiqueta más datos, mejora la exactitud global de la transformación `FindMatches` y, por lo tanto, tanto la precisión como la exhaustividad son superiores. Sin embargo, incluso con la transformación más precisa, siempre hay un área en gris que necesita experimentar para el favorecimiento de la precisión o la exhaustividad, o elegir un valor intermedio. 

# Decisión entre exactitud y costo
<a name="machine-learning-accuracy-cost-tradeoff"></a>

Cada transformación `FindMatches` contiene un parámetro `accuracy-cost`. Puede utilizar este parámetro para especificar una de las siguientes opciones:
+ Si está más preocupado en que la transformación informe de forma exacta de que los dos registros coinciden, debe hacer hincapié en *exactitud*.
+ Si está más preocupado por el costo o la velocidad de ejecución de la transformación, debe hacer hincapié en *costo menor*.

Puede realizar esta compensación en la consola de AWS Glue o mediante las operaciones de la API de machine learning de AWS Glue.

**Cuando favorecer la exactitud**  
Favorezca la exactitud si está más preocupado por el riesgo de que los resultados de `find matches` no contengan coincidencias. Para favorecer la exactitud, elija un valor de compensación de exactitud-costo *superior*. Con un volumen más alto, la transformación `FindMatches` requiere más tiempo para realizar una búsqueda más exhaustiva para que los registros coincidan correctamente. Tenga en cuenta que con este parámetro no es menos probable que se trate incorrectamente un par de registro no coincidente como coincidencia. La transformación se ajusta para sesgarse hacia una situación de dedicación de más tiempo a buscar coincidencias.

**Cuándo favorecer el costo**  
Favorezca el costo si está más preocupado por el costo de ejecución de la transformación `find matches` y menos por la cantidad de coincidencias encontradas. Para favorecer el costo, elija un valor de compensación de exactitud-costo *inferior*. Con un valor inferior, la transformación `FindMatches` requiere menos recursos que ejecutar. La transformación se ajusta para sesgarse hacia una situación de búsqueda de menos coincidencias. Si los resultados son aceptables cuando se favorece el costo inferior, utilice esta configuración.

**Cómo favorecer tanto la exactitud como el costo bajo**  
Es necesario más tiempo de procesamiento para examinar más pares de registros y determinar si deben ser coincidencias. Si desea reducir el costo sin reducir la calidad, estas son algunas medidas que puede adoptar: 
+ Eliminación de registros en el origen de datos para el que lo le preocupa la coincidencia.
+ Eliminación de columnas de origen de datos de las que esté seguro de que no son útiles para crear una decisión de coincidencia/no coincidencia. Una buena forma de decidir esto es eliminar columnas que cree que no afectan a su propia decisión sobre si un conjunto de registros es "el mismo".

# Estimación de la calidad de coincidencias mediante las puntuaciones de confianza de las coincidencias
<a name="match-scoring"></a>

Las puntuaciones de confianza de coincidencias proporcionan una estimación de la calidad de las coincidencias encontradas por FindMatches para distinguir entre registros coincidentes en los que el modelo de machine learning es muy confiable, incierto o improbable. Una puntuación de confianza de coincidencia estará entre 0 y 1, donde una puntuación más alta significa mayor similitud. El análisis de las puntuaciones de confianza de coincidencias le permite distinguir entre grupos de coincidencias en los que el sistema tiene mucha confianza (que puede decidir fusionar), clústeres sobre los que el sistema no está seguro (que puede decidir hacer revisar por un humano) y clústeres que el sistema considera improbables (que puede decidir rechazar).

Es posible que quiera ajustar sus datos de formación en situaciones en las que vea una puntuación de confianza alta, pero determine que no hay coincidencias, o en las que vea una puntuación baja pero determine que sí hay, de hecho, coincidencias.

Las puntuaciones de confianza son especialmente útiles cuando hay conjuntos de datos industriales de gran tamaño, en los que no es factible revisar todas las decisiones de FindMatches.

Las puntuaciones de confianza de coincidencias están disponibles en AWS Glue, versión 2.0 o posterior.

## Generación de puntuaciones de confianza de coincidencias
<a name="specifying-match-scoring"></a>

Puede generar puntuaciones de confianza de coincidencias al establecer el valor booleano de `computeMatchConfidenceScores` a verdadero cuando llama a la API `FindMatches` o `FindIncrementalMatches`.

AWS Glue agrega una nueva `column match_confidence_score` al resultado.

## Ejemplos de puntuación de coincidencias
<a name="match-scoring-examples"></a>

Por ejemplo, considere los siguientes registros coincidentes:

**Puntuación >=0,9**  
Resumen de registros coincidentes:

```
  primary_id  |   match_id  | match_confidence_score

3281355037663    85899345947   0.9823658302132061
1546188247619    85899345947   0.9823658302132061
```

Detalles:

![\[Ejemplo de una tabla de ruteo con una gateway de Internet.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/match_score1.png)


En este ejemplo, podemos ver que dos registros son muy similares y comparten `display_position`, `primary_name` y `street name`. 

**Puntuación >=0,8 y puntuación <0,9**  
Resumen de registros coincidentes:

```
  primary_id  |   match_id  | match_confidence_score

309237680432     85899345928   0.8309852373674638
3590592666790    85899345928   0.8309852373674638
343597390617     85899345928   0.8309852373674638
249108124906     85899345928   0.8309852373674638
463856477937     85899345928   0.8309852373674638
```

Detalles:

![\[Ejemplo de una tabla de ruteo con una gateway de Internet.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/match_score2.png)


En este ejemplo, podemos ver que estos registros comparten el mismo `primary_name` y `country`.

**Puntuación >=0,6 y puntuación <0,7**  
Resumen de registros coincidentes:

```
  primary_id  |   match_id  | match_confidence_score

2164663519676    85899345930   0.6971099896480333
 317827595278    85899345930   0.6971099896480333
 472446424341    85899345930   0.6971099896480333
3118146262932    85899345930   0.6971099896480333
 214748380804    85899345930   0.6971099896480333
```

Detalles:

![\[Ejemplo de una tabla de ruteo con una gateway de Internet.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/match_score3.png)


En este ejemplo, podemos ver que estos registros comparten solo el mismo `primary_name`.

Para obtener más información, consulte:
+ [Paso 5: Agregar y ejecutar un trabajo con su transformación de machine learning.](machine-learning-transform-tutorial.md#ml-transform-tutorial-add-job)
+ PySpark: [Clase FindMatches](aws-glue-api-crawler-pyspark-transforms-findmatches.md)
+ PySpark: [Clase FindIncrementalMatches](aws-glue-api-crawler-pyspark-transforms-findincrementalmatches.md)
+ Scala: [Clase FindMatches](glue-etl-scala-apis-glue-ml-findmatches.md)
+ Scala: [Clase FindIncrementalMatches](glue-etl-scala-apis-glue-ml-findincrementalmatches.md)

# Enseñanza de la transformación de búsqueda de coincidencias
<a name="machine-learning-teaching"></a>

A las transformaciones `FindMatches` se les debe enseñar qué debe considerarse una coincidencia y qué no. Puede enseñar a su transformación mediante la adición de etiquetas en un archivo y la carga de sus opciones a AWS Glue. 

Puede organizar esta etiqueta en la consola de AWS Glue o mediante las operaciones de la API de machine learning de AWS Glue.

**¿Cuántas veces debo añadir etiquetas? ¿Cuántas etiquetas necesito?**  
Las respuestas a estas preguntas dependen principalmente de usted. Debe evaluar si `FindMatches` ofrece el nivel de exactitud que necesita y si cree que el esfuerzo de etiquetado adicional merece la pena. La mejor manera de decidir esto es analizar las métricas "Precisión", "Exhaustividad" y "Área bajo la curva de precisión-exhaustividad" que puede generar cuando elije **Estimate quality** (Estimar calidad) en la consola de AWS Glue. Después de etiquetar más conjuntos de tareas, vuelva a ejecutar esas métricas y compruebe si han mejorado. Si después del etiquetado de algunos conjuntos de tareas, no observa una mejora en la métrica en la que se está centrando, es posible que la calidad de la transformación se haya estabilizado.

**¿Por qué las etiquetas de verdadero positivo y verdadero negativo son necesarias?**  
La transformación `FindMatches` precisa ejemplos positivos y negativos para aprender lo que cree que es una coincidencia. Si está etiquetando datos de entrenamiento generados por `FindMatches` (por ejemplo, mediante la opción **I do not have labels** [No tengo etiquetas]), `FindMatches` intenta generar un conjunto de "ID de conjuntos de etiquetas" para usted. Dentro de cada tarea, proporcione la misma "etiqueta" a algunos registros y diferentes "etiquetas" a otros. Es decir, por lo general, las tareas no son todas iguales o todas diferentes (pero es correcto si una tarea determinada es totalmente igual o es totalmente diferente).

Si está enseñando a su transformación `FindMatches` a usar la opción **Upload labels from S3** (Cargar etiquetas desde S3), intente incluir ambos ejemplos de registros de coincidencia y no coincidencia. Es aceptable disponer de solo un tipo. Estas etiquetas le ayudan a crear una transformación `FindMatches` más exacta, pero sigue necesitando etiquetas algunos registros que genera mediante la opción **Generate labeling file** (Generar archivo de etiquetado).

**¿Cómo puedo hacer que la transformación coincida exactamente de la forma que le he enseñado?**  
La transformación `FindMatches` aprende a partir de las etiquetas que proporciona, por lo que puede generar pares de registros que no respeten las etiquetas proporcionadas. Para hacer que la transformación `FindMatches` respete las etiquetas, seleccione **EnforceProvidedLabels** en **FindMatchesParameter**.

**¿Qué técnicas puede usar cuando una transformación ML identifica elementos como coincidencias que no son coincidencias reales?**  
Puede utilizar las siguientes técnicas:
+ Aumente `precisionRecallTradeoff` a un valor superior. Esto provoca finalmente que se encuentren menos coincidencias, pero también debe fragmentar su clúster de gran tamaño cuando alcance un valor lo suficientemente alto. 
+ Elija las filas de salida correspondientes a los resultados incorrectos y vuelva a darles formato como conjunto de etiquetas (quitando la columna `match_id` y añadiendo una columna `labeling_set_id` y `label`). Si es necesario, fragmente (subdivida) en varios conjuntos de etiquetas para garantizar que la etiquetadora pueda mantener cada conjunto de etiquetas en cuenta mientras asigna etiquetas. A continuación, etiquete correctamente los conjuntos de coincidencia y cargue el archivo de etiquetas y anéxelo a sus etiquetas existentes. Esto podría enseñar a su transformador lo que necesita sobre lo que está buscando para entender el patrón. 
+ (Avanzado) Por último, observe los datos para ver si existe un patrón del que el sistema no informa. Preprocese esos datos mediante funciones de AWS Glue estándar para *normalizar* los datos. Resalte lo que desee que el algoritmo aprenda mediante la separación de datos que sepa que tienen una importancia distinta en sus propias columnas. También puede crear columnas combinadas a partir de columnas con datos que sepa que están relacionados. 