Ich habe in den letzten drei Jahren einen Wissenschaftsberater und hatte die Möglichkeit, an mehreren Projekten in verschiedenen Branchen zu arbeiten. Ich bemerkte jedoch einen gemeinsamen Nenner unter den meisten Kunden, mit denen ich gearbeitet habe:
Sie haben selten eine klare Vorstellung vom Projektziel.
Dies ist einer der wichtigsten Hindernisse, mit denen Datenwissenschaftler konfrontiert sind, insbesondere jetzt, wo Gen AI jede Domäne übernimmt.
Nehmen wir jedoch an, dass das Ziel klar wird, nach einigen Hin- und Herzuwaffen klar. Wir haben es geschafft, eine bestimmte Frage zu beantworten. Zum Beispiel:
Ich möchte meine Kunden gemäß ihrer Wahrscheinlichkeit, sich aufzuheben, in zwei Gruppen einteilen: „hohe Wahrscheinlichkeit, sich zu kreieren“ und „geringe Wahrscheinlichkeit, sich zu kämpfen“, um sich zu kreieren. “
Nun, was jetzt? Einfach, lass uns einige Modelle erstellen!
Falsch!
Wenn es selten ist, ein klares Ziel zu haben, ist es zuverlässig Benchmark ist noch seltener.
Meiner Meinung nach ist es einer der wichtigsten Schritte bei der Bereitstellung eines Datenwissenschaftsprojekts darin, eine zu definieren und zuzustimmen Set von Benchmarks mit dem Kunden.
In diesem Weblog -Beitrag werde ich erklären:
- Was für ein Benchmark ist,
- Warum es wichtig ist, einen Benchmark zu haben,
- Wie ich ein Beispielszenario bauen würde und
- Einige potenzielle Nachteile, die man beachten sollte
Was ist ein Benchmark?
A Benchmark ist eine standardisierte Methode zur Bewertung der Leistung eines Modells. Es bietet einen Bezugspunkt, an dem neue Modelle verglichen werden können.
Ein Benchmark benötigt zwei Schlüsselkomponenten, um als vollständig betrachtet zu werden:
- Eine Reihe von Metriken Bewertung der Leistung
- Eine Reihe einfacher Modelle als Baselines verwenden
Das Konzept im Kern ist einfach: Jedes Mal, wenn ich ein neues Modell entwickle, vergleiche ich es mit beiden früheren Versionen und den Basismodellen. Dies stellt sicher, dass die Verbesserungen actual und verfolgt sind.
Es ist wichtig zu verstehen, dass diese Basislinie kein Modell oder datensatzspezifisch sein sollte, sondern eher geschäftsfähige Geschäfte. Es sollte ein allgemeiner Benchmark für einen bestimmten Enterprise Case sein.
Wenn ich auf einen neuen Datensatz mit demselben Geschäftsziel begegne, sollte dieser Benchmark ein zuverlässiger Bezugspunkt sein.
Warum es wichtig ist, einen Benchmark zu bauen
Jetzt, da wir definiert haben, was ein Benchmark ist, lassen Sie uns darauf eingehen, warum ich glaube, dass es sich lohnt, eine zusätzliche Projektwoche für die Entwicklung eines starken Benchmarks zu verbringen.
- Ohne einen Benchmark streben Sie nach Perfektion an – Wenn Sie ohne eindeutigen Bezugspunkt arbeiten, verliert jedes Ergebnis die Bedeutung. „Mein Modell hat eine MAE von 30.000“ Ist das intestine? Idk! Vielleicht würden Sie mit einem einfachen Mittel eine MAE von 25.000 bekommen. Durch Vergleich Ihres Modells mit a GrundlinieSie können beide messen Leistung Und Verbesserung.
- Verbessert die Kommunikation mit Kunden – Kunden und Geschäftsteams verstehen die Standardausgabe eines Modells möglicherweise nicht sofort. Indem sie sie jedoch von Anfang an mit einfachen Baselines einbeziehen, wird es später leichter, Verbesserungen zu demonstrieren. In vielen Fällen können Benchmarks direkt aus dem Geschäft in verschiedenen Formen oder Formen kommen.
- Hilft bei der Modellauswahl – Ein Benchmark gibt a Ausgangspunkt Um mehrere Modelle honest zu vergleichen. Ohne sie können Sie Zeit mit Testmodellen verschwenden, die es nicht wert sind, in Betracht zu ziehen.
- Modelldrifterkennung und Überwachung – Modelle können degradieren im Laufe der Zeit. Durch einen Benchmark können Sie möglicherweise abfangen treibt früh Durch Vergleich neuer Modellausgaben mit früheren Benchmarks und Baselines.
- Konsistenz zwischen verschiedenen Datensätzen – Datensätze entwickeln sich. Durch einen festen Satz von Metriken und Modellen stellen Sie sicher, dass die Leistungsvergleiche im Laufe der Zeit gültig bleiben.
Mit einem klaren Benchmark wird jeder Schritt in der Modellentwicklung bereitstellen Sofortiges Suggestionsden ganzen Prozess mehr machen vorsätzlich und datengetrieben.
Wie ich einen Benchmark bauen würde
Ich hoffe, ich habe Sie davon überzeugt, wie wichtig es ist, einen Benchmark zu haben. Lassen Sie uns jetzt tatsächlich einen bauen.
Beginnen wir mit der geschäftlichen Frage, die wir zu Beginn dieses Weblog -Beitrags vorgestellt haben:
Ich möchte meine Kunden gemäß ihrer Wahrscheinlichkeit, sich aufzuheben, in zwei Gruppen einteilen: „hohe Wahrscheinlichkeit, sich zu kreieren“ und „geringe Wahrscheinlichkeit, sich zu kämpfen“, um sich zu kreieren. “
Der Einfachheit halber werde ich annehmen Keine zusätzlichen Geschäftsbeschränkungen, In realen Szenarien existieren jedoch oft Einschränkungen.
In diesem Beispiel verwende ich Dieser Datensatz (CC0: Public Area). Die Daten enthält einige Attribute aus dem Kundenstamm eines Unternehmens (z. B. Alter, Geschlecht, Anzahl der Produkte,…) sowie deren Abwanderungsstatus.
Jetzt, wo wir etwas haben, an dem wir arbeiten können, lassen Sie uns den Benchmark bauen:
1. Definieren der Metriken
Wir haben es mit einem Abwanderungsnutzungsfall zu tun, insbesondere dies ist a Binärklassifizierungsproblem. Die Hauptmetriken, die wir verwenden könnten, sind additionally:
- Präzision – Prozentsatz der korrekt prognostizierten Ehrings aus allen vorhergesagten Werbemitteln
- Abrufen – Prozentsatz der tatsächlichen Acurer korrekt identifiziert
- F1 -Punktzahl – Gleicht Präzision und Rückruf aus
- Wahre Optimistic, falsche constructive, wahre destructive und falsche Unfavourable
Dies sind einige der „einfachen“ Metriken, die zur Bewertung der Ausgabe eines Modells verwendet werden könnten.
JedochEs ist keine umfassende Liste, Standardmetriken sind nicht immer aus. In vielen Anwendungsfällen kann es nützlich sein, um Bauen Sie benutzerdefinierte Metriken auf.
Nehmen wir an, dass in unserem Enterprise -Fall die Kunden, die als „hohe Wahrscheinlichkeit für die Abwanderung“ bezeichnet werden, werden einen Rabatt angeboten. Dies schafft:
- A kosten (250 US
- A profitieren ($ 1000) Beim Beibehalten eines aufgewühlten Kunden
Nach dieser Definition können wir eine benutzerdefinierte Metrik erstellen, die in unserem Szenario von entscheidender Bedeutung ist:
# Defining the enterprise case-specific reference metric
def financial_gain(y_true, y_pred):
loss_from_fp = np.sum(np.logical_and(y_pred == 1, y_true == 0)) * 250
gain_from_tp = np.sum(np.logical_and(y_pred == 1, y_true == 1)) * 1000
return gain_from_tp - loss_from_fp
Wenn Sie bauen geschäftsbedingte Metriken Diese sind normalerweise am relevantesten. Solche Kennzahlen könnten jede Type oder Type annehmen: finanzielle Ziele, Mindestanforderungen, Prozentsatz der Deckung und mehr.
2. Definieren der Benchmarks
Nachdem wir unsere Metriken definiert haben, können wir eine Reihe von Basismodellen definieren, die als Referenz verwendet werden sollen.
In dieser Part sollten Sie eine Liste von einfach zu Implementmodell in ihrer einfachsten Einrichtung definieren. Es gibt keinen Grund in diesem Zustand, Zeit und Ressourcen für die Optimierung dieser Modelle zu verbringen. Meine Denkweise lautet:
Wenn ich 15 Minuten hätte, wie würde ich dieses Modell implementieren?
In späteren Phasen des Modells können Sie im Verlauf des Projekts Modelle mit den Basismodellen des Projekts hinzufügen.
In diesem Fall werde ich die folgenden Modelle verwenden:
- Zufallsmodell – Weist Beschriftungen zufällig zu
- Mehrheitsmodell – Prognostiziert immer die häufigste Klasse
- Einfacher XGB
- Einfacher Knn
import numpy as np
import xgboost as xgb
from sklearn.neighbors import KNeighborsClassifier
class BinaryMean():
@staticmethod
def run_benchmark(df_train, df_test):
np.random.seed(21)
return np.random.alternative(a=(1, 0), dimension=len(df_test), p=(df_train('y').imply(), 1 - df_train('y').imply()))
class SimpleXbg():
@staticmethod
def run_benchmark(df_train, df_test):
mannequin = xgb.XGBClassifier()
mannequin.match(df_train.select_dtypes(embrace=np.quantity).drop(columns='y'), df_train('y'))
return mannequin.predict(df_test.select_dtypes(embrace=np.quantity).drop(columns='y'))
class MajorityClass():
@staticmethod
def run_benchmark(df_train, df_test):
majority_class = df_train('y').mode()(0)
return np.full(len(df_test), majority_class)
class SimpleKNN():
@staticmethod
def run_benchmark(df_train, df_test):
mannequin = KNeighborsClassifier()
mannequin.match(df_train.select_dtypes(embrace=np.quantity).drop(columns='y'), df_train('y'))
return mannequin.predict(df_test.select_dtypes(embrace=np.quantity).drop(columns='y'))
Auch hier können wir wie bei den Metriken bauen Benutzerdefinierte Benchmarks.
Nehmen wir an, dass in unserem Enterprise -Fall die Das Marketingteam kontaktiert jeden Kunden, der es ist:
- Über 50 Jahre/o Und
- Das heißt nicht mehr aktiv
Nach dieser Regel können wir dieses Modell erstellen:
# Defining the enterprise case-specific benchmark
class BusinessBenchmark():
@staticmethod
def run_benchmark(df_train, df_test):
df = df_test.copy()
df.loc(:,'y_hat') = 0
df.loc((df('IsActiveMember') == 0) & (df('Age') >= 50), 'y_hat') = 1
return df('y_hat')
Den Benchmark ausführen
Um den Benchmark auszuführen, werde ich die folgende Klasse verwenden. Der Einstiegspunkt ist die Methode compare_with_benchmark() In Anbetracht einer Vorhersage wird alle Modelle ausgeführt und alle Metriken berechnet.
import numpy as np
class ChurnBinaryBenchmark():
def __init__(
self,
metrics = (),
benchmark_models = (),
):
self.metrics = metrics
self.benchmark_models = benchmark_models
def compare_pred_with_benchmark(
self,
df_train,
df_test,
my_predictions,
):
output_metrics = {
'Prediction': self._calculate_metrics(df_test('y'), my_predictions)
}
dct_benchmarks = {}
for mannequin in self.benchmark_models:
dct_benchmarks(mannequin.__name__) = mannequin.run_benchmark(df_train = df_train, df_test = df_test)
output_metrics(f'Benchmark - {mannequin.__name__}') = self._calculate_metrics(df_test('y'), dct_benchmarks(mannequin.__name__))
return output_metrics
def _calculate_metrics(self, y_true, y_pred):
return {getattr(func, '__name__', 'Unknown') : func(y_true = y_true, y_pred = y_pred) for func in self.metrics}
Jetzt brauchen wir nur noch eine Vorhersage. In diesem Beispiel habe ich ein schnelles Function -Engineering und einige Hyperparameter -Tuning erstellt.
Der letzte Schritt besteht nur darin, den Benchmark auszuführen:
binary_benchmark = ChurnBinaryBenchmark(
metrics=(f1_score, precision_score, recall_score, tp, tn, fp, fn, financial_gain),
benchmark_models=(BinaryMean, SimpleXbg, MajorityClass, SimpleKNN, BusinessBenchmark)
)
res = binary_benchmark.compare_pred_with_benchmark(
df_train=df_train,
df_test=df_test,
my_predictions=preds,
)
pd.DataFrame(res)

Dies erzeugt a Vergleichstabelle von allen Modellen über alle Metriken hinweg. Mit dieser Tabelle ist es möglich, konkrete Schlussfolgerungen zu den Vorhersagen des Modells zu ziehen und fundierte Entscheidungen über die folgenden Schritte des Prozesses zu treffen.
Einige Nachteile
Wie wir gesehen haben, gibt es viele Gründe, warum es nützlich ist, einen Benchmark zu haben. Obwohl Benchmarks unglaublich nützlich sind, gibt es einige Fallstricke Zu achten auf:
- Nicht-informative Benchmark – Wenn die Metriken oder Modelle schlecht definiert sind, sind die marginalen Auswirkungen eines Benchmarks abgenommen. Definieren Sie immer sinnvolle Basislinien.
- Fehlinterpretation durch Stakeholder – Die Kommunikation mit dem Kunden ist unerlässlich. Es ist wichtig, klar zu sagen, welche Metriken messen. Das beste Modell ist bei allen definierten Metriken möglicherweise nicht das Beste.
- Überanpassung an den Benchmark – Möglicherweise versuchen Sie, zu spezifische Funktionen zu erstellen, die den Benchmark möglicherweise übertreffen, aber nicht intestine in der Vorhersage verallgemeinert werden. Konzentrieren Sie sich nicht darauf, den Benchmark zu schlagen, sondern die bestmögliche Lösung für das Drawback zu erstellen.
- Änderung des Ziels – Die definierten Ziele können sich aufgrund von Missverständnissen oder Änderungen der Pläne ändern. Halten Sie Ihren Benchmark flexibel, damit er sich bei Bedarf anpassen kann.
Letzte Gedanken
Benchmarks liefern Klarheit, stellen sicher, dass Verbesserungen messbar sind und a erstellen gemeinsamer Bezugspunkt zwischen Datenwissenschaftlern und Kunden. Sie helfen zu vermeiden, dass die Falle der Annahme, dass ein Modell ohne Beweise intestine abschneidet, intestine abschneidet und sicherstellen, dass jede Iteration einen echten Wert bringt.
Sie handeln auch als KommunikationsinstrumentErmächtigen Sie es einfacher, den Kunden den Fortschritt zu erklären. Anstatt nur Zahlen zu präsentieren, können Sie klare Vergleiche zeigen, die Verbesserungen hervorheben.
Hier finden Sie ein Notizbuch mit einer vollständigen Implementierung aus diesem Weblog -Beitrag.
