datos bonitos, datos feos

noviembre 9, 2010

Cuando vas a analizar, explorar, conocer conjuntos de datos, lo primero con lo que te encuentras (entre otras cosas) es que los datos no son tan bonitos como los que R incluye para experimentar. La mayor parte de los datos que escogí tienen formato csv, que es un simple formato tabular. Los datos bonitos son, por ejemplo:

surgery,age,hnumber,rectal-temp
no,adult,530101,38.5
yes,adult,534817,39.2
no,adult,530334,38.3
yes,young,5290409,39.1

Pero, ¿qué tiene de bonito el atributo sobre temperatura rectal (rectal-temp)? ¿Cuál es el criterio para decir que el archivo es bonito? En el ejemplo, todas las columnas están correctamente separadas por comas, con el mismo número de columnas por renglón y no hay caracteres raros. Este archivo puede usarse inmediatamente para análisis sin ninguna inversión de tiempo. Pero los conjuntos de datos en la realidad no son así, la mayoría es imperfecto y feo en mayor o menor medida. Veamos el siguiente:

User-ID,Location,Age
5262,&#turkey,27
9311,Ł,ódź,, lodzkie, poland,17
9335,san diego california usa,54

9396,, ,,44
9387,southlake texas usa,38

Horror. El archivo está plagado de símbolos raros que en nada ayudan a su proceso. Además, hay algunos registros que tienen más de tres columnas. Si eso no basta para decir que es feo, tiene renglones vacíos, que aunque para el ojo humano es “nada” generalmente para un programa si significa “algo” y no precisamente bondadoso. Por ejemplo, algunos programas nos dirán que este archivo feo tiene seis registros cuando en realidad tiene cinco.

Este archivo necesita un preproceso urgente que le quite lo feo para que se puedan hacer análisis confiables. Y así, ya que aceptamos que los datos reales difícilmente son bonitos,  entonces hay que decidir cómo los haremos bonitos. Eso depende de nuestras necesidades y de lo que hayamos visto que ocurre con más frecuencia en los datos disponibles: 1) ¿todas las columnas requieren limpieza?, tengo un archivo en el que una columna contiene URLs por lo que limpiarlo deformaría el dato, 2) ¿me importa que el valor del atributo se entienda?, 3) ¿qué caracteres debo eliminar?, 4) ¿qué caracteres debo sustituir?, 5) si un renglón no tiene la misma cantidad de atributos, ¿lo quito?,¿lo corrijo?,¿es relevante? Al primer vistazo puede parecer muy simple, sin embargo, las decisiones que se tomen son relevantes para los resultados de todo análisis.

¿Ven por qué es feo? el primer archivo no genera tanta interrogante. El segundo archivo es todo lo contrario, decisiones y más decisiones. No cabe duda, en un simple conjunto de datos se resume la vida misma.

Pues bien, como el punto es que hay que decidir, mi decisión inicial consiste en: 1) elimino los renglones vacíos, 2) elijo qué columnas limpiaré y 3) la limpieza consiste en eliminar los caracteres no-alfanuméricos. ¿Cómo hacerlo? No, ni lo piensen, hoja de cálculo no. Si tienes solamente un archivo pequeño y ese es tu único interés tal vez. Pero si el número de conjunto de datos a usar es indeterminado y no son pequeños entonces pensar siquiera en usar una hoja de cálculo sería un suicidio. Hice un script inicial en Python que hace la limpieza básica descrita; está disponible en el repositorio. R no es bueno para preprocesamiento, supone que los archivos llegan ya listos.

Lo bueno de todo es que esa fase de preprocesamiento permite que conozcas mejor los datos, que les conozcas sus defectos, que los veas de cerca, que te metas en ellos. Cuando los datos son bonitos, ni los miras (pero salen más rápido los resultados).

A veces, lo que creemos que es basura, no lo es

Imagen


Eligiendo herramientas

octubre 13, 2010

Encontrar las herramientas adecuadas para realizar una tarea no siempre es sencillo. Puedes usar lo que ya conoces sin importar si es lo más indicado o no. Con buena suerte, lo que ya conoces es lo adecuado y todo sale bien. Sin embargo, si no es así, el tiempo que ganarías según tú por conocer bien la herramienta en cuestión, se perdería al tener que trabajar más para cubrir sus deficiencias. Recientemente me encontré en una situación semejante.

