Wie kann ich die Korrelation zwischen Features und Zielvariable überprüfen?

15

Ich versuche, ein RegressionModell zu erstellen , und suche nach einer Möglichkeit, um zu überprüfen, ob eine Korrelation zwischen Features und Zielvariablen besteht.

Dies ist meine Probe 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

Ich versuche, eine LoanAmountSpalte basierend auf den oben verfügbaren Funktionen vorherzusagen .

Ich möchte nur sehen, ob es eine Korrelation zwischen den Features und der Zielvariablen gibt. Ich habe es versucht LinearRegression, GradientBoostingRegressorund ich bekomme kaum eine Genauigkeit von herum 0.30 - 0.40%.

Irgendwelche Vorschläge zu Algorithmen, Parametern usw., die ich für eine bessere Vorhersage verwenden sollte?

user_6396
quelle
Gibt es dafür in R eine spezielle Funktion?
Alkanschtein
Können Sie einfach den Pearson-Koeffizienten überprüfen? wobei r = 1 eine perfekte positive Korrelation bedeutet und r = -1 eine perfekte negative Korrelation bedeutet.
zik augustus

Antworten:

11

Ihre Daten können mit in einen Pandas DataFrame gestellt werden

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)

Um eine Korrelation zu erhalten, müssen wir unsere kategorialen Merkmale in numerische konvertieren. Natürlich wird die Wahl der Reihenfolge die Korrelation beeinflussen, aber zum Glück scheinen alle unsere Kategorien binär zu sein. Ist dies nicht der Fall, müssen Sie eine benutzerdefinierte Bestellung erstellen.

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

Jetzt können wir die Korrelation zwischen dem 'LoanAmount' und allen anderen Funktionen erhalten.

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

Geben Sie hier die Bildbeschreibung ein


Es ist unwahrscheinlich, dass die Verwendung von maschinellem Lernen für diese Daten funktioniert. Es gibt einfach nicht genügend Daten, um relevante Informationen zwischen Ihrer großen Anzahl von Funktionen und dem Darlehensbetrag zu extrahieren.

Sie benötigen mindestens zehnmal mehr Instanzen als Funktionen, um gute Ergebnisse zu erzielen.


Um nur die Korrelation zwischen einem Feature und einer Teilmenge der Features zu erhalten, können Sie dies tun

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

Dies nimmt eine Teilmenge des DataFrame und wendet dann dieselbe Funktion corr () wie oben an. Stellen Sie sicher, dass die ausgewählte Teilmenge der Spalten die Spalte enthält, mit der Sie die Korrelation berechnen möchten. In diesem Beispiel ist dies "LoanAmount".

JahKnows
quelle
Ist es möglich zu wählen, welche Features beibehalten werden sollen, wenn die Korrelation der Features betrachtet wird?
user_6396
@ user2475, ich habe die Antwort bezüglich Ihrer Frage hinzugefügt.
JahKnows
Gern geschehen! Lassen Sie uns wissen, wenn andere Fragen auftauchen.
JahKnows
@JabKnows Nur ein Zweifel. Muss ich meine Feature-Werte skalieren? Ich meine sollte ich verwenden standardscaleroder min_max_scalar. Ich möchte eine Klassifizierungsaufgabe ausführen.
user_6396
1
Dies hängt vom ausgewählten Algorithmus ab. Einige verlangen es, andere nicht, Sie müssten den Algorithmus überprüfen. Es ist jedoch gut, den Maßstab der verschiedenen Merkmale ähnlich zu halten.
JahKnows
7

Methode in Python

Eine Möglichkeit, die Korrelation jedes Features mit der Zielvariablen zu überprüfen, besteht darin, den Code auszuführen:

# 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))

Die folgende Korrelationsausgabe sollte alle Variablen und ihre Korrelationen zur Zielvariablen auflisten. Die negativen Korrelationen bedeuten, dass die Merkmalsvariable mit abnehmendem Wert der Zielvariablen an Wert zunimmt. (Linear)

Führen Sie den folgenden Code aus, um stattdessen die Korrelationen auf Plots zu zeichnen:

# 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))

figsizeGeben Sie für das Argument für die scatter_matrixFunktion die Größe ein, die am besten passt.

Ethan Yun
quelle
2

Sie können die pandas.DataFrame.corrwith()Funktion verwenden, um Korrelationen zu finden:

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

Erstellen des Datensatzes

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)

Konvertieren der kategorialen Variablen in Zahlen

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
quelle