Analítica de Negocio en la nube: crea tu propio cuadro de mando

El Cloud Computing sigue abriéndose camino en el mundo de las aplicaciones empresariales, y cada vez se almacenan más datos en la nube. Los orígenes de datos clásicos para las plataformas de Business Intelligence y de Analítica de negocio son las bases de datos, pero cada vez tenemos más datos desestructurados, no controlados por un motor relacional, a los que se accede a través de API's y aplicaciones, y que también hay que analizar porque pueden ser de vital importancia para el negocio.

En el portal developerWorks, de IBM, he leído el artículo Cloud business analytics: Write your own dashboard, de Noah Gift, que explica la importancia de llevar la Analítica de Negocio también a la nube, y aporta un pequeño ejemplo práctico de cómo hacerlo.

Lo he encontrado tan interesante que me ha parecido buena idea traducirlo, así que aquí está:  

Analítica de negocio en la nube: Crea tu propio dashboard 


Resumen

La analítica de negocio y la computación en la nube son temas candentes y complejos, y la idea de combinarlos puede parecer complicada. Pero no se preocupe: El autor aporta una visión simple a la compleja historia de la analítica de negocio, ilumina los puntos en común que ambos comparten, explica los beneficios que un entorno de cloud computing puede llevar a la analitica de negocio (y viceversa), y proporciona un ejemplo para escribir su propia aplicación de analítica de negocio en la nube.


 

En alguna de sus etapas, la evaluación de cualquier nueva tecnología o proceso debe incluir la pregunta "¿Qué me ofrece?" - Al final, ¿qué aporta realmente la análítica de negocio en "la nube"?

Ahora las empresas de tecnología, los diseñadores de sistemas y los desarrolladores han promovido varias definiciones ligeramente diferentes de Cloud Computing, pero casi todas coinciden en estos puntos:

  1. La computación en la nube permite a aplicaciones e incluso sistemas completos separados compartir recursos de computación tradicionales.

  2. La computación en la nube permite a sistemas y aplicaciones compartir datos.

  3. La computación en la nube aprovecha el concepto de distribución para mantener una alta disponibilidad.

  4. La computación en nube de TI tiene mayores ventajas respecto a las TI tradicionales, como su capacidad de ampliación de recursos y experiencia según las necesidades de organización interna de TI.

  5. Para las compañías, uno de los mayores beneficios del cloud computing es la posibilidad de ampliar el alcance de los productos, servicios o mensajes de una organización de una manera planificada, y conociendo el coste de antemano.

  6. Los mayores beneficios del cloud computing para los usuarios de productos y servicios son la capacidad de proporcionar acceso transparente a programas on-demand.

  7. La computación en la nube puede ser interna, externa, o una combinación de ambas.

  8. La mayoría de las personas ya están participando de la computación en la nube cada vez que inician sesión en Internet ...sólo que es posible que no lo sepan.

Definición #2 es la definición (perdón por el juego de palabras) del criterio relacionado con el cloud computing y analítica desde una enorme biblioteca de datos interesantes ubicados en la nube, o ya disponibles para sistemas en la nube. La estructura de la nube ofrece un contenedor de datos prácticamente ilimitado, la entrada ideal para una herramienta de análisis.

Y puesto que los datos están ahí fuera, el paso siguiente es aprender a analizarlos donde viven. En este artículo, le mostraré cómo crear un cuadro de mando para comenzar con la analítica de negocio en la nube, pero en primer lugar, quiero definir mi concepto de analítica de negocios.

 

¿Qué quiero decir con analítica de negocios?

Business Analytics puede significar muchas cosas, al igual que Cloud Computing. En código incluido en este artículo, mostraremos un ejemplo analizando correos electrónicos de atención al cliente por el "tono" de la correspondencia de servicio al cliente.

Me gusta usar dos ejemplos para apuntar una definición de analítica de negocio:

  • Robert McNamara y la introducción de análisis de sistemas en las políticas públicas (ahora conocido como policy analysis).

  • La teoría de juegos, la teoría de IA, y el análisis estadístico.

McNamara y el análisis de sistemas

La analítica de negocio en su forma actual debe mucho al esfuerzo pionero de personajes como Robert McNamara, el octavo secretario de Defensa de EE.UU., con los presidentes Kennedy y Johnson, que utilizó el análisis cuantitativo para ayudar en el esfuerzo de la Segunda Guerra Mundial. En su definición más amplia, la analítica de negocio es todo - que incluye herramientas, procesos y técnicas - lo que proporciona un análisis sobre datos de negocio. (De ahí la parte "negocio" de analítica de negocio; cambia los datos a "científicos" o "sociológicos" y ya tienes análisis que corresponden a diferentes disciplinas. Un mismo marco, diferentes E/S).

