Translate

viernes, 1 de noviembre de 2019

📊 👨‍👩‍👧‍👦 DataOps Manifesto - Cuando mezclas Data y Agile en un equipo



En mi último equipo tuvimos que encargarnos de hacer desde cero todo el sistema de reporting de la unidad, desde la investigación de nuevas métricas usando metodologías user experience research como entrevistas y focus group a crear todo el sistema de eventos en AWS, la ETL pipeline y el dashboarding y reporting en Python. Y todo esto usando metodologías Agile. No veas que converaciones teniamos más frikis de vez en cuando sobre métricas, calidad de los datos y performance.

Yo por mi parte además me llevaba muy bien con el depatamento de Devops o Reliability Engineering que eran los que usaban Kubernetes, Dockers y bases de datos, y todo lo que tenía que ver con PaaS (Platform as a Service). Y uno de mis compas le encantaba explicar lo que aprendía sobre analytics y tenía super paciencia al explicarlo. Eso me llevó a aprender sobre la existencia de balanceadores, la posibilidad de tener el backup en dos ´nubes´ diferentes o el reporting en Prometheus

Como firme defensora de trabajar en Agile en equipos multidisciplinares y diversos hay una cosa que no me terminaba de encajar al principio. Explicar a los programadores que había que testear los datos y que la definition of done no era la misma para los analistas que para los programadores nos trajo al equipo muchos dolores de cabeza y conversaciones metafísicas. Y mucho ensayo-error hasta encontrar la mejor metodología, donde tanto analistas como ingenieros tuvieramos nuestros requerimientos requeridos.El mayor problema era que tras meses implementando algo y darlo por finalizado, debíamos mejorarlo, o las necesidades de los usuarios cambiaban o nos mandaban hacer un análisis adhoc. Todo esto significó que tuvimos que aprender a trabajar juntos, y a su vez desaprendimos a trabajar como lo haciamos antes. Eso es lo bonito de Agile.

Y si llevamos todo mi largo comentario a metodología de Big Data e Inteligencia Artificial y la posiblidad de hacer todo esto en la nube podemos encontrarnos que este problema lo van a tener todas las empresas Data-Driven. Son mucho los equipos de desarrollo de software que se encuentran en esta tesitura, y por ello sólo era cuestión de tiempo que apareciera un nuevo manifiesto - DataOps.

DataOps o DevOps

DataOps toma la forma de su primo los DevOps, y lo que pretenden es que se integre esa mejora continua en los datos, mejorando así además la calidad de estos. Así que no, no se dan por finalizadas las tareas tan facilmente como ocurre en otros equipos de software, igualmente que los DevOps tienen que mantener operativa la plataforma 24/7. Como comenta IBM en su artículo en Data y Analytics hay una gran diversidad que operaciones a realizar y aunque todos sean con data, requieren de diferentes procesos y herramientas. (´Big Data Workloads are Diverse.´)

El DataOps manifiesto en castellano

El manifiesto empieza al igual que el Agile Manifiesto con las siguientes afirmaciones

  • Personas e interacciones en lugar de procesos y herramientas
  • Soluciones de analítica eficientes en lugar de documentación comprensiva
  • Colaboración con el consumidor en lugar de negociaciones contractuales
  • Experimentación, interacción y retroalimentación en lugar de un diseño extensivo directo
  • Titularidad multidisciplinar de las operaciones en lugar de responsabilidades aisladas.
La traducción del manifiesto la puedes encontrar en el siguiente enlace, cuenta con 18 puntos que van desde la formación de los equipos, a la calidad de los datos y la necesidad de procesos de retroalimentación para la mejora continua. Están bastante claros, así que no vale la pena que los detalle aquí.
https://www.dataopsmanifesto.org/dataops-manifesto.html?lang=es .

Métricas para medir el Performance de tu equipo de Analítica o Data team

Este video explica alguna de las métricas que se pueden usar para medir el éxito del esfuerzo del equipo
https://www.youtube.com/watch?v=Ch4gJz3n8qw&list=PLVbsAdgZXvtyy6HVKCP0HChjCcq2oW3eK&index=18&t=0s

Más información para ampliar 

