Antes de fazer qualquer modelo de aprendizagem de máquina em um conjunto de dados tabulares, normalmente verificamos se existe uma relação entre as variáveis independente e alvo. Isto pode ser feito medindo a correlação entre duas variáveis. Em Python, Pandas fornece uma função, dataframe.corr()
, para encontrar a correlação apenas entre variáveis numéricas.
neste artigo, veremos como encontrar a correlação entre variáveis categóricas e contínuas.
Caso 1: Quando uma Variável Independente Tem Apenas Dois Valores
Correlação Ponto bisserial
Se uma variável categórica tem apenas dois valores (i.e. verdadeiro/falso), então podemos convertê-lo para um tipo de dados numérico (0 e 1). Uma vez que se torna uma variável numérica, podemos descobrir a correlação usando a função dataframe.corr()
.
vamos criar um dataframe que consistirá em duas colunas: tipo de empregado (EmpType) e salário.Propositadamente, atribuiremos mais salário ao EmpType1. Desta forma, teremos alguma correlação entre o vazio e o salário.
crie um dataframe com as seguintes propriedades:
-
o salário médio (médio) de
EmpType1
é de 60 com um desvio-padrão de cinco. -
o salário médio (médio) de
EmpType2
é de 50 com um desvio-padrão de cinco.
import pandas as pdimport numpy as npnum1=np.random.normal(loc=60,scale=5,size=100)df1=pd.DataFrame(num1,columns=)df1='EmpType1'num2=np.random.normal(loc=50,scale=5,size=100)df2=pd.DataFrame(num2,columns=)df2='EmpType2'df=pd.concat(,axis=0)# Since Categorical variable 'Type' has only 2 values we will convert it into numeric (0 and 1) datatype.df=(df=='EmpType1').astype(int)df.corr()
Saída
Salário | TypeInt | |
Salário | 1 | 0.736262 |
TypeInt | 0.736262 | 1 |
A correlação entre EmpType e o Salário é de 0,7. Então podemos determinar que está correlacionado. Caso 2: Quando variáveis independentes têm mais de dois valores
ANOVA (análise da variância)
atribuiremos mais Salário a EmpType1
, um salário médio a EmpType2
, e um salário Baixo a EmpType3
. Desta forma, teremos alguma correlação entre o vazio e o salário.
-
o salário médio de
EmpType1
é de 90, com um desvio padrão de cinco. -
o salário médio de
EmpType2
é de 70 com um desvio padrão de cinco. -
o salário médio de
EmpType3
é de 50, com um desvio padrão de cinco.
num1=np.random.normal(loc=90,scale=5,size=100)df1=pd.DataFrame(num1,columns=)df1='EmpType1'num2=np.random.normal(loc=70,scale=5,size=100)df2=pd.DataFrame(num2,columns=)df2='EmpType2'num3=np.random.normal(loc=50,scale=5,size=100)df3=pd.DataFrame(num3,columns=)df3='EmpType3'df=pd.concat(,axis=0)from scipy import statsF, p = stats.f_oneway(df.Salary, df.Salary, df.Salary)print(F)
a saída que obtemos é: 1443.6261
- Uma vez que o salário médio de três tipos de empregados é de 90, 70 e 50 (com um desvio padrão de cinco), a pontuação F é de 1444.
- Se o salário médio de três tipos de empregados for de 60, 55, 50 a pontuação F é de 86.
- e se o salário médio de três tipos de empregados for 51, 50, 49 (quase o mesmo), então a pontuação F Será próxima de 0, ou seja, não há correlação.
- quanto maior o valor da pontuação F, maior será a correlação.
pode baixar e executar o código completo a partir deste link.