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:
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