Hace un tiempo os contamos unos trucos muy útiles (y sencillos) para sacarle más partido a Power BI, pero ¿conoces el potencial que ofrece esta herramienta de visualización? Hoy os presentamos un tutorial para los amantes de series de Netflix y compras de Amazon, ¿cómo funciona un recomendador al estilo Power BI?

¿Cómo funciona un recomendador?

Antes de hablar de recomendadores, hablemos del concepto más simple aún y que muchos del sector retail utilizan desde medio siglo atrás (Walmart). El Market Basket Analysis (MBA), o análisis del carrito de compra, es una técnica muy utilizada en el sector comercial.

Consiste en analizar los hábitos de compra de los clientes (artículos comprados con mayor frecuencia) y detectar asociaciones para crear nuevas oportunidades (fidelizaciones, descuentos, promociones).

La técnica estudia un itemset, que consta de uno o varios artículos, y busca una posible relación entre las diferentes compras. El algoritmo utilizado para este fin es el de reglas de asociación. Este algoritmo sirve para distintos propósitos y uno de los casos de uso aplicables podría ser un recomendador, como, por ejemplo, el de Amazon:

O incluso la base de la técnica de Spotify o Netflix, aunque la mayoría ya están trabajando con redes neuronales:

¿Cuáles son los "actores" principales de nuestro algoritmo?

Debemos tener en cuenta distintos actores para poder entender el algoritmo. Si un comprador adquiere lo que el recomendador le sugiere, estamos frente a una probabilidad true o talse, señalada por el indicador soporte (support). Mientras la confianza (confidence) es la condición que proporcionaremos al modelo.

Otro indicador es lift, el ratio que mide la fuerza en la relación del soporte observado versus el soporte teórico.

Veamos cada uno con más detalle:

Support

Este es el más sencillo de los tres conceptos. El support es el porcentaje de transacciones que incluyen dos productos específicos.

Usando el ejemplo de la imagen anterior, la crema batida y las bayas aparecen juntas en el 0,9% de las transacciones, por lo que su soporte es del 0,9%. En otras palabras, en 1000 transacciones hay un promedio de 9 transacciones con crema batida y bayas juntas.

El soporte es importante por dos razones:

Confidence

La confianza es el porcentaje de transacciones que contienen los dos productos juntos en relación a las de uno de los dos productos. Como consecuencia, siempre hay dos números de confianza para cada par de productos.

Para la relación entre la crema batida y las bayas:

La confianza es útil porque da la dirección de la venta cruzada. Por ejemplo, nos permite saber que es más fácil vender crema batida a alguien que compra bayas.

La confianza, sin embargo, no nos da la fuerza de la relación entre los productos. Un producto puede ser una compra muy común, por lo que genera altos números de confianza, independientemente del segundo producto.

Lift

Lift es la fuerza en la relación entre una cesta de dos productos, es decir:

La crema batida y las bayas tienen un aumento de 3.8, lo que significa que los consumidores las compran juntas aproximadamente 4 veces más de lo que sucedería por casualidad. Esta es una relación bastante fuerte.

Resumiendo, el soporte indica la frecuencia con la que los productos se venden juntos. Un soporte alto significa que las estadísticas del análisis de la cesta son más fiables. Además, un mayor soporte hace que el carro con productos sea más interesante financieramente. La confianza indica la dirección de la venta cruzada y Lift indica la fuerza de la relación entre los productos.

Otros términos importantes

Gracias a los términos soporte y confianza podemos realizar distintas mediciones. Además podemos establecer para cualquier conjunto de datos cuál sería nuestro soporte mínimo y cuál sería nuestro umbral de confianza mínimo.

¿Cómo construir el modelo en Power BI?

Para realizar esta práctica podemos utilizar cualquiera de los dataset que tiene que ver con regla de asociación. En nuestro caso utilizaremos groceries.csv disponible desde su fuente original.

1. Abrimos nuestro Power BI Desktop y cargamos el fichero csv. También es posible utilizar la fuente web en caso de enlazarlo desde el raw de gitHub:

2. El mismo sistema nos pide validar cargando los datos o realizar una transformación. Optamos por la segunda opción:

3. Desde Power Query realizamos un par de transformaciones útiles para que el modelo sea apto para su visualización y que tengamos facilidades para la creación de las 3 métricas principales, entre otras. Añadimos una columna índice, simplemente como indicar el número de transacción:

4. Al crear la columna es mejor moverla al principio para realizar una transformación sucesiva:

5. Seleccionamos la columna Index, hacemos clic derecho y realizamos una despivotación de la tabla:

6. Cuando se realiza esta operación se generan dos nuevas columnas, Attributes y Values. Como es lógico, necesitamos tener vinculado el número de índice (transactionID) con el valor (será nuestro Item). Así que eliminaremos la columna Attribute.

7. Desde la columna Value utilizaremos el selector de filtrar y desmarcamos los valores en Blank:

8. Renombramos las dos columnas, transactionID e Item:

Finalmente, la parte de transformación estará completa. Le damos a Cerrar y Guardar para volver a nuestro informe.

Creación de las columnas calculadas con DAX para la generación de las métricas de nuestro MBA

Una vez cargado el dataset, debemos tener las fuentes de datos y el lienzo listo para poder operar:

Debemos entrar ahora en nuestro dataset: el ícono que aparece a la izquierda entre Lienzo y Modelo. También otra opción es seleccionar nuestra fuente de datos, groceries y crear una tabla calculada.

Sea donde hagas clic, el código DAX deberá ser sustituido con el tipo de dataset y nombre de columnas cargadas, por lo que es importante su adaptación:

# Creación de la tabla
MBA Table = 
FILTER(
    CROSSJOIN(
        VALUES(groceries[Item]),
        SELECTCOLUMNS(VALUES(groceries[Item]),"Item2",
            groceries[Item])),groceries[Item]>[Item2]
)

Y su resultado será una nueva tabla:

En esta misma tabla crearemos 5 nuevas columnas calculadas:

Basket = MBA[Item]&" - "&MBA[Item2]
SupportMBA_col = 
var item1 = MBA[Item]
var item2 = MBA[Item2]

var transactWithItem1 = 
    SELECTCOLUMNS(FILTER(groceries,groceries[Item] = item1), "transactionID", groceries[transactionID])

var transactWithItem2 = 
    SELECTCOLUMNS(FILTER(groceries,groceries[Item] = item2), "transactionID", groceries[transactionID])

var transactWithBothItems =
    INTERSECT(transactWithItem1,transactWithItem2)

RETURN 
    COALESCE(
            COUNTROWS(transactWithBothItems) / DISTINCTCOUNT(groceries[transactionID]),
            0
    )
Lift = 

var item1 = [Item]
var item2 = [Item2]

var numberOfTransactions = DISTINCTCOUNT(groceries[TransactionID])

var supportItem1 = COUNTROWS(FILTER('groceries','groceries'[Item]=item1))/numberOfTransactions

var supportItem2 = COUNTROWS(FILTER('groceries','groceries'[Item]=item2))/numberOfTransactions

RETURN [SupportMBA_col]/(supportItem1*supportItem2)
Confidence Item1 -> Basket = 

var item1 = [Item]
var numberOfTransactions = DISTINCTCOUNT(groceries[transactionID])

var supportItem1 = COUNTROWS(FILTER('groceries','groceries'[Item]=item1))/ numberOfTransactions

RETURN COALESCE([SupportMBA_col] / supportItem1,0)
Confidence Item2 -> Basket = 

var item2 = [Item2]
var numberOfTransactions = DISTINCTCOUNT(groceries[transactionID])

var supportItem2 = COUNTROWS(FILTER('groceries','groceries'[Item]=item2))/ numberOfTransactions

RETURN COALESCE([SupportMBA_col] / supportItem2,0)

Visualización de nuestro dataset

Una premisa, para poder realizar la operación de visualización es suficiente con el gráfico de dispersión o scatterplot, donde al tener dos medidas seremos capaces de tener una visualización decente:

Para este gráfico, necesitaremos que pongamos estos elementos:

Además de tocar algo de filtros, es importante para no tener que tener miles de puntos agrupados.

Jugar con los diferentes filtros nos permitirá tener una visualización u otra.

En el siguiente panel he descargado desde el marketplace el componente visual Network. Aquí vemos los elementos a añadir:

Y, para finalizar, una tabla si lo veis necesario para complementar el gráfico:

Ya está listo para publicar y realizar el análisis. Aquí tenéis el el fichero PBIX.

Conclusiones

En este post hemos visto el algoritmo de reglas de asociación de un recomendador, la terminología clave y cómo podemos averiguar si existe alguna relación fuerte entre las variables mirando las diferentes métricas. Muy teórico, pero importante para entender los insights finales.

Una vez aterrizados en Power BI, debemos entender bien que el primer paso para crear un conjunto de reglas de asociación es determinar los umbrales óptimos de apoyo y confianza.

Si establecemos estos valores demasiado bajos, el algoritmo tardará más en ejecutarse y obtendremos muchas reglas (la mayoría de ellas no serán útiles). Podemos probar diferentes valores de apoyo y confianza y ver gráficamente cuántas reglas se generan para cada combinación.

Y ahora que has visto este tutorial sencillo, su parte de teoría y práctica, YOUR TURN!

Puedes descargar el dataset de Market Basket Analysis para analizar lo siguiente: ¿Puedes observar si merece la pena abrir los sábados y vender algún producto? ¿Cuándo es la hora punta donde deberíamos tener un abastecimiento suficiente para no perder clientes?

Cuéntanos qué te parece.

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.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.