Como interpretar modelos de machine learning complexos?

por Carlos Eduardo M. Relvas 

Escuto com muita frequência os críticos de modelos de machine learning mais complexos, como Random Forest e a família dos Boostings, que não conseguimos interpretar estes modelos e que no fundo são uma “caixa preta”, em que não conseguimos explicar o valor previsto destes modelos dado as variáveis de entrada.

Neste artigo vamos falar sobre as duas formas que costumo utilizar para interpretar modelos preditivos. Uma mais antiga, utilizando um modelo chamado GAM (generalized additive models) e outra bem mais moderna e que vem fazendo um enorme sucesso, utilizando os SHAP values.

Afinal, utilizando estas técnicas é possível ter uma interpretação clara e fácil quando analisamos os coeficientes estimados de uma regressão linear ou logística? A resposta é NÃO!. Mas conseguimos ter algo próximo e de fácil visualização, o que costuma deixar nossos clientes muito mais confortáveis em utilizar tais soluções que, em geral, apresentam uma acurácia melhor do que os modelos mais tradicionais. É o clássico trade-off entre acurácia e interpretação.

Para exemplificar o que vamos discutir aqui, utilizaremos a base de Pokémon do Kaggle (https://www.kaggle.com/abcsds/pokemon). Vamos simular construindo um modelo para calcular a probabilidade de um pokémon ser lendário utilizando variáveis do Pokémon (Total de pontos, HP, Pontos de ataque, Pontos de defesa, Pontos de ataque especial, Pontos de defesa especial, Pontos de velocidade e a geração do pokémon). Para ilustrar a interpretação de um modelo complexo, rodamos um XGBoost sem fazer nenhum tratamento ou otimização de hiperparâmetro. Não nos critiquem por esse motivo. Percebam que a intenção aqui é apenas exemplificar como podemos interpretar um algoritmo complexo.

O jupyter notebook com o código pode ser encontrado em (https://github.com/datarisk-blog/datarisk/blob/master/InterpretandoModelos.ipynb).

A primeira técnica que vamos discutir é o uso do GAM (generalized additive model). Maiores detalhes podem ser encontrados em Hastie, T. J. & Tibshirani, R. J. – 1990. O GAM é um algoritmo supervisionado como o próprio XGBoost e não foi construído com a intenção de interpretar outros modelos, apesar de gostar bastante de usá-lo para este fim. Em linhas gerais, o GAM é um algoritmo em que escrevemos a variável resposta como a adição de funções de suavização das variáveis explicativas, seguindo a equação abaixo:

Pode ser que você se pergunte: “E como usamos o GAM para interpretar um outro modelo mais complexo?” A ideia é construir um modelo GAM utilizando como variável resposta o output do modelo mais complexo, utilizando as mesmas variáveis explicativas.  Como não fazemos nenhuma suposição sobre a forma das funções de suavização, o modelo tem liberdade para encontrar a forma funcional que mais se aproxima com a forma funcional que o modelo complexo (XGBoost) encontrou para a variável.

Por exemplo, para a base do pokémon, podemos construir o gráfico das funções de suavização estimadas. Abaixo apresentamos a forma funcional de 3 variáveis (Total, HP e Attack).


Podemos ver, por exemplo, que quando o pokémon tem um total de pontos de ataque em torno de 500, a probabilidade dele ser lendário cai bastante e quando o total de pontos é alto (maior que 700) a probabilidade aumenta drasticamente. Para a variável HP, vemos um comportamento mais linear e ao observarmos o eixo y, percebemos que variações em HP não altera drasticamente a probabilidade de ser lendário. Para a variável de pontos de ataque, temos novamente um comportamento totalmente não linear encontrado pelo XGBoost.

A ideia do uso do GAM é tentar imitar o comportamento encontrado pelo XGBoost por meio de um modelo mais simples em que podemos interpretar visualmente o comportamento de cada variável no modelo mais complexo.

Você pode pensar qual a razão para não utilizarmos diretamente o GAM ao invés do XGBoost. A resposta é que o GAM é um modelo mais simples que, em geral, não apresenta a mesma assertividade do que o XGBoost. Usamos o GAM para aproximar os resultados obtidos e devemos interpretar os resultados com cuidado. Neste exemplo, o R2 obtido pelo GAM para prever o resultado do XGBoost foi de aproximadamente 0.8, o que mostra um bom ajuste, mas que não é perfeito. A principal diferença entre o GAM o e XGBoost está na interação de variáveis, em que o GAM assume um modelo sem interação e XGBoost não.

A segunda técnica utilizada para interpretar os modelos é uma técnica bem mais recente e que vem ganhando bastante atenção da comunidade pela facilidade de uso e pelos seus resultados teóricos que são bem interessantes. Trata-se da técnica chamada SHAP (SHapley Additive exPlanations). Maiores detalhes podem ser encontrados em: Lundberg S. et. al. (2019) ou em (https://github.com/slundberg/shap). Ao contrário do GAM, onde a interpretação é de cada variável, o SHAP permite uma interpretação para cada valor previsto. No artigo, referência acima, é mostrado que os valores SHAP são consistentes e acurados, ao contrário de muitas técnicas comuns de importância de variáveis, como permutação de variáveis, split count e gain information.

Executamos o SHAP no mesmo XGBoost e antes de mostrar a interpretação para cada variável, vamos ver primeiro a interpretação de duas previsões. Veja os gráficos abaixo:


O primeiro gráfico mostra um pokémon com baixa probabilidade de ser lendário. Vemos no gráfico o base value, que seria o pokémon médio e vemos a previsão desta observação, -7.68. O gráfico mostra como cada variável contribui para este output. Vemos que apenas o ponto de ataque especial e sua geração aumentam sua probabilidade de ser lendário. No entanto, todas as outras variáveis diminuem sua probabilidade e podemos notar que os pontos totais e de ataque são as variáveis que mais diminuem sua probabilidade.

Já no segundo gráfico, notamos que apenas os pontos de ataque e HP diminuem a probabilidade, enquanto todas as outras aumentam a probabilidade de ser lendário. Como os pontos totais desse pokémon é 700, aumenta consideravelmente sua probabilidade de ser lendário, sendo a variável que mais contribui para isso.

Podemos fazer este gráfico para cada um dos valores previstos e assim facilmente podemos entender quais variáveis levam ao modelo predizer uma ou a outra classe. Não se trata de uma interpretação tão fácil quanto um modelo de regressão linear ou logística, mas é uma forma visual, intuitiva e simples para não termos mais que escutar que o XGBoost é um modelo Black Box.

No gráfico abaixo é apresentado os valores SHAP de todas as features para todas as observações, para termos uma medida de qual variável é mais importante dentre todas as presentes do modelo. Isto é, de todas as previsões, quais são as variáveis que mais influenciam os valores previstos.

Podemos notar que assim como no GAM, a variável mais importante é o total de pontos, principalmente quando o total de pontos apresenta um valor alto. Por outro lado, analisando os pontos de defesa, notamos que em todas as previsões o impacto é bem pequeno para todos os possíveis valores de pontos de defesa.

*******************

Carlos Eduardo M. Relvas é mestre em Estatística pela Universidade de São Paulo (USP) e candidato ao doutorado em Ciências da Computação (USP). Possui anos de experiência como Data Scientist, trabalhando no Itaú e como Lead DS no Nubank.

 

artificial-intelligence-2167835_1920

AI – Market ou Marketing

O Founder de uma grande startup me fez a seguinte provocação: “Jhonata como separar o joio do trigo nesse mercado onde todo mundo parece ter a solução mágica de inteligência artificial?”. Essa foi a centelha que deu origem a este artigo.

O “boom” no mercado de A.I. só está em curso porque inúmeros pensadores, da indústria e da academia, dedicaram e dedicam suas vidas ao seu amadurecimento; entretanto, toda hype tem seu preço. Como tudo que está na moda, a A.I. atrai curiosos e aventureiros; e é comum vermos surgir pregadores que não são praticantes. O uso de alguns termos em inglês e uma história bem contada não deveria bastar para reconhecermos uma autoridade no assunto. Mas como separar o joio do trigo? O objetivo aqui é exatamente esse: sugerir critérios que possam balizar a contratação de bons fornecedores e evitar frustrações com a A.I.

A primeira e mais importante dica que eu dou aqui é: que um verdadeiro especialista é capaz de simplificar toda a complexidade do assunto com o qual trabalha. Conhecendo profundamente o assunto, das bases à sua aplicação, eles devem ser capazes de adaptar o discurso conforme o público a quem se dirige. E o critério não deve ser diferente com cientistas de dados e especialistas de A.I. A segunda dica é: um verdadeiro especialista deve ter histórico de realizações na sua área de atuação e que seja reconhecido pelos seus pares.

Caso seu fornecedor utilize muitos termos complexos, te deixando com aquela sensação de que A.I. é um assunto hermético, tampouco seja capaz de apontar soluções produzidas pelo seu time de desenvolvedores – de preferência de uso prático comprovado –, esses são sinais de que é melhor você pular fora.

Seu problema precisa mesmo de IA?
Eu sou um entusiasta da tecnologia e acredito que ela tem um enorme potencial para – e vai – ajudar a humanidade a atingir um novo patamar civilizatório. Porém, na hora da contratação de uma solução de automação para aquele seu problema específico e urgente, alguns pontos precisam ser levados em conta. O primeiro ponto é se questionar se o problema a ser resolvido precisa, de fato, de A.I. Em outras palavras: o problema pode ser resolvido de forma tão eficiente quanto, usando soluções mais simples e serviços mais baratos? Se está contratando um fornecedor pela primeira vez, informe-se sobre os cases em que ele tenha sido franco com outro cliente e apontado que o problema apresentado podia ser resolvido de forma muito satisfatória e eficiente utilizando uma estratégia alternativa.

Entendo que você possa ficar deslumbrado ao assistir a apresentação de um fornecedor bem humorado que discorre sobre as infinitas possibilidades que a tecnologia oferece. Sim, tem gente que consegue passar a impressão de que sua empresa passará a funcionar com o apertar de um botão dum dia pro outro e que todos poderão se dedicar à recreação e ao ócio criativo. Isso será uma realidade – inexoravelmente. A 4º revolução industrial segue seu curso. Mas expectativa é diferente de necessidade e todo bom empreendedor sabe separar visão de operação. Não devemos pensar na A.I. como uma saída mágica para todos as problemas hoje enfrentados pelo negócio ou setor. Nem nos deixarmos ser convencidos disso.

Sobre os dados
Modelos de A.I. são desenvolvidos em cima de uma base – de dados. Um modelo de AI, ou aprendizagem de máquina, pode até ser configurado a partir de hipóteses mas sem um conjunto real e robusto de dados é impossível treiná-lo. A estratégia de treinamento mais comum é chamada de método supervisionado onde se faz necessária uma massa de dados contendo sua variável de interesse e inúmeras outras que o modelo interpretará como preditivas. Vamos a um exemplo prático. Sua empresa quer desenvolver um novo modelo capaz de prever a probabilidade dos seus atuais clientes cancelarem um dado serviço. Para treinar esse modelo será necessário uma base de dados com o histórico adequado de todos casos de cancelamento, acompanhado de uma amostra controle, de tamanho comparável, relativa aos clientes que mantêm e fazem bom uso do serviço. O modelo é então treinado para identificar quais as variáveis preditivas, ou combinação delas, que explicam alta chance de cancelamento. O resultado gerado pelo modelo permite compreender melhor as necessidades de seus clientes bem como traçar perfis daqueles que não deveriam ser admitidos. Uma pré-seleção ajudaria a minimizar prejuízos; e, com os recursos poupados, o serviço poderia ser melhorado de forma a aumentar a satisfação dos bons clientes.

A maioria das empresas não têm esses dados estruturados, o que acaba dificultando e encarecendo o desenvolvimento dos algoritmos de A.I., porque o fornecedor precisa despender tempo e energia extra formando a base de dados para treinamento do algoritmo, numa fase preliminar do projeto. O fornecedor deve buscar a forma mais viável, técnica e economicamente, de organizar essa base de treinamento. E é nessa etapa que você conseguirá ter uma idéia mais clara do nível de expertise e criatividade de seu fornecedor; ou seja, da capacidade de entregar o prometido. Se não possuir dados estruturados veja se parte do trabalho pode ser feita internamente, para que tenha maior controle. Particularmente nesses casos, dê preferência a equipes com experiência em diversos setores e problemas distintos. E evite propostas usando dados sintéticos.

Soluções prontas:
Grandes empresas de tecnologia como Google, Amazon e Facebook oferecem APIs para desenvolvimento de soluções de A.I. por terceiros, o que torna a tecnologia mais acessível. No entanto, soluções desenvolvidas utilizando kits de desenvolvimento acabam se tornando soluções muitas vezes complexas e que requerem um especialista full time, é muito importante deixar isso alinhado com o fornecedor da solução. Por isso, é imprescindível esclarecer com o fornecedor se a solução que está sendo proposta baseia-se no uso de APIs de terceiros.
Procure saber mais sobre as soluções que já tenham desenvolvido e quais ferramentas e técnicas empregadas em cada um deles. Isso vai gerar segurança de que seu fornecedor entende bem as diferenças entre as técnicas existentes e que, mesmo que faça uso de kits de desenvolvimento, será capaz de entregar um bom produto e atendimento.

E agora como eu utilizo essa solução?
Você pode achar que essa pergunta é uma mera provocação, mas aguarde que a prática lhe mostrará que ela faz todo sentido. Muitos fornecedores acreditam que a capacidade de entrega deve ser medida ao fim do desenvolvimento do modelo de análise, enquanto que sua implantação tende a ser um dos maiores desafios desse tipo de projeto. Essa postura de “lavo minhas mãos” pode ser usada como um ótimo critério de eliminação. O melhores fornecedores são capazes de deixar claro, logo de saída, o plano para colocar a nova solução em produção; porque estão cientes de que essa é a única forma de fazer a diferença na vida e nos negócios de seus clientes

Dicas finais
Por fim, alguns tips rápidos que eu não poderia deixar passar: 1) lembre-se de que nem sempre uma grande consultoria conhecida por atuar em outros setores é garantir que uma grande entrega em IA.; 2) na hora de internalizar um profissional da área, tome cuidado na contratação de cientistas de dados porque hoje dia, de acordo com o LinkedIn, meio mundo é data scientist ; 3) lembrando que a primeira contratação é mais importante, pois uma boa escolha nessa hora pode ser a garantia da qualidade sua equipe de ciência de dados que se forma ; 4) por último, todo profissional precisa de suporte, não é diferente para um cientista de dados, seja em relação a ferramenta ou no relacionamento com as áreas de negócio, ou seja, Data Scientist não faz milagre.

Esse artigo foi escrito com intuito de ajudar para que mais projetos em IA tenham um final feliz e, no final do dia, desdobre-se um círculo virtuoso em que cada vez mais seguras das vantagens e dificuldades adoção de soluções de AI, as empresas passem a procurá-las com maior freqüência, contribuindo com o amadurecimento do mercado maduro e diversidade do ecossistema. O objetivo aqui de maneira alguma foi o de esgotar possibilidades de aplicação e dificuldades de adoção de soluções de AI, mas simplesmente o de elencar alguns pontos críticos de contratação que podem auxiliar na decisão e aumentar as chances de sucesso do seu projeto.

*Jhonata Emerick – sócio da DataRisk