Mayoritariamente el nombre de Robert McNamara se conoce por su asociación con las tragedias de la guerra de Vietnam, pero su legado es más complejo y con más matices de lo que puede verse en el obituario del New York Times como el "arquitecto de una guerra fallida."

Después de recibir un MBA de Harvard en 1939, McNamara aplicó el análisis cuantitativo a los esfuerzos del ejército en la Segunda Guerra Mundial para analizar la eficiencia de los bombarderos B-29, como parte de un equipo de élite llamado Statistical Control. En 1946 se unió a Ford como parte de un equipo de "Whiz Kids", que logró muchas mejoras con modernos sistemas de control de gestión. Ayudó a la vuelta de la compañía Ford Motor, y en última instancia se convirtió en 1960 en el primer presidente de Ford que no era de la familia.

McNamara es, quizás, un ejemplo de dos éxitos potenciales de la analítica - produciendo rentabilidad efectiva en coste en Ford Motor Company - y la posible quiebra de la analítica de negocio - al no incluir ciertos conjuntos de entrada fundamentales en el análisis de cómo llevar a cabo la guerra en Vietnam.

 

Juegos y análisis estadístico

Hay software de analítica de negocio que hace uso de la teoría de la inteligencia artificial (en forma de minería de datos), la teoría de juegos (como el dilema del prisionero y el equilibrio de Nash), y el análisis estadístico.

Inteligencia artificial

Cuando se combina la disciplina de la inteligencia artificial con la informática, se llega a la práctica de la minería de datos, que es simplemente el proceso de extracción de patrones a partir de los datos.

Esto no es un concepto nuevo. Aquí hay dos precursores de la minería de datos que se utilizaron para descubrir patrones en los datos:

  • El teorema de Bayes (Thomas Bayes, 1702 - 1761) muestra la relación entre dos probabilidades condicionales (la probabilidad de A dada la ocurrencia de B), que cada una es el reverso de la otra.

  • El análisis de regresión (primera forma, el método de mínimos cuadrados, Adrien-Marie Legendre en 1805, Carl Friedrich Gauss en 1809) contiene las técnicas para el modelado y análisis de diversas variables (donde una es dependiente y los demás son independientes), ideal para la creación de modelos de predicción basados en patrones encontrados en los datos.

La tecnología informática (como la computación en la nube) ha incrementado la capacidad de recopilar, almacenar, acceder y manipular datos. Gracias a los enormes volúmenes de datos disponibles, el análisis directo/manual de datos ahora casi siempre se mejora con técnicas automatizadas de manipulación de datos de algún nivel, como las redes neuronales, clustering, algoritmos genéticos, árboles de decisión, y el soporte de máquinas vectoriales.

Aparte de lo obvio - la minería de datos permite a las personas ampliar la cantidad de datos utilizados en el análisis mediante el descubrimiento de patrones en grandes cantidades de datos - para los objetivos relacionados con la analítica de negocio en la nube, el componente de minería de datos de IA viene muy bien para ayudar al investigador a incorporar e integrar diferentes tipos de datos, por ejemplo, tanto datos estructurados como datos no estructurados. (Para más detalles, consulte la publicación de IBM Big Sheets technology.)
 

La teoría de juegos

La teoría de juegos es la rama de la matemática aplicada que trata de captar matemáticamente el comportamiento en situaciones estratégicas donde el éxito de un individuo en la toma de decisiones depende de las decisiones que otros participantes tomen.

"El dilema del prisionero" es tal vez el problema más famoso de la teoría de juegos. Se trata de un escenario en el que la estrategia "dominante" conduce a un resultado no óptimo para todos los involucrados. Esto también se relaciona ligeramente con el problema llamado la "tragedia de los comunes" en la que el interés propio asegura un resultado peor para la comunidad.

Muchos problemas de la teoría de juegos se aplican directamente a los procesos de negocio. Por ejemplo:

  • "El dilema del prisionero" demuestra por qué dos personas no deberían cooperar, incluso si ambos tienen el mayor interés en hacerlo. En el ejemplo clásico, dos sospechosos son detenidos por la policía. La policía tiene pruebas suficientes para una condena, y, después de haber separado a los presos, visita a cada uno de ellos para ofrecer el mismo trato. Si uno da testimonio de la acusación contra el otro (no coopera) y el otro permanece en silencio (coopera), el desertor queda libre y el cómplice silencioso recibe los 10 años de prisión. Si ambos permanecen en silencio, los dos presos son condenados a sólo seis meses de cárcel por un cargo menor. Si cada uno traiciona al otro, cada uno recibe una sentencia de cinco años. Cada prisionero debe elegir traicionar al otro o permanecer en silencio.

  • El "equilibrio de Nash" (después del inventor John Forbes Nash) es una solución de un juego entre dos o más jugadores en el que se supone que cada jugador conoce las estrategias de equilibrio de los otros jugadores y ningún jugador puede ganar cambiando sólo su propia estrategia de manera unilateral. Si cada jugador ha elegido una estrategia y ningún jugador puede beneficiarse cambiando su estrategia mientras los otros jugadores mantienen las suyas, el conjunto actual de opciones estratégicas y las ganancias correspondientes constituyen un equilibrio de Nash.

  • La "tragedia de los comunes" es un dilema que surge de la situación en la que varios individuos, que actúan independientemente, y única y racionalmente atendiendo a sus propios intereses, finalmente agotarán un recurso compartido limitado incluso cuando está claro que no interesa a largo plazo a ninguna de las personas.

El poder real que la teoría de juegos aporta a la analítica en la nube está en el papel del desarrollo de algoritmos en línea, algoritmos que pueden procesar pieza por pieza en serie (en el orden en que llega la entrada) sin tener disponible la entrada completa al inicio del proceso. Utilizando este tipo de algoritmo, pueden surgir patrones a partir del análisis de datos existentes y datos adicionales para se puedan tomar decisiones ya en las primeras etapas del análisis, y después ser revisadas a medida que haya más datos disponibles.

 

El análisis estadístico

Los lenguajes de programación estadística, simplemente definidos como auqellos diseñados para aplicaciones estadísticas, son lógicamente un importante componente de la analítica de negocio en cualquier entorno.

El estándar de facto para el análisis estadístico programático es el lenguaje de programación R. R es una implementación del lenguaje de programación S en combinación con la léxica en entornos semánticos inspirado en Scheme; es parte del proyecto GNU y su código fuente está disponible libremente bajo la Licencia Pública General de GNU. Las versiones binarias precompiladas están disponibles para varios sistemas operativos. Se pueden manipular objetos R directamente con C y código Java.

El lenguaje de R proporciona muchas librerías útiles para la realización de análisis estadísticos en conjuntos de datos grandes y pequeños. 

Según el experto David Mertz - El entorno de R no está destinado a ser un lenguaje de programación en sí, sino más bien una herramienta interactiva para explorar conjuntos de datos, incluyendo la generación de una amplia gama de representaciones gráficas de las propiedades de los datos.- "Statistical programming with R" series

 


Una cuestión abierta que afecta a cualquier nuevo desarrollo de software, es si tiene sentido la solución "hágalo usted mismo" o la de comprar fuera de la plataforma. No voy a responder a esa pregunta en este artículo.

Ahora echemos un vistazo a cómo comenzar en Python tu propio programa de cuadro de mando analítico.

 

Crea tu propio cuadro de mando analítico

En este ejemplo, se muestra cómo leer una cuenta de correo electrónico, transformar los datos en partes etiquetadas del informe, y luego utilizar esa información para crear frases de tres palabras que se ordenan por número de ocurrencias. (El código Python está disponible en downloads.)

Finalmente, estos datos se muestran en un gráfico usando la API de visualización de Google. Debido a que el ejemplo de código es largo, se descompone en pasos y se explica cada etapa por separado. Puede descargar el ejemplo del código completo y continuar con su propio servidor de correo electrónico (como Gmail).

 

La figura 1 muestra la canalización del procesamiento de datos.

 

Figura 1. El camino del procesamiento de datos 

