Dans la continuité de la dernière fois, SIGNATE Quest était si facile à comprendre que je me suis inscrit à la version payante. La vidéo créée par SIGNATE à Udemy était également facile à comprendre, mais SIGNATE Quest était systématisée et encore plus facile à comprendre.
#Importer des pandas
import pandas as pd
#Lire les données
df = pd.read_csv('data.csv', index_col='id')
#Variable fictive de données
df = pd.get_dummies(df)
#Données variables explicatives_Définissez la variable objectif sur X_Remplacez y
data_X = df.drop('y', axis=1)
data_y = df['y']
# train_test_Importer une division
from sklearn.model_selection import train_test_split
#Divisez les données en données d'entraînement et en données d'évaluation
train_X, test_X, train_y, test_y = train_test_split(data_X, data_y, test_size=0.25, random_state=0)
#Affichage du nombre de lignes de variables explicatives des données d'entraînement
print( train_X.shape[0])
#Affichage du nombre de lignes de variables explicatives des données d'évaluation
print( test_X.shape[0])
# roc_auc_Importer le score
from sklearn.metrics import roc_auc_score
#Affichage des résultats des calculs AUC
#Pour utiliser la fonction d'évaluation, vous pouvez calculer en donnant la variable à laquelle la valeur mesurée est affectée et la variable à laquelle la valeur prédite est affectée.
roc_auc_score(La valeur de mesure,Valeur prédite)
print( roc_auc_score([0,0,1], [0,1,1]) )
#Importer des pandas
import pandas as pd
#Lire les données
df = pd.read_csv('data.csv', index_col='id')
#Variable fictive de données
df = pd.get_dummies(df)
#Données variables explicatives_Définissez la variable objectif sur X_Remplacez y
data_X, data_y = df.drop('y', axis=1), df['y']
# train_test_Importer une division
from sklearn.model_selection import train_test_split
#Divisez les données en données d'entraînement et en données d'évaluation
train_X, test_X, train_y, test_y = train_test_split(data_X, data_y, test_size=0.25, random_state=0)
#Importer un modèle d'arbre de décision
from sklearn.tree import DecisionTreeClassifier as DT
#Préparation du modèle d'arbre de décision
tree = DT(max_depth = 2, random_state = 0)
#Apprendre le modèle d'arbre de décision
tree.fit(train_X, train_y)
#Affichage d'importance
print( tree.feature_importances_ )
#Afficher l'importance sous forme de nom
print( pd.Series(tree.feature_importances_, index=train_X.columns) )
#Prévision des données d'évaluation
pred_y1 = tree.predict_proba(test_X)[:,1]
#Test de la valeur mesurée_y,Valeur prédite pred_Calculer AUC en utilisant y1
auc1 = roc_auc_score(test_y,pred_y1)
#Affichage des résultats de l'évaluation
print( auc1 )
#Calcul AUC
from sklearn.metrics import roc_auc_score
auc1 = roc_auc_score(test_y, pred_y1)
# roc_Importer la courbe
from sklearn.metrics import roc_curve
#Test de la valeur mesurée_y et valeur prédite pred_Calcul du taux de faux positifs, taux de vrais positifs, seuil utilisant y1
fpr, tpr, thresholds = roc_curve(test_y, pred_y1)
#Créer un nom d'étiquette
roc_label = 'ROC(AUC={:.2}, max_depth=2)'.format(auc1)
#Création d'une courbe ROC
plt.plot(fpr, tpr, label=roc_label)
#Création de lignes diagonales
plt.plot([0, 1], [0, 1], color='black', linestyle='dashed')
#Ajouter un titre au graphique
plt.title("ROC")
#Ajouter un nom à l'axe des x du graphique
plt.xlabel('FPR')
#Ajouter un nom à l'axe des y du graphique
plt.ylabel('TPR')
#Spécification de la plage d'affichage de l'axe X
plt.xlim(0, 1)
#Spécification de la plage d'affichage de l'axe y
plt.ylim(0, 1)
#Afficher la légende
plt.legend()
#Afficher le graphique
plt.show()
#Déterminer le modèle d'arbre(tree)Construire
from sklearn.tree import DecisionTreeClassifier as DT
tree = DT(max_depth = 2, random_state = 0)
tree.fit(train_X, train_y)
#Importer la bibliothèque de dessins d'arbre de décision
from sklearn.tree import export_graphviz
#Sortie du graphe d'arbre de décision
export_graphviz(tree, out_file="tree.dot", feature_names=train_X.columns, class_names=["0","1"], filled=True, rounded=True)
#Affichage du graphe d'arbre de décision
from matplotlib import pyplot as plt
from PIL import Image
import pydotplus
import io
g = pydotplus.graph_from_dot_file(path="tree.dot")
gg = g.create_png()
img = io.BytesIO(gg)
img2 = Image.open(img)
plt.figure(figsize=(img2.width/100, img2.height/100), dpi=100)
plt.imshow(img2)
plt.axis("off")
plt.show()
#Importer un modèle d'arbre de décision
from sklearn.tree import DecisionTreeClassifier as DT
#Importer la recherche de grille
from sklearn.model_selection import GridSearchCV
#Préparation du modèle d'arbre de décision
tree = DT(random_state=0)
#Préparation des paramètres
parameters = {'max_depth':[2,3,4,5,6,7,8,9,10]}
#Paramètres de recherche de grille
gcv = GridSearchCV(tree, parameters , cv=5, scoring='roc_auc', return_train_score=True)
#Effectuer une recherche de grille
gcv.fit(train_X, train_y)
#Extraction de la note d'évaluation
train_score = gcv.cv_results_ ['mean_train_score']
test_score = gcv.cv_results_ ['mean_test_score']
# matplotlib.Importer pyplot en tant que plt abrégé
import matplotlib.pyplot as plt
#Tirage des scores évalués à partir des données utilisées pour la formation
plt.plot([2,3,4,5,6,7,8,9,10], train_score, label="train_score")
#Tirage des scores évalués à l'aide de données non utilisées pour la formation
plt.plot([2,3,4,5,6,7,8,9,10], test_score, label="test_score")
#Ajouter un titre au graphique
plt.title('train_score vs test_score')
#Ajouter un nom à l'axe des x du graphique
plt.xlabel('max_depth')
#Ajouter un nom à l'axe des y du graphique
plt.ylabel('AUC')
#Afficher la légende
plt.legend()
#Affichage du graphique
plt.show()
C'est un phénomène typique de surapprentissage que l'AUC continue d'augmenter avec les données utilisées pour la formation et l'AUC diminue avec les données non utilisées pour la formation.
#Affichage des paramètres optimaux
print( gcv.best_params_ )
#Acquérir un modèle formé avec des paramètres optimaux
best_model = gcv.best_estimator_
#Prévision des données d'évaluation
pred_y3 = best_model.predict_proba(test_X)[:,1]
#Calcul AUC
auc3 = roc_auc_score(test_y, pred_y3)
#Affichage de l'AUC
print ( auc3 )
{'max_depth': 6} 0.8631100075115532
Si vous imprimez (best_model), le résultat suivant sera renvoyé. DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=6, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=0, splitter='best')
# matplotlib.Importer un pyplot
from matplotlib import pyplot as plt
# roc_Importer la courbe
from sklearn.metrics import roc_curve
#Calcul du taux de faux positifs, du taux de vrais positifs, du seuil
#On suppose que le résultat de la prédiction est affecté aux variables suivantes.
# pred_y1:max_depth=Résultat de la prédiction dans le cas 2
# pred_y2:max_depth=Résultat de la prédiction dans le cas de 10
# pred_y3:max_depth=Résultat de la prédiction dans le cas de 6
#Les variables auxquelles chaque valeur de retour est affectée sont les suivantes.
# fpr1,tpr1,thresholds1:max_depth=Taux de faux positifs, taux de vrais positifs, seuil en cas de 2
# fpr2,tpr2,thresholds2:max_depth=Taux de faux positifs, taux de vrais positifs, seuil pour 10
# fpr3,tpr3,thresholds3:max_depth=Taux de faux positifs, taux de vrais positifs, seuil pour 6
fpr1, tpr1, thresholds1 = roc_curve(test_y, pred_y1)
fpr2, tpr2, thresholds2 = roc_curve(test_y, pred_y2)
fpr3, tpr3, thresholds3 = roc_curve(test_y, pred_y3)
#Créer un nom d'étiquette
#Les variables auxquelles chaque valeur de retour est affectée sont les suivantes.
# roc_label1:max_depth=Nom de l'étiquette en cas de 2
# roc_label2:max_depth=Nom de l'étiquette pour 10
# roc_label3:max_depth=Nom de l'étiquette pour 6
roc_label1 = 'ROC(AUC={:.2}, max_depth=2)'.format(auc1)
roc_label2 = 'ROC(AUC={:.2}, max_depth=10)'.format(auc2)
roc_label3 = 'ROC(AUC={:.2}, max_depth=6)'.format(auc3)
#Création d'une courbe ROC
plt.plot(fpr1, tpr1, label=roc_label1.format(auc1))
plt.plot(fpr2, tpr2, label=roc_label2.format(auc2))
plt.plot(fpr3, tpr3, label=roc_label3.format(auc3))
#Création de lignes diagonales
plt.plot([0, 1], [0, 1], color='black', linestyle='dashed')
#Ajouter un titre au graphique
plt.title("ROC")
#Ajouter un nom à l'axe des x du graphique
plt.xlabel('FPR')
#Ajouter un nom à l'axe des y du graphique
plt.ylabel('TPR')
#Spécification de la plage d'affichage de l'axe X
plt.xlim(0, 1)
#Spécification de la plage d'affichage de l'axe y
plt.ylim(0, 1)
#Afficher la légende
plt.legend()
#Afficher le graphique
plt.show()
La courbe ROC avec max_depth = 6 montre la plus grande surface.
En utilisant le modèle d'arbre de décision appris avec les paramètres optimaux, calculez le résultat de la prédiction du taux d'application de la campagne de dépôt fixe pour le client affecté aux données d'évaluation, et créez une liste d'attaques basée sur celui-ci.
#Création d'une liste de clients incluant les tarifs d'application
customer_list = pd.DataFrame(index=test_X.index, data={"cvr":pred_y3})
#Calcul du bénéfice attendu
customer_list["return"] = 2000 * customer_list["cvr"]
#Calcul du retour sur investissement attendu
customer_list["ROI"] = customer_list["return"] / 300 * 100
#Trier par ROI par ordre décroissant
sorted_customer_list = customer_list.sort_values("ROI", ascending=False)
#Le retour sur investissement est de 100%Création d'une liste d'attaques qui supprime les identifiants clients ci-dessus
attack_list = sorted_customer_list[sorted_customer_list["ROI"] >= 100]
#Affichage du nombre de lignes et de colonnes dans la liste d'attaques
print( attack_list.shape )
#Afficher les 5 premières lignes de la liste des attaques
print( attack_list.head() )
Dans cette quête, nous avons découvert les problèmes de classification, de la préparation des données à la création du modèle d'arbre de décision et au réglage des paramètres par recherche de grille. Ce flux d'analyse est fondamentalement un processus très important qui est commun à toutes les analyses de données.
Recommended Posts