iabd06/Trabajo_evaluable_SBD_Hugging_Face_Clasificador_de_la_calidad_del_agua
Clasificador de Calidad del Agua
Descripción del Proyecto
El objetivo de este proyecto es evaluar la calidad del agua a partir de parámetros clave como la temperatura, el pH, la turbidez y los contaminantes. Se busca clasificar el agua en diferentes categorías de calidad, que van desde "Excelente" hasta "Peligrosa", para proporcionar una evaluación rápida y precisa de su estado.
Funcionamiento del Sistema
El modelo (`iabd06/Clasificador_de_la_calidad_del_agua`) se entrena con un conjunto de datos (`iabd06/agua_dataset`) que incluye información sobre varios parámetros del agua, como:
- Temperatura: medida en grados Celsius.
- pH: el nivel de acidez o alcalinidad del agua.
- Turbidez: la medida de la claridad del agua.
- Contaminantes: un valor que clasifica el agua según su nivel de contaminación.
El modelo de machine learning predice la calidad del agua, asignándola a una de las siguientes categorías:
- Excelente
- Muy buena
- Buena
- Regular
- Pobre
- Contaminada
- Peligrosa
El sistema utiliza un clasificador basado en Support Vector Machines (SVM), un algoritmo popular para problemas de clasificación. El modelo se entrena para identificar patrones en los datos, y es capaz de predecir la calidad del agua en función de los valores proporcionados.
Resultados y Explicación
A continuación se presentan ejemplos visuales de los resultados obtenidos por el modelo en función de los valores de entrada:
Resultado Excelente
Descripción: El agua es clasificada como "Excelente" cuando tiene baja turbidez (menos de 2 NTU), un pH cercano a 7 y temperaturas bajas (menos de 20°C). Esto indica que el agua es clara, bien equilibrada y fresca, apta para consumo y uso.
Resultado Regular
Descripción: En el caso de valores moderados de turbidez, pH y temperatura, el agua puede ser clasificada como "Regular". Esto podría indicar que es potable pero presenta algunas características que no son ideales para el consumo frecuente.
Resultado Contaminada
Descripción: Cuando la turbidez es alta (más de 12 NTU) y el pH está fuera de los valores saludables (menos de 5 o más de 9), el agua puede ser clasificada como "Contaminada". Esto indica que el agua presenta niveles significativos de contaminantes que pueden afectar la salud, aunque no sea inmediatamente peligrosa para el consumo.
Proceso de Despliegue
El proceso de despliegue de este sistema consiste en varios pasos esenciales que se explican a continuación, en función del código del archivo Python:
- Importación de Librerías:
Primero, se importan las librerías necesarias. gradio se utiliza para crear la interfaz gráfica de usuario (GUI) que permitirá a los usuarios interactuar con el modelo de manera sencilla. joblib se usa para cargar los archivos previamente guardados del modelo, el escalador y el codificador.
import gradio as gr
import joblib
from huggingface_hub import hf_hub_download- Cargar el Modelo, el Escalador y el Codificador:
Aquí se cargan tres archivos guardados previamente:
- El archivo
clasificador_de_agua_modelo_svm.pklcontiene el modelo de machine learning entrenado. scaler.pkles el archivo que contiene el objeto de escalado que se utilizó para normalizar las características durante el entrenamiento del modelo.ordinal_encoder.pkles el archivo con el codificador utilizado para convertir las variables categóricas (como el nivel de contaminantes) en valores numéricos que el modelo puede interpretar.
model_path = hf_hub_download(repo_id="iabd06/Clasificador_de_la_calidad_del_agua", filename="clasificador_de_agua_modelo_svm.pkl")
scaler_path = hf_hub_download(repo_id="iabd06/Clasificador_de_la_calidad_del_agua", filename="scaler.pkl")
encoder_path = hf_hub_download(repo_id="iabd06/Clasificador_de_la_calidad_del_agua", filename="ordinal_encoder.pkl")
model = joblib.load(model_path)
scaler = joblib.load(scaler_path)
encoder = joblib.load(encoder_path)- Definir la Función de Predicción:
Esta función toma los valores ingresados por el usuario (pH, turbidez, temperatura y nivel de contaminantes) y los procesa de la siguiente manera:
- El nivel de contaminantes se codifica en un formato numérico utilizando el codificador cargado previamente.
- Se crean los datos de entrada, que son escalados usando el escalador.
- El modelo hace la predicción sobre los datos escalados.
- Finalmente, la predicción se imprime en la consola para su verificación y se devuelve el resultado como una cadena.
def predecir(pH, turbidez, temperatura, contaminantes):
contaminantes_codificado = encoder.transform([[contaminantes]])[0][0]
input_data = [[temperatura, pH, turbidez, contaminantes_codificado]]
input_scaled = scaler.transform(input_data)
resultado = model.predict(input_scaled)
print(f"Resultado crudo del modelo: {resultado[0]}")
return str(resultado[0])- Crear la Interfaz Gráfica de Usuario (GUI):
Aquí se define la interfaz gráfica utilizando gr.Interface:
fn=predecir: La función que se ejecutará cuando el usuario ingrese los datos.inputs: Se especifican los tipos de entrada que el usuario debe proporcionar (números para pH, turbidez y temperatura, y un desplegable para el nivel de contaminantes).outputs: Se define que la salida será un cuadro de texto que mostrará el resultado de la predicción.titleydescription: Se añaden el título y la descripción de la interfaz para guiar al usuario.
iface = gr.Interface(
fn=predecir,
inputs=[
gr.Number(label="pH", value=7.0, minimum=3.0, maximum=10.0),
gr.Number(label="Turbidez (NTU)", value=5.0, minimum=0.0, maximum=15.0),
gr.Number(label="Temperatura (°C)", value=25.0, minimum=0.0, maximum=40.0),
gr.Dropdown(label="Nivel de Contaminantes", choices=["Malo", "Regular", "Bueno", "Muy Bueno"], value="Bueno")
],
outputs=gr.Textbox(label="Resultado"),
title="🧪 Clasificador de Calidad del Agua",
description="Introduce los valores del agua para estimar su calidad. Los rangos válidos son pH (3–10), Turbidez (0–15) y Temperatura (0–40 °C)."
)- Lanzar la Interfaz de Usuario:
Finalmente, se lanza la interfaz, lo que hace que la aplicación esté disponible en un navegador web para que los usuarios puedan interactuar con ella.
iface.launch()Reflexión Final
El modelo tiene un F1 Score de 74.2%, lo que significa que, en general, suele acertar en la mayoría de las predicciones, lo cual es un buen indicio de que su desempeño es bastante sólido. A pesar de esto, sé que aún hay margen de mejora, especialmente cuando se trata de diferenciar algunas clases que son más similares entre sí. Esto podría mejorar ajustando algunos parámetros del modelo o entrenando con un conjunto de datos más amplio y diverso, lo que ayudaría a afinar las predicciones y hacerlo más preciso.
Licencia
Este proyecto está licenciado bajo la licencia CC BY-NC 4.0.
