Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » Collaborativ filtering + Metrik

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.01.2009, 15:19 Uhr
xXx
Devil


Also, ich habe sagen wir mal ein Autoverkäufer. Dieser hat einen Kunden der von ganz vielen Autos eins hat (d.h. binäres Format). So jetzt hat der Verkäufer noch mehr Kunden, die auch Autos gekauft haben und es soll nun Werbung, für jeden individual, generiert werden. Dazu soll jetzt geguckt werden welche Kunden welches Auto haben und dann daraufhin rausgesucht werden wie hoch die Ähnlichkeit des Kundes mit einem anderen ist. Diese Ähnlichkeit wird für jedes Auto das der andere Kunde besitzt angerechnet. Das machen wir mit allen anderen Kunden außer dem, den die Werbung zukommen soll . Dann haben wir am Ende bei einem Auto einen sehr hohen Wert (relativ) der uns angibt, dass wir doch bitte dieses Auto in die Werbung stellen sollten, weil die Wahrscheinlichkeit hoch ist, dass auch dem umworbenen Kunden dieses Auto gefallen wird.

So das ganze nennt man collaborativ filtering.

Soweit ist alles klar, das Problem ist im Moment nur, welche Metrik zum berechnen der Ähnlichkeit benutzt werden sollte. Es gibt ja Jaccard (Tanimoto), Dice, Euklidischer Abstand und viele andere. Doch beim Jaccard, der ja besonders für Binäre Datensätze geeignet ist, hab ich das Problem, dass er nicht darauf eingeht, dass evtl. jemand der sagen wir 22 Autos gekauft hat, davon stimmen 10 mit einem anderen Überein evtl. mehr aussage Kraft hat, als jemand der 2 Autos gekauft hat und davon stimmen nur 1 überein.

Hätte jemand da eine andere Metrik im Angebot die sich gut eignen würde?

Es handelt sich in echt natürlich nicht um Autos und Autoverkäufer sondern um etwas anderes

In welcher Sprache würdet ihr es realisieren? Dachte erst an PHP weils einfach von überall erreichbar wäre, doch kann ich die Sprache nicht wirklich gut leiden (ehm hier mal keine Diskussion warum, Typsicherheit usw.) und hat es schnell in C++ mitm Jaccard-Koeffizienten realisiert und ohne jetzt groß zu optimieren ist selbst dabei das einlesen der Datenbanken doch recht langsam. Von d.h. weiß ich noch nicht so ganz ob es empfehlenswert ist, da mit PHP ran zu gehen.

Jemand paar Pro/Contra-Argumente zu bieten?

Links:
http://kontext.fraunhofer.de/haenelt/kurs/folien/VektorAehnlichkeit-2.pdf
http://en.wikipedia.org/wiki/Jaccard_index
www.amazon.de/Programming-Collective-Intelligence-Building-Applications/dp/0596529325/ref=sr_1_1?ie=UTF8&s=books-intl-de&qid=1232105613&sr=8-1
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.01.2009, 18:01 Uhr
kronos
Quotenfisch
(Operator)


In der Hoffnung, dass es nicht wirklich um personalisierte Werbung geht...:

Was vorgefertigtes findest du da wahrscheinlich nicht frei im Netz. Einen Machine-Learning-Kernel selbst basteln (so nennt sich das was du willst) ist allerdings auch nicht ganz einfach und meist mit viel trial and error verbunden. Und um dir Vorschläge zu machen müsste man wissen um was für ein Produkt es sich handelt und was du über den Kunden weißt. Du könntest natürlich versuchen die Kundendaten durch einen Vektor von normalisierten Zahlen zu beschreiben und ein paar Standard-Verfahren drauf loszulassen, z.B. SVM mit Skalarprodukt oder RBF. Mit einer sogenannten Kreuzvalidierung (cross-validation) siehst du dann auch schnell ob das was taugt.

So, falls dir das jetzt zu chinesisch war, nimm's einfach als Stichwort-Liste für weitere Recherchen.
Ist wie gesagt kein ganz einfaches Thema und du musst viel 'rumprobieren.

Aber: Wenn du die Ähnlichkeitsmatrix (oder zumindest einen Vektor mit sinnvollen Attributen, die den Kunden beschreiben) hast, dann gibt' es eine Menge mächtiger Tools (im Netz) um Vorhersagen zu treffen.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.01.2009, 18:41 Uhr
xXx
Devil


Also ich hab vom Benutzer nicht mehr als das ich weiß das er nen Auto gekauft hat (oder nicht), welches dieses war und eine ID (mit der keine weiteren Daten verbunden sind ), die ihn Identifiziert. Das war's auch schon

Sollte auch nichts fertiges sein ... (davon mal abgesehen das es da z.B. http://taste.sourceforge.net/) usw. gibt )

Im Moment weiß ich auch nur den Namen des Autos, kann also keine Rückschlüsse anhand des Models odg. ziehen. (Werde das System aber noch erweitern damit es dann die Daten über die Autos beim Hersteller abfragt ...)

Also wirklich nur das
Kunde1 hat gekauft Auto1
Kunde1 hat gekauft Auto2
Kunde2 hat gekauft Auto2
Kunde2 hat gekauft Auto4
Kunde3 hat gekauft Auto3
Kunde3 hat gekauft Auto1
Kunde3 hat gekauft Auto5
bereitsteht und daraus dann die Ähnlichkeiten der Kunden ermittelt werden soll. Dafür les ich halt alle möglichen Autos ein, leg eine Kundendatenbank an die alle Kunden + Nummern der gekauften Autos enthält und geh dann z.B. bei Kunde3 hin und lass mir zu jedem anderen Kunden die Ähnlichkeit berechnen (im Moment Jaccard), dann wird in einem Array bei jedem gekauften Auto diese Wahrscheinlichkeit hinzugefügt. Und das auto das die Größte Anzahl an positiven Wahrscheinlichkeiten hat wird ihm vorgeschlagen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.01.2009, 19:15 Uhr
kronos
Quotenfisch
(Operator)


Ach so. Da würde ich einfach für jedes Auto-Paar (A,B) zählen, mit welcher Wahrscheilichkeit jemand der A hat auch B hat. Dann kannst du für jeden Kunden schauen, welche Autos er gekauft hat und ihn mit Werbung für das am häufigsten mit einem dieser Modelle zusammen gekaufte Auto zumüllen, bis er dich fragt, wie du auf die Idee kommst, dass jemand mehr als ein Auto braucht und dir mit dem Anwalt droht
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.01.2009, 09:16 Uhr
xXx
Devil


So hatte es vorher mal in C++ realisiert und eigtl. ganz anständige Performance erreicht aber jetzt in PHP komm ich mit den 30sec ausführungszeit einfach nimmer aus ALlein das einlesen der Daten dauert dabei schon viel zu lange ... ist zwar noch nicht optimiert aber dennoch komm ich damit ja nicht weit. Vor allem müsste ja jedesmal wenn die Seite besucht wird alles neu eingelesen werden ...

Ich kenn mich mit AJAX noch nicht so ganz aus, aber wäre das nicht eine Möglichkeit? Ich werde die Datensätze wahrscheinlich erst in eine Datenbank einspeisen müssen damit das ganze etwas schneller funktioniert ...

Wäre cool wenn jemand hier mal sagen würde womit er es realisieren würde und warum

vlg
deviloper
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: