Prima di creare qualsiasi modello di apprendimento automatico su un set di dati tabellare, normalmente controlliamo se esiste una relazione tra le variabili indipendenti e target. Questo può essere fatto misurando la correlazione tra due variabili. In Python, Pandas fornisce una funzione, dataframe.corr()
, per trovare la correlazione solo tra variabili numeriche.
In questo articolo, vedremo come trovare la correlazione tra variabili categoriali e continue.
Caso 1: Quando una variabile indipendente ha solo due valori
Correlazione biseriale del punto
Se una variabile categoriale ha solo due valori (cioè true/false), allora possiamo convertirla in un tipo di dati numerico (0 e 1). Poiché diventa una variabile numerica, possiamo scoprire la correlazione usando la funzione dataframe.corr()
.
Creiamo un dataframe che consisterà in due colonne: Employee Type (EmpType) e Salary.
Volutamente, assegneremo più stipendio a EmpType1. In questo modo otterremo una certa correlazione tra EmpType e stipendio.
Crea un dataframe con le seguenti proprietà:
-
Lo stipendio medio (medio) di
EmpType1
è 60 con una deviazione standard di cinque. -
Lo stipendio medio (medio) di
EmpType2
è 50 con una deviazione standard di cinque.
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()
Uscita
Stipendio | TypeInt | |
Stipendio | 1 | 0.736262 |
Tipografia | 0.736262 | 1 |
La correlazione tra EmpType e stipendio è 0.7. Quindi possiamo determinare che è correlato.
Caso 2: Quando le variabili indipendenti hanno più di due valori
ANOVA (Analisi della varianza)
Assegneremo più stipendio a EmpType1
, uno stipendio medio a EmpType2
e uno stipendio basso a EmpType3
. In questo modo, otterremo una certa correlazione tra EmpType e stipendio.
-
Lo stipendio medio di
EmpType1
è 90 con una deviazione standard di cinque. -
Lo stipendio medio di
EmpType2
è 70 con una deviazione standard di cinque. -
Lo stipendio medio di
EmpType3
è 50 con una deviazione standard di cinque.
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)
L’output che otteniamo è: 1443.6261
- Poiché lo stipendio medio di tre tipi di dipendenti è 90, 70 e 50 (con una deviazione standard di cinque) il punteggio F è 1444.
- Se lo stipendio medio di tre tipi di dipendenti è 60, 55, 50 il punteggio F è 86.
- E se lo stipendio medio di tre tipi di dipendenti è 51, 50, 49 (quasi lo stesso), il punteggio F sarà vicino a 0, cioè non c’e ‘ correlazione.
- Maggiore è il valore del punteggio F maggiore sarà la correlazione.
È possibile scaricare ed eseguire il codice completo da questo link.