Aprendizaje con Reglas de Asociación usando Python
El aprendizaje con reglas de asociación lo vemos aplicado principalmente en los sistemas de recomendación, como en el caso donde se nos muestra que las personas que compraron este producto, también compraron este otro .. o quienes vieron tal película también recomiendan estas otras, etc.
Para ello, el algoritmo a priori es uno de los más utilizados en este tema y permite encontrar de forma eficiente conjuntos de items frecuentes, los cuales sirven de base para generar reglas de asociación entre los items.
Primero identifica los items individuales frecuentes dentro del conjunto de datos para luego extenderlo a un conjunto de mayor tamaño siempre y cuando esos conjuntos de datos aparezcan constantemente y de manera frecuente de acuerdo con un umbral establecido.
El algoritmo se aplica principalmente en el análisis de transacciones comerciales y en los problemas de predicción. Es por ello que el algoritmo está diseñado para trabajar con bases de datos que contienen transacciones como los productos o artículos comprados por consumidores, o detalles sobre las visitas a un sitio web, etc.
La forma de generar las reglas de asociación consta de dos pasos:
- Generación de combinaciones frecuentes: cuyo objetivo es encontrar aquellos conjuntos que sean frecuentes en la base de datos. Para determinar la frecuencia se establece un umbral.
- Generación de reglas: A partir de los conjuntos frecuentes se crean las reglas en base al ordenamiento de un índice que establece los grupos de items o productos frecuentes.
El índice para la generación de combinaciones se llama soporte y el índice para la generación de reglas se llama confidencia.
Algoritmo
- Paso 1. Se establecen los valores mínimos para el soporte y la confidencia
- Paso 2. Se toman todos los subconjuntos de transacciones que tienen un soporte mayor al valor del soporte mínimo.
- Paso 3. Tomar todas las reglas de estos subconjuntos que tengan una confidencia mayor al valor de la confidencia mínima.
- Paso 4. Ordenar las reglas de forma decreciente en base al valor del lift.
Si quieres ver el tema en video, checalo aquí y suscribete al canal en Youtube.
Ejemplo
Si tenemos un conjunto de 5 transacciones con diversos productos en cada una de ellas de acuerdo con la siguiente tabla
1 | Pan, leche, pañales |
2 | Pan, pañales, cerveza, huevo |
3 | Leche, pañales, cerveza, refresco, café |
4 | Pan, leche, pañales, cerveza |
5 | Pan, refresco, leche, pañales |
El primer paso es generar las compinaciones frecuentes, y, si queremos un soporte superior al 50%, entonces contamos la frecuencia de cada uno de los artículos, es decir, en cuantas transacciones aparecen cada uno de los artículos.
Artículo | Transacciones |
Cerveza | 3 |
Pan | 4 |
Refresco | 2 |
Pañales | 5 |
Leche | 4 |
Huevo | 1 |
Café | 1 |
Para calcular el soporte de cada artículo dividimos la cantidad de transacciones de cada artículo, entre el total de transacciones. Es decir, para cerveza tenemos que aparece en 3 de las 5 transacciones, entonces es 3/5 = 0.6 que representa el 60%. Para el resto de los artículos tenemos lo siguiente:
Artículo | Soporte |
Cerveza | 60% |
Pan | 80% |
Refresco | 40% |
Pañales | 100% |
Leche | 80% |
Huevo | 20% |
Café | 20% |
Como se requiere un soporte superior al 50% entonces eliminamos todos los artículos que estan por abajo de este umbral: refreso, huevo y café.
El siguiente paso es generar las combinaciones con los productos que quedaron para iterar primero con combinaciones de dos, calculamos el soporte y después con combinaciones de 3 y así sucesivamente.
Conjuntos | Frecuencia | Soporte |
Cerveza, Pan | 2 | 40% |
Cerveza, Pañales | 3 | 60% |
Cerveza, Leche | 2 | 40% |
Pan, Pañales | 4 | 80% |
Pan, Leche | 3 | 60% |
Pañales, Leche | 4 | 80% |
Eliminamos los que estan por abajo del 50% y nos quedamos con los primeros conjuntos frecuentes cuyo soporte es superior al 50%
Cerveza, Pañales |
Pan, Pañales |
Pan, Leche |
Pañales, Leche |
A partir de los conjuntos generados, creamos conjuntos de tres artículos y calculamos su soporte
Conjuntos | Frecuencia | Soporte |
Cerveza, Pañales, Pan | 2 | 40% |
Cerveza, Pañales, Leche | 2 | 40% |
Pan, Pañales, Leche | 3 | 60% |
Pan, Leche, Cerveza | 1 | 20% |
En estas combinaciones de tres, únicamente nos quedamos con el conjunto formado por Pan, Pañales y Leche, el cual utilizamos para hacer combinaciones de 4 artículos, sin embargo para este caso, tienen soporte de 20% por lo cual, aquí termina el argoritmo.
El resultado arrojo un elemento de 3 artículos y cuatro de 2 artículos:
Pan, Pañales, Leche |
Cerveza, Pañales |
Pan, Pañales |
Pan, Leche |
Pañales, Leche |
A partir de estos 5 conjuntos obtenemos la reglas de asociación, para lo cual, establecemos que también queremos un índice superior 50%. Este índice es la confidencia y lo calculamos dividiendo las repeticiones de las observaciones del conjunto entre las repeticiones de la regla:
Tomando el primer conjunto de Pan, Pañales, Leche, las reglas posibles son:
- Pan => Pañales, Leche
- Pañales => Pan, Leche
- Leche = Pan, Pañales
- Pan, Pañales => Leche
- Pan, Leche => Pañales
- Leche, Pañales => Pan
Si tomamos la primer regla: Pan => Pañales, Leche observamos que en las transacciones originales que Pan, Pañales, Leche aparece en 3 transacciones y la regla Pan aparece en 4 transacciones, entonces la confidencia es 3/4 = 0.75 que es el 75%
Para la regla formada por: Pan, Pañales => Leche tenemos que la combinación Pan, Pañales, Leche aparece en 3 transacciones y la regla Pañales, Leche en 4 transacciones por lo que su confidencia es del 75% también, es decir 3/4 = 0.75
Una vez que calculamos las confidencia de todas las reglas, las ordenamos de mayor a menor en base a esa confidencia calculada y obtenemos las reglas de asociación para todo el conjunto, que es como funciona el algoritmo A Priori.
A Priori con Python
Para el ejemplo con python utilizaremos un conjunto de datos de transacciones comerciales llamado: Market_Basket_Optimisation.csv con 7,501 registros o transacciones, cada una de las cuales contiene uno o varios productos de un supermercado:
Observamos las reglas resultantes con 2, 3 o más artículos que implican otro grupo de productos y tenemos también el soporte, la confidencia y el lift.
Clase Apriori
La clase apriori utilizada en la implementación anterior es la siguiente:
Ambos archivos deben estar en la misma carpeta para poder utilizar la clase en el script que crea las reglas de asociación.
are Python an insurance that has already been associated?
No at all
what is the Association Rules?
Association rules are used to discover facts that occur in common within a given dataset. The relation among variables in big datasets. In sales, for example, the probability that a customer who buy product A, also includes Product B