Regressão logística no Python


 Regressão logística com Scikit-learn

Para implementar a regressão logística com o Scikit-learn, você precisa entender o processo de modelagem do Scikit-learn e a regressão linear.

As etapas para construir uma regressão logística incluem:

Importe os pacotes , classes e funções. Carregue os dados. Análise Exploratória de Dados (AED). Transforme os dados, se necessário. Ajustar o modelo de classificação. Avalie o modelo de desempenho.

Importando pacotes

Primeiro, você precisa importar Seaborn para visualização, NumPy e Pandas . Além disso, importe:

LogisticRegression para ajuste do modelo. confusion_matrix e classification_report para avaliar o modelo.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split 
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score

Carregando o conjunto de dados

Importe o conjunto de dados Social Network Ads do Kaggle . Os dados são um arquivo CSV com dados que nos ajudarão a construir um modelo de regressão logística para mostrar quais usuários compraram ou não compraram um produto.

social_N_data = pd.read_csv('/content/Social_Network_Ads.csv')
pd.concat([social_N_data.head(), social_N_data.tail()])

Análise exploratória de dados

Analisar os dados primeiro é a chave para entender suas características. Começaremos verificando os valores ausentes.

#CHECK FOR NULL VALUES
social_N_data.isnull().any()

User ID False
Gender False
Age False
EstimatedSalary False
Purchased False
dtype: bool

Nenhum valor nulo no conjunto de dados.

Confira o total de quem comprou e de quem não comprou:

sns.countplot(x='Purchased', data=social_N_data)

<Axes: xlabel='Purchased', ylabel='count'>

Zero indica quem não comprou e 1 para quem comprou.

Confira quantos homens e mulheres compraram o produto:

sns.countplot(x='Purchased', hue='Gender', data=social_N_data)

<Axes: xlabel='Purchased', ylabel='count'>

A partir do gráfico, podemos ver que a maioria das pessoas que não compraram são do sexo masculino, e a maioria das que compraram são do sexo feminino.

Também podemos verificar a distribuição etária no conjunto de dados:

sns.displot(x='Age', data=social_N_data, color='red', kde=True)

<seaborn.axisgrid.FacetGrid at 0x7f334e426260>

Limpando os dados

Usaremos as colunas Gender, Age e EstimatedSalary do conjunto de dados para a regressão logística. Isso significa que não precisamos da UserID coluna. Assim vamos abandoná-lo.

# CLEAN THE DATA
social_N_data.drop('User ID', axis=1, inplace=True)
pd.concat([social_N_data.head(), social_N_data.tail()])


Transformando dados categóricos em fictícios

Vamos examinar o info conjunto de dados para ter uma ideia geral do que ele contém.

social_N_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 400 entries, 0 to 399
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Gender 400 non-null object
1 Age 400 non-null int64
2 EstimatedSalary 400 non-null int64
3 Purchased 400 non-null int64
dtypes: int64(3), object(1)
memory usage: 12.6+ KB

A Gender variável é categórica. Para que o modelo funcione, vamos convertê-lo em variáveis dummy usando os Pandas get_dummies ou o método oneHotEncoder.

Altere Gender para a variável dummy e descarte o primeiro dummy para evitar multicolinearidade:

gender = pd.get_dummies(social_N_data['Gender'], drop_first=True)
social_N_data.drop('Gender',axis=1,inplace=True)
social_N_data = pd.concat([social_N_data,gender], axis=1)
social_N_data.head(8)

Quando o valor Masculino é 1, significa que o gênero é masculino, e quando o valor é 0, o gênero é feminino. Não exigimos as variáveis ​​Feminino e Sexo no conjunto de dados, pois uma pode ser usada para prever a outra.

Dividindo os dados em variáveis ​​independentes (X) e dependentes (y)

Divida os dados em variáveis ​​independentes e dependentes.

X = social_N_data.iloc[:,[0,1,3]] # Age, EstimatedSalary and Male
X.head()
y = social_N_data.iloc[:, 2# Purchased
y

0 0
1 0
2 0
3 0
4 0
..
395 1
396 1
397 1
398 0
399 1
Name: Purchased, Length: 400, dtype: int64

Dimensionamento de recursos

O dimensionamento de recursos é um método usado para normalizar o intervalo de variáveis ​​independentes. O método permite que as variáveis ​​independentes estejam no mesmo intervalo.

Ao trabalhar com grandes conjuntos de dados, o dimensionamento desempenha um papel significativo na melhoria do desempenho do modelo.

Nos dados, vamos importar o módulo StandardScaler Scikit-learn preprocessing e usá-lo para transformar os dados. Por exemplo, existe uma grande diferença entre os valores da variável Age e os de EstimatedSalary.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit_transform(X)
X
array([[-1.78179743, -1.49004624, 1.02020406],
[-0.25358736, -1.46068138, 1.02020406],
[-1.11320552, -0.78528968, -0.98019606],
...,
[ 1.17910958, -1.46068138, -0.98019606],
[-0.15807423, -1.07893824, 1.02020406],
[ 1.08359645, -0.99084367, -0.98019606]])

Dividindo o conjunto de dados em conjuntos de treinamento e teste

Divida o conjunto de dados em conjuntos de treinamento e teste usando a função train_test_split.

from sklearn.model_selection import train_test_split 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=1)

print(X_train.shape)
print(X_test.shape)
print(y_train.shape)
print(y_test.shape)
(280, 3)
(120, 3)
(280,)
(120,)

Ajustando o modelo de regressão logística e prevendo os resultados do teste

Agora que o conjunto de dados está bem preparado, podemos treinar o modelo importando a classe LogisticRegression do módulo linear_model Scikit-learn.

O treinamento é feito chamando o médodo fit e passando os dados de treinamento.

from sklearn.linear_model import LogisticRegression  
classifier = LogisticRegression()
classifier.fit(X_train, y_train)

O modelo agora é treinado no conjunto de treinamento. Vamos realizar a previsão no conjunto de teste usando método predict.

y_pred = classifier.predict(X_test)

Vamos criar um Pandas DataFrame e comparar os valores previstos e reais.

result = pd.DataFrame({'Actual' : y_test, 'Predicted' : y_pred})
result

Os atributos coef_ e intercept_ fornecem o coeficiente e a interceptação do modelo.

classifier.coef_
array([[2.36839196, 1.42929561, 0.20973787]])
classifier.intercept_ 
array([-1.1352347])

Avaliando o modelo Existem várias maneiras de verificar o desempenho do modelo.

Usando predict_proba Ele retorna a matriz de probabilidades de que a saída prevista seja igual a zero ou um.

print(classifier.predict_proba(X))
[[9.99305047e-01 6.94953436e-04]
[9.73650395e-01 2.63496050e-02]
[9.93938614e-01 6.06138563e-03]
[9.86425967e-01 1.35740330e-02]
[9.92449933e-01 7.55006749e-03]
[9.78634880e-01 2.13651200e-02]
[9.59015410e-01 4.09845897e-02]
[3.21160956e-01 6.78839044e-01]
[9.95160538e-01 4.83946203e-03]
[8.94774017e-01 1.05225983e-01]
[9.71990649e-01 2.80093506e-02]
[9.91181077e-01 8.81892308e-03]
[9.85694423e-01 1.43055770e-02]
[9.87533664e-01 1.24663357e-02]
[9.92255565e-01 7.74443464e-03]
[9.20459783e-01 7.95402167e-02]
[6.64896819e-01 3.35103181e-01]
[7.49443667e-01 2.50556333e-01]
[6.86862714e-01 3.13137286e-01]
[6.70546154e-01 3.29453846e-01]
[7.79633457e-01 2.20366543e-01]
[5.24342635e-01 4.75657365e-01]
[4.47060141e-01 5.52939859e-01]
[8.43313433e-01 1.56686567e-01]
[7.30142964e-01 2.69857036e-01]
[7.09930944e-01 2.90069056e-01]
[5.26688397e-01 4.73311603e-01]
[7.09899857e-01 2.90100143e-01]
[9.82040967e-01 1.79590333e-02]
[9.90032335e-01 9.96766502e-03]
[9.04478904e-01 9.55210964e-02]
[7.16719057e-01 2.83280943e-01]
[9.99366754e-01 6.33245900e-04]
[9.90100683e-01 9.89931667e-03]
[9.22822219e-01 7.71777814e-02]
[9.64966938e-01 3.50330621e-02]
[9.84416175e-01 1.55838249e-02]
[9.71349095e-01 2.86509049e-02]
[9.79818011e-01 2.01819893e-02]
[9.95400407e-01 4.59959315e-03]
[9.97438946e-01 2.56105394e-03]
[9.60093093e-01 3.99069066e-02]
[4.79048696e-01 5.20951304e-01]
[9.92970022e-01 7.02997758e-03]
[9.49140914e-01 5.08590862e-02]
[9.98210717e-01 1.78928312e-03]
[9.67561460e-01 3.24385403e-02]
[9.88012641e-01 1.19873588e-02]
[4.78510667e-01 5.21489333e-01]
[8.84730029e-01 1.15269971e-01]
[9.97561288e-01 2.43871155e-03]
[9.98959971e-01 1.04002893e-03]
[9.39474563e-01 6.05254374e-02]
[9.80222710e-01 1.97772901e-02]
[9.85852357e-01 1.41476427e-02]
[9.93622045e-01 6.37795522e-03]
[9.96198381e-01 3.80161932e-03]
[9.38010384e-01 6.19896160e-02]
[9.98687232e-01 1.31276769e-03]
[6.53985245e-01 3.46014755e-01]
[9.95589290e-01 4.41070957e-03]
[9.55197887e-01 4.48021128e-02]
[9.91942327e-01 8.05767262e-03]
[5.22766880e-01 4.77233120e-01]
[1.72233000e-02 9.82776700e-01]
[9.89046004e-01 1.09539961e-02]
[9.97849512e-01 2.15048757e-03]
[9.84349886e-01 1.56501135e-02]
[9.94320328e-01 5.67967207e-03]
[9.48797055e-01 5.12029453e-02]
[9.66217977e-01 3.37820232e-02]
[9.98022020e-01 1.97798034e-03]
[9.99322507e-01 6.77493145e-04]
[6.40670407e-01 3.59329593e-01]
[9.87533664e-01 1.24663357e-02]
[4.93618838e-01 5.06381162e-01]
[9.97789091e-01 2.21090929e-03]
[9.98740933e-01 1.25906743e-03]
[9.42707444e-01 5.72925556e-02]
[9.97956375e-01 2.04362454e-03]
[9.02242906e-01 9.77570935e-02]
[8.55867872e-01 1.44132128e-01]
[9.96938018e-01 3.06198203e-03]
[6.80390486e-01 3.19609514e-01]
[9.67624332e-01 3.23756684e-02]
[6.94415646e-01 3.05584354e-01]
[9.90329423e-01 9.67057665e-03]
[9.47076251e-01 5.29237494e-02]
[9.56281337e-01 4.37186633e-02]
[9.12971356e-01 8.70286442e-02]
[9.81838577e-01 1.81614231e-02]
[7.56023304e-01 2.43976696e-01]
[9.97143698e-01 2.85630212e-03]
[9.93635693e-01 6.36430659e-03]
[9.39474563e-01 6.05254374e-02]
[9.53551675e-01 4.64483250e-02]
[9.78528078e-01 2.14719217e-02]
[7.04759736e-01 2.95240264e-01]
[7.99814086e-01 2.00185914e-01]
[9.92602134e-01 7.39786602e-03]
[9.28592501e-01 7.14074986e-02]
[9.72245635e-01 2.77543653e-02]
[8.74099935e-01 1.25900065e-01]
[2.82380689e-01 7.17619311e-01]
[9.99503082e-01 4.96918221e-04]
[9.89989693e-01 1.00103072e-02]
[9.95659888e-01 4.34011226e-03]
[9.25758909e-01 7.42410913e-02]
[9.46617987e-01 5.33820131e-02]
[6.96832044e-01 3.03167956e-01]
[7.27858491e-01 2.72141509e-01]
[8.07866988e-01 1.92133012e-01]
[7.70325126e-01 2.29674874e-01]
[8.43985563e-01 1.56014437e-01]
[3.79386669e-01 6.20613331e-01]
[7.16183219e-01 2.83816781e-01]
[7.86035305e-01 2.13964695e-01]
[8.84965090e-01 1.15034910e-01]
[6.98815771e-01 3.01184229e-01]
[6.49183583e-01 3.50816417e-01]
[8.16758396e-01 1.83241604e-01]
[7.26051101e-01 2.73948899e-01]
[6.43293485e-01 3.56706515e-01]
[9.02432902e-01 9.75670978e-02]
[7.97506246e-01 2.02493754e-01]
[8.02737918e-01 1.97262082e-01]
[5.34299444e-01 4.65700556e-01]
[9.94187176e-01 5.81282369e-03]
[9.92359139e-01 7.64086060e-03]
[9.67039311e-01 3.29606891e-02]
[9.48804388e-01 5.11956122e-02]
[9.73411870e-01 2.65881303e-02]
[8.73094446e-01 1.26905554e-01]
[9.94411961e-01 5.58803902e-03]
[9.84383065e-01 1.56169346e-02]
[9.89221808e-01 1.07781921e-02]
[9.91998883e-01 8.00111701e-03]
[7.48227162e-01 2.51772838e-01]
[9.81580877e-01 1.84191229e-02]
[9.99106209e-01 8.93791219e-04]
[9.89022621e-01 1.09773788e-02]
[9.97157318e-01 2.84268157e-03]
[8.77903788e-01 1.22096212e-01]
[8.63498726e-01 1.36501274e-01]
[9.82800332e-01 1.71996681e-02]
[9.73953833e-01 2.60461669e-02]
[9.33952924e-01 6.60470756e-02]
[9.04837800e-01 9.51622000e-02]
[9.62531301e-01 3.74686989e-02]
[9.91305651e-01 8.69434885e-03]
[9.98120610e-01 1.87939027e-03]
[7.69066444e-01 2.30933556e-01]
[8.96976240e-01 1.03023760e-01]
[9.27156855e-01 7.28431454e-02]
[7.93363082e-01 2.06636918e-01]
[9.94198752e-01 5.80124794e-03]
[3.73879299e-01 6.26120701e-01]
[9.34530865e-01 6.54691348e-02]
[9.94652696e-01 5.34730378e-03]
[4.70316018e-01 5.29683982e-01]
[7.17187210e-01 2.82812790e-01]
[9.49489827e-01 5.05101733e-02]
[9.53959941e-01 4.60400585e-02]
[9.45531257e-01 5.44687433e-02]
[9.18714051e-01 8.12859487e-02]
[9.93968331e-01 6.03166873e-03]
[9.95933648e-01 4.06635179e-03]
[8.68599767e-01 1.31400233e-01]
[4.00010447e-01 5.99989553e-01]
[9.85980885e-01 1.40191152e-02]
[9.80593354e-01 1.94066457e-02]
[4.62212387e-01 5.37787613e-01]
[8.75654484e-01 1.24345516e-01]
[9.64085428e-01 3.59145716e-02]
[8.88238787e-01 1.11761213e-01]
[9.98354297e-01 1.64570309e-03]
[9.47645373e-01 5.23546271e-02]
[9.96944592e-01 3.05540766e-03]
[9.97457403e-01 2.54259651e-03]
[9.87212459e-01 1.27875411e-02]
[9.97021629e-01 2.97837085e-03]
[9.42322732e-01 5.76772683e-02]
[6.53985245e-01 3.46014755e-01]
[9.56755991e-01 4.32440092e-02]
[9.42823779e-01 5.71762209e-02]
[9.29810387e-01 7.01896133e-02]
[9.91998883e-01 8.00111701e-03]
[9.73407963e-01 2.65920375e-02]
[8.06449663e-01 1.93550337e-01]
[9.90891834e-01 9.10816621e-03]
[9.68070944e-01 3.19290558e-02]
[9.99387123e-01 6.12877297e-04]
[9.82040967e-01 1.79590333e-02]
[9.94120849e-01 5.87915093e-03]
[9.08635210e-01 9.13647903e-02]
[9.46367571e-01 5.36324286e-02]
[9.36071628e-01 6.39283721e-02]
[9.98831435e-01 1.16856490e-03]
[9.58002815e-01 4.19971849e-02]
[9.71409036e-01 2.85909643e-02]
[9.43328806e-01 5.66711939e-02]
[1.38976895e-01 8.61023105e-01]
[1.59709335e-01 8.40290665e-01]
[6.29800117e-01 3.70199883e-01]
[1.02174789e-02 9.89782521e-01]
[5.45223497e-01 4.54776503e-01]
[5.98849560e-03 9.94011504e-01]
[2.27154178e-02 9.77284582e-01]
[9.77592678e-02 9.02240732e-01]
[8.11054823e-01 1.88945177e-01]
[1.08960357e-01 8.91039643e-01]
[3.36065914e-03 9.96639341e-01]
[8.92111284e-02 9.10788872e-01]
[8.82331731e-01 1.17668269e-01]
[4.82435803e-01 5.17564197e-01]
[4.87083164e-03 9.95129168e-01]
[1.90606502e-01 8.09393498e-01]
[5.11051915e-01 4.88948085e-01]
[1.61246888e-01 8.38753112e-01]
[9.27636904e-04 9.99072363e-01]
[5.38329617e-01 4.61670383e-01]
[6.52410938e-01 3.47589062e-01]
[1.14331809e-01 8.85668191e-01]
[4.12177478e-03 9.95878225e-01]
[9.12959361e-01 8.70406390e-02]
[8.54722228e-01 1.45277772e-01]
[3.43894588e-01 6.56105412e-01]
[2.77702574e-03 9.97222974e-01]
[6.71637566e-01 3.28362434e-01]
[4.81859800e-01 5.18140200e-01]
[2.13968841e-01 7.86031159e-01]
[8.55867872e-01 1.44132128e-01]
[2.36322913e-01 7.63677087e-01]
[8.88736106e-02 9.11126389e-01]
[3.75002140e-01 6.24997860e-01]
[2.05049023e-01 7.94950977e-01]
[7.16183219e-01 2.83816781e-01]
[7.42398047e-01 2.57601953e-01]
[2.57044889e-01 7.42955111e-01]
[5.45850280e-03 9.94541497e-01]
[3.26676923e-02 9.67332308e-01]
[7.84838671e-01 2.15161329e-01]
[9.81402566e-02 9.01859743e-01]
[1.41070445e-02 9.85892956e-01]
[6.19962333e-01 3.80037667e-01]
[7.55025221e-03 9.92449748e-01]
[9.41034476e-01 5.89655236e-02]
[5.33262315e-03 9.94667377e-01]
[7.12846647e-01 2.87153353e-01]
[6.89415258e-01 3.10584742e-01]
[7.67776030e-01 2.32223970e-01]
[8.59856669e-01 1.40143331e-01]
[2.42141706e-02 9.75785829e-01]
[1.52953709e-01 8.47046291e-01]
[4.08218550e-01 5.91781450e-01]
[5.98370294e-02 9.40162971e-01]
[6.19962333e-01 3.80037667e-01]
[7.16183219e-01 2.83816781e-01]
[1.31051397e-02 9.86894860e-01]
[5.25626841e-02 9.47437316e-01]
[8.37100162e-01 1.62899838e-01]
[1.39310923e-01 8.60689077e-01]
[7.37649208e-03 9.92623508e-01]
[8.63734885e-01 1.36265115e-01]
[9.37113887e-02 9.06288611e-01]
[2.23084259e-01 7.76915741e-01]
[5.42429722e-01 4.57570278e-01]
[7.09042176e-01 2.90957824e-01]
[2.00395738e-02 9.79960426e-01]
[6.80859145e-01 3.19140855e-01]
[7.42427856e-02 9.25757214e-01]
[2.29701560e-02 9.77029844e-01]
[4.88425615e-02 9.51157439e-01]
[2.88072826e-01 7.11927174e-01]
[2.31592060e-01 7.68407940e-01]
[2.57429629e-02 9.74257037e-01]
[6.87925229e-01 3.12074771e-01]
[8.23068687e-02 9.17693131e-01]
[3.60790825e-01 6.39209175e-01]
[4.91109383e-01 5.08890617e-01]
[1.40086289e-02 9.85991371e-01]
[8.68616996e-01 1.31383004e-01]
[7.42426915e-01 2.57573085e-01]
[5.35334661e-01 4.64665339e-01]
[1.20132132e-02 9.87986787e-01]
[6.25473450e-01 3.74526550e-01]
[8.59838478e-01 1.40161522e-01]
[2.05488106e-02 9.79451189e-01]
[4.44240707e-01 5.55759293e-01]
[7.58122228e-01 2.41877772e-01]
[1.11060705e-01 8.88939295e-01]
[7.91917601e-02 9.20808240e-01]
[1.52891316e-01 8.47108684e-01]
[6.82400052e-01 3.17599948e-01]
[9.22458522e-01 7.75414776e-02]
[8.80606965e-01 1.19393035e-01]
[4.50573228e-01 5.49426772e-01]
[1.62209531e-01 8.37790469e-01]
[2.44379146e-01 7.55620854e-01]
[4.97397413e-02 9.50260259e-01]
[1.26838207e-01 8.73161793e-01]
[1.68317159e-01 8.31682841e-01]
[2.08518213e-01 7.91481787e-01]
[6.63935385e-01 3.36064615e-01]
[7.71932171e-01 2.28067829e-01]
[6.45449289e-01 3.54550711e-01]
[1.24323545e-02 9.87567645e-01]
[6.98691999e-02 9.30130800e-01]
[2.64331643e-01 7.35668357e-01]
[8.90063440e-01 1.09936560e-01]
[5.85918514e-01 4.14081486e-01]
[3.81059951e-01 6.18940049e-01]
[8.90063440e-01 1.09936560e-01]
[1.45384241e-02 9.85461576e-01]
[6.56563229e-01 3.43436771e-01]
[6.93365379e-01 3.06634621e-01]
[2.20004038e-02 9.77999596e-01]
[8.94788230e-01 1.05211770e-01]
[6.99269355e-01 3.00730645e-01]
[8.46127284e-01 1.53872716e-01]
[8.41708122e-03 9.91582919e-01]
[6.63057390e-02 9.33694261e-01]
[7.12846647e-01 2.87153353e-01]
[6.61208692e-01 3.38791308e-01]
[2.73743742e-02 9.72625626e-01]
[7.29688174e-01 2.70311826e-01]
[5.17450085e-01 4.82549915e-01]
[5.34261883e-01 4.65738117e-01]
[3.25243566e-01 6.74756434e-01]
[8.81147725e-02 9.11885227e-01]
[8.36150261e-01 1.63849739e-01]
[4.45002714e-02 9.55499729e-01]
[5.34299444e-01 4.65700556e-01]
[6.43328124e-01 3.56671876e-01]
[4.53939886e-02 9.54606011e-01]
[9.14973340e-01 8.50266596e-02]
[1.11509425e-03 9.98884906e-01]
[7.56448575e-01 2.43551425e-01]
[8.67787221e-01 1.32212779e-01]
[1.71320233e-01 8.28679767e-01]
[2.74318362e-02 9.72568164e-01]
[7.86035305e-01 2.13964695e-01]
[8.11811394e-01 1.88188606e-01]
[5.03376313e-01 4.96623687e-01]
[6.46162185e-02 9.35383782e-01]
[7.04147722e-01 2.95852278e-01]
[6.63150851e-02 9.33684915e-01]
[1.86637378e-02 9.81336262e-01]
[5.77470588e-01 4.22529412e-01]
[7.70325126e-01 2.29674874e-01]
[3.65217918e-01 6.34782082e-01]
[7.00308141e-01 2.99691859e-01]
[3.79351127e-01 6.20648873e-01]
[8.83273816e-01 1.16726184e-01]
[5.16911721e-01 4.83088279e-01]
[6.70252314e-02 9.32974769e-01]
[5.80311627e-02 9.41968837e-01]
[6.19962333e-01 3.80037667e-01]
[5.83707603e-01 4.16292397e-01]
[6.45449289e-01 3.54550711e-01]
[5.86931135e-02 9.41306887e-01]
[3.47451206e-01 6.52548794e-01]
[5.13865574e-01 4.86134426e-01]
[4.92345198e-01 5.07654802e-01]
[1.82506410e-01 8.17493590e-01]
[1.44589653e-01 8.55410347e-01]
[9.05491546e-02 9.09450845e-01]
[1.50233493e-01 8.49766507e-01]
[6.87925229e-01 3.12074771e-01]
[3.72687228e-01 6.27312772e-01]
[6.19542742e-02 9.38045726e-01]
[9.10404254e-03 9.90895957e-01]
[7.10917103e-01 2.89082897e-01]
[1.59973174e-03 9.98400268e-01]
[7.42398047e-01 2.57601953e-01]
[7.38303227e-01 2.61696773e-01]
[3.26157413e-01 6.73842587e-01]
[7.42810152e-01 2.57189848e-01]
[3.63608266e-01 6.36391734e-01]
[2.14225165e-01 7.85774835e-01]
[5.44726292e-01 4.55273708e-01]
[5.30764183e-01 4.69235817e-01]
[4.73667135e-02 9.52633286e-01]
[5.26688397e-01 4.73311603e-01]
[1.83450790e-01 8.16549210e-01]
[5.62685178e-02 9.43731482e-01]
[5.16177634e-01 4.83822366e-01]
[6.37429516e-01 3.62570484e-01]
[5.76263650e-01 4.23736350e-01]
[6.12736559e-01 3.87263441e-01]
[5.30764183e-01 4.69235817e-01]
[6.83333856e-01 3.16666144e-01]
[6.72112875e-01 3.27887125e-01]
[4.88425615e-02 9.51157439e-01]
[8.15693298e-01 1.84306702e-01]
[6.59132018e-01 3.40867982e-01]
[4.66123329e-01 5.33876671e-01]
[6.53842077e-01 3.46157923e-01]
[9.44682663e-01 5.53173368e-02]
[5.47517742e-01 4.52482258e-01]]

Da matriz, cada linha representa uma única observação. A primeira coluna é a probabilidade de o produto não ser comprado (1-p(x)) e a segunda coluna é a probabilidade de o produto ser comprado (p(x)).

Usando matriz de confusão Do módulo Scikit-learn, importamos arquivos . A matriz de confusão é o número de previsões corretas e incorretas por coluna, mostrando os seguintes valores: metrics confusion_matrix

Verdadeiros negativos (TN - True negatives) na posição superior esquerda.

Falsos negativos (FN - False negatives) na posição inferior esquerda.

Falsos positivos (FP - False positives) na posição superior direita.

Verdadeiros positivos (TP - True positives) na posição inferior direita.

from sklearn.metrics import confusion_matrix
cf_matrix = confusion_matrix(y_test, y_pred)
cf_matrix
array([[63, 9],
[14, 34]])

A saída da matriz de confusão é uma matriz 2*2, pois o modelo é uma classificação binária. Vamos visualizar melhor usando um mapa de calor e explicar.

sns.heatmap(pd.DataFrame(cf_matrix), annot=True, cmap="YlGnBu" ,fmt='g')
plt.title('Confusion matrix', y=1.1)
plt.ylabel('Actual label')
plt.xlabel('Predicted label')
Text(0.5, 23.52222222222222, 'Predicted label')

A partir de confusion_matrix, temos as seguintes observações:

63 previsões TN: zeros previstos corretamente.

14 previsões FN: uns previstos erroneamente como zeros.

9 Previsões FP: zeros que foram erroneamente previstos como uns.

34 previsões TP: aquelas previstas corretamente.

Para calcular a precisão do modelo a partir da matriz de confusão, dividimos a soma de TN e TP pela soma de todas as previsões.

imagem do autor.PNG

Accuracy = (63 + 34)/(63 + 34 + 9 + 14)
Accuracy
0.8083333333333333
# Also same result from sklearn accuracy_score
from sklearn.metrics import accuracy_score

accuracy_score(y_test,y_pred)
0.8083333333333333

A precisão do nosso modelo é de cerca de 80%, o que é ideal.

Métricas da matriz de confusão

O classification_report fornece um relatório mais abrangente do desempenho do modelo.

target_names = ['will NOT PURCHASE', 'will PURCHASE']
print(classification_report(y_test, y_pred,target_names=target_names))
precision recall f1-score support

will NOT PURCHASE 0.82 0.88 0.85 72
will PURCHASE 0.79 0.71 0.75 48

accuracy 0.81 120
macro avg 0.80 0.79 0.80 120
weighted avg 0.81 0.81 0.81 120


Comentários

Postagens mais visitadas