Nicht personalisierte Empfehlungen: Assoziationsmethode

    Mithilfe persönlicher Empfehlungen können Sie den Benutzer mit Objekten vertraut machen, von denen er möglicherweise nie etwas gewusst hat (und die er nicht gewusst hätte), die er jedoch aufgrund seiner Interessen, Vorlieben und Verhaltenseigenschaften möglicherweise mag. Oft sucht der Benutzer jedoch nicht nach einem neuen Objekt, sondern beispielsweise nach Objekt A ähnlich Objekt B ("Fast and the Furious 2" ähnlich "Fast and the Furious") oder nach Objekt A, das mit Objekt B gekauft / konsumiert wird (Käse mit Wein, Bier mit Babynahrung, Buchweizen mit gedünstetem Fleisch, etc.). Das Erstellen solcher Empfehlungen ermöglicht nicht personalisierte Empfehlungssysteme (LDCs).


    Sie können ähnliche / verwandte Objekte empfehlen, basierend auf dem Wissen über Objekte (Eigenschaften, Tags, Parameter) oder dem Wissen über Aktionen, die sich auf Objekte beziehen (Käufe, Ansichten, Klicks). Der Vorteil der ersten Methode besteht darin, dass Sie Objekte mit ähnlichen Eigenschaften genau bestimmen können ("Fast and the Furious 2" und "Fast and the Furious" - ähnliche Akteure, ein ähnliches Genre, ähnliche Tags, ...). Diese Methode kann jedoch keine verwandten Objekte empfehlen: Käse und Wein. Ein weiterer Nachteil dieser Methode ist, dass das Markieren aller auf dem Dienst verfügbaren Objekte einen hohen Aufwand erfordert.

    Gleichzeitig protokolliert fast jeder Dienst Informationen darüber, welcher Benutzer welches Objekt angesehen / gekauft / angeklickt hat. Diese Informationen reichen aus, um LDCs zu erstellen, mit denen ähnliche und verwandte Einrichtungen empfohlen werden können.

    Unter dem Cutter wird die Assoziationsmethode beschrieben, mit der Sie nicht personalisierte Empfehlungen erstellen können, die nur auf Daten zu Aktionen auf Objekten basieren. Es gibt auch Python-Code, mit dem Sie die Methode auf eine große Datenmenge anwenden können.

    Erstellen nicht personalisierter Empfehlungen


    Betrachten Sie zunächst den grundlegenden Algorithmus zum Erstellen nicht personalisierter Empfehlungen. Angenommen, wir haben Objekte - Filme und Benutzer. Benutzer schauen sich Filme an. Unsere Rohdaten sind eine dünne Matrix D (Filme x Benutzer). Wenn der Benutzer den Film u f beobachtet, dann in der entsprechenden Zelle der Matrix D ist im Wert von 1.

    Um Filme ähnlich dem gegebenen Film f ist notwendig zu wissen , die Ähnlichkeit des Films f mit allen anderen Filmen. Ähnlichkeitsdaten werden in der S-Matrix gespeichert (Filme x Filme).

    Der grundlegende Algorithmus zum Erstellen nicht personalisierter Empfehlungen lautet wie folgt:

    1. für einen gegebenen Film F R seine entsprechende Zeile in der Matrix S finden;
    2. Wählen Sie aus der Reihe R die Reihe der Filme aus, die f - FR am ähnlichsten sind.
    3. FR und es gibt nicht personalisierte Empfehlungen (ähnlich / verwandt).

    Affinitätsmethode


    Aus der Beschreibung ist ersichtlich, dass die Empfehlungen und ihre Qualität nur von der Methode zur Konstruktion der Matrix S und genauer von der Methode zur Bestimmung der Ähnlichkeit der beiden Filme abhängen.

    Wie die Ähnlichkeit zwischen x und y - Filmen , um zu bestimmen, ob sie bei der Anzahl der Benutzer X und Y ausgesehen hat ? Die einfachste Lösung - Koeffizient Jaccard , der die Ähnlichkeit der zwei Objekte (X und Y) berechnet als:



    wobei der Zähler - die Anzahl der Benutzer , die diese als Film x und y Film angesehen haben. Nenner ist die Anzahl der Benutzer, die sich entweder Film x oder Film y angesehen haben.

    Der berechnete Wert ist symmetrisch: x ist ähnlich auch zu y als y zu x ähnlich ist. Wenn wir den Koeffizienten asymmetrisch machen möchten, können wir die Formel wie folgt ändern:



    Auf den ersten Blick ist diese Methode ideal: Sie erhöht den Ähnlichkeitswert mit zusammengesehenen Filmen und normalisiert die Metrik in Bezug auf die Anzahl der Benutzer, die den Film gesehen haben.

    „Das Problem von Harry Potter“ oder „Bananenfalle“


    Betrachten Sie die obige Formel für den Fall, dass das Objekt y sehr beliebt ist (zum Beispiel ein Harry-Potter-Film). Da der Film sehr beliebt ist und von vielen gesehen wird, wird sim (x, y) für fast alle x-Filme zu 1 tendieren. Dies bedeutet, dass Film y wie alle Filme ist, was in den meisten Fällen schlecht ist. Es ist unwahrscheinlich, dass Harry Potter wie der Film The Green Elephant sein wird.

    „Das Problem von Harry Potter“ wird auch als „Bananenfalle» (Bananenfalle) genannt. Angenommen, ein Geschäft versucht, den Gewinn zu steigern, indem es dem Käufer Waren empfiehlt, die häufig gleichzeitig mit dem Kauf des Käufers eingenommen werden. Einer der am häufigsten gekauften Artikel im Lebensmittelgeschäft ist Bananen. Unter Verwendung der obigen Formel empfiehlt das System allen Kunden, Bananen zu kaufen. Bananen werden gekauft - alles ist gut. Dies sind jedoch schlechte Empfehlungen, da Bananen ohne Empfehlungen gekauft würden. Durch die Empfehlung von Bananen reduzieren wir den Gewinn um mindestens ein erfolgreich empfohlenes Produkt, das keine Bananen ist.

    Assoziationsmethode


    Offensichtlich muss die Formel geändert werden, damit das Objekt x das Objekt y attraktiver macht. Das heißt Es muss nicht nur berücksichtigt werden, dass die Objekte x und y zusammen genommen werden, sondern auch, dass das Objekt x nicht ohne y genommen werden kann.

    Wir ändern die Ähnlichkeitsformel wie folgt:



    Hier ist! X die Gruppe von Benutzern, die den Film x noch nicht gesehen haben. Wenn y ein sehr beliebtes Objekt ist, ist der Nenner in der Formel groß. Dann ist der Ähnlichkeitswert geringer und die Empfehlungen sind relevanter. Diese Methode wird Assoziation genannt.

    Methodenvergleich


    Um die Funktionsweise der Assoziationsmethode und den Jacquard-Koeffizienten zu vergleichen, betrachten wir die Suche nach ähnlichen Filmen unter Verwendung dieser beiden Methoden unter Verwendung der folgenden Anfangsdaten.
    Filme \ usersABCDE
    1. Harry Potter und der Stein der Weisen11111
    2. Der Hobbit: Eine unerwartete Reise111
    3. Der Hobbit: Die Verwüstung von Smaug111
    4. Die Chroniken von Narnia: Prinz Kaspian1
    5. Dragon Heart1
    Ähnlichkeitsmatrix aufgebaut asymmetrisches Jaccard-Koeffizient ist wie folgt (diagonal verschwindet nicht den ursprünglichen Film zu empfehlen):
    Filme \ Films12345
    1 00,60,60,20,2
    2100,66700,333
    3 10,667000
    4 10000
    5 11000
    Die Ähnlichkeitsmatrix für die Assoziationsmethode sieht wie folgt aus (zusätzlich zur Diagonale werden Unendlichfälle auf Null gesetzt, wenn ).
    Filme \ Films12345
    100000
    21,50200
    31,52000
    40,250000
    50,250,5000
    Wie aus der Ähnlichkeitsmatrix hervorgeht, können Sie mit der Assoziationsmethode die Überbeliebtheit des Films "Harry Potter und der Stein der Weisen" berücksichtigen. Bei der Erstellung von Empfehlungen nach der Assoziationsmethode für den Film „Der Hobbit: Eine unerwartete Reise“ ist das Gewicht von „Harry Potter“ (1,5) geringer als das Gewicht des relevanteren Films „Der Hobbit: Die Verwüstung von Smaug“ (2).

    Implementierung


    Im Folgenden finden Sie eine Funktion zum Erstellen einer Ähnlichkeitsmatrix basierend auf der Zuordnungsmethode. Die Funktion ist in Python mit scipy und scikit-learn geschrieben. Diese Implementierung ermöglicht es Ihnen, schnell und kostengünstig die Ähnlichkeitsmatrix für eine große Menge an Rohdaten zu berechnen.

    Da innerhalb einer Zeile der Matrix die Werte | X | und |! X | nicht ändern, und ähnliche Gegenstände sind in der gleichen Reihe befindet, dann | X | und |! X | wurden bei der Berechnung der Assoziationsmetrik weggelassen. Die endgültige Metrikformel sieht folgendermaßen aus:



    def get_item_item_association_matrix(sp_matrix):
        """Простой способ построения матрицы ассоциаций
        :param sp_matrix: матрица с исходными данными о просмотрах (фильмы x пользователи)
        :return: матрица схожести фильмов (фильмы x фильмы)
        """
        watched_x_and_y = sp_matrix.dot(sp_matrix.T).tocsr()
        watched_x = csr_matrix(sp_matrix.sum(axis=1))
        magic = binarize(watched_x_and_y).multiply(watched_x.T)
        watched_not_x_and_y = magic - watched_x_and_y
        rows, cols = watched_not_x_and_y.nonzero()
        data_in_same_pos = watched_x_and_y[rows, cols].A.reshape(-1)
        return csr_matrix((data_in_same_pos / watched_not_x_and_y.data, (rows, cols)), watched_x_and_y.shape)
    

    Fazit


    Verbände Methode ist nur ein Weg , um eine nicht-personalisierte Empfehlungen zu bauen. Wie bei jeder anderen Methode müssen Sie vor der Anwendung eine Reihe von Problemen lösen:

    - Bestimmen Sie die Mindestmenge an Daten, auf die die Methode angewendet werden kann;
    - den Schwellenwert der Assoziationsmetrik bestimmen;
    - bestimmen, was zu tun ist, wenn die empfohlenen Objekte eine Assoziationsmetrik haben, die unter einem Schwellenwert liegt;
    - usw.

    Es folgt aus dem oben, dass der Verein Methode kann nicht auf alle Objekte angewendet werden. Daher sollte es mit einem oder mehreren Bauweisen von nicht-personalisierte Empfehlungen kombiniert werden. Ein solcher Ansatz wird guter Rat schaffen , unabhängig von der Anzahl der Daten Benutzer oder Objekt.

    PS Gute Empfehlungen!

    Jetzt auch beliebt: