Articulo de referencia

Algoritmo Apriori

Apriori [ 1 ] es un algoritmo para la minería de conjuntos de elementos frecuentes y el aprendizaje de reglas de asociación sobre bases de datos relacionales . Procede identific...

Apriori [ 1 ] es un algoritmo para la minería de conjuntos de elementos frecuentes y el aprendizaje de reglas de asociación sobre bases de datos relacionales . Procede identificando los elementos individuales frecuentes en la base de datos y extendiéndolos a conjuntos de elementos cada vez mayores, siempre que dichos conjuntos aparezcan con suficiente frecuencia en la base de datos. Los conjuntos de elementos frecuentes determinados por Apriori pueden utilizarse para determinar reglas de asociación que resaltan tendencias generales en la base de datos ; esto tiene aplicaciones en dominios como el análisis de cestas de compra .

Descripción general

El algoritmo Apriori fue propuesto por Agrawal y Srikant en 1994. Apriori está diseñado para operar en bases de datos que contienen transacciones (por ejemplo, colecciones de artículos comprados por clientes, o detalles de la frecuencia de un sitio web o direcciones IP [ 2 ] ). Otros algoritmos están diseñados para encontrar reglas de asociación en datos sin transacciones ( Winepi y Minepi), o sin marcas de tiempo ( secuenciación de ADN ). Cada transacción se considera un conjunto de elementos (un itemset ). Dado un umbraldo{\displaystyle C}, el algoritmo Apriori identifica los conjuntos de elementos que son subconjuntos de al menosdo{\displaystyle C}transacciones en la base de datos.

Apriori utiliza un enfoque "de abajo hacia arriba", donde los subconjuntos frecuentes se extienden elemento por elemento (un paso conocido como generación de candidatos ), y los grupos de candidatos se prueban con los datos. El algoritmo finaliza cuando no se encuentran más extensiones exitosas.

Apriori utiliza una búsqueda en anchura y una estructura de árbol hash para contar eficientemente conjuntos de elementos candidatos. Genera conjuntos de elementos candidatos de longitudk{\displaystyle k}de conjuntos de elementos de longitudk1{\displaystyle k-1}Luego, poda los candidatos que tienen un subpatrón poco frecuente. Según el lema de cierre descendente, el conjunto de candidatos contiene todos los subpatrones frecuentes.k{\displaystyle k}-conjuntos de elementos de longitud. Después de eso, escanea la base de datos de transacciones para determinar los conjuntos de elementos frecuentes entre los candidatos.

A continuación se muestra el pseudocódigo del algoritmo para una base de datos transaccional.T{\displaystyle T}y un umbral de soporte deε{\displaystyle \varepsilon }Se emplea la notación habitual de la teoría de conjuntos, aunque tenga en cuenta queT{\displaystyle T}es un multiconjunto .dok{\displaystyle C_{k}}es el candidato establecido para el nivelk{\displaystyle k}En cada paso, se supone que el algoritmo genera los conjuntos candidatos a partir de los grandes conjuntos de elementos del nivel anterior, teniendo en cuenta el lema de cierre descendente.doonortet[do]{\displaystyle \mathrm {count} [c]}accede a un campo de la estructura de datos que representa el conjunto de candidatosdo{\displaystyle c}, que inicialmente se asume que es cero. A continuación se omiten muchos detalles; por lo general, la parte más importante de la implementación es la estructura de datos utilizada para almacenar los conjuntos candidatos y contar sus frecuencias.

Apriori (T, ε) L 1 ← {conjuntos de elementos singleton grandes} k ← 2 mientras L k−1 no está vacío C k ← Generar_candidatos(L k−1 , k) para transacciones t en T D t ← {c en C k : c ⊆ t} para candidatos c en D t count[c] ← count[c] + 1 L k ← {c en C k : count[c] ≥ ε} k ← k + 1 devolver Unión(L k ) sobre todos los k Generar_candidatos (L, k) resultado ← empty_set() para todo p ∈ L, q ∈ L donde p y q difieren en exactamente un elemento c ← p ∪ q si u ∈ L para todo u ⊆ c donde |u| = k-1 resultado.add(c) devolver resultado

Ejemplos

Ejemplo 1

Consideremos la siguiente base de datos, donde cada fila es una transacción y cada celda es un elemento individual de la transacción:

Las reglas de asociación que se pueden determinar a partir de esta base de datos son las siguientes:

  1. El 100% de los conjuntos con α también contienen β.
  2. El 50% de los conjuntos con α y β también tienen ε.
  3. El 50% de los conjuntos con α y β también tienen θ.

También podemos ilustrar esto mediante diversos ejemplos.

Ejemplo 2

Supongamos que un gran supermercado registra los datos de ventas por unidad de mantenimiento de existencias (SKU) para cada artículo: cada artículo, como "mantequilla" o "pan", se identifica mediante un SKU numérico. El supermercado tiene una base de datos de transacciones donde cada transacción es un conjunto de SKU que se compraron juntos.

