Wenn Sie einen geraden Prozentsatz von Ansichten verwenden, wird auch die Beliebtheit des Artikels nicht korrekt wiedergegeben. Obwohl 9 Likes von 18 "stärker" sind als 9 Likes von 500, ist die Tatsache, dass ein Video 500 Aufrufe hat und das andere nur 18 bekommt, ein viel stärkeres Anzeichen für die Popularität des Videos.
Ein Video mit vielen Ansichten bedeutet normalerweise, dass es bei einer Vielzahl von Zuschauern sehr beliebt ist. Dass es nur einen kleinen Prozentsatz von Likes oder Dislikes gibt, ist normalerweise zweitrangig. Ein Video, das eine kleine Anzahl von Ansichten und eine große Anzahl von Likes enthält, ist normalerweise ein Hinweis auf ein Video, das sehr eng ausgerichtet ist.
Wenn Sie Ansichten in die Gleichung einbeziehen möchten, würde ich vorschlagen, den Bayes-Durchschnitt, den Sie erhalten, von den Vorlieben und Abneigungen durch den Logarithmus der Anzahl der Ansichten zu multiplizieren. Das sollte die Dinge sehr gut regeln.
Wenn Sie keine Multi-Faktor-Rangliste erstellen möchten, werden Likes, Dislikes und Views jeweils separat gezählt und mit individuellen Gewichten versehen. Die Mathematik ist komplizierter und es bedarf einiger Feinabstimmungen, aber es führt tendenziell zu besseren Ergebnissen. Stellen Sie sich zum Beispiel vor, dass Leute ein Video, das sie leicht amüsant finden, oft "mögen", aber sie werden es nur "nicht mögen", wenn sie es als anstößig empfinden. Eine Abneigung ist eine viel stärkere Indikation als ein Gleiches.
Jedes Video hat:
Also können wir die folgenden Parameter von ihnen abziehen:
like_rate = likes / Ansichten
dislike_rate = likes / Ansichten
view_rate = views / number_of_website_users
video_age = count_days (Upload_Datum, heute)
avg_views = Ansichten / upload_age
avg_likes = likes / upload_age
avg_dislikes = dislikes / upload_age
Bevor wir die zu verwendende Formel festlegen können, müssen wir angeben, wie die verschiedenen Videos funktionieren sollen. Eine Möglichkeit ist, die Eigenschaft eines populären Videos in Punkten zu erklären:
Ein beliebtes Video ist in den meisten Fällen ein neues Video
Je älter ein Video wird, desto höhere avg_views benötigt es, um populär zu werden
Ein Video mit einer like_rate über like_rate_threshold oder einer dislike_rate über dislike_rate_threshold kann mit der Differenz zu seinem Grenzwert konkurrieren, wie alt es wird
Eine hohe view_rate eines Videos ist ein guter Indikator dafür, dass ein Video für einen Nutzer vorgeschlagen wird, der es vorher nicht angesehen hat
Wenn avg_likes oder avg_dislikes die meisten avg_views machen, wird das Video in der Zwischenzeit als aktiv angesehen, im Falle aktiver Videos müssen wir nicht wirklich überprüfen, wie alt es ist
Fazit: Ich habe keine Formel, aber man kann konstruiert werden, indem man eine Einheit in eine andere umrechnet, wie man ein Videoalter nach Tagen abschneidet, basierend auf einer Berechnung, die mit avg_likes, avg_dislikes und avg_views
gemacht wurdeIch kann Sie auf eine nicht-parametrische Weise verweisen, um die bestmögliche Reihenfolge in Bezug auf ein gewichtetes lineares Scoring-System zu erhalten, ohne genau zu wissen, welche Gewichte Sie verwenden möchten (nur Einschränkungen für die Gewichte). Beachten Sie jedoch, dass durchschnittliche tägliche Aufrufe möglicherweise irreführend sind, da Filme in späteren Jahren wahrscheinlich weniger heruntergeladen werden. Das erste, was ich tun würde, wäre ein polynomiales Modell (Grad 10 sollte gut genug sein), das die Gesamtzahl der Ansichten als eine Funktion der Anzahl der Tage vorhersagt, an denen der Film verfügbar war. Dann, sobald Sie Ihren Fit haben, dann erhalten Sie für jedes Datum die vorhergesagte Gesamtanzahl der Views, die Sie teilen, um "relative durchschnittliche Anzahl der Views" zu erhalten, was ein Multiplikator ist, der Ihnen sagt, wie oft wahrscheinlicher (oder unwahrscheinlicher) der Film ist im Vergleich zu dem zu sehen, was Sie im Durchschnitt angesichts der Daten erwarten. So würde 2 bedeuten, dass der Film doppelt gesehen wird, und 1/2 bedeutet, dass der Film halb so oft gesehen wird. Wenn Sie wollen, dass 2 und 1/2 "Negative" voneinander sind, was aus einer Scoring-Perspektive sinnvoll ist, dann nehmen Sie das Protokoll des Multiplikators, um die Punktzahl zu erhalten.
Nun gibt es mehrere Größen, die Sie berechnen können, um sie in eine Gesamtpunktzahl einzubeziehen, wie die oben erwähnte (log.) "relative durchschnittliche Anzahl von Ansichten" und (Likes / Gesamtansichten) und (Abneigungen / Gesamtansichten). US News und World Report rangieren Universitäten jedes Jahr, und sie verwenden nur eine gewichtete Summe von 7 verschiedenen Kategorie-Scores, um eine Gesamtpunktzahl für jede Universität zu erhalten, nach der sie geordnet sind. Die Verwendung einer gewichteten linearen Kombination von Kategorienwerten ist definitiv kein schlechter Weg. (Beachten Sie, dass Sie bei einigen Kategorien möglicherweise eine Log-Transformation durchführen möchten, bevor Sie die lineare Kombination von Scores verwenden). Das Problem ist, dass Sie möglicherweise nicht genau wissen, welche Gewichte verwendet werden sollen, um das "wünschenswerteste" Ranking zu erhalten. Die erste Sache, die Sie beachten sollten, ist, dass Sie, wenn Sie die Gewichte im selben Maßstab haben möchten, jeden Kategorie-Score normalisieren sollten, so dass die Standardabweichung in allen Filmen gleich 1 ist. Wenn Sie beispielsweise gleiche Gewichte verwenden, wird jede Kategorie tatsächlich gleich gewichtet. Die Frage ist also, welche Arten von Gewichten Sie verwenden möchten. Offensichtlich sollten die Gewichte für die relative Anzahl der Ansichten und der Anteil der Likes positiv sein, und das Gewicht für den Anteil der Abneigungen sollte negativ sein, also multipliziere den Abneigungs-Score mit -1 und dann kannst du davon ausgehen, dass alle Gewichte positiv sind. Wenn Sie glauben, dass jede Kategorie mindestens 20% beitragen sollte, dann erhalten Sie, dass jedes Gewicht mindestens 0,2 mal die Summe der Gewichte ist. Wenn du glaubst, dass Abneigungen wichtiger sind als solche, dann kannst du sagen (Abneigung gegen Gewicht) & gt; = c * (wie Gewicht) für einige c & gt; 1, oder (dislike_weight) & gt; = c * (Summe der Gewichte) + (wie Gewicht) für einige c & gt; 0. In ähnlicher Weise können Sie andere lineare Einschränkungen für die Gewichtungen definieren, die Ihre Überzeugungen widerspiegeln, wie die Gewichte sein sollten, ohne exakte Werte für die Gewichtungen auszuwählen.
Jetzt kommt der spaßige Teil, der der Hauptstoß meines Posts ist. Wenn Sie lineare Ungleichheitsbedingungen für die Gewichtungen haben, die gesamte Form, dass eine lineare Kombination der Gewichtungen größer oder gleich 0 ist, aber Sie nicht wissen, welche Gewichtungen zu verwenden sind, können Sie einfach alle möglichen Top-10 berechnen oder Top-20-Rangfolgen von Filmen, die Sie für jede Wahl von Gewichten erhalten können, die Ihre Einschränkungen erfüllen, und wählen Sie dann die Top-k-Reihenfolge, die von der größten VOLUME von Gewichtungen unterstützt wird, wobei das Volumen der Gewichte der Raumwinkel der ist Polyederkonus von Gewichten, der zu der besonderen top-k-Ordnung führt. Wenn Sie dann die Top-K-Rangliste "Meist unterstützt" gewählt haben, können Sie die Scoring-Parameter auf den Bereich beschränken, in dem Sie diese Rangliste finden, und die Top-k-Filme entfernen und alle Möglichkeiten für die nächste Top-K-Bewertung berechnen. 10 oder Top-20-Rangliste der verbleibenden Filme, wenn die Gewichtung auf die Rangfolge der Original-Top-K-Filme beschränkt ist. Die Berechnung aller Top-k-Top-Rankings von Filmen für beschränkte Gewichtungen kann viel, viel schneller als das Aufzählen aller n (n-1) ... (n-k + 1) Top-k-möglichen Rangfolgen und das Ausprobieren aller vorgenommen werden. Wenn Sie zwei oder drei Kategorien haben, dann können unter Verwendung von Polytop-Konstruktionsverfahren die erreichbaren Top-k-Rankings in linearer Zeit in Bezug auf die Ausgabegröße berechnet werden, d. H. Die Anzahl der erreichbaren Top-k-Rankings. Der polyedrische Berechnungsansatz liefert auch die Ungleichungen, die den Kegel von Bewertungsgewichten definieren, die jede Top-k-Rangfolge angeben, auch in linearer Zeit, wenn Sie zwei oder drei Kategorien haben. Um dann das Volumen der Gewichte zu erhalten, die jede Rangordnung ergeben, triangulieren Sie den Kegel und schneiden sich mit der Einheitskugel und berechnen die Flächen der sphärischen Dreiecke, die Sie erhalten. (Wiederum lineare Komplexität, wenn die Anzahl der Kategorien 2 oder 3 ist).Wenn Sie außerdem Ihre Kategorien auf einen Bereich wie [0,50] und auf die nächste ganze Zahl runden, können Sie nachweisen, dass die Anzahl der erreichbaren Top-k-Rankings tatsächlich ziemlich klein ist, wenn die Anzahl der Kategorien 5 ist oder weniger. (Auch wenn Sie viele Filme haben und k ist hoch). Und wenn Sie die Reihenfolge für die aktuelle obere Gruppe von Filmen korrigieren und die Parameter auf den Konus beschränken, der die feste Top-Reihenfolge ergibt, wird dies die Ausgabegröße für die erhältlichen nächstbesten Top-k-Filme weiter einschränken. Die Ausgabegröße hängt (polynomiell) von k ab, weshalb ich empfehle, k = 10 oder 20 zu setzen und Top-k-Filme zu berechnen und das beste (größte Volumen) Ordnen und Reparieren zu wählen und dann die nächstbesten Top-k-Filme zu berechnen das respektiert die Reihenfolge der ursprünglichen top-k usw.
Wie auch immer, wenn dieser Ansatz für Sie ansprechend klingt (iterativ sukzessive Top-k-Rankings zu finden, die von der größten Menge an Gewichten unterstützt werden, die Ihre Gewichtsbeschränkungen erfüllen), lassen Sie es mich wissen und ich kann eine Writ-up-Ausgabe erstellen und veröffentlichen auf den polyedrischen Berechnungen benötigt sowie eine Verknüpfung zu Software, die Sie mit minimalen zusätzlichen Codierung auf Ihrem Teil tun können. In der Zwischenzeit hier ist ein Papier Ссылка Ich schrieb über eine ähnliche Studie von 7-Kategorie Hochschulranking Daten, wo die Gewichte einfach auf beschränkt waren alle sind nicht-negativ (die Verallgemeinerung auf willkürliche lineare Beschränkungen auf Gewichtungen ist einfach).
Da noch niemand darauf hingewiesen hat (und ich bin etwas überrascht), werde ich es tun. Das Problem mit einem Ranking-Algorithmus wir könnte sein, dass er auf unserer Sichtweise basiert. Was Sie sicherlich suchen, ist ein Algorithmus, der den medianen Benutzer Standpunkt berücksichtigt.
Das ist keine neue Idee. Netflix hatte es vor einiger Zeit, nur sie personalisierten es, basierend auf individuellen Selektionen. Wir suchen - wie gesagt - nach der besten User-Rangliste.
So, wie man es erreicht? Wie andere vorgeschlagen haben, suchen Sie nach einer Funktion R (L, D, V, U), die eine reelle Zahl für den Sortierschlüssel zurückgibt. R () ist wahrscheinlich ziemlich nichtlinear.
Dies ist ein klassisches maschinelles Lernproblem. Die "Trainingsdaten" bestehen aus Benutzerauswahlen. Wenn ein Benutzer einen Film auswählt, ist dies eine Aussage über die Güte des Rankings: die Auswahl eines hochrangigen ist ein Vertrauensvotum. Eine niedrigrangige Auswahl ist ein Tadel. Die Funktion R () sollte sich entsprechend überarbeiten. Zu Beginn kann das aktuelle Rangsystem verwendet werden, um das System so zu trainieren, dass es seine Auswahlen spiegelt. Von dort wird es sich an Benutzer-Feedback anpassen.
Es gibt verschiedene Schemata und eine große Forschungsliteratur zum maschinellen Lernen für solche Probleme: Regressionsmodellierung, neuronale Netzwerke, Repräsentationslernen usw. Siehe zum Beispiel die Wikipedia-Seite für einige Hinweise.
Ich könnte einige Regelungen vorschlagen, aber nur, wenn Interesse an diesem Ansatz besteht. Sagen Sie "Ja" in Kommentaren, wenn dies zutrifft.
Die Implementierung wird nicht trivial sein - sicherlich mehr als nur die Optimierung Ihrer likes
-Anweisung. Aber auf der positiven Seite können Sie behaupten, dass Ihre Kunden mit gutem Gewissen bekommen, was sie verlangen!
Ein einfacher Ansatz wäre, für jeden Durchschnitt einen geeigneten Skalierungsfaktor zu finden - und dann die "Gewichte" zu summieren. Der schwierige Teil wäre, die Skalierungsfaktoren zu optimieren, um die gewünschte Reihenfolge zu erzeugen.
Aus Ihren Beispieldaten könnte ein Startpunkt etwa lauten:
%Vor%AV = Durchschnittliche Aufrufe pro Tag: 5000 ist hoch, dividiere also durch 50, um das Gewicht in diesem Fall auf 100 zu reduzieren.
AL = Durchschnittliche Likes pro Tag: 100 in 3 Tagen = 33,33 ist hoch, also multiplizieren Sie mit 3, um das Gewicht in diesem Fall auf 100 zu erhöhen.
AD = Durchschnittliche Abneigungen pro Tag: 10.000 scheint hier ein extremer Wert zu sein - würde mit Jim Mischels Aussage übereinstimmen, dass Abneigungen vielleicht bedeutender sind als Likes, also gehe ich zunächst mit einem negativen Skalierungsfaktor von der doppelten Größe des "likes" -Formats.
Dies ergibt die folgenden Ergebnisse (siehe SQL Fiddle Demo ):
%Vor%[Ich bewege absichtlich so einfach, um die Idee eines Ausgangspunktes zu präsentieren - aber mit realen Daten können Sie finden, lineare Skalierung ist nicht ausreichend - in diesem Fall könnten Sie Bänder oder logarithmische Skalierung berücksichtigen.]
Wenn Sie einen geraden Prozentsatz von Ansichten verwenden, wird auch die Beliebtheit des Artikels nicht korrekt wiedergegeben. Obwohl 9 Likes von 18 "stärker" sind als 9 Likes von 500, ist die Tatsache, dass ein Video 500 Aufrufe hat und das andere nur 18 bekommt, ein viel stärkeres Anzeichen für die Popularität des Videos.
Ein Video mit vielen Ansichten bedeutet normalerweise, dass es bei einer Vielzahl von Zuschauern sehr beliebt ist. Dass es nur einen kleinen Prozentsatz von Likes oder Dislikes gibt, ist normalerweise zweitrangig. Ein Video, das eine kleine Anzahl von Ansichten und eine große Anzahl von Likes enthält, ist normalerweise ein Hinweis auf ein Video, das sehr eng ausgerichtet ist.
Wenn Sie Ansichten in die Gleichung einbeziehen möchten, würde ich vorschlagen, den Bayes-Durchschnitt, den Sie erhalten, von den Vorlieben und Abneigungen durch den Logarithmus der Anzahl der Ansichten zu multiplizieren. Das sollte die Dinge sehr gut regeln.
Wenn Sie keine Multi-Faktor-Rangliste erstellen möchten, werden Likes, Dislikes und Views jeweils separat gezählt und mit individuellen Gewichten versehen. Die Mathematik ist komplizierter und es bedarf einiger Feinabstimmungen, aber es führt tendenziell zu besseren Ergebnissen. Stellen Sie sich zum Beispiel vor, dass Leute ein Video, das sie leicht amüsant finden, oft "mögen", aber sie werden es nur "nicht mögen", wenn sie es als anstößig empfinden. Eine Abneigung ist eine viel stärkere Indikation als ein Gleiches.
Ich kann Sie auf eine nicht-parametrische Weise verweisen, um die bestmögliche Reihenfolge in Bezug auf ein gewichtetes lineares Scoring-System zu erhalten, ohne genau zu wissen, welche Gewichte Sie verwenden möchten (nur Einschränkungen für die Gewichte). Beachten Sie jedoch, dass durchschnittliche tägliche Aufrufe möglicherweise irreführend sind, da Filme in späteren Jahren wahrscheinlich weniger heruntergeladen werden. Das erste, was ich tun würde, wäre ein polynomiales Modell (Grad 10 sollte gut genug sein), das die Gesamtzahl der Ansichten als eine Funktion der Anzahl der Tage vorhersagt, an denen der Film verfügbar war. Dann, sobald Sie Ihren Fit haben, dann erhalten Sie für jedes Datum die vorhergesagte Gesamtanzahl der Views, die Sie teilen, um "relative durchschnittliche Anzahl der Views" zu erhalten, was ein Multiplikator ist, der Ihnen sagt, wie oft wahrscheinlicher (oder unwahrscheinlicher) der Film ist im Vergleich zu dem zu sehen, was Sie im Durchschnitt angesichts der Daten erwarten. So würde 2 bedeuten, dass der Film doppelt gesehen wird, und 1/2 bedeutet, dass der Film halb so oft gesehen wird. Wenn Sie wollen, dass 2 und 1/2 "Negative" voneinander sind, was aus einer Scoring-Perspektive sinnvoll ist, dann nehmen Sie das Protokoll des Multiplikators, um die Punktzahl zu erhalten.
Nun gibt es mehrere Größen, die Sie berechnen können, um sie in eine Gesamtpunktzahl einzubeziehen, wie die oben erwähnte (log.) "relative durchschnittliche Anzahl von Ansichten" und (Likes / Gesamtansichten) und (Abneigungen / Gesamtansichten). US News und World Report rangieren Universitäten jedes Jahr, und sie verwenden nur eine gewichtete Summe von 7 verschiedenen Kategorie-Scores, um eine Gesamtpunktzahl für jede Universität zu erhalten, nach der sie geordnet sind. Die Verwendung einer gewichteten linearen Kombination von Kategorienwerten ist definitiv kein schlechter Weg. (Beachten Sie, dass Sie bei einigen Kategorien möglicherweise eine Log-Transformation durchführen möchten, bevor Sie die lineare Kombination von Scores verwenden). Das Problem ist, dass Sie möglicherweise nicht genau wissen, welche Gewichte verwendet werden sollen, um das "wünschenswerteste" Ranking zu erhalten. Die erste Sache, die Sie beachten sollten, ist, dass Sie, wenn Sie die Gewichte im selben Maßstab haben möchten, jeden Kategorie-Score normalisieren sollten, so dass die Standardabweichung in allen Filmen gleich 1 ist. Wenn Sie beispielsweise gleiche Gewichte verwenden, wird jede Kategorie tatsächlich gleich gewichtet. Die Frage ist also, welche Arten von Gewichten Sie verwenden möchten. Offensichtlich sollten die Gewichte für die relative Anzahl der Ansichten und der Anteil der Likes positiv sein, und das Gewicht für den Anteil der Abneigungen sollte negativ sein, also multipliziere den Abneigungs-Score mit -1 und dann kannst du davon ausgehen, dass alle Gewichte positiv sind. Wenn Sie glauben, dass jede Kategorie mindestens 20% beitragen sollte, dann erhalten Sie, dass jedes Gewicht mindestens 0,2 mal die Summe der Gewichte ist. Wenn du glaubst, dass Abneigungen wichtiger sind als solche, dann kannst du sagen (Abneigung gegen Gewicht) & gt; = c * (wie Gewicht) für einige c & gt; 1, oder (dislike_weight) & gt; = c * (Summe der Gewichte) + (wie Gewicht) für einige c & gt; 0. In ähnlicher Weise können Sie andere lineare Einschränkungen für die Gewichtungen definieren, die Ihre Überzeugungen widerspiegeln, wie die Gewichte sein sollten, ohne exakte Werte für die Gewichtungen auszuwählen.
Jetzt kommt der spaßige Teil, der der Hauptstoß meines Posts ist. Wenn Sie lineare Ungleichheitsbedingungen für die Gewichtungen haben, die gesamte Form, dass eine lineare Kombination der Gewichtungen größer oder gleich 0 ist, aber Sie nicht wissen, welche Gewichtungen zu verwenden sind, können Sie einfach alle möglichen Top-10 berechnen oder Top-20-Rangfolgen von Filmen, die Sie für jede Wahl von Gewichten erhalten können, die Ihre Einschränkungen erfüllen, und wählen Sie dann die Top-k-Reihenfolge, die von der größten VOLUME von Gewichtungen unterstützt wird, wobei das Volumen der Gewichte der Raumwinkel der ist Polyederkonus von Gewichten, der zu der besonderen top-k-Ordnung führt. Wenn Sie dann die Top-K-Rangliste "Meist unterstützt" gewählt haben, können Sie die Scoring-Parameter auf den Bereich beschränken, in dem Sie diese Rangliste finden, und die Top-k-Filme entfernen und alle Möglichkeiten für die nächste Top-K-Bewertung berechnen. 10 oder Top-20-Rangliste der verbleibenden Filme, wenn die Gewichtung auf die Rangfolge der Original-Top-K-Filme beschränkt ist. Die Berechnung aller Top-k-Top-Rankings von Filmen für beschränkte Gewichtungen kann viel, viel schneller als das Aufzählen aller n (n-1) ... (n-k + 1) Top-k-möglichen Rangfolgen und das Ausprobieren aller vorgenommen werden. Wenn Sie zwei oder drei Kategorien haben, dann können unter Verwendung von Polytop-Konstruktionsverfahren die erreichbaren Top-k-Rankings in linearer Zeit in Bezug auf die Ausgabegröße berechnet werden, d. H. Die Anzahl der erreichbaren Top-k-Rankings. Der polyedrische Berechnungsansatz liefert auch die Ungleichungen, die den Kegel von Bewertungsgewichten definieren, die jede Top-k-Rangfolge angeben, auch in linearer Zeit, wenn Sie zwei oder drei Kategorien haben. Um dann das Volumen der Gewichte zu erhalten, die jede Rangordnung ergeben, triangulieren Sie den Kegel und schneiden sich mit der Einheitskugel und berechnen die Flächen der sphärischen Dreiecke, die Sie erhalten. (Wiederum lineare Komplexität, wenn die Anzahl der Kategorien 2 oder 3 ist).Wenn Sie außerdem Ihre Kategorien auf einen Bereich wie [0,50] und auf die nächste ganze Zahl runden, können Sie nachweisen, dass die Anzahl der erreichbaren Top-k-Rankings tatsächlich ziemlich klein ist, wenn die Anzahl der Kategorien 5 ist oder weniger. (Auch wenn Sie viele Filme haben und k ist hoch). Und wenn Sie die Reihenfolge für die aktuelle obere Gruppe von Filmen korrigieren und die Parameter auf den Konus beschränken, der die feste Top-Reihenfolge ergibt, wird dies die Ausgabegröße für die erhältlichen nächstbesten Top-k-Filme weiter einschränken. Die Ausgabegröße hängt (polynomiell) von k ab, weshalb ich empfehle, k = 10 oder 20 zu setzen und Top-k-Filme zu berechnen und das beste (größte Volumen) Ordnen und Reparieren zu wählen und dann die nächstbesten Top-k-Filme zu berechnen das respektiert die Reihenfolge der ursprünglichen top-k usw.
Wie auch immer, wenn dieser Ansatz für Sie ansprechend klingt (iterativ sukzessive Top-k-Rankings zu finden, die von der größten Menge an Gewichten unterstützt werden, die Ihre Gewichtsbeschränkungen erfüllen), lassen Sie es mich wissen und ich kann eine Writ-up-Ausgabe erstellen und veröffentlichen auf den polyedrischen Berechnungen benötigt sowie eine Verknüpfung zu Software, die Sie mit minimalen zusätzlichen Codierung auf Ihrem Teil tun können. In der Zwischenzeit hier ist ein Papier Ссылка Ich schrieb über eine ähnliche Studie von 7-Kategorie Hochschulranking Daten, wo die Gewichte einfach auf beschränkt waren alle sind nicht-negativ (die Verallgemeinerung auf willkürliche lineare Beschränkungen auf Gewichtungen ist einfach).
Ein einfacher Ansatz wäre, für jeden Durchschnitt einen geeigneten Skalierungsfaktor zu finden - und dann die "Gewichte" zu summieren. Der schwierige Teil wäre, die Skalierungsfaktoren zu optimieren, um die gewünschte Reihenfolge zu erzeugen.
Aus Ihren Beispieldaten könnte ein Startpunkt etwa lauten:
%Vor%AV = Durchschnittliche Aufrufe pro Tag: 5000 ist hoch, dividiere also durch 50, um das Gewicht in diesem Fall auf 100 zu reduzieren.
AL = Durchschnittliche Likes pro Tag: 100 in 3 Tagen = 33,33 ist hoch, also multiplizieren Sie mit 3, um das Gewicht in diesem Fall auf 100 zu erhöhen.
AD = Durchschnittliche Abneigungen pro Tag: 10.000 scheint hier ein extremer Wert zu sein - würde mit Jim Mischels Aussage übereinstimmen, dass Abneigungen vielleicht bedeutender sind als Likes, also gehe ich zunächst mit einem negativen Skalierungsfaktor von der doppelten Größe des "likes" -Formats.
Dies ergibt die folgenden Ergebnisse (siehe SQL Fiddle Demo ):
%Vor%[Ich bewege absichtlich so einfach, um die Idee eines Ausgangspunktes zu präsentieren - aber mit realen Daten können Sie finden, lineare Skalierung ist nicht ausreichend - in diesem Fall könnten Sie Bänder oder logarithmische Skalierung berücksichtigen.]
Jedes Video hat:
Also können wir die folgenden Parameter von ihnen abziehen:
like_rate = likes / Ansichten
dislike_rate = likes / Ansichten
view_rate = views / number_of_website_users
video_age = count_days (Upload_Datum, heute)
avg_views = Ansichten / upload_age
avg_likes = likes / upload_age
avg_dislikes = dislikes / upload_age
Bevor wir die zu verwendende Formel festlegen können, müssen wir angeben, wie die verschiedenen Videos funktionieren sollen. Eine Möglichkeit ist, die Eigenschaft eines populären Videos in Punkten zu erklären:
Ein beliebtes Video ist in den meisten Fällen ein neues Video
Je älter ein Video wird, desto höhere avg_views benötigt es, um populär zu werden
Ein Video mit einer like_rate über like_rate_threshold oder einer dislike_rate über dislike_rate_threshold kann mit der Differenz zu seinem Grenzwert konkurrieren, wie alt es wird
Eine hohe view_rate eines Videos ist ein guter Indikator dafür, dass ein Video für einen Nutzer vorgeschlagen wird, der es vorher nicht angesehen hat
Wenn avg_likes oder avg_dislikes die meisten avg_views machen, wird das Video in der Zwischenzeit als aktiv angesehen, im Falle aktiver Videos müssen wir nicht wirklich überprüfen, wie alt es ist
Fazit: Ich habe keine Formel, aber man kann konstruiert werden, indem man eine Einheit in eine andere umrechnet, wie man ein Videoalter nach Tagen abschneidet, basierend auf einer Berechnung, die mit avg_likes, avg_dislikes und avg_views
gemacht wurdeDa noch niemand darauf hingewiesen hat (und ich bin etwas überrascht), werde ich es tun. Das Problem mit einem Ranking-Algorithmus wir könnte sein, dass er auf unserer Sichtweise basiert. Was Sie sicherlich suchen, ist ein Algorithmus, der den medianen Benutzer Standpunkt berücksichtigt.
Das ist keine neue Idee. Netflix hatte es vor einiger Zeit, nur sie personalisierten es, basierend auf individuellen Selektionen. Wir suchen - wie gesagt - nach der besten User-Rangliste.
So, wie man es erreicht? Wie andere vorgeschlagen haben, suchen Sie nach einer Funktion R (L, D, V, U), die eine reelle Zahl für den Sortierschlüssel zurückgibt. R () ist wahrscheinlich ziemlich nichtlinear.
Dies ist ein klassisches maschinelles Lernproblem. Die "Trainingsdaten" bestehen aus Benutzerauswahlen. Wenn ein Benutzer einen Film auswählt, ist dies eine Aussage über die Güte des Rankings: die Auswahl eines hochrangigen ist ein Vertrauensvotum. Eine niedrigrangige Auswahl ist ein Tadel. Die Funktion R () sollte sich entsprechend überarbeiten. Zu Beginn kann das aktuelle Rangsystem verwendet werden, um das System so zu trainieren, dass es seine Auswahlen spiegelt. Von dort wird es sich an Benutzer-Feedback anpassen.
Es gibt verschiedene Schemata und eine große Forschungsliteratur zum maschinellen Lernen für solche Probleme: Regressionsmodellierung, neuronale Netzwerke, Repräsentationslernen usw. Siehe zum Beispiel die Wikipedia-Seite für einige Hinweise.
Ich könnte einige Regelungen vorschlagen, aber nur, wenn Interesse an diesem Ansatz besteht. Sagen Sie "Ja" in Kommentaren, wenn dies zutrifft.
Die Implementierung wird nicht trivial sein - sicherlich mehr als nur die Optimierung Ihrer SELECT
-Anweisung. Aber auf der positiven Seite können Sie behaupten, dass Ihre Kunden mit gutem Gewissen bekommen, was sie verlangen!
Tags und Links algorithm mysql statistics sorting ranking