Datos – S3lab http://s3lab.deusto.es S3lab Security Blog Wed, 06 May 2020 12:51:35 +0000 es hourly 1 https://wordpress.org/?v=5.1.5 Adaptando el scam a los tiempos que corren http://s3lab.deusto.es/adaptando-scam-tiempos/ Sat, 28 Jan 2017 11:33:05 +0000 http://s3lab.deusto.es/?p=8794 Desde tiempos remotos, el scam ha sido una práctica llevada a cabo por estafadores, comúnmente conocidos como scammers, con el fin de obtener un beneficio (normalmente económico) a través del engaño o técnicas de ingeniería social. El número de campañas

The post Adaptando el scam a los tiempos que corren appeared first on S3lab.

]]>
Desde tiempos remotos, el scam ha sido una práctica llevada a cabo por estafadores, comúnmente conocidos como scammers, con el fin de obtener un beneficio (normalmente económico) a través del engaño o técnicas de ingeniería social. El número de campañas conocidas es gigantesca y, por desgracia, se incrementa a medida que avanzan los medios de comunicación.

Como hemos dicho, esto no es nada novedoso, uno de los casos más antiguos es el conocido scam del «prisionero español», en el que la víctima generalmente recibía una carta en la que se explicaba que una persona de gran importancia había sido encarcelada en España, y se le ofrecía una gran cantidad de dinero a cambio de contribuir económicamente a su liberación. A lo largo de los años se han producido distintas variantes de este tipo de scam, pero siempre compartiendo el mismo propósito, pedir dinero a la víctima para ayudar en algún tipo de situación, a cambio de recibir una mayor cantidad una vez terminado el proceso.

Avanzado el tiempo, surgen nuevos medios de comunicación, y los scammers se adaptan a dichos medios para usarlos como canales de distribución. El primer ejemplo más claro es el uso de las llamadas telefónicas y los mensajes SMS, lo que les permitió llegar a un mayor número de víctimas con menos esfuerzo. Probablemente el medio de distribución de scam más conocido es el email. Una vez que el email empezó a obtener usuarios ampliamente, y gracias a la capacidad de los ordenadores para automatizar tareas sin apenas necesidad de intervención, éste ha resultado ser el método de distribución de scam más explotado durante los últimos años.

Pero esto no acaba aquí, los scammers buscan (y encuentran) nuevos métodos de distribución conforme la tecnología avanza y se desarrollan nuevos medios de comunicación. Hace ya tiempo que las redes sociales se establecieron como objetivo de los scammers, aprovechando la credibilidad que proporciona un perfil de usuario (más o menos elaborado) para engañar a las víctimas. Por otra parte, es habitual encontrar páginas de noticias, blogs, etc. que incorporan sistemas de comentarios para sus usuarios, pero desgraciadamente, también suponen una vía para el envío indiscriminado de mensajes de scam, fijando como objetivo los sitios con más usuarios para aumentar la probabilidad de que alguno caiga.

Debido al crecimiento continuo del scam y sus variedades, se han ido formando distintas organizaciones que registran cada caso y trabajan para prevenir que más personas los sufran, lo que resulta fundamental, ya que solo en Australia se estima una pérdida de alrededor de 80M$ en el 2016. Es recomendable seguir los consejos que ofrecen estas organizaciones, pero la mayor herramienta contra el scam es el sentido común.

The post Adaptando el scam a los tiempos que corren appeared first on S3lab.

]]>
La información es poder http://s3lab.deusto.es/la-informacion-poder/ Tue, 17 May 2016 09:55:27 +0000 http://s3lab.deusto.es/?p=8160 Informacion. ¿Alguien duda de que tener la suficiente información no es media victoria? La frase “la informacion es poder”, no se dijo por decir. En la seguridad, tener la información necesaria es vital para saber por donde movernos, que elementos

The post La información es poder appeared first on S3lab.

]]>
filesPowerInformacion. ¿Alguien duda de que tener la suficiente información no es media victoria? La frase “la informacion es poder”, no se dijo por decir. En la seguridad, tener la información necesaria es vital para saber por donde movernos, que elementos existen y cuales se pueden testear y romper más facilmente. Este último ya os digo yo cual es, la persona que está delante del ordenador. Sabiendo de la importancia de este paso en seguridad, cada día aparecen más y más herramientas potentisimas para ayudarnos en esta tarea. Hoy nos vamos a centrar en la herramietna de Gathering recon-ng. Esta herramienta esta escrita en python y es modular. Podemos hacer nuestros propios modulos y “a dar cera”.

En recon-ng podemos gestionar diferentes analisis de diferentes web. Estos están divididos en workspaces. Cada workspace tiene sus propias caracteristicas. Vamos a empezar con crear el workspace de s3lab metiendo su dominio (workspace add s3lab seguido de domain add s3lab.deusto.es) para ver que nuestro dominio esta bien metido, utilizamos show domains. Tambien metemos la compañía con el comando add companies. Con este comando, nos propondra los parametros que debemos insertar. La compañía y su descripcion. Yo suelo poner la url del dominio o la del dominio principal. Con el comando show companies nos muestra lo que hemos metido. El comando show es muy importante, ya que lo utilizaremos para poder ver todas las opciones de los diferentes modulos, así como los datos que hemos ido recuperando.

Una vez que vemos que esta metido tal y como nosotros queremos, vamos a ver que modulos podemos ejecutar. Para ello metemos show modules. Este comando nos mostrara todos los modulos que tiene recon-ng. Estos modulos estan divididos según su objetivo. Estan los de importacion y exportacion, los de recon, los de explotacion y los de descubrimiento. Estos modulos suelen ser bastante intuitivos en la parte de los nombres. La primera parte pertenece al grupo de modulos en el que se encuentra, la segunda parte, salvo en el caso de importacion y exportacion, pertene a la clasificacion de los modulos concretos, tipo de explotacion que se hace o en base a qué se quiere obtener información y transformalo en otro elemento. Es decir, domains-hosts obtiene, partiendo de un dominio, todos los host que ese metodo obtenga. Es simple y una vez que empieces a jugar con ello, veras que es sencillo.

Tambien se pueden filtrar los modulos según el objetivo que queramos conseguir. Por ejemplo, por ahora solo tenemos un dominio. Necesitamos obtener host. Con el comando load domains-host filtraremos todos los modulos que nos permiten hacer esto. Ahora, con el comando load y el modulo entero, cargaremos dicho modulo para poder usarlo. Si queremos ver sus opciones, podemos utilizar show options pero yo recomiendo utilizar show info la primera vez para poder ver todas las opciones que tiene y cuales son pode defecto y como modificarlas. Algunos de los modulos necesitan una API key para funcionar, pero en cuanto lo ejecutas, te lo dice y te dice como meterla, el problema es conseguirla, aunque la mayoria suelen ser gratuitas. Para este ejemplo, yo he lanzado todos los modulos de domains-host y la tabla de hosts han aparecido 9 nuevos host sobre los cuales jugar. Para verlos, ejecutamos show hosts. El problema es que muchas veces, estos host suelen no pertenecer al sitio original. Esto se debe a los malditos rastreadores y balizas que hay en las webs y que este programa también recoge. Pero no pasa nada, con el comando delete host ID podemos eliminar los host que sabemos que no nos sirven.

Una vez que ya tenemos todos los host que queremos, podemos pasar a otro tipo de modulo. Si queremos partir de los hosts, con el comando load hosts- nos enseñara las opciones que tenemos. Por ejemplo, una cosa interesante es saber donde se encuentran los servidores que estamos analizando. Esto se puede hacer en base a la IP del servidor. Con los modulos de resolve, freegeoip, ipinfodb y reverse_resolve podemos obtener las IPs y las localizaciones de dichos servidores. Además, con algunos de estos modulos, si los servidores tienen algun que otro fallo de seguridad, irá saliendo. Para seguir jugando con las localizaciones, podemos obtener unicamente los modulos de localizacion con el comando load locations-.

Otra informacion importante de las empresas para poder conseguir cosas es saber quien trabaja en ella. Existen muchas formas y herrameintas para lograr este objetivo y recon-ng tambien tiene unos pocos modulos para ello. Con el comando load contacts nos mostrara cuales son. Un ejemplo que se puede aplicar al resto de modulos es el uso de las querys para modificar sobre que queremos buscar. Con el modulo de pgp_search, y viendo en la informacion como es el SOURCE (una query), podemos modificarla para que en vez de buscar en los dominios, busque en los hosts. El comando seria set SOURCE query SELECT DISTINCT host FROM hosts WHERE host IS NOT NULL. Este paso no suele dar resultados, pero hemos visto como modificar las querys de consulta de cada modulo para poder realizar las busquedas sobre lo que nosotros queramos.