Perl ha sido mi lenguaje de scripts favorito desde hace varios años. Su flexibilidad hace que puedas obtener resultados rápidamente. Una desventaja es que fácilmente puedes tener un código muy críptico y desordenado que al poco tiempo no entiendas. Mi dilema surgió recientemente: ¿seguiría usando Perl para el proyecto actual?, si era así, ¿era lo indicado?. Así, tratando de evitar aspectos emocionales como “… es que en Perl hice la transformación de datos que más me ha divertido …” y cosas parecidas, decidí buscar lo que luce más conveniente al proyecto.

 

Perl: el hippy, liberal, relajado

Buscaba algo que hiciera énfasis en el análisis estadístico y también que, como Perl, permitiera pegar cosas (Glue Language). Así, después de considerar distintas alternativas, he escogido Python como lenguaje de propósito general y R para la parte estadística. A diferencia de Perl, Python te exige mayor formalidad; es como la dama de La dama y el vagabundo. Por ejemplo, en Perl puedes escribir el código identado o sin identar, es indistinto.  En Python, por el contrario, la identación es un deber, no cuestión de estilo ni de buenas prácticas. Lo ideal sería que se tuvieran buenos hábitos con todos los lenguajes pero sabemos que en la práctica, eso difícilmente se cumple. Después de hacer algunos pininos,  he sentido las ventajas de Python, pero lo admito, Perl sigue siendo mi favorito.

 

Python: el formal, el elegante

En cuanto a R, su fortaleza radica en el análisis estadístico y  lo poco que he probado hasta ahora, me ha convencido. Sobre R ya había leído diversos comentarios, la mayoría positivos; sin embargo, fue un  análisis estadístico muy interesante lo que me hizo volver a poner mis ojos en él.

Pero, ¿cómo usar R desde Python? todo indica que rpy es lo que busco para aprovechar lo mejor de ambos mundos.

La experiencia y los resultados que se logren mostrarán si son buenas elecciones.

===

Imagen hippy, del usuario de flickr gabbahey


Imagen corbata
, del usuario de flickr fhashemi


Minería para detección de densidad de población usando dispositivos móviles

mayo 13, 2010

En el capítulo de Bones The Cinderella in the Cardboard se muestra un servicio por celular llamado Date or Hate para búsqueda de pareja. En el celular se van mostrando al usuario los perfiles de los candidatos cercanos a su ubicación. Si el perfil le agrada, puede aceptarla (Date), permitiendo el intercambio de mensajes de texto; de otra manera, se rechaza (Hate). Según el sitio wiki de Bones, el servicio se inspiró en Crush or Flush, aunque en éste no existe la detección de proximidades. El usuario navega por los distintos perfiles y puede aceptarlo (Crush) ó rechazarlo (Flush), no importa dónde se encuentre. La persona rechazada nunca se entera, evitando así maltratar su auto-estima. Estos servicios son básicamente sistemas de recomendación a partir de perfiles de usuario. Por supuesto, el servicio mostrado en Bones tenía que incluir un elemento más sofisticado al agregar la detección de proximidades.

Recordé ese capítulo porque la semana pasada se lanzó un servicio llamado SpotRank, el cual predice la densidad de gente a cualquier hora y día de la semana en zonas urbanas predefinidas . El usuario envía la latitud y longitud o un punto de acceso y SpotRank dará una buena idea de la densidad en el área. La densidad se muestra como mapa de calor en el cual las zonas rojas corresponden a los sitios con más gente.

 

¿Y ésto para qué sirve?

Las ventajas que plantean son:

  1. Es posible planear una ruta para llegar a un lugar viendo el posible tráfico dentro de una hora y evitar contratiempos. Esto me parece similar a lo que Predestinación busca, habrá que elegir si se quiere tener el servicio en el celular o en el módulo de navegación vehicular 🙂
  2. Si se busca un restaurante se puede ver si en cierto tiempo habrá mucha gente y llegar antes.
  3. Al buscar bienes raíces se puede dar una idea del movimiento del vecindario, si es una zona ruidosa o tranquila.

Las campañas publicitarias pueden ser menos costosas si de antemano se sabe dónde habrá mas gente en ciertos días y horas.

Otras que se me ocurren son:

  1. Si se introduce información histórica sobre manifestaciones se tendría un sistema de predicción de conflictos sociales sumamente interesante.
  2. Tendencias del desplazamiento de personas en epidemias.
  3. Tendencias para asistencia a conciertos y espectáculos masivos.

Este servicio puede combinarse con otras bases de datos comerciales, como ya se está explorando, para dar recomendaciones sobre negocios específicos.