https://en.wikipedia.org/wiki/DataOps
https://www.gartner.com/en/newsroom/press-releases/2018-09-11-gartner-hype-cycle-for-data-management-positions-three-technologies-in-the-innovation-trigger-phase-in-2018
https://www.ibmbigdatahub.com/blog/3-reasons-why-dataops-essential-big-data-success
Canal youtube sobre DataOps
https://www.youtube.com/playlist?list=PLVbsAdgZXvtyy6HVKCP0HChjCcq2oW3eK


domingo, 14 de abril de 2019

Breve resumen Python para análisis de datos - librerías

Tras tres annos usando Python practicamente a diario para análisis de datos creo que ya puedo dar algunos consejos para analistas que quieran aprender el lenguaje para hacer análisis de datos.

Al principio puede parecer un poco overhelming toda la información que pueda aparecer en Internet, sin embargo hay determinadas librerias que vas encontrar en todas partes y que te permitirán hacer el 80% de tu trabajo.

Qué librerías en Python son las más usadas para análisis de datos y Machine Learning

Pandas, los cubiertos del análisis de datos

La primera libreria que deberías aprender a usar para empezar a hacer cosas es Pandas
A la hora de usar pandas debes pensar siempre en una spreadsheet u hoja de calculo con formato tabular.Manipulas datos en  dos dimensiones. tienes filas y columnas. Esta librería tiene diferentes funciones contruidas que te haran todo más facil, al estilo de funciones de excel pero más rápido y fácil de usar y procesar.

Pandas te permite manipular y limpiar los datasets de una forma fácil. La libreria Pandas usa dos tipos de estructuras de datos de tipo objet( es decir, complejos). Dataframes (el más usado) y Series.

Además puedes crear pivot table para presentar tus resultados. En este caso Pandas te permite además, si quieres usar índices (index) para que sea más fácil. El index hace que la curva de aprendizaje sea un poco más larga, así que mi recomendación es ir haciéndote a ellos poco a poco.

Si eres nuevos en Python para análisis de datos deberías empezar entendiendo como funciona Pandas, ya que los usarás prácticamente cada vez que hagas un análisis.

Numpy para estructuras matrices y procesimiento matemático

El padre de Pandas es Numpy. De hecho Pandas está construida usando Numpy. Muchas veces en pandas se tarda mucho en hacer cálculos y entonces es más eficiente (la operación se va a procesar antes) al usar Numpy. Esto sobre todo es debido a un tipo de estructura de datos de tipo objeto que se llama Narray.

Scipy , añade analísis estadístico a tu análisis

Con las dos librerias de arriba ya podrías empezar a trabajar haciendo análisis descriptivos. Sin embargo,  vas a necesitar tirar de análisis estadístico en algún momento- Scipy es un librería. Pongamos que necesitas hacer una regresión o que estás analizando A/B tests. Scipy te ayuda con ello.

Scikit-learn , añade Machine Learning de forma fácil. 

Esta librería ha sido tendencia estos últimos años debido a que es usada por Data Scientifist para hacer su trabajo con un montón de algoritmos contruidos para no tener que preocuparte de nada.
Está escrita sobre Numpy y Scipy. Además tiene funciones para entrenar los datos (train) y crear modelos. Es muy fácil de usar y si sabes lo que estás haciendo (matematicamente hablando) es muy eficiente y limpia para aplicar Machine Learning.

Matplotlib , visualiza tus resultados

Además de esto tienes librerias para visualización de datos, siendo matplotlib la más usada. Yo no soy muy fan de ella y prefiero exportar los datos en csv y llevarme los datos a PowerBi o Tableau, pero me matplotlib ha sacado de algún apuro alguna vez, debo confesar. Aquí puedes ver todos los tipos de gráficos que puedes hacer con ella https://matplotlib.org/3.2.1/gallery/index.html


Como usar las librerías en Python

Una vez que tenems claro las librerias que queremos usar, vamos a pasar a ver como se usan.
Como en todos los lenguajes de programación deberíamos tenerlas instaladas (para no complicar mucho esto )

Python es un lenguaje muy flexible, y por ello y para que todos podemos entendernos, existen una convenciones que todo el mundo suele seguir a la hora de llamar a estas librerías.

Una vez tenemos instaladas nuestras librerías podemos usar llamar a una librería o sólo a la parte que creamos que vamos a necesitar. A esto se le llama importar.

Si queremos llamar llamar a toda la librería de pandas diremos. Si tenemos muchas librerías en memoría va a hacer más pesado el programas. Además tener sólo lo que vamos a necesitar, va a hacer que focalicemos en lo que estamos haciendo y una vez volvamos a leer nuestro código (o el del que leyó el programa va a ser más fácil de entender que está haciendo).

Ya que pandas es la que más usamos la importaremos entera como

import pandas as pd

Ahora imagina que queremos hacer una regresión. Esto sólo va a pasar una vez en nuestro programa. En ese caso es mucho importar sólo lo que vamos a usar. Por ejemplo diremos de sklearn, carpetita modelos lineales usaremos regresión lógística, de métricas solo queremos estas, etc

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, accuracy_score, f1_score, confusion_matrix, classification_report

Convenciones para usar las diferentes librerías


Como comentaba anteriormente hay convenciones para llamar a estas librerías, aunque si qusieras llamarlas de cualquier otra forma Python seguiría funcionando.

Por el bien de la salud mental de tus compañeros y de la tuya misma sigue estas convenciones guilo-guiño

En caso de pandas (pd), numpy(np) y matplot(plt), puedes importar las librerías enteras. En cambio no deberías importar enteras ni Scipy, ni Scikit learn, sino sólo los módulos que quieras usar. Esto quedaría así en tu código como ejemplo

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

y para las otras dos librerías sería en plan ejemplo

from scipy.stats import norm, binom
from sklearn.linear_model import LogisticRegression

Espero esto sirva de introdución en tu viaje en el aprendizaje de Python para analisis de datos

jueves, 27 de septiembre de 2018

Tipos de análisis descriptivo: modelos descriptivos, modelos predictivos y modelos prescriptivos

Recien acabado el curso de Customer Analytics A la hora de hacer un análisis de nuestros clientes nos encontramos que existen tres formas de abordarlos.

  • Análisis descriptivo ( descriptive analysis).

    El objetivo de este es explicar las relaciones que hay entre diferentes variables. Así que estariamos hablando de un análisis del pasado o nuestros cliente actuales. Con estos modelos queremos entender a nuestros clientes para ello se usan análisis como la segmentación de clientes. En términos de análisis estadístico aquí podríamos usar la regresión, análisis de cluster,...

  • Análisis predictivo (predictive analisis)

    Con este tipo de análisis lo que queremos es crear modelos para predecir el futuro. Podemos usar por ejemplo

  • Análisis prescriptivo (prescriptive analysis)

    , cuyo fin es tomar una acción. Este último tipo de análisis es especialmente interesante y complejo ya que tiene en cuenta muchas variables y va más allá de los dos anteriores. Para para poder sacarle un mayor partido hace uso de métodos econométricos y la teoría de juegos.

domingo, 15 de julio de 2018

Medir el performance de nuestros productos en Tableau con Bullet graphs

Este post ha estado 'on hold' por bastante tiempo y creo que puede ser útil en estos tiempos de crisis que se avecinan.

Uno de los gráficos más útiles que he encontrado para hacer los dashboards más fáciles de leer y que a la hora de hacer informes no tengas que usar varias páginas.

Si los gráficos de barras son tus favoritos, pero se te queden algo cortos a la hora de ponerle información (suelen quedar un poco sosos) y no sabes muy bien como . Tengo el inmenso placer de presentarte los Bullet graphs. Ah qué no lo conoces. Espera que te lo presento....

Lector del post - Bullet graph



Nada de darse la mano o dos besos a estas alturas. Por favor,mantengan las distancias. No es nada personal

Qué es un Bullet graph

Un Bullet graph, que se puede traducir como gráfico de Bala, (pero queda un poco raro...) es un gráfico de barras con contexto.

En performance nos puedes servir para olvidarnos de los gráficos de ´gauge´ que si, serán vistosos, pero no dan mucho contexto.

Estos gráficos son ideales para poner nuestros target en ellos para análisis de ventas o gastos.

Qué pinta tiene un Bullet graph 

Esta


Dónde puedo encontrar este gráfico en Tableau


El Bullet graph forma parte de Tableau desde hace mucho tiempo. Para poder utlizarlo necesitamos al menos dos métricas y por supuesto podemos poner además dimesiones. Ten en cuenta que las métricas tienen que estar en el mismo rango de datos.

En el panel

En qué otro software puedo encontrar este gráfico

Por ahora no podemos encontrar el gráfico en Data Studio, Excel u hojas de cálculo de Google Drive. Sin embargo hay varias librerías en diferentes lenguajes para visualizar este tipo de gráfico entre otras puedes hacer Bullet graphs con D3.js así

No me gusta este gráfico, qué otros puedo encontrar para visualizar el Performance de mi producto

Ok, si no te he convencido este no pasa nada. Existe dos tipos de gráficos que pueden cumplir la misma función . Radial gauge y Linear gauge. Tableau no cuenta con estos gráficos

sábado, 5 de mayo de 2018

Cómo se ejecuta una query en SQL

Para seguir poniéndome al día y no olvidar el coding, estoy haciendo unos cursos a modo de repaso. Además, siempre se aprende alguna libreria o alguna forma nueva de hacer algo que siempre hacemos de una forma más optimizada.

En este caso estoy repasando SQL para business y he recordado un concepto que me costó pillar al principio. Así que aquí queda por si alguien empieza en SQL y se encuentra con ello.

Una vez que ya sabemos lo básico de SQL con una tabla, y se te pasa por la cabeza que qué fácil y lógico es esto

SELECT  //Dame esto
FROM     // De esta tabla
WHERE // donde ocurre esto (tal es igual, mayor, menor que ...)

llega el momento JOIN. Aquí vamos a tener dos tablas o más.

Como en SQL estamos trabajando en un modo tabular (es decir, trabajamos con formato tablas de filas y columnas) vamos a necesitar una misma columna para juntar (JOIN) las tablas. Esto es muy parecido al VLookUp de toda la vida de Excel (en castellano Buscarv)

Por lo tanto necesitamos saber en que tablas están las columnas que queremos. Así que en el ON vamos a poner el nombre de las columnas como referencia. Si la base de datos está bien hecha (es decir bien disennada, es que no tengo ennes en el teclado) la columna que vamos a usar para unirla se llamará igual en ambas tablas. A esta columna se le llama primary key, pero eso es otra historia...
 Total, que en todos los ejercicios que hagas esto será de cajón. Sin embargo, en el día a día en el trabajo te puedes encontrar cualquier cosa y las columnas no se llamen así. Si te encuentras con el caso siempre pregunta por un data dictionary, sería lo primero que deberías pedir. Sin embargo, parece que nadie los necesita ( en realidad quiero decir usa´)

Así que vamos a tener un

FROM // De esta tabla
JOIN // Juntamos  con esta otra tabla
ON // las columnas que nos sirven para juntar porque son las mismas

Antes de nuestro JOIN
nos vamos a encontrar la segunda tabla. El orden de las tablas es importante porque hay diferentes tipos de JOINs y eso va a influenciar también. Esto también es otra historia... Y justo detrás del ON vamos a poner las columnas que son iguales en ambas tablas. Como estamos juntando dos tablas que pueden tener el mismo nombre de columnas (ideally) o no, debemos poner el nomber de la tabla antes de la columna. Por lo tanto
meals(tabla) . meal.id(columna)

OK; Vamos allá,
SELECT price, quantity-order
  FROM meals
  JOIN orders ON meals.meal_id = orders.meal_id
WHERE user_id = 10;
Ahora tenemos todas las columnas a nuestra disposición.
Pero wait a minute, si yo selecciono precio y order de la primera tabla y esa columna está en la segunda tabla  (la que va después del JOIN). Cómo puede ser que no necesite poner como sintaxis order.quantity-order ?

* En realidad puedes ponerlo pero eso significa dar más complejidad y ensuciar la Query. El tema aquí es que la query va a ser leída como un todo, no de forma secuencial. Así que primero se ejecutará el FROM y el JOIN y de forma recursiva se irá ejecutando las demás partes de la query.

