SIGNATE Quest war vom letzten Mal an so einfach zu verstehen, dass ich mich für die kostenpflichtige Version angemeldet habe. Das von SIGNATE in Udemy erstellte Video war ebenfalls leicht zu verstehen, aber SIGNATE Quest war systematisiert und noch einfacher zu verstehen.
#Pandas importieren
import pandas as pd
#Daten lesen
df = pd.read_csv('data.csv', index_col='id')
#Dummy-Variable von Daten
df = pd.get_dummies(df)
#Erklärende Variablendaten_Setzen Sie die Zielvariable auf X._Ersatz für y
data_X = df.drop('y', axis=1)
data_y = df['y']
# train_test_Split importieren
from sklearn.model_selection import train_test_split
#Teilen Sie die Daten in Trainingsdaten und Bewertungsdaten
train_X, test_X, train_y, test_y = train_test_split(data_X, data_y, test_size=0.25, random_state=0)
#Anzeige der Anzahl der Zeilen mit erklärenden Variablen der Trainingsdaten
print( train_X.shape[0])
#Anzeige der Anzahl der Zeilen mit erklärenden Variablen der Bewertungsdaten
print( test_X.shape[0])
# roc_auc_Punktzahl importieren
from sklearn.metrics import roc_auc_score
#Anzeige der AUC-Berechnungsergebnisse
#Um die Auswertungsfunktion zu verwenden, können Sie berechnen, indem Sie die Variable angeben, der der Messwert zugeordnet ist, und die Variable, der der vorhergesagte Wert zugeordnet ist.
roc_auc_score(Gemessener Wert,Voraussichtlicher Wert)
print( roc_auc_score([0,0,1], [0,1,1]) )
#Pandas importieren
import pandas as pd
#Daten lesen
df = pd.read_csv('data.csv', index_col='id')
#Dummy-Variable von Daten
df = pd.get_dummies(df)
#Erklärende Variablendaten_Setzen Sie die Zielvariable auf X._Ersatz für y
data_X, data_y = df.drop('y', axis=1), df['y']
# train_test_Split importieren
from sklearn.model_selection import train_test_split
#Teilen Sie die Daten in Trainingsdaten und Bewertungsdaten
train_X, test_X, train_y, test_y = train_test_split(data_X, data_y, test_size=0.25, random_state=0)
#Entscheidungsbaummodell importieren
from sklearn.tree import DecisionTreeClassifier as DT
#Vorbereitung des Entscheidungsbaummodells
tree = DT(max_depth = 2, random_state = 0)
#Lernen des Entscheidungsbaummodells
tree.fit(train_X, train_y)
#Anzeige der Wichtigkeit
print( tree.feature_importances_ )
#Zeigen Sie die Wichtigkeit als Namen an
print( pd.Series(tree.feature_importances_, index=train_X.columns) )
#Prognose der Bewertungsdaten
pred_y1 = tree.predict_proba(test_X)[:,1]
#Messwerttest_y,Vorhersagewert pred_Berechnen Sie die AUC mit y1
auc1 = roc_auc_score(test_y,pred_y1)
#Anzeige der Bewertungsergebnisse
print( auc1 )
#AUC-Berechnung
from sklearn.metrics import roc_auc_score
auc1 = roc_auc_score(test_y, pred_y1)
# roc_Kurve importieren
from sklearn.metrics import roc_curve
#Messwerttest_y und vorhergesagter Wert pred_Berechnung der falsch positiven Rate, der wahr positiven Rate und des Schwellenwerts unter Verwendung von y1
fpr, tpr, thresholds = roc_curve(test_y, pred_y1)
#Erstellen eines Labelnamens
roc_label = 'ROC(AUC={:.2}, max_depth=2)'.format(auc1)
#ROC-Kurve erstellen
plt.plot(fpr, tpr, label=roc_label)
#Diagonale Linien erstellen
plt.plot([0, 1], [0, 1], color='black', linestyle='dashed')
#Titel zum Diagramm hinzufügen
plt.title("ROC")
#Fügen Sie der x-Achse des Diagramms einen Namen hinzu
plt.xlabel('FPR')
#Fügen Sie der y-Achse des Diagramms einen Namen hinzu
plt.ylabel('TPR')
#Festlegen des Anzeigebereichs für die x-Achse
plt.xlim(0, 1)
#Angeben des Anzeigebereichs der y-Achse
plt.ylim(0, 1)
#Anzeige der Legende
plt.legend()
#Grafik anzeigen
plt.show()
#Entscheidungsbaummodell(tree)Bauen
from sklearn.tree import DecisionTreeClassifier as DT
tree = DT(max_depth = 2, random_state = 0)
tree.fit(train_X, train_y)
#Entscheidungsbaum-Zeichnungsbibliothek importieren
from sklearn.tree import export_graphviz
#Ausgabe des Entscheidungsbaumdiagramms
export_graphviz(tree, out_file="tree.dot", feature_names=train_X.columns, class_names=["0","1"], filled=True, rounded=True)
#Anzeige des Entscheidungsbaumdiagramms
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()
#Entscheidungsbaummodell importieren
from sklearn.tree import DecisionTreeClassifier as DT
#Rastersuche importieren
from sklearn.model_selection import GridSearchCV
#Vorbereitung des Entscheidungsbaummodells
tree = DT(random_state=0)
#Parametervorbereitung
parameters = {'max_depth':[2,3,4,5,6,7,8,9,10]}
#Einstellungen für die Rastersuche
gcv = GridSearchCV(tree, parameters , cv=5, scoring='roc_auc', return_train_score=True)
#Führen Sie eine Rastersuche durch
gcv.fit(train_X, train_y)
#Extraktion des Bewertungsergebnisses
train_score = gcv.cv_results_ ['mean_train_score']
test_score = gcv.cv_results_ ['mean_test_score']
# matplotlib.Pyplot als abgekürztes plt importieren
import matplotlib.pyplot as plt
#Zeichnung von Punktzahlen, die anhand der für das Training verwendeten Daten bewertet wurden
plt.plot([2,3,4,5,6,7,8,9,10], train_score, label="train_score")
#Zeichnung von Bewertungen, die anhand von Daten bewertet wurden, die nicht für das Training verwendet wurden
plt.plot([2,3,4,5,6,7,8,9,10], test_score, label="test_score")
#Titel zum Diagramm hinzufügen
plt.title('train_score vs test_score')
#Fügen Sie der x-Achse des Diagramms einen Namen hinzu
plt.xlabel('max_depth')
#Fügen Sie der y-Achse des Diagramms einen Namen hinzu
plt.ylabel('AUC')
#Anzeige der Legende
plt.legend()
#Grafik anzeigen
plt.show()
Es ist ein typisches Überlernphänomen, dass die AUC mit den für das Training verwendeten Daten weiter ansteigt und die AUC mit den nicht für das Training verwendeten Daten fällt.
#Anzeige der optimalen Parameter
print( gcv.best_params_ )
#Erhalten eines Modells, das mit optimalen Parametern trainiert wurde
best_model = gcv.best_estimator_
#Prognose der Bewertungsdaten
pred_y3 = best_model.predict_proba(test_X)[:,1]
#AUC-Berechnung
auc3 = roc_auc_score(test_y, pred_y3)
#AUC-Anzeige
print ( auc3 )
{'max_depth': 6} 0.8631100075115532
Wenn Sie drucken (best_model), wird das folgende Ergebnis zurückgegeben. 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.Pyplot importieren
from matplotlib import pyplot as plt
# roc_Kurve importieren
from sklearn.metrics import roc_curve
#Berechnung der falsch positiven Rate, der wahr positiven Rate, des Schwellenwerts
#Es wird angenommen, dass das Vorhersageergebnis den folgenden Variablen zugeordnet ist.
# pred_y1:max_depth=Vorhersageergebnis in Fall 2
# pred_y2:max_depth=Vorhersageergebnis bei 10
# pred_y3:max_depth=Vorhersageergebnis bei 6
#Die Variablen, denen jeder Rückgabewert zugewiesen ist, sind wie folgt.
# fpr1,tpr1,thresholds1:max_depth=Falsch positive Rate, wahr positive Rate, Schwelle bei 2
# fpr2,tpr2,thresholds2:max_depth=Falsch positive Rate, wahr positive Rate, Schwelle für 10
# fpr3,tpr3,thresholds3:max_depth=Falsch positive Rate, wahr positive Rate, Schwelle für 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)
#Erstellen eines Labelnamens
#Die Variablen, denen jeder Rückgabewert zugewiesen ist, sind wie folgt.
# roc_label1:max_depth=Markenname bei 2
# roc_label2:max_depth=Markenname für 10
# roc_label3:max_depth=Markenname für 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)
#ROC-Kurve erstellen
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))
#Diagonale Linien erstellen
plt.plot([0, 1], [0, 1], color='black', linestyle='dashed')
#Titel zum Diagramm hinzufügen
plt.title("ROC")
#Fügen Sie der x-Achse des Diagramms einen Namen hinzu
plt.xlabel('FPR')
#Fügen Sie der y-Achse des Diagramms einen Namen hinzu
plt.ylabel('TPR')
#Festlegen des Anzeigebereichs für die x-Achse
plt.xlim(0, 1)
#Angeben des Anzeigebereichs der y-Achse
plt.ylim(0, 1)
#Anzeige der Legende
plt.legend()
#Grafik anzeigen
plt.show()
Die ROC-Kurve mit max_depth = 6 zeigt die größte Fläche.
Berechnen Sie anhand des mit den optimalen Parametern erlernten Entscheidungsbaummodells das Vorhersageergebnis der Aufwandmenge der Festgeldkampagne für den den Bewertungsdaten zugeordneten Kunden und erstellen Sie darauf basierend eine Angriffsliste.
#Erstellen einer Kundenliste mit Anwendungsraten
customer_list = pd.DataFrame(index=test_X.index, data={"cvr":pred_y3})
#Berechnung des erwarteten Gewinns
customer_list["return"] = 2000 * customer_list["cvr"]
#Erwartete ROI-Berechnung
customer_list["ROI"] = customer_list["return"] / 300 * 100
#Sortieren nach ROI in absteigender Reihenfolge
sorted_customer_list = customer_list.sort_values("ROI", ascending=False)
#Der ROI beträgt 100%Erstellen einer Angriffsliste, die die oben genannten Kunden-IDs ausschneidet
attack_list = sorted_customer_list[sorted_customer_list["ROI"] >= 100]
#Anzeige der Anzahl der Zeilen und Spalten in der Angriffsliste
print( attack_list.shape )
#Zeigen Sie die ersten 5 Zeilen der Angriffsliste an
print( attack_list.head() )
In dieser Suche lernten wir Klassifizierungsprobleme kennen, von der Datenaufbereitung über die Erstellung von Entscheidungsbaummodellen bis hin zur Parameteroptimierung durch Rastersuche. Dieser Analysefluss ist im Grunde ein sehr wichtiger Prozess, der allen Datenanalysen gemeinsam ist.
Recommended Posts