Der Abtastknoten wird für die Abtastung mit SPSS Modeler verwendet. Ich werde diesen Sampling-Knoten erklären und ihn mit Python-Pandas neu schreiben.
Es gibt zwei Arten von Stichproben: (1) einfache Stichproben und (2) komplexe Stichproben, die Datentrends widerspiegeln. Letztes Mal erklärte ① einfache Stichprobe. Dieses Mal werde ich (2) komplizierte Stichproben erklären.
Führen Sie die folgenden POS-Daten mit ID durch. Wir verwenden ID-angehängte POS-Daten, die aufzeichnen, wer (CUSTID) wann (SDATE) und was (PRODUCTID, L_CLASS-Produkthauptklassifizierung, M_CLASS-Produktmittelklassifizierung) und wie viel (SUBTOTAL) gekauft hat.
Es gibt 28.599 Fälle in 6 Feldern.
Die Zufallsstichprobe ist eine Stichprobenmethode, die Trends in allen Daten widerspiegeln kann, wenn genügend Datensätze vorhanden sind. Einige Daten können jedoch eine große Verzerrung in der Verteilung aufweisen und existieren nur in einem kleinen Anteil. Solche Daten können möglicherweise nicht die Tendenz widerspiegeln, wenn die Anzahl der Proben gering ist.
Betrachten wir zum Beispiel die Verteilung von M_CLASS (Klassifizierung in Produkten) dieser Daten. Die Anzahl der Verkäufe von SHOES01 beträgt das 631-fache, was 2,21% des Gesamtumsatzes entspricht. Es ist also nicht groß.
Betrachtet man die Verteilung von M_CLASS (Klassifizierung im Produkt) als Ergebnis einer Stichprobe von 0,2%, so ist SHOES01 verschwunden. Auch andere Elemente unterscheiden sich von der ursprünglichen Verteilung.
Ursprünglich sollte in einem solchen Fall die Anzahl der Probenahmen erhöht werden. Wenn jedoch keine andere Wahl bleibt, als eine kleine Stichprobe für Verifizierungsdaten usw. zu erstellen, kann eine geschichtete Stichprobe verwendet werden.
Dies ist eine Methode zum separaten Abtasten von Daten für jede Schicht. In diesem Beispiel wird ein Bild für jede mittlere Klassifizierung von M_CLASS (Klassifizierung in Produkten) abgetastet.
Eine geschichtete Abtastung wird auch am Abtastknoten durchgeführt. Die Beispielmethode ist "komplex". Geben Sie dann die Stichprobengröße an. Hier wird 0,002 (0,2%) angegeben. Sie können dann Ebenenvariablen angeben, indem Sie auf die Schaltfläche Cluster und Hierarchie klicken. Hier wird M_CLASS (Klassifizierung im Produkt) als geschichtete Variable angegeben.
Zusätzlich wird die Zufalls-Seed-Einstellung überprüft, damit die Probenahme reproduziert werden kann.
Das Ergebnis enthält eine Spalte mit dem Namen SampleWeight, in der die beim Stichproben intern verwendeten Gewichte angegeben werden. Sie können sehen, dass die Werte für jede M_CLASS gleich sind. Dies ist normalerweise nicht erforderlich, sodass Sie es mit dem Filterknoten entfernen können.
Betrachtet man die Verteilung von M_CLASS (Klassifizierung in Produkten) als Ergebnis der Probenahme, so gibt es SHOES01, das in allen Fällen nahe an der ursprünglichen Verteilung liegt.
Beachten Sie, dass SQL-Pushback für Layered Sampling nicht funktioniert. Es wird lila und scheint nach leeren Zeichen in den geschichteten Spalten zu suchen, aber die Stichprobe selbst wurde nicht in SQL konvertiert.
Verwenden Sie die Funktionen groupby und sample, um mit Pandas eine geschichtete Stichprobe zu erhalten. Gruppieren Sie zunächst nach "M_CLASS". group_keys = False ist nicht mehrfach indiziert.
Dann wird eine Zufallsstichprobe von 0,2% mit einer Stichprobe unter Verwendung der Lamda-Formel für jeden Datenblock jeder M_CLASS ausgeführt.
Stratified_df=df.groupby('M_CLASS', group_keys=False)\
.apply(lambda x: x.sample(frac=0.002, random_state = 1))
Gruppiert nach M_CLASS betragen die Daten 0,2%.
Eine weitere Option ist die Verwendung von Stratified Shuffle Split. Dies ist ein Objekt, das beim Trennen von Trainingsdaten und Testdaten eine geschichtete Abtastung durchführt.
Die Stichprobengröße von Trainingsdaten und Testdaten wird durch die Argumente train_size und test_size von StratifiedShuffleSplit bestimmt. random_state ist ein zufälliger Startwert. Da es sich ursprünglich um ein Objekt zum Trennen von Trainingsdaten und Testdaten handelt, müssen train_size und test_size ermittelt werden.
Wenn Sie den Datenrahmen (df) und die Spalte (df ['M_CLASS']) angeben, die Sie mit der Aufteilungsfunktion für die instanziierte Stichprobe schichten möchten, wird der Index (train_, test_) des Datenrahmens der Trainingsdaten und Testdaten zurückgegeben. Von dort aus erstelle ich einen neuen Datenrahmen (StratifiedShuffleSplit_df).
from sklearn.model_selection import StratifiedShuffleSplit
sample = StratifiedShuffleSplit(n_splits = 1,train_size = 0.002,test_size = 0.01, random_state = 1)
for train_,test_ in sample.split(df, df['M_CLASS']):
StratifiedShuffleSplit_ = df.loc[train_]
# chunk_test = df1.loc[test_]
Beim Vergleich der Verteilung von M_CLASS aller Daten, dieser geschichteten Stichprobendaten und einfacher Zufallsstichproben-Daten fehlt SHOES01 in den einfachen Zufallsstichproben-Daten, und die Verteilung aller Daten kann nicht wiedergegeben werden. Ich verstehe.
Die Daten sind diesmal eine Kauftransaktion. Durch zufällige Stichproben aus den gesamten Daten werden die von jedem Kunden gekauften Artikel ausgedünnt. Die Anzahl der Einkäufe und der Kaufbetrag pro Person werden gering sein, und es wird schwierig sein, die Kauftendenz von Menschen zu verstehen, die "oft Schuhe kaufen". Sie können analysieren, was die meistverkauften Produkte in der gesamten Transaktion sind, aber die Daten sind nicht für eine kundenorientierte Analyse geeignet.
Führen Sie in einem solchen Fall eine Cluster-Stichprobe (aggregierte ID-Stichprobe) durch, die auf Kunden-ID-Ebene abgetastet wird. Wenn eine Cluster-Stichprobe durchgeführt wird, wird die Stichprobe anhand der Kunden-ID durchgeführt, und die Transaktion der extrahierten Kunden-ID wird beibehalten, sodass eine Analyse nach Kundenachse möglich ist.
Cluster-Sampling wird auch am Sampling-Knoten durchgeführt. Die Stichprobenmethode ist "Komplex" und die Stichprobengröße wird angegeben. Hier wird 0,1 (10%) angegeben. Klicken Sie dann auf die Schaltfläche Cluster und Hierarchie, um die Variablen anzugeben, die Sie gruppieren möchten. Hier wird CUSTID als Cluster angegeben.
Zusätzlich wird die Zufalls-Seed-Einstellung überprüft, damit die Probenahme reproduziert werden kann.
10% aller CUSTIDs wurden zufällig ausgewählt, die extrahierten CUSTID-Transaktionen wurden gespeichert und 2652 wurden extrahiert. Eine SampleWeight-Spalte wurde ebenfalls hinzugefügt, aber ich glaube nicht, dass sie für komplexe Stichproben verwendet wird.
SQL-Pushback funktioniert jedoch nicht, wenn die Cluster-Abtastung mithilfe der Abtastknotenfunktion durchgeführt wird. Daher wird empfohlen, CUSTID durch Datensatzaggregation und Zufallsstichprobe zu testen und dann erneut mit den Originaldaten zu verbinden.
Erstellen Sie einen eindeutigen Datensatz mit CUSTID in der Datensatzaggregation.
Die Stichprobenmethode ist einfach und es wird ein zufälliger Prozentsatz von 10% angegeben.
Kombinieren Sie dann die Transaktionen aus den Originaldaten.
Diese Methode führt SQL-Pushback durch. RAND (2743707) <1.0000000000000001e-01) ist eine Zufallsstichprobe und WHERE (T0.CUSTID = T1.CUSTID) verbindet die Transaktionen.
[2020-08-12 12:58:45] Vorschau von SQL: SELECT T1.SDATE AS SDATE, T1.PRODUCTID AS PRODUCTID, T1. "L_CLASS" AS "L_CLASS", T1. "M_CLASS" AS "M_CLASS", T1.SUBTOTAL AS SUBTOTAL, T0.CUSTID AS CUSTID FROM (T0.CUSTID AS CUSTID FROM auswählen (T0.CUSTID AS CUSTID FROM SAMPLETRANDEPT4EN2019S T0 GROUP BY T0.CUSTID auswählen) T0 WHERE RAND (2743707) <1.0000000000001 (WÄHLEN SIE T0.CUSTID ALS CUSTID, T0.SDATE ALS SDATE, T0.PRODUCTID ALS PRODUCTID, T0. "L_CLASS" ALS "L_CLASS", T0. "M_CLASS" ALS "M_CLASS", T0.SUBTOTAL ALS SUBTOTAL FROM SAMPLETRANDEPT4EN2019S WO (T0.CUSTID = T1.CUSTID)
Verwenden Sie die Funktionen unique, sample und isin für die Cluster-Stichprobe mit Pandas. Der Vorgang ist der gleiche wie bei Verwendung des Aggregatknotens, des Stichprobenknotens und des Datensatzverbindungsknotens in Modeler.
Erstellen Sie einen Datensatz, der eindeutig ist und eine eindeutige CUSTID hat. Zufallsstichproben werden mit Stichproben durchgeführt. Es werden nur CUSTIDs extrahiert, die aus der ursprünglichen Transaktion mit isin entnommen wurden.
df_custid =pd.Series(df['CUSTID'].unique()).sample(frac=0.1,random_state=1)
df[df['CUSTID'].isin(df_custid)]
Cluster-Sampling kann wie folgt durchgeführt werden.
Die Probe wird unten platziert.
Strom https://github.com/hkwd/200611Modeler2Python/raw/master/sample/sample.str notebook https://github.com/hkwd/200611Modeler2Python/blob/master/sample/sampling.ipynb Daten https://raw.githubusercontent.com/hkwd/200611Modeler2Python/master/data/sampletranDEPT4en2019S.csv
■ Testumgebung Modeler 18.2.1 Windows 10 64bit Python 3.6.9 pandas 0.24.1
Zufallsstichprobe-Wikipedia
https://ja.wikipedia.org/wiki/%E7%84%A1%E4%BD%9C%E7%82%BA%E6%8A%BD%E5%87%BA #% E7% B5% B1% E8% A8% 88% E8% AA% BF% E6% 9F% BB% E3% 81% AB% E3% 81% 8A% E3% 81% 91% E3% 82% 8B% E7% 84% A1% E4% BD% 9C% E7% 82% BA% E6% 8A% BD% E5% 87% BA% E3% 81% AE% E6% 89% 8B% E6% B3% 95
Die Erklärung der geschichteten Extraktionsmethode und der Cluster-Extraktionsmethode ist leicht zu verstehen.
Abtastknoten https://www.ibm.com/support/knowledgecenter/ja/SS3RA7_18.2.1/modeler_mainhelp_client_ddita/clementine/mainwindow_navigationstreamsoutputtab.html
Recommended Posts