Supongamos que la base de datos de transacciones consta de los siguientes conjuntos de elementos:

Usaremos Apriori para determinar los conjuntos de elementos frecuentes de esta base de datos. Para ello, diremos que un conjunto de elementos es frecuente si aparece en al menos 3 transacciones de la base de datos: el valor 3 es el umbral de soporte .

El primer paso de Apriori es contar el número de ocurrencias, llamado soporte, de cada elemento miembro por separado. Al escanear la base de datos por primera vez, obtenemos el siguiente resultado.

Todos los conjuntos de elementos de tamaño 1 tienen un soporte de al menos 3, por lo que todos son frecuentes.

El siguiente paso es generar una lista de todos los pares de elementos frecuentes.

Por ejemplo, con respecto al par {1,2}: la primera tabla del Ejemplo 2 muestra que los elementos 1 y 2 aparecen juntos en tres de los conjuntos de elementos; por lo tanto, decimos que el elemento {1,2} tiene soporte de tres.

Los pares {1,2}, {2,3}, {2,4} y {3,4} cumplen o superan el soporte mínimo de 3, por lo que son frecuentes. Los pares {1,3} y {1,4} no lo son. Ahora bien, dado que {1,3} y {1,4} no son frecuentes, ningún conjunto mayor que contenga {1,3} o {1,4} puede ser frecuente. De esta forma, podemos podar conjuntos: ahora buscaremos triples frecuentes en la base de datos, pero ya podemos excluir todos los triples que contengan uno de estos dos pares:

En el ejemplo, no hay tríos frecuentes. {2,3,4} está por debajo del umbral mínimo, y los demás tríos se excluyeron porque eran superconjuntos de pares que ya estaban por debajo del umbral.

De este modo, hemos determinado los conjuntos frecuentes de elementos en la base de datos y hemos ilustrado cómo algunos elementos no se contabilizaron porque ya se sabía que uno de sus subconjuntos estaba por debajo del umbral.

Limitaciones

Apriori, si bien es históricamente significativo, adolece de varias ineficiencias o compromisos que han dado lugar a otros algoritmos. La generación de candidatos genera un gran número de subconjuntos (el algoritmo intenta cargar el conjunto de candidatos con tantos subconjuntos como sea posible antes de cada escaneo de la base de datos). La exploración de subconjuntos de abajo hacia arriba (esencialmente un recorrido en anchura de la red de subconjuntos) encuentra cualquier subconjunto maximal S solo después de que todos2|S|1{\displaystyle 2^{|S|}-1}de sus subconjuntos propios.

El algoritmo escanea la base de datos demasiadas veces, lo que reduce el rendimiento general. Por ello, el algoritmo asume que la base de datos permanece permanentemente en la memoria.

Además, la complejidad temporal y espacial de este algoritmo es muy alta:O(2|D|){\displaystyle O\left(2^{|D|}\right)}, por lo tanto exponencial, donde|D|{\displaystyle |D|}es el ancho horizontal (el número total de elementos) presentes en la base de datos.

Algoritmos posteriores como Max-Miner [ 3 ] intentan identificar los conjuntos máximos de elementos frecuentes sin enumerar sus subconjuntos y realizan "saltos" en el espacio de búsqueda en lugar de un enfoque puramente ascendente.

Referencias

  1. Rakesh Agrawal y Ramakrishnan Srikant. Algoritmos rápidos para la minería de reglas de asociación . Actas de la XX Conferencia Internacional sobre Bases de Datos Muy Grandes (VLDB), páginas 487-499, Santiago, Chile, septiembre de 1994.
  2. La ciencia de datos detrás de la coincidencia de direcciones IP Publicado por deductive.com, 6 de septiembre de 2018, consultado el 7 de septiembre de 2018
  3. Bayardo Jr, Roberto J. (1998). "Extracción eficiente de patrones largos de bases de datos" (PDF) . ACM SIGMOD Record . 27 (2): 85– 93. doi : 10.1145/276305.276313 .
  • ARtool , aplicación Java GPL para la minería de reglas de asociación con interfaz gráfica de usuario (GUI), que ofrece implementaciones de múltiples algoritmos para el descubrimiento de patrones frecuentes y la extracción de reglas de asociación (incluye Apriori).
  • SPMF ofrece implementaciones de código abierto en Java del algoritmo Apriori y varias variantes como AprioriClose, UApriori, AprioriInverse, AprioriRare, MSApriori, AprioriTID y otros algoritmos más eficientes como FPGrowth y LCM.
  • Christian Borgelt proporciona implementaciones en C para Apriori y muchos otros algoritmos de minería de patrones frecuentes (Eclat, FPGrowth, etc.). El código se distribuye como software libre bajo la licencia MIT .
  • El paquete R arules contiene Apriori y Eclat, así como la infraestructura necesaria para representar, manipular y analizar datos y patrones de transacciones.
  • Efficient-Apriori es un paquete de Python que incluye una implementación del algoritmo tal como se presenta en el artículo original.