-
Como nós construímos
regras de associação?
-
Existem diversas formas de você
encontrar uma associação
-
entre um produto e outro.
-
Aqui nosso objetivo é olhar
para produtos, de fato.
-
Nós não estamos interessados
no perfil dos usuários.
-
Não me interessa saber quem está
comprando o quê.
-
Eu quero saber qual produto
está relacionado com quais outros.
-
Basicamente, nós vamos minerar regras.
-
É aqui que aparece o tal do Data Mining.
-
Data Mining fica muito evidente
nesse tipo de algoritmo,
-
quando estamos tentando encontrar
relações de produtos
-
e vamos verificar se essa relação
procede ou não procede.
-
Portanto, a nossa base de dados
deve ser sempre uma transação,
-
um histórico de transações de vendas,
por exemplo.
-
Eu posso pensar o seguinte.
-
Em um supermercado,
quais são os produtos
-
comprados em conjunto
ao longo do tempo?
-
Eu quero minerar regras de compras
similares entre esse histórico.
-
Para essa simulação,
-
vou utilizar uma base de dados
disponível no Kaggle
-
que está imitando um histórico
de compras no supermercado.
-
Então,
aqui já estou na mente do Colab
-
com uma instância inicializada.
-
Eu já subi a base também aqui
no nosso ambiente
-
e vou começar a executar os códigos.
-
O primeiro passo é rodar
essa célula que está instalando
-
a biblioteca "apyori",
que é uma brincadeira
-
com o nome de Python
e o método em si.
-
Pronto,
já está instalado aqui nesse ambiente.
-
Agora eu posso fazer alguns imports
necessários,
-
que é Pandas, NumPy
para limpeza de dados também.
-
E, de fato, o algoritmo da biblioteca
é Apriori.
-
Aqui vou ler essa base
que está salva como um CSV, tá?
-
E nesse caso específico,
ela não tem nenhum cabeçalho.
-
Não é um CSV tradicional,
digamos assim.
-
Tanto que na execução já mostra
como se fosse um DataFrame
-
com as linhas lidas.
-
O que me interessa é linha a linha,
o que foi adquirido.
-
Então, nós temos aqui
colunas sem nome,
-
porque a coluna "0",
por exemplo,
-
contém o primeiro
produto que passou nessa compra.
-
A coluna "1",
contém o segundo produto,
-
a "2" o terceiro
e por aí vai.
-
Então, pode ser que eu compro
apenas um produto
-
ou uma sequência
de produtos também.
-
Esses "NaN" indicam
que esse produto não foi comprado.
-
Ou seja, nem vi o produto em si,
-
mas essa cesta de compras
teve apenas três produtos,
-
dois e por aí vai.
-
É normal ter uma matriz bem esparsa
nesse tipo de dado.
-
Portanto, temos que prepará-la
para implementar o método.
-
Nessa preparação,
-
nós temos que eliminar
esse tanto de "NaN".
-
Basicamente, nós queremos
criar uma lista de lista, ou seja,
-
para cada compra,
cada transação de fato, cada cesta,
-
eu quero criar uma lista
onde apenas produtos comprados
-
estejam de fato presentes nessa lista.
-
Quem está com valor "NaN"
eu possa ignorá-lo.
-
Vou fazer isso
com Python puro mesmo
-
a partir do código da próxima célula.
-
Então, aqui embaixo,
nós temos um código
-
que está fazendo o seguinte.
-
Basicamente,
nós temos aqui
-
uma lista de transações,
uma lista vazia
-
e eu vou adicionar nessa lista
uma outra lista.
-
Ficando uma lista de listas.
-
Onde cada lista
que compõe a lista externa,
-
está analisando os produtos
que foram adquiridos
-
e se ele for "NaN" estou ignorando.
-
Eu só vou por dentro da lista mesmo
-
a palavra que representa
o nome daquele produto.
-
Então eu estou percorrendo
o dado da primeira linha até a última,
-
criando essa nova representação,
esse novo dado.
-
Aqui temos um exemplo
de como ficou.
-
Então, cada lista dessa
é uma cesta de compras.
-
Ela pode ser menor,
maior e por aí vai.
-
Notem que o que me interessa saber
é a relação de um produto com o outro.
-
A quantidade não é relevante no caso.
-
Então, saber que existe uma relação,
por exemplo,
-
entre frango e ovo
já é irrelevante para mim.
-
Não me interessa saber quantos ovos
são associados à compra
-
de quantos quilos de frango,
por exemplo,
-
ou vice versa.
-
Então,
como a sessão aqui é grande,
-
vou lá para baixo para começar
a construir a regra de associação.
-
O uso do método "apriori"
é muito direto.
-
Basicamente,
ele espera esses "records",
-
que são aquela lista de listas,
-
a lista dos produtos comprados de fato
-
e aqui alguns fatores
de parametrização.
-
Essa parametrização depende muito
do que a gente quer
-
como objetivo de negócio.
-
Aqui nós estamos fazendo
da parametrização do método baseado
-
em algumas métricas de avaliação
da recomendação, ou seja,
-
quero avaliar o poder,
digamos assim,
-
daquela associação
de um produto com outro.
-
Esse poder está ligado
às métricas de avaliação
-
da relação entre um produto e outro.
-
Eu posso adicionar métricas
como confiança,
-
alavancagem,
entre tantas outras.
-
Eu posso limitar, inclusive,
o tamanho da regra a ser criada.
-
Eu posso limitar,
por exemplo,
-
que as regras envolvam
pelo menos dois produtos,
-
mas eu posso criar regras
que envolvem pelo menos três,
-
quatro, cinco produtos também.
-
No método apriori
não tem certo ou errado,
-
nós vamos fazer combinações
de produtos a produtos
-
e verificar se existem dados,
evidências reais,
-
que comprovem a eficácia,
eficiência,
-
o poder de fato daquela associação.
-
Por exemplo,
um lift é uma métrica interessante
-
que mostra alavancagem.
-
Quando eu tenho um produto A
que leva a compra do B,
-
o quanto que o produto A
está alavancando a venda do B.
-
Por exemplo,
a métrica do suporte.
-
Imagine que quero verificar
uma associação entre maçã e banana.
-
Então, o suporte dessa regra
indica quantas vezes
-
maçãs e bananas
foram compradas em conjunto
-
em todo o histórico de transações
que estou analisando.
-
E eu posso especificar
o suporte mínimo,
-
assim como eu posso
especificar um lift,
-
uma alavancagem mínima.
-
O que isso quer dizer?
-
Eu estou minerando regras e gerando
combinações entre produtos.
-
Eu quero ter uma regra
que tenha no mínimo
-
uma alavancagem de três,
por exemplo.
-
Ou seja,
esse produto A,
-
a compra dele alavanca a compra
do B em pelo menos 3 vezes.
-
Ou então,
supondo nessa associação
-
entre produção de maçãs e bananas,
-
eu quero ter um suporte mínimo,
ou seja,
-
eu quero regras que indicam,
que apareçam no histórico
-
pelo menos um número mínimo
de vezes.
-
Portanto,
uma vez configurado
-
o que a gente quer do ponto de vista
de regras mínimas,
-
nós podemos rodar aqui
a priori para fazer essa mineração
-
sobre o conjunto de dados
já pré-preparado.
-
Então,
vou rodar aqui o algoritmo
-
e vejam que ele rodou muito rápido,
-
porque é uma base de dados
pequena de fato.
-
E aqui estou criando uma lista,
estou forçando a criação de uma lista
-
da associação
e verificando o seu tamanho.
-
Foram geradas 24 regras.
-
Claro que se eu tivesse
um histórico de dados maior,
-
com mais produtos,
-
teriam sido muito mais métricas
a serem geradas.
-
Ou caso tivesse relaxado
essas métricas,
-
eu poderia ter regras
um pouco mais fracas,
-
mas mais abundantes.
-
Vamos entender
como que o apriori funciona
-
para como que ele gera
essas regras aqui.
-
Eu posso puxar a primeira regra
gerada por meio do seguinte comando:
-
"association_rules[0]".
-
Olhando a lista de regras,
quero pegar a primeira.
-
E aqui está mostrando os itens de fato.
-
Então,
é um creme com frango, tá?
-
Qual é o item a ser colocado.
-
Qual é o item que gerou a compra
posteriormente.
-
Essa regra tem qual lift mínimo.
-
Qual é a confiança apoiada
dessa regra também.
-
Eu posso pegar o segundo item
dessa composição,
-
dessa regra,
que é de fato,
-
a lista de recomendações.
-
Então, to pegando a lista
"association_rules",
-
o primeiro item, "0"
-
e vou pegar agora
a lista de recomendação em si.
-
Então, o segundo item.
-
Eu posso pegar aqui
como uma lista de fato.
-
Se eu quiser pegar qual é o produto
a ser analisado,
-
eu vou fazer uma outra indexação
-
baseado aqui na posição "0",
na "2", na "0" novamente.
-
Então, aqui eu tenho exatamente
os produtos configurados.
-
Note que a saída
da regra anterior dessa é a mesma,
-
porque essa regra aqui é bem simples
tem dois produtos apenas.
-
Ou seja, nesse ponto,
a regra já está melhorada.
-
O que eu tenho que fazer
é simplesmente
-
passar para essas regras
explorando que regras são essas.
-
Construindo aquele motor,
digamos assim.
-
Quem compra a compra A,
compra a parte B.
-
A gente pode fazer isso
com um laço
-
que está iterando
por essas regras também
-
e mostrando na tela
as principais métricas
-
e quais regras foram geradas.
-
Vamos ver.
-
A próxima tela faz exatamente isso, tá?
-
Criando aqui até mesmo
um numerador da regra.
-
Aí número um, dois, três
e está separando
-
uma impressão da outra
por uma sequência de 15 iguais,
-
digamos assim,
impressas na tela.
-
Então,
vendo aqui no início.
-
A primeira regra tem aqui na sexta,
-
um creme também
e um frango.
-
A segunda regra temos aqui escalope,
uma carne também,
-
com o molho de cogumelo.
-
A terceira regra está colocando
a carne também e massa.
-
E por aí vai.
-
Então nós podemos verificar
quais são os produtos
-
que foram comprados em conjunto,
às vezes com umas regras pequenas,
-
com o tamanho de dois.
-
Como nós configuramos
o tamanho mínimo da regra para dois,
-
o valor de dois produtos,
-
nós temos várias regras que foram
criadas com apenas dois produtos.
-
Mas,
olhando um pouco mais,
-
quais dessas regras foram
impressas nessas 24 criadas,
-
isso em regras um pouco maiores,
-
com três,
com quatro produtos também.
-
No entanto, elas são menos
comuns do que regras menores.
-
Então, aqui embaixo,
nós temos também
-
um exemplo com três produtos
-
ou com outros três
produtos diferentes, tá?
-
Com outros três produtos também,
-
que pode ser simplesmente
uma combinação entre eles.
-
Eu posso tirar um produto
e ir colocando outro no lugar,
-
mas essa base nos permitiu
gerar esse conjunto de regras.
-
E a pergunta que fica é:
-
como nós vamos entregar
essas regras?
-
Se for, por exemplo,
uma loja física,
-
nós podemos pegar produtos
que tem uma relação
-
e colocar próximo um dos outros.
-
É claro que isso
pode não ser viável.
-
Por exemplo,
eu vou colocar um enlatado
-
próximo de uma carne
que está no açougue.
-
Talvez levar uma prateleira
do enlatado para próximo do açougue,
-
faz sentido.
-
Ao levar a carne para um outro lugar,
pode não ser viável.
-
Agora, no cenário digital,
-
quando por exemplo,
uma compra em um e-commerce
-
é desse mercado,
-
ou até mesmo no aplicativo
de relacionamento com os usuários,
-
com os clientes dessa loja,
nós podemos verificar
-
baseado em qual produto
a pessoa está interagindo
-
e colocou na compra,
pode ter algum card que indica:
-
"por que você não compra
também tal produto?"
-
E esse outro aqui com algum desconto,
alguma coisa do gênero.
-
Assim, o objetivo principal da regra
de associação é achar a associação
-
uma relação de produtos
que devem ser combinados.
-
A forma como nós vamos entregar
essa inteligência
-
que a máquina gerou para a gente,
depende muito do negócio
-
a ser impactado e como ele
quer implementar essa regra,
-
de fato,
no mundo real.