Desde aquí para adelante, os dejo jugar a vosotros con la herramienta y sus diferentes modulos de twitter, linkedin o instagram entre otros. Como consejo, os diria que aunque ya hayais ejecutado un modulo, los resultados de otros modulos generan nuevos elementos que hay que volver a analizar, por lo que hay que armarse de paciencia y volver a realizar todas las busquedas que creamos necesarias hasta que tengamos la suficiente información. Esto en base a nuestro criterio, claro. Con el comando show dashboard nos muestra todo lo que tenemos y hemos ejecutado. Por ultimo, de todo analisis tiene que tener un resumen. Para ello, esta herramienta tiene los modulos de reporting. El de html esta muy bien.

Happy Hunting!!

The post La información es poder appeared first on S3lab.

]]>
WEKA, de los datos a la información (Parte III) http://s3lab.deusto.es/weka-de-los-datos-a-la-informacion-parte-3/ Tue, 16 Jun 2015 09:55:26 +0000 http://s3lab.deusto.es/?p=3965 Volvemos con un nuevo artículo sobre WEKA. Tras la introducción a Weka en la que vimos cómo preparar el entorno y utilizar algunas funciones básicas, y la segunda parte en la que tratamos de profundizar un poco más en esta

The post WEKA, de los datos a la información (Parte III) appeared first on S3lab.

]]>
Volvemos con un nuevo artículo sobre WEKA. Tras la introducción a Weka en la que vimos cómo preparar el entorno y utilizar algunas funciones básicas, y la segunda parte en la que tratamos de profundizar un poco más en esta herramienta, ahora toca hacer algunas pruebas clasificando textos. Y qué utilidad tiene esto de analizar texto se preguntará alguno, pues nos encontramos este tipo de tecnología en nuestro día a día, cuando recibimos sugerencias sobre productos que puedan interesarnos o, al contrario, dejamos de recibir ese tan molesto spam, para clasificar automáticamente documentos o cuando simplemente realizamos una consulta en nuestro buscador de internet preferido.

Weka3-1Para empezar a jugar, vamos a descargar un conjunto de datos que contiene una buena cantidad de muestras de correo electrónico legítimo y correo electrónico ilegítimo (spam): SpamAssassin. Si abrimos este conjunto de datos con WEKA e intentamos realizar alguna clasificación como la vista en los artículos anteriores, veremos que la gran mayoría de algoritmos no están disponibles (aparecen en un tono grisáceo). Si volvemos a la pestaña de pre-procesado y nos fijamos en los atributos del conjunto de datos, podemos observar que solo cuenta con dos: el contenido del e-mail, de tipo texto (text) y la clase, spam/legitimate ($category$). Si bien ya habíamos trabajado anteriormente con el tipo nominal (el tipo de la variable clase) el tipo texto es nuevo, y para poder trabajar con él debemos adaptarlo a las necesidades de los clasificadores. El motivo principal: la gran mayoría de algoritmos con los que vamos a realizar pruebas no “entienden” el texto, con lo que debemos “traducirlo” a variables numéricas.

Weka3-2Y aquí es donde entra el Modelo de espacio vectorial (del inglés, VSM), que se encarga de representar esas palabras que encontramos en el contenido textual en un espacio vectorial de modo que los algoritmos de aprendizaje automático de WEKA puedan trabajar con ellos. Para representar nuestros mails de esta forma, debemos ir al apartado de pre-procesado en WEKA y seleccionar el filtro “StringToWordVector” que podemos encontrar en: filters-unsupervised-attribute.

Lo mejor que podemos hacer para ver las transformaciones es aplicar el filtro con las opciones por defecto, guardar el conjunto de datos transformado (añadiéndole el sufijo “_BOW” por ejemplo, del inglés Bag Of Words) y ver los resultados. Si abrimos el nuevo “Spam_Assassin_BOW” con un editor de textos, veremos que ya no tenemos solo 2 variables. Lo que hemos hecho es conservar la variable que contiene la categoría, el tipo de mensaje, y convertir la variable de tipo texto en todos los términos encontrados en el contenido de todos los mensajes del conjunto de datos. Si bajamos hasta la sección que contiene los datos (@data), podremos observar como cada e-mail se ha representado a través de parejas de números, correspondiendo el primero de ellos al número de atributo y el segundo a la aparición del mismo o no (1 o 0) en dicha instancia. Si bien de esta forma ya podemos representar ese texto de una forma matemática, la simple indicación de si un e-mail contiene o no un término no es un método muy preciso (ya que por ejemplo podría aparecer múltiples veces y no verse aquí reflejado). Así, accediendo a las opciones del filtro podremos incluir nuevas transformaciones que nos proporcionen un conjunto de datos más adecuado.

