Ego x Acurácia: um problema no machine learning

figura1_capa

Ultimamente tenho estudado muito machine learning e outros aspectos relacionados a área denominada data science. Neste post vou falar um pouco sobre o impacto que a suposta “qualidade” de modelos exerce no comportamento de pessoas, especialmente no que diz respeito ao ego.

Muitos dos problemas solucionados na prática pelo machine learning envolvem o uso de algoritmos de predição e classificação. Este tipo de operação tem como objetivo dizer o que existe em uma foto, identifica de dígitos em imagens ou reconhecer a voz em um áudio dentre outras tarefas importantes. No meu treinamento de introdução ao Machine Learning com Python eu comento estes e muitos outros cenários, inclusive mostrando como montar algumas destas classificações com Python.

Em geral, para medir qual é a eficácia, ou seja, o quão “bom” é o algoritmo ou modelo treinado para classificar amostras de dados existem diversas métricas, sendo que a acurácia é a mais usada. De fato, tal métrica muitas vezes é empregada para avaliar se vale a pena ou não investir mais recursos no machine learning para que a solução fique “melhor”.



Contudo, tenho visto muita gente se gabando e inflando o ego quando consegue atingir uma acurácia de um modelo maior do que o modelo gerado por outras pessoas. De fato, não é raro encontrar comportamentos do tipo “sou superior a você por que o meu algoritmo/solução tem uma acurácia maior que o seu”. Eu sei, é triste ver este tipo de mentalidade, mais isso acontece muito.

Eu já conversei com alguns colegas sobre ego e humildade no programa de mesmo nome do DatabaseCast que pode ser ouvido aqui. É interessante notar que conforme mais e mais pessoas estão aprendendo e utilizando o machine learning este sentimento de “superioridade” está aparecendo com mais frequência, especialmente em comunidades como o Kaggle onde parece que vale a máxima “sou melhor porquê estou mais acima no ranking que você”.

Esta situação me lembrou muito a obsessão do personagem principal da série Breaking Bad. De fato, nesta série é notória a preocupação do químico pelos mínimos detalhes na pureza do “produto” chegando ao ponto onde podemos observar o nível de paranoia do personagem.

figura3_purity

Mas a semelhança tem que parar por aí, uma vez que modelos de machine learning com acurácia muito alta não cheiram bem, ou seja, eles provavelmente estão “viciados” demais nos dados de treinamento. Este fenômeno é conhecido como overfitting e mesmo com diversas técnicas para evita-lo ainda não é bem visto um modelo que possui 99,9999% ou mais de acurácia. Isto sem entrar na discussão que a acurácia nem sempre é a melhor maneira de analisar o resultado de um modelo de machine learning, pois existe a curva ROC, o F1, o recall e outras métricas muito importantes.

De qualquer maneira, certo nível de dedicação, esforço e vontade para melhorar modelos de machine learning são benéficos, desde que estas atitudes não levem a pessoas extremamente convencidas que acabam julgando outros pela qualidade de seus modelos de machine learning. Assim como qualquer outro resultado quantificável de esforço, rotular pessoas pelo quão preciso é seu algoritmo/modelo/solução certamente não é nada saudável e expõe uma falha de caráter nada adequada para um cenário onde as coisas mudam muito rapidamente.

Publicado em Machine learning | Com a tag , , , , , , , , , | Deixar um comentário

Precisamos falar sobre a documentação no machine learning

figura1_capa_robot-reading-a-book

Muita gente está dando os primeiros passos no machine learning e esquecendo um importante elemento: a documentação. Neste post vou falar um pouco sobre este artefato de software que muitas vezes acaba sendo esquecido.

A documentação técnica para desenvolvedores em geral não é muito bem vista por quem precisa fazê-la. Isto quer dizer que na maioria das vezes o responsável técnico pela solução prefere gastar seus conhecimentos, habilidades e recursos codificando e resolvendo problemas na prática do que documentando, descrevendo e facilitando o acesso ao que foi criado para outras pessoas. Infelizmente com o machine learning não é diferente.



Se considerarmos o perfil de quem trabalha com machine learning é razoável admitir que, no mínimo, o profissional deve saber lidar com dados, ter pensamento lógico, analítico e ser extremamente criterioso e atento a detalhes. Contudo, enquanto este mix de habilidade favorece a criação da solução, tais profissionais muitas vezes deixam a desejar no que diz respeito à habilidades sociais e de comunicação. E este é um dos principais motivos pela qual que a documentação de projetos de machine learning fica comprometida.

Apesar da documentação ser importante, ela não ajuda muito que não sabe do que isso se trata e por onde começar. Visando este público eu desenvolvi um curso presencial de introdução ao machine learning com foco em Python. Este curso rápido ainda possui alguns vagas e recomendo aos interessados acessarem este link que contêm mais informações e o procedimento para a inscrição.

