Häufigkeitsverteilung von Artikelkombinationen

Fragen, die sich auf kein spezielles Verfahren beziehen.

Häufigkeitsverteilung von Artikelkombinationen

Beitragvon stolph » Di 28. Jun 2016, 18:37

Hallo zusammen,

ich habe ein - so glaube ich - relativ triviales Problem.
Ich habe einen Datensatz (ca. 200.000 Zeilen), der aus einer Spalte mit Transaktionsnummern (Auftragsnummern) und einer Spalte mit Artikelnummern besteht.
Aufgrund von Aufträgen, die über mehrere Artikelpositionen verfügen stehen in der linken Spalte logischerweise mehrfach die gleichen Nummern.

Was möchte ich in Erfahrung bringen?
Welche Artikel werden am häufigsten in Kombination gekauft?

Ich möchte keine Assoziationsregeln aufstellen - also keine Konfidenzintervalle, Support, Lift, pipapo.
Ich möchte auch zunächst die Anzahl der gekauften Artikel pro Auftrag vernachlässigen.
Ich möchte einfach eine Übersicht in die Richtung...

Artikelkombination

a - b 80
a - b - c 45
a - b - d 35
.
.
.

Wie kann ich eine solche "Artikel-Kombination-Häufigkeitsverteilung" erzielen?
Per Excel ginge das sicherlich, allerdings mit enormen Aufwand - gibt es hier ein einfacheres Verfahren?

Viele Grüße,

Philipp
stolph
Grünschnabel
Grünschnabel
 
Beiträge: 6
Registriert: Mo 27. Jun 2016, 20:32
Danke gegeben: 1
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsverteilung von Artikelkombinationen

Beitragvon strukturmarionette » Di 28. Jun 2016, 23:27

Hi,

Per Excel ginge das sicherlich, allerdings mit enormen Aufwand - gibt es hier ein einfacheres Verfahren?

- Excel ist doch kein Verfahren.
- Gewiss ließe sich sowas flott per alter Programmiersprahc COBOL (Common Business Orientated Language) programmieren
- Kannst mal schauen, ob es noch (freie) Compiler für COBOL noch gibt
- Das kann aber auch C oder Pascal

Gruß
S.
strukturmarionette
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 4353
Registriert: Fr 17. Jun 2011, 22:15
Danke gegeben: 32
Danke bekommen: 586 mal in 583 Posts

Re: Häufigkeitsverteilung von Artikelkombinationen

Beitragvon stolph » Mi 29. Jun 2016, 14:03

Hallo,

vielen Dank schonmal für den Input.
Auf R hatte ich spekuliert. Ich habe mich schon an Assoziationsanalysen mit R bzw. Rattle probiert.
Das "Problem" hier war, dass ich - was in der Natur der Sache liegt - Kennzahlen definieren muss (Support, Kofidenz)
um Assoziationsregeln abzuleiten. Ich möchte aber keine Regeln definieren bzw. entdecken, sonder eine
Übersicht aller Kombinationen mit deren Häufigkeit. Sofern ich bei "Support" eine 0 eintrage hängt sich RStudio auf
(da er zu viele Regeln findet?!?).

Hast du evtl eine Alternativlösung für mich mit R?

Viele Grüße,

Philipp
stolph
Grünschnabel
Grünschnabel
 
Beiträge: 6
Registriert: Mo 27. Jun 2016, 20:32
Danke gegeben: 1
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsverteilung von Artikelkombinationen

Beitragvon bele » Mi 29. Jun 2016, 14:42

Wie soll man Dir eine R Lösung programmieren, wenn Du noch nicht mal verraten hast, in welcher Form die Daten genau vorliegen. Da zäumt das Pferd von hinten auf. Bitte gib eine genaue Beschreibung, wie die Daten aussehen, am besten ein funktionierendes Minimalbeispiel wie hier erklärt: http://forum.r-statistik.de/viewtopic.p ... 920#p16347

Und eine präzise Vorstellung davon, was Du genau über die Daten wissen willst. Geht es tatsächlich um eine Liste aller Kombinationen oder möchtest Du eigentlich zu jedem Artikel die erfragen, die am häufigsten damit gekauft wurden oder was ist genau das Ziel? Warum willst Du "zunächst" die Anzahl der gekauften Artikel vernachlässigen? Damit Dir jemand etwas programmiert und Du danach dann doch mit einer veränderten Anfrage um die Ecke kommst? Das ist jetzt nicht böse gemeint, aber es stehen schlechte Erfahrungen dahinter.