Weka3-3

En primer lugar, nos encontramos con las transformaciones TF e IDF. Con la primera de ellas conseguimos la frecuencia de los términos en los documentos, es decir, la relevancia de cada palabra respecto al documento (al e-mail), en base a la extensión y número de apariciones. Con la segunda, frecuencia inversa de documento, obtenemos la relevancia de cada término respecto a la colección, es decir, si un término es representativo no solo para un documento sino para todo el conjunto.

Weka3-4Juntando ambas transformaciones conseguimos una representación mucho más interesante para nuestro conjunto de datos. Probemos ahora a aplicar cada una de las combinaciones y guardemos los resultados (“Spam_Assassin_TF”, “Spam_Assassin_IDF” y “Spam_Assassin_TFIDF”) para después compararlos abriéndolos con un editor de texto. Si seguimos investigando las opciones nos encontramos con otras como los atributos sobre los que queremos operar (attributeIndices), si queremos obtener las frecuencias de los términos por clase o respecto a toda la colección (doNotOperateOnPerClassBasis), si queremos reducir los términos a su raíz (stemmer), las palabras que queremos eliminar por carecer de valor semántico (stopWords), la forma de obtener los términos (tokenizer) o las palabras a quedarse por cada clase (wordsToKeep). Para obtener más información podemos pinchar en la opción “More”, que nos ofrecerá una descripción de cada una de las opciones disponibles.

Ahora que ya podemos dar por finalizada la representación de nuestro conjunto de datos de forma que los algoritmos de clasificación de WEKA puedan entenderlos, podemos pasar a la pestaña “Classify”, probar algunos de los algoritmos y valorar su funcionamiento siguiendo las medidas de calidad deseadas. No nos olvidemos por cierto de seleccionar el atributo clase antes de iniciar la clasificación (en la misma sección de clasificación) después de seleccionar el algoritmo deseado, o bien de reordenar los atributos como vimos en entradas anteriores. Y con esto ya tenemos el conocimiento básico para crear un clasificador de documentos.

Ahora solo queda decidir a cuál de las múltiples áreas que existen actualmente queremos aplicar estos métodos y, después, descubrir la forma de conseguir la mayor cantidad de datos (a poder ser de forma legal) para entrenarlos y conseguir así el mejor funcionamiento posible. Porque recordad, el conocimiento es poder y hoy en día ese conocimiento se fundamenta en nuestros datos.

The post WEKA, de los datos a la información (Parte III) appeared first on S3lab.

]]>
WEKA, de los datos a la información (Parte II) http://s3lab.deusto.es/weka-de-los-datos-a-la-informacion-parte-2/ Tue, 10 Mar 2015 10:55:49 +0000 http://s3lab.deusto.es/?p=3437 Después de introducción a Weka que vimos hace unas semanas, en el post de hoy trataremos de profundizar un poco más en esta herramienta. Para empezar, vamos a descargar un conjunto de datos nuevo con características sobre la producción vinícola: wine.arff.

The post WEKA, de los datos a la información (Parte II) appeared first on S3lab.

]]>
WekaWine

Después de introducción a Weka que vimos hace unas semanas, en el post de hoy trataremos de profundizar un poco más en esta herramienta. Para empezar, vamos a descargar un conjunto de datos nuevo con características sobre la producción vinícola: wine.arff. Para visualizar su contenido, podemos abrirlo directamente y seleccionar Weka como herramienta predeterminada o dentro de la sección Explorer y pestaña Preprocess, abrir el fichero.

Si repasamos los atributos del dataset, vemos que aparece como primero de ellos “class”, la clase de cada uno de los elementos que lo componen. En este caso tenemos las clases 1, 2 y 3, correspondientes a diferentes categorías de vino. Por defecto, Weka entiende que el último atributo será la clase de cada uno de esos elementos, por lo que lo primero que vamos a hacer es jugar un poco con los filtros para transformar nuestros datos. Abrimos entonces la sección Filter dentro de la misma pestaña Preprocess. Ahí vemos una gran cantidad de opciones, veremos algunas de ellas en ésta y en próximas entregas. Ahora seleccionamos unsupervised-attribute-REORDER. Este filtro nos permite ordenar nuestros atributos. Una vez seleccionado pinchamos en el nombre del propio filtro y nos aparecerá una ventana con opciones.

Cambiamos los parámetros de attributeIndices por “2-last,first” y pulsamos OK. Después seleccionamos Apply. Esos parámetros nos permiten reordenar los atributos a nuestro antojo de una forma sencilla (nótese que estos cambios no se han guardado en el fichero del conjunto de datos, están en memoria, si queremos conservarlos, deberemos guardarlos mediante la opción Save). Si el resultado del filtro aplicado no termina de convencernos, siempre podemos volver al estado anterior mediante la opción Undo. Probemos una clasificación rápida (e.g., Naive Bayes) y veamos los resultados. Son buenos pero siempre se puede intentar mejorarlos tratando un poco más nuestro conjunto de datos.

SmoteAntes de seguir viendo filtros, vamos a descubrir una nueva funcionalidad disponible en Weka desde la versión 3.7, el gestor de paquetes. Cerramos la ventana del Explorer y dentro de la ventana inicial seleccionamos Tools-Package Manager. Aquí tenemos un listado de módulos que ofrecen nuevas opciones a las ya de por si extensas disponibles por defecto. Busquemos por ejemplo el paquete SMOTE dentro de la categoría Preprocessing y lo instalamos. Este filtro genera nuevas muestras de forma sintética, lo que ayudará en los casos en los que el número de elementos empleados para generar el modelo (el “conocimiento”) no es demasiado extenso, como puede ser el caso de nuestro dataset de vinos. Porque recordemos, al igual que en la vida real, cuanto mayor es nuestro conocimiento mayor es nuestra capacidad de identificar elementos, de clasificarlos.

Volvemos al explorador y buscamos el filtro supervised-instance-SMOTE. Sin cambiar los parámetros de configuración del filtro, lo aplicamos. Vemos que pasamos de 178 instancias (elementos) a 226. Si probamos a clasificar de nuevo con el mismo algoritmo de antes, se puede apreciar una ligera mejoría en los resultados.

Y con ésto terminamos por hoy. Próximamente veremos cómo aplicar este tipo de algoritmos a textos, porque si alguno ha encontrado o generado un conjunto de datos con, por ejemplo, contenido de webs, tweets o e-mails habrá observado que no era posible realizar la clasificación siguiendo los pasos vistos hasta ahora. Con ello empezaremos a adentrarnos en el extenso mundo de la clasificación automática de textos, una de las bases para multitud de herramientas que usamos día a día.

The post WEKA, de los datos a la información (Parte II) appeared first on S3lab.

]]>
WEKA, de los datos a la información (Parte I) http://s3lab.deusto.es/weka-de-los-datos-a-la-informacion-parte-1/ Tue, 03 Feb 2015 11:00:04 +0000 http://s3lab.deusto.es/?p=3107 Comenzaremos con lo básico, la instalación y familiarización con la herramienta, y un ejemplo sencillo para ver sus posibilidades. Pasemos entonces a descargar WEKA desde la web de la Universidad de Waikato, en Nueva Zelanda. Dentro de su sección de descargas,

The post WEKA, de los datos a la información (Parte I) appeared first on S3lab.

]]>
weka1Comenzaremos con lo básico, la instalación y familiarización con la herramienta, y un ejemplo sencillo para ver sus posibilidades. Pasemos entonces a descargar WEKA desde la web de la Universidad de Waikato, en Nueva Zelanda. Dentro de su sección de descargas, buscaremos la versión para desarrolladores (developers) y así tendremos la versión más actualizada (3-7).

Una vez descargado e instalado, antes de comenzar a usarlo, deberemos buscar en el directorio de instalación de WEKA el fichero “RunWeka.ini” y modificar la línea “maxheap=” para aumentar la capacidad de la máquina virtual de Java y posibilitar así trabajar con volúmenes de datos más importantes. Un buen valor podría ser, siempre dependiendo de la cantidad de memoria RAM disponible, 4 gigas, quedando la línea entonces como: “maxheap=4G”. Ahora sí, ejecutamos WEKA. Para empezar, tenemos dos opciones de ejecución, “con” y “sin” consola. El primero nos ofrece constante feedback sobre lo que vayamos haciendo con la herramienta y puede ser de gran utilidad cuando nos encontremos con algún error durante el análisis de nuestros datos. Una vez iniciado WEKA, nos encontramos con varias opciones.La opción Explorer nos ofrece la posibilidad de trabajar con nuestro conjunto de datos, visualizarlo y pre-procesarlo, y por supuesto también realizar análisis y clasificaciones. La opción Experimenter nos permite, una vez tenemos nuestros datos preparados, realizar análisis de forma más automatizada/masiva. KnowledgeFlow es una herramienta que nos ayuda a crear un flujo de análisis de forma muy visual, arrastrando elementos al espacio de trabajo. Por último SimpleCLI nos permite realizar el tratamiento y análisis desde consola. En este artículo, nos limitaremos a conocer un poco la herramienta Explorer, vamos con ello.

weka2Como vemos, nos encontramos diversas pestañas con una serie de opciones para tratamiento (Preprocess), clasificación (Classify-Cluster-Associate-Select attributes) y visualización de datos (Visualize). Por el momento vemos que la mayoría de opciones se encuentran desactivadas, el motivo, necesitamos cargar un conjunto de datos. Uno clásico para pruebas en WEKA es el de Iris, pero podemos escoger cualquiera o crear uno nosotros mismos en alguno de los formatos soportados (entre los que se incluye por ejemplo el formato csv). Si abrimos alguno de los ficheros con formato ARFF (específico de WEKA), podemos observar una primera sección de atributos, definidos mediante “@ATTRIBUTE”, y la sección de los datos propiamente dichos, delimitada por “@DATA”. Cada una de las líneas de la sección de datos (e.g., “5.1,3.5,1.4,0.2,Iris-setosa”) nos indican el valor tomado por cada uno de los atributos, siendo en este caso el último la clase de Iris de esa muestra.

Ahora sí, una vez cargado el conjunto de datos en WEKA, se nos activan todas las opciones y podemos comenzar a jugar con ellos. En la parte izquierda, podemos ver los atributos y si seleccionamos alguno de ellos veremos en la derecha los valores que toman. Por ejemplo, si seleccionamos el atributo “class” WEKA nos mostrará los diferentes tipos de Iris que componen el conjunto de datos: Iris-setosa, Iris-versicolor-Iris-virginica (en este caso con 50 instancias de cada una). En la parte izquierda, podemos ver los atributos y si seleccionamos alguno de ellos veremos en la derecha los valores que toman. Por ejemplo, si seleccionamos el atributo “class” WEKA nos mostrará los diferentes tipos de Iris que componen el conjunto de datos: Iris-setosa, Iris-versicolor-Iris-virginica (en este caso con 50 instancias de cada una). Una opción muy interesante en esta sección es la de Filter, que nos permitirá pre-procesar el conjunto de datos, eliminando atributos, ordenándolos, realizando transformaciones de los datos o, incluso, generando muestras de forma sintética. En próximas entradas iremos analizando estas opciones con más detalle para ver las inmensas posibilidades que ofrecen. Por el momento, y para ir acabando por hoy, pasemos a la pestaña de clasificación.

weka3Aquí nos encontramos en primer lugar con la selección del clasificador (Classifier), donde podremos elegir qué algoritmo será el que determine el valor del atributo que queremos clasificar, en este caso “class”, la clase de Iris. Podemos observar que algunos algoritmos están desactivados, esto se debe al tipo de datos que tenemos cargados (también en próximas entregas, veremos con más detalle las limitaciones que tienen algunos algoritmos de clasificación y cómo solucionarlas). Por último, dentro de las opciones de prueba (Test options) nos encontramos con diversas posibilidades de cara a evaluar el funcionamiento de cada uno de los algoritmos que probemos. Por defecto tenemos seleccionada la validación cruzada (Cross-validation) con 10 folds. Este método divide el conjunto de datos en X subconjuntos, empleando X-1 para entrenar y 1 para comprobar, y realiza X iteraciones (siendo X el número de folds) este proceso.

Cuando se habla de entrenar y testear, muy resumido, los algoritmos analizan las características (atributos) del conjunto de entrenamiento y con eso generan los modelos de clasificación (el “conocimiento”) para después pasar a clasificar las muestras del conjunto de testeo en base a sus características. Ya que todo el conjunto de datos que estamos probando es conocido, es decir, conocemos la clase de Iris de cada una de las muestras, cuando el algoritmo termina de clasificar podemos comprobar si el resultado ha sido correcto. Esto nos indicará lo bien que lo hace cada uno de ellos y así decidir cuál será interesante utilizar cuando queramos emplearlo para clasificar muestras que son realmente desconocidas.

