[gelöst] Stochastik / Mathefuchs / Regenwahrscheinlichkeit über 24h berechnen

Begonnen von holle75, 21 März 2019, 17:28:32

Vorheriges Thema - Nächstes Thema

holle75

Es ist einfach zu lange her ;)

Ich möchte aus 24 stündlichen Einzelwahrscheinlichkeiten (auf Regen) eine Gesamtwahrscheinlichkeit (für diese 24 Stunden) berechnen.
Ich denke die ganze Zeit es kann doch nicht so schwer sein, aber irgendwie finde ich in all den Wahrscheinlichkeitsformeln nicht die passende.
Die Würfel und Glücksräder und Fremdsprachenschüler haben alle nix mit Wetter zu tun :D

Einer von euch?

Danke und Gruß
H.


audimax

Hallo,
also nach der Definition der Regenwahrscheinlichkeit (relative Häufigkeit der Regentage bei ähnlicher Wetterlage) würde ich sagen, dass man dazu einfach den größten Einzelwert nehmen sollte...
Gruß max

hsepm

Sei pN (N=1..24) die Wahrscheinlichkeit, dass es in Stunde N regnet. Dann ist (1-pN) die Wahrscheinlichkeit, dass es in Stunde N NICHT regnet.

Dann ist 1-((1-p1) * ... * (1-p24)) die Wahrscheinlichkeit, dass es irgendwann mal am Tag regnet.

Vielleicht sollte man aber die Nachtstunden ausklammern  ;)

holle75

Mmh, max´s Ansatz macht auch irgendwie Sinn (und so schön einfach).

hsepm, puh, ich muß es mir jetzt mal ganz blöd aufschreiben (mit dem Sternchen meinst du multiplizieren? Ich dachte irgendwo müsse man was addieren):

100-((100-WahrscheinlichkeitStunde1) * (100-WahrscheinlichkeitStunde2) * ..... * (100-WahrscheinlichkeitStunde24))

das meinst du?

holle75

Zitat von: hsepm am 21 März 2019, 17:48:04
Vielleicht sollte man aber die Nachtstunden ausklammern  ;)

Ich brauchs für die Beregnung, nicht die Dolce Vita :D

hsepm

#5
Zitat von: holle75 am 21 März 2019, 18:49:50
Mmh, max´s Ansatz macht auch irgendwie Sinn (und so schön einfach).

hsepm, puh, ich muß es mir jetzt mal ganz blöd aufschreiben (mit dem Sternchen meinst du multiplizieren? Ich dachte irgendwo müsse man was addieren):

100-((100-WahrscheinlichkeitStunde1) * (100-WahrscheinlichkeitStunde2) * ..... * (100-WahrscheinlichkeitStunde24))

das meinst du?

Wahrscheinlichkeit wird auf das Intervall [0,1] normiert. Ohne % Zeichen geht die Rechnung mit 100 schief. 100% ist gleich 1. * steht bei vielen Programmiersprachen für Multiplikation, dachte, das erklärt sich von selbst.

Natürlich ist die Rechnung nicht ganz korrekt, da die Regenwahrscheinlichkeiten nicht 100% unabhängig sind. Ist aber besser als die größte Wahrscheinlichkeit zu nehmen. Wenn die Regenwahrscheinlichkeit bei allen Stunden 50% ist, ist es so gut wie sicher (nahezu 100%), dass es mindestens in einer Stunde regnet.

Aber wenn du es für die Beregnung brauchst, warum nicht einfach die prognostizierten Niederschlagsmengen addieren? Das müsste dir doch mehr bringen als die Wahrscheinlichkeit. Mach doch sicher nen Unterschied, ob es 1 mm oder 50 mm regnet.


holle75

Zitat von: hsepm am 21 März 2019, 19:21:47
* steht bei vielen Programmiersprachen für Multiplikation, dachte, das erklärt sich von selbst.

Klar, nur hatte ich ganz fest was mit Addition im Kopf.

Zitat von: hsepm am 21 März 2019, 19:21:47
Aber wenn du es für die Beregnung brauchst, warum nicht einfach die prognostizierten Niederschlagsmengen addieren?

Mach ich noch zusätzlich. Du hast nur recht wenig von zB 10mm Regen mit einer Wahrscheinlichkeit von 5%... später wird das was in Richtung:

Wenn Regenmenge über 8mm (die nächsten 24h) und die Wahrscheinlichkeit dass es dazukommt über 50% liegt, dann ......

Zitat von: hsepm am 21 März 2019, 19:21:47
Wahrscheinlichkeit wird auf das Intervall [0,1] normiert. Ohne % Zeichen geht die Rechnung mit 100 schief. 100% ist gleich 1.

Ok, dann muß ich die Einzelwahrscheinlichkeiten vorher durch 100 dividieren und später wieder hochrechnen. Danke!

holle75

#7
So, ich als absoluter Perl-Laie als Beispiel für ein Userreading

Regenwahrscheinlichkeit24h:.*_precipProbability.*
{
my $hdmvalue = 0;;
my $hdmzwischen = 0;;
my $hdmklammerkomplett = 0;;
my $hdmtotal = 0;;
for (my $i=1; $i<=24; $i++)
{
$hdmvalue = ReadingsVal("WetterDarkSkyModul", "hfc".$i."_precipProbability",0);;
$hdmzwischen = 1 - $hdmvalue / 100;;
$hdmklammerkomplett = $hdmklammerkomplett * $hdmzwischen;;
};;
$hdmtotal = (1 - $hdmklammerkomplett) * 100;;
return sprintf("%2d",$hdmtotal);;
},


was haltet ihr davon? ... und ich kanns nichtmal testen, weil tatsächlich sogar für die nächsten 4 Tage überall 0% Regenwahrscheinlichkeit anliegt.

holle75

#8
Mmh, jetzt gibt mir fhem nach dem ersten Readings-update Regenwahrscheinlichkeit24h -> 100

entweder total falsch oder irgendwo genau andersrum.


EDIT:
Ein anfängliches

my $hdmklammerkomplett = 1;;

macht schonmal Sinn und lässt die Regenwahrscheinlichkeit zu 0 werden. Jetzt warte ich mal auf Regen .....

hsepm

#9
Zitat von: holle75 am 21 März 2019, 20:55:55
Mmh, jetzt gibt mir fhem nach dem ersten Readings-update Regenwahrscheinlichkeit24h -> 100

entweder total falsch oder irgendwo genau andersrum.


EDIT:
Ein anfängliches

my $hdmklammerkomplett = 1;;

macht schonmal Sinn und lässt die Regenwahrscheinlichkeit zu 0 werden. Jetzt warte ich mal auf Regen .....

Bin auch nicht so der Perl-Crack, würde aber $hdmvalue / 100 zur Sicherheit mal klammern, auch wenn Punktrechnung vor Strichrechnung, und vielleicht durch 100.0 teilen, nicht, dass das eine Integer-Operation ist.

Du kannst aber einfach mal mit 2 Stundenwerten starten, dann lässt sich die Rechnung noch per Taschenrechner nachvollziehen. --> for (my $i=1; $i<=2; $i++)

EDIT:

Du kannst auf jeden Fall folgende "Edge-Cases" testen, wenn du die Werte aus einem Array befüllst:

a) 24 Mal 0% -> gesamt 0%
b) 23 Mal 0% und 1 Mal 100% -> gesamt 100%
c) 24 Mal 5% --> gesamt 70,8%

b), c) könnten etwas jenseits der Realität liegen, aber es würde zeigen, dass dein Code nach der von mir vorgeschlagenen Formel arbeitet.

holle75

Zitat von: hsepm am 21 März 2019, 21:25:36
Bin auch nicht so der Perl-Crack, würde aber $hdmvalue / 100 zur Sicherheit mal klammern, auch wenn Punktrechnung vor Strichrechnung, und vielleicht durch 100.0 teilen, nicht, dass das eine Integer-Operation ist.

Du kannst aber einfach mal mit 2 Stundenwerten starten, dann lässt sich die Rechnung noch per Taschenrechner nachvollziehen. --> for (my $i=1; $i<=2; $i++)

... über die Klammer bei $hdmvalue / 100 hatte ich auch nachgedacht. Wenns nicht schaden kann, mach ich das mal.
100.0 ist auch eine gute Idee.

Wenns doch nur mal regnen würde. Das ist so Murphy wie schon lange nicht mehr :D

hsepm

Ich würde auch noch mal checken, wie die Regenmengenprognose zu interpretieren ist:

Angenommen, es besteht eine 50% Warscheinlichkeit auf 10 mm Niederschlag. Werden dann 10 mm (ungewichtet) oder 5 mm (gewichtet) prognostiziert?

Wenn du kannst, solltest du die Prognose auch mal im Nachhinein über ein paar regnerische Tage mit der Ist-Menge vergleichen.

KernSani

Wirf doch per serteading einfach mal manuell eine Regenwahrscheinlichkeit in irgendein reading


Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

holle75

Zitat von: hsepm am 21 März 2019, 21:47:05
Ich würde auch noch mal checken, wie die Regenmengenprognose zu interpretieren ist:

Angenommen, es besteht eine 50% Warscheinlichkeit auf 10 mm Niederschlag. Werden dann 10 mm (ungewichtet) oder 5 mm (gewichtet) prognostiziert?

Wenn du kannst, solltest du die Prognose auch mal im Nachhinein über ein paar regnerische Tage mit der Ist-Menge vergleichen.

Wikipedia rebelliert gerade, sinnvollerweise, gegen Artikel 13. Von daher kann ich nicht mal inhaltlich gewichtet/ungewichtet recherchieren ;)
Ich weiß auch nicht, wie DarkSky ihren Regenwert einschätzt/definiert. Leider sind die Buben nicht besonders antwortfreudig, denn was wir hier gerade mühevoll aufarbeiten hatte ich mir, mit besonders freundlicher Mail vor Monaten, von DarkSky gewünscht. Ebenfalls einen Sonnenstunden-Wert. Keine Antwort.

Zitat von: KernSani am 21 März 2019, 21:47:42
Wirf doch per serteading einfach mal manuell eine Regenwahrscheinlichkeit in irgendein reading


Kurz, weil mobil

gute Idee. setreading

holle75

habe jetzt mit setreading einen Wert auf 50 und einen Wert auf 25 gesetzt. Alle anderen bekanntlich 0. Dann bekomme ich 62 als Ergebnis geliefert. Hört sich für mich nicht zu falsch an. hsepm?