percentile

assess

L'essentiel
Auf einen Blick
Die Optimierung von Machine-Learning-Modellen erfordert präzise Validierungswerkzeuge wie die CAS-Action assess. Diese Funktion ist darauf spezialisiert, die Vorhersagekraft von Klassifizierungs- und Regressionsmodellen durch Kennzahlen wie Lift-Charts und statistische Anpassungstests objektiv messbar zu machen. Für Administratoren und Analysten bietet sie den Vorteil, komplexe Datensätze mittels groupBy-Anweisungen in Teilsegmenten zu prüfen, was eine exakte Qualitätskontrolle ermöglicht. Um Ihnen die Handhabung dieser analytischen Komponente zu erleichtern, bietet dieser Bereich fundierte Antworten auf die am häufigsten gestellten Fragen zur Implementierung und Metriken-Analyse.

Beschreibung

Die Aktion `assess` im `percentile`-Aktionssatz dient zur Bewertung und zum Vergleich von Vorhersagemodellen. Sie ist besonders nützlich für die Evaluierung von Klassifikations- und Regressionsmodellen, indem sie wichtige Leistungsstatistiken wie ROC-Kurven (Receiver Operating Characteristic), Lift-Charts und Anpassungsstatistiken (z. B. Gini-Koeffizient, KS-Statistik, mittlere quadratische Abweichung) berechnet. Dies ermöglicht es Datenanalysten, die Genauigkeit und Vorhersagekraft ihrer Modelle objektiv zu messen und verschiedene Modelle miteinander zu vergleichen, um das leistungsstärkste auszuwählen.

percentile.assess result=<results> status=<rc> / attributes={{name="variable-name", format="string", formattedLength=integer, label="string", nfd=integer, nfl=integer}, ...} binNum=64-bit-integer casOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1", ...}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR"|"INHERIT"|"STANDARD", name="table-name", promote=TRUE|FALSE, replace=TRUE|FALSE, replication=integer, tableRedistUpPolicy="DEFER"|"NOREDIST"|"REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1", ...}} cutStep=double epsilon=double event="string" fitStatOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1", ...}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR"|"INHERIT"|"STANDARD", name="table-name", promote=TRUE|FALSE, replace=TRUE|FALSE, replication=integer, tableRedistUpPolicy="DEFER"|"NOREDIST"|"REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1", ...}} freq="variable-name" groupByLimit=64-bit-integer includeCutoffOne=TRUE|FALSE includeFitStat=TRUE|FALSE includeLift=TRUE|FALSE includeRoc=TRUE|FALSE includeZeroDepth=TRUE|FALSE inputs={{name="variable-name", format="string", formattedLength=integer, label="string", nfd=integer, nfl=integer}, ...} maxIters=integer method="EXACT"|"ITERATIVE" nBins=integer noMissingTarget=TRUE|FALSE partition=TRUE|FALSE partKey={"string-1", ...} pEvent={"string-1", ...} pResponse="variable-name" pVar={"variable-name-1", ...} response="variable-name" responseFmt="string" rocOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1", ...}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR"|"INHERIT"|"STANDARD", name="table-name", promote=TRUE|FALSE, replace=TRUE|FALSE, replication=integer, tableRedistUpPolicy="DEFER"|"NOREDIST"|"REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1", ...}} table={caslib="string", computedOnDemand=TRUE|FALSE, computedVars={{...}}, computedVarsProgram="string", dataSourceOptions={{...}}, groupBy={{...}}, groupByMode="NOSORT"|"REDISTRIBUTE", importOptions={{...}}, name="table-name", orderBy={{...}}, singlePass=TRUE|FALSE, where="where-expression", whereTable={{...}}} useRawPResponse=TRUE|FALSE userCutoff=double weight="variable-name";
Einstellungen
ParameterBeschreibung
attributes Gibt temporäre Attribute an, wie z. B. ein Format, das auf Eingabevariablen angewendet werden soll.
binNum Anzahl der Bins in einem Drei-Durchlauf-Verfahren.
casOut Gibt die Ausgabetabelle für Lift-Statistiken an.
cutStep Gibt die Schrittweite für die ROC-Berechnungen an. Standard ist 0.01.
epsilon Gibt die Toleranz an, die zur Bestimmung der Konvergenz des iterativen Algorithmus für die Perzentilberechnung verwendet wird. Standard ist 1E-05.
event Gibt den formatierten Wert der Antwortvariablen an, der das Ereignis darstellt. Erforderlich für Klassifikationsmodelle.
fitStatOut Gibt die Ausgabetabelle für die Anpassungsstatistiken an.
freq Gibt die Variable an, die die Häufigkeit einer Beobachtung enthält.
groupByLimit Gibt die maximale Anzahl von Stufen in einer Gruppierungsmenge an, um die Erstellung sehr großer Ergebnismengen zu vermeiden.
includeCutoffOne Wenn auf TRUE gesetzt, wird eine Zeile für cutoff=1 in die ROC-Statistiken aufgenommen, um das Zeichnen der ROC-Kurve zu vereinfachen. Standard ist FALSE.
includeFitStat Wenn auf FALSE gesetzt, werden die Anpassungsstatistiken nicht generiert. Standard ist TRUE.
includeLift Wenn auf FALSE gesetzt, werden die Lift-Berechnungen nicht generiert. Standard ist TRUE.
includeRoc Wenn auf FALSE gesetzt, werden die ROC-Berechnungen nicht generiert. Standard ist TRUE.
includeZeroDepth Wenn auf TRUE gesetzt, wird eine Zeile für depth=0 in die Lift-Statistiken aufgenommen, um das Zeichnen der Lift-Kurve zu vereinfachen. Standard ist FALSE.
inputs Gibt die Eingabevariablen an, die in der Analyse verwendet werden sollen. Dies sind typischerweise die vorhergesagten Wahrscheinlichkeiten oder Werte des Modells.
maxIters Gibt die maximale Anzahl von Iterationen für den iterativen Algorithmus an.
method Gibt den Algorithmus für die Perzentilanalyse an. 'ITERATIVE' ist der Standard, 'EXACT' ist ressourcenintensiver.
nBins Gibt die Anzahl der Bins an, die für die Lift-Berechnungen verwendet werden sollen. Standard ist 20.
noMissingTarget Wenn auf TRUE gesetzt, werden Beobachtungen ausgeschlossen, bei denen die Zielvariable einen fehlenden Wert hat. Standard ist FALSE.
partition Wenn auf TRUE gesetzt und die Tabelle partitioniert ist, werden die Ergebnisse für jede Partition effizient berechnet.
partKey Gibt einen Partitionsschlüssel an, um die Ergebnisse für eine einzelne Partition zu berechnen, wenn die Tabelle partitioniert ist.
pEvent Gibt die Ereignisse an, die jeder Wahrscheinlichkeitsvariable im `pVar`-Parameter entsprechen.
pResponse Gibt die vorhergesagte Antwortvariable für die Modellbewertung an.
pVar Gibt die Ereigniswahrscheinlichkeitsvariablen an, die bewertet werden sollen.
response Gibt die Antwortvariable (tatsächlicher Wert) für die Modellbewertung an. Dieser Parameter ist erforderlich.
responseFmt Gibt ein temporäres Format für die Antwortvariable an, um das im `event`-Parameter angegebene Ereignis zu erzeugen.
rocOut Gibt die Ausgabetabelle für die ROC-Berechnungen an.
table Gibt die Eingabetabelle an, die die Antwortvariable und die vorhergesagten Werte enthält. Dieser Parameter ist erforderlich.
useRawPResponse Wenn auf TRUE gesetzt, werden Rohwerte der vorhergesagten Antwortvariablen verwendet, um die Beobachtungen zu filtern. Standard ist FALSE.
userCutoff Vom Benutzer angegebener Schwellenwert für die Konfusionsmatrix.
weight Gibt die Variable an, die die Gewichtung einer Beobachtung enthält.
Datenerstellung für die Modellbewertung

Dieser Code erstellt eine Tabelle `hmeq_assessed` in der `mycas` CAS-Bibliothek. Er verwendet die `sampsio.hmeq`-Tabelle als Basis und fügt eine simulierte Vorhersagewahrscheinlichkeit `P_BAD1` für das Ereignis hinzu, dass ein Kredit schlecht ist (`BAD` = 1). Diese Tabelle wird in den folgenden Beispielen zur Bewertung der Modellleistung verwendet.

Kopiert!
1DATA mycas.hmeq_assessed;
2 SET sampsio.hmeq;
3 /* Simulieren einer vorhergesagten Wahrscheinlichkeit */
4 P_BAD1 = rand('UNIFORM');
5RUN;

Beispiele

Dies ist ein grundlegendes Beispiel zur Bewertung eines Klassifikationsmodells. Es verwendet die `assess`-Aktion, um Lift- und ROC-Informationen für die Antwortvariable `BAD` und die vorhergesagte Wahrscheinlichkeit `P_BAD1` zu berechnen. Das Ereignis von Interesse ist, wenn `BAD` den Wert '1' hat. Die Ergebnisse werden in den Tabellen `assess_results` und `roc_results` gespeichert.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 percentile.assess /
3 TABLE={name='hmeq_assessed'},
4 response='BAD',
5 inputs={{name='P_BAD1'}},
6 event='1',
7 casOut={name='assess_results', replace=true},
8 rocOut={name='roc_results', replace=true};
9RUN;
Ergebnis :
Die Aktion generiert zwei Ausgabetabellen in CAS: `assess_results`, die Lift-Chart-Statistiken enthält, und `roc_results`, die die Datenpunkte für die ROC-Kurve enthält. Zusätzlich werden die Anpassungsstatistiken (wie Gini, KS usw.) im SAS-Log ausgegeben.

Dieses Beispiel zeigt, wie ein Regressionsmodell bewertet wird, bei dem die Zielvariable (`LOAN`) intervallbasiert ist. Es wird eine simulierte Vorhersage `P_LOAN` erstellt. Da der `event`-Parameter weggelassen wird, führt die Aktion eine Regressionsbewertung durch und gibt Anpassungsstatistiken wie die mittlere quadratische Abweichung (ASE) aus.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1/* Erstellen von Regressionsdaten mit einer Vorhersage */
2DATA mycas.hmeq_regression;
3 SET sampsio.hmeq;
4 P_LOAN = LOAN * (0.8 + rand('UNIFORM') * 0.4);
5 IF missing(loan) or missing(P_LOAN) THEN delete;
6RUN;
7 
8/* Bewertung des Regressionsmodells */
9PROC CAS;
10 percentile.assess /
11 TABLE={name='hmeq_regression'},
12 response='LOAN',
13 inputs={{name='P_LOAN'}},
14 fitStatOut={name='regression_fit_stats', replace=true};
15RUN;
Ergebnis :
Die Aktion erstellt eine Ausgabetabelle `regression_fit_stats`, die Anpassungsstatistiken für Regressionsmodelle enthält, wie z.B. die durchschnittliche quadratische Abweichung (ASE) und die mittlere absolute Abweichung (MAE). Da es sich um ein Regressionsmodell handelt, werden keine ROC- oder Lift-Tabellen erstellt.

Dieses Beispiel vergleicht die Leistung von zwei verschiedenen Vorhersagemodellen (`P_BAD1` und `P_BAD2`). Durch die Angabe beider Variablen im `inputs`-Parameter berechnet die Aktion die Bewertungsstatistiken für jedes Modell separat, was einen direkten Vergleich ihrer Vorhersagekraft ermöglicht. Die Anpassungsstatistiken werden zur einfachen Analyse in der Tabelle `fit_stats_compare` gespeichert.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1/* Erstellen von Daten mit zwei Modellvorhersagen */
2DATA mycas.hmeq_compare;
3 SET sampsio.hmeq;
4 P_BAD1 = rand('UNIFORM');
5 P_BAD2 = 0.1 + (rand('UNIFORM') * 0.85); /* Zweites, etwas anderes Modell */
6RUN;
7 
8/* Vergleichsbewertung durchführen */
9PROC CAS;
10 percentile.assess /
11 TABLE={name='hmeq_compare'},
12 response='BAD',
13 inputs={{name='P_BAD1'}, {name='P_BAD2'}},
14 event='1',
15 casOut={name='assess_compare_lift', replace=true},
16 rocOut={name='assess_compare_roc', replace=true},
17 fitStatOut={name='fit_stats_compare', replace=true};
18RUN;
Ergebnis :
Erstellt drei Ausgabetabellen: `assess_compare_lift` (Lift-Statistiken), `assess_compare_roc` (ROC-Daten) und `fit_stats_compare`. Die Tabellen enthalten Spalten, die die Ergebnisse nach Modell (`_INPUTVAR_`) aufschlüsseln, was einen direkten Vergleich von Metriken wie dem Gini-Koeffizienten oder der Fläche unter der Kurve (AUC) ermöglicht.

Dieses Beispiel zeigt eine Bewertung, bei der Beobachtungen sowohl gewichtet (`weight`) als auch mit einer Frequenz (`freq`) versehen sind. Dies ist nützlich, wenn einige Beobachtungen wichtiger sind als andere oder wenn die Daten in einem zusammengefassten Format vorliegen. Die `VALUE`-Variable wird als Gewichtung und `YOJ` als Frequenz verwendet.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 percentile.assess /
3 TABLE={name='hmeq_assessed', where='VALUE > 0 and YOJ > 0'},
4 response='BAD',
5 inputs={{name='P_BAD1'}},
6 event='1',
7 weight='VALUE',
8 freq='YOJ',
9 casOut={name='assess_weighted_results', replace=true};
10RUN;
Ergebnis :
Die resultierenden Lift- und ROC-Statistiken in der Tabelle `assess_weighted_results` und im Protokoll werden unter Berücksichtigung der angegebenen Gewichtungen und Frequenzen berechnet, was zu einer anderen Bewertung als bei einer ungewichteten Analyse führt.

FAQ

Was ist der Zweck der `assess`-Aktion im `percentile`-Aktionssatz?
Wie kann ich eine Eingabetabelle für die `assess`-Aktion angeben?
Welche Funktion hat der `event`-Parameter?
Wie kann ich die ROC-Berechnungen in der Ausgabe steuern?
Was ist der Unterschied zwischen den Methoden `EXACT` und `ITERATIVE` für den `method`-Parameter?
Wie kann ich die Lift-Berechnungen anpassen?
Wie gebe ich die vorhergesagten Wahrscheinlichkeitsvariablen für die Bewertung an?

Zugehörige Szenarien

Anwendungsfall
Bewertung eines Kundenansprache-Modells zur Vorhersage der Kampagnen-Conversion

Eine Marketingabteilung möchte ein neues Vorhersagemodell bewerten, das die Wahrscheinlichkeit vorhersagt, mit der Kunden auf eine Werbekampagne reagieren. Ziel ist es, die Leis...

Anwendungsfall
Performance-Vergleich von zwei Kreditrisikomodellen bei großem Datenvolumen mit Gruppierung

Eine Bank muss zwei konkurrierende Modelle zur Vorhersage von Kreditausfällen (ein etabliertes 'Champion'-Modell und ein neues 'Challenger'-Modell) vergleichen. Die Bewertung mu...

Anwendungsfall
Bewertung eines Modells für Maschinenausfälle mit fehlenden Zieldaten und Gewichtung

Ein Industrieunternehmen bewertet ein Modell zur Vorhersage von Maschinenausfällen. Die historischen Daten sind unvollständig; bei einigen Beobachtungen ist der Ausfallstatus (`...