Perseo es una solución Big Data para el análisis predictivo del comportamiento de agentes como usuarios en un centro comercial o máquinas en un entorno de producción. El objetivo del proyecto, que aún está en desarrollo, es poder predecir acciones o estados en el corto plazo, a partir de la monitorización continua de estas entidades.

perseo1

¿Por qué Perseo?

Con más de 13 mil millones de dispositivos ya conectados en el mundo, y varios millones que entran en funcionamiento cada semana, la enorme cantidad de datos en tiempo real abre abrumadores y emocionantes interrogantes que esperan contestación cuando se analicen áreas decisivas para nuestro bienestar.

La visión de Perseo es incorporar al paradigma de Big Data una herramienta para el tratamiento, análisis y predicción sobre estos flujos de datos. Como resultado, se pretende superar los límites de eficiencia y escalabilidad actuales en el manejo de estos datos (que pueden modelarse con un instrumento matemático como las series temporales) y, de esta forma, desarrollar una solución que permita a las empresas añadir y utilizar esta tecnología de forma sencilla. Perseo pondrá a disposición tanto la algoritmia de Spark, adaptada al manejo de series ordenadas de datos en el tiempo, como nuevos algoritmos implementados sobre este framework para resolver la problemática de las series temporales.

iot4

Aspectos innovadores

Entre los aspectos innovadores que presentamos, se propone la implementación de una plataforma Big Data, capaz de llevar a cabo el tratamiento y la visualización en tiempo real de comportamientos o acciones de entidades generadoras continuas de datos, como el dispositivo móvil de un usuario o una máquina industrial.

Para ello, en el proyecto se han propuesto algoritmos novedosos no incluidos en Spark, así como nuevas estructuras de datos que permiten el manejo de series temporales en un entorno distribuido, un problema no resuelto hasta el momento en Spark. Por último, se han adaptado los algoritmos previamente disponibles en Spark para su utilización con esta estructura de datos.

Las ventajas innovadoras de este enfoque son:

Objetivos técnicos

Entre los objetivos técnicos del proyecto, cabe citarse los siguientes:

Características técnicas y funcionales

La base fundamental de Perseo es el procesado de series temporales. Para ello, identificamos tres fases diferentes.

Perseo6

¿Por qué utilizamos Spark, Kafka y Cassandra?

Spark

spark\_2

El proyecto se basa en Spark como framework de procesado distribuido para garantizar la escalabilidad de la solución.

Para empezar, Spark es un framework de análisis distribuido en memoria y nos permite ir más allá de las operaciones en batch de Hadoop MapReduce: procesamiento de streaming, machine learning (MLlib), cálculo de grafos (GraphX), integración con lenguaje R (Spark R) y análisis interactivos.

Spark puede ejecutar análisis de varios órdenes de magnitud más rápido que los despliegues de Hadoop existentes. Esto significa una mayor interactividad, experimentación más rápida y mayor productividad para los analistas.

Se ha invertido bastante en clusters con Hadoop. Para Spark esto no es un problema puede coexistir con las instalaciones existentes de Hadoop y añadir nuevas funcionalidades. Spark se integra perfectamente con Hadoop y en muchos de nuestros proyectos utilizamos/almacenamos los datos que están en el sistema de fichero de Hadoop HDFS y/o ejecutamos los procesos de Spark usando YARN de Hadoop 2.0. Además puede funcionar con muchos otros productos de Big Data como: CassandraDB, Google Big Query, almacenamiento de Amazon S3, ElasticSearch, etc.

SQL es la lingua franca del mundo de datos estructurados y el módulo Spark Sql es capaz de usar fuentes de datos existentes (HIVE, CassandraDB, MongoDB, JDBC, etc). Se puede usar para gestionar las fuentes internas de datos (RDDs - DataFrames) como si fueran tablas estructuradas.

Cuando una tecnología encanta a los desarrolladores se convierten en early adopters y empiezan a usarla y disfrutarla. Spark es un ejemplo de esto, cuando usan Spark solo tienen que dedicarse a resolver el problema. Spark se ha programado con el lenguaje Scala que es un nuevo lenguaje funcional y orientado a objetos. Además se puede programar en Python, R e incluso en Java.

El tándem Kafka + Spark + NOSql + Scala que forman la Arquitectura Kappa se está convirtiendo en la solución más demandada en proyectos Big Data.

Kafka

kafka-logo-wide

Un único Broker de Kafka puede manejar cientos de megabytes de lecturas y escrituras por segundo desde miles de clientes.

Kafka está diseñado para permitir que un solo cluster sirva como el eje central de datos para una organización grande. Puede ser ampliado elásticamente sin tiempo de inactividad.

Los mensajes se persisten en disco y se replican dentro del clúster para evitar la pérdida de datos. Cada Broker puede gestionar terabytes de mensajes sin impacto.

Kafka cuenta con un diseño de cluster-centric que ofrece durabilidad y garantías de tolerancia a fallos.

Cassandra

2000px-Cassandra\_logo.svg

Todos los nodos del clúster tiene el mismo rol. No hay un único punto de fallo. Los datos se distribuyen a través del clúster (por lo que cada nodo contiene datos diferentes). No existe un nodo maestro por lo que cada nodo puede dar servicio a cualquier solicitud.

