Discussion:
Unintuitiver Zufall
(zu alt für eine Antwort)
Stefan Ram
2020-06-17 22:25:26 UTC
Permalink
Das Gesetz der kleinen Zahl,
or "How to use the RNG for your todo list"

Bei einer Aufgabe lasse ich vom Zufall auswählen, welche
Teilaufgabe ich als nächste bearbeite. Dabei fällt es mir
wirklich immer wieder auf, daß Wiederholungen des gleichen
Ergebnisses häufiger sind als intuitiv erwartet.

Beipiel: Meine Tabelle sieht so aus (Texte in der letzten
Spalte für dieses Posting verändert):

4 1.771561 Teilaufgabe A
0 1.331 Teilaufgabe B
0 1 Teilaufgabe C

Die mittlere Spalte enthält die gewünschten Gewichte für
die Zufallsauswahl (relative Wahrscheinlichkeiten).

Bei dem System fiel mir auf, daß es immer wieder verblüffend
war, wie oft bei einem Durchlauf dieselbe Teilaufgabe wie
beim vorherigen Durchlauf vom Zufallszahlengenerator
ausgewählt wurde. Auch bei viel größeren Tabellen, wo dies
intuitiv als unwahrscheinlich erschien.

Jetzt lasse ich schon Würfe automatisch mehrfach wiederholen,
wobei die Zahl der Wiederholungen von der Uhrzeit abhängt,
und wähle dann den letzten, um den Zufall noch "zufälliger"
zu machen. Ich verwende aber schon einen vertrauenswürdigen
Zufallszahlengenerator, der schon beim ersten Start ein
zufälliges Ergebnis liefert (nicht immer die gleiche Sequenz).

Außerdem habe ich das System versuchsweise sehr oft wählen
lassen und dabei beobachtet, daß sich die Verhältnisse der
Anzahlen der realen Auswahlen dann tatsächlich langfristig
den Verhältnissen der Gewichte annährt.

Aber bei einer kleinen Zahl ist die reale Verteilung oft
auffällig abweichend. Im obigen Fall wurde beispielsweise
bisher vier Mal Teilaufgabe A ausgewahlt. B und C noch nie.

Es handelt sich real um die Situation, in der ich mich
jetzt befinde: Ich bearbeite also wieder Teilaufgabe A,
wie schon die drei Mal davor. In RNG we trust!

Ich habe schon überlegt, die Auswahlen für Teilaufgaben,
die seltener ausgewahlt wurden, als es ihrem Gewicht
entspricht, wahrscheinlicher zu machen, aber dies würde
dann Änderungen an den Gewichten und das Hinzufügen
neuer Teilaufgaben verkomplizieren.

Das Gesetz der kleinen Zahl lautet also:

|Die relativen Häufigkeiten bei einer kleinen Zahl von
|Zufallsexperimenten weichen oft stark von den
|Wahrscheinlichkeiten ab.

Siehe auch: Geburtstagsparadoxon

PS:
Jetzt habe ich das Programm gerade noch einmal überarbeitet.
Der relevante Ausschnitt sieht vereinfacht ungefähr so aus:

def entropy():
now = datetime.datetime.now()
return( now.hour%24/24 + now.minute%24/60 + now.second%60/60 +\
now.microsecond%1E6/1E6 )/4/2 + \
secrets.randbelow(18446744073709551616)/18446744073709551615/2

random.seed(entropy())

for i in range( 4 + int( time.time() )% 9 ):
result = random.choices( range( len( weight_list )), weights=weight_list )

# Nun steht die Zeilennummber der jetzt
# zu bearbeitenden Teilaufgabe in result[ 0 ]
Jens Kallup
2020-06-18 00:04:00 UTC
Permalink
Post by Stefan Ram
Jetzt habe ich das Programm gerade noch einmal überarbeitet.
now = datetime.datetime.now()
return( now.hour%24/24 + now.minute%24/60 + now.second%60/60 +\
now.microsecond%1E6/1E6 )/4/2 + \
secrets.randbelow(18446744073709551616)/18446744073709551615/2
random.seed(entropy())
result = random.choices( range( len( weight_list )), weights=weight_list )
# Nun steht die Zeilennummber der jetzt
# zu bearbeitenden Teilaufgabe in result[ 0 ]
Hallo Stefan,

denke mal, da liegt ein kleines Problem zwischen den en-/decrypten,
und man müsste mal das Pferd von hinten satteln ...

ich fange mal mit randbelow an, indem ich die ganzen key wörter weg
lasse, und erstmal nur für einen Fall (1) annehme.
Dann würde ich mir das so aufschreiben:

18446744073709551616 - 1
18446744073709551615 - 0 (Du merkst den Unterschied? )

hierfür (1/0/2) nun die Reziproke, indem der untere Bruch vertauscht
wird:

1 1
... = --- = 0.5
0 2
---
2

so.

Dieses randbelow scheint (Programmierfunktionen von Python kenn ich
nicht) Zufallswerte zu erstellen, die unterhalb einer Schranke liegen.

Da nun 0.4 < als 0.5 ist, wird bei dieser Funktion vermutlich ein
Integral berechnet.

