[PYTHON] [SIGNATE] Ciblage des clients de la banque @ apprentissage

[SIGNATER] J'apprends ce qu'est le machine learning en ciblant les clients des banques.

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

travail de préparation

#Importer la bibliothèque utilisée cette fois
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

Lecture de données, prétraitement

#Lecture des données d'entraînement et des données de test
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

#Divisez les données d'entraînement en quantités de caractéristiques et variables objectives
train_x = train.drop(['y'], axis=1)
train_y = train['y']

#Les données de test ne représentent que la quantité de fonctionnalités, vous pouvez donc les laisser telles quelles
test_x = test.copy()

#Exclure l'ID de variable
train_x = train_x.drop(['id'], axis=1)
test_x = test_x.drop(['id'], axis=1)

#Définir un dictionnaire pour la conversion de chaque fonctionnalité
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}

#Convertissez chaque fonctionnalité des données d'entraînement
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)

#Convertissez chaque fonctionnalité des données d'entraînement
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)

#Exclure les variables
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)

#Succès('success')Ou autre('non-success')Cartographie avec
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'

#Succès('success')Ou autre('non-success')Cartographie avec
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)

Apprentissage automatique, validation


#Liste pour stocker le score pour chaque pli
scores_accuracy = []
scores_logloss = []

#Effectuer une validation croisée
#Divisez les données d'entraînement en quatre parties et utilisez l'une d'entre elles comme données de validation, en répétant ce processus avec différentes données de validation.
kf = KFold(n_splits=4, shuffle=True, random_state=71)
for tr_idx, va_idx in kf.split(train_x):
    #Divisez les données d'entraînement en données d'entraînement et données de validation
    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]

    #Former le modèle
    model = XGBClassifier(n_estimators=20, random_state=71)
    model.fit(tr_x, tr_y)

    #Sortie de la valeur prévue des données de validation avec probabilité
    va_pred = model.predict_proba(va_x)[:, 1]

    #Calculer le score dans les données de validation
    logloss = log_loss(va_y, va_pred)
    accuracy = accuracy_score(va_y, va_pred > 0.5)

    #Enregistrez le score pour ce pli
    scores_logloss.append(logloss)
    scores_accuracy.append(accuracy)

Résultat de la prédiction

logloss

0.2963114082044256

accuracy

0.8852845768209967

xgb.plot_importance(model)

image.png

Créer un fichier à soumettre

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)

Soumettre à SIGNATER

J'ai fait diverses choses, mais ce n'est toujours pas 70% ... Qu'est-ce qui ne va pas ... image.png

Recommended Posts

[SIGNATE] Ciblage des clients de la banque @ apprentissage
SIGNATE [1st _Beginner Limited Competition] Participation au ciblage des clients de la banque
SIGNATE [1st _Beginner Limited Competition] Résolution du ciblage des clients bancaires