Preference Matching Algorithmus

12

An diesem Nebenprojekt arbeite ich, um eine Lösung für das folgende Problem zu finden.

Ich habe zwei Gruppen von Menschen (Kunden). Die Gruppe Abeabsichtigt zu kaufen und die Gruppe Bbeabsichtigt, ein bestimmtes Produkt zu verkaufen X. Das Produkt weist eine Reihe von Attributen auf x_i, und mein Ziel ist es, die Transaktion zwischen Aund Bdurch Abgleichen ihrer Präferenzen zu erleichtern . Die Hauptidee besteht darin, jedes Mitglied Aeines Korrespondenten darauf hinzuweisen, Bdessen Produkt seinen Bedürfnissen besser entspricht, und umgekehrt.

Einige komplizierende Aspekte des Problems:

  1. Die Liste der Attribute ist nicht endlich. Der Käufer ist möglicherweise an einer bestimmten Eigenschaft oder einem bestimmten Design interessiert, was in der Bevölkerung selten vorkommt und ich nicht vorhersagen kann. Zuvor konnten nicht alle Attribute aufgelistet werden.

  2. Attribute können stetig, binär oder nicht quantifizierbar sein (z. B. Preis, Funktionalität, Design).

Haben Sie Vorschläge, wie Sie dieses Problem lösen und automatisieren können?

Ich würde mich auch über Hinweise auf andere ähnliche Probleme freuen, wenn dies möglich ist.


Tolle Vorschläge! Viele Ähnlichkeiten in der Art und Weise, wie ich daran denke, das Problem anzugehen.

Das Hauptproblem bei der Zuordnung der Attribute ist, dass der Detaillierungsgrad, bis zu dem das Produkt beschrieben werden soll, von jedem Käufer abhängt. Nehmen wir ein Beispiel eines Autos. Das Produkt "Auto" hat viele, viele Eigenschaften, die von seiner Leistung, mechanischen Struktur, Preis usw. reichen.

Angenommen, ich möchte nur ein billiges Auto oder ein Elektroauto. Ok, das ist einfach abzubilden, da sie die Hauptmerkmale dieses Produkts darstellen. Nehmen wir zum Beispiel an, ich möchte ein Auto mit Doppelkupplungsgetriebe oder Xenon-Scheinwerfern. Die Datenbank enthält möglicherweise viele Autos mit diesen Attributen, aber ich würde den Verkäufer nicht bitten, diese Detailstufe für sein Produkt einzugeben, bevor die Information vorliegt, dass jemand nach ihnen sucht. Für ein solches Verfahren müsste jeder Verkäufer ein komplexes, sehr detailliertes Formular ausfüllen und nur versuchen, sein Auto auf der Plattform zu verkaufen. Würde einfach nicht funktionieren.

Meine Herausforderung besteht jedoch darin, bei der Suche so detailliert wie möglich zu sein, um eine gute Übereinstimmung zu erzielen. Die Art und Weise, wie ich denke, besteht darin, die Hauptaspekte des Produkts abzubilden, die wahrscheinlich für alle relevant sind, um die Gruppe der potenziellen Verkäufer einzugrenzen.

Der nächste Schritt wäre eine "verfeinerte Suche". Um zu vermeiden, dass ein zu detailliertes Formular erstellt wird, könnte ich Käufer und Verkäufer bitten, einen freien Text ihrer Spezifikation zu verfassen. Verwenden Sie dann einen Wortvergleichsalgorithmus, um mögliche Übereinstimmungen zu finden. Obwohl ich verstehe, dass dies keine richtige Lösung für das Problem ist, weil der Verkäufer nicht „erraten“ kann, was der Käufer braucht. Könnte mich aber näher bringen.

Das vorgeschlagene Gewichtungskriterium ist großartig. Es ermöglicht mir, das Niveau zu quantifizieren, zu dem der Verkäufer den Bedürfnissen des Käufers entspricht. Der Skalierungsteil kann jedoch ein Problem darstellen, da die Wichtigkeit der einzelnen Attribute von Client zu Client unterschiedlich ist. Ich denke darüber nach, eine Art Mustererkennung zu verwenden oder nur den Käufer zu bitten, den Grad der Wichtigkeit jedes Attributs einzugeben.

RD
quelle

Antworten:

9

Mein erster Vorschlag wäre, die nicht quantifizierbaren Attribute mit Hilfe geeigneter Mapping-Funktionen irgendwie auf Größen abzubilden. Ansonsten lassen Sie sie einfach weg.

Zweitens glaube ich nicht, dass Sie davon ausgehen müssen, dass die Liste der Attribute nicht endlich ist. Ein standardmäßiger und intuitiver Ansatz besteht darin, jedes Attribut als einzelne Dimension in einem Vektorraum darzustellen. Jedes Produkt ist dann einfach ein Punkt in diesem Raum. Wenn Sie in diesem Fall dynamisch weitere Attribute hinzufügen möchten, müssen Sie die Produktvektoren lediglich neu in den neuen Merkmalsbereich (mit zusätzlichen Dimensionen) zuordnen.

