Sind 500 eine echte Stichprobengröße oder nur eine runde Zahl?
Fortsetzung dieser Serie über den Forschungsprozess hinter einer Spannungsüberwachungs-Pipeline: Nach dem Widerruf einer zirkulären Schwellenwert-Behauptung war die natürliche nächste Frage auf eine andere Art unbequem. Der Code für das Recall-Audit enthielt einen Standardwert sample_size=500, der überall dort verwendet wurde, wo eine Falsch-Negativ-Rate geschätzt werden musste. Fragte man „warum 500“, gab es nirgendwo in der Codebasis, den Kommentaren oder dem Papierenentwurf eine Antwort.
Wo die Zahl echte Arbeit verrichtete
Der Selektor führt eine vollständige AC-Lastflussberechnung nur für Ereignisse durch, die er als kritisch einstuft. Alles, was er als „unkritisch“ bezeichnet, wird nie überprüft – der einzige Weg, die tatsächliche Falsch-Negativ-Rate des Selektors zu erfahren, besteht also darin, eine Stichprobe aus der unkritischen Population zu ziehen, diese real zu lösen und zu sehen, wie viele sich als tatsächliche Verletzungen herausstellen. Diese Stichprobengröße bestimmt direkt die Breite des resultierenden Konfidenzintervalls für die Falsch-Negativ-Rate, also die Zahl, die letztendlich darüber entscheidet, wie sehr man dem Selektor überhaupt vertrauen kann.
500 Ereignisse wurden dafür seit einem frühen Stadium des Projekts verwendet. Auf die direkte Frage, ob dies auf einer Standardrichtlinie beruhte – einer 5%-Regel, einer Power-Kalkulation, irgendetwas –, war die ehrliche Antwort, nachdem jeder Ort überprüft wurde, an dem die Zahl hätte gerechtfertigt werden können: Nein. Es war nicht einmal ein sauberer runder Prozentsatz: 500 von 16.531 unkritischen Ereignissen sind 3,0 %, nicht saubere 5 %. Es war einfach eine Zahl, die einmal eingetippt und nie wieder überdacht worden war.
Es richtig machen
Der Standardansatz zur Schätzung einer Proportion mit einer Zielpräzision ist die Formel für die Stichprobengröße mit Endlichkeitskorrektur:
wobei eine Pilotschätzung der gemessenen Rate ist, die angestrebte Fehlermarge und die endliche Populationsgröße (hier 16.531 unkritische Ereignisse). Unter Verwendung einer anfänglichen Schätzung der Verletzungsrate aus kleinen Stichproben, um eine ordentliche, pilotinformierte Stichprobe zu dimensionieren, wurde 500 durch eine größere, prinzipienbasierte Größe ersetzt – etwa 4.500 – für die Bedingungen mit einer niedrigen erwarteten Verletzungsrate.
Wo selbst das nicht ausreichte
Dies ist der Teil, der tatsächlich die endgültige Entscheidung erzwang. Bei einem Schweregrad des Betriebszustands stellte sich heraus, dass die tatsächliche Verletzungsrate sehr niedrig war – etwa 0,4 %. Bei dieser Rate produziert selbst eine pilotinformierte Stichprobe von 4.500 Ereignissen so wenige beobachtete Verletzungen, dass die abgeleitete Statistik (die Trefferquote der zustandsabhängigen Regel unter ihnen) ein Wilson 95%-Konfidenzintervall erhält, das sich über [19,7 %, 57,0 %] erstreckt – zu weit, um irgendeine reale Schlussfolgerung darüber zu stützen, ob die Regel unter diesen Bedingungen funktioniert.
Eine weitere Erhöhung der Stichprobengröße jagt sinkende Erträge gegen eine feste, kleine Population. Die obige Formel hat eine Obergrenze: Sobald sich nähert, gibt es keine Präzision mehr durch härteres Sampling zu kaufen – die einzige Möglichkeit, die Unsicherheit zu beseitigen, besteht darin, das Sampling zu stoppen und die gesamte Population zu prüfen.
Die vollständige Volkszählung
Und genau das passierte: Anstatt einer größeren, aber immer noch etwas willkürlichen Stichprobengröße wurden alle 16.531 unkritischen Ereignisse real gelöst, und zwar bei jedem untersuchten Schweregrad des Betriebszustands – nicht nur bei demjenigen, bei dem die kleinere Stichprobe versagt hatte. Gleichbehandlung über alle Bedingungen hinweg war wichtiger, als bei denen, die bei einer kleineren Stichprobe bereits gut aussahen, Rechenzeit zu sparen. Dies beseitigt die Stichprobenunsicherheit aus der Falsch-Negativ-Rate vollständig; welche Unsicherheit in den Leit-Zahlen des Papiers auch immer verbleibt, betrifft das Modellverhalten, nicht das Ziehen von Stichproben aus der Population.
Die Eskalation, von Anfang bis Ende: 500 → 4.500 → 16.531 (vollständige Vollerhebung). Jeder Schritt wurde von den Daten erzwungen, nicht im Voraus gewählt – und genau deshalb ist es mehr wert, es ehrlich aufzuschreiben, einschließlich der Sackgassen, als die endgültige Zahl so zu präsentieren, als wäre es von Anfang an der Plan gewesen.
Reproduzierbarkeit: Progression der Stichprobengröße bei einer Schweregradbedingung
from engine import GridSimulator, LocalCsvIngestionLayer, ScaledLoadProvider, TimeSeriesLoadProvider, load_simbench_profile
simulator = GridSimulator()
stream = LocalCsvIngestionLayer().fetch_stream()
provider = ScaledLoadProvider(TimeSeriesLoadProvider(load_simbench_profile()), severity=1.50)
cycle_df = simulator.run_streaming_pipeline(stream, load_provider=provider)
for n in [500, 4500, 16531]:
_, summary = simulator.run_recall_audit(cycle_df, sample_size=n, load_provider=provider)
row = summary.iloc[0]
print(f"n={n}: FN-Rate={row['estimated_fn_rate']*100:.2f}%, "
f"95% KI=[{row['estimated_fn_rate_ci95_low']*100:.2f}%, "
f"{row['estimated_fn_rate_ci95_high']*100:.2f}%]")