Y esta fue mi cara tras una semana revisando oráculos intentando encontrar la respuesta y acabar leyendola en una cheatsheet


via GIPHY

En qué orden se ejecuta una query en SQL

Yendo por partes, cómo se va a ejecutar esto.


  1. PRIMERO se ejecuta FROM-JOIN
  2. Después WHERE
  3. Más tarde todo lo que hay debajo del WHERE como GROUP BY y HAVING
  4. Finalmente SELECT
  5. En quinto lugar tenemos el disctinct (dónde), order by y limit/offset que en realidad es una forma de formatear la query que queremos una vez que tenemos los datos.
Logicamente todo puede ser más complicado con subqueries pero las subqueries serán ejecutadas en

Dónde se sejecuta una subquery en SQL 


  • SELECT
  • FROM
  • WHERE


Y esta fue la cara con la que el manual me miró. Bueno, de forma figurada claro.


via GIPHY


domingo, 8 de abril de 2018

ROAS vs. ROI: Unraveling the Marketing Metrics Mystery

In the fast-paced world of digital marketing, measuring success is paramount. Return on ad spend (ROAS) and return on investment (ROI) are two key metrics that often get misleading, sometimes even interchangeably. But they're actually quite different! 
Let's break down what each means and how to use them to track your marketing performance.

ROAS: Your Ad Campaign's BFF

ROAS, or return on ad spend, is all about how effectively your advertising dollars are generating revenue. The formula is simple:

  • ROAS = (Revenue from Ads / Ad Spend) x 100

ROAS focuses solely on the direct impact of your advertising efforts. It's great for performance marketers who need to see how well their specific campaigns are performing and which channels are delivering the best bang for their buck.

ROI: The Big Picture

ROI, or return on investment, takes a more holistic view. It considers your overall profitability by factoring in all costs, not just ad spend. This includes expenses like technology, salaries, and production costs. The formula is:

  • ROI = (Net Profit / Total Investment) x 100

ROI gives executives a top-level understanding of the overall financial success of a campaign, taking into account all the resources invested.

Key Differences

  • Focus: ROAS looks at revenue generated directly from ads, while ROI considers the overall profit after all expenses.
  • Scope: ROAS is specific to advertising spend, while ROI encompasses all costs associated with the campaign.

Example

Let's say you spent $100 on ads and sold $500 worth of flowers. Your ROAS is 500% - impressive! But what if your production and other costs were $400? Your ROI would be 0%. 


This highlights why ROI is crucial for understanding the true financial impact of your marketing efforts.


This highlights why ROI is crucial for understanding the true financial impact of your marketing efforts.

Remember:

  • ROAS is tactical, focusing on the effectiveness of specific ad campaigns
  • ROI is strategic, giving a big-picture view of overall profitability
Both metrics are valuable, and which one you prioritize will depend on your specific goals and role. By understanding the difference between ROAS and ROI, you can make more informed decisions about your marketing investments and drive greater success for your business.

sábado, 3 de febrero de 2018

Calcular Unique Visitors en eCommerce usando BigQuery

 Como calcular Unique Visitor para Channel Grouping de Google Analytics

Uno de las metricas mas importantes para un analista web son los unique visitors. Hasta ahora para conseguir esta metrica en BigQuery debemos usar el fullVisitorId que es semejante a userID

La siguiente consulta nos muestra como conseguir los unique visitors de cada canal del Channel Grouping de 

- nuestro proyecto llamado misdatos

- donde hemos exportado una tabla con todas las sesiones

Qué hace este código SQL?

Google Analytics nos proporciana el fullVisitorId, y para poder contar los no duplicados necesitamos usar DISTINCT. Con el AS creamos ademas el nombre de la nueva variable que vamos a llamar unique_visitors - visitantes unicos.



Otras  métricas similares se pueden encontrar en la tabla de abajo, actualizado a Agosto 2021. Actualmente ha quedado como deprecated el visitorID y ha aparecido (desde mediados de 2018) otra métrica que si que podemos encontrar como tal aparece en en la interface de Google Analytics, el ClientID. 


Más info sobre BigQuery