Schreiben Sie den Sampling-Knoten von SPSS Modeler mit Python (2) neu: Layered Sampling, Cluster Sampling

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.

① Einfache Stichprobe
①-1. Erste N Fälle
①-2. Zufallsstichprobe
② Komplexe Stichprobe ← Dieser Artikel
②-1. Layered Sampling
②-2. Cluster-Abtastung

0. Originale Daten

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. image.png

1m. ②-1. Layered Sampling Modeler-Version

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ß. image.png

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. image.png

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.

image.png

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. image.png

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.

image.png

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.

1p. ②-1. Layered Sampling Pandas Version

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%.

image.png

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.

image.png

2m. ②-2. Cluster Sampling Modeler-Version

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.

image.png

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. image.png

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. image.png

Erstellen Sie einen eindeutigen Datensatz mit CUSTID in der Datensatzaggregation. image.png

Die Stichprobenmethode ist einfach und es wird ein zufälliger Prozentsatz von 10% angegeben.

image.png

Kombinieren Sie dann die Transaktionen aus den Originaldaten. image.png

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)

2p. ②-2. Cluster-Sampling-Pandas-Version

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. image.png

3. Probe

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

4. Referenzinformationen

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

Schreiben Sie den Sampling-Knoten von SPSS Modeler mit Python (2) neu: Layered Sampling, Cluster Sampling
Schreiben Sie den Stichproben-Knoten von SPSS Modeler mit Python neu First: Erste N Fälle, Zufallsstichprobe
Schreiben Sie den Felderstellungsknoten von SPSS Modeler mit Python neu. Merkmalsextraktion aus Zeitreihensensordaten
Ändern Sie die Einstellungen eines Knotens in einem Superknoten mit dem Python-Skript SPSS Modeler
Überprüfen Sie die Existenz der Datei mit Python
[Python3] Schreiben Sie das Codeobjekt der Funktion neu
Schreiben Sie den Filterknoten von SPSS Modeler mit Python neu
Schreiben Sie den Neukonfigurationsknoten von SPSS Modeler mit Python neu. Aggregation nach gekauften Produktkategorien
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor
2016 Todai Mathematik mit Python gelöst
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Überprüfen Sie das Datum der Flaggenpflicht mit Python
Schreiben Sie den Namen des Tags mit dem Namespace in lxml neu
Konvertieren Sie den Zeichencode der Datei mit Python3
[Python] Bestimmen Sie den Typ der Iris mit SVM
Schreiben Sie den doppelten Datensatzknoten von SPSS Modeler mit Python neu. ① Identifizieren Sie den ersten gekauften Artikel. (2) Identifizierung des meistverkauften Artikels in der Produktkategorie
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Lerne Nim mit Python (ab Anfang des Jahres).
Zerstören Sie den Zwischenausdruck der Sweep-Methode mit Python
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
[Python] So schreiben Sie den Tabellenstil mit python-pptx um [python-pptx]
Holen Sie sich mit Python den Betriebsstatus von JR West
Versionsverwaltung von Node, Ruby und Python mit anyenv
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Die Geschichte der Implementierung des Themas Facebook Messenger Bot mit Python
Vereinheitlichen Sie die Umgebung des Python-Entwicklungsteams, beginnend mit Poetry
Visualisieren Sie die Ergebnisse von Entscheidungsbäumen, die mit Python scikit-learn erstellt wurden
Berechnen Sie mit Python Millionen von Stellen in der Quadratwurzel von 2
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Führen Sie die Intelligenz Ihrer eigenen Python-Bibliothek mit VScode aus.
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Berühren wir die API der Netatmo Weather Station mit Python. #Python #Netatmo
Die Geschichte eines Rubinisten, der mit Python :: Dict-Daten mit Pycall kämpft
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Schätzen Sie die Haltung des AR-Markers mit Python + OpenCV + Drohne
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
Auf dem Weg zum Ruhestand von Python2
Rufen Sie die API mit python3 auf.
Über die Funktionen von Python
Die Kraft der Pandas: Python
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
Der 14. März ist der Tag des Umfangsverhältnisses. Die Geschichte der Berechnung des Umfangsverhältnisses mit Python
Die Farbextraktion mit Python + OpenCV löste das Rätsel des grünen Hintergrunds
[Python, Ruby] Selen-Holen Sie sich Webseiteninhalte mit Webdriver
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Geben Sie den Inhalt von ~ .xlsx im Ordner mit Python in HTML aus
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.