[SIGNATER] J'apprends ce qu'est le machine learning en ciblant les clients des banques.
URL:https://signate.jp/competitions/1
#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 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)
#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)
logloss
0.2963114082044256
accuracy
0.8852845768209967
xgb.plot_importance(model)
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)
J'ai fait diverses choses, mais ce n'est toujours pas 70% ... Qu'est-ce qui ne va pas ...