Qual é a maneira correta de determinar quais recursos mais contribuíram para a previsão de um determinado vetor de entrada?


9

Estou usando regressão logística para classificação binária. Eu tenho um grande conjunto de dados (é altamente desequilibrado: 19: 1). Então, eu uso o scikit-learn LogisticRegression()para treinar 80% dos meus dados rotulados e validado com os outros 20% (observei a área sob ROC e o recall de precisão porque os dados eram muito desequilibrados; também usei o modelo com class_weight='auto')

Minha principal pergunta é a seguinte: depois que começo a gerar previsões de vetores de entrada não rotulados (usando predict_proba()), como posso saber quais dos recursos que mais contribuíram para a previsão dessa entrada específica ? Imagino que isso possa ser diferente das "características mais importantes", conforme determinado em geral para o modelo com base nos dados de treinamento rotulados (por exemplo, magnitude do coeficiente).

Eu tive uma ideia muito básica:

  1. Pegue o produto componente dos meus valores de recurso de entrada com o valor absoluto dos meus coeficientes de recurso. O recurso que mais contribui é o que corresponde à entrada com o maior valor.

  2. Faça (1), mas use z-scores para tudo (recursos de treinamento e entrada). Eu pensei que isso seria importante porque me preocupava que alguns intervalos de recursos pudessem ser muito diferentes dos outros, e apenas levar produtos pode não capturar isso; mas acho que os coeficientes devem refletir intervalos, então talvez isso não importe.

Qualquer pensamento seria muito apreciado, pois sou novo nisso. Coisas específicas da regressão logística (isto é, sigmóide em vez de apenas função linear) e quaisquer referências a como implementar ações específicas (por exemplo, transformações) no scikit-learn serão muito apreciadas, pois na verdade eu estou fazendo um projeto com dados reais.


A regressão logística não é muito um modelo preditivo, e não um tipo explicativo?
Tag17

@tagoma são ambos, certo?
Firebug

Respostas:


2

Existe uma maneira de usar apenas os coeficientes de regressão, é possível entender quais recursos mais contribuem para a previsão de um determinado vetor de entrada.

No entanto, você precisará padronizar e dimensionar cada variável primeiro (ou seja, subtrair a média e dividir pelo desvio padrão). Depois de reajustar seu modelo com os dados padronizados e dimensionados, o recurso com o maior coeficiente de regressão será o recurso que mais contribui para as previsões futuras.

Os coeficientes de regressão são comparáveis ​​após o dimensionamento, porque tornamos as unidades dos recursos irrelevantes, portanto, um aumento de uma unidade no recurso corresponde ao salto de 1 desvio padrão do recurso não dimensionado.X1


Alejandro, obrigado pela sua resposta. Há um problema com o treinamento em dados normalizados. Eu obtenho muito pior desempenho do modelo. Minha área sob a curva ROC é cerca de 10% menor e minha área sob a curva de precisão-recall também é pior. Portanto, hesito em mudar meu modelo para dados normalizados. Esse é o custo de obter a importância do recurso individual que estou procurando? Existe outro caminho? A magnitude dos coeficientes não reflete sua importância?
kilgoretrout

Hmm, isso é muito estranho. Eu não esperaria que a normalização dos dados efetue suas estimativas, pois a normalização não afeta os relacionamentos subjacentes entre as variáveis. Eu não tenho certeza de qualquer outra maneira para comparar o valor preditivo das características individuais
Alejandro Ochoa

2
Se você observar um desempenho pior em uma regressão linear após a normalização dos recursos, terá um erro. Os modelos em preditores normalizados e normalizados devem fornecer exatamente as mesmas previsões. Um termo de regularização pode afetar isso, mas os modelos regularizados devem sempre usar preditores normalizados.
Matthew Drury

2

Um método que eu gosto de usar para ver qual recurso contribui para uma previsão específica é redefinir todos os recursos à sua média, um por um, e depois ver como a previsão muda. Eu peguei esse método nesta página . Mas vou explicar com um exemplo meu também.

Digamos, por exemplo, que temos um modelo que prevê se um dia é bom para usar shorts com base em informações meteorológicas, digamos temperatura, vento e chuva. e digamos que estamos usando um método que nos fornece probabilidades de classe.

Agora temos um dia em que o modelo está prevendo 50/50 para um determinado dia, mas não queremos saber o que está causando isso. Então, vamos analisar cada um dos recursos, redefini-los para sua média (ou 0) e ver o que o modelo prevê agora.

  • Digamos que a temperatura tenha 20 ° C, mas a temperatura média é 10 ° C. Se re-prevermos o modelo com a temperatura para este dia definida como a média de 10 ° C, mas mantendo a chuva e o vento nos mesmos valores, a previsão acaba sendo de 80% para nenhum short. Claramente a temperatura tem um grande efeito! Agora podemos fazer o mesmo para as outras variáveis.

  • A velocidade do vento está um pouco acima da média e, redefinindo o vento para a média e mantendo os outros iguais, a previsão muda apenas um pouco para 55% para os shorts. Parece que a temperatura é um problema maior.

  • Agora a chuva é um pouco estranha, já que a chuva já está no meio. então, redefinir a média obviamente não teria efeito. Mas ainda queremos saber se a chuva está influenciando a previsão, então o que podemos fazer é colocar a chuva em 0. E eis que, depois de colocar a chuva em 0, o modelo prevê 75% para shorts. Novamente, um grande efeito.

Analisando cada recurso e definindo-os com sua média ou 0, conseguimos identificar em um nível de previsão quais recursos eram importantes. O vento e a temperatura tiveram um grande efeito em qualquer direção, enquanto o vento teve um efeito muito menor.

Agora, por que redefinimos a chuva para 0? Fazer isso para temperatura ou vento teria sido estranho, pois para esses 0 é um valor que quase nunca acontece e tem pouco significado, mas para a chuva 0 é relativamente frequente e significa algo específico, um dia seco. Significando que é sensato redefinir para 0. Portanto, você realmente precisa observar um recurso por base de recurso, o que faz sentido.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.