La tubería de proceso de datos

 

  1. Acceso al servidor de correo electrónico. El Listado 1 muestra cómo. 

    Listado 1. Acceso programado a su programa de correo electrónico 

     

    import email
    
    username = "myaccount@example.com"
    password = "asecretpassword"
    server = "imap.example.com"
    folder = "INBOX"
    
    def connect_inbox():
    "Grab Data"
    mail=imaplib.IMAP4_SSL(server, 993)
    mail.login(username,password)
    mail.select(folder)
    status, count = mail.search(None, 'ALL')
    try:
    for num in count[0].split():
    status, data = mail.fetch(num, '(RFC822)')
    yield email.message_from_string(data[0][1])
    finally:
    mail.close()
    mail.logout()
    
    def get_plaintext(messages):"""Retrieve text/plain version of message"""for message in messages:for part in message.walk():if part.get_content_type() == "text/plain":yield part

    En este fragmento de código, se realiza una conexión a un servidor IMAP y cada mensaje es entregado de nuevo a otra función que busca en el mensajes contenido de tipo texto plano, y luego lo devuelve.
     

  2. Transformación y etiquetado de las partes de datos del mensaje utilizando Python Natural Language Toolkit. La librería NLTK se utiliza para transformar el texto en bruto en frases, luego en palabras, y por último, en pares de palabras etiquetadas con función en la oración, como verbo, sustantivo, etc. Esta información se utiliza entonces para crear una frase de tres palabras que consiste en un verbo a cada lado de la palabra "TO"; cuando este patrón coincide, se retorna la frase de tres palabras junto con el entero 1, para que pueda ser sumarizada más tarde (Listado 2). 

    Listado 2. Etiquetado y la transformación 

    Import nltk 

    def transform(messages): """Transforms data by tokensizing and tagging parts of speech""" for message in messages: sentences = nltk.sent_tokenize(str(message)) sentences = [nltk.word_tokenize(sent) for sent in sentences] sentences = [nltk.pos_tag(sent) for sent in sentences] yield sentences

    def three_letter_phrase(messages): """Yields a three word phrase with TO""" for message in messages: for sentence in message: for (w1,t1), (w2,t2), (w3,t3) in nltk.trigrams(sentence): if (t1.startswith('V') and t2 == 'TO' and t3.startswith('V')): yield ((w1,w2,w3), 1)

     

  3. Sumarización de los datos. Una serie de funciones utiliza el estilo MapReduce para extraer, particionar, y luego sumarizar la aparición de estas frases de tres palabras (Lista 3). Tenga en cuenta que esto está escrito en una forma totalmente secuencial, aunque con un poco de esfuerzo podrían ser convertidas para funcionar más en paralelo. Para obtener información más detallada sobre MapReduce, consulte Resources . 

    Listado 3. Sumarizar los datos utilizando MapReduce 

    def mapper():    messages = connect_inbox()    text_messages = get_plaintext(messages)    transformed = transform(text_messages)    for item,count in three_letter_phrase(transformed):        yield item, count

    def phrase_partition(phrases): partitioned_data = defaultdict(list) for phrase, count in phrases: partitioned_data[phrase].append(count) return partitioned_data.items()

    def reducer(phrase_key_val): phrase, count = phrase_key_val return [phrase, sum(count)]

    def start_mr(mapper_func, reducer_func, processes=1): pool = Pool(processes) map_output = mapper_func() partitioned_data = phrase_partition(map_output) reduced_output = pool.map(reducer_func, partitioned_data) return reduced_output

     

  4. Ordenación de los resultados y utilización de Google Chart API para mostrar los resultados en un gráfico circular (Listado 4). 

    Listado 4. Visualizar los resultados 

    page_template = """<html><head><!--Load the AJAX API--><script type="text/javascript" src="https://www.google.com/jsapi"></script><script type="text/javascript">

    // Load the Visualization API and the piechart package. google.load('visualization', '1', {'packages':['corechart']});

    // Set a callback to run when the Google Visualization API is loaded. google.setOnLoadCallback(drawChart);

    // Callback that creates and populates a data table, // instantiates the pie chart, passes in the data and // draws it. function drawChart() {

    // Create our data table. var data = new google.visualization.DataTable(); data.addColumn('string', '3 Word "To" Phrase'); data.addColumn('number', 'Occurances in Inbox'); data.addRows(%s

    );

    // Instantiate and draw our chart, passing in some options. var chart = new google.visualization.PieChart(document.getElementById('chart_div')); chart.draw(data, {width: 1000, height: 700, is3D: true, title: 'Customer Service Email Phrases'}); }</script></head>

    <body><!--Div that will hold the pie chart--><div id="chart_div"></div></body></html>

    """

    def print_report(sort_list, num=25): results = [] for items in sort_list[0:num]: phrase = " ".join(items[0]) result = [phrase, items[1]] results.append(result) page = page_template % results print page

    def main(): phrase_stats = start_mr(mapper, reducer) sorted_phrase_stats = sorted(phrase_stats, key=itemgetter(1), reverse=True) print_report(sorted_phrase_stats)

    Este último paso de visualización es más fácil de lo que parece porque los resultados del informe son simplemente una cadena reemplazada en una plantilla de HTML y JavaScript. Como se puede ver en la Figura 2, los resultados se muestran limpiamente en un gráfico circular.

Figura 2. Los resultados en un gráfico circular 

Los resultados en un gráfico circular
 

Conclusión

En este artículo se han repasado algunas de las teorías que hay tras el análisis cuantitativo y análisis de negocios, y proporcionado además un ejemplo de código de prueba del concepto. Analizando el "tono" y "humor" de las conversaciones, este ejemplo puede convertirse fácilmente en un indicador del estado de ánimo de los clientes para una empresa que proporciona servicios al cliente. Con algo más de trabajo, puede conectarse a cualquier otro motor de lógica que se puede encadenar a otro motor, y así sucesivamente.

El análisis de datos en la nube es una ineludible futura dirección de Internet; así como los negocios se dirigen de manera creciente hacia soluciones en la nube, la necesidad de crear o comprar software de analítica de negocio no hará sino aumentar. Espero que este artículo le haya dado algunas ideas sobre lo que puede desarrollar para su negocio, ya sea a creando o comprando.

 

 


Fuente: Cloud business analytics: Write your own dashboard

 

Adjunto Size
emailbi.zip 162 bytes