[PYTHON] [SIGNATE] Bankkunden-Targeting @ Learning

[SIGNATE] Ich lerne, was maschinelles Lernen ist, indem ich Kunden an Banken wende.

URL:https://signate.jp/competitions/1

Vorbereitungsarbeiten

#Importieren Sie die diesmal verwendete Bibliothek
import numpy as np
import pandas as pd
import xgboost as xgb
from xgboost import XGBClassifier
from sklearn.metrics import log_loss, accuracy_score
from sklearn.model_selection import KFold

Daten lesen, Vorverarbeitung

#Trainingsdaten und Testdaten lesen
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

#Teilen Sie die Trainingsdaten in Merkmalsmengen und Zielvariablen ein
train_x = train.drop(['y'], axis=1)
train_y = train['y']

#Die Testdaten sind nur die Feature-Menge, sodass Sie sie unverändert lassen können
test_x = test.copy()

#Variablen-ID ausschließen
train_x = train_x.drop(['id'], axis=1)
test_x = test_x.drop(['id'], axis=1)

#Legen Sie ein Wörterbuch für die Konvertierung der einzelnen Funktionen fest
marital_mapping = {'married': 3, 'single': 2, 'divorcedw': 1}
education_mapping = {'secondary': 4, 'tertiary': 3, 'primary': 2, 'unknown': 1}
default_mapping = {'no': 0, 'yes': 1}
housing_mapping = {'no': 0, 'yes': 1}
loan_mapping = {'no': 0, 'yes': 1}
month_mapping = {'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5, 'jun': 6, 'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12}

#Konvertieren Sie jede Funktion von Trainingsdaten
train_x['marital'] = train_x['marital'].map(marital_mapping)
train_x['education'] = train_x['education'].map(education_mapping)
train_x['default'] = train_x['default'].map(default_mapping)
train_x['housing'] = train_x['housing'].map(housing_mapping)
train_x['loan'] = train_x['loan'].map(loan_mapping)
train_x['month'] = train_x['month'].map(month_mapping)

#Konvertieren Sie jede Funktion von Trainingsdaten
test_x['marital'] = test_x['marital'].map(marital_mapping)
test_x['education'] = test_x['education'].map(education_mapping)
test_x['default'] = test_x['default'].map(default_mapping)
test_x['housing'] = test_x['housing'].map(housing_mapping)
test_x['loan'] = test_x['loan'].map(loan_mapping)
test_x['month'] = test_x['month'].map(month_mapping)

#Variablen ausschließen
train_x = train_x.drop(['job','marital','education','default','housing','loan','contact','campaign','previous'], axis=1)
test_x = test_x.drop(['job','marital','education','default','housing','loan','contact','campaign','previous'], axis=1)

#Erfolg('success')Oder andere('non-success')Mapping mit
for i in range(0,len(train_x)):
    if train_x.loc[i,'poutcome']=='success':
        train_x.loc[i,'poutcome']=='success'
    else:
        train_x.loc[i,'poutcome'] = 'non-success'

#Erfolg('success')Oder andere('non-success')Mapping mit
for i in range(0,len(test_x)):
    if test_x.loc[i,'poutcome']=='success':
        test_x.loc[i,'poutcome']=='success'
    else:
        test_x.loc[i,'poutcome'] = 'non-success'

poutcome_mapping = {'non-success': 0, 'success': 1}
train_x['poutcome'] = train_x['poutcome'].map(poutcome_mapping)

poutcome_mapping = {'non-success': 0, 'success': 1}
test_x['poutcome'] = test_x['poutcome'].map(poutcome_mapping)

Maschinelles Lernen, Validierung


#Liste, um die Punktzahl für jede Falte zu speichern
scores_accuracy = []
scores_logloss = []

#Führen Sie eine Kreuzvalidierung durch
#Teilen Sie die Trainingsdaten in vier Teile und verwenden Sie einen davon als Validierungsdaten. Wiederholen Sie diesen Vorgang mit verschiedenen Validierungsdaten.
kf = KFold(n_splits=4, shuffle=True, random_state=71)
for tr_idx, va_idx in kf.split(train_x):
    #Teilen Sie die Trainingsdaten in Trainingsdaten und Validierungsdaten
    tr_x, va_x = train_x.iloc[tr_idx], train_x.iloc[va_idx]
    tr_y, va_y = train_y.iloc[tr_idx], train_y.iloc[va_idx]

    #Trainiere das Modell
    model = XGBClassifier(n_estimators=20, random_state=71)
    model.fit(tr_x, tr_y)

    #Geben Sie den vorhergesagten Wert der Validierungsdaten mit Wahrscheinlichkeit aus
    va_pred = model.predict_proba(va_x)[:, 1]

    #Berechnen Sie die Punktzahl in den Validierungsdaten
    logloss = log_loss(va_y, va_pred)
    accuracy = accuracy_score(va_y, va_pred > 0.5)

    #Speichern Sie die Punktzahl für diese Falte
    scores_logloss.append(logloss)
    scores_accuracy.append(accuracy)

Vorhersageergebnis

logloss

0.2963114082044256

accuracy

0.8852845768209967

xgb.plot_importance(model)

image.png

Erstellen einer Datei zur Übermittlung

pred = model.predict(test_x)
pred_label = np.where(pred > 0.5,1,0)
submission = pd.DataFrame({'id': test['id'], 'y': pred_label})
submission.to_csv('submission_first.csv', index=False, header=None)

Bei SIGNATE einreichen

Ich habe verschiedene Dinge getan, aber es sind immer noch nicht 70% ... Was ist los ... image.png

Recommended Posts

[SIGNATE] Bankkunden-Targeting @ Learning
SIGNATE [1st _Beginner Limited Competition] Teilnahme am Bankkunden-Targeting
SIGNATE [1st _Beginner Limited Competition] Lösen von Bankkunden-Targeting