Dezembro de 2018

Volume 33 – Número 12

Inteligência Artificial - Análise da Cesta de Compras

Por Frank La La

Frank La VigneNão há dúvida de que você já se deparou com um pouco de inteligência artificial (AI), especialmente à medida que a temporada de compras natalinas está chegando – a compra recomendada. Quase todos os varejistas online exibirão recomendações de produtos adicionais, às vezes sob o cabeçalho “Frequentemente comprados juntos” ou “Clientes que compraram X também compraram Y”. De acordo com um estudo feito pela McKinsey em 2013 (bit.ly/2yK3Bu8), 35% do que os consumidores compram na Amazon são provenientes de algoritmos de recomendação de produtos. Além disso, essa tática não é mais limitada a varejistas, os serviços de streaming online como Netflix e YouTube usam algoritmos sofisticados de recomendação para manter os telespectadores conectados por mais tempo.

Claramente, os sistemas de recomendação têm um impacto em nossas vidas diárias. Você poderia argumentar que eles são a forma mais proeminente de inteligência artificial que os consumidores encontram. Nesta coluna, vou explorar um formulário básico do sistema de recomendação, conhecido como uma Análise da Cesta de Compras.

Análise da Cesta de Compras

A Análise da Cesta de Compras, também conhecida como Análise de Afinidade, é uma técnica de modelagem baseada na teoria de que se você compra um determinado grupo de itens, é mais provável que compre outro grupo de itens. Por exemplo, alguém que esteja comprando manteiga de amendoim e pão tem uma grande probabilidade de comprar geleia também. No entanto, nem todas as relações são tão imediatamente óbvias. O conhecimento prévio do comportamento do consumidor pode aumentar as vendas e dar ao varejista uma vantagem significativa em relação aos concorrentes. Estritamente falando, a Análise da Cesta de Compras é apenas um aplicativo de técnicas de análise de associação, embora muitos artigos e tutoriais online possam confundir os dois. Para colocá-la na perspectiva de outra técnicas sobre as quais eu já escrevi antes, a Análise da Cesta de Compras é uma ferramenta de aprendizado sem supervisão de aprendizado de máquina que exige pouco em termos de engenharia de recursos e uma quantidade limitada de preparação e limpeza de dados. Na prática, informações obtidas por meio da Análise de Cesta de Compras podem ser exploradas ainda mais com outras ferramentas de ciência de dados ou de inteligência artificial.

Apesar de sua capacidade de descobrir padrões ocultos, Análise da Cesta de Compras é relativamente fácil explicar e não requer conhecimento de estatística ou de cálculo avançados. No entanto, há alguns termos e notações convencionais para examinar. Primeiro, as noções de causa e efeito são chamadas de antecedente e consequente. No exemplo que mencionei anteriormente, manteiga de amendoim e pão são os antecedentes e a geleia é o consequente. A notação formal para essa relação seria {Manteiga de Amendoim, Pão} -> {Geleia}, indicando que há uma conexão entre esses itens. Observe também que antecedentes e consequentes podem consistir em vários itens.

Há três medidas matemáticas importantes necessárias para a Análise da Cesta de Compras: Suporte, Comparação de Precisão e Confiança. O Suporte representa o número de vezes que os antecedentes aparecem juntos nos dados. Para simplificar o exemplo, imagine a seguinte relação: {Manteiga de Amendoim} -> {Geleia de Uva}. De 100 clientes (e uma transação por cliente), considere o seguinte cenário:

  • 15 clientes compraram Manteiga de Amendoim
  • 13 compraram Geleia de Uva
  • 11 compraram Manteiga de Amendoim e Geleia de Uva

O Suporte representa o número de vezes que os itens aparecem em uma transação juntos, que neste exemplo é de 11 em 100, ou 0,11. Em termos estatísticos, há uma probabilidade de 11% de que qualquer transação incluirá Manteiga de Amendoim e Geleia de Uva. A Confiança assumirá o valor de Suporte (0,11) e o dividirá pela probabilidade de uma transação ter apenas Geleia de Uva, o que corresponde a um valor de 0,846. Isso significa que em quase 85% das vezes em que a Geleia de Uva foi adquirida, ela foi adquirida juntamente com Manteiga de Amendoim. Por fim, há uma Comparação de Precisão, que pega a Confiança (0,846) e a divide pela probabilidade de Manteiga de Amendoim. Isso equivale a 5,64 (arredondado para duas casas decimais).

Tudo isso pode ficar mais claro em um gráfico simples, conforme mostrado na Figura 1.

Figura 1 Valores de Suporte, Confiança e Comparação de Precisão

Medida Fórmula Valor
Suporte P(Manteiga de Amendoim e Geleia de Uva) 0,011
Confiança Suporte/P(Geleia de Uva) 0,846
Comparação de Precisão Confiança/P (Manteiga de Amendoim) 5,64 (arredondado)

 

Análise da Cesta de Compras em ação

Com as métricas anteriores em mente, é hora de experimentar a Análise da Cesta de Compras em um conjunto de dados real. A primeira etapa é obter dados de varejo para analisar. Felizmente, a Universidade da Califórnia, em Irvine, fornece um conjunto de dados com transações de um site com base no Reino Unido. Há mais informações sobre o conjunto de dados disponíveis em bit.ly/2DgATFl. Crie um notebook do Python 3 em sua plataforma preferida (eu mostrei os Jupyter notebooks em uma coluna anterior, em msdn.com/magazine/mt829269). Crie uma célula vazia, insira o código a seguir para baixar os dados de exemplo e execute a célula:

! curl http://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx -o retail.xlsx

Quando isso for concluído, insira o código a seguir em uma nova célula para carregar a planilha do Excel em um DataFrame do Pandas e imprimir as colunas do conjunto de dados:

import pandas as pd
df = pd.read_excel('retail.xlsx')
print( df.columns)
The output will look something like this:
Index(['InvoiceNo', 'StockCode', 'Description', 'Quantity', 'InvoiceDate',
       'UnitPrice', 'CustomerID', 'Country'],
      dtype='object')

Enquanto a Análise da Cesta de Compras não exigir mudanças irreversíveis em dados rigorosos, faz sentido remover registros estranhos, tais como aqueles com números de nota fiscal nulos e pedidos cancelados. Também é útil remover espaços extras nas descrições de produto e converter todos os números da nota fiscal em cadeia de caracteres. Você pode fazer isso executando o seguinte código:

df['Description'] = df['Description'].str.strip()
df.dropna(axis = 0, subset=['InvoiceNo'], inplace = True)
df['InvoiceNo'] = df['InvoiceNo'].astype('str')
df = df[~df['InvoiceNo'].str.contains('C')]

Agora, insira o código a seguir para agregar os dados e exibi-los por país:

df.groupby('Country').count().reset_index().sort_values(
  'InvoiceNo', ascending = False).head()

Em seguida, vou reorganizar os dados com cada produto em um ativo codificado e uma transação por linha. Uma codificação ativa é uma técnica de transformação de dados em que os valores categóricos são convertidos em colunas, com o valor 1 inserido onde um valor categórico está presente. Eu também limitarei o escopo do conjunto de dados a um país, neste caso, a França, para comparar o comportamento do consumidor em um mercado individual. Digite e execute o seguinte código para fazer isso (observe a forma da estrutura de dados basket_uk na saída da célula; a codificação ativa expande as colunas de 8 para 4175):

basket_fr = (df[df['Country']=="France"]
          .groupby(['InvoiceNo', 'Description'])['Quantity']
          .sum().unstack().reset_index().fillna(0)
          .set_index('InvoiceNo'))
basket_fr.head(10)

Uma visão rápida dos resultados revela um problema com a minha codificação ativa. O sexto item de cima para baixo tem um valor de 24,0 na segunda coluna. Minha intenção era ter um número um ou zero nos dados, não as quantidades. Portanto, será preciso localizar qualquer valor diferente de zero e convertê-los em 1. Para corrigir esse problema, execute o código a seguir e observe que o 24,0 foi convertido em um 1:

def sum_to_boolean(x):
  if x<=0:
    return 0
  else:
    return 1
basket_fr_final = basket_fr.applymap(sum_to_boolean)
basket_fr_final.head(10)

Vou usar MLXTEND (rasbt.github.io/mlxtend) para analisar mais profundamente os dados. MLXTEND é uma biblioteca do Python de ferramentas úteis para tarefas comuns de ciência de dados, incluindo a Análise da Cesta de Compras. Para instalar essa biblioteca de dentro do notebook, execute o seguinte código:

! pip install mlxtend

Com o pacote MLXTEND instalado, é hora de importar as bibliotecas relevantes de MLXTEND, como esta:

from mlxtend.frequent_patterns import association_rules
from mlxtend.frequent_patterns import apriori

Em uma nova célula, insira o seguinte código para exibir conjuntos de itens com suporte de pelo menos 6%:

frequent_itemsets_fr = apriori(basket_fr_final, min_support = 0.06,
  use_colnames = True)
frequent_itemsets_fr.sort_values('support', ascending = False).head()

Com os principais conjuntos de itens identificados, agora posso aplicar a biblioteca de regras de associação para descobrir comportamentos de compra dos clientes. Insira o seguinte código e execute-o:

a_rules = association_rules(frequent_itemsets_fr, metric = "lift",
  min_threshold = 1)
a_rules.sort_values('lift',ascending = False)

Os resultados, classificados por Comparação de Precisão, devem ser semelhantes aos descritos na Figura 2, revelando os padrões de compras de clientes franceses no site. Uma visão rápida de resultados mostra que os clientes que compram os TALHERES PARA CRIANÇAS DO SPACEBOY também compram os TALHERES PARA CRIANÇAS DA DOLLY GIRL, e que os clientes que compram um despertador de uma cor também compram um despertador de outra cor. Tendo em vista os insights acionáveis, eu poderia recomendar aos proprietários do site oferecer ofertas em pacotes de talheres específicos para cada sexo, bem como oferecer pacotes de despertadores de várias cores.

