Algoritmo apriori no Mysql utilizando procedure
Objetivo desse artigo é demonstrar uma implementação do algoritmo de data mining apriori utilizando stored procedures e o banco de dados Mysql 5. OBS: pré-requisistos conhecer sobre stored procedures, banco de dados e a teoria e logica do algoritmo apriori.
| Trans | prdno |
| 1 | 2 |
| 1 | 4 |
| 1 | 5 |
| 2 | 1 |
| 2 | 3 |
| 2 | 4 |
| 2 | 5 |
| 3 | 2 |
| 3 | 4 |
| 3 | 5 |
| 4 | 1 |
| 4 | 2 |
| 4 | 4 |
| 4 | 5 |
| 5 | 3 |
| 6 | 5 |
| 7 | 4 |
| 8 | 7 |
| 9 | 6 |
| 9 | 7 |
| 10 | 6 |
| Nome Campo | Tipo de dado | Comentario |
| X | int not null | guarda codigo do produto |
| Y | int not null | guarda codigo do produto |
| Freq_x | float | guarda frequencia de x com relacao ao total de vendas |
| Freq_xy | float | guarda frequencia x em relacao a y |
x int not null,
y int not null,
freq_x float,
freq_xy float )
CREATE PROCEDURE `sp_apriori`(in sup_min integer,in conf integer)
begin
delete from regras;
select @total:=count(distinct trans) as total from vendas;
/* criacao da tabela temporaria para um item */
create temporary table 1_item(
id int not null auto_increment primary key,
prdno int not null,
freq float not null);
set @i:=1;
while @i <= @total_aux do
select @cod:=prdno,@freqx:=freq from 1_item where id=@i;
insert into regras
select @cod,prdno,@freqx,ROUND(100*count(prdno)/@total,2) as freq
from vendas where trans in(select trans from vendas where prdno=@cod)
and prdno <> @cod group by prdno having freq >=sup_min; /*nessa linha filtro os produtos que sairam com o outro produto
set @i:=@i+1;
end while;
/* seleciona as regras que estao dentro da confianca passada como parametro, ou seja, deleta aquelas que nao interessam */
delete from regras where (freq_xy/freq_x) < (conf/100);
end $$
|
X |
Y |
Freq_x |
Freq_xy |
|
2 |
4 |
30 |
30 |
|
2 |
5 |
30 |
30 |
|
4 |
5 |
50 |
40 |
|
5 |
4 |
50 |
40 |
Conclusões:
Na tabela acima pode-se concluir os resultados da seguinte forma:
· O produto 2 vende-se 30% do total das vendas sendo que toda vez que vende-se 2 também vende-se 4 100%(30/30).
· O produto 2 vende-se 30% do total das vendas sendo que toda vez que vende-se 2 também vende-se 5 100%(30/30).
· O produto 4 vende-se 50% do total das vendas sendo que toda vez que vende-se 5 tem a probabilidade de 80% (40/50) de também vender 5.
· O produto 5 vende-se 50% do total das vendas sendo que toda vez que vende-se 5 tem a probabilidade de 80% (40/50) de também vender 4.
Observações: O algoritmo desenvolvido acima só encontra as duplas ou seja se X então Y.
Atenção: Esse algoritmo aplicado a grande quantidade de dados (milhões de registros) com certeza será demorado e exigirá muito processamento
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo