Das Bayes Theorem
Zeit: 10 min
Theorie: Die Aktualisierung von Wissen
Menschen sind laufende Informationsverarbeiter. Jeden Tag begegnen uns neue Hinweise, Beobachtungen und Daten. Wenn wir etwas Neues lernen, sollten wir unsere bisherigen Annahmen nicht einfach verwerfen, sondern systematisch aktualisieren. Genau diesen Prozess formalisiert das Bayes-Theorem: Es beschreibt, wie sich bestehende Überzeugungen durch neue Evidenz verändern. Aus einer Vorannahme wird durch beobachtete Daten eine aktualisierte Einschätzung. Auch in der Statistik, im maschinellen Lernen und in der künstlichen Intelligenz spielt diese Idee eine zentrale Rolle. Überall dort, wo Systeme unter Unsicherheit entscheiden, hilft bayesianisches Denken dabei, neues Wissen logisch mit bisherigem Wissen zu verbinden. Kurz gesagt: Das Bayes-Theorem ist eine mathematische Anleitung dafür, aus neuen Informationen klüger zu werden.
Die Formel des Bayes Theorem lautet: \[P(\theta|D)=\frac{P(D|\theta)P(\theta)}{P(D)}\]
Die Variablen: * Prior \(P(\theta)\): Deine anfängliche Überzeugung über eine Hypothese, bevor du neue Daten kennst. * Likelihood \(P(D|\theta)\): Die Wahrscheinlichkeit, genau diese Daten zu beobachten, falls die Hypothese wahr ist. * Evidenz \(P(D)\): Die totale Wahrscheinlichkeit, diese Daten zu beobachten, völlig unabhängig von der Hypothese. * Posterior \(P(\theta|D)\): Deine aktualisierte Überzeugung über die Hypothese, nachdem du die Evidenz integriert hast.
Beispiel SmartRail: Das Diagnosemodul
SmartRail verfügt über ein Diagnosemodul, das Weichenstörungen auf der Strecke automatisch erkennen soll. Auf der Leitstelle geht ein Alarm ein. Du fragst dich, mit welcher Wahrscheinlichkeit tatsächlich eine Weichenstörung vorliegt.
Dein Vorwissen \(P(\theta)\) (Prior) besagt, dass Weichenstörungen selten sind. Lediglich an 3 % aller Betriebstage tritt eine tatsächliche Störung auf. Die Likelihood \(P(D|\theta)\) besagt: Wenn eine echte Weichenstörung vorliegt, erkennt SmartRail sie mit einer Wahrscheinlichkeit von 95 %.
Allerdings produziert das System auch Fehlalarme. An störungsfreien Tagen schlägt SmartRail trotzdem in 8 % der Fälle falschen Alarm. Diese Fehlalarmrate bildet zusammen mit der echten Erkennungsrate die Evidenz \(P(D)\). Das Bayes Theorem berechnet den Posterior \(P(\theta|D)\): die exakte Wahrscheinlichkeit für eine tatsächliche Weichenstörung, nachdem der Alarm bereits eingegangen ist.
Deine Aufgabe
Spiele mit den Reglern in der interaktiven Applikation.
- Beobachten: Stelle den Prior auf 3 % und die Likelihood auf 95 %. Setze die Fehlalarmrate auf 8 %.
- Analysieren: Der Posterior Balken zeigt dir die tatsächliche Wahrscheinlichkeit für eine Weichenstörung bei einem SmartRail-Alarm.
- Verstehen: Erhöhe z.B. die Fehlalarmrate. Beobachte, wie die Wahrscheinlichkeit für eine echte Störung massiv sinkt, obwohl der Alarm real ist. Ein System mit vielen Fehlalarmen entwertet jeden einzelnen Alarm.
⏳ Die Anwendung wird geladen, dies kann bis zu 30 Sekunden dauern.
#| '!! shinylive warning !!': |
#| shinylive does not work in self-contained HTML documents.
#| Please set `embed-resources: false` in your metadata.
#| standalone: true
#| viewerHeight: 650
from shiny import App, render, ui
import matplotlib.pyplot as plt
app_ui = ui.page_fluid(
ui.card(
ui.card_header("SmartRail: Diagnosemodul Weichenstörung"),
ui.layout_columns(
ui.div(
ui.h5("Prior"),
ui.input_slider("prior", "Weichenstörungen generell (%)", 1, 100, 3),
ui.h5("Likelihood"),
ui.input_slider("likelihood", "Erkennung bei echter Störung (%)", 1, 100, 95),
ui.h5("Fehlalarme"),
ui.input_slider("false_positive", "Alarm OHNE echte Störung (%)", 1, 100, 8),
),
ui.output_plot("bayes_plot"),
col_widths=(4, 8)
)
)
)
def server(input, output, session):
@render.plot
def bayes_plot():
p_prior = input.prior() / 100.0
p_likelihood = input.likelihood() / 100.0
p_false_positive = input.false_positive() / 100.0
p_evidence = (p_likelihood * p_prior) + (p_false_positive * (1 - p_prior))
p_posterior = (p_likelihood * p_prior) / p_evidence if p_evidence > 0 else 0
fig, ax = plt.subplots(figsize=(8, 5), layout="constrained")
categories = ['Prior\n(Vorwissen)', 'Posterior\n(Aktualisiertes Wissen)']
values = [p_prior * 100, p_posterior * 100]
bars = ax.bar(categories, values, color=['#34495e', '#e67e22'])
ax.set_ylim(0, 108)
ax.set_yticks([0, 20, 40, 60, 80, 100])
ax.set_ylabel("Wahrscheinlichkeit in Prozent")
ax.set_title("Wahrscheinlichkeit einer Weichenstörung\nbei SmartRail-Alarm")
for bar in bars:
height = bar.get_height()
ax.text(bar.get_x() + bar.get_width()/2., height + 2,
f'{height:.1f} %',
ha='center', va='bottom', fontweight='bold')
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
return fig
app = App(app_ui, server)