• Seite:
  • 1
  • 2
  • 3

THEMA: [WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ...

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 9 Monate her #791176

  • xYata
  • xYatas Avatar
  • Frischfleisch
  • Frischfleisch
  • Beiträge: 13
  • Dank erhalten: 18
kekZiger schrieb:
Das PHP-Framework nennt sich Codeigniter und das Frontend-Framework ist Bootstrap mit dem material-theme :)
Aso ok ja ich arbeite häufiger mit Laravel sollte also kein Problem sein :)
Dieses Thema wurde gesperrt.

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 9 Monate her #791191

  • kekZiger
  • kekZigers Avatar Autor
  • Gelegenheitsposter
  • Gelegenheitsposter
  • Softwareentwickler
  • Beiträge: 40
  • Dank erhalten: 9
Dann wirst damit gut klar kommen ;)

Hab mal noch paar Sachen am Design geändert.
Vor allem dein Gedanke mit dem Logo und der Farbe hat mir gut gefallen.
Hab die Navi jetzt also angepasst und auch nen active-status zur Navi hinzugefügt.
Außerdem sind die Button die zu proxer.me führen jetzt in der entsprechenden Farbe. ;)

Freu mich schon auf deinen Entwurf :)
Dieses Thema wurde gesperrt.

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 9 Monate her #791499

  • Marco-
  • Marco-s Avatar
  • Frischfleisch
  • Frischfleisch
  • Beiträge: 20
  • Dank erhalten: 31
Heyho!
Ich bin ja auch dabei an einer Empfehlungssoftware zu arbeiten, bin gerade aber Abitur-technisch eher etwas zurückhaltender was das Programmieren angeht *o-öhm*

Mir gefällt dein Projekt schon sehr gut und ich würde gerne meine geplante Art der Generierung von Vorschlägen darlegen, die wenn nicht in ähnlicher Variante vorhanden, gerne in diesem Projekt implementiert werden kann. *o-pfeif*

Ich hatte mir Gedanken gemacht, bezüglich eines Algorithmus, welcher basierend auf Vergleichen anderer Nutzer mit einem Selbst Vorschläge generiert (und als Mathe-LK natürlich gleich mit Formeln dargestellt). *o-haha*

Bei einem Nutzer A und einem Nutzer B betrachtet man die Anime-Listen von A und B und sucht alle n Einträge heraus, welche von beiden Nutzern bewertet wurden (also zwischen 1 und 10). Bei jedem dieser Einträge wird dann eine Relation zwischen beiden Nutzern hergestellt, indem man folgende Rechnung durchführt:
(10 - |RatingA - RatingB|) / 10

Für eine Gesamt-Relation zwischen den beiden Nutzern wird diese Rechnung für jeden Eintrag durchgeführt, den beide Nutzer bewertet haben und dann werden alle Ergebnisse miteinander addiert und durch die Anzahl der berechneten Einträge n geteilt (also Durchschnitt :D). Diese Gesamt-Relation gibt ein Intervall an, in welchem Bereich die Bewertung von A in Abhängigkeit von B bei einem Eintrag ist, den B bewertet und A nicht bewertet hat. Basierend auf dem Beispielwert von 0.8 für eine Gesamt-Relation zwischen Nutzer A und Nutzer B lässt sich für ein von B bewerteten und von A nicht bewerteten Eintrag E prognostizieren, dass das RatingA für E sich im Intervall
[RatingA1 = 0.8 * RatingB, RatingA2 = (1 + (1 - 0.8)) * RatingB], bei einem RatingB von 8 also im Intervall [6.4, 9.6] befindet.
Rundungen sind hier nach persönlichem Befinden vorzunehmen, ich würde jedoch mindestens zwei Dezimalstellen empfehlen. Sollte der Grenzwert des Intervalls RatingA2 größer als 10 sein, so sollte trotzdem 10 ausgegeben werden.


Vorschläge auf Basis eines einzelnen Nutzers zu erstellen ist jedoch nicht wünschenswert und deshalb sollten für möglichst viele Nutzer Gesamt-Relationen ermittelt werden. Um eine Prognose für einen von A unbewerteten Eintrag zu ermitteln, sollte also die Bewertung jedes Nutzers, der den Eintrag bewertet hat, mit dessen Gesamt-Relation multipliziert werden, in einer Variable addiert werden und dann muss der Durchschnitt ermittelt werden. Diese Rechnung ist zweimal durchzuführen, einmal mit der Gesamt-Relation und einmal mit der inversen Gesamt-Relation, also beispielsweise mit 0.8 multipliziert und dann mit der Inversion mit 1.2 multipliziert.
Am Ende hat man ein Intervall, in dem das RatingA prognostiziert wird und je dichter die Grenzen beieinander liegen, umso wahrscheinlicher ist es, dass die Prognose zutrifft.
Der Nutzer könnte eventuell dann nach Prognosen filtern lassen, bei dem er voraussichtlich X Sterne geben würde.
*o-8)*
Puh geschafft *o-gj*

Ich hoffe es war einigermaßen verständlich und dass wenn gewünscht, dieser Algorithmus implementiert wird. Natürlich können alle die ähnliche Projekte haben, damit arbeiten und ich würde mich freuen, gemeinsam mit euch darüber zu diskutieren und den Algorithmus weiter zu verfeinern.

Wenn nötig, kann ich auch nochmal ein Bild mit der mathematischen Form des Algorithmus posten :)

Nun denn viele Grüße und bis bald! *o-bye*
Dieses Thema wurde gesperrt.

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 9 Monate her #791652

  • kekZiger
  • kekZigers Avatar Autor
  • Gelegenheitsposter
  • Gelegenheitsposter
  • Softwareentwickler
  • Beiträge: 40
  • Dank erhalten: 9
Hi Marco,

also erst mal vielen Dank das du den Algorithmus bereit stellst für die Allgemeinheit..
Aber entweder bin ich zu gerade zu doof um zu verstehen wie genau der funktionieren soll, oder du schreibst wie du denkst.. in 3 Richtungen gleichzeitig (in diesem Falle, willkommen im Club) ;)

Wäre cool wenn du mir das mal anhand von einem expliziten Beispiel aufzeigen könntest wie genau die Formel funktioniert..
Dann könnte ich schauen ob ich diesen implementieren kann.

Vielen dank :)

// Edit

Kleiner Status-Update:

1. Absofort werden, bei eingeloggtem User, die Anime/Manga die bereits auf der User-Liste sind, bei den Empfehlungen außen vorgelassen.
2. Desweiteren werden jetzt beim User-Vergleich die Genre gezählt und man kann dann anhand dieser Genre wieder Empfehlungen genieren, genauso wie bei den Lesezeichen.
3. In Planung befindet sich jetzt die Funktion Empfehlungen anhand von Bewertungen zu generieren. Dabei stoße ich allerdings gedanklich bereits an das Problem mit meinem eigenen Account -> Ich bewerte nie. :D Mal sehen wie ich das lösen werde.
Letzte Änderung: 2 Jahre 9 Monate her von kekZiger.
Dieses Thema wurde gesperrt.

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 9 Monate her #791790

  • Marco-
  • Marco-s Avatar
  • Frischfleisch
  • Frischfleisch
  • Beiträge: 20
  • Dank erhalten: 31
Nun die Erklärung war wohl wirklich nicht allzu verständlich *o-pfeif* *o-gomen*


Ich versuche es im folgenden mit ein paar Beispieldaten etwas eindeutiger zu erklären und spicke es mit ein paar informatischen Begriffen, die für Programmierende jedoch nicht allzu schwer zu verstehen sein sollten:

Wir haben mehrere Nutzer, die wir mit uns selber vergleichen um Prognosen zu Anime/Manga zu generieren, welche wir selber noch nicht geschaut haben. Die Berechnung der Prognosen für solche Anime/Manga geschieht über andere Nutzer, die diese Anime/Manga bereits bewertet haben.

Wir beginnen damit, dass wir einen anderen Nutzer betrachten um nach Anime/Manga zu schauen, die sowohl wir selbst, als auch der besagte Nutzer bewertet haben. Die Anzahl dieser beidseitig bewerteten Anime/Manga nehmen wir jetzt für später als Variable 'n'. Diese Anime/Manga, die wir gefunden haben, welche wir beide bewertet haben, packen wir in eine Liste 'List', der Größe 'n'.

Wir berechnen nun die Abweichung 'a' von uns selbst, mit dem betrachteten Nutzer in jedem einzelnen Anime/Manga, aus 'List' mit folgender Rechnung und beispielhaft mit den Beispieldaten in der folgenden Tabelle:


Formel:
(10 - |MeineBewertung - NutzerBewertung|) / 10


Beispieldaten-Tabelle:
Anime/MangaMeineBewertungNutzerBewertung
189
275
344

Für jedes der n = 3 Beispiele in der Tabelle setzen wir die Werte in die Tabelle ein und erhalten folgende Werte:

a(List1) = (10 - |8 - 9|) / 10 = 0.9

a(List2) = (10 - |7 - 6|) / 10 = 0.8

a(List3) = (10 - |4 - 4|) / 10 = 1.0


Für die gesamte Abweichung (oder ich nenne sie auch Gesamt-Relation) 'A' nehmen wir die Summe aller 'a' aus 'List' und teilen diese durch 'n' für den Durchschnitt. Mit den obigen Beispieldaten also:

(0.9 + 0.8 + 1.0) / 3 = 0.9

Das bedeutet also, dass unsere prognostizierte Bewertung für einen noch nicht von uns bewerteten Anime/Manga, von der Bewertung des berechneten Nutzers um 1 - 0.9 = 0.1 also 10% abweichen kann. Wenn die Bewertung des berechneten Nutzers der Variable 'B' entspricht, liegt unsere prognostizierte Bewertung hier in dem Intervall [ B - (0.1 * B); B + (0.1 * B) ]. Bei einer beispielhaften Bewertung des berechnete Nutzers von 8 würde unsere Prognose also im Intervall [ 8 - (0.1 * 8); 8 + (0.1 * 8) ] liegen, also zwischen 7,2 und 8.8.

Jetzt ist es geschafft und die erste Prognose ist berechenbar, war doch echt easy *o-haha* *o-toohappy*


Offensichtlich sollte aber hier sein, dass eine Prognose basierend auf einer Gesamt-Relation von einem einzelnen Nutzer nicht allzu sinnvoll ist. Dementsprechend führt man die Berechnung der Gesamt-Relation 'A' für möglichst viele Nutzer aus.

Hat man nun viele Nutzer berechnet, kann man Prognosen mithilfe der Gesamt-Relationen erstellen, was ich im folgenden wieder mit Beispieldaten und der Rechnung erkläre:

Beispieldaten-Tabelle:
Benutzer #Gesamt-RelationNutzerBewertung
10.97
20.79
30.23

Die obige Tabelle bezieht sich auf einen X-beliebigen Anime/Manga, den wir nicht bewertet haben. Wir haben aus allen berechneten Nutzern jene herausgesucht und in eine Liste gespeichert, die diesen Anime/Manga bereits bewertet haben.

Bei der Erstellung der Prognose bestimmt die Gesamt-Relation eines Nutzers die Gewichtung seiner Stimme. Und für endgültie Prognose müssen dann zwei Berechnungen durchgeführt werden:
Zuerst berechnet man für alle Berechneten Nutzer jeweils das Produkt einer Gesamt-Relation eines Nutzers mit seiner Bewertung für den Anime/Manga und diese ganzen Produkte werden dann am Ende miteinander addiert und dann wird erneut der Durchschnitt gebildet. Nun ist die erste Grenze des Prognoseintervalls gebildet. Für die zweite Grenze benötigt man etwas, dass ich die inversive Gesamt-Relation nenne 'Ainv' und welche man wie folgt berechnet: Ainv = 1 + (1 - A)
Mit der inversiven Gesamt-Relation führt man nun die selbe Rechnung durch wie für die erste Grenze des Intervalls, mit dem Unterschied, dass man anstatt 'A' nun 'Ainv' benutzt.
Mit den obigen Beispieldaten sollte das dann so aussehen:

Erste Grenze:
(0.9 * 7 + 0.7 * 9 + 0.2 * 3) / 3 = 4.4

Zweite Grenze:
(1.1 * 7 + 1.3 * 9 + 1.8 * 3) / 3 = 8.266...

Als Ergebnis bekommt man ein prognostiziertes Intervall, in dem vermutlich unsere Bewertung für den Anime/Manga X liegt, hier also zwischen 4.4 und 8.8266..., wobei die Rundung dem Programmierer hier überlassen ist. Es sollte beachtet werden, dass bei der zweiten Grenze eine Zahl herauskommen kann, die größer als 10 ist und dementsprechend trotzdem als 10 dargestellt werden sollte. Wenn das jetzt noch die Anzahl der berücksichtigten Nutzer in der berechneten Prognose ziemlich hoch ist und die Differenz der beiden Grenzen möglichst niedrig ist, ist davon auszugehen, dass die Genauigkeit der Prognose sehr hoch ist.

So nun bin ich endlich fertig *o-8)*
Ich hoffe, diesmal war es vor allem mit den farblichen Gestaltung und den dargestellten Rechnungen mit Beispieldaten etwas einfacher zu verstehen... *o-gj*

Sollten noch Fragen bestehen, einfach fragen *o-roll*

Viele Grüße
Marco-
Dieses Thema wurde gesperrt.
Folgende Benutzer bedankten sich: kekZiger

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 9 Monate her #791793

  • kekZiger
  • kekZigers Avatar Autor
  • Gelegenheitsposter
  • Gelegenheitsposter
  • Softwareentwickler
  • Beiträge: 40
  • Dank erhalten: 9
Abend :)

Also gleich mal vorn weg:

Ich weiß jetzt wie dein Algorithmus funktioniert. (in meinem Kopf hab ich schon den halben Code vor Augen.. vielen Dank dafür :D ).
Jedoch sehe ich darin weniger eine Empfehlung sondern vielmehr eine zu erwartende Bewertung.

Da habe ich wiederum 2 Probleme.
Das erste Problem ist: Scheinbar ist die Grundeinstellung der User-List, das man nur selbst oder Freunde diese sehen können.
Das zweite ist: ich zB. bewerte nie irgendwelche Einträge. und selbst wenn. wären diese sehr subjektiv und können stark abweichen.
zB. könnte ich einen Manga extrem gut bewerten und jemand der einen ähnlichen Geschmack hat wie ich, kann diesen wider rum sehr schlecht empfinden und demnach bewerten.

Daher gehe ich zB. bei meinem User-Vergleich den umgekehrten Weg und vergleiche nicht die Manga/Anime die beide Personen in ihren Listen haben, sondern diejenigen die nicht in beiden Listen auftauchen.
Basierend darauf hatte ich mir bereits überlegt, diejenigen mit der höchsten User-Empfehlung (Also die der jeweilige User am höchsten bewertete) an oberste Stelle in der Tabelle darzustellen..

Wobei ich auch weniger versuche irgendetwas zu bewerten, eben aufgrund der subjektiven Einschätzungen.

Trotz allem ein sehr interessanter Ansatz und wird es wohl auch ins Programm schaffen.. (alleine schon weil ich es umsetzen will :D )

Soviel erst einmal von mir.

Als kleiner Status noch:
Gab ein paar kleinere Design-Änderungen.
Neuer Schatten für die Boxen und die Navigation
und eine bessere Darstellung der Empfehlungen auf Smartphone und Co.

schönen Abend noch :)
Dieses Thema wurde gesperrt.

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 9 Monate her #791796

  • Marco-
  • Marco-s Avatar
  • Frischfleisch
  • Frischfleisch
  • Beiträge: 20
  • Dank erhalten: 31
Nun, worin definiert sich für dich denn eine Empfehlung? :D
Für mich wäre das z.B. ein Anime, dem ich potentiell 7 oder mehr Sterne geben würde. In diesem Fall würde ich es dem Nutzer überlassen nach Anime oder Manga zu fragen, die ihm eine Mindestbewertung von X Sternen als Untergrenze des Intervalls berechnen. Und dem Problem der Subjektivität bin ich mir durchaus bewusst gewesen, als ich diesen Algorithmus gebastelt habe. Alleine dadurch, dass für die Gesamt-Relation zu einem einzelnen Nutzer der Durchschnitt ermittelt wird, wird die Subjektivität in besonderen Einzelfällen größtenteils irrelevant, wenn ein bestimmtes Muster zu erkennen ist. Wenn beispielsweise ich viele Mecha-Animes gut bewertet habe und einen bestimmten nicht, wird das letztendlich kaum auffallen. Dadurch das dann auch jeder Nutzer anhand seiner Gesamt-Relation unterschiedlich stark gewichtet wird, fallen jene Leute, mit denen man nicht übereinstimmt nicht ins Gewicht. Der Algorithmus befindet sich bei mir momentan auch in der Testphase und ich habe ihn bisher mit ca. 50 Nutzern und deren Daten befüllt und bisher sind die Ergebnisse äußerst zufriedenstellend und nachvollziehbar.
Dieses Thema wurde gesperrt.
Folgende Benutzer bedankten sich: kekZiger

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 8 Monate her #793450

  • IndieMarkus
  • IndieMarkuss Avatar
  • Gelegenheitsposter
  • Gelegenheitsposter
  • Beiträge: 42
  • Dank erhalten: 19
Hi,

Eine sehr interessante Sache hast du da! Du solltest die Anime Liste nur nicht auf einmal laden - das ist eine 31000 Zeilen lange Response! Wenn du schon pagination verwendest, dann solltest du auch Seitenweise nachladen.
Wie schon oben angemerkt wurde, sollte dir da eine eigene Datenbank von Proxer Einträgen und Animes sehr helfen.
Dieses Thema wurde gesperrt.
Folgende Benutzer bedankten sich: kekZiger

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 8 Monate her #793452

  • kekZiger
  • kekZigers Avatar Autor
  • Gelegenheitsposter
  • Gelegenheitsposter
  • Softwareentwickler
  • Beiträge: 40
  • Dank erhalten: 9
Hallo,

Danke erst mal :)

Das Problem ist das die pagination über dataTables läuft.
Also über js.
Das hat den Vorteil das die Inhalte der Tabelle durch die input Felder darunter, gefiltert werden können.
Habe aber auch schon überlegt das zu ändern bzw. raus zu nehmen.
Im Endeffekt stelle ich da eigentlich nur eine veränderte Suchfunktion nach.

PS: hab eine Datenbank mit den entsprechenden Einträgen ;)
Dieses Thema wurde gesperrt.

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 7 Monate her #795183

  • IndieMarkus
  • IndieMarkuss Avatar
  • Gelegenheitsposter
  • Gelegenheitsposter
  • Beiträge: 42
  • Dank erhalten: 19
Sorry, dass ich erst jetzt antworte, aber irgendwie hab ich deinen Post vor drei Wochen übersehn^^'
Das mag schon sein, dass das Filtern mit dataTables fürchterlich einfach geht, aber ich bin mir sicher, dass das auch anders funktioniert. Ich kenne die Technologien, die du verwendest wahrscheinlich nicht so gut wie du, aber ich habe selbst schon an Softwareprojekten mitgearbeitet, wobei eines mit Angular 2 realisiert wurde. Wir hatten da auch Suchfelder mit verschiedenen Kriterien (name, datumsbereich, autor, ...) und eine Liste von Elementen mit Pagination.
In Angular löst man so etwas am Einfachsten mit Subscriptions und Observables - in plain old JS müsste man daher wahrscheinlich die Inputfelder auf Änderungen abhorchen und asynchrone Ajax requests wegschicken, die beim Callback die Liste entsprechend updaten. (Mit einem ~500ms Keyup delay, dass nicht während dem Tippen geladen wird)
Das alles geht natürlich einfacher, wenn das Backend auf eine eigene kleine Datenbank zugreifen kann (wie schon weiter oben angemerkt wurde) und eigene queries stellen kann.
Dieses Thema wurde gesperrt.

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 7 Monate her #795184

  • kekZiger
  • kekZigers Avatar Autor
  • Gelegenheitsposter
  • Gelegenheitsposter
  • Softwareentwickler
  • Beiträge: 40
  • Dank erhalten: 9
Hallo,

kein Stress ;)

Habe jetzt erst mal auf eine normale Pagination umgestellt welche immer nur ein paar Entrys lädt.
Und genau wie du schon sagtest, werde ich hier mit Inputs arbeiten welche per Ajax entsprechend filtern und die Ergebnisse nachladen.
Das wird aber noch einen Moment dauern, da ich mich derzeitig erst einmal um die Funktion von Marco- kümmere. ;)
Dieses Thema wurde gesperrt.

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 7 Monate her #795185

  • IndieMarkus
  • IndieMarkuss Avatar
  • Gelegenheitsposter
  • Gelegenheitsposter
  • Beiträge: 42
  • Dank erhalten: 19
Verstehe^^ Hoffentlich verlierst du dich nicht in deinen Features - ich freue mich irgendwann einmal eine fertige Seite zu sehen!
(Eine klitzekleine Anmerkung noch, die nicht wirklich ein feature ist, sondern etwas was mir aufgefallen ist, beim Durchklicken - manchmal, z.B. auf dieser Seite www.tjenje.de/recommendations/search kann man fürchterlich weit unnötig nach rechts scrollen. Irgendein element steht da noch nach rechts raus. Ist vielleicht nicht das Sauberste, aber wenn du deinem body einen overflow-x hidden gibst, dann ists besser.)
Dieses Thema wurde gesperrt.

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 7 Monate her #795190

  • kekZiger
  • kekZigers Avatar Autor
  • Gelegenheitsposter
  • Gelegenheitsposter
  • Softwareentwickler
  • Beiträge: 40
  • Dank erhalten: 9
Könntest du mir davon vielleicht einen Screenshot machen? ;)
Sonst suche ich mich da wohl tot. :D
Könnte mir vorstellen das dort irgendein Titel Probleme macht.. ;)
Dieses Thema wurde gesperrt.

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 7 Monate her #795202

  • IndieMarkus
  • IndieMarkuss Avatar
  • Gelegenheitsposter
  • Gelegenheitsposter
  • Beiträge: 42
  • Dank erhalten: 19
Bittesehr, ich hab dir ein issue erstellt^^
bitbucket.org/Marcel_Albrecht/proxer-web...crolling-ausschalten
Dieses Thema wurde gesperrt.

[WebAPP] Empfehlungen / Empfehlungen anhand Lesezeichen-Genres / ... 2 Jahre 7 Monate her #795222

  • kekZiger
  • kekZigers Avatar Autor
  • Gelegenheitsposter
  • Gelegenheitsposter
  • Softwareentwickler
  • Beiträge: 40
  • Dank erhalten: 9
Danke noch mal :)
Das issue ist jetzt auch bereits behoben :D
Da wurde ein div zuviel geschlossen in der foreach-schleife :D
Dieses Thema wurde gesperrt.
  • Seite:
  • 1
  • 2
  • 3
Moderatoren: Yuriko.KnivesLaynaFauliRocktForummodkineh
Powered by Kunena Forum