Ach ja, 200.000 Zeilen sind das eine. Wieviele Artikel oder Artikelkombinationen muss man denn da erwarten? 10, 1000, 50.000 Artikel? Kann man einfach drauf los programmieren oder entpuppt sich das als Kombinatorikaufgabe für einen Großrechner?

LG,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 5920
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 16
Danke bekommen: 1401 mal in 1387 Posts

Re: Häufigkeitsverteilung von Artikelkombinationen

Beitragvon stolph » Mi 29. Jun 2016, 21:57

Da gebe ich dir vollkommen recht, sorry, ich hätte mich gleich deutlicher ausdrücken sollen.
Mein Datensatz ist dem angehängten Sample sehr ähnlich. In diesem Sample sind 16.502 Aufträge enthalten (eindeutiger Identifikator Auftragsnummer), denen 8.857 einzigartige Artikel (eindeutiger Identifikator Artikelnummer) zugeordnet sind.

Bsp: Der Artikel 6527670 ist in 212 Auftragsnummern enthalten.
Frage: Welche Artikel treten mit dem 6527670 am häufigsten in Kombination auf (innerhalb einer Auftragsnummer)?
Bzgl. der "geht es tatsächlich um eine Liste aller Kombinationen"-Anmerkung eine naive Frage: Wäre das so rechen-intensiv? (da theoretisch 10.502! Kombinationen auftreten können?!?) ---> bitte nicht falsch verstehen, ich stehe grade etwas auf dem Schlauch bzw. unterschätze womöglich den Aufwand bzw. die Vielfalt der Kombinationsmöglichkeiten...

Bzgl. der "zunächst" die Anzahl der Artikel vernachlässigen-Anmerkung: "zunächst" war überflüssig, die verkaufte Menge interessiert nicht - sondern einzig die Kombination der Artikel, egal in welchem Umfang diese in den Aufträgen enthalten sind.

Ich habe mich bislang an der Assoziationsanalyse und dem apriori-Algorithmus probiert:

library(arules)
sample_data <- read.transactions(file='sample_data.csv', rm.duplicates=T, format='single', sep=',', cols=c(1,2))
rules <- apriori(sales_data, parameter = list(supp = 0.002, conf = 0.5)
inspect(rules)

Mit supp und conf habe ich eifrig rumgespielt, kam aber nie zu einem wirklich zufrieden stellenden Ergebnis - gleiches
per Rattle. Darüber hinaus hab ich nicht herausbekommen wie ich bei dem Vorgehen einen spezifischen Artikel in den Fokus
stellen kann (Target: 6527670).

Hast du da einen Hinweis für mich - vll. ist die Assoziationsanalyse in diesem Fall auch garnicht wirklich zielführend.

Viele Grüße,

Philipp

Ich kann leider keinen Dateianhang hochladen - hat jemand einen Tipp?
stolph
Grünschnabel
Grünschnabel
 
Beiträge: 6
Registriert: Mo 27. Jun 2016, 20:32
Danke gegeben: 1
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsverteilung von Artikelkombinationen

Beitragvon bele » Mi 29. Jun 2016, 22:13

Hallo stolph,

stolph hat geschrieben:8.857 einzigartige Artikel (eindeutiger Identifikator Artikelnummer) [...]
unterschätze womöglich den Aufwand bzw. die Vielfalt der Kombinationsmöglichkeiten...


Nehmen wir an, jeder Artikel kann allein, mit einem anderen, mit zwei anderen oder mit drei anderen auftreten, dann sind wir schon bei 8.857 + 8857*8856 + 8857*8856*8855 + 8857*8856*8855*8854 = möglichen Kombinationen. Bei 5fach-Kombinationen nochmal viel mehr. Die einfach alle durchzuprobieren kommt mit Deinem und meinem Rechner nicht in Frage. Hätte ja sein können, dass es nur um eine begrenzte Zahl von denkbaren Kombinationen geht, dann hätte man vielleicht etwas weniger Grips in den Auswertealgorithmus stecken müssen. Wir haben ja eine Obergrenze bei 200.000 Zeilen und damit höchstens ebensovielen Kombinationen. Das wird sich schon machen lassen.


Frage: Welche Artikel treten mit dem 6527670 am häufigsten in Kombination auf


Das wäre eventuell wieder eine andere Fragestellung als die nach der Liste aller möglichen Kombinationen. Da könnte ich mir jetzt vorstellen, dass man eine Matrix abliefert, in der zu jedem Artikel die Gemeinsamkeitshäufigkeit mit jedem anderen Artikel zählt. Du bist Dir sicher, dass Du eine Liste aller 3er, 4er, 5er-Kombinationen haben willst und nicht nur die Liste der Paarhäufigkeiten?

Darüber hinaus hab ich nicht herausbekommen wie ich bei dem Vorgehen einen spezifischen Artikel in den Fokus
stellen kann (Target: 6527670).

Was wäre denn nützlicher für Dich, Eine endlos lange Liste der Kombinationen oder die Möglichkeit, einen einzelnen Artikel abfragen zu können?

Ich kann leider keinen Dateianhang hochladen - hat jemand einen Tipp?

Am besten, Du simulierst Daten wie in dem o. g. Beispiel beschrieben oder Du erfindest ein paar Phantasiedaten im korrekten Format oder Du nutzt einen Hochladedienst wie dropbox. Eine Nachricht an den Admin wäre auch nicht verkehrt, denn in die Falle mit der nicht nutzbaren Hochladefunktion fallen immer wieder Leute. Da hat sich schon seit einiger Zeit nichts getan.

LG,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 5920
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 16
Danke bekommen: 1401 mal in 1387 Posts

Re: Häufigkeitsverteilung von Artikelkombinationen

Beitragvon stolph » Do 30. Jun 2016, 16:26

Hallo bele,

vielen Dank für deine Antwort.

Anbei der Link zur Beispiel-Datei:
https://www.dropbox.com/s/vv5tzian0zl28 ... a.csv?dl=0

bele hat geschrieben:Du bist Dir sicher, dass Du eine Liste aller 3er, 4er, 5er-Kombinationen haben willst und nicht nur die Liste der Paarhäufigkeiten?

In dem vorliegenden Fall würden die Paarhäufigkeiten definitiv ausreichen. Für den Sonderfall wäre es für mich dennoch interessant zu wissen was ich tun muss um auch auf 3er- oder 4er-Kombinationen (absolutes Maximum) zu kommen.

Was wäre denn nützlicher für Dich, Eine endlos lange Liste der Kombinationen oder die Möglichkeit, einen einzelnen Artikel abfragen zu können?

Wieder eine schwierige Frage: Aktuell habe ich etwa 10 Artikel im Fokus - die könnte ich auf die 2. Art der Reihe nach abarbeiten. Bei einem "unbekannten" Datensatz wäre es natürlich von Vorteil, wenn man direkt einen Überblick der am häufigsten (bspw.) paarweise auftretenden Artikel bekommen könnte. Eine endlos lange Liste ist definitiv nicht zielführend. Gibt es in diesem Fall die Möglichkeit die Kombinationsvielfalt zu begrenzen (bspw. mit einer Eingrenzung in die Richtung "die Kombination muss mind. 10x auftreten - alles darunter interessiert nicht"?)

Viele Grüße,

Philipp
stolph
Grünschnabel
Grünschnabel
 
Beiträge: 6
Registriert: Mo 27. Jun 2016, 20:32
Danke gegeben: 1
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsverteilung von Artikelkombinationen

Beitragvon bele » Fr 1. Jul 2016, 12:22

Hallo stolph,

das sind eine ganze Reihe Wünsche, die kann ich jetzt nicht alle für einen Forumspost programmieren. Ich gehe also mal das ursprüngliche Problem an, eine Liste mit allen möglichen Bestellkombinationen und deren Häufigkeit. Vielleicht kannst Du mit diesen Hinweisen und den Zwischenergebnissen den Rest selbst lösen.

Als erstes lesen wir die Daten ein, dafür verwende ich hier choose.files(), da ich nicht weiß, wo auf Deiner Platte die Daten liegen. In Zeile 2 verwende ich tapply um die verschiedenen Aufträge zusammenzufassen und die Artikel je Auftrag zu sortieren. In Zeile drei fasse ich jede Bestellung in einem String zusammen, in dem in eindeutiger Reihenfolge die Artikelnummern mit einem "+" verbunden sind. In Zeile 4 verwende ich die Funktion table(), um zu zählen, welche Kombinationen wie oft vorkommen. In Zeile 5 sortiere ich die häufigsten Kombinationen nach oben:
Code: Alles auswählen
buy <- read.csv2(choose.files())
deals <- lapply(tapply(buy$Artikel, buy$Auftragsnr., c), sort)
deals.strings <- lapply(deals, function(x) paste0(x, collapse="+"))
t <- table(unlist(deals.strings))
sorted.t <- sort(t, decreasing = TRUE)


Die 30 häufigsten Kombinationen mit ihren jeweiligen Häufigkeiten kannst Du zum Beispiel so ausgeben:
Code: Alles auswählen
> print(sorted.t[1:30])

6527670+6790904 3622032+6790904 4750019+6790904 6688859+6790904 6790904+6858826
            133              99              77              60              48
6790904+6839946 6782292+6790904 6790904+7108512 4438992+6790904 4677894+6790904
             47              46              38              36              35
6790904+6826655 6790904+7084034  220471+6790904 4704576+6790904 6383805+6790904
             33              30              28              28              28
5648790+6790904 5893569+6790904 6433750+6790904 6489652+6790904 4538569+6790904
             27              27              27              27              26
6790904+6973220 5783759+6790904 6169596+6790904 6192783+6790904 6566608+6790904
             24              23              23              23              23
6790904+7090840 6790904+7132540 3112726+6790904 3114478+6790904 4677895+6790904
             23              23              22              22              22
>


Wieviele Bestellkombinationen gibt es?
Code: Alles auswählen
> length(t)
[1] 9954


Eine Liste der Kombinationen, die mindestens 10 Mal auftreten:
Code: Alles auswählen
min10times <- sorted.t[sorted.t>=10]
length(min10times)

Davon gibt es im Beispieldatensatz 149.

Viel Spaß damit,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 5920
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 16
Danke bekommen: 1401 mal in 1387 Posts

folgende User möchten sich bei bele bedanken:
stolph

Re: Häufigkeitsverteilung von Artikelkombinationen

Beitragvon stolph » Do 7. Jul 2016, 10:19

Hallo bele,

vielen, vielen Dank für deine Mühe. Das hilft mir wirklich weiter.
Ich habe anhand deines Codes verschiedene Dinge ausprobiert und mit unterschiedlichen Daten experimentiert.
An einem grundsätzlichen Verständnisproblem scheitere ich im Moment noch:
bele hat geschrieben:Die 30 häufigsten Kombinationen mit ihren jeweiligen Häufigkeiten kannst Du zum Beispiel so ausgeben:
Code: Alles auswählen
> print(sorted.t[1:30])

6527670+6790904 3622032+6790904 4750019+6790904 6688859+6790904 6790904+6858826
            133              99              77              60              48
6790904+6839946 6782292+6790904 6790904+7108512 4438992+6790904 4677894+6790904
             47              46              38              36              35
6790904+6826655 6790904+7084034  220471+6790904 4704576+6790904 6383805+6790904
             33              30              28              28              28
5648790+6790904 5893569+6790904 6433750+6790904 6489652+6790904 4538569+6790904
             27              27              27              27              26
6790904+6973220 5783759+6790904 6169596+6790904 6192783+6790904 6566608+6790904
             24              23              23              23              23
6790904+7090840 6790904+7132540 3112726+6790904 3114478+6790904 4677895+6790904
             23              23              22              22              22
>


Die häufigste Kombination ist in diesem Fall "6527670+6790904".
Falls in der Häufigkeitsverteilung noch die Kombination "6527670+6790904+XYZ" vorkommen würde - ist die Häufigkeit der "6527670+6790904+XYZ"
dann in der "6527670+6790904" enthalten?

Viele Grüße,

Philipp
stolph
Grünschnabel
Grünschnabel
 
Beiträge: 6
Registriert: Mo 27. Jun 2016, 20:32
Danke gegeben: 1
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsverteilung von Artikelkombinationen

Beitragvon bele » Do 7. Jul 2016, 13:21

Hallo Philipp,

ich dachte schon, Du seist verschwunden. Nein, in diesem Fall ist jede Kombination für sich getrennt betrachtet. Aber mit dieser Frage im Hintergrund verstehst Du jetzt vielleicht besser, warum ich zuvor auf möglichst genauer Klärung der Anforderungen bestanden habe.

Wenn Du alle Kombinationen suchst, in denen "6527670" und "6790904" vorkommen, kannst Du das über subset() und die Stringfunktionen von R finden. An der Stelle musst Du Dich dann ein wenig mit "regulären Ausdrücken" / "regular expressions" beschäftigen und wahrscheinlich wird es etwas einfacher, wenn Du Dir das package "stringr" und darin die Funktion string_detect() anschaust: https://cran.r-project.org/web/packages ... ringr.html

LG,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 5920
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 16
Danke bekommen: 1401 mal in 1387 Posts

Nächste

Zurück zu Allgemeine Fragen

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 10 Gäste