Blog

Postado em em 5 de dezembro de 2022

Regressão Logística – Algoritmos de Aprendizado de Máquinas

Você já conhece a Regressão Logística? Que é um algoritmo de aprendizado de máquinas para classificação de dados?

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Aprenda Regressão Logística hoje!

A regressão logística é um algoritmo super potente de classificação que nos permite saber, por exemplo, se um cliente é bom ou ruim, qual a probabilidade daquele cliente pagar ou não…

É importante destacar que por mais que o nome seja “regressão logística” ele não é um algoritmo de regressão e sim de classificação.

O algoritmo de regressão logística é um modelo linear para classificação que usa a função dada por:

Cálculo.
Cálculo.

Nós não precisamos decorar a função, precisamos apenas entender que ela vai ter o formato da imagem abaixo para que você aprenda regressão logística mais rápido:

Aprenda Regressão Logística
Formato do gráfico.

Outra informação importante é que quando olhamos para dados binários se nós pegarmos uma única coluna deste exemplo, podemos utilizar o mesmo conceito que usamos na aula de regressão linear (coef, intercept) para determinar o xs (calcular S) da função.

A diferença é que na regressão logística, ao invés de determinar um valor binário para a classe (0 ou 1, maçã ou banana, fraude ou não), ela retorna à probabilidade de um evento ocorrer.

Ou seja, a probabilidade de termos um cliente bom ou ruim, a probabilidade de ocorrerem fraudes, a probabilidade de um cliente sair da empresa, etc.

Quando falamos de saída de clientes, vamos supor que fizemos um modelo de árvore de decisão.

No modelo de árvore de decisão vimos que 1000 clientes têm chance de sair da empresa.

Trabalhando com os mesmos dados com a regressão logística nós iremos encontrar estes mesmos mil clientes, mas, neste caso vamos olhar a probabilidade.

Vamos conseguir observar que só 100 destes clientes tem uma probabilidade de 90% de sair, 500 tem probabilidade entre 50 e 60 e os demais uma probabilidade mais baixa.

Sabendo disso podemos escolher direcionar os nossos esforços para os clientes mais críticos.

Como este algoritmo calcula probabilidades, é muito usado em problemas de classificação de crédito, previsão de saída de clientes (churn) e até probabilidade de doenças.

Considerando uma única variável (petal width (cm)) para fazer a previsão do dataset iris (que já falamos nas aulas anteriores), podemos visualizar primeiramente os dados e então traçar essa função logística.

Aprenda Regressão Logística
Exemplo

É importante entendermos a fórmula para que você Aprenda Regressão Logística e saiba como classificar os gráficos.

O que vamos fazer na hora de classificar é:

Se o ponto está mais próximo do zero é porque ele provavelmente é zero.

Se o ponto estiver mais próximo de 1 ele provavelmente vai ser 1.

Exemplo de uma análise de fraude. Interpretando os gráficos:

Exemplo
Exemplo

Para começar, podemos já usar o dataset iris

https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html#sklearn.datasets.load_iris

Vamos Importar o dataset usando a documentação de forma direta, transformando em DataFrame e importando o valor de X e Y.

Aprenda Regressão Logística
Importando o DataSet.

Observe que pegamos apenas as colunas de pétala e os targets 0 e 1 porque queremos começar analisando o micro, entender como funciona em um exemplo mais visual e depois vamos entender que funciona para qualquer quantidade de classes e para qualquer número de colunas do nosso X.

Vamos separar em treino e teste:

https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

Visualizando graficamente a relação do petal width (cm) com a classe

https://matplotlib.org/stable/plot_types/basic/scatter_plot.html#sphx-glr-plot-types-basic-scatter-plot-py

Visualizando graficamente.
Visualizando graficamente.

Agora podemos visualizar os dados de treino.

Aprenda Regressão Logística
Visualizando graficamente.

Neste caso em que os valores são menores que 0,7 podemos classificar como 0.

E os valores maiores de 0,8 classificamos como 1.

A regressão logística é importante porque após entender estes gráficos pode ser aplicada para qualquer quantidade.

Vamos utilizar a regressão logística! Segue o link da documentação:

https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression

Para utilizar vamos seguir usando a documentação que demonstra como fazemos para aplicar a regressão logística.

Aprenda Regressão Logística
Documentação

Copie e cole a segunda linha da documentação para importar a regressão logística.

Regressão logística.
Regressão logística.

Nesta próxima linha que já está com o fit(x, y) só precisamos trocar pelo x_train e y_train que já deixamos pronto no início da aula.

Criando o classificador.
Criando o classificador.

Quando falamos de modelos de algoritmos o modelo espera receber como X um array 2D do contrário vamos ter um erro, então temos que acrescentar no X o reshape(-1, 1).

Criando o classificador.
Criando o classificador.

Completando os coeficientes:

Aprenda Regressão Logística
Coeficiente.

Agora, vamos usar os coeficientes coef e intercept que acabamos de gerar para determinar o valor de S.

Cálculo.
Cálculo.

Existe uma forma mais direta de determinar este valor.

O Scipy possui uma função pronta e não é necessário escrever.

Para traçar esse gráfico, já temos a função expit do Scipy.

Documentação:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.expit.html

expit(x) = 1/(1+exp(-x))

Importando o expit:

Expit.
Expit.

Para conseguirmos traçar a nossa curva de forma mais visual vamos utilizar uma array que vai gerar 100 números entre os valores de x_train e y_train.

Numpy.
Numpy.

Fazendo isso, criamos uma lista de valores para o X e o valor do Y será justamente a curva gerada pela regressão logística.

Como calcular os valores de Y?

Vamos dizer que os valores de Y é igual a expit() sendo os valores que acabamos de gerar…

Dentro de expit vamos passar os valores de S que serão os valores da equação da reta.

W1 = clf.coef_[0] [0]

W0 = clf.intercept_[0]

A reta é o coeficiente angular x os valores de X + coeficiente linear.

Para o caso binário, podemos calcular a curva em função do coef_ e do intercept_ fazendo expit(x*w1+w0)

https://scikit-learn.org/stable/modules/linear_model.html#binary-case

Calculando y.
Calculando y.
Visualizando.
Visualizando.
Aprenda Regressão Logística
Visualizando.

Obs. Usando os dados de treino, o gráfico ficaria menos visual, por isso criamos valores para fins didáticos.

Podemos também:

Aprenda Regressão Logística
plot
Aprenda Regressão Logística
Previsão.

Dessa forma podemos visualizar os pontos de treino e a reta feita pela regressão logística e os pontos em laranja feitos na previsão.

Para entender melhor vamos ver a previsão da probabilidade:

Probabilidades.
Probabilidades.
x_train.
X_train.

Analisando a previsão das probabilidades conseguimos ver que no primeiro ponto existem 80% de chance de ser 0, e 11% de chance de ser 1.

Estamos visualizando as probabilidades dos 5 primeiros pontos.

Aprenda Regressão Logística
Distancia entre os pontos.

O que estamos calculando é a distância entre os pontos, quanto menor a distância maior a possibilidade de ser 0 ou 1, quanto maior a distância entre os pontos maior a dúvida sobre a previsão daquele ponto.

Utilizando essa previsão na base de teste.

Aprenda Regressão Logística
Previsão da probabilidade.
Aprenda Regressão Logística
Gráfico.

Fazendo apenas a previsão:

Apenas a previsão.
Apenas a previsão.

Fazendo a verificação usando a matriz de confusão vemos que ele acertou todas as previsões.

O caso binomial pode ser estendido para quantas classes quisermos, porém, há um aumento na complexidade.

Para quem quiser se aprofundar vou deixar o link da documentação.

https://scikit-learn.org/stable/modules/linear_model.html#binary-case

Podemos considerar todas as classes e todas as colunas:

Dataset.
Dataset.
Treino e teste.
Treino e teste.

Neste exemplo quando estivermos criando o classificador, podemos gerar um erro por ultrapassar o valor máximo de conversões, neste caso ajustamos para 1000 o máximo, para ficar conforme a documentação, isso já basta para resolver o erro.

Classificador.
Classificador.

Verificando nosso coef vamos ter 3 linhas de 3 classe e quatro colunas como nosso x de treino que também tem 4 colunas.

Aprenda Regressão Logística
Coef_

Isso também vale para o intercept como temos 3 classes o intercept terá 3 valores.

Intercept.
Intercept.
Previsão das classes.
Previsão das classes.
Avaliando o erro.
Avaliando o erro.

Após avaliar o erro:

A previsão da regressão logística para o dataset iris está de 100%, todos os valores foram previstos corretamente.

Nesse caso não é necessário melhorar o modelo porque ele está funcionando muito bem para os dados de teste.

Claro que, se colocássemos esse modelo em produção teríamos que avaliar os novos dados.

Esta aula faz parte de uma sequência de aulas sobre algoritmos de aprendizado de máquinas.

Além dos links sobre árvore de decisão e regressão linear vou deixar o link da aula ensinando sobre o KNN:

Conclusão – Regressão Logística

Nesta aula mostramos como funciona o modelo de algoritmo de regressão logística.

Este modelo busca prever a probabilidade de um evento acontecer, sendo muito utilizado em análises de crédito, fraudes, doenças e outros diversos eventos.

Mostramos por meio de exemplos como importar da documentação os dados do algoritmo e como interpretar os gráficos gerados por ele para poder fazer a classificação desses dados de acordo com esse modelo.

Espero que tenham gostado! Até mais.

Hashtag Treinamentos

Para acessar outras publicações de Ciência de Dados, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador