Home Me Doc <Matthias Programmiert/>_

Idee

Die Idee, für meinen Algorithmus ist eigentlich ganz einfach: Wenn ein Nutzer zwei Anime hoch bewertet hat, dann scheinen sie etwas gemeinsam zu haben, dass der Nutzer Mochte. Das könnte man jetzt für alle Nutzer machen und so Präferenzen eintdecken.

Umsetztung

Das bedeutet, dass wir erstmal eine Liste von Bewertungen eines Nutzers haben für jeden Anime. Die höchste Wertung ist hierbei 10. Falls der Nutzer den Anime noch nicht bewertet hat, dann ist die Wertung für den Anime 0. \[[v_1,v_2,...,v_a] \mid v \in \{0,1,2,3,4,5,6,7,8,9,10\}\]

Eine solche Liste hat man jetzt für jeden Nutzer, also haben wir eine \(n \times a\) Matrix. \begin{bmatrix} v_{1,1} & v_{1,2} & ... & v_{1,a}\\ v_{2,1} & v_{2,2} & ... & v_{2,a}\\ \vdots & \vdots & \ddots & \vdots\\ v_{n,1} & v_{n,2} & ... & v_{n,a}\\ \end{bmatrix}

Um herauszufinden, wie gut zwei anime x und y zueinander passen multipliziert man die Bewertung eines Nutzers von Anime x mit der von Anime y. Das sorgt dafür, dass der score besonders dann steigt, wenn ein Nutzer beide als gut empfand. \[s_{x,y} := \sum \limits_{i=1}^n v_{y,i} \cdot v_{x,i} = \begin{bmatrix} v_{1,x} \\ \vdots \\ v_{n,x} \\ \end{bmatrix} \cdot \begin{bmatrix} v_{1,y} \\ \vdots \\ v_{n,y} \\ \end{bmatrix} \mid x \ne y\]

Damit hätte man jetzt immer den absoluten, der aber unterschiedlich hoch ausfallen kann, einmal wenn zwei Anime besser zusammen passen, aber auch, wenn einfach mehr Nutzer einen oder beide bewertet haben. Dadurch müssen wir jetzt noch speichern, wie oft die Kombination vorkam um einen Durchschnitt für den Score zu bilden. \[c_{x,y} := \sum \limits_{i=1}^n f(v_{y,i} \cdot v_{x,i}) \mid x \ne y\] \[f(x) := \begin{cases} 1 & x \ne 0 \\ 0 & \textrm{sonst} \\ \end{cases}\]

Jetzt kann der relative Score \(r_{x,y}\) gebildet werden. \[r_{x,y} := \begin{cases} \dfrac{s_{x,y}}{c_{x,y}} & c_{x,y} \ne 0 \\ 0 & \textrm{sonst} \\ \end{cases}\]

Hierbei nimmt man \(s_{x,x}\) raus, weil es später stören würde. Auch wenn es kein logisches Problem damit gibt, dass man die Ähnlichkeit eines Anime mit sich selbst prüft, ergibt es keinen Mehrwert das zu speichern. Dann kann man folgende \begin{bmatrix} r_{1,2} & r_{1,3} & ... & r_{1,a}\\ r_{2,1} & r_{2,3} & ... & r_{2,a}\\ \vdots & \vdots & \ddots & \vdots\\ r_{a,1} & r_{a,2} & ... & r_{a,a-1}\\ \end{bmatrix}

Jetzt berechnen wir die Anzahl an "Watches" eines Anime und die durchschnittliche Wertung. \[ c_{x} := \sum \limits_{i=1}^n f(v_{i,x})\] \[ d_{x} := \sum \limits_{i=1}^n (v_{i,x}) \ : c_{x}\]

Nachdem die Vorarbeit getan ist können jetzt live Empfehlungen generiert werden.
Das ist dann eine Liste von Elementen mit einem Ähnlichkeits-Score.
Diese Ähnlichkeiten für einen einen Anime bestehen aus 3 Teilen:
- Dem Prozentsatz an Leuten, die beide Anime geschaut haben
> Das kann potenziert werden, um die Wichtigkeit des Prozentsatz zu erhöhen und die Ergebnisse zu verbessern. \[p(x,y) := \frac{c_{x,y}}{c_{y}}\] - Dem prozentualen Unterschied des Relativen Scores zum Durschnittlichen
> Das soll die Anime fördern, die in der Kombi deutlich besseren Score haben als im Durchschnitt.
> Das kann potenziert werden, um die Wichtigkeit des Teils zu erhöhen und die Ergebnisse zu verbessern. \[v(x,y) := \frac{r_{x,y}}{d_{y}}\] - Und einem Mengenausgleich.
> Der soll verhindern, dass ein Anime die einfach nur qualitativ hochwertig sind zu oft empfohlen werden, ohne, dass sie tatsächlich ähnlich sind.
> Die 300 kann erhöht oder verringert werden je nach dem, wie hoch die insgesammte Anzahl an Votes ist. Je höher der Wert, desto weniger wichtig ist die Qualität. \[m(x,y) := \sqrt{c_{x,y} + 300}\]
Der vollständige Score für die Ähnlichkeit zweier Anime ist dann ein Produkt der drei Teile. \[sim(x,y) := p(x,y) \cdot v(x,y) \cdot m(x,y)\]

Argumente

Dieser Algorithmus hat vor allem den Vorteil, dass er nur am Anfang einiges an Zeit für die Score-Tabellen benötigt, aber danach die Berechnung sehr schnell geht, weshalb man sie im Grunde immer Live machen kann und nicht speichern muss. Des weiteren kann man auch währen der Laufzeit die Wichtigkeit der 3 Hauptkomponenten ändern wie man möchte, um je nach bekanntheit eines Anime unterschiedliche Maßstäbe zu verwenden.

Inhalt