14 diciembre 2010

Datos anomalos

Esta entrada esta dedicada al estudio de anomalías en los conjuntos de datos
Un dato anómalo es aquel que se encuentra a una distancia anormal de los demás datos de una muestra aleatoria de datos. En este sentido la definición deja en manos del analista el decidir lo que considera anormal, para esto es necesario identificar los datos que se consideran normal.

Para el siguiente ejercicio utilice la base de datos de prestamos del sistema de bibliotecas de la UANL en el 2009.

Utilice para realizar los cálculos y las gráficas la herramienta Octave con el modulo outliers.

Para cargar los valores en una variable dentro de Octave utilice la siguiente instrucción:

x = csvread("/home/carlos/Documentos/Prestamos2009")

En la cual se almacena la matriz de los prestamos realizados en el 2009 en una columna y en otra el día en que se realizo el préstamo. Para nuestro estudio no nos interesa el día exacto en el que se realizo el préstamo, solo la cantidad de prestamos por día, por lo que solo utilizaremos la columna con los valores del préstamo.

Para graficar los prestamos realizados utilice la siguiente instrucción:

plot(x(:,2),'b*')

En la cual le indico a la herramienta que deseo graficar los valores de la segunda columna, que los ponga de color azul y que utilice el símbolo '*' para representar los valores en la gráfica

La gráfica de dispersión de los prestamos realizados en la UANL tienen el siguiente aspecto:


Para obtener el valor que se encuentra mas alejado del comportamiento normal de los demás, utilice la siguiente instrucción:

[out2] = outlier(x(:,2),0,0)

El cual arrojo el valor: 2405

con esta instrucción ya tengo cual es el valor mas alejado del comportamiento normal dentro del conjunto de datos, pero todavía no se en que posición se encuentra dentro del vector. Para solucionar esto utilizo la siguiente instrucción:

[out] = outlier(x(:,2),0,1)

La cual almacena en la variable “out” un vector con valores 0 y 1, en donde 0 significa que el dato almacenado en esa posición del vector inicial tienen comportamiento normal, a contraposición de los que tienen valor 1 (que en este caso solo envía un solo valor)

Para poder observar en la gráfica el punto que se considera anómalo, multiplico el vector resultante con el valor anómalo y lo guardo en un segundo vector con la siguiente instrucción:


out3 = out*out2

Ahora puedo graficar los dos vectores y observar cual es el dato anómalo dentro de la gráfica de dispersión utilizando la función Plot:

plot(x(:,2),'b*',out3,'r*')

La gráfica resultante muestra los valores dentro del conjunto de datos de color azul y el dato anómalo lo muestra de color rojo como se ve a continuación

1 comentario: