¡Participa de la Maratón Behind the Code, la competencia de programación más desafiante! Inscríbete aqui

Automatizando Machine Learning como un campeón con Watson AutoAI

Descripción

Aprende cómo automatizar la creación de modelos predictivos de Machine Learning utilizando Watson AutoAI, ¡sin escribir ni una línea de código!

Objetivos de aprendizaje

En este tutorial aprenderemos a crear, entrenar, y desplegar un modelo de Machine Learning utilizando Watson AutoAI dentro de Watson Studio. A partir de un conjunto de datos en formato .csv:

  • Crearemos y entrenaremos un modelo predictivo de Machine Learning
  • Almacenaremos dicho modelo en Watson Studio
  • Desplegaremos el modelo para consultarlo como web service
  • Realizaremos pruebas para predecir nuevas ocurrencias de datos

Conseguiremos todo esto sin necesidad de poseer conocimientos profundos de Inteligencia Artificial o Programación.

Requisitos previos

Para completar este tutorial, habrás de tener:

Aclaración: para realizar este tutorial no es necesario contar con instancias pagas de estos servicios, con un plan Free/Lite es suficiente.

Tiempo estimado

Completar este tutorial debería llevar aproximadamente 25 minutos (incluyendo el tiempo de entrenamiento en AutoAI), encontrándose dividido en las siguientes secciones:

  1. Preparación de Proyecto y Conjunto de Datos
  2. Entrenamiento y guardado del modelo
  3. Despliegue del modelo
  4. Pruebas del modelo

Contexto

Imaginemos que se nos ha pedido desarrollar una solución que permita ayudar a los oncólogos de un cierto hospital a diagnosticar a pacientes con tumores de mama. Para ello se nos ha brindado un conjunto de datos, al cual pueden acceder desde la Galería o desde el repositorio de IBM Developer, conteniendo mediciones extraídas de 569 imágenes de diagnóstico de tumores de mama del Repositorio de aprendizaje automático de la UCI de dicho hospital, así como la media y desviación estándar de algunas de estas mediciones. Se incluye además una columna dedicada a indicar, de forma binaria, si el tumor en cuestión es benigno o maligno.

Nuestro objetivo será entonces construir, entrenar y hacer disponible en la nube un modelo de Machine Learning que, al consultarlo, nos brinde la probabilidad de que este nuevo tumor que se ha medido es benigno o maligno, ayudando de esta forma a los doctores a tomar decisiones más informadas y acertadas.

Tutorial

Paso 1 – Preparación de Proyecto y Conjunto de Datos

Para poder utilizar Watson AutoAI desde nuestra instancia de Watson Studio, lo primero que deberemos hacer es crear un proyecto, ya que será dentro del mismo donde realizaremos nuestro trabajo. Podemos usar este tutorial en IBM Developer como guía para ello.

Habiéndolo creado, deberemos asociarle una instancia de Machine Learning. Nuestro primer paso será ir a la pestaña de “Settings” y en la sección de “Associated Services” iremos a “Add service” y seleccionaremos la opción “Watson.”

Screenshot de página mostrando cómo agregar un servicio

Desde aquí podemos seleccionar una instancia o, de no tener ninguna, crearla. Una vez seleccionada, haremos seleccionaremos la opción de “Associate service”. Cerraremos esa ventana, ¡y listo!

Screenshot de página mostrando la selección del servicio

El que vamos a utilizar se encuentra en la galería de IBM Cloud Pak for Data. Podemos agregarlo a nuestro proyecto con el botón “Add to Project” o descargarlo a nuestra PC.

Screenshot que muestra como agregar elementos al proyecto

Elegiremos la primera opción, seleccionaremos nuestro proyecto desde el menú desplegable que aparecerá. y haremos click en “Add”.

En caso de no encontrarse disponible el enlace, pueden encontrarlo en el repositorio de IBM Developer.

¡Uf! ¡Casi estamos! Ahora, lo único que resta es crear una instancia de Watson AutoAI, procedimiento tan sencillo como hacer click en el botón azul de “Add to Project +” y seleccionaremos la opción “AutoAI Experiment”.