Pasemos entonces a hacer una prueba rápida. Seleccionamos dentro de los clasificadores NaiveBayes, dentro de Bayes, un clásico con una buena relación rendimiento-resultados, y comenzamos la clasificación (Start). A la derecha podremos ver el resultado obtenido por el algoritmo elegido. Aunque hoy no vamos a entrar a analizar en detalle estos resultados, podemos ver que ha conseguido clasificar correctamente un 96% de las muestras de prueba. Esto nos indica que, teóricamente, ante nuevas muestras desconocidas, facilitando atributos como la longitud y anchura de pétalo y sépalo, seríamos capaces de conocer el tipo de Iris que correspondería. Y con esto acabamos una toma de contacto muy rápida con WEKA, una potente herramienta para el tratamiento y análisis de datos. Como decíamos, en próximas entregas iremos profundizando para conocer con más detalle la infinidad de opciones que ofrece. Por el momento, ya podemos empezar a entender cómo funcionan estos sistemas, una de las piezas claves de este siglo XXI, el siglo del flujo de información, el análisis de datos y el profiling de usuarios.

The post WEKA, de los datos a la información (Parte I) appeared first on S3lab.

]]>
Comenzando como científico de datos http://s3lab.deusto.es/comenzando-como-cientifico-datos/ Tue, 13 Jan 2015 11:37:58 +0000 http://s3lab.deusto.es/?p=3040 Si hay algo por lo que ha caracterizado los últimos años es por el volumen de información. Gigas, Terabytes de datos por todos lados, almacenados en los más diversos lugares, al alcance de todos pero, ¿de qué sirve tanto dato

The post Comenzando como científico de datos appeared first on S3lab.

]]>
Data ScientistSi hay algo por lo que ha caracterizado los últimos años es por el volumen de información. Gigas, Terabytes de datos por todos lados, almacenados en los más diversos lugares, al alcance de todos pero, ¿de qué sirve tanto dato si luego no hacemos nada con ellos?

Hay gente a la que nos encanta jugar con los datos. Ver que nos pueden ofrecer, que podemos obtener con ellos, si podemos adivinar el futuro gracias a ellos, … es realmente una ciencia apasionante. En los últimos años ha crecido el interes por gente que tenga la habilidad de manejar estos datos y poder sacar conclusiones de ellos. Esto se ha vuelto cada vez más necesario, pues hay grandes cantidades de empresas que almacenan datos pero no son capaces de sacar provecho de ellos. Así, ha nacido la figura del «científico de datos» o «data scientist», que no es más que alguién con amplios conocimientos en el campo de las matemáticas y que es capaz de interpretar datos para sacar conclusiones, predicciones o visualizaciones de ellos.

Hoy vamos a jugar un poco con los datos, y con una serie de herramientas que facilitan este manejo. Para empezar, necesitamos dos cosas. En primer lugar, los datos. En esta ocasión tenemos un conjunto de datos del hundimiento más célebre de la historia de la nautica: el Titanic (que además viene con concurso). Los datos nos los podemos bajar de aquí. Por otro lado, necesitamos un objetivo. Vamos a desarrollar una heurística para adivinar si un pasajero sobrevivió o no al hundimiento. En concreto, necesitamos una heurística que tenga una tasa de acierto superior al 80%. Ya tenemos todo lo necesario para empezar.

Para realizar el análisis, podemos usar cualquier herramienta. Nosotros vamos a utilizar Pandas, una biblioteca para el análisis de datos sobre Python. Esta biblioteca permite hacer operaciones sobre los datos y facilita mucho el manejo de ellos.

Antes de empezar a desarrollar una heurística, es importante familirizarse con el problema y con los datos. Pero en este caso, ¿va a ser sencillo, no? Todos sabemos la historia del Titanic, el hundimiento, y hemos visto en el cine o en libros cómo fueron aquellos angustiosos momentos. Veamos entonces el conjunto de datos que tenemos. En concreto, vamos a ver algunas de las variables del conjunto de datos.

  • survival: indica si la persona sobrevivió al incidente o no.
  • pcclass: indica la clase en la que viajaba el pasajero.
  • sex: indica el sexo del pasajero, male para los hombres y female para las mujeres.
  • age: edad del pasajero.