Las estrategias de replicación son configurables. Cassandra está diseñado como un sistema distribuido para el despliegue de un gran número de nodos a través de múltiples centros de datos. La arquitectura distribuida de Cassandra está diseñada para desplegarse sobre múltiples data center, tener redundancia y recuperarse ante desastres.

El rendimiento de leer y escribir aumenta linealmente a medida que se añaden nuevos nodos. Se pueden agregar nuevos nodos sin necesidad de interrumpir la ejecución de la aplicación.

Los datos se replican automáticamente a múltiples nodos para recuperarse frente a fallos. Cassandra soporta replicación a través de múltiples datacenter. Se puede reemplazar nodos que presenten fallos sin tiempo de inactividad o interrupción de la aplicación.

Se ofrece la elección del nivel de consistencia para las lecturas y escrituras.

Cassandra introduce CQL (Cassandra Query Language), una alternativa similar a SQL para la interfaz RPC tradicional.

Casos de uso

En Perseo hemos trabajado con dos casos de uso. En el primero de ellos, utilizamos algoritmos de clasificación para identificar, en tiempo real, qué acción está realizando un usuario. El segundo caso de uso consiste en la utilización de algoritmos de regresión para predecir valores de una serie temporal. En este caso hemos utilizado un conjunto de datos que representa la potencia energética de una casa inteligente.

Caso de Uso de acciones de usuario

Para este caso de uso hemos utilizado el siguiente dataset:

https://archive.ics.uci.edu/ml/datasets/Activity+Recognition+from+Single+Chest-Mounted+Accelerometer

Contiene los datos (sin calibrar) de un sensor acelerómetro. Hay registros de 15 participantes que realizan 7 actividades. El conjunto de datos proporciona desafíos para la identificación y autenticación de personas que utilizan los patrones de movimiento. Las actividades que puede realizar el usuario son:

Por lo tanto, lo que hacemos es analizar las posiciones X, Y y Z del acelerómetro para identificar la actividad a realizar. Cada una de estas tres coordenadas representa una serie temporal. El objetivo es analizar un segmento de varios segundos e indicar, automáticamente, qué acción se está llevando a cabo. En nuestros experimentos, utilizamos segmentos de 10 segundos. Dado que la frecuencia de muestreo del sensor es de 52 Hz, este segmento supone el procesado de 520 muestras por cada una de las coordenadas.

Para implementar el clasificador, hemos diseñado una estrategia en dos fases:

Los resultados obtenidos por los modelos han sido bastante óptimos. Por encima del resto, destaca el algoritmo de DecisionTree y de Random Forest. El mejor rendimiento de estos algoritmos en comparación con otros como la regresión logística o naïve Bayes refleja la naturaleza no lineal del problema de clasificación.

Caso de Uso de la potencia en una casa

Para este caso de uso hemos utilizado el siguiente dataset:

http://archive.ics.uci.edu/ml/datasets/Individual+household+electric+power+consumption

Contiene 2.075.259 muestras generadas entre Diciembre del 2006 y Noviembre de 2010, que hacen un total de 47 meses. Son muestras generadas cada minuto en una vivienda inteligente.

El dataset nos presentaba diferentes variables, pero nos hemos quedado con la potencia activa medida en Kw para hacer las predicciones sobre valores futuros.

Como hemos comentado anteriormente, el valor añadido de Perseo ha sido realizar predicciones en tiempo real sobre series temporales, para ello hemos implementado nuevos algoritmos de regresión en Spark (como redes neuronales de funciones de base radial, K vecinos próximos y optimización mediante mínimos cuadrados) y hemos adaptado los ya existentes en Spark para resolver predicciones de series temporales.

El modelado de la serie temporal se basa en técnicas machine learning. Así, a fin de modelar la dependencia entre el valor de la serie en un instante y su comportamiento en instantes anteriores, hemos tomado estos pares para entrenar un algoritmo experto.

Para resolver la problemática en cuanto a la ordenación de los valores en la serie, hemos creado la estructura TimeLabeledPoint, que contiene el valor objetivo, el instante de tiempo del mismo y el conjunto de valores previos. Este conjunto viene determinado por la longitud de la ventana de tiempo que el usuario ha de fijar. Así, se toman los N eventos anteriores para poder hacer una predicción, con N determinado por la longitud de la ventana y la frecuencia de muestreo de la serie. Los resultados han sido realmente buenos. Podemos ver una comparativa de los diferentes algoritmos utilizados:

Y en la siguiente imagen podemos ver una comparativa entre el valor real, y la predicción según el algoritmo linear regression basado en SGD y en OLS:

Contribución y valor añadido

El valor añadido del proyecto se basa en la predicción sobre el comportamiento inmediato de consumidores finales. Esta información puede proporcionar grandes beneficios a las empresas.

Otra de las contribuciones que hemos realizado en el proyecto es la creación de nuevos algoritmos que no estaban distribuidos en Spark.

Otra de las mayores aportaciones ha sido la realización de predicciones en series temporales, que es algo muy importante porque Spark no garantiza el orden.

Y por último la última contribución, es una capa visual para poder ir viendo en tiempo real las predicciones y poder monitorizar lo sucedido.

Cuéntanos qué te parece.

Enviar.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.