Screenshot que muestra la selección de assets

Se desplegará un menú en el cual escribiremos un nombre y una descripción (opcional) para nuestro experimento, así como la instancia del servicio de Machine Learning correspondiente. Una vez hecho esto, haremos click en “Create”.

Screenshot que muestra la pantalla de creación

Se nos solicitará un conjunto de datos para analizar. De encontrarse cargado en nuestro proyecto, podremos seleccionarlo desde ahí. Es también posible cargarlo desde nuestra PC mediante la opción “Browse”.

Habiendo realizado la carga/selección del archivo, se nos consultará por la columna que queremos predecir. En nuestro caso, seleccionaremos la columna “diagnosis”. Watson automáticamente detecta que el tipo de predicción es binaria, y que el valor positivo para este escenario es “B”.

Screenshot de página de control del proyecto

De haber deseado predecir otro tipo de valor no binario, como por ejemplo la columna “area_mean”, que posee valores numéricos continuos, el tipo de predicción sería distinto. En ese escenario estaríamos ante una predicción de tipo regresión, y Watson habría hecho los ajustes necesarios para entrenar el modelo acordemente.

El siguiente paso sería poner a entrenar nuestro modelo, pero antes de eso, vamos a seleccionar la opción “Experiment settings”, donde podemos configurar parámetros extra para nuestro experimento, como son la relación de datos entrenamiento/prueba, eliminar duplicados, entre otros. Nos dirigiremos a la sección “Select columns to include” y excluiremos la columna “id”.

Screenshot de página de configuración del experimento

¿Por qué hicimos esto? Pues porque el identificador es meramente eso: un número que se asigna automáticamente para distinguir ese registro en cuestión. No tiene relevancia alguna en si el tumor es benigno o maligno, ni en ninguna de sus demás propiedades. De dejarlo allí, estaríamos introduciendo datos irrelevantes en el entrenamiento del modelo, perjudicando así su eficiencia.

Habiendo hecho esto seleccionaremos “Save settings” y, ahora sí, entrenaremos nuestro modelo mediante la opción “Run experiment”.

Paso 2 – Entrenamiento y guardado del modelo

Hemos dado por comenzado el proceso de entrenamiento. Ahora sólo resta esperar a que finalice. Mientras tanto, es importante comprender qué es lo que está sucediendo tras bambalinas y por qué Watson AutoAI es tan poderoso. Si desean una explicación más detallada pueden leer este artículo de IBM Developer, pero esencialmente se reduce a esto

  1. Lectura del conjunto de datos
  2. División de los datos de entrenamiento/pruebas
  3. Lectura de datos de entrenamiento
  4. Preprocesamiento
    AutoAI convierte, normaliza y clasifica nuestros datos para asegurar que el entrenamiento esa menos sesgado, más rápido y eficiente.
  5. Selección de modelo
    A partir de nuestro conjunto de datos y la predicción deseada, AutoAI selecciona de una amplia lista de algoritmos los dos que mejor se ajustan a éstos.
  6. Ingeniería de funcionalidades
    Mediante la aplicación de diversas funciones al conjunto de datos, se transforman las features para una mejor interpretación y entrenamiento del modelo.
  7. Optimización de híper-parámetros
    Se aplican funciones de costo para asegurar un mejor rendimiento para cada pipeline.

Una vez finalizadas todas estas etapas, deberíamos ver algo así:

Screenshot de página que muestra el mapa de progreso

El resultado de nuestro entrenamiento es un conjunto de 8 pipelines, es decir, de 8 modelos diferentes, entrenados a partir del mismo conjunto de datos. Los mismos pueden verse en una tabla, la cual se encuentra ordenada en función de qué tan bueno es el desempeño de cada uno.

Screenshot que muestra la página de pipeline

Para este caso, el mejor modelo es el tercer pipeline, al cual se le aplicó un algoritmo de tipo Clasificador LGMB, ingeniería de funcionalidades y una optimización de híper-parámetros, obteniendo así una Accuracy de 0.973, es decir que el modelo es capaz de predecir ocurrencias de forma correcta en un 97.3% de los casos.

Es posible obtener más información de un modelo haciendo click en él.

Ahora que tenemos nuestro modelo, es momento de guardarlo. Para este tutorial guardaremos el primero de todos, puesto que tuvo el mejor desempeño. Para ello pasaremos el ratón por encima y haremos click en el botón “Save as”.

Screenshot que muestra la página de pipeline 2

Se nos preguntará cómo deseamos guardarlo. Seleccionaremos la opción de “Model”, elegiremos un nombre, y haremos click en “Create”.

Screenshot de página de creación del modelo

Paso 3 – Despliegue del modelo

Ahora que lo hemos almacenado en nuestro proyecto, es hora de desplegarlo. El primer paso será ir a la pestaña “Assets” de nuestro proyecto, hacer click en los tres puntitos luego en “Promote”.

Screenshot que muestra la página de publicación del proyecto

Desde aquí deberemos seleccionar en qué espacio de despliegue queremos almacenar nuestro modelo. De existir un previamente, lo seleccionaremos en “Target space”. De no ser así, podemos crearlo desde “New space +”. Habiendo hecho esto, lo siguiente será clickear “Promote”.

Screenshot que muestra la página de promoción del proyecto

Para dirigirnos al espacio deberemos ir al menú hamburguesa y seleccionarlo desde la sección “Deployments”. De no encontrarse allí, podremos acceder a un listado de nuestros espacios mediante la opción “View all spaces” y acceder a él desde allí:

Screenshot que muestra la selección de la sección Deployments

Si el espacio de despliegue es nuevo, antes de desplegar el modelo deberemos asociar la instancia de Machine Learning que estaremos utilizando. En esta instancia utilizaremos la misma que para el proyecto de Watson Studio.

Para ello iremos a “Manage” y en la sección de “Machine Learning service” seleccionaremos “Associate Instance +”.

Screenshot que muestra el panel de control de despliegue

Seleccionaremos nuestra instancia en el menú desplegable, ¡y listo! Nos encontramos listos para desplegar nuestro modelo.

Ahora deberemos dirigirnos a la pestaña de “Assets”, localizar nuestro modelo y si pasamos el ratón por encima veremos aparecer la opción de “Deploy”.

Screenshot de página de lanzamiento del proyecto

Seleccionaremos la opción “Online”, que nos permitirá consultar nuestro modelo como web service, le daremos un nombre y cuando esté todo listo haremos click en “Create.”

Screenshot que muestra la confirmación de lanzamiento

¡Listo! ¡Hemos desplegado nuestro modelo de machine learning! Podemos verlo en la pestaña de “Deployments”.

Paso 4 – Pruebas del modelo

Ha llegado la hora de verdad: la etapa de pruebas. Seleccionaremos nuestro despliegue desde la pestaña de “Deployments” y veremos dos pestañas: API reference y test. La primera nos permitirá integrar el modelo a nuestra solución. La segunda, probar el modelo directamente. Seleccionaremos esta opción y luego, proveeremos los datos de prueba en formato JSON:

Screenshot que muestra la página de prueba del proyecto

Para este tutorial se han seleccionado dos casos de prueba: uno para un tumor benigno, y otro para uno maligno. Vayamos con el primer caso, el benigno. Introduciremos el siguiente JSON en la pantalla de pruebas:


{
    "input_data": [
        {
            "fields": [
                "id",
                "radius_mean",
                "texture_mean",
                "perimeter_mean",
                "area_mean",
                "smoothness_mean",
                "compactness_mean",
                "concavity_mean",
                "concave points_mean",
                "symmetry_mean",
                "fractal_dimension_mean",
                "radius_se",
                "texture_se",
                "perimeter_se",
                "area_se",
                "smoothness_se",
                "compactness_se",
                "concavity_se",
                "concave points_se",
                "symmetry_se",
                "fractal_dimension_se",
                "radius_worst",
                "texture_worst",
                "perimeter_worst",
                "area_worst",
                "smoothness_worst",
                "compactness_worst",
                "concavity_worst",
                "concave points_worst",
                "symmetry_worst",
                "fractal_dimension_worst"
            ],
            "values": [
                [
                    8510426,
                    13.54,
                    14.36,
                    87.46,
                    566.3,
                    0.09779,
                    0.08129,
                    0.06664,
                    0.04781,
                    0.1885,
                    0.05766,
                    0.2699,
                    0.7886,
                    2.058,
                    23.56,
                    0.008462,
                    0.0146,
                    0.02387,
                    0.01315,
                    0.0198,
                    0.0023,
                    15.11,
                    19.26,
                    99.7,
                    711.2,
                    0.144,
                    0.1773,
                    0.239,
                    0.1288,
                    0.2977,
                    0.07259
                ]
            ]
        }
    ]
}

Seleccionaremos la opción de “Predict.” El servicio debería arrojar el siguiente resultado:


{
    "predictions": [
        {
            "fields": [
                "prediction",
                "probability"
            ],
            "values": [
                [
                    "B",
                    [
                        0.9996405376796983,
                        0.00035946232030171094
                    ]
                ]
            ]
        }
    ]
}

¿Qué significa esta respuesta? Pues que existe una probabilidad de 0.99 de que el tumor sea benigno
¡Perfecto! ¡Funciona!

Ahora, probemos el segundo caso, para el tumor maligno. Introduciremos el siguiente JSON:


{
    "input_data": [
        {
            "fields": [
                "id",
                "radius_mean",
                "texture_mean",
                "perimeter_mean",
                "area_mean",
                "smoothness_mean",
                "compactness_mean",
                "concavity_mean",
                "concave points_mean",
                "symmetry_mean",
                "fractal_dimension_mean",
                "radius_se",
                "texture_se",
                "perimeter_se",
                "area_se",
                "smoothness_se",
                "compactness_se",
                "concavity_se",
                "concave points_se",
                "symmetry_se",
                "fractal_dimension_se",
                "radius_worst",
                "texture_worst",
                "perimeter_worst",
                "area_worst",
                "smoothness_worst",
                "compactness_worst",
                "concavity_worst",
                "concave points_worst",
                "symmetry_worst",
                "fractal_dimension_worst"
            ],
            "values": [
                [
                    842302,
                    17.99,
                    10.38,
                    122.8,
                    1001,
                    0.1184,
                    0.2776,
                    0.3001,
                    0.1471,
                    0.2419,
                    0.07871,
                    1.095,
                    0.9053,
                    8.589,
                    153.4,
                    0.006399,
                    0.04904,
                    0.05373,
                    0.01587,
                    0.03003,
                    0.006193,
                    25.38,
                    17.33,
                    184.6,
                    2019,
                    0.1622,
                    0.6656,
                    0.7119,
                    0.2654,
                    0.4601,
                    0.1189
                ]
            ]
        }
    ]
}

Obteniendo el resultado:


{
    "predictions": [
        {
            "fields": [
                "prediction",
                "probability"
            ],
            "values": [
                [
                    "M",
                    [
                        0.0001294127683069135,
                        0.9998705872316931
                    ]
                ]
            ]
        }
    ]
}

Lo cual significa que existe una probabilidad de 0.99 de que el tumor sea maligno. ¡Increíble!

¡Felicitaciones! ¡Has llegado al final del tutorial!

Resumen

En este tutorial creaste y entrenaste un modelo predictivo de clasificación binaria, el cual fue almacenado en un proyecto dentro de Watson Studio y posteriormente desplegado como web service. Enviaste consultas al servicio para los dos valores posibles, obteniendo la predicción esperada en ambos casos. Todo esto fue realizado sin necesidad de codificar o de poseer conocimientos técnicos específicos del área de Inteligencia Artificial o Cloud Computing