Regras de associação de clientes franceses
Figura 2 Regras de associação de clientes franceses

No entanto, tenha em mente que esta lista é classificada por Comparação de Precisão, e não por ocorrência. Talvez não faça sentido introduzir um novo pacote ou oferta de produto se ele não for popular o suficiente. Para obter uma ideia da popularidade desses itens de talheres, insira o seguinte código Python:

print( basket_fr_final['CHILDRENS CUTLERY SPACEBOY'].sum())
print( basket_fr_final['CHILDRENS CUTLERY DOLLY GIRL'].sum())

Os resultados não são promissores; somente 27 para SPACEBOY e 28 para DOLLY GIRL. Com um pouco de exploração, eu encontro uma regra de associação um pouco mais promissora. Acontece que o índice de regra de associação 50 (CONJUNTO/20 GUARDANAPOS DE PAPEL RETROSPOT VERMELHOS) é o antecedente de copos de papel vermelhos e de pratos de papel vermelhos. Insira o código a seguir para ver quantas unidades são vendidas:

basket_fr_final['SET/20 RED RETROSPOT PAPER NAPKINS'].sum()

Embora o número seja baixo, é razoável dizer que os clientes que compram copos descartáveis desejam pratos de papel e guardanapos que combinem. Um varejista experiente poderia empacotar facilmente esses produtos em uma oferta de pacote para convencer o cliente a comprar.

Os leitores perspicazes notarão que há duas outras métricas na estrutura de dados resultante: Aproveitamento e convicção. Esses são valores adicionais a serem considerados ao executar a Análise da Cesta de Compras. Mais informações sobre isso podem ser encontradas ao explorar as chamadas “medidas alternativas de interesse”. A Wikipédia é um bom lugar para começar (bit.ly/2AECRNh).

Lembre-se de que, quando eu agreguei os dados por país, havia muito mais notas fiscais do Reino Unido do que de qualquer outro país. Talvez pudéssemos aprender mais ao examinarmos o comportamento do cliente com mais dados brutos disponíveis. Vamos explorar isso inserindo o código a seguir em uma nova célula e executando-a, da seguinte forma:

basket_uk = (df[df['Country']=="United Kingdom"]
          .groupby(['InvoiceNo', 'Description'])['Quantity']
          .sum().unstack().reset_index().fillna(0)
          .set_index('InvoiceNo'))
basket_final_uk = basket_uk.applymap(sum_to_boolean)
frequent_itemsets_uk = apriori(basket_final_de, min_support = 0.06,
  use_colnames = True)
a_rules_uk = association_rules(frequent_itemsets_uk, metric = "lift",
  min_threshold = 1)
a_rules_uk.sort_values('lift',ascending = False).head()

Para o Reino Unido, o tempo de execução é muito mais longo devido ao conjunto de dados maior. Observe também que os resultados são bem diferentes. Isso poderia ser o resultado de mais dados alterando a análise ou simplesmente uma função de preferências de cliente diferentes em um mercado diferente? Ou poderia ser que o varejista oferece produtos diferentes para venda em diferentes mercados? Esses são os tipos de variáveis que você precisa entender ao trabalhar com sua análise. Nesse caso, temos pouco contexto além de ser uma loja varejista online com base no Reino Unido. No entanto, em um projeto do mundo real, o envolvimento com especialistas no assunto da empresa é um elemento crítico para o sucesso em projetos de análise de dados.

Conclusão

Neste artigo, explorei o uso da Análise da Cesta de Compras para descobrir padrões de comportamento do consumidor. A Análise da Cesta de Compras pertence ao campo maior da Análise de Afinidade, que as grandes empresas usam para levar os clientes a gastar mais dinheiro em produtos e a passar mais tempo em plataformas de streaming.

A Análise da Cesta de Compras fornece um ponto de entrada excelente para pessoas e organizações que desejam explorar a ciência de dados. A barreira de entrada é baixa em termos de habilidade matemática. Na verdade, o cálculo não vai além de divisão simples e teoria da probabilidade básica. É um espaço de problema fácil de explorar para iniciantes e oferece um ótimo lugar para começar a aplicar a inteligência artificial à empresa. Dito isso, não se engane pensando que isso não é um meio poderoso para conduzir a ciência de dados ou para mostrar valor à liderança da empresa. Os impactos no resultado podem ser significativos.


Frank La Vigne trabalha na Microsoft como um profissional de Soluções de Tecnologia de Inteligência Artificial, em que ele ajuda as empresas a alcançar mais obtendo o máximo proveito de seus dados com análise e IA. Ele também co-hospeda o podcast DataDriven. Ele escreve regularmente em seu blog FranksWorld.com e você pode assisti-lo em seu canal no YouTube “Frank’s World TV” (FranksWorld.TV).

Agradecemos ao seguinte especialista técnico pela revisão deste artigo: Andy Leonard (Dados e análises empresariais)


Discuta esse artigo no fórum do MSDN Magazine