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:
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.
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.
fonte
Respostas:
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
fonte
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.
fonte