[PYTHON] Prédire la valeur par défaut des cartes de crédit Ingénierie de la quantité de fonctionnalités

Article précédent

Veuillez jeter un œil au contenu précédent! https://qiita.com/lindq_yu/items/4f8e3e1d28df0c693d4f

Ingénierie de la quantité de fonctionnalités

Confirmation de la nature des données lors de la conception de la quantité d'objets. Ces données sont PAY_AMT, BILL_AMT, AGE, LIMIT BAL sont des données numériques Données de catégorie pour SEXE, MARIAGE, ÉDUCATION PAY a des variables catégoriques telles que le paiement renouvelable, le paiement était possible et n'était pas possible, mais il existe des valeurs numériques dans lesquelles le mois de retard est de 1 mois, 2 mois, 3 mois, etc.

Je souhaite traiter ces données fermement.

Données de catégorie

Il existe plusieurs méthodes pour l'ingénierie de la quantité de caractéristiques des variables catégorielles, mais le codage One-hot typique est utilisé.

Dans l'explication de ces données, il n'y a pas de données «0» dans ÉDUCATION et MARIAGE, mais c'est dans cet ensemble de données. EDUCATION

5 et 6 sont inconnus. À l'origine, ces deux semblent avoir une signification inconnue. Pour les situations professionnelles (je ne sais pas vraiment parce que je suis étudiant ...), je peux demander à la personne en charge de la saisie, au créateur du questionnaire et au créateur du jeu de données, mais je ne sais pas cette fois, donc j'inclus unkown et "0". Et correspondre avec d'autres (car il n'y a que 14 "0" données)

MARRIGE

Cet item a également 3 comme autres, ce qui est une question qui peut inclure des implications. Normalement, c'est aussi quelque chose à vérifier avec le responsable, mais malheureusement cela ne peut pas être fait, donc "0" sera inclus dans les autres.

Traitez l'ensemble de données en fonction de ce qui précède.

↓ Description du jeu de données image.png

python


#Extraction de données
category=dataset.loc[:,["SEX","MARRIAGE","EDUCATION"]]

#Compter le nombre d'apparitions de SEXE
#print("SEX value count")
#print(category["SEX"].value_counts())
#print("")

#Compter le nombre d'apparitions de MARIAGE
#print("MARRIAGE value count")
#print(category["MARRIAGE"].value_counts())
#print("")

#Compter le nombre d'apparitions de EDUCATION
#print("EDUCATION")
#print(category["EDUCATION"].value_counts())

#MARIAGE"0" -unknown-À"3" -others-Conversion en
category["MARRIAGE"] = category["MARRIAGE"].replace(0,3)

#ÉDUCATION"0" -unknown- ,"5" -unknown- ,"6" -unknown-À"3" -others-Conversion en
category["EDUCATION"] = category["EDUCATION"].replace(0,4)
category["EDUCATION"] = category["EDUCATION"].replace(5,4)
category["EDUCATION"] = category["EDUCATION"].replace(6,4)

#Confirmation de catégorie
category

Cliquez ici pour le résultat converti ↓ image.png

onehot_category Convertissez cette variable catégorielle en données à l'aide de onehot_category.

python


from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(categories="auto", sparse=False, dtype=np.float32)
onehot_X = enc.fit_transform(category)
onehot_category= pd.DataFrame(data = onehot_X,columns = ["male","female","graduate school","university", "high school", "EDU-others","married", "single","MARR-others"])
onehot_category

Conversion terminée! image.png

Donnees numeriques

Les données numériques ne doivent pas être modifiées. Les données numériques ont également une conversion, mais il existe des modèles avec une précision plus élevée si ce n'est pas le cas, alors laissez-le pour le moment.

PAY

Catégorie

--Revo count (Revo)

Valeur continue

--Nombre de mois que vous ne pouvez pas payer

Créez des variables pour le nombre de revos (Revo), le nombre de fois que vous avez payé avec succès (pourrait), le nombre de fois que vous n'avez pas pu payer (impossible) et le nombre de fois que vous n'avez pas payé (pas) À la valeur continue, 0 est remplacé, en supposant qu'il n'y a pas de retard dans le mois où le paiement renouvelable et le paiement ont été effectués sans paiement. Conçu de sorte que la valeur restante soit le nombre de mois retardés.

python


l = []
for i in range(1,7):
    l.append("PAY_" + str(i))

PAY=dataset.loc[:,l]

PAY["Revo"] = PAY[PAY == 0].count(1)
PAY["Could"] = PAY[PAY == -1].count(1)
PAY["Not"] = PAY[PAY == -2].count(1)
PAY["Could not"] =6-PAY["Not"]-PAY["Could"]-PAY["Revo"]


for i in l:
    PAY[i] = PAY[i].replace(-1,0)
    PAY[i] = PAY[i].replace(-2,0)

image.png

Achevée!

Fusion d'ensembles de données

La variable créée. Fusionner les variables ajustées

python


#Donnees numeriques
l = []
l.append("AGE")
l.append("LIMIT_BAL")
for i in range(1,7):
    l.append("PAY_AMT" + str(i))
for i in range(1,7):
    l.append("BILL_AMT" + str(i))

merge_data = dataset.loc[:,l]

#Données de catégorie
merge_data = merge_data.join(onehot_category)
#PAY
merge_data = merge_data.join(PAY)

merge_data

Jusqu'à présent, nous avons fait de l'ingénierie de la quantité d'objets. La prochaine fois, j'aimerais le mettre dans un modèle d'apprentissage automatique!

Recommended Posts

Prédire la valeur par défaut des cartes de crédit Ingénierie de la quantité de fonctionnalités
Note sur «l'ingénierie des fonctionnalités» de HJvanVeen