Integrale berechnet man ja so, indem man dem Integral ein Ober- und
Untergrenze übergibt, wobei die Obergrenze an dem obigen Zipfel des
Integralssymbols, und die Untergrenze an den unteren Zipfel des
Symbols schreibt. Ok, das nur nebenbei.

1
I = randbelow(0.5 < 0.4) = 0 = Ereignis trifft nicht zu, da UB
0

n = 1 = Stichproben-Umfang => 1 = eine Person
H = 0 = Absolute Häufigkeit => 0 = kein Vergleich vorhanden !!!
r = relative Häufigkeit => r = H/n => 1 / 0 = bang !!!

Das war jetzt für Teilaufgabe C
Wollen wir uns der Teilaufgabe B zuwenden:

Ich runde hier mal auf 1.33

1.33 = 1 + 1/3 = 100% + 33% = 133%

hier wieder: r = H/n.

Achtung, die Prognose wird 33% übersteigen.
Das würde nun bedeuten, das da an den Daten etwas falsch ist,
und

P = 64 % fassen würde, der Rest is Spam ...

Und immer mehr Daten ...

Teilaufgabe A:
ich runde hier wieder auf 1,75 - der Einfachheit halber.

1,75 = 1 + 3/4

*3) :1) :1)
1 3 3 3 2
= --- + --- = --- + --- = --- = 1 = 100%
1 4 4 4 2
*4) :1) :1)

wie man vielleicht schon sehen kann, trifft die Prognose
auf jeden Fall zu - was natürlich auch wieder Utopie ist.

P.S.: Mein Vorschlag: Daten per Hand variieren.
Jens
Ralf Goertz
2020-06-18 08:06:56 UTC
Permalink
Am 17 Jun 2020 22:25:26 GMT
Post by Stefan Ram
Das Gesetz der kleinen Zahl,
or "How to use the RNG for your todo list"
Bei einer Aufgabe lasse ich vom Zufall auswählen, welche
Teilaufgabe ich als nächste bearbeite. Dabei fällt es mir
wirklich immer wieder auf, daß Wiederholungen des gleichen
Ergebnisses häufiger sind als intuitiv erwartet.
Beipiel: Meine Tabelle sieht so aus (Texte in der letzten
4 1.771561 Teilaufgabe A
0 1.331 Teilaufgabe B
0 1 Teilaufgabe C
Die mittlere Spalte enthält die gewünschten Gewichte für
die Zufallsauswahl (relative Wahrscheinlichkeiten).
Bei dem System fiel mir auf, daß es immer wieder verblüffend
war, wie oft bei einem Durchlauf dieselbe Teilaufgabe wie
beim vorherigen Durchlauf vom Zufallszahlengenerator
ausgewählt wurde. Auch bei viel größeren Tabellen, wo dies
intuitiv als unwahrscheinlich erschien.
Jetzt lasse ich schon Würfe automatisch mehrfach wiederholen,
wobei die Zahl der Wiederholungen von der Uhrzeit abhängt,
und wähle dann den letzten, um den Zufall noch "zufälliger"
zu machen. Ich verwende aber schon einen vertrauenswürdigen
Zufallszahlengenerator, der schon beim ersten Start ein
zufälliges Ergebnis liefert (nicht immer die gleiche Sequenz).
Außerdem habe ich das System versuchsweise sehr oft wählen
lassen und dabei beobachtet, daß sich die Verhältnisse der
Anzahlen der realen Auswahlen dann tatsächlich langfristig
den Verhältnissen der Gewichte annährt.
Aber bei einer kleinen Zahl ist die reale Verteilung oft
auffällig abweichend. Im obigen Fall wurde beispielsweise
bisher vier Mal Teilaufgabe A ausgewahlt. B und C noch nie.
Es handelt sich real um die Situation, in der ich mich
jetzt befinde: Ich bearbeite also wieder Teilaufgabe A,
wie schon die drei Mal davor. In RNG we trust!
Wie du vielleicht weißt, kannst du mit Kanonen auf Spatzen schießen und
deinen RNG mit dem Runs-Test
<https://en.wikipedia.org/wiki/Wald%E2%80%93Wolfowitz_runs_test>
überprüfen. Der ist zwar nur für zwei Aufgaben anwendbar (und auch erst
dann, wenn beide Aufgaben jeweils mindestens einmal vorkamen), aber wir
sprechen ja vom Gesetz der kleinen Zahl. Dafür ist er unabhängig von den
Gewichten. Wenn du also B und C als ununterscheidbar betrachtest und
beim nächsten Mal einer dieser beiden Teilaufgaben kommt, dann wirst du
Post by Stefan Ram
(Aufgaben=factor(c(rep("A",4),"B_oder_C")))
[1] A A A A B_oder_C
Levels: A B_oder_C
Post by Stefan Ram
tseries::runs.test(Aufgaben)
Runs Test

data: Aufgaben
Standard Normal = -1.2247, p-value = 0.2207
alternative hypothesis: two.sided

dass bisher nichts gegen die Unabhängigkeit der Ziehungen deines RNGs
spricht.

;-)

Loading...