Em geral, a documentação do machine learning envolve diversos elementos comuns àqueles de quem trabalha com banco de dados. De fato, já escrevi sobre este assunto e sobre documentação de APIs. Aqui reitero que investir na documentação vale muito a pena não só para novatos, mas para qualquer pessoa envolvida no projeto.

Um dos pontos da documentação exclusiva no machine learning é a descrição do que foi experimentado, uma vez que é comum avaliar, testar e validar diversas abordagens enquanto não se toma a decisão final de qual algoritmo, os parâmetros, os dados e outros fatores muito importantes a serem utilizados que fazem a diferença na prática. Esta descrição pode ser em formato de diário onde destaca-se a cada dia o que foi feito, como foi feito, porque foi feito e o que foi obtido.

too-many-questions

Este tipo de descrição evita que novos integrantes no projeto fiquem comentando algo como “já tentou X?”, “E se você fizer Y desde jeito?” ou “você pode melhorar Z aplicando a nova técnica W”. Nem sempre quem está com a mão na massa tem tempo ou paciência para explicar todos os detalhes para responder a comentários deste tipo, especialmente para novos integrantes da equipe. Portanto, faz muito sentido documentar claramente decisões de projeto baseado no que foi experimentado.

Outro aspecto da documentação de projetos de ML importante é relacionado ao pipeline, o seja, o fluxo de etapas realizadas. Atualmente diversas ferramentas vêm emprego interfaces interativas e visuais com ícones que representam etapas como abrir arquivos, separar dados, filtrar linhas, criação de novas features, teste de modelos, avaliação de resultados, geração de gráficos, etc. Exemplos incluem o Orange, o Weka e a interface do Azure.

figura4_orangepython

Este tipo de representação visual ajuda a documentar o projeto de ML, mas ainda é pouco. É preciso que tais diagramas sejam acompanhados de descrições, documentos, arquivos, layouts, scripts, arquivos com código fonte e outros artefatos que ajudem a compreender como, porquê e quando foram tomadas as decisões e atitudes que levaram o projeto de ML a ter a forma em que ele se encontra em um determinado momento.

Outro aspecto interessante relacionado à documentação é a inclusão de etapas do ML, como o treinamento do modelo e validação, na integração contínua de projetos de software. Isto quer dizer que é preciso, por exemplo, ligar os processos de build e deploy de uma ferramenta/software/aplicação com certas etapas do ML para garantir que tudo fique em sincronia. Apesar de importante, devido à pouca experiência com este tipo de projeto que envolve dados muitas empresas ainda engatinham neste tipo de integração e documentação.

Publicado em Machine learning | Com a tag , , , , , , , , , , | Deixar um comentário

Eu na hackathon da WebMotors

figura1_capa_post

Recentemente participei da hackathon da WebMotors onde o objetivo era analisar dados e propor algo inovador. Neste post vou comentar um pouco sobre esta experiência.

Em geral, sou muito seleto em relação aos concursos que participo. Procuro levantar ao máximo as informações disponíveis e me informar muito bem sobre o regulamento e desta vez não foi uma exceção. Contudo, algo me chamou a atenção na proposta de hackathon da WebMotors: a possibilidade de analisar os dados deles.

figura2_fotoconcurso

Pensando em termos de e-commerce (em particular e-marketplaces) fiquei curioso e instigado a trabalhar com os dados que a WebMotors poderia disponibilizar. Pensei comigo mesmo que esta era uma ótima oportunidade para aplicar alguns dos conceitos, ferramentas, algoritmos e técnicas de Machine Learning que tanto tenho estudado.

A propósito, atualmente estou com algumas vagas em aberto do meu curso de introdução ao Machine Learning com Python. Este curso presencial vai ser realizado em São Paulo durante dois dias abordando diversos aspectos introdutórios desta área por meio de alguma teoria e muita prática. Este link contêm mais informações e instruções para a inscrição no curso).

figura3_cursomachinelearning

Voltando para a hackathon da WebMotors, lembro que elenquei várias propostas de ideias que eu poderia fazer com os dados indicados na página do evento. Após pensar um pouco e conversar com alguém que já fez negócio nesta plataforma (meu irmão) resolvi submeter um projeto relativamente simples: prever a data de venda de um veículo anunciado. Além da previsão de venda também coloquei no projeto enviado a previsão de quando o vendedor receberia a primeira proposta de algum outro usuário na plataforma.

Apesar de simples, esta previsão pode abrir várias oportunidades como recomendações de características do anúncio para vender mais rápido, sugestão de preço, previsões de faturamento e outras possibilidades. Destaco também que, infelizmente, outros e-marketplaces brasileiros (Mercado Livre, OLX, etc) não possuem nada semelhante.



A minha proposta de projeto foi aprovada e tive aproximadamente 20 horas para desenvolvê-la na sede da WebMotors em São Paulo. Infelizmente não consegui montar uma equipe e acabei desenvolvendo sozinho este projeto. Não por acaso, o nome do meu grupo refletiu esta situação: LoneWolf.DataGenius().

