WT-Übung 1 - Aufgabe 5

100 Lose, davon 20 Gewinne, davon ein Hauptgewinn. Es werden vier Lose gezogen.

  • A = {Hauptgewinn wird gezogen}
  • B = {mindestens ein Gewinn}
  • C = {höchstens ein Gewinn}
  • D = {genau ein Nebengewinn}

In [44]:
niete, nebengewinn, hauptgewinn = 'N', 'G', 'H'
lostrommel = [hauptgewinn] + 19 * [nebengewinn] + 80 * [niete]
assert len(lostrommel) == 100

Lösung

Gesucht ist die Wahrscheinlichkeit für die Ereignisse A, B, C und D. Hier wird die relative Häufigkeit als Schätzer verwendet (siehe Satz 7.8-2).


In [49]:
# Indikatorfunktionen für Ereignisse
event_checks = dict(
    A = lambda: hauptgewinn in draw,
    B = lambda: draw != 4 * [niete],
    C = lambda: sum(los != niete for los in draw) <= 1,
    D = lambda: sorted(draw) == [nebengewinn, niete, niete, niete]
)

# Anzahl der Versuche
N = 100000
# Zähler für absolute Häufigkeiten der Ereignisse bei N Versuchen

# Ausgabe
def show_events():
    return ' '.join(event if event in events else '_' 
                    for event in sorted(event_checks))

Nun wird für N zufällige Ziehungen gezählt, wie häufig die jeweiligen Ergnissen eintreten.


In [50]:
from collections import defaultdict
from itertools import product
from random import sample

print(" n     Lose     Ereignisse\n───────────────────────────")
event_counters = defaultdict(int)
for n in range(N):  # Versuch n = 0 ... (N-1)
    # zufällige Auswahl von 4 Losen
    draw = sample(lostrommel, 4)
    # prüfe ob Ereignis A, B, C, D eintritt
    events = [name for name, check in event_checks.items() if check()]
    # Zähler für eingetretene Ereignisse inkrementieren
    for name in events: event_counters[name] += 1
    # Ausgabe
    if n < 10:
        print("{:^3d} {:^11} {:^9}".format(n, ' '.join(draw), show_events()))
    elif n == 10:
        print(" ...")


 n     Lose     Ereignisse
───────────────────────────
 0    N N N N    _ _ C _ 
 1    G G N N    _ B _ _ 
 2    N N G N    _ B C D 
 3    N N G N    _ B C D 
 4    N N G N    _ B C D 
 5    N N G N    _ B C D 
 6    N N N N    _ _ C _ 
 7    N N G N    _ B C D 
 8    G N N G    _ B _ _ 
 9    N N N N    _ _ C _ 
 ...

Ergebnis

Aus den so bestimmten absoluten Häufigkeiten werden schließlich die zugehötigen relativen Häufigkeiten gebildet


In [47]:
for name, count in sorted(event_counters.items()):
    print("H({}) = {:5d}/{} = {:.03f}".format(name, count, N, count / N))


H(A) =  4035/100000 = 0.040
H(B) = 59612/100000 = 0.596
H(C) = 82096/100000 = 0.821
H(D) = 39572/100000 = 0.396