Mit Momenten ungefähre Quantile für einen Strom von ganzen Zahlen berechnen?

20

aus math.stackexchange migriert .

Ich verarbeite einen langen Strom von ganzen Zahlen und überlege, einige Momente nachzuverfolgen, um ungefähr verschiedene Perzentile für den Strom berechnen zu können, ohne viele Daten zu speichern. Was ist der einfachste Weg, um Perzentile von wenigen Augenblicken an zu berechnen? Gibt es einen besseren Ansatz, bei dem nur eine kleine Datenmenge gespeichert wird?

jonderry
quelle
2
Wissen Sie etwas Spezifisches über die Verteilungseigenschaften Ihres Streams? Sind sie zum Beispiel positiv? Beschränkt? Alle anderen Angaben, die Sie machen können, sind hilfreich. Momente sind ziemlich einfach zu berechnen und für einen Stream zu speichern. Hier finden Sie auch frühere Fragen zum direkten Abschätzen von Quantilen aus einem Stream. Dies klingt nach dem, was Sie wirklich versuchen. Sie könnten diese suchen und durchsehen.
Kardinal
Sie stellen die Verarbeitungszeiten dar, sind also positiv und meistens eng gruppiert, es sei denn, das System weist ein technisches Problem oder eine Überlastung auf. Ich werde nach den Quantilfragen suchen; Sie könnten gut genug sein. Trotzdem bin ich gespannt, wie ich von einem Moment zum nächsten übergehen kann, um den Wert eines beliebigen Perzentils zu berechnen. Ich weiß, dass das Speichern von Momenten einfach ist. Ich weiß nicht, wie man sie verwendet.
jonderry
Hast du diese Frage gesehen ?
Kardinal

Antworten:

15

Sie geben dies nicht explizit an, aber aus Ihrer Beschreibung des Problems geht hervor, dass Sie wahrscheinlich nach einer stark voreingenommenen Menge von Quantilen suchen (z. B. 50., 90., 95. und 99. Perzentile).

In diesem Fall habe ich mit der in "Effektive Berechnung von verzerrten Quantilen über Datenströme" von Cormode et al. Beschriebenen Methode große Erfolge erzielt. Es ist ein schneller Algorithmus, der wenig Speicher benötigt und einfach zu implementieren ist.

Die Methode basiert auf einem früheren Algorithmus von Greenwald und Khanna, der eine kleine Stichprobe des Eingabestroms zusammen mit einer oberen und einer unteren Grenze für den Rang der Werte in der Stichprobe verwaltet. Es benötigt mehr Platz als eine Sammlung von wenigen Augenblicken, kann jedoch den interessanten Endbereich der Verteilung viel genauer beschreiben.

NPE
quelle
1
Ja, das ist in der Tat der richtige Weg. Tatsächlich ist es etwas einfacher, Schätzungen der hohen Quantile zu erhalten, insbesondere wenn Sie bereit sind, Fehler im Rang des Formulars zu tolerieren, wobei die Gesamtzahl der Elemente ist und \ epsilon> 0 $ ein Benutzer ist definierter Fehler Begriffnϵnn
Suresh Venkatasubramanian
2

Dafür gibt es einen neueren und viel einfacheren Algorithmus, der sehr gute Schätzungen der extremen Quantile liefert.

Die Grundidee ist, dass kleinere Bins an den Extremen so verwendet werden, dass sowohl die Größe der Datenstruktur begrenzt als auch eine höhere Genauigkeit für kleine oder große garantiert wird . Der Algorithmus ist in mehreren Sprachen und in vielen Paketen verfügbar. Die MergingDigest-Version erfordert keine dynamische Zuordnung. Sobald die MergingDigest-Instanz erstellt wurde, ist keine weitere Heap-Zuordnung erforderlich.q

Siehe https://github.com/tdunning/t-digest

Ted Dunning
quelle