Bei dieser Darstellung ist ein Verkäufer ein Punkt im Funktionsbereich mit Produktattributen und ein Käufer ist ein Punkt im gleichen Funktionsbereich mit den Präferenzattributen. Die Aufgabe besteht dann darin, den ähnlichsten Käuferpunkt für einen bestimmten Verkäuferpunkt herauszufinden.

Wenn Ihr Datensatz (dh die Anzahl der Käufer / Verkäufer) nicht sehr groß ist, können Sie dies mit einem Ansatz für die nächsten Nachbarn lösen, der mit Hilfe von kd trees implementiert wird.

Bei sehr großen Datenmengen können Sie einen IR-Ansatz wählen. Indizieren Sie die Menge der Verkäufer (dh die Produktattribute), indem Sie jedes Attribut als separaten Begriff behandeln, wobei das Begriffgewicht auf den Attributwert gesetzt wird. Eine Abfrage ist in diesem Fall ein Einkäufer, der auch im Termraum als Abfragevektor mit entsprechenden Termgewichtungen kodiert ist. Der Abrufschritt würde Ihnen eine Liste der K ähnlichsten Übereinstimmungen zurückgeben.

Debasis
quelle
Wright. Das Hauptproblem hierbei ist die Anzahl der Dimensionen, dh der Detaillierungsgrad, den ich verwenden muss. Könnten Sie mir den "IR-Ansatz" erläutern?
RD
1
Mit IR meinte ich Information Retrieval. Sie könnten denken, dass die Dokumente (Verkäufer) in Ihrer Sammlung und die Abfrage (ein Käufer) alle Vektoren sind, die in einen Begriffs- (Attribut-) Raum eingebettet sind. Wie ich bereits sagte, benötigt ein solcher Ansatz eine voreingestellte Anzahl von Dimensionen, mit denen gearbeitet werden kann.
Debasis
7

Wie vorgeschlagen, wild zu werden . Korrigieren Sie mich zuerst, wenn ich falsch liege:

  • Für jedes einzelne Produkt gibt es nur wenige Funktionen.
  • Es gibt keine Liste der ultimativen Funktionen, und Kunden können ihren Produkten neue Funktionen hinzufügen.

In diesem Fall kann die Erstellung einer vollständigen Produktmerkmaltabelle rechenintensiv sein. Und die endgültige Datentabelle wäre äußerst spärlich.

Der erste Schritt besteht darin, die Liste der Kunden (Produkte) für den Abgleich einzuschränken. Bauen wir ein zweigliedriges Diagramm auf, in dem Verkäufer Knoten vom Typ 1 und Käufer Knoten vom Typ 2 sind. Erstellen Sie jedes Mal eine Kante zwischen Verkäufern und Käufern, wenn sie auf ein ähnliches Produktmerkmal verweisen, wie in der folgenden Skizze dargestellt:

Graph

Unter Verwendung der obigen Grafik, für jedes Produkt einzigartige Verkäufer Sie nur Käufer auswählen können , die in Funktionen interessiert sind, die das Produkt passen (es möglich ist , auf Filter mindestens ein gemeinsames Merkmal, entsprechen den vollständigen Satz von Funktionen oder einen Schwellenwert festgelegt). Aber das ist sicher nicht genug. Der nächste Schritt ist der Vergleich der Merkmalswerte, wie vom Verkäufer und Käufer beschrieben. Es gibt viele Varianten (zB k-Nearest-Neighbours). Aber warum nicht versuchen, diese Frage mit dem vorhandenen Diagramm zu lösen? Fügen wir den Kanten Gewichte hinzu:

  • für fortlaufende Funktionen (z. B. Preis):

    price_weight

  • für binäre und nicht quantifizierbare Merkmale - nur logisch bedingt:

    feature_weight

Die Hauptidee hierbei ist, jedes Merkmal auf das Intervall zu skalieren[0, 1] . Zusätzlich können wir Merkmalskoeffizienten verwenden, um die wichtigsten Merkmale zu bestimmen. Zum Beispiel ist die Annahme, dass der Preis doppelt so wichtig ist wie die Verfügbarkeit einer seltenen Funktion:

adj_w_1

adj_w_2

Einer der letzten Schritte besteht darin, die Diagrammstruktur zu vereinfachen und viele Kanten auf eine Kante zu reduzieren, deren Gewicht der Summe der zuvor berechneten Gewichte der einzelnen Features entspricht. Mit solch einer reduzierten Struktur könnte jedes Kunden- / Produktpaar nur eine Kante haben (keine parallelen Kanten). Um das beste Angebot für den genauen Verkäufer zu finden, müssen Sie nur verbundene Käufer mit maximal gewichteten Kanten auswählen.

Zukünftige Herausforderung: Einführung einer billigen Methode zum Gewichten von Kanten im ersten Schritt :)

Sobach
quelle