Introdução
 
Nos ultimos anos as tecnologias de informação tem sofrido constantes mudancas,as empresas tem encontrado um mercado cada vez mais competitivo e concorrido, diante desse cenario, as empresas tem investido cada vez mais em tecnologia, visto que esse setor tornou-se muito importante e estrategico para as mesmas. Os empresarios necessitam dessas informações em tempo habil e integras para tomarem decisões importantes para o rumo do seu negocio. Mas como apartir de grande volume de dados conseguir informações estratégicas?? Uma das alternativas é o Data Mining
 
Objetivo
 
Implantar o algoritmo apriori para 2 itens , utilizando stored procedures no mysql 5
 
Algoritmo Apriori
 
É um algoritmo que utiliza regras de associação, ou seja, busca por itens frequentes em banco de dados que ocorrem simultaneamente em transações de banco de dados.
 
Imaginemos a seguinte tabela de vendas no banco de dados onde
Trans: transação
Prdno: codigo do produto
Exemplo:
 
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
 
Vamos criar uma tabela que irá guardar os resultados das regras obtidas.
 
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
 
 
No cliente do mysql ou no query browser criaremos a tabela com a estrutura descrita acima:
 
create table regras (
x int not null,
y int not null,
freq_x float,
freq_xy float )
 
 
Codigo do algoritmo
 
Utilizaremos o conceito de stored procedures.(OBS: no caso do mysql a versão deve ser 5 ou superior).
 
Nome procedure: sp_apriori
Parametros de entrada: sup_min (suporte minimo)
conf (confiança)
 
No cliente do mysql inserir o codigo da procedure:
 
 
 
DELIMITER $$
DROP PROCEDURE IF EXISTS `betao`.`sp_apriori` $$
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);
    /* inserindo na tabela temporaria os 1 itens de acordo com o suporte minimo definido no parametro de entrada */
   
    insert into 1_item(prdno,freq) select prdno,ROUND(100*count(prdno)/@total,2) as freq
    from vendas
    group by prdno
    having freq >= sup_min;
   
    select @total_aux:=count(*) from 1_item;
    set @i:=1;
   
     /* nesse while verifico as associacoes dos 1 itens classificados acima */
    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 $$
DELIMITER ;
 
 

 
 
 
Chamando algoritmo com suporte minimo de 30% e confiança de 70%
 
Para chamar o algoritmo no cliente do mysql executar:
 
Call sp_apriori(30,70);
 
 
Resultados obtidos e conclusão:
 
O resultado na tabela regra será:
 

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

 

Portanto utilizando esse algoritmo conseguimos gerar associações, imagine o gestor da empresa de um supermercado por exemplo, saber qual produto sai com qual. Com certeza apartir dessa informação pode-se criar um marketing que trará um retorno sobre isso.
 
No próximo artigo veremos outro algorimo de Data Mining o K-Means.
 
Abracos e até a próxima