treeshap – explicar modelos baseados em árvore com valores SHAP

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

[ad_1]

treeshap – explicar modelos baseados em árvore com valores SHAP

Uma introdução ao pacote

Esta postagem é coautoria de Szymon Maksymiuk.

Por vários meses, temos trabalhado em um pacote R treeshap – um método rápido para calcular valores SHAP para modelos de conjunto de árvores. O pacote ainda não está totalmente desenvolvido, mas já pode computar explicações para uma gama de modelos, incluindo XGBoost, LightGBM, gbm, ranger e randomForest, (catboost nos planos para o futuro próximo) e apresentar os resultados com várias funções de plotagem. Recentemente, adicionamos uma opção para calcular os valores de interação SHAP. Como achamos que o pacote pode sair do estágio inicial de desenvolvimento, queremos apresentar nosso trabalho a um público mais amplo.

O que são valores SHAP?

SHAP significa Shapley Additive Explanations – um método para explicar as previsões do modelo com base nos valores Shapley da teoria dos jogos.
Tratamos os recursos como jogadores em um jogo cooperativo (os jogadores formam coalizões que podem então ganhar algum pagamento dependendo da “força” da equipe), onde a previsão é o pagamento. Tentamos dividir o pagamento bastante entre jogadores. Está provado que os valores de Shapley são os únicos justo distribuição, onde justo significa que ele satisfaz alguns axiomas importantes.

Portanto, com SHAP, explicamos o quanto cada recurso contribui para o valor de uma única previsão. Para ser mais preciso, explicamos o quanto isso contribui para o desvio da previsão média de um conjunto de dados de referência escolhido. Mais adiante no blog, você verá um exemplo de tal explicação.

Também podemos agregar valores SHAP para muitas previsões para calcular diferentes métricas, como a importância do recurso definida como a média dos valores absolutos dos valores SHAP.

Leia Também  2020-02 A agonia e o êxtase: adicionando suporte ao LuaTeX no 'dvir'

Se você estiver interessado em aprender mais sobre os valores SHAP, recomendamos a leitura de um capítulo dedicado a eles em um destes livros: Análise Explicativa de Modelo ou Aprendizado de Máquina Interpretável.

A principal vantagem dos valores SHAP em comparação com outros métodos é uma teoria sólida que os sustenta.
Podemos calcular os valores SHAP para qualquer modelo sem nenhum conhecimento da estrutura do modelo e, nesse caso geral, a complexidade computacional seria exponencial. Portanto, o tempo de computação seria certamente a maior desvantagem, mas aí vem o TreeSHAP …

Como funciona o TreeSHAP?

TreeSHAP é um algoritmo para calcular valores de SHAP para modelos de conjuntos de árvores, como árvores de decisão, florestas aleatórias e árvores com aumento de gradiente em um tempo polinomial proposto por Lundberg et. al (2018) ¹.

O algoritmo nos permite reduzir a complexidade de O (TL2 ^ M) para O (TLD ^ 2) (T = número de árvores no modelo, L = número máximo de folhas na árvore, D = profundidade máxima de uma árvore, M = número de recursos explicados). Podemos fazer isso graças à estrutura dos modelos baseados em árvore e às propriedades dos valores Shapley, principalmente aditividade (o que significa que o valor SHAP para o modelo ser uma floresta é uma soma dos valores SHAP para todas as suas árvores).
Para garantir ainda mais que nosso método funcione rápido, o pacote R treeshap integra a implementação C ++ do algoritmo.

TreeSHAP foi originalmente implementado como parte do formato do pacote Python (link para o GitHub).
No passado, como MI2DataLab, desenvolvemos um wrapper R desta biblioteca – shapper, mas é uma solução menos estável e conveniente do que um pacote autônomo.

treeshap funciona em velocidade comparável à biblioteca Python mencionada anteriormente. Aqui, podemos dizer que, no futuro, trabalharemos para melhorar a complexidade para O (TLD), o que pode permitir que o treeshap supere o shap. O pacote também implementa outros recursos, como diferentes funções de plotagem.

Leia Também  Por favor compartilhe! Matemática para programadores Humble Bumble !!

Agora, vamos dar uma olhada no exemplo que mostra como usá-lo.

Como usá-lo?

Vamos agora verificar como funciona na prática. Para nossos exemplos, usaremos o conjunto de dados apartments que está disponível no pacote DALEX. Ele contém informações geradas artificialmente sobre apartamentos em Varsóvia. Atualmente, treeshap não funciona com recursos de fator, então nós os codificamos com a função do pacote mlr.

library(treeshap)
aps_data 

As was mentioned above, the treeshap package works for various tree ensemble models, however, for the purposes of today’s examples, we will use random forest implementation from the ranger package to estimate the price for the square meter of an apartment.

model 

We have to start with unifying the model. That operation changes the object of the tree ensemble model into a form understandable for treeshap. That unified form makes it possible to smoothly compute Shapley values. The unified form is also easier to be interpreted by the user and can be used to predict with it using predict function. It is required to pass data along with the dataset on which we want to calculate Shapley values. Keep in mind that right now treeshap works only for numeric values of features. Categorical variables have to be encoded before training the model.

model_unified 

Dataset used as reference (deviation from its mean prediction is explained) for which explanations are being computed can be changed at any time using set_reference_dataset function:

unified2 

With a unified model on the board, we can now actually compute SHAP values. Raw SHAP values in the form of dataframe can be accessed as$shaps element of the result object.

treeshap_res 

SHAP values can be used to explain contribution of features into the prediction for a single observation.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
plot_contribution(treeshap_res, obs = 234, min_max = c(3400, 4200))
plot_contribution(treeshap_res, obs = 235, min_max = c(2500, 3600))

Podemos agregar valores SHAP do conjunto de dados ou de suas partes para adquirir a importância do recurso baseado em SHAP.

plot_feature_importance(treeshap_res, max_vars = 8)

Aqui podemos ver que o facto de o apartamento estar localizado em Śródmieście, que é o centro de Varsóvia, tem um grande impacto no preço. Existe uma grande lacuna entre ele e outros distritos. Śródmieście é altamente preferido e, portanto, a diferença. A segunda característica mais importante é a superfície. Podemos criar o perfil da variável para aprender mais sobre ela.

plot_feature_dependence(treeshap_res, 'surface')

À medida que a superfície do apartamento sobe, o preço do metro quadrado desce consistentemente, o que é razoável.

Interações

Os valores de interação SHAP são simplesmente valores SHAP para interações de dois recursos. O cálculo deles não difere muito dos valores padrão de Shapley. Requer apenas a configuração do parâmetro de interação na função treeshap e você pode desfrutar de suas novas interações sem um tempo estimado de 2 anos para calcular.

inter 

Computation of interactions can take a few minutes but it is still very fast and we can track progress on a progress bar. Raw SHAP interaction values in the form of an array can be accessed as $interactionselement of the result object. The array is a M by M matrix for every observation. Moreover, we can visualize those interactions! Isn’t it amazing?

plot_interaction(treeshap_interactions, 'surface', 'no.rooms')

Tente você mesmo!

treeshap está disponível no github.

Você pode instalar a versão mais recente usando devtools:

devtools::install_github('ModelOriented/treeshap')

Se você estiver interessado em outros posts sobre ML explicável, justo e responsável, siga #ResponsibleML no meio.

Para ver mais conteúdo relacionado a R visite https://www.r-bloggers.com

  1. Lundberg, Scott M., Gabriel G. Erion e Su-In Lee. “Atribuição de recursos individualizada consistente para conjuntos de árvores.” pré-impressão arXiv arXiv: 1802.03888 (2018)


treeshap - explicar modelos baseados em árvore com valores SHAP foi originalmente publicado em ResponsibleML no Medium, onde as pessoas continuam a conversa destacando e respondendo a esta história.



[ad_2]

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br