8 de diciembre de 2010

Outlier Detection (Detección de Datos Anómalos)


Un valor anómalo es una observación que se encuentra a una distancia de otros valores anormales en una muestra aleatoria de una población. En cierto sentido, esta definición deja en manos del analista (o un proceso de consenso) para decidir lo que se considera anormal. Antes de señalar las observaciones anormales, es necesario especificar cuáles son las observaciones normales.

Dos actividades son esenciales para la caracterización de un conjunto de datos:
  1. El examen de la forma global de los datos graficados de características importantes, incluyendo la simetría y las desviaciones de los supuestos.
  2. El examen de los datos de observaciones atípicas que están muy lejos de la mayoría de datos. Estos puntos se refieren a menudo como los valores extremos.
El diagrama de caja es una pantalla gráfica útil para describir el comportamiento de los datos en el medio, así como en los extremos de las distribuciones. El diagrama de caja se utiliza la mediana y el cuartil inferior y superior (definido como el 25 y 75 percentiles). Si el cuartil inferior es Q1 y el cuartil superior es Q2, entonces la diferencia (Q2 - Q1) se llama el rango intercuartil o CI.

Un diagrama de caja se construye dibujando un cuadro entre los cuartiles inferior y superior con una línea continua trazada a través de la caja para localizar la mediana. Las siguientes cantidades (llamadas vallas) son necesarias para la identificación de valores extremos en las colas de la distribución:
  1. Valla interna inferior: Q1 - 1,5 * CI
  2. Valla interna superior: Q2 + 1.5 * CI
  3. Valla exterior inferior: Q1 - 3 * CI
  4. Valla exterior superior: Q2 + 3 * CI
Un punto más allá de la valla interior a ambos lados se considera un valor atípico leve. Un punto más allá de la valla exterior se considera un valor atípico extremo.

 
Ejemplo utilizando el lenguaje y software R

En lenguaje R tenemos algunas funciones que nos permiten representar a la perfección este tema de anomalías.

Antes que nada generaremos un arreglo de 200 valores aleatorios y los visualizamos utilizando las siguientes instrucciones:
> y=rnorm(200)
> y

Al hacer esto, obtenemos el listado de valores, en este caso:
[1] -1.165853888 -0.955031545 -0.400880160 -0.236351755 0.027450224 0.264035645 1.164070642 -1.009940666 -0.215460271 2.535920209 -0.175013095
[12] 0.912400191 -0.127012647 0.980683431 -0.690220551 1.810227257 -0.083157212 -0.386534007 -0.371779463 1.938586420 -0.488154266 -1.019324308
[23] 2.629907093 -0.394080257 1.100920589 -0.914918369 1.453785890 0.225141840 -0.941417392 -1.996026513 -1.388112092 -0.276942237 -0.856065661
[34] -0.042576800 -0.469769793 0.896523593 -2.142289587 0.106668092 0.311102646 1.619171129 -1.325171756 -0.122146025 -0.295685593 0.129063802
[45] -0.153838305 1.362181677 0.538499106 1.233888968 -2.130028233 0.139157479 0.596722491 1.079477830 -0.263774619 2.191134043 -0.002627052
[56] -0.413915506 -1.007515083 -0.574816473 -0.482291746 -0.721780844 -1.025907628 -1.089927958 1.173801297 -0.082981608 -1.231377050 -2.712315073
[67] 1.445477900 -0.079720081 -0.449926763 -0.154191149 -0.712822448 -0.569890902 0.009564743 -0.338627746 1.701151651 -1.563883739 -1.672801315
[78] 0.385131736 -1.213862200 1.538937810 -1.054074341 -0.006126526 -2.290854019 1.407962777 0.220766548 0.237166688 0.214319836 0.607137111
[89] -0.432512859 -1.261568786 1.275437551 0.835784114 2.464322128 -0.821995974 0.853527852 0.377911273 0.973842634 0.027204201 2.302954317
[100] -0.901702528 -0.192658880 0.213383555 0.719825832 -0.507056210 0.349633367 0.569031224 -1.644298289 -1.030787221 1.992107112 -1.062339006
[111] 0.853355458 -0.179214011 -1.877108775 0.097302843 0.586843297 0.227901153 -1.337615592 0.297757759 0.955298601 -0.300573060 -0.234448821
[122] -0.624419801 -0.879537349 0.668275658 0.335697526 0.587730056 -1.186918987 0.678356750 1.069862688 -1.616948855 0.007750086 -0.279580543
[133] -0.642341536 -0.820946614 -0.775683799 0.027930232 -0.241186576 -0.797547075 0.631171851 0.038633245 -0.700816972 -0.796872053 1.073859628
[144] -0.340740803 0.757887883 1.321953231 -1.164196340 -0.083359570 -0.377654571 0.086319961 1.378932129 0.399875571 0.866069196 -0.346559686
[155] -0.812785484 -0.632942191 -0.337267626 -0.380453425 -0.691912362 -1.781040611 0.340368061 0.984578321 1.728054826 0.940681904 -0.156874246
[166] 1.255180807 0.720627300 -0.157533577 -0.098809027 -0.038628890 -0.187352360 0.828662725 0.259983177 1.528909142 1.200236996 0.508354296
[177] -1.249758744 0.608455200 -0.514451102 0.366154599 -1.579730166 -1.109476643 0.620700948 0.817736081 0.847031104 -0.180082208 0.213875082
[188] -0.148941407 -0.723089183 -0.083476433 1.280877039 0.066672708 -0.133964593 -0.059672883 0.490301296 -0.321303024 -1.107683228 -0.305780755
[199] -1.722887273 0.181962787

Con estos valores utilizaremos la función outlier, definida como aquella que encuentra el valor con la mayor diferencia entre la media y el mismo valor. El uso de esta función es:

outlier(x, opposite = FALSE, logical = FALSE)

donde,
x: Es el arreglo de datos
opposite: Está por default en TRUE y este define el valor opuesto (si el valor más grande tiene la máxima diferencia de la media, da el más pequeño y viceversa)
logical: Está por default en TRUE, da vector de valores lógicos, y la posición del posible valor atípico lo marca como TRUE.

 
Entonces, utilizamos la función de la siguiente manera:
> outlier(y)
[1] -2.712315

Otra función con la cual se cuenta es la de chisq.out.test, en la cual se realiza una prueba de ji cuadrado para la detección de un valor atípico en un vector.

El uso de la función es el siguiente:

chisq.out.test (x, variance =var(x), opposite = FALSE)

donde,

x: es    un vector de valores de datos numéricos.
variance: conocida como la varianza de la población. Si no se da, se estima de la muestra, pero no hay mucho sentido por lo que en tal prueba (que es similar a la puntuación z)
opposite: es un indicador lógico que indica si no se desea comprobar el valor con mayor diferencia de la media, sino todo lo contrario

 
Entonces, ejecutamos lo siguiente:
> chisq.out.test(y)

 
Y como resultado obtendremos:

chi-squared test for outlier

data: y
X-squared = 7.5101, p-value = 0.006135
alternative hypothesis: lowest value -2.71231507343222 is an outlier

 
Como conclusión, ambas pruebas nos arrojan que el valor anómalo es el -2.712315.

 
Se anexa las imágenes de las ejecuciones:

7 de diciembre de 2010

Análisis de la Herramienta de Minería de Datos: Pentaho

Pentaho es una herramienta open-source de business intelligence. Cuenta con versiones para sistemas operativos Linux y Windows. Entre las versiones que cuenta tiene las siguientes:

  • Pentaho BI Suite 3.7 GA
  • Pentaho Data Integration 4.1 GA
  • Pentaho BI Suite for Hadoop 3.7 GA
  • Pentaho Data Integration for Hadoop 4.1 GA
Para esta evaluación fue seleccionada la herramienta Pentahoo BI Suite 3.7 GA para Windows, para la cual se utilizó una computadora con Windows 7, procesador Inter Core 2 Duo de 2.53 GHz y 4 Gb de memoria RAM.

Las versiones están disponibles para descarga como una versión de evaluación de 30 días y al seleccionar la versión deseada se presenta un formulario para indicar datos personales y el propósito de la descarga.


En el sitio no se visualiza información de precios para la adquisición, para esto es necesario contactar al fabricante. 

El proceso de instalación es un poco largo pero al finalizar se cuenta con estas herramientas y documentación:


Para utilizar la herramienta Aggregation Designer primero fue necesario crear un ODBC, que para este ejemplo se utilizó un ODBC que se conecta a SQL SERVER 2008 que se tenía instalado de forma local:

Una vez seleccionado el ODBC se selecciona el archivo de esquema Mondrian, para la cual se basa en la especificación mencionada en el sitio: http://mondrian.pentaho.com/documentation/schema.php



Report Designer funge como un reporteador similar a un Crystal Reports donde se puede crear un informe desde cero o desde un wizard:


En este caso se generó un reporte desde el wizard siguiendo los pasos:
  1. Seleccionar el templeate:
  2. Seleccionar los datos de origen:
  3. Se configura la información a desplegar en el reporte:
  4. Al finalizar tenemos el previo del reporte


Con estas herramientas ademas de tener acceso a importar información desde muchas fuentes también se tiene la posibildad de tratarla para analizarla y desplegarla de la manera nosotros necesitamos.

26 de octubre de 2010

Síntesis del artículo de Agrupamiento de Grafos

En este artículo la Dra. Elisa Scheaffer presenta un estudio realizado sobre el agrupamiento de grafos.
El proceso de identificar la heterogeneidad de los datos no uniformes se le llama agrupamiento clasificación de datos. Los grafos son estructuras formadas por un conjunto de vértices (o nodos) y aristas que conectan un par de nodos.
El agrupamiento de grafos es una tarea de agrupar vértices de la gráfica en grupos de tal manera que queden pocos vértices fuera de los grupos.
El estudio consta de 10 secciones, en donde se abordan desde las definiciones básicas y necesarias para comprender el agrupamiento de grafos, hasta los problemas que quedan inconclusos, las direcciones futuras y las conclusiones sobre este tema.
En la sección 2 de este estudio, se otorgan los términos y definiciones que facilitan el entendimiento del resto del estudio. En esta se proveen términos de complejidad computacional, algoritmos de aproximación, teoría de grafos y cadenas de Markov.
En la sección 3, se comienza con la tarea de definir lo que constituye una agrupación en un grafo y lo que una agrupación debería ser. También se discuten algunas clases especiales de gráficos. En esta sección también se menciona cual es el objetivo de la agrupación, una vez dado un conjunto de datos, este consiste en dividir el conjunto de datos en grupos de tal manera que los elementos asignados a un grupo determinado son similares o conectados en sentido predefinido.
En esta sección se abordan temas de modelos de generación para los grafos agrupados, propiedades deseables del grupo y las representaciones de los grupos para las diferentes clases de grafos, como lo son los grafos bipartitas y los grafos directos.
En la sección 4 se aborda el tema de las mediciones para identificar grupos, en donde primeramente se hace una visión de las medidas de similitud de vértices que pueden ser utilizadas de former manner para identificar el conjunto de un vértice específico o para agrupar todos los vértices en un conjunto de grupos, y luego presentar las posibles cluster fitness measures que sirven para métodos que producen la agrupación mediante la comparación de diferentes grupos y seleccionando uno que cumpla u optimice un criterio determinado.
En la sección 5 se ve el tema de los métodos globales para agrupamiento de grafos, en donde se ve la complejidad del agrupamiento global, cálculo iterativo o en línea de los agrupamientos globales, agrupamiento jerárquico, agrupamiento de división global y agrupamiento aglomerativo global.
En la sección 6 se ven los métodos locales para el agrupamiento en grafos, los cuales son utilizados para encontrar un buen grupo que contiene un vértice especificado o un conjunto de vértices mediante el examen de un número limitado de vértices a la vez, los cuales están en la "vecindad" del vértice especificado.
En la sección 7 se describe la dificultad de comparar, evaluar y realizar el benchmarking de los métodos de agrupamiento de grafos.
En la sección 8 se presentan las aplicaciones del agrupamiento de grafos, aplicaciones en agrupamiento de datos, en redes de información y uso de la información, en sistemas de bases de datos, en redes sociológicas y biológicas, entre otras.
En la Sección 9 se revisan los problemas abiertos y las direcciones futuras, y en la Sección 10 se llega a la conclusión del estudio.