Toda aplicación nueva tiene dos caras y aunque hay beneficios tangibles, no es difícil imaginarse el mal uso que se le puede dar al servicio. Por otra parte, el aspecto de la privacidad de la información sigue latente, aunque la empresa asegura la confidencialidad de los datos. Con toda esa información disponible, el servicio Date or Hate no es precisamente una irrealidad, y no deja de ser un riesgo el que personas cuyos datos no son fidedignos, conozcan tu ubicación exacta.

Referencia

Imagen: Tom Curtis / FreeDigitalPhotos.net


“Se solicita experto en béisbol, estadística y minería de datos”

mayo 12, 2010

En Febrero pasado, estaba viendo los anuncios de trabajo para especialistas en minería de datos. La mayoría de las ofertas de este tipo se encuentran en bancos, consultoras y en el áreas comercial/mercadotecnia de empresas de productos y/o servicios. De todas las ofertas que vi, una llamó poderosamente mi atención:

Título: Analista de béisbol  (Indios de Cleveland)
Los candidatos deberían poseer como mínimo una maestría, amplia experiencia en análisis estadístico y minería de datos además de uso de software especializado. Deberían poseer  conocimiento experto en sabermetrics, que es el análisis del béisbol mediante la evidencia, en pos de la objetividad.

Definitivamente era el trabajo soñado para un experto y apasionado en béisbol y  análisis estadístico/minería. Sin embargo, ¿cuántas personas hay cuyas áreas de experiencia sean ésas? Dudo que abunden. Así, me quedé con la curiosidad sobre cuánto tiempo tardarían en encontrar quien cubriera el puesto. ¡Y ayer supe que ya se cubrió!

El experto se llama Sky Andrecheck, un profesional en estadística que es experto en béisbol, quien manifestó sentirse afortunado pues este tipo de trabajos no abundan.

Muchos podrán decir que tuvo suerte pero no es así. Nada llega solo, la perseverancia y el trabajo constante son atributos que pasan inadvertidos para aquellos que creen que la suerte les llegará solo con desear las cosas.

Photo by Flickr user wallyg, licensed under CC 2.0


Prediciendo el comportamiento humano

mayo 6, 2010

Predecir eventos, accidentes, comportamiento, ha sido siempre una inquietud del ser humano. Experimentos  de este tipo se realizan frecuentemente sobre el clima, el comportamiento de animales, de las bacterias, el tráfico, la contaminación.  En resumen, se realizan sobre entidades que no se quejarán de invasión a la privacidad. Cuando se realizan experimentos donde el objetivo es predecir el comportamiento de humanos la situación cambia pues deben seguirse protocolos de permisos para uso de los datos; de otra manera, se corre el riesgo de una demanda. Sin embargo, la gente deja en las redes sociales innumerables patrones que pueden ser usados para predecir su comportamiento. Los humanos estamos continuamente expuestos a ser medidos en nuestras actividades diarias, por ejemplo, cada vez que pagamos con tarjeta de crédito, que hacemos una llamada telefónica, que escribimos un correo electrónico. Si se hace un análisis de esos registros resulta ser que no sólo estamos dejando nuestro pasado, sino dejando la información para poder predecir nuestras actividades futuras.

Este es precisamente el tema de un nuevo libro: Bursts The Hidden Pattern Behind Everything We Do. Un aspecto muy interesante de este lanzamiento es que, asociado a él se está desarrollando un experimento sobre la dinámica del comportamiento humano. En este sitio el libro está disponible pero cada palabra está cubierta por un rectángulo. Cada usuario puede “adoptar” una palabra, y en ese momento, todas las palabras adoptadas por otros le son mostradas. Cada usuario puede desplegar el libro completo adivinando un número de palabras cubiertas ya que cada palabra adivinada correctamente le hace ganar puntos que le permiten descubrir más texto.

El autor plantea la idea de una nueva generación de redes sociales que ofrezcan no únicamente un atisbo a los pensamientos e ideas actuales sino un vistazo al futuro.

Considero que las predicciones se realizan; que no se difundan para evitar problemas legales, es otra cosa.

Fuentes:

Presentación del autor

www.brsts.com


¿Qué es la minería de datos?

abril 25, 2010

Cuando hacemos compras o registramos nuestro perfil en una red social estamos generando datos que contienen, de forma implícita, información que puede ser muy valiosa. Aunque no nos percatemos de ello, generalmente tenemos patrones de compra, de comportamiento, de cómo navegamos, entre muchos otros, que pueden ser encontrados mediante técnicas automáticas. Para encontrar este tipo de patrones, segmentar datos, clasificarlos se usa la minería de datos, también conocida como KDD (Knowledge Discovery in Databases).

La definición clásica (William J. Frawley)  dice que:

La minería de datos es la extracción de información implícita, desconocida y potencialmente útil a partir de datos.

Sin embargo, la definición que más me gusta, atribuida al profesor de química Fred Mengler es:

La minería de datos no es mas que torturar los datos hasta que confiesen… y si los torturas lo suficiente, los harás confesar cualquier cosa.

La cita es muy descriptiva de lo que es un proceso minero.

La minería de datos se ha aplicado en áreas como las siguientes:

  • Medicina: biomedicina, efectos colaterales de medicamentos, análisis de secuencias genéticas y predicción.
  • Finanzas: aprobación de créditos, predicción de quiebras, predicción en el mercado de valores, detección de fraudes, detección de acceso no autorizado a datos de crédito.
  • Agricultura: clasificación de enfermedades en tomates y soya.
  • Social: datos demográficos, tendencias electorales.
  • Mercadotecnia y ventas: identificación de sub-grupos socioeconómicos que muestran comportamiento inusual, patrones de compra, análisis de productos.
  • Publicidad: ediciones personalizadas.

Actualmente, con el cúmulo de información que los medios digitales generan, existen áreas donde la minería es útil: minería de web, minería de blogs, minería de opinión, minería de sentimientos entre muchas otras aplicaciones que se abren conforme el uso de las tecnologías se extiende.

Suena bien pero, ¿cómo se hace?. Un proceso de minería básico consta de los siguientes pasos:

  1. Adquisición de datos. ¿De dónde los voy a obtener? ¿cuáles serán mis fuentes?
  2. Análisis de los datos. ¿De qué tipo son los datos?, ¿numéricos?, ¿cadenas?, ¿faltan datos?, ¿tienen estructura?, ¿qué propiedades tienen?. En esta fase es común graficar los datos, ver histogramas, etc. para darse una idea general del comportamiento de los datos, irlos conociendo, familiarizarse con ellos. Algo que suele pasar es que conforme los usas, los conoces tanto que al verlos, puedes tener una idea de qué pasará en las fases siguientes.
  3. Selección de técnicas a aplicar. De acuerdo a las propiedades de los datos, se eligen los algoritmos para obtener los modelos que mejor describan los datos. Es bueno usar varios algoritmos para analizar distintos tipos de resultado. Las técnicas más comunes son los árboles de decisión, reglas de asociación, regresión lineal y agrupamientos (clustering).
  4. Transformación. Una vez que se han seleccionado los algoritmos, se les da el formato apropiado.
  5. Obtener y evaluar el modelo.Se genera el modelo y se analiza la salida: variables relevantes, relaciones entre variables, etc. La validez del modelo generalmente se verifica mediante métodos estadísticos.

Los pasos 1-4 son las que más tiempo consumen. Tal vez un 80% del tiempo del proceso total nos la vamos a pasar adquiriendo, limpiando, dando formato, en pocas palabras, pre-procesando los datos.

El descubrimiento de datos lleva implícito problemas de ética, invasión de privacidad que deben ser considerados. Recientemente una competencia fué cancelada por este motivo.

La minería de datos es un área que ha ido evolucionando, extendiéndose. Descubrir información oculta o que a partir de ella se pueda predecir algo sin necesidad de una bola de cristal es una actividad que puede ser muy divertida.

Referencias:
Knowledge Discovery in Databases: An Overview
http://dataminingarticles.com/

Imagen: Suat Eman / FreeDigitalPhotos.net


de pepitas de oro y espinacas

diciembre 17, 2009

La fiebre del oro atrajo a mucha gente a los lechos de los ríos con la esperanza de hacerse rica. En un principio, la alta concentración de oro en la arena hacía fácil extraerlo usando un proceso de cribado. El cribado es análogo a un proceso de colado pero aplicado a agricultura para lavar  semillas y aplicado a la minería para lavar minerales. Conforme la concentración del oro decrecía se necesitó automatizar el proceso para poder buscar en cantidades mayores de arena.

Si en vez de arena tenemos conjuntos de datos sin aparente significado, el oro se convierte en la información que del conjunto puede extraerse. En vez de cribar, al proceso no-trivial de extraer información útil se le llama minería de datos (W. Frawley).

Generalmente ese proceso es como lavar espinacas. Inicias con manojos enormes y sucios y terminas con un montón pequeño, verde y bonito.

Image: Simon Howden / FreeDigitalPhotos.net


A %d blogueros les gusta esto: