Tutorial: Clasificación de la gravedad de las infracciones sanitarias en restaurantes con Model Builder

Aprenda a crear un modelo de clasificación multiclase mediante el generador de modelos para categorizar el nivel de riesgo de las infracciones de restaurantes detectadas durante inspecciones sanitarias.

En este tutorial aprenderá a:

  • Preparar y entender los datos
  • Crear un archivo de configuración de Model Builder
  • Elección de un escenario
  • Cargar datos desde una base de datos
  • Entrenar el modelo
  • Evaluar el modelo
  • Usar el modelo para las predicciones

Nota

De momento, el Generador de modelos se encuentra en versión preliminar.

Prerrequisitos

Para obtener una lista de los requisitos previos e instrucciones de instalación, visite la Guía de instalación del Generador de modelos.

Información general de clasificación multiclase del Generador de modelos

En este ejemplo se crea una aplicación de consola .NET Core de C# que categoriza el riesgo de las infracciones sanitarias mediante un modelo de aprendizaje automático creado con el Generador de modelos. Puede encontrar el código fuente para este tutorial en el repositorio dotnet/machinelearning-samples de GitHub.

Creación de una aplicación de consola

  1. Cree una aplicación de consola .NET Core de C# denominada "RestaurantViolations".

Preparar y entender los datos

El conjunto de datos que se usa para entrenar y evaluar el modelo de aprendizaje automático proviene originalmente de San Francisco Department of Public Health Restaurant Safety Scores (Puntuaciones de seguridad de restaurantes del Departamento de Sanidad Pública de San Francisco). Para mayor comodidad, el conjunto de datos se ha condensado para incluir solo las columnas relevantes a fin de entrenar el modelo y realizar las predicciones. Visite el sitio web siguiente para obtener más información sobre el conjunto de datos.

Descargue el conjunto de datos Restaurant Safety Scores y descomprímalo.

Cada fila del conjunto de datos contiene información relacionada con las infracciones observadas durante una inspección del Departamento de Sanidad y una evaluación del riesgo de la amenaza de esas infracciones para la salud pública y la seguridad.

InspectionType ViolationDescription RiskCategory
Rutina: no programada Superficies de contacto para alimentos limpiadas o desinfectadas incorrectamente Riesgo moderado
Nuevo propietario Riesgo alto de infestación por parásitos Riesgo alto
Rutina: no programada Paños de limpieza sucios o incorrectamente almacenados o desinfectados Riesgo bajo
  • InspectionType: el tipo de inspección. Esto puede ser una inspección inicial de un nuevo establecimiento, una inspección rutinaria, una inspección de quejas y otros muchos tipos.
  • ViolationDescription: descripción de la infracción detectada durante la inspección.
  • RiskCategory: gravedad del riesgo que supone una infracción para la seguridad y la sanidad pública.

label es la columna que quiere predecir. Al realizar una tarea de clasificación, el objetivo es asignar una categoría (de texto o numérica). En este escenario de clasificación, se asigna a la gravedad de la infracción el valor de riesgo bajo, moderado o alto. Por tanto, RiskCategory es la etiqueta. Los valores de features son las entradas que se proporcionan al modelo para predecir label. En este caso, InspectionType y ViolationDescription se usan como características o entradas para predecir el valor de RiskCategory.

Creación del archivo de configuración de Model Builder

La primera vez que agregue Model Builder a la solución, se le pedirá que cree un archivo mbconfig. El archivo mbconfig realiza el seguimiento de todo lo que hace en Model Builder para permitirle volver a abrir la sesión.

  1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto RestaurantViolations y seleccione Agregar>Modelo de Machine Learning... .
  2. Asigne el nombre mbconfigRestaurantViolationsPredictional proyecto y haga clic en el botón Agregar.

Elección de un escenario

Model Builder wizard in Visual Studio

Para entrenar el modelo, seleccione en la lista de escenarios de aprendizaje automático disponibles proporcionada por el Generador de modelos. En este caso, el escenario es de Clasificación de datos.

  1. Para este ejemplo, la tarea es una clasificación multiclase. En el paso Escenario del Generador de modelos, seleccione el escenario Clasificación de datos.

Carga de los datos

Model Builder acepta datos de una base de datos SQL Server o un archivo local en formato csv, tsv o txt.

  1. En el paso de datos de la herramienta Model Builder, elija SQL Server en la selección de tipo de origen de datos.
  2. Seleccione el botón Elegir origen de datos.
    1. En el cuadro de diálogo Elegir origen de datos, seleccione Archivo de base de datos de Microsoft SQL Server.
    2. Desactive la casilla Usar siempre esta selección y haga clic en Continuar.
    3. En el cuadro de diálogo Propiedades de conexión, seleccione Examinar y después el archivo RestaurantScores.mdf descargado.
    4. Seleccione Aceptar.
  3. Elija Infracciones en el menú desplegable Tabla.
  4. Elija RiskCategory en el menú desplegable Column to predict (Label) (Columna para la predicción [etiqueta]).
  5. Deje las selecciones predeterminadas en Opciones avanzadas de datos.
  6. Haga clic en el botón Paso siguiente para ir al paso de entrenamiento en Model Builder.

Entrenamiento del modelo

La tarea de aprendizaje automático que se usa para entrenar el modelo de clasificación de problemas de este tutorial es la clasificación multiclase. Durante el proceso de entrenamiento del modelo, el Generador de modelos entrena modelos independientes con diferentes opciones y algoritmos de clasificación multiclase para encontrar el modelo con mejor rendimiento para el conjunto de datos.

El tiempo necesario para el entrenamiento del modelo es proporcional a la cantidad de datos. El generador de modelos selecciona automáticamente un valor predeterminado para Tiempo de entrenamiento (segundos) en función del tamaño del origen de datos.

  1. Model Builder establezca el valor de Tiempo de entrenamiento (segundos) en 60 segundos. El entrenamiento durante un período de tiempo más prolongado permite que el Generador de modelos explore un mayor número de algoritmos y combinación de parámetros en la búsqueda del mejor modelo.
  2. Haga clic en Iniciar entrenamiento.

Durante el proceso de entrenamiento, los datos de progreso se muestran en la sección Training results del paso de entrenamiento.

  • En Estado se muestra el grado de finalización del proceso de entrenamiento.
  • La mejor precisión muestra la precisión del modelo de mejor rendimiento encontrado por el Generador de modelos hasta ahora. Una mayor precisión significa que el modelo realiza una predicción más correcta de los datos de prueba.
  • El mejor algoritmo muestra el nombre del algoritmo de mejor rendimiento que ha encontrado el Generador de modelos hasta ahora.
  • El último algoritmo muestra el nombre del algoritmo usado más recientemente por el Generador de modelos para entrenar el modelo.

Una vez completado el entrenamiento, el archivo mbconfig tendrá el modelo generado denominado RestaurantViolationsPrediction.zip después del entrenamiento y dos archivos de C# con él:

  • RestaurantViolationsPrediction.consumption.cs: Este archivo tiene un método público que cargará el modelo y creará un motor de predicción con él y devolverá la predicción.
  • RestaurantViolationsPrediction.training.cs: Este archivo consta de la canalización de entrenamiento que Model Builder generó para crear el mejor modelo, incluidos los hiperparámetros que usó.

Haga clic en el botón Paso siguiente para ir al paso de evaluación.

Evaluación del modelo

El resultado del paso de entrenamiento será un modelo que tenga el mejor rendimiento. En el paso de evaluación de la herramienta Model Builder, la sección Mejor modelo contendrá el algoritmo usado por el modelo con el mejor rendimiento en la entrada Modelo, junto con las métricas para ese modelo en Accuracy.

Además, en la ventana Salida de Visual Studio, habrá una tabla de resumen que contiene los modelos principales y sus métricas.

Esta sección también le permitirá probar el modelo mediante una única predicción. Ofrecerá cuadros de texto para rellenar los valores, y puede hacer clic en el botón Predecir para obtener una predicción del mejor modelo. De manera predeterminada, se rellenará con una fila aleatoria del conjunto de datos.

(Opcional) Consumo del modelo

Este paso tendrá plantillas de proyecto que puede usar para consumir el modelo. Es opcional y puede elegir el método que mejor se adapte a sus necesidades sobre cómo atender el modelo.

  • Aplicación de consola
  • API Web

Aplicación de consola

Al agregar una aplicación de consola a la solución, se le pedirá que asigne un nombre al proyecto.

  1. Asigne al proyecto de consola el nombre RestaurantViolationsPrediction_Console.

  2. Haga clic en Agregar a la solución para agregar el proyecto a la solución actual.

  3. Ejecute la aplicación.

    La salida generada por el programa debe ser similar al siguiente fragmento de código:

    InspectionType: Routine - Unscheduled
    ViolationDescription: Moderate risk food holding temperature
    
    Predicted RiskCategory: Moderate Risk
    

API Web

Al agregar una API web a la solución, se le pedirá que asigne un nombre al proyecto.

  1. Asigne al proyecto de API web el nombre RestaurantViolationsPrediction_API.

  2. Haga clic en Agregar a la solución* para agregar el proyecto a la solución actual.

  3. Ejecute la aplicación.

  4. Abra PowerShell y escriba el código siguiente, donde PORT es el puerto donde escuchar la aplicación.

    $body = @{
        InspectionType="Reinspection/Followup"
        ViolationDescription="Inadequately cleaned or sanitized food contact surfaces"
    }
    
    Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
    
  5. Si se realiza correctamente, la salida debería ser similar al texto siguiente. La salida tiene la RiskCategory predicha como Moderate Risk y tiene las puntuaciones de cada una de las etiquetas de entrada: Low Risk, High Risk y Moderate Risk.

    prediction    score
    ----------    -----
    Moderate Risk {0.055566575, 0.058012854, 0.88642055}
    

¡Enhorabuena! Ha creado correctamente un modelo de aprendizaje automático para categorizar el riesgo de infracciones sanitarias mediante el Generador de modelos. Puede encontrar el código fuente para este tutorial en el repositorio dotnet/machinelearning-samples de GitHub.

Recursos adicionales

Para más información sobre los temas mencionados en este tutorial, visite estos recursos: