Como posso verificar a correlação entre os recursos e a variável de destino?

15

Estou tentando criar um Regressionmodelo e estou procurando uma maneira de verificar se há alguma correlação entre recursos e variáveis ​​de destino?

Esta é a minha amostra dataset

     Loan_ID    Gender  Married Dependents  Education Self_Employed ApplicantIncome\    

0   LP001002    Male    No         0        Graduate      No            5849    
1   LP001003    Male    Yes        1        Graduate      No            4583    
2   LP001005    Male    Yes        0        Graduate     Yes            3000    
3   LP001006    Male    Yes        0        Not Graduate  No            2583    
4   LP001008    Male    No         0        Graduate      No            6000    

CoapplicantIncome  LoanAmount   Loan_Amount_Term  Credit_History Area Loan_Status
      0.0               123          360.0            1.0        Urban     Y
      1508.0          128.0          360.0            1.0        Rural     N
      0.0              66.0          360.0            1.0        Urban     Y
      2358.0          120.0          360.0            1.0        Urban     Y
      0.0             141.0          360.0            1.0        Urban     Y

Estou tentando prever a LoanAmountcoluna com base nos recursos disponíveis acima.

Eu só quero ver se há uma correlação entre os recursos e a variável de destino. Eu tentei LinearRegression, GradientBoostingRegressore eu mal estou conseguindo uma precisão de cerca 0.30 - 0.40%.

Alguma sugestão sobre algoritmos, parâmetros etc que eu devo usar para uma melhor previsão?

user_6396
fonte
Existe uma função especial para isso em R?
alkanschtein 6/02/19
Você pode apenas verificar o coeficiente de pearson. em que o R = 1 significa uma correlação positiva perfeita e r = -1 meios uma correlação negativa perfeita ..
zik Augusto

Respostas:

11

Seus dados podem ser colocados em um DataFrame do pandas usando

import pandas as pd
data = {'Loan ID': ['LP001002', 'LP001003', 'LP001005', 'LP001006', 'LP001008'],
        'Married': ['No', 'Yes', 'Yes', 'Yes', 'No'],
        'Dependents': [0, 1, 0, 0, 0],
        'Education': ['Graduate', 'Graduate', 'Graduate', 'Not Graduate', 'Graduate'],
        'Self_Employed': ['No', 'No', 'Yes', 'No', 'No'],
        'Income': [5849, 4583, 3000, 2583, 6000],
        'Coapplicant Income': [0, 1508, 0, 2358, 0],
        'LoanAmount': [123, 128, 66, 120, 141],
        'Area': ['Urban', 'Rural', 'Urban', 'Urban', 'Urban'],
        'Loan Status': ['Y', 'N', 'Y', 'Y', 'Y']} 
df = pd.DataFrame(data)

Agora, para obter uma correlação, precisamos converter nossos recursos categóricos em numéricos. É claro que a escolha da ordem afetará a correlação, mas felizmente todas as nossas categorias parecem binárias. Se não for esse o caso, você precisará criar um pedido personalizado.

df = pd.DataFrame(data)
df['Married'] =df['Married'].astype('category').cat.codes
df['Education'] =df['Education'].astype('category').cat.codes
df['Self_Employed'] =df['Self_Employed'].astype('category').cat.codes
df['Area'] =df['Area'].astype('category').cat.codes
df['Loan Status'] =df['Loan Status'].astype('category').cat.codes

Agora podemos obter a correlação entre o 'LoanAmount' e todos os outros recursos.

df[df.columns[1:]].corr()['LoanAmount'][:]

insira a descrição da imagem aqui


Agora, é provável que o uso de algum aprendizado de máquina nesses dados funcione. Apenas não há dados suficientes para extrair algumas informações relevantes entre o grande número de recursos e o valor do empréstimo.

Você precisa de pelo menos 10 vezes mais instâncias do que recursos para esperar obter bons resultados.


Para obter apenas a correlação entre um recurso e um subconjunto dos recursos, você pode fazer

df[['Income', 'Education', 'LoanAmount']].corr()['LoanAmount'][:]

Isso pegará um subconjunto do DataFrame e aplicará a mesma função corr () como acima. Certifique-se de que o subconjunto de colunas selecionadas inclua a coluna com a qual você deseja calcular a correlação; neste exemplo, é 'LoanAmount'.

JahKnows
fonte
É possível escolher quais recursos manter ao analisar a correlação dos recursos?
user_6396
@ user2475, adicionei à resposta referente à sua pergunta.
JahKnows
O prazer é meu! informe-nos se surgirem outras perguntas.
JahKnows
@JabKnows Apenas uma dúvida. Preciso dimensionar meus valores de recurso. Quero dizer, devo usar standardscalerou min_max_scalar. Eu quero fazer uma tarefa de classificação.
user_6396
11
Depende do algoritmo que você selecionar. Alguns exigem isso, outros não, você precisa verificar o algoritmo. É bom, no entanto, manter a escala dos diferentes recursos semelhantes.
JahKnows
7

Método em Python

Uma maneira de verificar a correlação de cada recurso com a variável de destino é executar o código:

# Your data should be a pandas dataframe for this example
import pandas
yourdata = ...
corr_matrix = yourdata.corr()
print(corr_matrix["your_target_variable"].sort_values(ascending=False))

A saída de correlação a seguir deve listar todas as variáveis ​​e suas correlações com a variável de destino. As correlações negativas significam que, conforme a variável de destino diminui de valor, a variável de recurso aumenta de valor. (Linearmente)

Para plotar as correlações nos gráficos, execute o código:

# make sure to specify some features that you might want to focus on or the plots might be too big
from pandas.tools.plotting import scatter_matrix
attributes = [list of whatever features you want to plot against the target variable]
scatter_matrix(yourdata[attributes], figsize=(12, 8))

Para o figsizeargumento da scatter_matrixfunção, insira o tamanho que melhor se adequar.

Ethan Yun
fonte
2

Você pode usar a pandas.DataFrame.corrwith()função para encontrar correlações:

df.drop(columns=['Loan ID']).corrwith(df['Loan Status'])

Criando o conjunto de dados

import pandas as pd
data = {'Loan ID': ['LP001002', 'LP001003', 'LP001005', 'LP001006', 'LP001008'],
        'Married': ['No', 'Yes', 'Yes', 'Yes', 'No'],
        'Dependents': [0, 1, 0, 0, 0],
        'Education': ['Graduate', 'Graduate', 'Graduate', 'Not Graduate', 'Graduate'],
        'Self_Employed': ['No', 'No', 'Yes', 'No', 'No'],
        'Income': [5849, 4583, 3000, 2583, 6000],
        'Coapplicant Income': [0, 1508, 0, 2358, 0],
        'LoanAmount': [123, 128, 66, 120, 141],
        'Area': ['Urban', 'Rural', 'Urban', 'Urban', 'Urban'],
        'Loan Status': ['Y', 'N', 'Y', 'Y', 'Y']} 
df = pd.DataFrame(data)

Convertendo as variáveis ​​categóricas em números

df['Married'] =df['Married'].astype('category').cat.codes
df['Education'] =df['Education'].astype('category').cat.codes
df['Self_Employed'] =df['Self_Employed'].astype('category').cat.codes
df['Area'] =df['Area'].astype('category').cat.codes
df['Loan Status'] =df['Loan Status'].astype('category').cat.codes
user7761363
fonte