ich habe folgendes Scenario: Es gibt ein Tool in welchem Benutzer einen Knopf drücken können wenn ein gewisses Ereignis passiert ist (unabhängig von dem Tool, wie z.B. wenn es Regnet). Diese Usereingabe wird nun an einen Server geschickt welcher es in einer Datenbank speichert (z.B. "User X hat zu folgendem Timestamp bestätigt das es Regnet").
Mein Ziel ist es jetzt, aus all diesen Daten die von mehreren Tausend Benutzern übertragen wurden, herauszufinden wann es angefangen hat zu Regnen. Das Problem ist, es hat sicherlich nicht jeder User zur gleichen Sekunde den Knopf gedrückt. Zudem gibt es einigermaßen viele fehl-angaben wo jemand absichtlich oder versehentlich zu einem zufälligen Zeitpunkt den Knopf gedrückt hat, sowie Leute die absichtlich pausenlos den Knopf drücken.
Die frage ist jetzt, wie bekomme ich am geschicktesten heraus, zu welchem Zeitpunkt gehäuft die meisten Einträge vorhanden sind? Ich habe einen haufen Timestamps und muss daraus berechnen wann es angefangen hat zu Regnen. Als kleine neben Regel gibt es noch die Tatsache, dass mindestens 10 Stunden zwischen jedem Regen liegen.
Hi, ich hab sowas noch nicht selber gemacht. Aber bei sowas würde ich die Events zeitlich zusamenzählen (zB. meldungen pro Min, 5 Min, ...). Daraus kann man dann eine Funktion abhängig vom zeitlichen Verlauf berechnen. Dann würde ich über den Ansteig dieser gehen (damit man unabhängig von festen Zahlen und noise ist). Bei einer Steigerung von zB. 60% wäre dann "regen".
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich zögere gerade ein bisschen mit Antworten, weil ich glaube, dass du dein Problem auf ein anderes übertragen hast. Da ists oft schwierig, eine angemessene Lösung zu produzieren. Ist das richtig, und wenn ja, kannst du bitte dein Originalproblem beschreiben?
viele grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Naja ist jetzt nun kein ungewöhnliches Problem. Dein Hauptproblem ist halt nur das der Regen nicht bloß eine Sekunde dauert.
- Group By über Zeit durch X - Sum(1) über die Gruppe - Wenn die Summe größer X ist dann hast du einen Eintrag - du brauchst ein Running Value für das Offset zum nächstmöglichen Startpunkt - du brauchst ein Running Value für die Länge vom aktuellen möglichen Startpunkt - potenziellen Startpunkt ermitteln (muss größer Offset sein) - wenn die Länge größer X ist,dann ist es ein Regen. - wenn es ein Regen ist, dann ist Offset = Offset + Länge + deine 10 Stunden
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was du machst sind statistische Auswertungen. Du willst z.B. Ausreiser eleminieren (wenn jemand ein Ereignis aus Spass meldet) Um solche Auswertungen zu machen, musst du die Natur der Verteilung kennen. Sind deine Ergebnisse Normalverteilt? Gibt es Gruppen? Ist es eine HockeyStick verteilung oder eine Badewannenkurve?
Ich denke hier kann dir ein Statistiker weiter helfen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Wenn es wirklich sehr viele Einträge sind, kannst Du einfach den Mittelwert bilden. Die Ausreißer sollten dann nicht ins Gewicht fallen. Evtl. noch nen Schwellenwert festlegen, um zu prüfen, ob das Ereignis auch stattgefunden hat, oder nur ein paar Spaßvögel gedrückt haben.
Wenn es nicht so viele Einträge wären, würde ich einfach Intervalle definieren, z.B. alle 10 Minuten, und die Einträge entsprechend reinschieben. Für den genauen Zeitpunkt kannst Du auch hier einfach über die Zeiten innerhalb der relevanten Intervalle mitteln.
Über die Art der Verteilung würd ich mir keine Gedanken machen. Sollten zwar annähernd normalverteilt sein, wenn sie im wesentlichen von der Eingabe eines menschlichen Nutzers abhängen, allerdings frag ich mich, ob das bei so einer inhomogenen Größe wie in dem Bespiel hier noch auffällt. Mittelwert sollte reichen. Problematisch wirds bloß, wenn absichtlich viele Einträge an gewissen Zeiten konzentriert geschickt werden. Aber da könnte man ja auch ohne Probleme eine Normalverteilung vortäuschen...
_________________ "Pixel, ich bin dein Vater." -Darf Shader
Hi Flash, welcher von denen würde hier außer dem arithmetischen Mittelwert Sinn machen? -Modus ist der häufigste Wert. (bei {1,1,100,101,102,103} wäre das 1) -Median der mittlere Wert (bei {1,2,1000} wäre das 2...) -Gewichtete Mittel erhält man wenn man die Ereignisse unterschiedlich stark wichtet...
Eine Gleichverteilung ist hier garantiert nicht zu erwarten, die hast Du z.B. bei einem idealen Würfel. Trotzdem kannst Du das arithmetische Mittel, auch empirischer Erwartungswert genannt, für beliebige Verteilungen bilden.
_________________ "Pixel, ich bin dein Vater." -Darf Shader
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bei solchen Zahlen würde es halt Sinn machen nach Gruppen zu suchen. Z.B. gibt es wohl bei deiner ersten Reihe eine Gruppe bei "1" und eine bei "101". Jede dieser Gruppen zeichnet aus, dass sie nur eine geringe Streuung hat.
Wie gesagt: Der Versuch eine Zahlenmenge auf genau 1 Kennzahl zu reduzieren macht je nach Verteilung wenig sinn, denn diese Kennzahl kann einen Bereich in deiner Menge beschreiben, der selbst gar nicht vorkommt oder unwichtig ist.
Aber ich bin auch kein Statistiker. Ich würde nur halt mit dem konkreten Problem mal zu einem Gehen. An den Mathe-Fakultäten rennen da genug rum. Und Mathematiker mögen es üblicherweise, wenn sie anstatt blöd angeguckt zu werden, mal ihre Fachkenntnisse konkret anwenden dürfen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.