Was ist der beste Weg, Trendthemen oder Tags zu berechnen?
Viele Websites bieten einige Statistiken wie "Die heißesten Themen der letzten 24h". Zum Beispiel, Topix.com zeigt diese in der Rubrik "News Trends". Dort können Sie sehen, die Themen, die am schnellsten wachsende Zahl von Nennungen.
Möchte ich berechnen, wie einen "buzz" für ein Thema, auch. Wie könnte ich dies tun? Sollte der Algorithmus das Gewicht der Themen, die immer heiß weniger. Die Themen, die in der Regel (fast) niemand erwähnt sollte der heißesten diejenigen.
Google bietet "Hot Trends", topix.com zeigt "Hot Topics", fav.oder.es zeigt, "Keyword Trends" - alle diese Dienste haben eines gemeinsam: Sie zeigen nur Sie die kommenden trends, die ungewöhnlich heiß im moment.
Begriffe wie "Britney Spears", "Wetter" oder "Paris Hilton" erscheinen nicht in diese Listen, da Sie immer heiß und Häufig. Dieser Artikel nennt das "Die Britney Spears Problem".
Meine Frage: Wie kann man code einen Algorithmus oder ein vorhandenes verwenden, um dieses problem zu lösen? Eine Liste mit den Stichwörtern gesucht, die in den letzten 24h, sollte der Algorithmus zeigen Ihnen die 10 (zum Beispiel), die angesagtesten diejenigen.
Ich weiß, in dem Artikel oben, es gibt eine Art Algorithmus erwähnt. Ich habe versucht, den code in PHP aber ich glaube nicht, dass es dann funktioniert. Es findet nur die Mehrheit, nicht wahr?
Ich hoffe Ihr könnt mir helfen (Codierung Beispiele wären toll).
InformationsquelleAutor der Frage caw | 2009-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benötigen Sie einen Algorithmus, der misst die Geschwindigkeit, die ein Thema - oder in anderen Worten, wenn Sie das Diagramm Sie wollen, um zu zeigen, diejenigen, die gehen bis zu einer unglaublichen Geschwindigkeit.
Dies ist die erste Ableitung der trend-Linie, und es ist nicht schwer zu integrieren als ein gewichteter Faktor Ihrer gesamtkalkulation.
Normalisieren
Einer Technik, die Sie tun müssen, ist, zu normalisieren alle Ihre Daten. Für jedes Thema, dem Sie Folgen, halten Sie ein sehr low-pass-filter, der definiert, dass Thema Grundlinie. Nun wird jeder Datenpunkt, der kommt in etwa an das Thema normalisiert werden sollen - Basislinie subtrahieren und erhalten Sie ALLE Ihre Themen in der Nähe von 0, mit spikes oben und unten die Linie. Sie können stattdessen auch teilen möchten, und das signal von der Grundlinie Größenordnung, die bringen das signal auf etwa 1.0 - das bringt nicht nur alle Signale, die in einer Linie zueinander (normalisiert der Grundlinie), sondern normalisiert auch die spikes. Britney spike geht um Größenordnungen größer als jemand anderes ist Spitze, aber das bedeutet nicht, sollten Sie zahlen Aufmerksamkeit auf Sie - die Spitze kann sehr klein im Verhältnis zu Ihrer Grundlinie.
Ableiten
Sobald Sie haben alles normalisiert, Abbildung aus der Steigung des jeweiligen Themas. Nehmen Sie zwei aufeinander folgende Punkte, und Messen Sie den Unterschied. Eine positive Differenz ist trending up, eine negative Differenz ist nach unten verlaufende. Dann können Sie vergleichen der normalisierten Differenzen, und finden Sie heraus, welche Themen Sie Schießen nach oben in der Beliebtheit im Vergleich zu anderen Themen - mit jedem Thema skaliert entsprechende eigene 'normal' werden können Größenordnungen von um von anderen Themen.
Dies ist wirklich ein first-pass-auf das problem. Es gibt mehr fortgeschrittene Techniken, die Sie verwenden müssen (meist eine Kombination der oben genannten mit anderen algorithmen gewichtet, um Ihre Bedürfnisse anzupassen), aber es sollte genug sein, zum du zu erhalten begannen.
Über den Artikel
Der Artikel ist über das Thema trending, aber es geht nicht darum, wie zu berechnen, was heiß ist und was nicht, es geht darum, wie die Verarbeitung der riesigen Menge von Informationen, dass solch ein Algorithmus verarbeiten muss, an Orten wie Lycos und Google. Der Raum und die Zeit, die benötigt wird, um jedes Thema einen Zähler, und finden Sie jedes Thema ist Zähler, wenn Sie eine Suche auf es durch geht, ist riesig. Dieser Artikel ist über die Herausforderungen, denen man gegenübersteht, wenn der Versuch einer solchen Aufgabe. Er erwähnt, dass die Brittney-Effekt, aber es muss nicht darüber reden, wie Sie zu überwinden.
Als Nixuz Punkte aus dieser wird auch bezeichnet als Z-oder Standard-Partitur.
InformationsquelleAutor der Antwort Adam Davis
Dieses problem fordert eine z-score-oder standard-score berücksichtigt die historischen Durchschnitt, als andere Leute haben erwähnt, sondern auch die Standardabweichung von diesem historischen Daten, so dass es robuster als der Durchschnitt.
In Ihrem Fall ein z-score wird nach folgender Formel berechnet, wo der trend wäre ein tarif wie z.B. views /Tag.
Wenn ein z-score ist, desto höher oder niedriger der z-score, die mehrere abnorme der trend, so zum Beispiel, wenn der z-score ist sehr positiv, der trend ist unnormal ansteigt, während, wenn es sehr negativ ist es ungewöhnlich fallen. Also, wenn Sie berechnen Sie die z-score für alle Kandidaten trends die höchsten 10 z-scores beziehen sich auf die ungewöhnlich steigenden z-scores.
Finden Sie Wikipedia weitere Informationen über z-scores.
Code
Beispiel-Ausgabe
Hinweise
Können Sie diese Methode mit einem gleitenden Fenster (d.h. in den letzten 30 Tagen) wenn Sie möchten, nehmen zu viel von der Geschichte zu berücksichtigen, die kurzfristigen trends stärker ausgeprägt und kann nach unten geschnitten auf die Bearbeitungszeit.
Konnte man auch mit einer z-score-Werte wie die änderung in den Ansichten von einem Tag auf den nächsten Tag zu suchen, die abnorme Werte für die Erhöhung/Verringerung Aufrufe pro Tag. Das ist wie mit der Steigung oder Ableitung der Ansichten pro Tag Diagramm.
Wenn Sie verfolgen die aktuelle Größe der population, die aktuelle Gesamtzahl der Bevölkerung und die aktuelle Summe von x^2 aus der Bevölkerung, brauchen Sie nicht neu zu berechnen diese Werte, nur aktualisieren Sie Sie, und daher müssen Sie nur halten Sie diese Werte für die Geschichte, nicht jeder Wert. Der folgende code veranschaulicht dies.
Mithilfe dieser Methode können Sie Ihre Arbeit fließen würde wie folgt Aussehen. Für jedes Thema, tag, oder eine Seite erstellen, die eine floating-point-Feld für die Anzahl der Tage, die Summe der Ansichten, und die Summe der Ansichten squared in Ihrer Datenbank. Wenn Sie historische Daten, initialisieren Sie diese Felder verwenden, die Daten anders initialisieren auf null. Am Ende eines jeden Tages, die Berechnung der z-score mit der heutigen Anzahl der Ansichten, die gegen die historischen Daten, die in den drei Feldern der Datenbank. Die Themen, tags, oder Seiten, die mit der höchsten X-z-scores sind Ihre X "heißesten trends" des Tages. Schließlich aktualisieren jedes der 3 Felder mit dem Tag-Wert und wiederholen Sie den Vorgang morgen.
Neuzugang
Normalen z-scores wie oben beschrieben nicht berücksichtigt werden, die die Reihenfolge der Daten und damit der z-score für die Beobachtung von '1' oder '9' hätte die gleiche Größenordnung gegen die Reihenfolge [1, 1, 1, 1, 9, 9, 9, 9]. Offensichtlich für die trend zu finden, die aktuelle Daten, sollte mehr Gewicht haben, als ältere Daten und deshalb möchten wir die '1' Beobachtung zu haben, eine größere Größe-score als die '9' Beobachtung. Um dies zu erreichen, schlage ich vor, eine schwimmende durchschnittlichen z-score. Es sollte klar sein, dass diese Methode NICHT garantiert werden statistisch Klang, aber sollte nützlich sein für die trend zu finden oder ähnliches. Der Hauptunterschied zwischen der standard-z-score und den schwimmenden durchschnittlichen z-score ist die Verwendung einer schwimmenden Durchschnitt zu berechnen, die dem Durchschnitt der Bevölkerung Wert und dem Durchschnitt der Bevölkerung Wert quadriert. Siehe code für details:
Code
Probe IO
Update
Als David Kemp korrekt darauf hingewiesen, dass, wenn gegeben, eine Reihe von Konstante Werte und dann ein zscore für einen beobachteten Wert unterscheidet sich damit von den anderen Werten angefordert wird, sollte das Ergebnis vermutlich ungleich null sein. In der Tat ist der Wert, der zurückgegeben werden soll infinity. Also änderte ich diese Zeile,
:
Diese änderung spiegelt sich in der fazscore Lösung code. Wenn man Sie nicht behandeln möchten, mit unendlich vielen Werte eine akzeptable Lösung sein könnte, um stattdessen ändern Sie die Zeile auf:
InformationsquelleAutor der Antwort
Tschad Birken und Adam Davis ist korrekt, dass Sie haben, um rückwärts zu schauen, um eine Grundlinie festzulegen. Ihre Frage, wie Sie formuliert sind, lässt vermuten, dass Sie nur wollen, um Daten aus der Vergangenheit 24 Stunden, und das nicht ganz zu Fliegen.
Eine Möglichkeit zu geben, Ihre Daten, mit einem Speicher ohne eine Abfrage für einen großen Fundus an historischen Daten ist die Verwendung einer exponential moving average. Der Vorteil dieser ist, dass Sie aktualisieren können, diese einmal pro Periode und dann Spülen Sie alle alten Daten, so brauchen Sie nur daran zu erinnern, einen einzigen Wert. Also, wenn Ihre Periode ist ein Tag, Sie zu pflegen haben eine "Tagesdurchschnitt" - Attribut für jedes Thema, die Sie tun können, durch:
Wo
a_n
ist der gleitende Durchschnitt als der Tagn
ist b einige Konstante zwischen 0 und 1 (je näher an 1, desto länger ist der Speicher) und diec_n
ist die Anzahl Treffer am Tagn
. Das schöne ist, wenn Sie dieses update durchführen am Ende des Tagesn
können Sie flushc_n
unda_(n-1)
.Die einzige Einschränkung ist, dass es anfangs empfindlich auf was auch immer Sie wählen für Ihren anfänglichen Wert von
a
.BEARBEITEN
Wenn es hilft, visualisieren Sie diesen Ansatz nehmen
n = 5
a_0 = 1
undb = .9
.Sagen wir mal die neuen Werte sind 5,0,0,1,4:
Sieht nicht sehr viel wie ein Durchschnittlicher nicht? Beachten Sie, wie der Wert blieb nahe bei 1 liegt, auch wenn unsere nächsten Eingang war 5. Was ist Los? Wenn Sie erweitern Sie sich ausrechnen, was Sie bekommen:
Was meine ich mit übrig gebliebenen Gewicht? Gut, in jedem Durchschnitt aller GEWICHTE muss hinzufügen 1. Wenn n waren unendlich und das ... könnte ewig so weitermachen, dann werden alle GEWICHTE würde eine Summe von 1. Aber wenn n relativ klein ist, bekommen Sie eine gute Menge an Gewicht, die Links auf die original-Eingabe.
Wenn Sie die Studie der oben genannten Formel, Sie sollten erkennen, ein paar Dinge über diese Verwendung:
Ich denke, dass die ersten beiden Eigenschaften sind genau das, was Sie suchen. Um Ihnen eine Idee geben, einfach diese sein kann, zu implementieren, hier ist eine python-Implementierung (minus alle Datenbank-Interaktion):
InformationsquelleAutor der Antwort David Berger
In der Regel "buzz" wird herausgefunden, mit irgendeiner form von exponential - /log-decay-Mechanismus. Für einen überblick darüber, wie Hacker News, Reddit und andere behandeln Sie diese in einem einfachen Weg, siehe dieser Beitrag.
Diese nicht vollständig auf die Dinge, sind immer beliebt. Was du suchst, scheint sowas wie Google ' s " Heiße Trends " - Funktion. Für das, könnten Sie dividiert den aktuellen Wert durch einen historischen Wert und subtrahieren Sie dann heraus, diejenigen, die unten sind einige Geräusch-Schwellenwert.
InformationsquelleAutor der Antwort Jeff Moser
Ich denken Sie Schlüssel-Wort, das Sie brauchen, um zu bemerken, ist "ungewöhnlich". Um zu ermitteln, Wann etwas "abnormal", müssen Sie wissen, was normal ist. Das heißt, Sie gehen zu müssen, um historische Daten, die Sie im Durchschnitt können, um herauszufinden, die normale rate von einer bestimmten Abfrage. Können Sie ausschließen möchten abnorme Tagen ab der Mittelung Berechnung, aber das brauchen wir genug Daten bereits, so dass Sie wissen, welche Tage auszuschließen.
Von dort aus haben Sie einen Schwellenwert festlegen (die nur Experimentieren, ich bin mir sicher), und wenn etwas geht, die außerhalb der Schwelle, sagen wir 50% mehr Suchanfragen als normal, können Sie halte es für einen "trend". Oder, wenn Sie wollen in der Lage sein, um die "Top X "Angesagtesten" wie du Sie erwähnt hast, brauchen Sie nur, um Dinge wie weit (in Prozent-Weise) sind Sie außerhalb Ihrer normalen rate.
Zum Beispiel, sagen, dass Ihre historischen Daten hat sagte Sie, dass Britney Spears wird in der Regel mit 100.000 Suchanfragen, und Paris Hilton wird in der Regel bei 50.000. Wenn Sie einen Tag wo Sie beide bekommen 10.000 mehr sucht als normal ist, sollten Sie erwägen, Paris "heißer" als Britney, weil Ihre sucht um 20% erhöht, mehr als normal, während Britney ' s waren nur 10%.
Gott, ich kann nicht glauben, ich schrieb einen Absatz Vergleich der "Schärfe" von Britney Spears und Paris Hilton. Was hast du mir angetan?
InformationsquelleAutor der Antwort Chad Birch
Ich Frage mich, ob es überhaupt möglich ist, verwenden Sie regelmäßig die Physik-Beschleunigung Formel in so einem Fall?
Können wir betrachten v1, initial sein mag/Stimmen/Anzahl-der-Kommentare pro Stunde und v2 ist der aktuelle "Geschwindigkeit" pro Stunde in den letzten 24 Stunden?
Dies ist mehr wie eine Frage als eine Antwort, doch scheint es, kann nur funktionieren. Inhalte mit höchster Beschleunigung das trending topic...
Ich bin sicher, dass dies möglicherweise nicht lösen Britney Spears problem 🙂
InformationsquelleAutor der Antwort Sap
wahrscheinlich eine einfache Steigung Thema Frequenz arbeiten würde -- große positive Steigung = schnell zu wachsen in der Popularität.
die einfachste Möglichkeit wäre, bin die Anzahl der durchsuchten jeden Tag, so haben Sie etwas, das wie
und dann finden Sie heraus, wie viel es verändert sich von Tag zu Tag:
und nur für eine Art von Schwelle, so dass die Tage, wo der Anstieg > 50 gelten als 'hot'. Sie konnte machen dies viel komplizierter, wenn Sie möchten, zu. vielmehr als die absolute Differenz, die Sie ergreifen können, der relative Unterschied so, dass der Gang von 100 auf 150 ist als heiß, aber 1000 bis 1050 nicht. oder ein komplizierter Verlauf, berücksichtigt trends über mehr als nur einem Tag zum nächsten.
InformationsquelleAutor der Antwort Autoplectic
Könnten Sie log-likelihood-ratios vergleichen des aktuellen Datums mit dem letzten Monat oder Jahr. Dies ist statistisch sound (gegeben, dass Ihre Veranstaltungen sind nicht normal verteilt ist, ist davon auszugehen, dass von deiner Frage).
Sortieren Sie alle Ihre Begriffe von logLR und wählen Sie die top-ten.
PS, TermBag ist eine ungeordnete Sammlung von Wörtern. Für jedes Dokument, das Sie erstellen Sie eine Tasche von Bedingungen. Nur zählen die vorkommen von Wörtern. Dann wird die Methode
occurrences
gibt die Anzahl der vorkommen eines gegebenen Wortes, und die Methodesize
gibt die Gesamtzahl der Wörter. Am besten ist es, normalisieren Sie die Worte irgendwie, in der RegeltoLowerCase
ist gut genug. Natürlich, in den oben genannten Beispielen würden Sie ein Dokument erstellen mit alle Anfragen von heute, und eine mit allen Abfragen des letzten Jahres.InformationsquelleAutor der Antwort akuhn
Musste ich arbeitete an einem Projekt, wo mein Ziel war es, Trend-Themen aus dem Live-Twitter-Stream und das auch tun sentimental Analyse auf die Trend-Themen (finden, wenn Trending Thema positiv/negativ gesprochen). Ich habe Sturm für die Handhabung von twitter-stream.
Habe ich veröffentlicht meinen Bericht als blog: http://sayrohan.blogspot.com/2013/06/finding-trending-topics-and-trending.html
Habe ich schon genutzt Gesamt Anzahl-und Z-Score für das ranking.
Der Ansatz, den ich verwendet habe, ist etwas generisch, und in der Diskussion Abschnitt habe ich erwähnt, dass, wie erweitern wir das system für nicht-Twitter-Anwendung.
Hoffe die information hilft.
InformationsquelleAutor der Antwort Rohan Karwa
Wenn du einfach mal auf tweets oder status-Nachrichten, um Ihre Themen, wirst du auch eine Menge Lärm. Auch wenn Sie entfernen Sie alle stop-Wörter. Ein Weg, um eine bessere Teilmenge Thema Kandidaten ist, sich nur auf tweets/Nachrichten, die eine URL und die keywords aus dem Titel jener web-Seiten. Und stellen Sie sicher, anwenden, POS-tagging zu bekommen, Nomen + Nomen-Phrasen als gut.
Titeln von web-Seiten in der Regel sind mehr beschreibend und enthalten Wörter, die beschreiben, was die Seite über ist. Darüber hinaus teilen eine web-Seite in der Regel korreliert mit Austausch von Neuigkeiten, ist das brechen (dh, wenn eine Berühmtheit wie Michael Jackson gestorben ist, sind Sie gehen, um eine Menge von Menschen teilen sich ein Artikel über seinen Tod).
Ich habe lief Experimente, bei denen ich nur die beliebtesten keywords aus dem Titel UND dann die gesamtaktivität der diese keywords über alle status-Nachrichten, und Sie auf jeden Fall entfernen Sie eine Menge Lärm. Wenn Sie es auf diese Weise, Sie brauchen keine komplexen algorith -, nur eine einfache Reihenfolge der keyword-Frequenzen, und Sie sind auf halbem Weg gibt.
InformationsquelleAutor der Antwort Henley Chiu
Die Idee ist, zu verfolgen, wie die Dinge und bemerken, wenn Sie springen deutlich wie im Vergleich zu Ihrer eigenen Grundlinie.
So, für Abfragen, die mehr als eine bestimmte Schwelle, die Verfolgung jeder eins, und wenn es änderungen auf einen Wert (sagen fast das doppelte) von seinen historischen Wert, dann ist es eine neue heiße trend.
InformationsquelleAutor der Antwort Joshua