Frage

Ich versuche zu berechnen Artikel zu Artikel Ähnlichkeit entlang der Linien von Amazon „Kunden, die gekauft / X haben auch angesehen / gekauft Y und Z“. Alle Beispiele und Referenzen, die ich habe, sind für Rang Artikel entweder für die Berechnung Artikel Ähnlichkeit gesehen, von Benutzer zu Benutzer Ähnlichkeit für die Suche, oder für auf den aktuellen Benutzer Geschichte basiert Hinweise zu finden. Ich mag mit einem nicht-zielgerichteten Ansatz vor Factoring in den aktuellen Vorlieben der Nutzer beginnen.

auf der Suche Amazon.com Empfehlungen White Paper , sie verwenden sie die folgende Logik für die offline-item-Element Ähnlichkeit:

For each item in product catalog, I1 
  For each customer C who purchased I1
    For each item I2 purchased by customer C
       Record that a customer purchased I1 and I2
  For each item I2 
    Compute the similarity between I1 and I2

Wenn ich durch die Zeit, wir sind auf „Compute similiarty zwischen I1 und I2“ Ich habe eine Liste der Elemente (I2) gekauft in Verbindung mit einem einzigen Wert I1 (die äußere Schleife) richtig verstehen.

Wie wird diese Berechnung durchgeführt?

Eine andere Idee ist, dass ich Grübeln dies und macht es schwieriger, als ich muss - es wäre genug, um eine Top-n-Abfrage auf der Zählung von I2 gekauft in Verbindung mit I1 zu tun?

Ich schätze auch Vorschläge, ob dieser Ansatz ist ein richtiger. Meine Produktdatenbank hat über 150k Artikel zu jeder Zeit. Da die Masse des Lesegut I zeigt Benutzer-Element Ähnlichkeit oder sogar von Benutzer zu Benutzer Ähnlichkeit gesehen habe, sollte ich stattdessen diesen Weg zu gehen suchen zu.

Ich habe mit Ähnlichkeitsalgorithmen in der Vergangenheit gearbeitet, aber sie haben immer einen Rang oder eine Punktzahl beteiligt. Ich denke, der einzige Weg, dies würde funktionieren würde, eine kundenProduktMatrix Scoring 0/1 bauen für nicht gekauft / erworben haben. Angesichts der Kaufhistorie und die Objektgröße, könnte dies wirklich groß werden.

bearbeiten. Obwohl ich Python als Tag aufgelistet, ich würde es vorziehen, die Logik innerhalb eines db zu halten, vorzugsweise unter Verwendung von Oracle PL / SQL

War es hilfreich?

Lösung

Es gibt ein gutes O'Reilly Buch zu diesem Thema. Während das White Paper die Logik heraus in Pseudo-Code wie das legen könnte, glaube ich nicht, dass Ansatz sehr gut skalieren würde. Die Berechnungen sind alle Wahrscheinlichkeitsberechnungen, so Dinge wie Satz von Bayes sagen gewöhnen " gegeben Person ein gekauftes X, was ist die Wahrscheinlichkeit, dass sie gekauft Z?“ Einfacher Looping über die Daten arbeitet zu hart. Sie haben durch sie gehen alle für jede Person.

Andere Tipps

Lassen Sie uns verstehen Artikel-to-Item Collaborative Filtering. nehmen wir an Kauf Matrix

haben
        Item1  Item2 ... ItemN
 User1  0        1   ...  0
 User2  1        1   ...  0 
  .
  .
  .
 UserM  1        0   ...  0

Dann können wir Artikel Ähnlichkeit mit Spaltenvektor, beispiels Verwendung Cosinus berechnen. Wir haben ein Element Ähnlichkeit Symmetrie Matrix wie unten

        Item1  Item2 ... ItemN
 Item1  1       1/M  ...  0
 Item2  1/M     1    ...  0 
  .
  .
  .
 ItemN  0       0    ...  1

Es kann erklärt werden, "Kunden, die gekauft / X haben auch angesehen / gekauft Y, Z, ..." (Collaborative Filtering). Da Vektorisierung des Artikels basiert auf Benutzer-gekauft.

Logik Amazon ist genau das gleiche mit oben, während es das Ziel ist es, verbessern effizient . Wie sie sagte,

  

Wir könnten ein Produkt zu Produkt-Matrix aufzubauen, indem   Iterieren über alle Artikel-Paare und eine Kom- Ahnlichkeitsmetrik puting   für jedes Paar. Allerdings haben viele Produktpaar keine gemeinsamen Kunden,   und damit der Ansatz ist ineffizient in Bezug auf die Verarbeitungszeit und   Speichernutzung. Die iterativen Algorithmus bietet einen besseren Ansatz von   Berechnen der Ähnlichkeit zwischen einem einzelnen prod-UCT und alle damit verbundenen   Produkte

@Neil oder wer auch immer kommt auf diese Frage später:

Die Wahl der Ähnlichkeitsmetrik zu Ihnen und Sie könnten es für die Zukunft formbar verlassen wollen. Überprüfen Sie den Wikipedia-Artikel über Frobenius-Norm heraus für einen Start. Oder wie es in der Verbindung von Ihnen eingereichten, der Jaccard Koeffizient cos(I1,I2).

User-Artikel -vs- von Benutzer zu Benutzer -vs- item-Element, oder was auch immer Kombination, nicht objektiv beantwortet werden. Es hängt davon ab, welche Art von Daten, die Sie von Ihren Benutzern erhalten können, wie die UI-Informationen aus ihnen zieht, welche Teile Ihrer Daten, die Sie für zuverlässig halten, und Ihre eigenen Zeitbeschränkungen (soweit Hybriden gehen).

Da viele Menschen auf die obigen Fragen getan Masterarbeiten haben, möchten Sie wahrscheinlich die einfachste implementierbare Lösung starten, während Zimmer in der Komplexität des Algorithmus für das Wachstum zu verlassen.

Dies kann nicht eine perfekte Antwort auf Ihre Frage, aber eine andere Art und Weise zu sehen, dieses Problem ist Frequent Itemset Bergbau , die alle die häufig co-gekauftes Produkt Paare / Gruppen angegeben eine minimale Frequenzschwelle berechnet. Und Sie können einem Kunden Kauf auf seine häufig Co-gekauften Produkte Karte.

Es gibt kein Modelltraining oder Bayes-Wahrscheinlichkeit Vorhersage-, weil es ein reines mathematisches Problem ist. Nur müssen zusammen Basis in Ihrer Transaktion erworben, die Frequenz aller möglichen Produktpaare zählen. Es ist ein exponentieller Suchraum, aber es gibt viele verschiedene effiziente Algorithmen und Implementierungen da draußen zu verwenden ( SPMF ist eine sehr gute in Java geschrieben). Dies könnte als schnelles Basismodell arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top