El conjunto de datos posee otros dastos, pero este puede ser un buen comienzo. Si hacemos caso al dicho clásico del mar («las mujeres y los niños primero»), con estas variables podemos hacer una buena predicción.

Es el momento de empezar a prepara un pequeño script que nos permita verificar si nuestra heurística es buena. Podemos empezar con este.

import pandas

    def obtener_prediccion(path_csv):
        """Metodo que implementa la heuristica"""
        return None

    if __name__ == '__main__':
        dataset = 'dataset/titanic_data.csv'
        # Obtenemos las predicciones y leemos el conjunto de datos.
        resultado_heuristica = obtener_prediccion(dataset)
        dataset = pandas.read_csv(dataset)

        # Aplicamos magia de Python, para crear un diccionario con el id del
        #  pasajero y si comprobar si ha sobrevivido o no
        sd = dict(zip(dataset.PassengerId, dataset.Survived))
        # Calculamos el porcentaje de supervivientes de nuestra heuristica
        correcto = 0

        for key in set(resultado_heuristica):
            if(resultado_heuristica[key] == sd[key]):
                correcto += 1
        print (100) * (correcto / float(len(resultado_heuristica))), "%"

Y ya tenemos listo nuestro banco de pruebas para probar. Ahora es el momento de probar heurísticas. Dado el conocimiento previo que tenemos, sabemos que si el pasajero es mujer tiene más probabilidades de sobrevivir que si es hombre, luego vamos a probar una heurística muy sencilla:

 def obtener_prediccion(path_csv):
        """Metodo que implementa la heuristica"""

        # Diccionario donde guardamos la predicción
        prediccion = {}

        # Leemos el fichero del csv
        df = pandas.read_csv(path_csv)

        # Por cado uno de ellos, calculamos los valores de la predicción
        for pasajero_index, pasajero in df.iterrows():
            #Agregamos la prediccion
            pasajero_id = pasajero['PassengerId']

            # Si el pasajero es muher, entonces predecimos que ha sobrevivido
            if (pasajero['Sex'] == "female"):
                prediccion[pasajero_id] = 1
            else:
                prediccion[pasajero_id] = 0
        return prediccion

Y con ello obtenemos el siguiente resultado:

78.6756453423 %

¡Ya estamos muy cerca, y sólo en el primer intento! Pero ¿cómo podemos mejorar el resultado? Con nuestro conocimiento de la materia. Por ejemplo, sabemos que no sólo las mujeres tenían preferencia en los botes salvavidas, sino que también los niños. Añadimos la condición a nuestra heurística.

 if (pasajero['Sex'] == "female" or pasajero['Age'] < 12) and (pasajero['Pclass'] == 1 or pasajero['Pclass'] == 2):
     prediccion[pasajero_id] = 1
 else:
     prediccion[pasajero_id] = 0

Y el resultado es:

80.0224466891 %

¡LO CONSEGUIMOS! Hemos desarrollado una heurística que es capaz de predecir si una persona fue superviviente del Titanic sólo sabiendo el sexo, la edad y la clase en la que viajaba.

Este es, de forma resumida, el trabajo de un científico de datos. Primero, es vital conocer el dominio sobre el que estamos trabajando. Posteriormente, es necesario recopilar los datos y adecuarlos para poder trabajar mejor con ellos. También es vital fijarse un objetivo (¿qué queremos saber?) y posteriormente generar los modelos para extraer esa información. Un último paso es utilizar esa información, bien sea a través de la visualización de los datos, a través de informes o dentro de una aplicación para mejorar su rendimiento.

Este trabajo ofrece muchas posibilidades y permite ver los hechos desde una perspectiva distinta. Es un trabajo cada vez más útil, dado el volumen de datos que manejamos. Al final, los datos no son más que el reflejo objetivo de la realidad, pero debemos tener cuidado. Únicamente muestran un parte de la realidad, y a los seres humanos nuestra imaginación y nuestros sesgos a menudo nos juegan malas pasadas.

Y tú, ¿cómo mejorarías la heurística?

PD: Este ejercicio forma parte de un curso de Udacity. Si te interesa adentrarte en este mundo, igual es un buen punto de partida.

The post Comenzando como científico de datos appeared first on S3lab.

]]>