Como científico de datos que trabaja en pronósticos de series temporales, me he topado con más anomalías y valores atípicos de los que puedo contar. En los datos de previsión de la demanda, finanzas, tráfico y ventas, sigo encontrando picos y caídas que son difíciles de interpretar.
El manejo de anomalías suele ser un área gris, rara vez blanca o negra, pero son indicadores de problemas más profundos. Algunas anomalías son señales reales como días festivos, eventos climáticos, promociones o momentos virales; otros son sólo fallos de datos, pero ambos parecen iguales a primera vista. Cuanto más rápido detectemos anomalías en los datos, más rápido se podrán tomar medidas para evitar daños y un rendimiento deficiente.
Estamos tratando con datos críticos de series de tiempo y detectar anomalías es crucial. Si elimina un evento real, se elimina un punto de datos de señal valioso y si mantiene una señal de falsa alarma, los datos de entrenamiento contienen ruido.
La mayoría de los detectores basados en ML señalan picos según puntuaciones Z, umbrales IQR u otros métodos estáticos sin ningún contexto. Con los avances recientes en IA, tenemos una mejor opción para diseñar un agente de manejo de anomalías que razona sobre cada caso. Un agente que detecta comportamientos inusuales, verifica el contexto y decide si corrige los datos, los mantiene como una señal real o los marca para su revisión.
En este artículo, creamos paso a paso un agente que combina la detección estadística simple con un agente de IA que actúa como una primera línea de defensa para datos de series temporales, reduciendo la intervención manual y preservando las señales más importantes. Detectaremos y manejaremos anomalías en los datos de COVID-19 mediante una toma de decisiones autónoma basada en la gravedad de la anomalía, utilizando:
Datos epidemiológicos en vivo de la API de Disease.sh. Detección estadística de anomalías. Clasificación de gravedad. Un agente de IA impulsado por GroqCloud que toma decisiones autónomas sobre: Reparar la anomalía Mantener la anomalía Marcar la anomalía para revisión humana
Se trata de inteligencia de decisión agencial, no simplemente de detección de anomalías.
Imagen del autor.
¿Por qué no es suficiente la detección de anomalías tradicional por sí sola?
Existen métodos tradicionales de aprendizaje automático, como bosques de aislamiento diseñados para la detección de anomalías, pero carecen de una orquestación de decisiones de un extremo a otro. No pueden actuar sobre ellos con la suficiente rapidez en entornos de producción. Estamos implementando un agente de IA para llenar este vacío al convertir puntuaciones de anomalías sin procesar en decisiones autónomas de extremo a extremo de forma dinámica sobre datos en vivo.
Detección de anomalías tradicional
La detección de anomalías tradicional sigue el enfoque de canalización que se muestra a continuación:
Limitaciones de la detección de anomalías tradicional
Funciona con reglas estáticas y establece umbrales manualmente. Es unidimensional y maneja datos simples. Sin razonamiento contextual. Toma de decisiones impulsada por humanos. Acción impulsada manualmente.
Detección y manejo de anomalías con un agente de IA
La detección de anomalías del agente AI sigue el enfoque de canalización que se muestra a continuación:
¿Por qué esto funciona mejor en la práctica?
Funciona con datos en tiempo real. Es multidimensional y puede manejar datos complejos. Trabaja el razonamiento contextual. Toma de decisiones adaptativa y de autoaprendizaje. Tomar medidas autónomas.
Elegir un conjunto de datos realista para nuestro ejemplo
Estamos utilizando datos de COVID-19 del mundo real para detectar anomalías, ya que son ruidosos, muestran picos y los resultados ayudan a mejorar la salud pública.
¿Qué queremos que decida el Agente de IA?
El objetivo es monitorear continuamente los datos de COVID-19, encontrar anomalías, definir su gravedad, tomar decisiones autónomas y decidir las acciones a tomar:
Marcar anomalía para revisión humana Reparar la anomalía Mantener la anomalía
Fuente de datos
Para los datos, utilizamos datos de Disease.sh en vivo y gratuitos a través de API. Esta API proporciona datos sobre casos confirmados, muertes y recuperaciones diarias. Para la implementación del Agente AI, nos centramos en el recuento de casos diario, que es ideal para la detección de anomalías.
Licencia de datos: este tutorial utiliza recuentos históricos de casos de COVID-19 recuperados a través de la API de Disease.sh. El conjunto de datos subyacente (JHU CSSE COVID-19 Data Repository) tiene licencia CC BY 4.0, que permite el uso comercial con atribución. (Consultado el 22 de enero de 2026)
¿Cómo encajan las piezas?
La arquitectura del sistema de alto nivel para la detección de anomalías en datos de COVID-19 mediante un agente de IA es la siguiente:
Imagen del autor
Construyendo el agente de IA paso a paso
Vayamos paso a paso para comprender cómo cargar datos usando enfermedad.sh, detectar anomalías, clasificarlas e implementar un agente de IA que razona y toma las medidas adecuadas según la gravedad de las anomalías.
Paso 1: instale las bibliotecas necesarias
El primer paso es instalar las bibliotecas necesarias como phidata, groq, python-dotenv, tabulate y streamlit.
pip install phidata pip install groq pip install python-dotenv #biblioteca para cargar el archivo .env pip install tabulate pip install streamlit
Paso 2: Configuración del archivo de entorno
Abra su IDE y cree una carpeta de proyecto, y debajo de esa carpeta, cree un archivo ambiental ".env" para almacenar GROQ_API_KEY.
GROQ_API_KEY="tu_groq_api_key_aquí"
Paso 3: ingesta de datos
Antes de construir cualquier agente, necesitamos una fuente de datos que sea lo suficientemente ruidosa como para sacar a la luz anomalías reales, pero lo suficientemente estructurada como para razonar sobre ella. Los recuentos diarios de casos de COVID-19 son una buena opción, ya que contienen retrasos en la presentación de informes, picos repentinos y cambios de régimen. Para simplificar, nos restringimos deliberadamente a una única serie temporal univariada.
Cargue datos de enfermedad.sh utilizando la URL de solicitud y extraiga la fecha y el recuento diario de casos según el país seleccionado y la cantidad de días para los que desea extraer datos. Los datos se convierten en un marco de datos estructurado analizando json, formateando la fecha y ordenándolos cronológicamente.
# ————————————— # INGESTIÓN DE DATOS (disease.sh) # ————————————— def load_live_covid_data(país: str , días:int): url = f"https://disease.sh/v3/covid-19/historical/{country}?lastdays={days}" respuesta = solicitudes.get(url) datos = respuesta.json()["cronología"]["casos"] df = ( pd.DataFrame(list(data.items()), columns=["Fecha", "Casos"]) .assign(Fecha=lambda d: pd.to_datetime(d["Fecha"], format="%m/%d/%y")) .sort_values("Fecha") .reset_index(drop=True) ) return df
Paso 4: Detección de anomalías
Ahora detectaremos comportamientos anormales en los datos de series temporales de COVID-19 detectando picos repentinos y tendencias de crecimiento rápido. Los recuentos de casos son generalmente estables y las grandes desviaciones o los aumentos pronunciados indican anomalías significativas. Ahora detectaremos anomalías utilizando métodos estadísticos y etiquetado binario para una detección de anomalías determinista y reproducible. Se calculan dos parámetros para detectar anomalías.
Detección de picos Se detecta un pico repentino en los datos mediante la puntuación Z; Si algún punto de datos queda fuera del rango de puntuación Z, debe ser una anomalía. Detección de la tasa de crecimiento Se calcula la tasa de crecimiento día tras día; si supera el 40%, se marca. # ————————————— # DETECCIÓN DE ANOMALÍA # ————————————— def detect_anomalies(df): valores = df["Casos"].valores significan, std = valores.mean(), valores.std() Spike_idx = [ i para i, v en enumerar(valores) if abs(v – media) > 3 * std ] crecimiento = np.diff(valores) / np.maximum(values[:-1], 1) growth_idx = [i + 1 for i, g in enumerate(growth) if g > 0.4] anomalías = set(spike_idx + growth_idx) df["Anomaly"] = ["YES" if i in anomalías else "NO" for i in range(len(df))] return df
Si hay una anomalía según el pico o el crecimiento o con ambos parámetros, la “Anomalía” se establece en “SÍ”; de lo contrario, establezca en “NO”.
Paso 5: Clasificación de gravedad
No todas las anomalías son iguales; Los clasificaremos como "CRÍTICOS", "ADVERTENCIA" o "MENORES" para guiar las decisiones del Agente de IA. Se utilizan ventanas móviles fijas y umbrales basados en reglas para clasificar la gravedad. La gravedad se clasifica sólo cuando existe una anomalía; de lo contrario, los parámetros de gravedad, decisión del agente y acción en el marco de datos se establecen en "en blanco".
# ————————————— # CONFIG # ————————————— ROLLING_WINDOW = 7 MIN_ABS_INCREASE = 500 # ————————————— # CLASIFICACIÓN DE SEVERIDAD # ————————————— def compute_severity(df): df = df.sort_values("Fecha").reset_index(drop=True) df["Severidad"] = "" df["Agente Decisión"] = "" df["Acción"] = "" for i in range(len(df)): if df.loc[i, "Anomaly"] == "YES": if i < ROLLING_WINDOW: df.loc[i, "Severity"] = "" curr = df.loc[i, "Cases"] baseline = df.loc[i – ROLLING_WINDOW:i- 1, "Casos"].mean() abs_inc = curr – crecimiento inicial = abs_inc / max(baseline, 1) if abs_inc < MIN_ABS_INCREASE: df.loc[i, "Severity"] = "" if crecimiento >= 1.0: df.loc[i, "Severity"] = "CRÍTICO" elif crecimiento >= 0.4: df.loc[i, "Severity"] = "ADVERTENCIA" else: df.loc[i, "Severidad"] = "MENOR" return df
En el código anterior, para clasificar la gravedad de la anomalía, cada anomalía se compara con datos históricos de 7 días (ROLLING_WINDOW = 7) y se calcula el crecimiento absoluto y relativo.
Crecimiento absoluto
Un MIN_ABS_INCREASE = 500 se define como un parámetro de configuración donde los cambios por debajo de este valor se consideran muy pequeños, un cambio insignificante. Si el crecimiento absoluto es menor que MIN_ABS_INCREASE, ignórelo y mantenga la gravedad en blanco. El crecimiento absoluto detecta un impacto significativo en el mundo real, no reacciona al ruido ni a fluctuaciones menores y evita falsas alarmas cuando el porcentaje de crecimiento es alto.
Crecimiento relativo:
El crecimiento relativo ayuda a detectar tendencias explosivas. Si el crecimiento es mayor o igual al 100 % de aumento con respecto al valor inicial, significa un brote repentino y se asigna como "CRÍTICO"; si el crecimiento es superior al 40% significa aceleración sostenida y necesita seguimiento, y se asigna como 'ADVERTENCIA'; de lo contrario asignado como 'MENOR'.
Después de la clasificación de gravedad, está listo para que el Agente de IA tome una decisión y acción autónoma.
Paso 6: Crear solicitud para el agente AI
A continuación se muestra el mensaje que define cómo el agente de IA razona y toma decisiones en función del contexto estructurado y la gravedad predefinida cuando se detecta una anomalía. El agente está restringido a tres acciones explícitas y debe devolver una respuesta única y determinista para una automatización segura.
def build_agent_prompt(obs): return f""" Usted es un agente de monitoreo de IA para datos de COVID-19. Anomalía observada: Fecha: {obs['date']} Casos: {obs['cases']} Gravedad: {obs['severity']} Reglas de decisión: – FIX_ANOMALY: ruido, fluctuación de informes – KEEP_ANOMALY: señal de brote real – FLAG_FOR_REVIEW: grave o ambiguo anomalía Responda SÓLO con uno de: FIX_ANOMALY KEEP_ANOMALY FLAG_FOR_REVIEW """
Se proporcionan explícitamente al mensaje tres puntos de datos, es decir, fecha, número de casos reportados y gravedad, lo que ayuda al agente de IA a tomar una decisión de forma autónoma.
Paso 7: Crea tu Agente con GroqCloud
Ahora estamos creando un agente de IA autónomo utilizando GroqCloud que toma decisiones contextuales inteligentes sobre las anomalías detectadas y su gravedad y toma las medidas adecuadas. Tres acciones predefinidas para el Agente AI aplican únicamente resultados validados.
# ————————————— # CONSTRUYENDO UN AGENTE DE IA # ————————————— agente = Agente( nombre="CovidAnomalyAgent", model=Groq(id="openai/gpt-oss-120b"), instrucciones=""" Usted es un agente de IA que monitorea datos de series temporales de COVID-19 en vivo. Detecte anomalías, decida según la anomalía: "FIX_ANOMALY", "KEEP_ANOMALY", "FLAG_FOR_REVIEW".""" ) para i en rango(len(df)): if df.loc[i, "Anomaly"] == "YES": obs = build_observation(df, i) solicitud = build_agent_prompt(obs) respuesta = agente.run(prompt) decisión = respuesta.messages[-1].content.strip() decisión = decisión si la decisión está en VALID_ACTIONS else "FLAG_FOR_REVIEW" df = agente_acción(df, i, decisión)
Se crea un agente de IA llamado "CovidAnomalyAgent", que utiliza un modelo LLM alojado en GroqCloud para un razonamiento rápido y de baja latencia. AI Agent ejecuta un mensaje bien definido, observa datos, razonamiento contextual, toma una decisión autónoma y realiza acciones dentro de limitaciones seguras.
Un agente de IA no maneja anomalías sino que toma decisiones inteligentes para cada anomalía detectada. La decisión del agente refleja con precisión la gravedad de la anomalía y la acción requerida.
# ————————————— # Agente ACCIÓN DECISORA # ————————————— def agent_action(df, idx,action): df.loc[idx, "Agent Decision"] = action if action == "FIX_ANOMALY": fix_anomaly(df, idx) elif action == "KEEP_ANOMALY": df.loc[idx, "Action"] = "Aceptado como una señal de brote real" elif action == "FLAG_FOR_REVIEW": df.loc[idx, "Action"] = "Marcado para revisión humana" return df
AI Agent ignora los puntos de datos normales sin anomalías y considera solo los puntos de datos con “ANOMALÍA = SÍ”. El agente de IA está obligado a devolver solo tres decisiones válidas: "FIX_ANOMALY", "KEEP_ANOMALY" y "FLAG_FOR_REVIEW" y, en consecuencia, se toman las medidas que se definen en la siguiente tabla:
Para anomalías menores, el agente de IA corrige automáticamente los datos, conserva las anomalías válidas tal como están y señala los casos críticos para su revisión humana.
Paso 8: solucionar la anomalía
Las anomalías menores son causadas por el ruido informado y se corrigen mediante el suavizado de la media móvil local sobre los valores históricos recientes.
# ————————————— # CORREGIR ANOMALIA # ————————————— def fix_anomaly(df, idx): ventana = df.loc[max(0, idx – 3):idx – 1, "Casos"] if len(ventana) > 0: df.loc[idx, "Casos"] = int(ventana.mean()) df.loc[idx, "Severidad"] = "" df.loc[idx, "Action"] = "Autocorregido por un agente de IA"
Toma los 3 días inmediatos de datos pasados, calcula su media y suaviza la anomalía reemplazando su valor con este promedio. Mediante el enfoque de suavizado de media móvil local, se pueden manejar picos temporales y fallas en los datos.
Una vez que se soluciona una anomalía, el punto de datos ya no se considera riesgoso y la gravedad se elimina intencionalmente para evitar confusión. "Acción" se actualiza a "Corregido automáticamente por un agente de IA".
Código completo
Lea amablemente el código completo para la detección de anomalías estadísticas y la implementación del Agente AI para el manejo de anomalías.
https://github.com/rautmadhura4/anomaly_detection_agent/tree/main
Resultados
Comparemos los resultados para el país, “India”, con diferentes tipos de gravedad detectados y cómo los maneja AI Agent.
Escenario 1: una implementación nativa
El primer intento es una implementación nativa en la que detectamos anomalías menores y el Agente AI las corrige automáticamente. A continuación se muestra una instantánea de la tabla de datos de COVID de la India con gravedad.
También hemos implementado un panel Streamlit para revisar las decisiones y acciones del Agente de IA. En la siguiente instantánea de resultados, puede ver que el Agente AI soluciona varias anomalías menores.
Esto funciona mejor cuando las anomalías son ruido localizado en lugar de cambios de régimen.
Escenario 2: una condición límite
Aquí, se detectan anomalías críticas y el agente de IA levanta una bandera para su revisión, como se muestra en la instantánea de la tabla de datos de COVID de la India con gravedad.
En el panel de Streamlit, las decisiones y acciones del Agente AI se muestran en la instantánea de resultados. Puede ver que el Agente de IA marcó todas las anomalías críticas para su revisión humana.
La activación de la gravedad evita las autocorrecciones destructivas en anomalías de alto impacto.
Escenario 3: una limitación
Para el escenario de limitación, se detectan advertencias y anomalías críticas como se muestra en la instantánea de la tabla de datos de COVID de la India con gravedad.
En el panel de Streamlit, las decisiones y acciones del Agente AI se muestran a continuación en la instantánea de resultados. Puede ver que la anomalía crítica está marcada para revisión humana por parte del Agente AI, pero la anomalía de ADVERTENCIA se soluciona automáticamente. En muchos entornos reales, una anomalía de nivel de ADVERTENCIA debe preservarse y monitorearse en lugar de corregirse.
Este fallo pone de relieve por qué se deben ajustar los umbrales de ADVERTENCIA y por qué la revisión humana sigue siendo esencial.
Utilice el código completo y pruebe la detección de anomalías para el conjunto de datos de COVID-19, con diferentes parámetros.
Alcance futuro y mejoras
Hemos utilizado un conjunto de datos muy limitado e implementado la detección de anomalías basada en reglas, pero en el futuro, se pueden realizar algunas mejoras en la implementación del Agente AI:
En nuestra implementación, se detecta una anomalía y se toma una decisión basada únicamente en el recuento de casos. En el futuro, los datos podrán ser más elaborados con características como registros de hospitalización, datos de vacunación y otros. La detección de anomalías se realiza aquí mediante métodos estadísticos, que también pueden ser impulsados por ML en el futuro para identificar patrones más complejos. Ahora hemos implementado una arquitectura de agente único; en el futuro se podrá implementar una arquitectura multiagente para mejorar la escalabilidad, la claridad y la resiliencia. En el futuro, el circuito de retroalimentación humana también debería ocuparse de tomar mejores decisiones.
Conclusiones finales
Los agentes de IA más inteligentes habilitan una IA operativa que toma decisiones utilizando el razonamiento contextual, toma medidas para corregir anomalías y escala a los humanos cuando es necesario. Hay algunas conclusiones prácticas que se deben tener en cuenta al crear un agente de IA para la detección de anomalías:
Para detectar anomalías, utilizar métodos estadísticos e implementar agentes de IA para la toma de decisiones contextuales. Es seguro corregir automáticamente las anomalías menores, ya que generalmente se informan como ruido. Los críticos nunca deben corregirse automáticamente ni marcarse para que los expertos en el dominio los revisen, de modo que las señales del mundo real no se supriman. Este agente de IA no debe utilizarse en situaciones en las que las anomalías desencadenen directamente acciones irreversibles.
Cuando los métodos estadísticos y un enfoque de agente de IA se combinan adecuadamente, transforman la detección de anomalías de un simple sistema de alerta a un sistema controlado y basado en decisiones sin comprometer la seguridad.