← 8 · Atípicos y anomalías E9

Algunas anomalías no aparecen en ninguna venta concreta

La pregunta de esta página

¿Buscar valores raros es lo mismo que buscar comportamientos raros?

1 El problema

La página 8 busca ventas cuyo importe se sale del rango. Ese criterio encuentra una clase de problema y deja fuera otras dos, que en una empresa real pueden costar más.

Un pedido de 6.000 € es normal en el histórico. En una provincia que nunca ha pasado de 3.000, no lo es. Y un mes en el que nadie facturó nada raro puede ser, una vez sumado, el peor del histórico.

2 Por qué engaña

Un solo detector responde a una sola pregunta. Al mirar solo los valores extremos, lo que se escapa es precisamente lo que no destaca por sí mismo: el fraude pequeño repetido, la caída lenta de un canal, el cliente que deja de comprar sin avisar.

3 El principio

Tres clases, tres criterios

Puntual: el valor es raro contra todo el conjunto.

Contextual: el valor es normal en general y raro en su contexto, que puede ser su provincia, su trimestre o su segmento.

Colectiva: ningún valor suelto es raro y el conjunto sí.

4 La solución

Cada una pide su propio cálculo. La puntual sale del límite global. La contextual exige agrupar antes de medir, aquí por provincia y trimestre. La colectiva compara los totales mensuales con su propia banda, sin mirar las ventas una a una.

5 Qué pasa con estos datos

Puntual
1.588
ventas sobre el límite global
Contextual
76
normales en el total, raras en su provincia
Colectiva
6
meses de 88

Las 76 contextuales son el resultado nuevo: ninguna habría aparecido en la página 8, porque todas están por debajo del límite global. Son ventas que solo llaman la atención cuando se las compara con lo que suele pasar en su provincia ese trimestre. Ninguna está entre las anomalías de la regla, así que son un criterio que hay que validar antes de usarlo, no errores encontrados.

Y hay 6 meses cuyo total se sale de la banda de dos desviaciones, que va de 431.300 a 669.327 €. No bastan para hablar de anomalía colectiva. La banda se calculó con todas las ventas, anomalías incluidas, y al menos uno de esos meses se sale solo por una de ellas. Además, si los meses se repartieran como una campana, unos 4 de 88 quedarían fuera por puro azar. Habría que mirar qué pasó en cada uno.

Un criterio que hubo que rehacer
La primera versión medía lo contextual contra el producto y daba cero. La razón es que una venta rara para un producto caro ya es rara en el total, así que los dos criterios detectaban lo mismo. Al cambiar el contexto a provincia y trimestre, el criterio empezó a encontrar ventas que el límite global no ve.

6 Para qué sirve

Para saber qué no está vigilando un control. Un detector de valores extremos no ve ni el fraude repartido en pedidos pequeños ni la caída progresiva de un canal.

En contabilidad esto tiene nombre propio: el fraccionamiento de pagos justo por debajo del umbral de autorización es un ejemplo típico de anomalía colectiva y ningún control de importe máximo la encuentra.

El detalle técnico

Límite de Tukey en las dos primeras, con el contexto agrupado por provincia y trimestre y un mínimo de 20 ventas por grupo. La colectiva usa media más menos dos desviaciones sobre los totales mensuales, dejando fuera el mes en curso por incompleto.

Ver los tres criterios
# Puntual: rara contra TODO el histórico
puntual = importe > q3 + 1.5 * iqr_global

# Contextual: normal en el total, rara DENTRO de su provincia y su trimestre
for (reg, trimestre), g in datos.groupby(["reg", trimestre]):
    contextual += ((g.importe > limite_local(g)) & (g.importe <= limite_global)).sum()

# Colectiva: ninguna venta llama la atencion, el MES entero se sale
mensual = datos.groupby(mes)["importe"].sum()
colectiva = (abs(mensual - mensual.mean()) > 2 * mensual.std()).sum()

Fuente: atipicos_kpi.json, campo e9_clases_de_anomalia.