Skip to main content

User Guide

Experimental: Modelo de detección de anomalías de TrendMiner

TrendMiner ofrece un modelo personalizado para la detección de anomalías multivariante a través de su cuaderno de notas y la funcionalidad de etiquetas de modelos de aprendizaje automático.

El modelo de detección de anomalías de TrendMiner se entrena en una vista de TrendHub que contiene las condiciones normales de funcionamiento de su proceso. Tras aprender las condiciones deseadas del proceso, el modelo podrá detectar anomalías en los nuevos datos entrantes.

El propio modelo puede entrenarse dentro de la funcionalidad de cuaderno incrustada después de cargarlo en una vista de TrendHub como DataFrame. Puede encontrar más información sobre la funcionalidad Notebook aquí.Machine Learning Hub y Notebooks

Nota

El paquete anomaly_detection es experimental. Las funciones de este paquete pueden modificarse o eliminarse en futuras versiones.

El modelo de detección de anomalías se proporciona a través del paquete experimental y puede cargarse como se indica a continuación:

from trendminer_experimental.anomaly_detection.model import TMAnomalyModel

# Instantiate the model
model = TMAnomalyModel()

El modelo de anomalías se basa en mapas autoorganizativos (SOM). Conceptualmente, el modelo ajusta una cuadrícula flexible de unidades, sobre el conjunto de datos de entrenamiento. En la fase de entrenamiento, el algoritmo intenta minimizar la distancia entre los puntos de datos de entrenamiento n-dimensionales y las unidades más cercanas, a la vez que intenta mantener la cuadrícula lo más suave posible para evitar el sobreajuste en los datos de entrenamiento.

Para entrenar el modelo, primero empezamos cargando una vista de TrendHub que represente las condiciones normales de funcionamiento. Después de cargar la vista se puede entrenar el modelo. El usuario puede especificar el número de iteraciones utilizadas para el paso de entrenamiento.

# Loading TrendHub view: Normal Operation Conditions
from trendminer.views import Views
views = Views(client)
df_train = views.load_view('c3fa5b78-3df9-4fe4-b6d0-e0da4f19c24e')
# Training the model
q_error, topo_error =  model.fit(df_train, 500)# Training for 500 iterations
ADM_1.png
ADM_2.png

El método de ajuste devuelve una lista de errores de cuantización y topológicos. El error de cuantización mide lo lejos que están los puntos de datos de entrenamiento de las unidades de la cuadrícula, mientras que el error topológico mide la suavidad de la cuadrícula y es una indicación de sobreajuste.

  • Una puntuación más baja indica un mejor ajuste.

  • Los errores deberían mostrar una tendencia decreciente en cada iteración.

# Plot errors (requires matplotlib import)

plt.plot(q_error);

plt.plot(topo_error);

El TMAnomalyModel tiene dos variables de salida: Clase_de_anomalía y Puntuación_de_anomalía. La primera (Clase) identifica un punto como anómalo o no, basándose en la distancia del punto a la unidad más cercana en el modelo y el porcentaje de umbral que usted proporcionó al convertir el modelo a su representación PMML. La segunda, Puntuación, es la distancia entre un punto y la unidad más cercana en el modelo.

# Loading TrendHub view: Test data or New incoming data

from trendminer.views import Views
views = Views(client)

df_test = views.load_view('c3fa5b78-3df9-4fe4-b6d0-e0da4f19c24e')
# Run model (anomaly_class)

anomaly_class = model.predict(df_test, 0.99)
# Run model (anomaly_score)

anomaly_score =  model.score_samples(df_test)
ADM_3.png

Una vez entrenado el modelo en el comportamiento normal, podemos desplegar el modelo en el motor de puntuación de TrendMiner. Esto requiere que convirtamos el modelo a su forma PMML. El TMAnomalyModel tiene un método de utilidad para convertir el modelo a PMML (to_pmml). Esta función toma dos argumentos. El primer argumento es el nombre del modelo. El segundo argumento es el porcentaje de umbral.

Una vez desplegado, el modelo puede seleccionarse dentro de la funcionalidad Tag del modelo de aprendizaje automático.

model_name = 'Demo_Anomaly_Detection'
zementis = ZementisModels(client)
# Convert model to PMML
model_pmml = model.to_pmml(model_name, 0.99)
# Deploy the model

model_id = zementis.deploy_model(model_pmml)

model_details = zementis.model_details(model_id)
ADM_4.png
ADM_5.png

Encontrará más información en la documentación experimental de python.

Las limitaciones de las etiquetas de los modelos de aprendizaje automático se aplican a este modelo.