Fui muito bem recebido e tratado pela equipe da WebMotors durante toda a duração da hackathon, assim como as demais equipes. Apesar de encontrar alguns problemas para lidar com os dados, consegui apresentar um resultado interessante que capturou a atenção dos juízes.  De fato, na premiação final acabei dividindo o terceiro lugar com outra equipe.

Antes de terminar este post gostaria de citar que estou ciente do fato que muitas hackathons atualmente acabam “explorando” os participantes através de cláusulas no regulamento que exige transferência de propriedade intelectual. Sim, isto realmente acontece e não é muito legal. Não quero entrar na discussão sobre isso neste post, mas acredito que existem casos e casos e que, de certa forma, a experiência de participar uma hackathon possui um potencial muito grande de ser positiva para os envolvidos (participantes e organização).

Em geral, posso dizer que foi uma ótima experiência apesar de alguns poucos problemas relacionados à tecnologia e também ao cansaço desta “maratona”. Já participei de outras hackathons e meio que já estou acostumado ao cenário, mas certamente esta foi uma experiência muito interessante que gostaria de repetir algum dia.

Publicado em Carreira, Evento, Machine learning | Com a tag , , , , , , | 2 comentários

DatabaseCast 73: Gestão de mudanças

VitrineDatabaseCast73Olá, pessoal! Neste episódio, Mauro Pichiliani (Twitter | Blog), Wagner Crivelini (@wcrivelini) e o convidado Marcos Poma (marco.poma@gmail.com) se deparam com a gestão de mudanças. Neste episódio você  saber como é conviver com o tradicional e o moderno, fechar o ticket, ter o trabalho pautado por tasks, controlar o dia a dia com o Trello, Jira e GitHub, brigar com o suporte e conviver com o que um consultor externo fala sobre sua empresa.

Livro do banco de dados NoSQL MongoDB escrito pelo Mauro Pichiliani!

CAPA_REDUZIDACompre aqui a versão digital (EPUB) na Amazon. No Clube de Autores temos também a versão digital e impressa.

Segunda turma do curso presencial de introdução ao machine learning com Python ministrado pelo Mauro Pichiliani

Veja aqui mais detalhes da segunda turma do curso presencial de introdução ao machine learning ministrado pelo nosso co-produtor Mauro Pichiliani. Façam logo sua inscrições, pois as vagas são limitadas e estão para acabar!



Não deixe de nos incentivar digitando o seu comentário no final deste artigo, mandando um e-mail para  databasecast@gmail.com, seguindo o nosso twitter @databasecast, vendo informações de bastidores e as músicas do programa no nosso Tumblr e curtindo a nossa página no Facebook e no Google+ e assistindo aos nossos episódios no YouTube. Acesse o feed RSS do DatabaseCast neste link.

Loja do DatabaseCast no Zazzle

Compre a caneca Datas SQL com a sintaxe para manipulação de datas no Oracle, SQL Server, MySQL e PostgreSQL! Você também pode comprar a camiseta com estampa fractal Fluxo Matrix e Sonho Fractal diretamente neste link.

feed-rss1Veja no gráfico abaixo a duração e os tempos aproximados de início e fim de cada bloco:

GraficoTamanhoEp73

Veja na tag cloud abaixo a contagem das palavras mais usadas nos e-mails, comentários e tweets do episódio anterior:

TagCloudEp73

Links do episódio:

Reproduzir
Publicado em DatabaseCast, Podcast | Com a tag , , , , , , , , , , , , , , , , | Deixar um comentário

A linguagem SQL no mundo NoSQL – Palestra no SQLSat 570

curjhp8wyaatn2j-jpg-large

No último sábado (08/10/2016) fiz mais uma palestra em um evento da comunidade que trabalha com banco de dados e SQL. Neste post vou falar um pouco sobre o tópico que resolvi abordar, algo muito importante por quem está pensando no mundo SQL e NoSQL.

Antes de comentar sobre o conteúdo da palestra destaco que atualmente ainda existem algumas vagas para o meu curso de introdução ao Machine Learning com Python. Este curso presencial será realizado em São Paulo e é uma ótima oportunidade para quem quer conhecer e começar a trabalhar com Data Science.

Apesar de não ser novidade mais, a sigla NoSQL ainda causa certa estranheza e desconhecimento em muita gente. Um dos pontos que faz muita gente ficar curiosa esta relacionado à linguagem SQL e é comum ouvir das pessoas questionamentos sobre o quanto é necessário aprender para trabalhar com algum produto classificado como NoSQL.



Pensando neste público eu montei uma palestra que aborda a linguagem SQL e como ela é “encarada” pelos recentes produtos e tecnologias NoSQL. Além disso, também fiz um pouco de trabalho de “arqueologia” e comentei alguns fatos que pouca gente conhece sobre a linguagem SQL em si. Abaixo seguem os slides da minha apresentação e os arquivos mencionados podem ser baixados aqui.

Publicado em Evento, SQL, Uncategorized | Com a tag , , , , , , , , , , , | 2 comentários