domingo, 17 de maio de 2015

Hardcore Devel #17 - Data Mining, Apriori

Olá desenvolvedores, tudo bem? Hoje eu vou falar um pouco sobre mineração de dados, e vou falar pra vocês sobre o algoritmo Apriori. Vamos desmistificar um pouco essa brincadeira de mineração e entender do que se trata e vamos estudar um pouco um algoritmo de forma conceitual.

Preparados?

Mineração de dados não se trata de obtenção de dados. Por isso eu discordo completamente desse nome, mas assim é a literatura, então nós iremos quebrá-la porque eu não gosto da literatura. Então eu vou falar de Lapidação de Dados, mas se alguem perguntar pra vocês, vocês falem que é sobre mineração.

Tudo isso porque a brincadeira consiste em você pegar uma massa de dados e fazer perguntas para ela para tentar descobrir coisas que não são triviais. Muitas coisas curiosas já aconteceram por causa da lapidação de dados. Uma empresa que descobre que sua cliente estava grávida ANTES de ela sequer desconfiar que estaria. Pois é, da pra descobrir coisas bem curiosas quando você faz esses procedimentos.

Então não estamos descobrindo como extrair mais dados e sim como achar coisas de dados que já temos. E não, isso não é Big Data. Big Data tem outros problemas com os quais não estamos lidando aqui. Na verdade o grande problema da lapidação de dados está no pré-processamento dos dados. Isso porque massas de dados geralmente tem muito lixo, informação inútil, inconsistência, e, acredite se quiser, falta de dados.

Então que tipo de pergunta podemos fazer?

Bom, como estamos trabalhando com uma massa de dados, e esses dados são geralmente contáveis porém em grande quantidade, podemos basicamente fazer análises estatísticas, porém quando a probabilidade é bastante grande, você tem uma informação bastante interessante. Por exemplo, se, no supermercado, 99% das pessoas que compram fraldas, também compram cervejas, você tem uma informação curiosamente valiosa aí.

Então, você geralmente usa um algoritmo pra percorrer essa base de dados, e o algoritmo que eu vou passar pra vocês por alto hoje é o Apriori. Tem que sacar um pouquinho de lógica pra entender isso, mas não é nada muito complicado. Pra brincadeira ficar mais fácil de se entender, imagine que você está vendo a base de dados de um supermercado e cada registro mostra os produtos que as pessoas compraram, sem mostrar a quantidade daquele produto. Teríamos coisas do tipo:
  • Carne, Alface, Cebola, Cereja
  • Pão, Alho, Alface, Mortadela
  • Carne, Cerveja, Milho, Salame
  • Tomate, Uva, Alho, Queijo
E mais uma porção de outras coisas nessa linha. Nós vamos fazer a seguinte hipótese: Se alguém compra os Itens A(Conjunto de itens) então ele também compra B(Outro conjunto de itens. Mais ou menos assim: Se alguem compra Carne e Cerveja, então essa pessoa compra Milho e Salame.

A pergunta é: Essa hipótese é válida?

Você faz uma estatística, e descobre quantas vezes alguém comprou Carne e Cerveja, e quantas vezes as pessoas que compraram Carne e Cerveja também compraram Milho e Salame. Então temos duas razões a serem comparadas, as quais chamamos de Suporte e Confiança.

Suporte: Quantidade de compras contendo os itens A, comparadas com a quantidade de compras global.

Confiança: Quantidade de compras contendo os itens A e B comparadas com a quantidade de compras contendo os itens A.

Agora, da onde você tira os conjuntos de itens A e B? Se você respondeu dos próprios registros, acertou.

O problema é o trabalho que isso dá quando os registros tem tamanhos maiores. Então se o eu algoritmo de mineração estiver demorando bastante, não se preocupe, eles tendem a demorar mesmo. Mas não subestime os que são velozes, pois mesmo ingênuos eles são capazes de te mostrar coisas que você antes não seria capaz de descobrir.

Por hoje é só!

Nenhum comentário:

Postar um comentário