{ "cells": [ { "cell_type": "markdown", "id": "eafb1be2", "metadata": {}, "source": [ "# Reglas de asociación con Python\n", "## 1. Introduccion\n", "

1.1. Presentacion

\n", "

Los algoritmos de reglas de asociación tienen como objetivo encontrar relaciones dentro un conjunto de transacciones, en concreto, items o atributos que tienden a ocurrir de forma conjunta. En este contexto, el término transacción hace referencia a cada grupo de eventos que están asociados de alguna forma.

\n", "

A cada uno de los eventos o elementos que forman parte de una transacción se le conoce como item y a un conjunto de ellos, conjunto de items o itemset. Una transacción puede estar formada por uno o varios items, en el caso de ser varios, cada posible subconjunto de ellos es un itemset distinto. Por ejemplo, la transacción T = {A,B,C} está formada por 3 items (A, B y C) y sus posibles itemsets son: {A,B,C}, {A,B}, {B,C}, {A,C}, {A}, {B} y {C}.

\n", "

Una regla de asociación se define como una implicación del tipo “si X entonces Y” (X ==> Y), donde X e Y son itemsets o items individuales. El lado izquierdo de la regla recibe el nombre de antecedente y el lado derecho el nombre de consecuente

\n", "

Apriori fue uno de los primeros algoritmos desarrollados para la búsqueda de reglas de asociación y sigue siendo uno de los más empleados, tiene dos etapas: Identificar todos los itemsets que ocurren con una frecuencia por encima de un determinado límite, para luego convertir esos itemsets frecuentes en reglas de asociación.

\n", "

Basado en la informacion presentada en el sitio: Ciencia de Datos:

\n", "

1.2. Principales Indicadores

\n", "

Soporte:

\n", "

El soporte del item o itemset X es el número de transacciones que contienen X dividido entre el total de transacciones.

\n", "

Confianza:

\n", "

La confianza se interpreta como la probabilidad P(Y|X), es decir, la probabilidad de que una transacción que contiene los items de X, también contenga los items de Y (o bien la probabilidad que ocurra Y sabiendo que ocurrio X).

\n", "

Lift (o apalancamiento):

\n", "

Expresa cuántas más veces es probable que se de la regla en comparación con la probabilidad que el consecuente se de solo, fuera de la regla. A mayor Lift, mayor fortaleza de la regla.

\n", "

1.3. Las reglas de asociacion en Python

\n", "

En python, el algoritmo Apriori se presenta en varias librerias. En este trabajo se uso el algoritmo apyori, que es una simple y sencilla implementacion del algoritmo en python.

\n", "

Mas información acerca de Pyori en: el sitio oficial de Apyory en Python. Para instalarlo:

\n", "%pip install apyori\n", "

Como se mencionó en la introducción, Apriori utiliza items de una transaccion y no valores. Es por ello que solo se utilizan variables binarias.

\n", "

En la regla de asociación con Apyory, la regla implica que si un conjunto de transacciones contiene los elementos de base (izquierda), entonces hay una alta probabilidad de que también contenga los elementos en el conjunto de elementos de la derecha." ] }, { "cell_type": "markdown", "id": "2d0a5687", "metadata": {}, "source": [ "### 1.4. Un ejemplo de Apyory" ] }, { "cell_type": "code", "execution_count": 1, "id": "b62bfc08", "metadata": {}, "outputs": [], "source": [ "from apyori import apriori\n", "# Definir los datos de transacciones de ejemplo\n", "dataset = [['pan', 'leche', 'queso'],\n", " ['pan', 'leche', 'pañales', 'cerveza'],\n", " ['pan', 'queso', 'pañales', 'cerveza'],\n", " ['leche', 'pañales', 'cerveza'],\n", " ['pan', 'leche', 'queso', 'pañales', 'cerveza'],\n", " ['pan', 'leche', 'pañales', 'cerveza']]\n", "\n", "# Generar los conjuntos de elementos frecuentes con el algoritmo Apriori\n", "results = list(apriori(dataset, min_support=0.3, min_confidence=0.7))" ] }, { "cell_type": "code", "execution_count": 2, "id": "5d909e0b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Conjunto de elementos frecuentes:\n", "['cerveza']\n", "Soporte: 0.8333333333333334\n", "Reglas de asociación:\n", "1\n", "[] ==> ['cerveza'] (Confianza: 0.8333333333333334 Apalancamiento: 1.0 )\n", "Conjunto de elementos frecuentes:\n", "['leche']\n", "Soporte: 0.8333333333333334\n", "Reglas de asociación:\n", "2\n", "[] ==> ['leche'] (Confianza: 0.8333333333333334 Apalancamiento: 1.0 )\n", "Conjunto de elementos frecuentes:\n", "['pan']\n", "Soporte: 0.8333333333333334\n", "Reglas de asociación:\n", "3\n", "[] ==> ['pan'] (Confianza: 0.8333333333333334 Apalancamiento: 1.0 )\n", "Conjunto de elementos frecuentes:\n", "['pañales']\n", "Soporte: 0.8333333333333334\n", "Reglas de asociación:\n", "4\n", "[] ==> ['pañales'] (Confianza: 0.8333333333333334 Apalancamiento: 1.0 )\n", "Conjunto de elementos frecuentes:\n", "['cerveza', 'leche']\n", "Soporte: 0.6666666666666666\n", "Reglas de asociación:\n", "5\n", "['cerveza'] ==> ['leche'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "['leche'] ==> ['cerveza'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'cerveza']\n", "Soporte: 0.6666666666666666\n", "Reglas de asociación:\n", "6\n", "['cerveza'] ==> ['pan'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "['pan'] ==> ['cerveza'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "Conjunto de elementos frecuentes:\n", "['pañales', 'cerveza']\n", "Soporte: 0.8333333333333334\n", "Reglas de asociación:\n", "7\n", "[] ==> ['pañales', 'cerveza'] (Confianza: 0.8333333333333334 Apalancamiento: 1.0 )\n", "['cerveza'] ==> ['pañales'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "['pañales'] ==> ['cerveza'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'leche']\n", "Soporte: 0.6666666666666666\n", "Reglas de asociación:\n", "8\n", "['leche'] ==> ['pan'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "['pan'] ==> ['leche'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "Conjunto de elementos frecuentes:\n", "['pañales', 'leche']\n", "Soporte: 0.6666666666666666\n", "Reglas de asociación:\n", "9\n", "['leche'] ==> ['pañales'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "['pañales'] ==> ['leche'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'pañales']\n", "Soporte: 0.6666666666666666\n", "Reglas de asociación:\n", "10\n", "['pan'] ==> ['pañales'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "['pañales'] ==> ['pan'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'queso']\n", "Soporte: 0.5\n", "Reglas de asociación:\n", "11\n", "['queso'] ==> ['pan'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'cerveza', 'leche']\n", "Soporte: 0.5\n", "Reglas de asociación:\n", "12\n", "['cerveza', 'leche'] ==> ['pan'] (Confianza: 0.75 Apalancamiento: 0.8999999999999999 )\n", "['pan', 'cerveza'] ==> ['leche'] (Confianza: 0.75 Apalancamiento: 0.8999999999999999 )\n", "['pan', 'leche'] ==> ['cerveza'] (Confianza: 0.75 Apalancamiento: 0.8999999999999999 )\n", "Conjunto de elementos frecuentes:\n", "['pañales', 'cerveza', 'leche']\n", "Soporte: 0.6666666666666666\n", "Reglas de asociación:\n", "13\n", "['cerveza'] ==> ['pañales', 'leche'] (Confianza: 0.7999999999999999 Apalancamiento: 1.2 )\n", "['leche'] ==> ['pañales', 'cerveza'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "['pañales'] ==> ['cerveza', 'leche'] (Confianza: 0.7999999999999999 Apalancamiento: 1.2 )\n", "['cerveza', 'leche'] ==> ['pañales'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "['pañales', 'cerveza'] ==> ['leche'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "['pañales', 'leche'] ==> ['cerveza'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'cerveza', 'pañales']\n", "Soporte: 0.6666666666666666\n", "Reglas de asociación:\n", "14\n", "['cerveza'] ==> ['pan', 'pañales'] (Confianza: 0.7999999999999999 Apalancamiento: 1.2 )\n", "['pan'] ==> ['pañales', 'cerveza'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "['pañales'] ==> ['pan', 'cerveza'] (Confianza: 0.7999999999999999 Apalancamiento: 1.2 )\n", "['pan', 'cerveza'] ==> ['pañales'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "['pañales', 'cerveza'] ==> ['pan'] (Confianza: 0.7999999999999999 Apalancamiento: 0.9599999999999999 )\n", "['pan', 'pañales'] ==> ['cerveza'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'cerveza', 'queso']\n", "Soporte: 0.3333333333333333\n", "Reglas de asociación:\n", "15\n", "['queso', 'cerveza'] ==> ['pan'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "Conjunto de elementos frecuentes:\n", "['pañales', 'cerveza', 'queso']\n", "Soporte: 0.3333333333333333\n", "Reglas de asociación:\n", "16\n", "['queso', 'cerveza'] ==> ['pañales'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "['pañales', 'queso'] ==> ['cerveza'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'leche', 'pañales']\n", "Soporte: 0.5\n", "Reglas de asociación:\n", "17\n", "['pan', 'leche'] ==> ['pañales'] (Confianza: 0.75 Apalancamiento: 0.8999999999999999 )\n", "['pañales', 'leche'] ==> ['pan'] (Confianza: 0.75 Apalancamiento: 0.8999999999999999 )\n", "['pan', 'pañales'] ==> ['leche'] (Confianza: 0.75 Apalancamiento: 0.8999999999999999 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'queso', 'leche']\n", "Soporte: 0.3333333333333333\n", "Reglas de asociación:\n", "18\n", "['queso', 'leche'] ==> ['pan'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'queso', 'pañales']\n", "Soporte: 0.3333333333333333\n", "Reglas de asociación:\n", "19\n", "['pañales', 'queso'] ==> ['pan'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'cerveza', 'leche', 'pañales']\n", "Soporte: 0.5\n", "Reglas de asociación:\n", "20\n", "['cerveza', 'leche'] ==> ['pan', 'pañales'] (Confianza: 0.75 Apalancamiento: 1.125 )\n", "['pan', 'cerveza'] ==> ['pañales', 'leche'] (Confianza: 0.75 Apalancamiento: 1.125 )\n", "['pan', 'leche'] ==> ['pañales', 'cerveza'] (Confianza: 0.75 Apalancamiento: 0.8999999999999999 )\n", "['pañales', 'leche'] ==> ['pan', 'cerveza'] (Confianza: 0.75 Apalancamiento: 1.125 )\n", "['pan', 'pañales'] ==> ['cerveza', 'leche'] (Confianza: 0.75 Apalancamiento: 1.125 )\n", "['pan', 'cerveza', 'leche'] ==> ['pañales'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "['pañales', 'cerveza', 'leche'] ==> ['pan'] (Confianza: 0.75 Apalancamiento: 0.8999999999999999 )\n", "['pan', 'cerveza', 'pañales'] ==> ['leche'] (Confianza: 0.75 Apalancamiento: 0.8999999999999999 )\n", "['pan', 'leche', 'pañales'] ==> ['cerveza'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "Conjunto de elementos frecuentes:\n", "['pan', 'cerveza', 'pañales', 'queso']\n", "Soporte: 0.3333333333333333\n", "Reglas de asociación:\n", "21\n", "['queso', 'cerveza'] ==> ['pan', 'pañales'] (Confianza: 1.0 Apalancamiento: 1.5 )\n", "['pañales', 'queso'] ==> ['pan', 'cerveza'] (Confianza: 1.0 Apalancamiento: 1.5 )\n", "['pan', 'cerveza', 'queso'] ==> ['pañales'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "['pañales', 'cerveza', 'queso'] ==> ['pan'] (Confianza: 1.0 Apalancamiento: 1.2 )\n", "['pan', 'queso', 'pañales'] ==> ['cerveza'] (Confianza: 1.0 Apalancamiento: 1.2 )\n" ] } ], "source": [ "# Mostrar los conjuntos de elementos frecuentes y todas las reglas de asociación\n", "i=1\n", "for itemset in results:\n", " print(\"Conjunto de elementos frecuentes:\")\n", " print(list(itemset.items))\n", " print(\"Soporte: \", itemset.support)\n", " print(\"Reglas de asociación:\")\n", " print(i)\n", " for rule in itemset.ordered_statistics:\n", " print(list(rule.items_base), \" ==> \", list(rule.items_add), \"(Confianza: \", rule.confidence, \"Apalancamiento: \", rule.lift,\")\")\n", " i=i+1" ] }, { "cell_type": "code", "execution_count": 3, "id": "e89fed97", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
itemssupportordered_statistics
0(cerveza)0.833333[((), (cerveza), 0.8333333333333334, 1.0)]
1(leche)0.833333[((), (leche), 0.8333333333333334, 1.0)]
2(pan)0.833333[((), (pan), 0.8333333333333334, 1.0)]
3(pañales)0.833333[((), (pañales), 0.8333333333333334, 1.0)]
4(cerveza, leche)0.666667[((cerveza), (leche), 0.7999999999999999, 0.95...
5(pan, cerveza)0.666667[((cerveza), (pan), 0.7999999999999999, 0.9599...
6(pañales, cerveza)0.833333[((), (pañales, cerveza), 0.8333333333333334, ...
7(pan, leche)0.666667[((leche), (pan), 0.7999999999999999, 0.959999...
8(pañales, leche)0.666667[((leche), (pañales), 0.7999999999999999, 0.95...
9(pan, pañales)0.666667[((pan), (pañales), 0.7999999999999999, 0.9599...
10(pan, queso)0.500000[((queso), (pan), 1.0, 1.2)]
11(pan, cerveza, leche)0.500000[((cerveza, leche), (pan), 0.75, 0.89999999999...
12(pañales, cerveza, leche)0.666667[((cerveza), (pañales, leche), 0.7999999999999...
13(pan, cerveza, pañales)0.666667[((cerveza), (pan, pañales), 0.799999999999999...
14(pan, cerveza, queso)0.333333[((queso, cerveza), (pan), 1.0, 1.2)]
15(pañales, cerveza, queso)0.333333[((queso, cerveza), (pañales), 1.0, 1.2), ((pa...
16(pan, leche, pañales)0.500000[((pan, leche), (pañales), 0.75, 0.89999999999...
17(pan, queso, leche)0.333333[((queso, leche), (pan), 1.0, 1.2)]
18(pan, queso, pañales)0.333333[((pañales, queso), (pan), 1.0, 1.2)]
19(pan, cerveza, leche, pañales)0.500000[((cerveza, leche), (pan, pañales), 0.75, 1.12...
20(pan, cerveza, pañales, queso)0.333333[((queso, cerveza), (pan, pañales), 1.0, 1.5),...
\n", "
" ], "text/plain": [ " items support \\\n", "0 (cerveza) 0.833333 \n", "1 (leche) 0.833333 \n", "2 (pan) 0.833333 \n", "3 (pañales) 0.833333 \n", "4 (cerveza, leche) 0.666667 \n", "5 (pan, cerveza) 0.666667 \n", "6 (pañales, cerveza) 0.833333 \n", "7 (pan, leche) 0.666667 \n", "8 (pañales, leche) 0.666667 \n", "9 (pan, pañales) 0.666667 \n", "10 (pan, queso) 0.500000 \n", "11 (pan, cerveza, leche) 0.500000 \n", "12 (pañales, cerveza, leche) 0.666667 \n", "13 (pan, cerveza, pañales) 0.666667 \n", "14 (pan, cerveza, queso) 0.333333 \n", "15 (pañales, cerveza, queso) 0.333333 \n", "16 (pan, leche, pañales) 0.500000 \n", "17 (pan, queso, leche) 0.333333 \n", "18 (pan, queso, pañales) 0.333333 \n", "19 (pan, cerveza, leche, pañales) 0.500000 \n", "20 (pan, cerveza, pañales, queso) 0.333333 \n", "\n", " ordered_statistics \n", "0 [((), (cerveza), 0.8333333333333334, 1.0)] \n", "1 [((), (leche), 0.8333333333333334, 1.0)] \n", "2 [((), (pan), 0.8333333333333334, 1.0)] \n", "3 [((), (pañales), 0.8333333333333334, 1.0)] \n", "4 [((cerveza), (leche), 0.7999999999999999, 0.95... \n", "5 [((cerveza), (pan), 0.7999999999999999, 0.9599... \n", "6 [((), (pañales, cerveza), 0.8333333333333334, ... \n", "7 [((leche), (pan), 0.7999999999999999, 0.959999... \n", "8 [((leche), (pañales), 0.7999999999999999, 0.95... \n", "9 [((pan), (pañales), 0.7999999999999999, 0.9599... \n", "10 [((queso), (pan), 1.0, 1.2)] \n", "11 [((cerveza, leche), (pan), 0.75, 0.89999999999... \n", "12 [((cerveza), (pañales, leche), 0.7999999999999... \n", "13 [((cerveza), (pan, pañales), 0.799999999999999... \n", "14 [((queso, cerveza), (pan), 1.0, 1.2)] \n", "15 [((queso, cerveza), (pañales), 1.0, 1.2), ((pa... \n", "16 [((pan, leche), (pañales), 0.75, 0.89999999999... \n", "17 [((queso, leche), (pan), 1.0, 1.2)] \n", "18 [((pañales, queso), (pan), 1.0, 1.2)] \n", "19 [((cerveza, leche), (pan, pañales), 0.75, 1.12... \n", "20 [((queso, cerveza), (pan, pañales), 1.0, 1.5),... " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Trataremos a Results como DataFrame Pandas\n", "import pandas as pd\n", "res=pd.DataFrame(results)\n", "res" ] }, { "cell_type": "code", "execution_count": 8, "id": "1e6f201a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "combi 0\n", "['queso', 'cerveza']==>['pan', 'pañales'](Soporte: 0.33, Confianza: 1.0, Apalancamiento: 1.5\n", "combi 1\n", "['pañales', 'queso']==>['pan', 'cerveza'](Soporte: 0.33, Confianza: 1.0, Apalancamiento: 1.5\n", "combi 2\n", "['pan', 'cerveza', 'queso']==>['pañales'](Soporte: 0.33, Confianza: 1.0, Apalancamiento: 1.2\n", "combi 3\n", "['pañales', 'cerveza', 'queso']==>['pan'](Soporte: 0.33, Confianza: 1.0, Apalancamiento: 1.2\n", "combi 4\n", "['pan', 'queso', 'pañales']==>['cerveza'](Soporte: 0.33, Confianza: 1.0, Apalancamiento: 1.2\n" ] } ], "source": [ "# Analizaremos el Resultado nro 20\n", "a=res.iloc[20,2]\n", "long_a=len(a)\n", "# print(long_a)\n", "# Navegacion del resultado (y armado de reglas)\n", "longitud=len(list(a))\n", "soporte=round(res.iloc[20,1],2)\n", "for i in range (long_a):\n", " print(\"combi \",i)\n", " antecedente=list(a[i][0])\n", " consecuente=list(a[i][1])\n", " confiance=(a[i][2])\n", " lift=(a[i][3])\n", " regla=str(antecedente)+\"==>\"+str(consecuente)+\"(Soporte: \"+str(soporte)+\", Confianza: \"+str(confiance)+\", Apalancamiento: \"+str(lift)\n", " print(regla)" ] }, { "cell_type": "code", "execution_count": 17, "id": "229496bd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[] ==> ['leche'] (Soporte=0.83 - Confianza=0.83 - Lift=1.0)\n", "\n", "['cerveza'] ==> ['leche'] (Soporte=0.67 - Confianza=0.8 - Lift=0.96)\n", "\n", "['pan'] ==> ['leche'] (Soporte=0.67 - Confianza=0.8 - Lift=0.96)\n", "\n", "['pañales'] ==> ['leche'] (Soporte=0.67 - Confianza=0.8 - Lift=0.96)\n", "\n", "['pan', 'cerveza'] ==> ['leche'] (Soporte=0.5 - Confianza=0.75 - Lift=0.9)\n", "\n", "['pañales', 'cerveza'] ==> ['leche'] (Soporte=0.67 - Confianza=0.8 - Lift=0.96)\n", "\n", "['pan', 'pañales'] ==> ['leche'] (Soporte=0.5 - Confianza=0.75 - Lift=0.9)\n", "\n", "['pan', 'cerveza', 'pañales'] ==> ['leche'] (Soporte=0.5 - Confianza=0.75 - Lift=0.9)\n", "\n" ] } ], "source": [ "# RESULTADOS\n", "# Variable objetivo:\n", "consecuente_buscado=\"leche\"\n", "\n", "# Armado de DataFrame con todos los resultados\n", "df_res = pd.DataFrame(columns=['id_set', 'item_set', 'combi', 'antecedente', 'consecuente', 'soporte', 'confianza', 'lift'])\n", "cant_itemsets = len(res)\n", "numReg = 0\n", "\n", "for i in range(cant_itemsets):\n", " setId = i\n", " itemSet = list(res.iloc[i, 0])\n", " unResultado = res.iloc[i, 2]\n", " cant_combis = len(unResultado)\n", " soporte = round(res.iloc[i, 1], 2)\n", " \n", " for j in range(cant_combis):\n", " combi = j\n", " numReg += 1\n", " antecedente = list(unResultado[j][0])\n", " consecuente = list(unResultado[j][1])\n", " confianza = unResultado[j][2]\n", " lift = unResultado[j][3]\n", " registro = [setId, itemSet, combi, antecedente, consecuente, soporte, confianza, lift]\n", " df_res.loc[numReg] = registro\n", "\n", "# Filtrar resultados para el consecuente buscado\n", "df_filtrado = df_res[df_res['consecuente'].apply(lambda x: consecuente_buscado in x and len(x) == 1)]\n", "\n", "nombreArchivo = \"2_reglas_asoc_\" + str(consecuente_buscado) + \".txt\"\n", "archivo = open(nombreArchivo, 'a')\n", "\n", "\n", "for i in range(len(df_filtrado)):\n", " antecedente = df_filtrado.iloc[i, 3]\n", " consecuente = df_filtrado.iloc[i, 4]\n", " soporte = round(df_filtrado.iloc[i, 5], 2)\n", " confianza = round(df_filtrado.iloc[i, 6], 2)\n", " lift = round(df_filtrado.iloc[i, 7], 2)\n", " \n", " regla = f\"{antecedente} ==> ['{consecuente_buscado}'] (Soporte={soporte} - Confianza={confianza} - Lift={lift})\\n\"\n", " archivo.write(regla)\n", " print(regla)\n", "archivo.close()" ] }, { "cell_type": "code", "execution_count": null, "id": "9a0846a5", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.3" } }, "nbformat": 4, "nbformat_minor": 5 }