# Lösungen Monte Carlo¶

### Aufgabe - Arbeitszeit abschätzen¶

7 Punkte

Du befindest dich in der Situation wieder das dein Chef dich damit Beauftragt zwei wichtige Aufgaben bis zum Ende des Arbeitstages zu bearbeiten. Im Gegennsatz dazu bist du Abends auf einem Grillfest mit deinen Freunden verabredet. Dieses findet um 18 Uhr statt. Da du dich nun im zwiespalt befindest deinen Beruflichen Aufgaben nachzukommen und auf dem Grillfest zu erscheinen, fragst du dich im nächsten Schritt wie hoch die Chance ist, dass in 9 Stunden anstehende Grillfest pünktlich zu erreichen und gleichzeitig deinen Beruflichen Verpflichtungen nachzukommen.

Nach einigen gut durchdachten Überlegungen stellst du folgendes fest:

- An der ersten Aufgabe sitzt du zwischen 1-5 Stunden.
- An der zweiten Aufgabe sitzt du zwischen 2-6 Stunden.
- Egal wie schnell du eine Aufgabe löst es gibt keine Auswirkungen auf die andere Aufgabe. (Sie sind unabhängig voneinander)

Stell im folgenden fest wie hoch die Warscheinlichkeit ist das du pünktlich beim Grillfest angelangst.

Gehe dabei wie folgt vor:

- Nehme an das beide Aufgaben gleichmäßig Verteilt sind, und speichere die Verteilungen in den Variablen `exc1` & `exc2`.
- Verwende eine geeignete Anzahl an samples. Speichere den gewählten Wert in der variablen `sims`.
- Speichere die Wahrscheinlichkeit mit der du es zum Grillfest schaffst in der Variablen `chance`, mit einer genauigkeit von zwei nachkommmastellen.
- Plotte geeignet. Beziehe auch die Variable `chance` mit ein.

In [36]:

    rand = np.random.default_rng(42) # Use this rng!

    sims = 1_000

    exc1 = rand.uniform(1,5,sims)
    exc2 = rand.uniform(2,6,sims)

    duration = exc1 + exc2
    chance = float(np.round((duration <= 9).sum()/sims, decimals=2))

    print(f"Die Wahrscheinlichkeit pünktlich beim Grillfest zu erscheinen beträgt {chance:.0%}")

    Die Wahrscheinlichkeit pünktlich beim Grillfest zu erscheinen beträgt 87%

In [39]:

    plt.figure(figsize=(8, 4))
    plt.hist(duration, bins=50, color='#34d8eb', edgecolor='black', alpha=1)
    plt.axvline(9, color='red', linestyle='dashed', linewidth=2, label="9 Stunden Grenze")
    plt.title(f"Monte-Carlo-Simulation: Zeitverteilung für Aufgaben\nChance pünktlich: {chance:.0%}", fontsize=14)
    plt.xlabel("Gesamtdauer (Stunden)")
    plt.ylabel("Häufigkeit")
    plt.legend()
    plt.grid(alpha=0.3)
    plt.show()

### Aufgabe - Simulation einer Körpergewichtszunahme¶

13 Punkte - Credit Viktoria Litza

Gegeben sind die nach Altersgruppe aufgeschlüsselten Durschnittskörpergewichte (in kg) von Männern in Deutschland. (Zu finden beim Statistischen Bundesamt)

Nutze die Monte Carlo Methode um den mittleren Gewichtszuwachs der Bezugsgrößen zu bestimmen. Die mittlere Gewichtsschwankung eines Durschnittsmannes beträgt 2.5kg über den Tag verteilt. Finde die Wahrscheinlichkeit mit der ein Durchschnittsmann pro Woche (7 Tage) 3 kilogramm abnimmt und speichere das Ergebniss in der Variablen `gain_percent`.

Beachte:

- Bestimmt das arithmetische Mittel der Durchschnittsgewichte über die Altersgruppen. Speichere den Wert in `avg_weight` mit einer Präsizion von 1 Dezimalstelle.
- Verwende eine geeignete Anzahl an samples. Speichere den gewählten Wert in der variablen `sims`.
- Nehme an das das Durchschnittsgewicht Normal Verteilt ist und mit einer Standardabweichung von 5% zum Durschnittswert. Speichere deine Samples in der Variablen `men_normal`.
- Nehme an das die Gewichtsschwankung pro Tag Gleich Verteilt ist. Speichere die simulierten zunahmen für eine Woche in der Liste `gain_week`.
- Berechne die Durschnittliche Gewichtszunahme/abnahme und speichere das Ergebnis in der Variablen `duration`.
- Plotte Angemessen. Beziehe dabei alle relevanten Werte mit ein.
- Begründe mit einem kurzen Text dein Vorgehen und erkläre dein Ergebnis, beschreibe als letztes die Aussage deines Plottes.

In [41]:

    # Given
    avg_weight_per_men = {
        "18 - 20": 77.9,
        "20 - 25": 80.5,
        "25 - 30": 83.3,
        "30 - 35": 85.6,
        "35 - 40": 86.7,
        "40 - 45": 88.1,
        "45 - 50": 89.8,
        "50 - 55": 89.0,
        "55 - 60": 88.8,
        "60 - 65": 87.9,
        "65 - 70": 86.7,
        "70 - 75": 85.3,
        "75+": 81.0
    }

    rand = np.random.default_rng(420) # Use this rng!

In [42]:

    # 1. Durchschnittsgewicht berechnen
    avg_weight = round(np.mean(list(avg_weight_per_men.values())), 1)

In [43]:

    # 2. Parameter
    sims = 1_000_000  # Anzahl der Samples
    std_dev = 0.05 * avg_weight  # Standardabweichung = 5% des Durchschnittsgewichts
    daily_gain = rand.uniform(-2.5, 2.5, (sims, 7))  # Gewichtsschwankung pro Tag (gleich verteilt)

In [44]:

    # 3. Normalverteilung für Männergewichte
    men_normal = np.random.normal(avg_weight, std_dev, sims)

In [45]:

    # 4. Gleichverteilung für tägliche Gewichtsschwankung (eine Woche simulieren)
    gain_week = np.sum(daily_gain, axis=1)
    gain_percent = np.mean(gain_week <= -3)

In [46]:

    # 5. Wahrscheinlichkeit berechnen, dass ein Mann 3 kg abnimmt
    success = gain_week <= -3
    gain_percent = np.sum(success) / sims # Anteil der Fälle, in denen Gewicht um ≥ 3 kg sinkt
    gain_percent = round(gain_percent, 2)

In [47]:

    # 6. Durchschnittliche Gewichtszunahme/-abnahme
    duration = round(np.mean(gain_week), 1)

In [50]:

    # 7. Plot
    plt.figure(figsize=(8, 4))
    plt.hist(gain_week, bins=50, color='skyblue', edgecolor='black', alpha=0.7, label="Gewichtsveränderungen")
    plt.axvline(-3, color='red', linestyle='dashed', linewidth=2, label="-3kg Grenze")
    plt.axvline(duration, color='green', linestyle='solid', linewidth=2, label=f"Ø Veränderung = {duration} kg")
    plt.title(f"Monte-Carlo-Simulation: Gewichtsveränderung pro Woche\nChance für -3 kg Abnahme: {gain_percent:.0%}", fontsize=14)
    plt.xlabel("Gewichtsveränderung (kg)")
    plt.ylabel("Häufigkeit")
    plt.legend()
    plt.grid(True)
    plt.show()

In [49]:

    # Ergebnis ausgeben
    print(f"Durchschnittliches Gewicht: {avg_weight} kg")
    print(f"Durchschnittliche Gewichtsveränderung pro Woche: {duration} kg")
    print(f"Wahrscheinlichkeit, dass ein Mann 3 kg in einer Woche abnimmt: {gain_percent:.0%}")

    Durchschnittliches Gewicht: 85.4 kg
    Durchschnittliche Gewichtsveränderung pro Woche: -0.0 kg
    Wahrscheinlichkeit, dass ein Mann 3 kg in einer Woche abnimmt: 22%

Um die Berechnungen auf einer stabilen Grundlage durchzuführen, berechne ich zuerst das Durchschnittsgewicht. Dafür habe ich das arithmetische Mittel berechnet – das ist einfach die Summe aller Gewichte, geteilt durch die Anzahl der Altersgruppen. Das ergibt eine repräsentative Zahl, die den Durchschnitt aller Altersgruppen widerspiegelt.

Bei der Verteilung der Gewichte in der Bevölkerung geht man hier von einer Normalverteilung aus. Das ist realistisch, weil das Gewicht der meisten Menschen um einen Durchschnittswert schwankt und dabei symmetrisch verteilt ist – mit wenigen Menschen, die deutlich leichter oder schwerer sind.

Für die täglichen Schwankungen im Gewicht gehe ich von einer gleichmäßigen Verteilung aus. Das bedeutet, dass jede mögliche Gewichtszunahme oder -abnahme innerhalb eines Bereichs (z. B. ±2,5 kg) gleich wahrscheinlich ist. Diese Annahme wird getroffen, weil keine genauen Daten über andere Schwankungsmuster vorliegen.

Der Plot zeigt die Verteilung der simulierten wöchentlichen Gewichtszunahmen/-abnahmen. Die rote Linie markiert die Grenze von -3 kg, und die grüne Linie zeigt die durchschnittliche Veränderung. Die Wahrscheinlichkeit, links von der roten Linie zu liegen, entspricht der berechneten Wahrscheinlichkeit von 22.08%.