En el curso hemos visto ya las reglas de asociación con el paquete de R “arules”, diciendo que una de las aplicaciones que tenía era para poder estudiar reglas de asociación secuenciales cuando los sucesos a estudiar no se producen en el mismo periodo de tiempo, sino que es necesario ver la secuencia histórica de los mismos para sacar conclusiones.
Este tipo de análisis se emplea en un estudio de la navegación de los usuarios por una página web, o en el análisis de la cesta de la compra a lo largo de un periodo largo de tiempo para ver las asociaciones condicionales que pudiera haber, introduciendo de manera somera, el concepto de causa-efecto entre dos eventos.
Decimos “somera”, primero, porque este tipo de análisis no es suficiente para probar causalidad sino simplemente asociación en el tiempo, pero, aun así, sirve para poder establecer hipótesis que luego pudiera analizarse mejor y, segundo, porque no emplea estudios de correlación ni demuestran que un evento causa siempre otro con un determinado lapsus de periodo, sino que una vez un evento se asoció con otro evento, tras un periodo de tiempo, pero que otra vez, esa relación puede ser distinta.
Por lo tanto, este tipo de algoritmos que muestran asociación, nos crean un conocimiento muy relacionado con el momento en el que se produce y, por lo general, muy poco flexible a generalizaciones, ya que como creadores de conocimiento científico, la asociación es un método muy débil.
El ejemplo sobre el que vamos a trabajar es un caso ficticio de las ventas a lo largo de un periodo de tiempo del departamento de limpieza de un supermercado.
Para empezar, tenemos que decir que el formato en el que hay que introducir los datos en el algoritmo es un formato especial, llamado “basket”, aunque puede emplearse otro formato llamado “simple”.
En el formato “basket” cada registro representa una transacción, por ejemplo, las compras de un cliente en un determinado día que pueden contener varios productos. Mientras que en el formato “simple” cada registro representa la compra de un único artículo teniendo que tener en ese mismo registro un campo para especificar el código de transacción.
Nosotros hemos elegido el formato “basket” como puede verse en la figura 1, en donde separamos los campos con “;” e introducimos en primer lugar el código de cliente, luego la fecha en formato numérico Excel (días a partir del 1-1-1900), a continuación el número de productos comprados y, por último, la descripción de los productos comprados separados por un espacio en blanco.
Para empezar a trabajar con R, cargamos las librerías y leemos el contenido del fichero, indicando el nombre de los campos, lo que nos crea un objeto de tipo “transaction” que visualizamos con la orden “inspect”
El siguiente paso es la ejecución del algoritmo teniendo en cuenta sus diferentes opciones, ya que se trata de estudiar los eventos de forma secuencial, en donde como puede verse tenemos parámetros de especificación de las reglas a obtener y parámetros de control del algoritmo.
Los parámetros de obtención de reglas son: “support”: el soporte mínimo que le pedimos a esa regla, “maxsize”: el tamaño máximo o número de artículos distinto máximo que puede contener la regla, “maxlen”: el número de elementos o número de artículos repetidos máximo que puede contener la regla y “maxgap”: el número máximo de longitud del intervalo de tiempo o de diferencia entre dos eventos para que se considere que pudiera haber asociación.
Los parámetros de control del algoritmo son: “verbose”: mostrar evolución de la ejecución y estadísticas de tiempos, “summary”: guardar información resumen, “tidLists”: guardar los identificadores de la transacción en el objeto resultado.
Con la orden “summary” podemos ver el resultado: 694 secuencias detectadas que no reglas, (puesto que no tienen una asociación definida aún), con los ítems y los elementos más frecuentes y algunas estadísticas.
Otras estadísticas de las secuencias las podemos ver con esta orden, en donde podemos ver que hay, por ejemplo 4 secuencias de longitud 3, pero que contienen un solo artículo, con lo que p podríamos empezar a cuestionarnos si esas reglas son necesarias, lo que significa que se ha comprado el mismo item en diferentes días por el mismo cliente.
Si queremos ver cómo son esas secuencias podemos hacerlo con las siguientes órdenes:
En el caso de que no deseemos estudiar las secuencias que tienen repeticiones, las podemos eliminar con estas órdenes, en donde sólo nos quedamos con aquellas secuencias que no tienen elementos repetidos.
Si queremos examinar las secuencias y ver cuáles son los ítems más frecuentes podemos hacerlo así, teniendo en cuenta que si un mismo día se han comprado dos artículos se consideren un solo ítem.
Ahora vamos a convertir las secuencias en reglas de asociación para poder estudiarlas y, al hacerlo, seleccionamos sólo las reglas con un confianza del 95%, recordar en esto que las secuencias no tienen confianza, sólo soporte, viendo unas estadísticas de las métricas de calidad de las 97 reglas obtenidas.
Aquí mostramos las diferencias entre las clases de los dos objetos con los que estamos trabajando.
En donde podemos seleccionar las reglas que tienen un lift superior a 2 de esta manera, convirtiendo las reglas en un data.frame y operando con los criterios habituales en estos objetos, incluso seleccionando aquellas reglas que contenga el artículo “cubo”.
El resto de las utilidades que se ven con la regla “arules” se pueden emplear aquí para analizar y seleccionar las reglas adecuadas.
Aquí puedes descargar el archivo para comprobar todo el proceso realizado.
A continuación puedes leer otros artículos relacionados:
– Introducción al análisis de redes
Autor: Pedro José Jiménez, profesor del Máster en Big Data y Business Intelligence