Iniciándome en R: concepto de Z-Score

El otro día, 

quizás porque dentro de poco va a hacer un año me inicié en el mundo web a nivel profesional, no recuerdo muy bien,


me llegó a la cabeza la idea de hacia donde me gustaría dirigir mis esfuerzos para crecer como analista: supongo que como dispongo de poco tiempo libre, fue una forma de organizar recursos y focalizar esfuerzos en aquellas facetas que me interesa potenciar para crecer a nivel profesional



En concreto, me llegaron 3 ideas,

  • La primera sería continuar iniciándome en el mundo de R. Me he dado cuenta de que con esta herramienta, además de permitir hacer unos gráficos que con excel no son posibles, permite aplicar técnicas estadísticas de una forma rápida, lo que lleva a una mejor comprensión de los datos haciendo que los análisis sean más potentes y certeros.
  • La segunda, consiste en incrementar mi conocimiento sobre los distintos modelos de negocio con la idea de poder complementar los análisis con una visión mucho mayor a nivel estratégico y que no sólo se base en datos y recomendaciones tácticas.
  • La tercera idea iría ligada en parte a la primera: potenciar mi comunicación a nivel visual (con R se consiguen generar gráficos muy interesantes) y también comunicación a nivel escrita y verbal, es decir, depurar el discurso con el fin de que genere interés en el interlocutor al que va destinado.



Poco a poco, he ido empezando algunas acciones que me llevarán a lograr dichos objetivos. Para este post, voy a comentar sobre una, la que se refiere a crecer en el mundo de R.



Para iniciarse en R, aquellos que no somos programadores y que nos "echa para atrás" ponernos a programar código porque supone salir de nuestra zona de confort os comento que ¡sí se puede!.


R es un lenguaje bastante intuitivo y como todo, lo que requiere es ponerse con ello y echarle horas. Hay mucha información de código en internet, además de multitud de cursos online y también está disponible la plataforma de Datacamp para ponerse con ello.



Yo me decidí a empezar hace unos meses con un curso online organizado por la Universidad de Texas a través de la plataforma EDX. El curso permite la iniciación en R a través de técnicas de estadística básica aplicada como por ejemplo: tratamiento básico de matrices y vectores, zscore, tablas de contingencias, cálculo de probabilidades y modelos. La verdad que terminé el curso muy satisfecha.

En dicho curso, uno de los conceptos que aprendí y que me sorprende no haberlo aprendido años atrás, con toda las horas de formación que llevo a mis espaldas es el z-score.




¿Qué es el Z-Score?


Es una fórmula que permite la estandarización de una distribución. Con una distribución me refiero a un conjunto de datos; Por ejemplo, sesiones captadas por el canal orgánico en cada uno de los meses de 2015.

Esta fórmula se calcula restando al dato, la media de la distribución y dividiendo el resultado por la desviación típica (la distancia que tiene dicho dato respecto de la media).




El resultado que arroja esta fórmula, permite conocer cuánto de lejos está un dato concreto respecto de la media

Y lo traduce de una forma muy sencilla: La media pasa a ser 0, y si el dato arrojado tras aplicar la fórmula está por encima de la media será un dato positivo, y si está por debajo de la media, entonces será negativo.





¿Para qué sirve el Z-Score?

Es una técnica que sirve para normalizar los datos lo que nos permite comparar comparar conjuntos de datos distintos, bien porque esté en unidades diferentes, bien porque se trate de volúmenes muy dispares.

Pongo 2 ejemplos,

  • Uno sencillo, no relacionado con la analítica web,

Si se quiere comparar la nota de un alumno de una asignatura con la nota de otro alumno en otro colegio de la misma asignatura, no sería real o acertado comparar sin más los datos absolutos pues los exámenes han podido ser muy diferentes.

Es por ello que ha de calcularse el z-score de cada uno de los alumnos, para ver qué nota ha sacado cada uno de ellos en función de la media de cada clase. Es decir, el z-score nos dirá si los alumnos que queremos comparar están por encima o por debajo de la media de su clase y cuánto de lejos está. Esto nos permitirá comparar las notas de manera más justa, real y exacta.


  • Otro ejemplo, fruto de un trabajo que realicé que me sirvió para comparar distribuciones con volúmenes muy diferentes:
Consistía en conocer cuáles eran los destinos de hoteles que el usuario buscaba más a través de Google y compararlo con los destinos más buscados dentro del site.

El objetivo que se perseguía era conocer la cuota aproximada de mercado que tenía el cliente para los top destinos y potenciarlos con acciones de SEO y SEM en caso de que hubiera mucha demanda en el exterior y sin embargo, en el site la demanda de ese destino no se encontrara entre los más buscados.

En este caso, me fue muy útil aplicar el z-score ya que se trataba de comparar distribuciones con volúmenes muy distintos al comparar búsquedas de Google con búsquedas dentro de un site.

Normalmente, hubiera aplicado la técnica más utilizada por todos como es el porcentaje: este destino se busca x veces, lo que supone un %y respecto del total. Sin embargo ese porcentaje calculado está sesgado, no es correcto, porque la comparación la voy a hacer entre porcentajes que se han calculado sobre volúmenes totales diferentes.

A partir de ahí, para un periodo determinado, apliqué el z-score para cada uno de los top 10 destinos, primero para la distribución de búsquedas de Google y después para las búsquedas del site. Al aplicar el Z-score, los datos para cada destino se transformaron, indicándome si el número de búsquedas estaba por encima o por debajo de la media de su propia distribución (bien búsquedas de Google, bien búsquedas del site).


A continuación, voy a explicar un ejemplo muy sencillo sobre calcular el z-score en R:


¿Cómo se calcula en R?

A partir de un perfil y periodo dato, he hecho una consultado desde R a Google Analytics buscando extraer las sesiones, rebotes y páginas vista desglosado por canales de tráfico, a lo largo de todo el año de 2015:



Lo que me devuelve R es esta matriz de canales con las sesiones aportadas a lo largo de 2015:


Como lo que busco es crear una nueva columna dentro de la matriz que me informe del z-score para cada uno de los canales, lo podría hacer de la siguiente manera:





En caso de que quiera tener 2 matrices diferentes, una que recoja los datos brutos y otra que recoja los normalizados se puede hacer lo siguiente:





E incluir la columna de Channel Grouping como nombre de las filas en ambas matrices













 ¿Cómo es la mejor forma de visualizarlo?

Las dos tablas generadas están muy bien pero no son fáciles de comprender así a primera vista. Como sabéis, una tarea fundamental de todo analista web es encontrar la manera óptima de dibujar los datos, ya que en función de lo que se quiera mostrar ha de hacerse de una manera u otra.

Esto no es tarea fácil, en algunos casos un histograma o una evolución sirve, en otros casos no. Es por ello que es necesario dedicarle tiempo, ponerse a pensar sobre cuál es la mejor forma de mostrar los datos, cuál es la visualización óptima de tal forma que requiera al interlocutor al que va dirigido, el menor esfuerzo para comprenderlo.

R brinda muchas formas de representar los datos y además, visualmente muy atractivas como por ejemplo boxplots, bubble charts... Para este caso, encontré la función de balloonplot aunque existen muchas más:





¿Qué se observa de manera fácil y rápido en esta gráfica? 

Para la cuenta seleccionada, en el año 2015, fueron los canales de Email y Display los que aportaron mayor cantidad de tráfico. Sin embargo, se observa que los usuarios que atrajeron no fueron cualificados pues fueron los que más rebotaron. 

Por otra parte, son los canales de Orgánico, Directo y Referral los que atraen usuarios con interés por el contenido ofrecido, son los que más páginas vistas generan. 

También hubiera sido interesante añadir la variable de conversiones para saber si dichos usuarios interesados también convierten y tener así la visión completa.

Si bien es cierto que no es un gráfico muy atractivo visualmente, seguramente se puede mejorar en ese sentido, pero por otro lado es "visualmente práctico", es decir, de un sólo vistazo, apenas se le requiere esfuerzo a la mente para entender lo que nos está queriendo decir esta visualización, no es cierto?



¿Por que me ha ayudado aquí el zscore? 

La normalización de los datos me ha ayudado porque me ha permitido comparar concetos diferentes, que están expresados en magnitudes muy distintas: sesiones y rebotes son muy parecidos en magnitud pero las páginas vista se expresa en unidades inferiores.



¿Qué mosotraría la visualizaciónnen caso de que no hubiera normalizado los datos?

El gráfico mostrado en caso de haber considerado el dataset no normalizado (dataset = datanameoriginal) hubiera sido el siguiente:



No se visualizarían las burbujas de la métrica de páginas vista porque como antes se ha comentado, son de una magnitud mucho menor; también, las metricas de sesiones y rebotes serían bastante semejantes en cuanto a distribución por canales.

La verdad que este gráfico se interpreta mucho peor y bueno, no es exacto ya que aplicando el zscore el gráfico explicaba las cosas de otra manera, ¿interesante verdad?




De todas formas, el gráfico (el calculado inicialmente con datos normalizados) no me convence del todo porque muestra datos para unos pocos canales: esto sucede porque hay algunos valores extremos, muy por encima del resto lo que provoca que no aparezcan en la visualización.

Con el objeto de aplanar los datos y que no haya tanta diferencia entre ellos, de nuevo voy a tratarlos aplicando la función del logaritmo.


Aplano los datos aplicando función de logaritmo a la matriz con datos normalizados:



Ya lo tenemos. ¿Se puede observar algunos datos más no?

Después de los canales directo y Orgánico, son los canales de Referral y Social los que atraen más visitas interesadas. Además, parece que el canal Orgánico es el tercero en cuanto a nivel de captación.






Conclusiones

Y bueno, este post ha sido fruto de una pequeña investigación en la que iré avanzando y profundizando.

Quería comentar que durante este proceso me he dado cuenta de 2 cosas:

1) Existen muchos tipos de visualizaciones. La que he mostrado es una de las infinitas posibilidades que he visto hay en internet. Por eso, en un próximo post me gustaría plasmar algunas de las que más me han gustado.

2) Para jugar con R, se suele cumplir la siguiente proceso:
- primero hay que extraer/importar los datos.
- Una vez que se tienen llega el momento de tratarlos: bien en temas de formato matriz o vector, bien mirando que el formato de los datos sea el adecuado (fechas, ...), bien aplicando la técnica estadística necesaria,... Para mi, esta es la parte más complicada y que creo, se lleva la mayor parte del esfuerzo.
- Por último, se ejecuta la función elegida para visualizar los datos.



Espero que os haya gustado :)

Esto es un no parar, porque en mi mente ya están rondando otros 2 posibles posts sobre R... uno que versa como antes comentaba, sobre los distintos tipos de visualizaciones, y otro sobre R y un juego de cartas, curioso eh? XD


#hastalaproximaanalistasweb

Comentarios

Entradas populares de este blog

¿Diseñamos un Dashboard con R?

Profundizando en Google Data Studio

¿Por qué me gusta ser Analista Digital?