Simulation – chatgpz.de – KI-Tools & Praxiswissen http://chatgpz.de Unabhängige Tests, Anleitungen und Hintergründe zu KI-Tools. Fri, 19 Jun 2026 04:16:25 +0000 de-DE hourly 1 https://wordpress.org/?v=6.4.2 234900186 Die New York Knicks und die Martingaleigenschaft kalibrierter Wahrscheinlichkeitsvorhersagen (mit etwas Simulation und R-Code) http://chatgpz.de/data-science/die-new-york-knicks-und-die-martingaleigenschaft-kalibrierter-wahrscheinlichkeitsvorhersagen-mit-etwas-simulation-und-r-code/ http://chatgpz.de/data-science/die-new-york-knicks-und-die-martingaleigenschaft-kalibrierter-wahrscheinlichkeitsvorhersagen-mit-etwas-simulation-und-r-code/#respond Fri, 19 Jun 2026 04:16:24 +0000 http://chatgpz.de/data-science/die-new-york-knicks-und-die-martingaleigenschaft-kalibrierter-wahrscheinlichkeitsvorhersagen-mit-etwas-simulation-und-r-code/ [ad_1]

Dieser lange Beitrag behandelt vier Themen:

1. Die beeindruckende Siegesserie der Knicks, die nach einem Rückstand den NBA-Titel in fünf Spielen gewannen;

2. Die Martingaleigenschaft von Wahrscheinlichkeitsvorhersagen;

3. Ein Beispiel für das Lernen aus der Simulation;

4. Wie wir (manchmal) Wahrscheinlichkeits- und Statistikforschung betreiben.

Ich weiß nicht genug über die Zielgruppe dieses Blogs, um zu wissen, welches der vier Themen die meisten von Ihnen ansprechen wird. Für das Web insgesamt ist es die Nummer 1; Für die meisten von Ihnen dürfte es Nr. 3 sein.

Ich interessiere mich für alle vier, weshalb ich das jetzt alles aufschreibe. Es ist mir peinlich zu sagen, dass dies mehrere Stunden gedauert hat. Ursprünglich hatte ich geplant, diesen Sonntagmorgen nach dem Spiel zu posten, aber es hat einige Zeit gedauert, bis ich zur Aufgabe kam. Der größte Teil des Aufwands lag im Schreiben des Codes, nicht im Schreiben des Textes. Und es gibt tatsächlich nicht viel Code, wie Sie sehen können, wenn Sie zum Ende dieses Beitrags scrollen. Der Hauptaufwand bestand nicht darin, die Syntax herauszufinden oder gar zu debuggen (obwohl es einiges davon gab), sondern herauszufinden, was ich überhaupt codieren wollte.

Positiv zu vermerken ist, dass es sich hier um eine Recherche handelt, die ich schon seit einiger Zeit durchführen wollte. (a) Ich glaube additionally nicht, dass diese Mühe umsonst ist, auch nicht über den Bildungs- und Unterhaltungswert hinaus, den sie für Sie haben magazine, und (b) Ich habe daraus schon einiges gelernt. Ein Blick auf Daten ist immer intestine; Mit Simulationen zu experimentieren ist immer intestine.

Okay, los geht’s.

Das NBA-Finale

Hey, Denken Sie daranaus Spiel 4 der letzten NBA-Finals:

Oder der Verlauf des Spiels, das danach folgte:

Der Vollständigkeit halber finden Sie hier die Aufzeichnungen für die Spiele 3, 2 und 1, ebenfalls mit freundlicher Genehmigung von ESPN:

In Spiel 4 wurde geschätzt, dass die Spurs zu einem Zeitpunkt eine Siegchance von 99,6 % hatten. Aber wie Sie vielleicht gehört haben, haben sie verloren.

Excessive Gewinnwahrscheinlichkeiten

Waren die angegebenen Gewinnwahrscheinlichkeiten zu extrem?

Einerseits passieren natürlich gelegentlich ungewöhnliche Ereignisse. Wenn die Wahrscheinlichkeit einer Niederlage bei 0,4 % liegt, sollte das in 1 von 250 Fällen passieren, und allein in der vergangenen Saison gab es viel mehr als 250 Basketballspiele. Andererseits sollen sehr ungewöhnliche Ereignisse nur sehr selten passieren, und es gab einen Punkt im dritten Viertel von Spiel 4, an dem der Algorithmus von ESPN den Spurs eine Siegchance von 97,1 % gab, ein Punkt in Spiel 1, an dem den Spurs eine Likelihood von 94,1 % gegeben wurde. Es gab einen Second in Spiel 2, in dem den Knicks eine Siegchance von 98,2 % zugeschrieben wurde, und natürlich haben sie dieses Spiel gewonnen, aber wenn man bedenkt, dass das Endergebnis 105-104 struggle, nach Unentschieden zwischen 97-97 und 104-104, scheint es im Nachhinein, dass diese 98,2 % etwas zu selbstbewusst waren.

Sollten wir diesen Wahrscheinlichkeiten gegenüber misstrauisch sein? Eine Möglichkeit, diese Frage zu stellen, besteht darin, die Kalibrierung zu überprüfen: Wenn wir alle Spielsituationen sammeln, in denen eine Mannschaft eine Siegesquote von 99,6 % hat, gewinnt sie dann in 99,6 % der Fälle?

Andererseits wähle ich die extremsten Werte dieser Gewinnwahrscheinlichkeiten. Sie sollten die Gewinnwahrscheinlichkeiten jederzeit kalibrieren lassen, und es ist in Ordnung, davon abhängig zu machen, aber nur davon, was zuvor kam.

Das heißt, wenn wir die Gewinnwahrscheinlichkeiten am Ende des ersten Viertels, am Ende der ersten Hälfte oder am Ende des dritten Viertels betrachten, sollten sie kalibriert werden. Und wenn Sie die Gewinnwahrscheinlichkeiten nur dann betrachten, wenn sie größer als 99 % sind, sollten sie kalibriert werden. Und wenn man sich nur die Gewinnwahrscheinlichkeiten anschaut, wenn sie bisher im Spiel maximal sind, sollten sie kalibriert werden. Mir ist jedoch nicht klar, dass Sie erwarten sollten, dass die Kalibrierung für die Gewinnwahrscheinlichkeiten so gewählt wird, dass sie für das gesamte Spiel maximal ist, denn wenn die Gewinnwahrscheinlichkeit zum Zeitpunkt t p

Die Martingaleigenschaft von Wahrscheinlichkeitsvorhersagen

Darüber haben wir in Abschnitt 1.6 unseres Artikels aus dem Jahr 2020 geschrieben: Informationen, Anreize und Ziele in Wahlprognosen:


Und es kam auch in einigen Blogbeiträgen vor:

ab 2020: Glauben wir wirklich, dass die Demokraten eine 88-prozentige Likelihood haben, die Präsidentschaftswahl zu gewinnen?

ab 2020: Mehr über die Martingaleigenschaft probabilistischer Prognosen und einige andere Probleme mit unserem Wahlmodell

ab 2024: „Ungewöhnliche Wettmuster bei mehreren Tempelspielen“: Es ist Martingal-Zeit, Child!

auch ab 2024: Es ist Martingal-Zeit, Child! Wie bewertet man probabilistische Prognosen, bevor das Ereignis eintritt? Rajiv Sethi hat eine Idee. (Hinweis: Es handelt sich um Zeitreihen.)

Ich gehe davon aus, dass die Gewinnwahrscheinlichkeiten von ESPN näher an der Kalibrierung liegen als die Quoten auf dem Prognosemarkt oder modellbasierte Wahlprognosen. Prognosemärkte hängen von den Wettenden ab und es gibt keinen Grund, eine Kalibrierung zu erwarten, zumindest nicht, bis der Markt in gewisser Weise vollständig ausgereift ist. Modellbasierte Wahlprognosen basieren auf Näherungsmodellen mit bekannten Pathologien (zum Beispiel hier), daher sind sie nicht universell kalibriert. Die Wahrscheinlichkeiten von ESPN werden ebenfalls nicht kalibriert – auch sie basieren auf einem unvollständigen Modell –, aber ich gehe davon aus, dass das Modell auf Tonnen von Daten trainiert wurde, additionally glaube ich nicht, dass es weit davon entfernt sein sollte.

Wenn mir jemand die von Second zu Second geschätzten Gewinnwahrscheinlichkeiten aus einer großen Datenbank mit Basketballspielen schicken könnte, könnten wir einen Blick darauf werfen.

In der Zwischenzeit können wir eine gewisse Instinct erlangen, indem wir anhand eines mathematischen Modells simulieren, mit dem wir Gewinnwahrscheinlichkeiten genau berechnen können.

Den Prozess simulieren

Nehmen Sie eine einfache Brownsche Bewegung mit Drift an, bei der die Bewertungsdifferenz y

Eine coole Sache an diesem Modell ist, dass die Gewinnwahrscheinlichkeit anhand der Punktedifferenz zu jedem Zeitpunkt im Spiel trivial berechnet werden kann.

Wie falsch kann man liegen?

Zur Veranschaulichung zeige ich die Ergebnisse – den Punktestand und die Gewinnwahrscheinlichkeit während des Spiels – für 18 unabhängig simulierte Spiele. Der Einfachheit halber gehe ich davon aus, dass die Punkteverteilung 0 beträgt, sodass davon ausgegangen wird, dass die beiden Groups immer gleichwertig sind. Und ich werde das Spiel 10 Mal professional Minute durchlaufen, sodass das Spiel ungefähr aus einer Summe von 480 unabhängigen Schritten besteht.

Der Code ist unten; hier sind die Ergebnisse:

Ich weiß nicht genug über Basketball, um ein Gefühl dafür zu haben, wie plausibel diese als Spielergebnisse sind (abgesehen von der mangelnden Diskretion des Ergebnisses; wir haben ein kontinuierliches Modell verwendet, damit wir die relevanten Wahrscheinlichkeiten einfacher analytisch berechnen können). Sie ähneln dem Spiel Knicks-Spurs nicht allzu sehr, abgesehen von der einen Simulation unten hyperlinks im Diagramm, in der die „Spurs“ im dritten Viertel mit 10 Punkten Vorsprung führten und mit einer Siegwahrscheinlichkeit von 95,6 % das Most erreichten, bevor sie schließlich verloren.

Um ein umfassenderes Bild zu erhalten, habe ich 10.000 Spiele simuliert. (Nur als Anhaltspunkt: Es gibt 30 NBA-Groups, additionally gibt es jedes Jahr 82*30/2=1230 Spiele der regulären Saison.)

Für jedes Spiel habe ich „max_p_wrong“ berechnet: die höchste Gewinnwahrscheinlichkeit, die dem letztendlichen Verlierer des Spiels zugewiesen wird. In meiner Simulation beginnt jedes Spiel mit einer Wahrscheinlichkeit von 50/50 – denken Sie daran, der Einfachheit halber gehe ich immer von einer Punkteverteilung von 0 aus –, additionally muss max_p_wrong irgendwo zwischen 0,5 und 1 liegen. Folgendes kommt dabei heraus:

Extrem falsche Wahrscheinlichkeiten sind additionally keine Seltenheit. Wie häufig sind sie? Von diesen 10.000 Spielen hatten 61 einen max_p_wrong von mehr als 99 %. Das heißt, in 0,6 % der Spiele überschreitet die letztendlich verlierende Mannschaft irgendwann im Spiel die Schwelle von 99 % Siegwahrscheinlichkeit.

Dieses Ergebnis sollte steigen, wenn wir zur kontinuierlichen Aktualisierung übergehen. Aber wir aktualisieren bereits 10 Mal professional Minute. Wenn Sie diesen Zeitplan auf 50 Mal professional Minute erhöhen, erhöht sich Pr(max_p_wrong > 0,99) auf 0,0075, und wenn Sie diesen Zeitplan auf 100 Mal professional Minute erhöhen, beträgt er 0,0076. Ich vermute additionally, dass dies ungefähr die kontinuierliche Grenze ist.

OK, nur zur Kontrolle, ich simuliere 100.000 Spiele, und jetzt beträgt Pr(max_p_wrong > 0,99) 0,0072 bei 10 Updates professional Minute oder 0,0084 bei 50 Updates professional Minute. Ich gehe additionally einen Schritt weiter und sage, wenn wir die genaue Wahrscheinlichkeit unter kontinuierlicher Aktualisierung berechnen würden, kämen wir auf 0,0085.

Das struggle eine Überraschung. Bevor ich diese Simulation durchführte, ging ich davon aus, dass die Wahrscheinlichkeit, dass p_win für den letztendlichen Verlierer 99 % übersteigt jederzeit im Spiel selektionsbedingt mehr als 1 % betragen würde. Ich schätze, meine Instinct struggle falsch. Vielleicht liegt es daran, dass ich darauf konditioniere, welches Crew gewinnt. (Natürlich, wenn Sie den anderen Weg gehen, liegt die Wahrscheinlichkeit, dass p_win letztendlich 99 % überschreitet Gewinner liegt bei 100 % im kontinuierlichen Restrict, da der Gewinner mit ziemlicher Sicherheit feststeht, wenn noch eine Epsilon-Sekunde im Spiel verbleibt.)

Additionally, ja, die obige Grafik ist irgendwie interessant. Nach unserem Modell werden die meisten Spiele nicht allzu weit von im Nachhinein peinlichen Wahrscheinlichkeitsschätzungen abweichen, aber das kann manchmal passieren.

Es wäre interessant, die obige Grafik mit dem zu vergleichen, was Sie aus einer Datenbank mit Spielquotendaten von ESPN oder was auch immer erhalten würden.

Um es klarzustellen: Es gibt keinen Grund zu der Annahme, dass die obige Grafik irgendeine universelle Eigenschaft von Martingalen darstellt. Es ist ein ganz besonderes Modell! Aber man muss irgendwo anfangen. Auch die Existenz verschiedener zentraler Grenzwertsätze lässt mich hoffen, dass dies ein allgemeines Ergebnis für eine entsprechend eingeschränkte Klasse stetiger Martingalprozesse sein könnte. Es ist eine Forschungsfrage!

Eine überraschend gleichmäßige Verteilung

Um den Prozess besser zu verstehen, habe ich die Gewinnwahrscheinlichkeiten nach dem Ende jedes der drei Viertel für die 10.000 simulierten Spiele gesammelt. Nachfolgend finden Sie Histogramme dieser Wahrscheinlichkeiten und Kalibrierungsdiagramme:

Es überrascht nicht, dass die Kalibrierung in Ordnung ist. Schließlich werden die Wahrscheinlichkeiten anhand desselben Modells berechnet, aus dem auch die Daten stammen. Tatsächlich ist selbst die scheinbare Anomalie im Diagramm unten hyperlinks nur ein Artefakt bei kleinen Stichproben, das verschwindet, wenn wir die Anzahl der Simulationen auf 100.000 erhöhen.

Interessanter sind die Histogramme. Es macht Sinn, dass die Verteilung der Gewinnwahrscheinlichkeiten im Laufe des Spiels bei 0,5 beginnt und dann allmählich bei 0 und 1 ansteigt. Tatsächlich liegen die Gewinnwahrscheinlichkeiten am Ende des vierten Viertels genau bei 0 und 1.

Aber es ist lustig, dass die Verteilung der Siegwahrscheinlichkeiten zur Halbzeit völlig gleichmäßig ist. Es muss ein direktes mathematisches Argument geben, das eine Instinct für dieses Ergebnis liefert; Es ist zu perfekt, um nur ein Zufall zu sein.

Hier muss noch viel recherchiert werden:

– Verallgemeinerung über das kontinuierliche Modell hinaus, um diskrete Bewertungsänderungen zu ermöglichen.

– Verallgemeinerung über den Random Stroll hinaus; Es gibt keinen Grund, warum das Modell Markovianisch sein muss.

– Gibt es allgemeine Aussagen über diese Verteilungen der Gewinnwahrscheinlichkeiten unter beliebigen Martingalprozessen? Ich gehe davon aus, dass es einige Ergebnisse gibt. Zumindest sollte es einige Ungleichungen und Grenzwertsätze geben.

– Betrachtung realer Daten aus Basketball, anderen Sportarten und anderen Bereichen, einschließlich Wahlprognosen und Prognosemärkten.

Unser ultimatives Ziel besteht hier darin, ein allgemeines Maß für die Abweichung von der Martingaleigenschaft von Wahrscheinlichkeitsvorhersagen zu finden. Wir wollen etwas, das auf jeden Datensatz angewendet werden kann, natürlich mit größerer Präzision, wenn die Serien länger werden, zeitlich feiner verteilt sind und Replikationen verfügbar sind (wie bei den Tausenden von Basketballspielen).

PS Hier ist der R-Code zum Erstellen der obigen Simulationen und Grafiken:

set.seed(123)

blank_plot <- operate() {
  plot(0,0,xlab="",ylab="",xaxt="n",yaxt="n",bty="n",sort="n")
}

winprob <- operate(y, t, T, delta, sigma) {
  ifelse(t==T, (signal(y)+1)/2, pnorm((y + delta*(T-t))/(sigma*sqrt(T-t))))
}

N_games <- 10000

sigma <- 2
T <- 48
N_time_points <- T*10
t <- seq(0, T, size=N_time_points)
t_gap <- T / (N_time_points - 1)

y <- array(NA, c(N_time_points, N_games))
p_win <- array(NA, c(N_time_points, N_games))
y_final <- rep(NA, N_games)
p_wrong_halftime <- rep(NA, N_games)
max_p_wrong <- rep(NA, N_games)
for (j in 1:N_games){
  unfold <- 0
  delta <- unfold/T
  increments <- rnorm(N_time_points - 1, t_gap*delta, sigma*sqrt(t_gap))
  y(,j) <- c(0, cumsum(increments))
  p_win(,j) <- winprob(y(,j), t, T, delta, sigma)
  y_final(j) <- y(N_time_points,j)
  p_wrong_halftime(j)  0, 1 - p_win(N_time_points/2,j), p_win(N_time_points/2,j))
  max_p_wrong(j)  0, max(1 - p_win(,j)), max(p_win(,j)))
}

N_plots <- 18
par(mfrow=c(N_plots/3,6), mar=c(3,3,1,1), mgp=c(1.5,.5,0), tck=-.01)
t_range <- vary
y_range <- max(abs(y(,1:N_plots)))*c(-1,1)
p_range  0.99))

par(mfrow=c(3,3), mar=c(3,3,1,1), mgp=c(1.5,.5,0), tck=-.01)
hist(max_p_wrong, breaks=seq(0,1,0.01))
blank_plot()
blank_plot()

for (i in 1:3) {
  hist(p_win(N_time_points*i/4,), xlab="ESPN's Pr(win)", most important=paste("Histogram of win prob from finish of quarter", i), cex.most important=.9)
}

for (i in 1:3){
  in_quarter = T*(i-1)/4) & (t < T*i/4)
  p_win_vector <- as.vector(p_win(in_quarter,))
  y_final_vector <- as.vector(matrix(y_final, nrow=sum(in_quarter), ncol=N_games, byrow=TRUE))
  N_bins <- 20
  boundaries <- seq(0, 1, size=(N_bins+1))
  lo <- boundaries(1:N_bins)
  hello <- boundaries(2:(N_bins+1))
  p_in_bin <- rep(NA, N_bins)
  mean_in_bin <- rep(NA, N_bins)
  freq_in_bin <- rep(NA, N_bins)
  for (okay in 1:N_bins) {
    in_bin  lo(okay) & p_win_vector < hello(okay)
    p_in_bin(okay) <- sum(in_bin)/size(in_bin)
    mean_in_bin(okay) <- imply(p_win_vector(in_bin))
    freq_in_bin(okay)  0)
  }
  plot(mean_in_bin, freq_in_bin, pch=20, xlim=c(0,1), ylim=c(0,1), xaxs="i", yaxs="i",
       xlab="ESPN's Pr(win)", ylab="Empirical Pr(win)",
       most important=paste("Calibration from quarter", i), cex.most important=.9)
}

[ad_2]

]]>
http://chatgpz.de/data-science/die-new-york-knicks-und-die-martingaleigenschaft-kalibrierter-wahrscheinlichkeitsvorhersagen-mit-etwas-simulation-und-r-code/feed/ 0 19371
Strategie für Robotertrainingsdaten: Teleoperation vs. Simulation vs. menschliches Video für verkörperte KI http://chatgpz.de/artificial-intelligence/strategie-fuer-robotertrainingsdaten-teleoperation-vs-simulation-vs-menschliches-video-fuer-verkoerperte-ki/ http://chatgpz.de/artificial-intelligence/strategie-fuer-robotertrainingsdaten-teleoperation-vs-simulation-vs-menschliches-video-fuer-verkoerperte-ki/#respond Thu, 04 Jun 2026 06:21:54 +0000 http://chatgpz.de/artificial-intelligence/strategie-fuer-robotertrainingsdaten-teleoperation-vs-simulation-vs-menschliches-video-fuer-verkoerperte-ki/ [ad_1]

Die Entwicklung einer Roboterrichtlinie, die in der realen Welt funktioniert, ist kein Computerproblem mehr – es ist ein Datenproblem. Verkörperte KI-Groups haben drei Möglichkeiten, ihre Modelle anzutreiben: Teleoperation, Simulation und menschliches Video. Jedes hat eine andere Kostenkurve, ein anderes Wiedergabetreueprofil und eine andere Obergrenze dafür, was Ihr Roboter letztendlich lernen kann. Die Wahl der falschen Primärquelle kann sechs Monate und ein siebenstelliges Price range verschlingen, bevor Sie es herausfinden. In diesem Leitfaden wird jede Datenquelle für verkörperte KI aufgeschlüsselt, wo sie gewinnt, wo sie scheitert und wie sie zu einer Strategie für Robotertrainingsdaten in Produktionsqualität kombiniert werden kann.

Wichtige Erkenntnisse

  • Die Teleoperation liefert die Daten mit der höchsten Wiedergabetreue, weist jedoch bei 5–50 Episoden professional Bedienerstunde einen Engpass auf.
  • Die Simulation generiert kostengünstig Millionen von Episoden, führt jedoch zu einer Lücke zwischen Simulation und Realität, die bei kontaktreichen Aufgaben fehlschlägt.
  • Menschliche Movies lassen sich mühelos skalieren, weisen jedoch keine Bezeichnungen für Roboteraktionen auf und weisen eine Verkörperungslücke auf.
  • Aktuelle Untersuchungen zeigen, dass etwa 8 Simulationsbeispiele für domäneninterne Aufgaben den Wert eines teleoperierten Beispiels liefern.
  • Die meisten in der Produktion verkörperten KI-Pipelines kombinieren alle drei Quellen, anstatt eine auszuwählen.

Warum sind Daten der Flaschenhals in der verkörperten KI?

Daten sind der Engpass in der verkörperten KI, da es im Internetmaßstab keine aktionsgepaarten sensomotorischen Daten gibt. Ein Sprachmodell kann eine Billion Textual content-Tokens aus dem Internet aufnehmen. Eine Roboterrichtlinie benötigt synchronisierte Gelenkwinkel, Greifkräfte, Kamerabilder und Aufgabenkontext – alles aufgezeichnet während der physischen Manipulation. Nichts davon gibt es kostenlos.

Warum sind Daten der Flaschenhals in der verkörperten KI?

Der Skalenunterschied ist groß. Über 3,9 Millionen Industrieroboter sind weltweit im Einsatz (IFR World Robotics, 2024), doch der größte offene Robotermanipulationsdatensatz enthält etwa 1 Million Episoden (Open X-Embodiment, Padalkar et al., 2023). Die {Hardware} ist überall; die Daten sind es nicht. Jede neue Ausführungsform – einarmiger Manipulator, bimanueller Humanoid, cellular Foundation mit Arm – setzt die Datenanforderungen effektiv zurück, da auf einem Formfaktor trainierte Richtlinien selten sauber auf einen anderen übertragen werden.

Verkörperungslücke: Der Leistungsverlust, der auftritt, wenn eine auf die physische Konfiguration eines Roboters trainierte Richtlinie auf einem anderen Roboter bereitgestellt wird.

Aus diesem Grund denken Robotic-Studying-Groups heute an Datenstrategien und nicht nur an der Datenerfassung. Die richtige Mischung aus Teleoperation, Simulation und menschlichem Video bestimmt, was Ihr Modell kann, wie schnell es versendet wird und wie viel Sie für die Anreise ausgeben.

Was sind Teleoperationsdaten und wann setzen sie sich durch?

Teleoperationsdaten werden aufgezeichnet, wenn ein menschlicher Bediener einen Roboter in Echtzeit über einen Führungsarm, ein VR-Headset, ein Exoskelett oder eine am Handgelenk montierte Schnittstelle steuert, während das System jeden Gelenkwinkel, jeden Kraftmesswert und jedes Kamerabild synchron protokolliert.

Was sind Teleoperationsdaten und wann setzen sie sich durch?

Teleoperation: Menschliche Echtzeitsteuerung eines Roboters mit synchronisierten sensomotorischen Daten, die während der Manipulation aufgezeichnet werden.

Teleoperation gewinnt durch Treue. Da die Daten von einem erfahrenen Menschen generiert werden, der genau die Aufgabe am exakten Roboter ausführt, ist die Übereinstimmung zwischen Aktion und Zustand perfekt und die Verkörperungslücke beträgt Null. Nachahmungslernen, Verhaltensklonen und Feinabstimmung von Richtlinien profitieren alle von sauberen Teleop-Demonstrationen.

Die Kosten zeigen sich im Maßstab. Ein erfahrener Teleoperator produziert je nach Komplexität der Aufgabe 5–50 Episoden professional Stunde, wobei die Qualität mit zunehmender Ermüdung des Bedieners abnimmt. Ein Roboter, ein Bediener – das ist die Obergrenze, und deshalb haben sich offene Plattformen wie ALOHA, UMI und Exoskelett-basierte humanoide Bohrinseln (AgiBot, Fourier GR-1) alle auf Kostensenkung und Durchsatzsteigerung statt auf radikale Skalierung konzentriert.

Shaips Physische KI-Datendienste Betreiben Sie Teleoperationszellen neben multimodalen Erfassungsabläufen, sodass Robotikteams keine Operator-Pipelines von Grund auf aufbauen müssen.

Was sind Simulationsdaten und wo werden sie skaliert?

Simulationsdaten werden von Physik-Engines – MuJoCo, NVIDIA Isaac Sim, Isaac Lab, PyBullet – generiert, die virtuelle Roboter rendern, die Aufgaben über Tausende von parallelen Instanzen ausführen. Ein einzelner GPU-Cluster kann über Nacht Millionen von Episoden zu Grenzkosten nahe Null produzieren.

Was sind Simulationsdaten und wo werden sie skaliert?

Simulation gewinnt in Bezug auf Maßstab und Sicherheit. Grenzfälle, Kollisionsfehler und gefährliche Konfigurationen können alle untersucht werden, ohne dass die {Hardware} beschädigt wird. Die Domänen-Randomisierung – zufällige Variation von Beleuchtung, Texturen, Reibung und Gelenksteifheit während des Trainings – führt zu Richtlinien, die reale Variationen überstehen, anstatt sich übermäßig an eine einzelne visuelle Konfiguration anzupassen.

Sim-zu-Actual-Lücke: Der Leistungsabfall, wenn eine in der Simulation trainierte Richtlinie auf physischer {Hardware} bereitgestellt wird, wird normalerweise durch Kontaktdynamik, Sensorrauschen und Unterschiede in der visuellen Wiedergabetreue verursacht.

Die Kosten werden bei der Bereitstellung angezeigt. Simulatoren modellieren nicht die Reibung eines feuchten Seifenstücks, das Nachgeben einer Schaumstoffverpackung oder die visuelle Variation von spiegelndem Metall unter Neonbeleuchtung. Bei kontaktreichen Aufgaben scheitert Sim-to-Actual am häufigsten. Eine im Jahr 2025 veröffentlichte Studie hat den Kompromiss quantifiziert: Ungefähr 8 Simulationsproben bieten den gleichen Nutzen wie eine teleoperierte Probe für domäneninterne Manipulationsaufgaben (Information Utilization Regulation for Robotic Manipulation, 2025).

Fotorealistische Rendering-Plattformen wie NVIDIA Cosmos und 3D Gaussian Splatting verringern die visuelle Lücke, aber die Dynamiklücke – Reibung, Verformung, Nachgiebigkeit – bleibt das schwierigere Downside.

Was sind menschliche Videodaten und was wird dadurch freigeschaltet?

Menschliche Videodaten sind Aufnahmen von Menschen, die Manipulationsaufgaben ausführen – Wäsche falten, Geschirr stapeln, Komponenten zusammenbauen –, aufgenommen von egozentrischen Kameras, Überwachungswinkeln oder kuratierten Demonstrationssets.

Was sind menschliche Videodaten und was wird dadurch freigeschaltet?

Menschliches Video überzeugt durch Kosten und Vielfalt. Ein einzelner Mitarbeiter mit einem Smartphone kann an einem einzigen Nachmittag Hunderte von Demonstrationen in Küchen, Garagen, Fabriken und Büros aufzeichnen. Kein Roboter erforderlich, kein Labor erforderlich, keine Bedienerschulung erforderlich. Große Imaginative and prescient-Sprachmodelle, die vorab anhand menschlicher Movies trainiert wurden, erwerben ein allgemeines Szenenverständnis, das vor der Feinabstimmung sinnvoll auf Roboterrichtlinien übertragen werden kann.

Die Einschränkung ist die fehlende Aktionsbezeichnung. Das Video zeigt eine Hand, die eine Tasse ergreift; Es zeichnet weder die ausgeübte Kraft noch die Gelenkwinkel auf, die ein Roboterarm benötigen würde, um die Bewegung nachzubilden. Inverse-Dynamics-Modelle und Hand-to-Finish-Effektor-Retargeting können diese Bezeichnungen teilweise ableiten, die resultierenden Pseudoaktionen sind jedoch verrauscht.

Stellen Sie sich ein Startup vor, das einen Küchenroboter baut. Sie haben 80.000 Greenback zum Ausgeben. Zwanzig Stunden geschickter Teleoperation könnten ihnen 200 saubere Episoden auf ihrem Zielarm bescheren. Zwanzig Stunden Videosammlung von Mitwirkenden aus verschiedenen Küchen zu Hause bescheren ihnen mehrere tausend egozentrische Clips. Das Telefongerät ist schärfer. Das Videoset ist breiter. Der Roboter benötigt beides, in unterschiedlichen Verhältnissen in unterschiedlichen Trainingsstadien.

Teleoperation vs. Simulation vs. menschliches Video: ein direkter Vergleich

Wie wählt man die richtige Datenstrategie für verkörperte KI?

Die Auswahl der richtigen Datenstrategie für das Robotertraining beginnt mit dem Bereitstellungsziel, nicht mit der Datenquelle. Ein Choose-and-Place-Roboter in der Fabrik, ein humanoider Haushalt und ein chirurgischer Assistent haben völlig unterschiedliche Anforderungen an Treue, Sicherheit und Verkörperung – und daher völlig unterschiedliche ideale Datenmischungen.

Ein praktischer dreistufiger Rahmen:

Praktischer dreistufiger Rahmen

  1. Machen Sie sich vorab mit Simulation und menschlichem Video vertraut. Nutzen Sie die Simulation für eine umfassende Abdeckung von Szenen, Objekten und Sicherheitskantenfällen. Fügen Sie egozentrische menschliche Movies hinzu, um natürliche Manipulationsvoraussetzungen und reale visuelle Vielfalt zu erzielen. Diese Section ist günstig und umfassend.
  2. Anker mit Teleoperation an der Zielverkörperung. Sammeln Sie 500–2.000 hochwertige Teleop-Episoden über genau den Roboter, den Sie einsetzen möchten. Diese Section ist teuer, aber unersetzlich – sie verleiht der Politik eine echte Dynamik.
  3. Iterieren Sie mit dem Datenschwungrad. Erfassen Sie nach der Bereitstellung autonome Rollouts und Fehlerfälle. Füttere sie zusammen mit frischen Teleop- und Menschenvideos wieder in den nächsten Trainingszyklus.

Stellen Sie sich das wie die Ausbildung eines Kochs vor. Simulation ist eine Kochschule – umfassend, billig, fehlertolerant. Ein menschliches Video sieht sich Tausende von Kochvideos an – breiter Kontext, keine eigene Küche. Teleoperation ist das praktische Praktikum in der Küche, in der Sie arbeiten – langsam, teuer, unersetzlich. Kein ernsthafter Koch lässt einen der drei aus.

Shaips multimodale Datenerfassung Und Anmerkungsworkflows sind so konzipiert, dass sie alle drei Ebenen unterstützen – Teleop-Zellenbetrieb, Simulationskennzeichnung und egozentrische Videosammlung durch ein globales Netzwerk von über 500.000 Mitwirkenden –, sodass Robotikteams eine Hybridstrategie orchestrieren können, ohne fünf Anbieter zusammenzufügen.

Abschluss

Die Debatte Teleoperation vs. Simulation vs. menschliches Video hat im Jahr 2026 eine klare Antwort: Es ist keine Wahl, es ist ein Stack. Teleoperation gibt Ihnen Treue. Durch Simulation erhalten Sie Maßstab. Menschliches Video bietet Ihnen Vielfalt. Produktionsverkörperte KI-Pipelines kombinieren alle drei, gewichtet nach dem Bereitstellungsziel, der Verkörperung und dem Price range. Die Groups, die das nächste Jahrzehnt des Roboterlernens gewinnen, werden nicht diejenigen sein, die sich für die günstigste Quelle entscheiden – sie werden diejenigen sein, die die intelligenteste Mischung organisieren.

[ad_2]

]]>
http://chatgpz.de/artificial-intelligence/strategie-fuer-robotertrainingsdaten-teleoperation-vs-simulation-vs-menschliches-video-fuer-verkoerperte-ki/feed/ 0 19021
5 Scipy.stats-Methods zur Simulation von „Was-wäre-wenn“-Szenarien http://chatgpz.de/data-analytics/5-scipy-stats-methods-zur-simulation-von-was-waere-wenn-szenarien/ http://chatgpz.de/data-analytics/5-scipy-stats-methods-zur-simulation-von-was-waere-wenn-szenarien/#respond Wed, 27 May 2026 14:04:39 +0000 http://chatgpz.de/data-analytics/5-scipy-stats-tricks-zur-simulation-von-was-waere-wenn-szenarien/ [ad_1]

5 Scipy.stats-Tricks zur Simulation von „Was-wäre-wenn“-Szenarien

# Einführung

Daten sind selten statisch. Entscheidungen sind selten risikofrei. Als Datenwissenschaftler werden Sie häufig gebeten, Geschäftsannahmen einem Stresstest zu unterziehen, Verteilungsunsicherheiten zu untersuchen oder various Realitäten zu simulieren.

  • „Was wäre, wenn unsere tägliche aktive Nutzerakquise das Doppelte kosten würde?“
  • „Was passiert, wenn unser Serververkehr während einer Werbeveranstaltung um 300 % ansteigt?“
  • „Wie hoch ist die Wahrscheinlichkeit, dass unsere Betriebsverluste in diesem Quartal 50.000 US-Greenback übersteigen?“

Beantwortung dieser Fragen was ist, wenn Fragen erfordert den Übergang von einfachen Punktschätzungen (wie dem einfachen Mittelwert) zu robustem, probabilistischem Denken. Während viele Praktiker sofort auf umfangreiche Simulations-Engines umsteigen, enthält der standardmäßige wissenschaftliche Python-Stack bereits ein nicht ausreichend genutztes Arbeitstier für genau diese Artwork der Modellierung: scipy.stats. Abgesehen von seinem allgemeinen Ruf für die Durchführung einfacher Hypothesentests oder die Berechnung von p-Werten, scipy.stats Bietet eine einheitliche programmatische Schnittstelle zum Parametrisieren, Abtasten und Berechnen von Risikometriken für Dutzende kontinuierlicher und diskreter Wahrscheinlichkeitsverteilungen.

In diesem Artikel werfen wir einen Blick unter die Haube scipy.statsDabei werden fünf wesentliche Methods untersucht, um leistungsstarke, strenge Simulationen nur mit NumPy und SciPy zu entwerfen.

# 1. Einfrieren von Verteilungen zur Parametrisierung von Szenarien

Bei der Modellierung von Szenarien möchten Sie häufig unterschiedliche Zustände der Welt darstellen: eine konservative Basislinie, einen optimistischen Finest-Case und einen pessimistischen Worst-Case. Im Standardprozedurcode könnten Sie diese darstellen, indem Sie Wörterbücher mit Parametern (z. B. Standort) mit sich herumtragen loc und Maßstab scale) und entpacken Sie sie jedes Mal in Funktionen, wenn Sie eine Wahrscheinlichkeit bewerten oder eine Stichprobe ziehen müssen.

Ein überlegenes, objektorientiertes Muster ist Einfrieren Verteilungen. In scipy.statsAufruf einer Verteilungsklasse (z. B stats.norm, stats.lognormoder stats.gamma) und die direkte Übergabe Ihrer Parameter an den Konstruktor gibt eine „eingefrorene“ Zufallsvariable zurück (eine Instanz von rv_frozen).

Dieses eingeschlossene Objekt kapselt das gesamte Wahrscheinlichkeitsmodell. Sie können es als einzelnes Objekt in Ihrer Codebasis weitergeben, Szenariodefinitionen im Handumdrehen austauschen und Methoden wie aufrufen .rvs(), .pdf(), .cdf()oder .ppf() ohne jemals die Parameter erneut angeben zu müssen.

Angenommen, wir modellieren die tägliche Produktnachfrage. Bei einer manuellen Implementierung müssen wir Wörterbücher oder Variablen durch jede Section unserer Verarbeitungspipeline ziehen:

import scipy.stats as stats

# Defining uncooked situation parameters
situations = {
    "recession": {"imply": 800, "std": 250},
    "baseline": {"imply": 1200, "std": 150},
    "growth": {"imply": 1800, "std": 300}
}

# Drawing samples or evaluating threat requires handbook parameter unpacking
def simulate_demand(scenario_name, measurement=5):
    params = situations(scenario_name)
    # Passing parameters inside each statistical name
    samples = stats.norm.rvs(loc=params("imply"), scale=params("std"), measurement=measurement)
    p_exceed_1000 = 1 - stats.norm.cdf(1000, loc=params("imply"), scale=params("std"))
    return samples, p_exceed_1000

for title in situations.keys():
    samples, prob = simulate_demand(title)
    print(f"{title.capitalize()} -> Prob > 1000: {prob:.2%}")

Hier ist eine elegantere Various. Durch die Instanziierung der Verteilung friert SciPy die Parameter ein und gibt uns ein in sich geschlossenes, sauberes Szenarioobjekt:

import scipy.stats as stats

# With scipy, freeze the distribution parameters right into a named object
scenario_models = {
    "recession": stats.norm(loc=800, scale=250),
    "baseline": stats.norm(loc=1200, scale=150),
    "growth": stats.norm(loc=1800, scale=300)
}

# The pipeline merely accepts a frozen RV object, decoupling logic from parameters
def run_scenario_pipeline(rv_frozen, measurement=5):

    # Lock-in strategies are known as instantly on the item
    samples = rv_frozen.rvs(measurement=measurement)

    # sf() is survival perform (1 - CDF)
    p_exceed_1000 = rv_frozen.sf(1000)

    return samples, p_exceed_1000

for title, mannequin in scenario_models.objects():
    _, prob = run_scenario_pipeline(mannequin)
    print(f"{title.capitalize()} State of affairs | Prob demand > 1000: {prob:.2%}")

Ausgabe:

Recession State of affairs | Prob demand > 1000: 21.19%
Baseline State of affairs | Prob demand > 1000: 90.88%
Increase State of affairs | Prob demand > 1000: 99.62%

Indem wir unsere Parameter einfrieren, trennen wir unsere mathematischen Annahmen von unserer Ausführungslogik. Wenn wir unser Nachfragemodell von einer Normalverteilung auf eine verzerrte logarithmische Normalverteilung umstellen möchten, müssen wir nur die einzelne Zeile ändern, in der wir das eingefrorene Objekt initialisieren. Die nachgelagerte Pipeline bleibt unberührt.

# 2. Monte-Carlo-Simulation mit .rvs() zur Unsicherheitsquantifizierung

Bei der Geschäftsplanung erstellen Praktiker häufig Tabellenkalkulationen, die den Umsatz anhand statischer Punktschätzungen berechnen – z income = every day site visitors * conversion charge * common order worth. Allerdings ist jede dieser Eingaben höchst unsicher. Durch die Multiplikation von Durchschnittswerten wird die zusammengesetzte Varianz ausgeblendet, was zur Folge hat Fehler der Durchschnittswerteoder die systematische Unterschätzung des Risikos.

Um diese Unsicherheit zu quantifizieren, können wir verwenden Monte-Carlo-Simulation. Anstatt statische Zahlen anzunehmen, stellen wir jede Variable als Wahrscheinlichkeitsverteilung dar. Mit der .rvs(measurement=n) Mit der Methode für unsere eingefrorenen Verteilungen können wir sofort $N$ Zufallsstichproben aus allen Eingaben ziehen, sie durch unsere eigene Formel in einer vektorisierten NumPy-Pipeline weitergeben und die vollständige Wahrscheinlichkeitsverteilung des Endergebnisses auswerten.

Bei der Berechnung eines statischen besten/schlechtesten Falls werden die gemeinsame Wahrscheinlichkeit von Ereignissen und die tatsächliche Verteilung der Ergebnisse nicht berücksichtigt, während das Schreiben manueller Schleifen in reinem Python unglaublich langsam ist.

import random

# Brittle level estimates
avg_traffic = 50000
avg_conversion = 0.05
avg_aov = 60.0

expected_revenue = avg_traffic * avg_conversion * avg_aov
print(f"Level Estimate Anticipated Income: ${expected_revenue:,.2f}")

# Sluggish, iterative handbook sampling loop
n_sims = 100000
revenue_clunky = ()
for _ in vary(n_sims):
    # Simulating regular site visitors and uniform conversion charges
    site visitors = random.gauss(50000, 5000)
    conversion = random.uniform(0.04, 0.06)
    aov = random.gammavariate(15, 4.0)
    revenue_clunky.append(site visitors * conversion * aov)

Ausgabe:

Level Estimate Anticipated Income: $150,000.00

Durch die Nutzung scipy.stats Verteilungsmodelle und gleichzeitige Stichprobenziehung mit .rvs()können wir die gesamte Simulation in einer einzigen vektorisierten NumPy-Operation berechnen. Lassen Sie uns das Downside in vier verschiedenen Schritten angehen:

  1. Definieren Sie geeignete Verteilungsformen für unser Szenario
  2. Zeichnen Sie N Proben
  3. Ausbreitung durch Geschäftslogik (über Vektorisierung)
  4. Extrahieren Sie Risikoperzentile
import numpy as np
import scipy.stats as stats

# 1. Outline applicable distribution shapes for our situation
np.random.seed(42)
n_simulations = 100_000

# Site visitors is symmetric (regular)
traffic_dist = stats.norm(loc=50000, scale=5000)

# Conversion charge is a likelihood bounded between 0 and 1 (beta)
# Imply = 5 / (5 + 95) = 5%
conversion_dist = stats.beta(a=5, b=95)

# Common order worth is optimistic and right-skewed (gamma)
# Imply = 15 * 4 = $60
aov_dist = stats.gamma(a=15, scale=4)

# 2. Draw N samples
traffic_samples = traffic_dist.rvs(measurement=n_simulations)
conversion_samples = conversion_dist.rvs(measurement=n_simulations)
aov_samples = aov_dist.rvs(measurement=n_simulations)

# 3. Vectorized propagation by means of the enterprise logic
revenue_samples = traffic_samples * conversion_samples * aov_samples

# 4. Extract threat percentiles
mean_rev = np.imply(revenue_samples)

# 5% likelihood of constructing lower than this
p5_rev = np.percentile(revenue_samples, 5)

# 5% likelihood of constructing greater than this
p95_rev = np.percentile(revenue_samples, 95)

print(f"Probabilistic Imply Income:  ${mean_rev:,.2f}")
print(f"fifth Percentile (Draw back):    ${p5_rev:,.2f}")
print(f"ninety fifth Percentile (Upside):     ${p95_rev:,.2f}")

Ausgabe:

Probabilistic Imply Income:  $150,153.16
fifth Percentile (Draw back):    $51,294.37
ninety fifth Percentile (Upside):     $300,734.30

Während der durchschnittliche Umsatz unserer ursprünglichen Punktschätzung entspricht (ca. 150.000 US-Greenback), zeigt die Monte-Carlo-Simulation, dass die Wahrscheinlichkeit, dass unser Umsatz darunter liegt, bei 5 % liegt 97.180 $ aufgrund der gemeinsamen Volatilität von Site visitors, Conversion und Bestellwert. Punktschätzungen verbergen diese betriebliche Gefährdung vollständig.

# 3. Sensitivitätsanalyse über Parameter-Sweeps

Bei der Szenarioanalyse möchten Sie möglicherweise herausfinden, wie empfindlich Ihr Abwärtsrisiko auf Änderungen bestimmter Inputannahmen reagiert. Wenn Sie beispielsweise die Kundenakquisekosten (CAC) modellieren, möchten Sie verstehen, wie eine Verschiebung unserer Marketingvolatilität (Standardabweichung) unseren Worst-Case-CAC (95. Perzentil) verschiebt.

Während Sie für jede Konfiguration eine vollständige Monte-Carlo-Simulation durchführen könnten, scipy.stats bietet eine viel schnellere, mathematisch elegante Abkürzung: die Prozentpunktfunktion (.ppf()), die die Umkehrung der kumulativen Verteilungsfunktion (CDF) ist.

Indem wir unsere Parameter durchsuchen, die Verteilungen einfrieren und ausführen .ppf()können wir die genauen Perzentilgrenzen analytisch in Mikrosekunden berechnen, ohne eine einzige Zufallsstichprobe zu generieren.

Die Simulation tausender Stichproben für jede Parameterpermutation, nur um ein Perzentil zu finden, ist höchst ineffizient und rechenintensiv.

import numpy as np
import scipy.stats as stats

mean_cac = 50.0
volatilities = (5.0, 10.0, 15.0, 20.0)

# Operating an enormous random simulation simply to extract a single percentile
for vol in volatilities:
    samples = stats.norm.rvs(loc=mean_cac, scale=vol, measurement=100000)
    p95_clunky = np.percentile(samples, 95)
    print(f"Std: {vol} -> ninety fifth Percentile CAC: ${p95_clunky:.2f} (sampled)")

Beispielausgabe:

Std: 5.0 -> ninety fifth Percentile CAC: $58.23 (sampled)
Std: 10.0 -> ninety fifth Percentile CAC: $66.53 (sampled)
Std: 15.0 -> ninety fifth Percentile CAC: $74.65 (sampled)
Std: 20.0 -> ninety fifth Percentile CAC: $82.85 (sampled)

Durch die Nutzung der .ppf() Mithilfe der Methode für unsere eingefrorenen Verteilungen berechnen wir sofort den genauen analytischen Schwellenwert.

import scipy.stats as stats

mean_cac = 50.0
volatilities = (5.0, 10.0, 15.0, 20.0)

# The SciPy Means: Sweep parameters and compute actual percentiles utilizing .ppf()
for vol in volatilities:
    # 1. Freeze the distribution
    cac_dist = stats.norm(loc=mean_cac, scale=vol)

    # 2. Compute actual ninety fifth percentile analytically
    p95_exact = cac_dist.ppf(0.95)

    # 3. Compute the likelihood of exceeding an excessive threshold of $80
    p_exceed_80 = cac_dist.sf(80.0)

    print(f"Volatility (Std): ${vol:02.0f} | ninety fifth Percentile CAC: ${p95_exact:.2f} | P(CAC > $80): {p_exceed_80:.2%}")

Ausgabe:

Volatility (Std): $05 | ninety fifth Percentile CAC: $58.22 | P(CAC > $80): 0.00%
Volatility (Std): $10 | ninety fifth Percentile CAC: $66.45 | P(CAC > $80): 0.13%
Volatility (Std): $15 | ninety fifth Percentile CAC: $74.67 | P(CAC > $80): 2.28%
Volatility (Std): $20 | ninety fifth Percentile CAC: $82.90 | P(CAC > $80): 6.68%

Dieser Durchlauf legt unsere Grenzen offen: Wenn unsere Akquisitionsvolatilität von 5 US-Greenback auf 20 US-Greenback steigt, steigen unsere Akquisitionskosten im 95. Perzentil 58,22 $ Zu 82,90 $und das Risiko, unser maximales Akquisitionsbudget von 80 US-Greenback zu überschreiten, steigt 0,00 % Zu 6,68 %.

# 4. Modellierung des Tail-Risikos mit Heavy-Tailed-Verteilungen

Ein häufiger Fehler bei der Szenarioplanung ist die Annahme, dass jeder kontinuierliche Datensatz einer Customary-Gauß-Verteilung (Normalverteilung) folgt. Obwohl die Normalverteilung einfach zu modellieren ist, weist sie extrem dünne Enden auf. In der realen Welt kommt es zu Systemausfällen, finanziellen Verlusten und API-Latenzen schwerschwänzig: Extremereignisse treten weitaus häufiger auf, als ein Gaußsches Modell jemals vorhersagen würde.

Um unsere Systeme ordnungsgemäß auf das Extremrisiko zu testen, müssen wir naive Normalannahmen durch stark ausgeprägte Alternativen wie Scholar’s t (stats.t), logarithmisch regular (stats.lognorm) oder Pareto (stats.pareto).

Mit der .match() Methode in scipy.statskönnen wir sowohl Regular- als auch Heavy-Tail-Verteilungen an historische Beobachtungen anpassen und dann die Überlebensfunktion verwenden (.sf()), um die realistische Wahrscheinlichkeit von Ausfällen im schlimmsten Fall zu quantifizieren.

Wenn Sie mit stark ausgeprägten Daten arbeiten, werden Sie durch die Modellierung mit einer Normalverteilung völlig blind gegenüber extremen Ereignissen nach unten:

import numpy as np
import scipy.stats as stats

# Artificial historic latency knowledge with heavy tails (Scholar's t with df=3)
np.random.seed(42)
latencies = stats.t(df=3, loc=200, scale=40).rvs(measurement=1000)

# Naively assuming regular distribution with out testing match
mean_lat, std_lat = np.imply(latencies), np.std(latencies)
prob_outage_clunky = 1 - stats.norm.cdf(400, loc=mean_lat, scale=std_lat)
print(f"Naive Gaussian P(Latency > 400ms): {prob_outage_clunky:.6%}")

Ausgabe:

Naive Gaussian P(Latency > 400ms): 0.046321%

Indem wir eine Scholar-t-Verteilung an die Normalverteilung anpassen, können wir die Güte der Anpassung explizit vergleichen und Extremrisiken genau berechnen.

import numpy as np
import scipy.stats as stats

# Artificial historic latency knowledge (heavy-tailed)
np.random.seed(42)
latencies = stats.t(df=3, loc=200, scale=40).rvs(measurement=1000)

# 1. Match regular and heavy-tailed Scholar's t distributions to historic knowledge
norm_params = stats.norm.match(latencies)
t_params = stats.t.match(latencies)

# 2. Freeze the fitted fashions
fitted_norm = stats.norm(*norm_params)
fitted_t = stats.t(*t_params)

# 3. Calculate likelihood of exceeding a extreme timeout threshold of 400ms
prob_outage_norm = fitted_norm.sf(400)
prob_outage_t = fitted_t.sf(400)

# 4. Calculate the 99th percentile response time for SLA stress-testing
p99_norm = fitted_norm.ppf(0.99)
p99_t = fitted_t.ppf(0.99)

print(f"Regular SLA (99th percentile):   {p99_norm:.2f} ms | P(Latency > 400ms): {prob_outage_norm:.4%}")
print(f"Heavy-t SLA (99th percentile):  {p99_t:.2f} ms | P(Latency > 400ms): {prob_outage_t:.4%}")

Ausgabe:

Regular SLA (99th percentile):   340.14 ms | P(Latency > 400ms): 0.0463%
Heavy-t SLA (99th percentile):  368.97 ms | P(Latency > 400ms): 0.6161%

Der Unterschied ist spürbar. Unter der naiven Gaußschen Annahme wird vorhergesagt, dass ein Ausfall mit hoher Latenz von mehr als 400 ms ein seltenes Ereignis ist (vorkommt). 0,0463 % der Zeit). In Wirklichkeit zeigt das Heavy-Tailed-Modell, dass die Ausfallwahrscheinlichkeit gleich ist 0,6161 % – über 13x häufiger. Durch die Anpassung von Distributionen mit starken Schwankungen werden Sie nicht von scheinbar „seltenen“ Fehlern überrascht.

# 5. Bootstrapping-Konfidenzintervalle für Szenariometriken

Wenn Sie eine Simulation ausführen oder einen kleinen historischen Datensatz analysieren, berechnen Sie eine zusammenfassende Metrik (z. B. das 90. Perzentil der Auftragsgrößen oder die mittleren Betriebskosten). Aber wie stabil ist diese Metrik? Was wäre, wenn Ihre historische Stichprobe etwas anders wäre?

Die analytische Berechnung von Konfidenzintervallen für nicht standardmäßige Metriken (wie ein Verhältnis oder ein Perzentil) ist mathematisch komplex. In der Vergangenheit haben Praktiker klobige verschachtelte Schleifen geschrieben, um Daten manuell erneut abzutasten.

SciPy 1.7 führte den neuesten Stand der Technik ein scipy.stats.bootstrap Funktion. In einem einzigen, hochoptimierten Funktionsaufruf können Sie robuste, nicht parametrische, voreingenommene und beschleunigte (BCa) Konfidenzintervalle für berechnen beliebig willkürliche zusammenfassende Statistik, ohne die Annahme einer zugrunde liegenden Verteilung.

Das Schreiben verschachtelter Schleifen zum erneuten Abtasten, Berechnen von Statistiken und Ermitteln der Quantile Ihrer Bootstrap-Verteilung ist langsam, ausführlich und kann Bias- oder Beschleunigungsanpassungen nicht verarbeiten.

import numpy as np

# A small pattern of fifty transaction quantities
np.random.seed(42)
transactions = np.random.lognormal(imply=4, sigma=0.8, measurement=50)

# Guide bootstrap loop
boot_medians = ()
for _ in vary(10000):
    pattern = np.random.alternative(transactions, measurement=len(transactions), change=True)
    boot_medians.append(np.median(pattern))

ci_low = np.percentile(boot_medians, 2.5)
ci_high = np.percentile(boot_medians, 97.5)

print(f"Guide Bootstrap Median CI: ({ci_low:.2f}, {ci_high:.2f})")

Ausgabe:

Guide Bootstrap Median CI: (36.47, 60.12)

Im Gegensatz dazu übergeben wir unsere Daten- und Statistikfunktion direkt an stats.bootstrapSciPy berechnet ein Bias-korrigiertes Konfidenzintervall in Millisekunden.

import numpy as np
import scipy.stats as stats

# A small pattern of fifty transaction quantities
np.random.seed(42)
transactions = np.random.lognormal(imply=4, sigma=0.8, measurement=50)

# Outline the statistic we wish to assemble a CI for (should settle for knowledge as a sequence)
def my_median(data_seq):
    return np.median(data_seq)

# Execute stats.bootstrap utilizing BCa technique, passing knowledge as a tuple containing our array
bootstrap_res = stats.bootstrap(
    (transactions,),
    statistic=my_median,
    n_resamples=9999,
    confidence_level=0.95,
    technique='BCa'
)

ci = bootstrap_res.confidence_interval

print(f"Pattern Median transaction measurement: ${np.median(transactions):.2f}")
print(f"95% Confidence Interval (BCa):  (${ci.low:.2f}, ${ci.excessive:.2f})")
print(f"Customary Error of the Median:   ${bootstrap_res.standard_error:.4f}")

Ausgabe:

95% Confidence Interval (BCa):  ($36.47, $60.12)
Customary Error of the Median:   $5.8819

Beachten Sie, dass die BCa-Methode im Vergleich zum naiven manuellen Bootstrap ein engeres und äußerst genaues, mathematisch fundiertes Konfidenzintervall zurückgab. BCa passt sich automatisch an Schiefe und Verzerrungen im zugrunde liegenden Datensatz an und liefert eine prinzipielle Unsicherheit, die über jedem Szenario oder jeder Stichprobenschätzung liegt.

# Zusammenfassung

Der Übergang vom einfachen Punktschätzungsdenken zum ausgereiften Verteilungsdenken ist einer der wirkungsvollsten Schritte, die Sie als Datenwissenschaftler unternehmen können.

Durch die Einbeziehung dieser fünf scipy.stats Wenn Sie Methods in Ihren Modellierungsworkflow integrieren, können Sie äußerst belastbare, mathematisch fundierte Szenariosysteme entwerfen:

  • Das Einfrieren von Verteilungen kapselt Ihre Geschäftsannahmen in saubere, austauschbare Szenarioobjekte
  • Monte-Carlo-Probenahme über .rvs() propagiert multivariable Unsicherheiten nahtlos in vektorisierten Hochgeschwindigkeits-C-Erweiterungen
  • Parameter-Sweeps mit .ppf() Berechnen Sie präzise Risikoschwellenwerte und Perzentile analytisch in Mikrosekunden
  • Schwerer Beschlag mit .match() Und .sf() schützt Ihre Produktionsarchitekturen vor katastrophalen Black-Swan-Ereignissen
  • BCa Bootstrapping mit stats.bootstrap Platziert robuste, verteilungsfreie Konfidenzgrenzen über jeder Szenariometrik

Wenn Sie das nächste Mal damit beauftragt werden, Systeme einem Stresstest zu unterziehen oder Geschäftsrisiken unter Unsicherheit abzuschätzen, überspringen Sie die komplexen externen Abhängigkeiten. Schnappen Sie sich Ihren standardmäßigen wissenschaftlichen Python-Stack und nutzen Sie die Leistungsfähigkeit von scipy.statsund lassen Sie die Simulationen laufen!

Matthew Mayo (@mattmayo13) hat einen Grasp-Abschluss in Informatik und ein Diplom in Information Mining. Als geschäftsführender Herausgeber von KDnuggets & Statistikund Mitherausgeber bei Beherrschung des maschinellen LernensZiel von Matthew ist es, komplexe datenwissenschaftliche Konzepte zugänglich zu machen. Zu seinen beruflichen Interessen zählen die Verarbeitung natürlicher Sprache, Sprachmodelle, Algorithmen für maschinelles Lernen und die Erforschung neuer KI. Seine Mission ist es, das Wissen in der Datenwissenschaftsgemeinschaft zu demokratisieren. Matthew programmiert seit seinem sechsten Lebensjahr.



[ad_2]

]]>
http://chatgpz.de/data-analytics/5-scipy-stats-methods-zur-simulation-von-was-waere-wenn-szenarien/feed/ 0 18852
Erstellen eines Navier-Stokes-Lösers in Python von Grund auf: Simulation des Luftstroms http://chatgpz.de/artificial-intelligence/erstellen-eines-navier-stokes-loesers-in-python-von-grund-auf-simulation-des-luftstroms/ http://chatgpz.de/artificial-intelligence/erstellen-eines-navier-stokes-loesers-in-python-von-grund-auf-simulation-des-luftstroms/#respond Mon, 23 Mar 2026 04:06:17 +0000 https://chatgpz.de/artificial-intelligence/erstellen-eines-navier-stokes-loesers-in-python-von-grund-auf-simulation-des-luftstroms/ [ad_1]

(CFD) wird oft als Black Field komplexer kommerzieller Software program angesehen. Die Implementierung eines Lösers „von Grund auf“ ist jedoch eine der wirkungsvollsten Möglichkeiten, die Physik der Flüssigkeitsbewegung zu erlernen. Ich habe damit als persönliches Projekt begonnen und es als Teil eines Kurses über Biophysik zum Anlass genommen, endlich zu verstehen, wie diese schönen Simulationen funktionieren.

Dieser Leitfaden richtet sich an Datenwissenschaftler und Ingenieure, die über Excessive-Degree-Bibliotheken hinausgehen und die zugrunde liegende Mechanik numerischer Simulationen verstehen möchten, indem sie partielle Differentialgleichungen in diskretisierten Python-Code übersetzen. Wir werden auch grundlegende Programmierkonzepte wie vektorisierte Operationen mit NumPy und stochastische Konvergenz untersuchen, die wesentliche Fähigkeiten für jeden sind, der sich für umfassendere wissenschaftliche Pc- und maschinelle Lernarchitekturen interessiert.

Wir werden die Ableitung und Python-Implementierung eines einfachen inkompressiblen Navier-Stokes-Lösers (NS) durchgehen. Und dann werden wir diesen Solver anwenden, um den Luftstrom um das Flügelprofil eines Vogels zu simulieren.

Die Physik: Inkompressible Navier-Stokes

Die grundlegenden Gleichungen der CFD sind die Navier-Stokes-Gleichungen, die beschreiben, wie sich Geschwindigkeit und Druck in einer Flüssigkeit entwickeln. Für einen gleichmäßigen Flug (wie ein gleitender Vogel) gehen wir davon aus, dass die Luft inkompressibel (konstante Dichte) und laminar ist. Sie können nur als Newtons Bewegungsgesetz verstanden werden, allerdings für ein verschwindend kleines Factor einer Flüssigkeit mit den Kräften, die darauf einwirken. Dabei handelt es sich hauptsächlich um Druck und Viskosität, aber je nach Kontext können Sie auch Schwerkraft, mechanische Spannungen oder sogar Elektromagnetismus hinzufügen, wenn Sie Lust dazu haben. Der Autor kann bestätigen, dass dies für ein erstes Projekt absolut nicht zu empfehlen ist.

Die Gleichungen in Vektorform lauten:

(
frac{partial mathbf{v}}{partial t} + (mathbf{v} cdot nabla)mathbf{v} = -frac{1}{rho}nabla p + nu nabla^2 mathbf{v}
nablacdotmathbf{v}=0
)

Wo:

  • v: Geschwindigkeitsfeld (u,v)
  • P: Druck
  • ρ: Flüssigkeitsdichte
  • ν: Kinematische Viskosität

Die erste Gleichung (Impuls) gleicht Trägheit gegen Druckgradienten und viskose Diffusion aus. Die zweite Gleichung (Kontinuität) erzwingt, dass die Flüssigkeitsdichte konstant bleibt.

Das Druckkupplungsproblem

Eine große Herausforderung bei CFD besteht darin, dass Druck und Geschwindigkeit gekoppelt sind: Das Druckfeld muss sich ständig anpassen, um sicherzustellen, dass die Flüssigkeit inkompressibel bleibt.

Um dies zu lösen, leiten wir a ab Druck-Poisson-Gleichung indem man die Divergenz der Impulsgleichung nimmt. In einem diskretisierten Löser lösen wir diese Poisson-Gleichung in jedem einzelnen Zeitschritt, um den Druck zu aktualisieren und sicherzustellen, dass das Geschwindigkeitsfeld divergenzfrei bleibt.

Diskretisierung: Von der Mathematik zum Raster

Um diese Gleichungen auf einem Pc zu lösen, verwenden wir Endliche Differenz Schemata auf einem einheitlichen Raster.

  • Zeit: Vorwärtsdifferenz (Explizite Euler).
  • Advektion (nichtlineare Terme): Rückwärts-/Aufwind-Unterschied (für Stabilität).
  • Diffusion und Druck: Zentraler Unterschied.

Beispielsweise sieht die Aktualisierungsformel für die u-Komponente (x-Geschwindigkeit) in Finite-Differenzen-Type so aus

(
u_{i,j}^n frac{u_{i,j}^n – u_{i-1,j}^n}{Delta x}
)

Im Code verwendet der Advektionsterm u∂x∂u​ eine Rückwärtsdifferenz:

(
u_{i,j}^n frac{u_{i,j}^n – u_{i-1,j}^n}{Delta x}
)

Die Python-Implementierung

Die Implementierung erfolgt in vier verschiedenen Schritten unter Verwendung von NumPy-Arrays.

1. Initialisierung

Wir definieren die Rastergröße (nx, ny), Zeitschritt (dt) und physikalische Parameter (rho, nu). Wir initialisieren Geschwindigkeitsfelder (u,v) und Druck (p) auf Nullen oder einen gleichmäßigen Fluss.

2. Die Flügelgeometrie (eingetauchte Grenze)

Um einen Flügel auf einem kartesischen Gitter zu simulieren, müssen wir markieren, welche Gitterpunkte liegen innen der feste Flügel.

  • Wir laden ein Flügelnetz (z. B. aus einer STL-Datei).
  • Wir erstellen ein boolesches Maskenarray wo True bezeichnet einen Punkt innerhalb des Flügels.
  • Während der Simulation erzwingen wir, dass die Geschwindigkeit an diesen maskierten Punkten auf Null geht (kein Schlupf/keine Durchdringung).

3. Die Hauptlöseschleife

Die Kernschleife wiederholt sich, bis die Lösung einen stationären Zustand erreicht. Die Schritte sind:

  1. Erstellen Sie den Quellterm (b): Berechnen Sie die Divergenz der Geschwindigkeitsterme.
  2. Druck lösen: Lösen Sie die Poisson-Gleichung nach p mithilfe der Jacobi-Iteration.
  3. Geschwindigkeit aktualisieren: Nutzen Sie den neuen Druck, um u und v zu aktualisieren.
  4. Randbedingungen anwenden: Erzwingen Sie die Einlassgeschwindigkeit und Nullgeschwindigkeiten innerhalb des Flügels.

Der Kodex

So sehen die wichtigsten mathematischen Aktualisierungen in Python aus (aus Leistungsgründen vektorisiert).

Schritt A: Aufbau des Druckquellenterms Dies stellt die rechte Seite (RHS) der Poisson-Gleichung dar, die auf aktuellen Geschwindigkeiten basiert.

# b is the supply time period
# u and v are present velocity arrays
b(1:-1, 1:-1) = (rho * (
    1 / dt * ((u(1:-1, 2:) - u(1:-1, 0:-2)) / (2 * dx) +
              (v(2:, 1:-1) - v(0:-2, 1:-1)) / (2 * dy)) -
    ((u(1:-1, 2:) - u(1:-1, 0:-2)) / (2 * dx))**2 -
    2 * ((u(2:, 1:-1) - u(0:-2, 1:-1)) / (2 * dy) *
         (v(1:-1, 2:) - v(1:-1, 0:-2)) / (2 * dx)) -
    ((v(2:, 1:-1) - v(0:-2, 1:-1)) / (2 * dy))**2
))

Schritt B: Auflösen nach Druck (Jacobi-Iteration) Wir iterieren, um das Druckfeld zu glätten, bis es den Quellterm ausgleicht.

for _ in vary(nit):
    pn = p.copy()
    p(1:-1, 1:-1) = (
        (pn(1:-1, 2:) + pn(1:-1, 0:-2)) * dy**2 +
        (pn(2:, 1:-1) + pn(0:-2, 1:-1)) * dx**2 -
        b(1:-1, 1:-1) * dx**2 * dy**2
    ) / (2 * (dx**2 + dy**2))
# Boundary circumstances: p=0 at edges (gauge strain)
    p(:, -1) = 0; p(:, 0) = 0; p(-1, :) = 0; p(0, :) = 0

Schritt C: Geschwindigkeit aktualisieren Schließlich aktualisieren wir die Geschwindigkeit mithilfe der expliziten diskretisierten Impulsgleichungen.

un = u.copy()
vn = v.copy() 
# Replace u (x-velocity)
u(1:-1, 1:-1) = (un(1:-1, 1:-1) -
                 un(1:-1, 1:-1) * dt / dx * (un(1:-1, 1:-1) - un(1:-1, 0:-2)) -
                 vn(1:-1, 1:-1) * dt / dy * (un(1:-1, 1:-1) - un(0:-2, 1:-1)) -
                 dt / (2 * rho * dx) * (p(1:-1, 2:) - p(1:-1, 0:-2)) +
                 nu * (dt / dx**2 * (un(1:-1, 2:) - 2 * un(1:-1, 1:-1) + un(1:-1, 0:-2)) +
                       dt / dy**2 * (un(2:, 1:-1) - 2 * un(1:-1, 1:-1) + un(0:-2, 1:-1))))
# Replace v (y-velocity)
v(1:-1, 1:-1) = (vn(1:-1, 1:-1) -
                 un(1:-1, 1:-1) * dt / dx * (vn(1:-1, 1:-1) - vn(1:-1, 0:-2)) -
                 vn(1:-1, 1:-1) * dt / dy * (vn(1:-1, 1:-1) - vn(0:-2, 1:-1)) -
                 dt / (2 * rho * dy) * (p(2:, 1:-1) - p(0:-2, 1:-1)) +
                 nu * (dt / dx**2 * (vn(1:-1, 2:) - 2 * vn(1:-1, 1:-1) + vn(1:-1, 0:-2)) +
                       dt / dy**2 * (vn(2:, 1:-1) - 2 * vn(1:-1, 1:-1) + vn(0:-2, 1:-1))))

Ergebnisse: Fliegt es?

Wir haben diesen Löser auf einem starren Flügelprofil mit konstantem Fernfeldeinfluss ausgeführt.

Qualitative Beobachtungen Die Ergebnisse stimmen mit den körperlichen Erwartungen überein. Die Simulationen zeigen einen hohen Druck unter dem Flügel und einen niedrigen Druck darüber, was genau der Mechanismus ist, der den Auftrieb erzeugt. Geschwindigkeitsvektoren zeigen die Beschleunigung des Luftstroms über der Oberfläche (Bernoulli-Prinzip).

Kräfte: Auftrieb vs. Widerstand Durch die Integration des Druckfeldes über der Flügeloberfläche können wir den Auftrieb berechnen.

  • Der Löser zeigt das Druckkräfte dominieren viskose Reibungskräfte in Luft um den Faktor quick 1000.
  • Mit zunehmendem Anstellwinkel (von 0∘ auf −20∘) steigt das Verhältnis von Auftrieb zu Luftwiderstand, was den Developments entspricht, die in Windkanälen und professionellen CFD-Paketen wie OpenFOAM beobachtet werden.

Einschränkungen und nächste Schritte

Obwohl sich die Erstellung dieses Lösers hervorragend zum Lernen eignete, hat das Software selbst seine Grenzen:

  • Auflösung: 3D-Simulationen auf einem kartesischen Gitter sind rechenintensiv und erfordern grobe Gitter, wodurch quantitative Ergebnisse weniger zuverlässig sind.
  • Turbulenz: Der Löser ist laminar; Es fehlt ein Turbulenzmodell (wie ok−ϵ), das für schnelle oder komplexe Strömungen erforderlich ist.
  • Diffusion: Upwind-Differenzierungsschemata sind stabil, aber numerisch diffus, wodurch möglicherweise feine Strömungsdetails „verwischt“ werden.

Wohin geht es von hier aus? Dieses Projekt dient als Ausgangspunkt. Zukünftige Verbesserungen könnten die Implementierung von Advektionsschemata höherer Ordnung (wie WENO), das Hinzufügen von Turbulenzmodellierung oder die Umstellung auf Finite-Volumen-Methoden (wie OpenFOAM) für eine bessere Netzhandhabung um komplexe Geometrien herum umfassen. Es gibt viele clevere Techniken, um die Fülle an Szenarien zu umgehen, die Sie möglicherweise implementieren möchten. Dies ist nur ein erster Schritt auf dem Weg zum wirklichen Verständnis von CFD!

[ad_2]

]]>
http://chatgpz.de/artificial-intelligence/erstellen-eines-navier-stokes-loesers-in-python-von-grund-auf-simulation-des-luftstroms/feed/ 0 17274
Robbyant Open Sources LingBot World: ein Echtzeit-Weltmodell für interaktive Simulation und verkörperte KI http://chatgpz.de/artificial-intelligence/robbyant-open-sources-lingbot-world-ein-echtzeit-weltmodell-fuer-interaktive-simulation-und-verkoerperte-ki/ http://chatgpz.de/artificial-intelligence/robbyant-open-sources-lingbot-world-ein-echtzeit-weltmodell-fuer-interaktive-simulation-und-verkoerperte-ki/#respond Sat, 31 Jan 2026 21:08:19 +0000 https://chatgpz.de/artificial-intelligence/robbyant-open-sources-lingbot-world-ein-echtzeit-weltmodell-fuer-interaktive-simulation-und-verkoerperte-ki/ [ad_1]

Robbyant, die verkörperte KI-Einheit innerhalb der Ant Group, verfügt über LingBot-World als Open-Supply-Lösung, ein groß angelegtes Weltmodell, das die Videogenerierung in einen interaktiven Simulator für verkörperte Agenten, autonomes Fahren und Spiele verwandelt. Das System ist darauf ausgelegt, kontrollierbare Umgebungen mit hoher visueller Wiedergabetreue, starker Dynamik und langen Zeithorizonten darzustellen und gleichzeitig reaktionsfähig genug für eine Echtzeitsteuerung zu bleiben.

Vom Textual content zum Video zum Textual content zur Welt

Die meisten Textual content-zu-Video-Modelle erzeugen kurze Clips, die realistisch aussehen, sich aber wie passive Filme verhalten. Sie modellieren nicht, wie Handlungen die Umgebung im Laufe der Zeit verändern. LingBot-World ist stattdessen als aktionsbedingtes Weltmodell aufgebaut. Es lernt die Übergangsdynamik einer virtuellen Welt, sodass Tastatur- und Mauseingaben zusammen mit Kamerabewegungen die Entwicklung zukünftiger Frames vorantreiben.

Formal lernt das Modell die bedingte Verteilung zukünftiger Video-Tokens anhand vergangener Frames, Sprachaufforderungen und diskreter Aktionen. Zur Trainingszeit werden Sequenzen mit einer Länge von bis zu etwa 60 Sekunden vorhergesagt. Zur Inferenzzeit kann es autoregressiv kohärente Videostreams mit einer Länge von etwa 10 Minuten bereitstellen und dabei die Szenenstruktur stabil halten.

Daten-Engine, vom Webvideo bis hin zu interaktiven Flugbahnen

Ein Kerndesign in LingBot-World ist eine einheitliche Daten-Engine. Es bietet umfassende, aufeinander abgestimmte Einblicke in die Artwork und Weise, wie Handlungen die Welt verändern, und deckt gleichzeitig verschiedene reale Szenen ab.

Die Datenerfassungspipeline kombiniert drei Quellen:

  1. Großformatige Webvideos von Menschen, Tieren und Fahrzeugen, sowohl aus der Ego- als auch aus der Third-Individual-Perspektive
  2. Spieldaten, bei denen RGB-Frames strikt mit Benutzersteuerungen wie W, A, S, D und Kameraparametern gekoppelt sind
  3. In der Unreal Engine gerenderte synthetische Flugbahnen, bei denen saubere Frames, Kamera-Intrinsics und -Extrinsics sowie Objektlayouts bekannt sind

Nach der Sammlung wird dieser heterogene Korpus in einer Profilierungsphase standardisiert. Es filtert nach Auflösung und Dauer, segmentiert Movies in Clips und schätzt fehlende Kameraparameter anhand von Geometrie- und Posenmodellen. Ein Imaginative and prescient-Language-Modell bewertet Clips nach Qualität, Bewegungsstärke und Ansichtstyp und wählt dann eine kuratierte Teilmenge aus.

Darüber hinaus baut ein hierarchisches Untertitelmodul drei Ebenen der Textüberwachung auf:

  • Erzählerische Bildunterschriften für ganze Flugbahnen, einschließlich Kamerabewegungen
  • Statische Szenenuntertitel, die das Umgebungslayout ohne Bewegung beschreiben
  • Dichte zeitliche Untertitel für kurze Zeitfenster, die sich auf lokale Dynamiken konzentrieren

Durch diese Trennung kann das Modell die statische Struktur von Bewegungsmustern trennen, was für die Konsistenz über lange Horizonte wichtig ist.

Architektur, MoE-Video-Spine und Aktionskonditionierung

LingBot-World beginnt mit Wan2.2, einem 14B-Parameter-Bild-zu-Video-Diffusionstransformator. Dieses Spine erfasst bereits starke Open-Area-Video-Prioritäten. Das Robbyant-Workforce erweitert es zu einem DiT-Expertenmix mit 2 Experten. Jeder Experte verfügt über etwa 14B Parameter, sodass die Gesamtparameteranzahl 28B beträgt, aber bei jedem Entrauschungsschritt ist nur 1 Experte aktiv. Dadurch bleiben die Inferenzkosten ähnlich wie bei einem dichten 14B-Modell und erhöhen gleichzeitig die Kapazität.

Ein Lehrplan verlängert Trainingssequenzen von 5 Sekunden auf 60 Sekunden. Der Zeitplan erhöht den Anteil von Zeitschritten mit hohem Rauschen, was globale Layouts über lange Kontexte hinweg stabilisiert und den Moduskollaps bei langen Rollouts reduziert.

Um das Modell interaktiv zu machen, werden Aktionen direkt in die Transformatorblöcke eingefügt. Kameradrehungen werden mit Plücker-Einbettungen codiert. Tastaturaktionen werden als Multi-Sizzling-Vektoren über Tasten wie W, A, S, D dargestellt. Diese Codierungen werden zusammengeführt und durch adaptive Layer-Normalisierungsmodule geleitet, die verborgene Zustände im DiT modulieren. Nur die Aktionsadapterebenen werden fein abgestimmt, das Hauptvideo-Spine bleibt eingefroren, sodass das Modell die visuelle Qualität aus dem Vortraining beibehält und gleichzeitig die Aktionsreaktionsfähigkeit aus einem kleineren interaktiven Datensatz lernt.

Bei der Schulung werden sowohl Bild-zu-Video- als auch Video-zu-Video-Fortsetzungsaufgaben verwendet. Anhand eines einzelnen Bildes kann das Modell zukünftige Frames synthetisieren. Bei einem unvollständigen Clip kann die Sequenz verlängert werden. Dadurch entsteht eine interne Übergangsfunktion, die zu beliebigen Zeitpunkten starten kann.

LingBot World Quick, Destillation für den Echtzeiteinsatz

Das mitteltrainierte Modell, LingBot-World Base, basiert immer noch auf mehrstufiger Diffusion und vollständiger zeitlicher Aufmerksamkeit, was für Echtzeitinteraktion kostspielig ist. Das Robbyant-Workforce führt LingBot-World-Quick als beschleunigte Variante ein.

Das schnelle Modell wird vom Experten für hohes Rauschen initialisiert und ersetzt die volle zeitliche Aufmerksamkeit durch blockkausale Aufmerksamkeit. Innerhalb jedes Zeitblocks ist die Aufmerksamkeit bidirektional. Blockübergreifend ist es kausal. Dieses Design unterstützt das Caching von Schlüsselwerten, sodass das Modell Frames autoregressiv und kostengünstiger streamen kann.

Bei der Destillation kommt eine Diffusionsstrategie zum Einsatz. Der Schüler wird mit einem kleinen Satz von Zielzeitschritten, einschließlich Zeitschritt 0, trainiert, sodass er sowohl verrauschte als auch saubere latente Signale erkennt. Die Verteilungsanpassungsdestillation wird mit einem kontradiktorischen Diskriminatorkopf kombiniert. Der gegnerische Verlust aktualisiert nur den Diskriminator. Das Studentennetzwerk wird mit dem Destillationsverlust aktualisiert, was die Ausbildung stabilisiert und gleichzeitig die Handlungsfolge und die zeitliche Kohärenz bewahrt.

In Experimenten erreicht LingBot World Quick 16 Bilder professional Sekunde bei der Verarbeitung von 480p-Movies auf einem System mit 1 GPU-Knoten und hält die Finish-to-Finish-Interaktionslatenz zur Echtzeitkontrolle unter 1 Sekunde.

Emergentes Gedächtnis und Langzeitverhalten

Eine der interessantesten Eigenschaften von LingBot-World ist das entstehende Gedächtnis. Das Modell behält die globale Konsistenz ohne explizite 3D-Darstellungen wie Gaußsches Splatting bei. Wenn sich die Kamera von einem Wahrzeichen wie Stonehenge entfernt und nach etwa 60 Sekunden zurückkehrt, erscheint die Struktur wieder mit konsistenter Geometrie. Wenn ein Auto den Rahmen verlässt und später wieder betritt, erscheint es an einer physikalisch plausiblen Stelle, nicht eingefroren oder zurückgesetzt.

Das Modell kann auch extrem lange Sequenzen durchhalten. Das Forschungsteam zeigt eine kohärente Videogenerierung, die bis zu 10 Minuten dauert, mit stabilem Structure und Erzählstruktur.)

VBench-Ergebnisse und Vergleich mit anderen Weltmodellen

Zur quantitativen Auswertung verwendete das Forschungsteam VBench für einen kuratierten Satz von 100 generierten Movies, die jeweils länger als 30 Sekunden waren. LingBot-World wird mit zwei aktuellen Weltmodellen verglichen, Yume-1.5 und HY-World-1.5.

Auf VBench berichtet LingBot World:

https://arxiv.org/pdf/2601.20540v1

Diese Werte sind höher als beide Basiswerte für Bildqualität, ästhetische Qualität und Dynamikgrad. Der dynamische Gradspielraum ist groß, 0,8857 im Vergleich zu 0,7612 und 0,7217, was auf reichhaltigere Szenenübergänge und komplexere Bewegungen hinweist, die auf Benutzereingaben reagieren. Bewegungsglätte und zeitliches Flimmern sind mit der besten Basislinie vergleichbar und die Methode erreicht die beste Gesamtkonsistenzmetrik unter den drei Modellen.

Ein separater Vergleich mit anderen interaktiven Systemen wie Matrix-Recreation-2.0, Mirage-2 und Genie-3 zeigt, dass LingBot-World eines der wenigen vollständig Open-Supply-Weltmodelle ist, das allgemeine Domänenabdeckung, langen Generationshorizont, hohen Dynamikgrad, 720p-Auflösung und Echtzeitfähigkeiten kombiniert.

https://arxiv.org/pdf/2601.20540v1

Anwendungen, aufforderungsfähige Welten, Agenten und 3D-Rekonstruktion

Über die Videosynthese hinaus ist LingBot-World als Testumgebung für verkörperte KI positioniert. Das Modell unterstützt aufrufbare Weltereignisse, bei denen Textanweisungen im Laufe der Zeit das Wetter, die Beleuchtung oder den Stil ändern oder lokale Ereignisse wie Feuerwerk oder sich bewegende Tiere einspeisen und gleichzeitig die räumliche Struktur bewahren.

Es kann auch nachgelagerte Aktionsagenten trainieren, beispielsweise mit einem kleinen Imaginative and prescient-Language-Aktionsmodell wie Qwen3-VL-2B, das Kontrollrichtlinien anhand von Bildern vorhersagt. Da die generierten Videostreams geometrisch konsistent sind, können sie als Eingabe für 3D-Rekonstruktionspipelines verwendet werden, die stabile Punktwolken für Innen-, Außen- und synthetische Szenen erzeugen.

Wichtige Erkenntnisse

  • LingBot-World ist ein aktionsbedingtes Weltmodell, das Textual content-zu-Video in eine Textual content-zu-Welt-Simulation erweitert, wobei Tastaturaktionen und Kamerabewegungen Video-Rollouts über einen langen Horizont von bis zu etwa 10 Minuten direkt steuern.
  • Das System basiert auf einer einheitlichen Daten-Engine, die Webvideos, Spielprotokolle mit Aktionsbezeichnungen und Unreal Engine-Trajektorien sowie hierarchische Erzählungen, statische Szenen und dichte zeitliche Untertitel kombiniert, um Structure und Bewegung zu trennen.
  • Das Kernrückgrat ist eine 28B-Parametermischung aus Experten-Diffusionstransformator, aufgebaut aus Wan2.2, mit 2 Experten von jeweils 14B und Aktionsadaptern, die fein abgestimmt sind, während das visuelle Rückgrat eingefroren bleibt.
  • LingBot-World-Quick ist eine destillierte Variante, die blockkausale Aufmerksamkeit, Diffusionserzwingung und Verteilungsanpassungsdestillation nutzt, um etwa 16 Bilder professional Sekunde bei 480p auf einem GPU-Knoten zu erreichen, mit einer gemeldeten Finish-to-Finish-Latenz von weniger als 1 Sekunde für die interaktive Nutzung.
  • Auf VBench mit 100 generierten Movies, die länger als 30 Sekunden sind, meldet LingBot-World die höchste Bildqualität, ästhetische Qualität und den höchsten Dynamikgrad unter Yume-1.5 und HY-World-1.5, und das Modell zeigt ein Emergenzgedächtnis und eine stabile Fernstruktur, die für verkörperte Agenten und 3D-Rekonstruktion geeignet ist.

Schauen Sie sich das an Papier, Repo, Projektseite Und Modellgewichte. Sie können uns auch gerne weiter folgen Twitter und vergessen Sie nicht, bei uns mitzumachen 100.000+ ML SubReddit und Abonnieren Unser E-newsletter. Warten! Bist du im Telegram? Jetzt können Sie uns auch per Telegram kontaktieren.


[ad_2]

]]>
http://chatgpz.de/artificial-intelligence/robbyant-open-sources-lingbot-world-ein-echtzeit-weltmodell-fuer-interaktive-simulation-und-verkoerperte-ki/feed/ 0 15979
Eine Coding-Implementierung für ein Agentic AI Framework, das Literaturanalyse, Hypothesengenerierung, experimentelle Planung, Simulation und wissenschaftliche Berichterstattung durchführt http://chatgpz.de/artificial-intelligence/eine-coding-implementierung-fuer-ein-agentic-ai-framework-das-literaturanalyse-hypothesengenerierung-experimentelle-planung-simulation-und-wissenschaftliche-berichterstattung-durchfuehrt/ http://chatgpz.de/artificial-intelligence/eine-coding-implementierung-fuer-ein-agentic-ai-framework-das-literaturanalyse-hypothesengenerierung-experimentelle-planung-simulation-und-wissenschaftliche-berichterstattung-durchfuehrt/#respond Sat, 29 Nov 2025 03:24:55 +0000 http://chatgpz.de/artificial-intelligence/eine-coding-implementierung-fuer-ein-agentic-ai-framework-das-literaturanalyse-hypothesengenerierung-experimentelle-planung-simulation-und-wissenschaftliche-berichterstattung-durchfuehrt/ [ad_1]

In diesem Tutorial erstellen wir Schritt für Schritt einen vollständigen wissenschaftlichen Entdeckungsagenten und erfahren, wie jede Komponente zusammenarbeitet, um einen kohärenten Forschungsworkflow zu bilden. Wir beginnen damit, unseren Literaturkorpus zu laden, Retrieval- und LLM-Module zu konstruieren und dann Agenten zusammenzustellen, die Artikel durchsuchen, Hypothesen generieren, Experimente entwerfen und strukturierte Berichte erstellen. Anhand der unten aufgeführten Ausschnitte sehen wir, wie auf natürliche Weise eine Agenten-Pipeline entsteht, die es uns ermöglicht, eine wissenschaftliche Frage von der anfänglichen Neugier bis zur vollständigen Analyse innerhalb eines einzigen, integrierten Methods zu untersuchen. Schauen Sie sich das an VOLLSTÄNDIGE CODES hier.

import sys, subprocess


def install_deps():
   pkgs = ("transformers", "scikit-learn", "numpy")
   subprocess.check_call((sys.executable, "-m", "pip", "set up", "-q") + pkgs)


strive:
   from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
   from sklearn.feature_extraction.textual content import TfidfVectorizer
   from sklearn.metrics.pairwise import cosine_similarity
   import numpy as np
besides ImportError:
   install_deps()
   from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
   from sklearn.feature_extraction.textual content import TfidfVectorizer
   from sklearn.metrics.pairwise import cosine_similarity
   import numpy as np


from dataclasses import dataclass
from typing import Record, Dict, Any


np.random.seed(42)


LITERATURE = (
   {"id": "P1","title": "Self-Supervised Protein Language Fashions for Construction Prediction","discipline": "computational biology",
    "summary": "We discover transformer-based protein language fashions skilled on thousands and thousands of sequences. The fashions be taught residue-level embeddings that enhance secondary construction prediction and stability estimation."},
   {"id": "P2","title": "CRISPR Off-Goal Detection Utilizing Deep Studying","discipline": "genome enhancing",
    "summary": "We suggest a convolutional neural community structure for predicting CRISPR-Cas9 off-target results instantly from genomic sequences, reaching state-of-the-art accuracy on GUIDE-seq datasets."},
   {"id": "P3","title": "Basis Fashions for Scientific Equation Discovery","discipline": "scientific ML",
    "summary": "Giant language fashions are mixed with symbolic regression to recuperate governing equations from noisy experimental observations in physics and fluid dynamics."},
   {"id": "P4","title": "Lively Studying for Supplies Property Optimization","discipline": "supplies science",
    "summary": "We combine Bayesian optimization with graph neural networks to actively choose candidate supplies that maximize goal properties whereas decreasing experimental value."},
   {"id": "P5","title": "Graph-Primarily based Retrieval for Cross-Area Literature Assessment","discipline": "NLP for science",
    "summary": "We assemble a heterogeneous quotation and idea graph over multi-domain scientific papers and present that graph-aware retrieval improves cross-domain literature exploration."},
)


corpus_texts = (p("summary") + " " + p("title") for p in LITERATURE)
vectorizer = TfidfVectorizer(stop_words="english")
corpus_matrix = vectorizer.fit_transform(corpus_texts)


MODEL_NAME = "google/flan-t5-small"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
mannequin = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME)


def generate_text(immediate: str, max_new_tokens: int = 256) -> str:
   inputs = tokenizer(immediate, return_tensors="pt", truncation=True)
   outputs = mannequin.generate(**inputs, max_new_tokens=max_new_tokens, num_beams=4, early_stopping=True)
   return tokenizer.decode(outputs(0), skip_special_tokens=True)

Wir haben den Grundstein für unseren wissenschaftlichen Agenten gelegt, indem wir Bibliotheken geladen, den Literaturkorpus vorbereitet und unser Sprachmodell initialisiert haben. Wir erstellen den TF-IDF-Vektorisierer und betten alle Abstracts ein, um später relevante Artikel abzurufen. Nachdem das Modell geladen und die Daten strukturiert sind, erstellen wir das rechnerische Rückgrat für alles, was folgt. Schauen Sie sich das an VOLLSTÄNDIGE CODES hier.

@dataclass
class PaperHit:
   paper: Dict(str, Any)
   rating: float


class LiteratureAgent:
   def __init__(self, vectorizer, corpus_matrix, papers: Record(Dict(str, Any))):
       self.vectorizer = vectorizer
       self.corpus_matrix = corpus_matrix
       self.papers = papers


   def search(self, question: str, okay: int = 3) -> Record(PaperHit):
       q_vec = self.vectorizer.remodel((question))
       sims = cosine_similarity(q_vec, self.corpus_matrix)(0)
       idxs = np.argsort(-sims)(:okay)
       hits = (PaperHit(self.papers(i), float(sims(i))) for i in idxs)
       return hits

Wir implementieren die Literatursuchkomponente unseres Agenten. Wir konvertieren Benutzeranfragen in einen Vektorraum und identifizieren die relevantesten wissenschaftlichen Arbeiten mithilfe der Kosinusähnlichkeit. Dadurch geben wir unserem System die Möglichkeit, seine Argumentation auf die am ehesten passende frühere Arbeit zu stützen. Schauen Sie sich das an VOLLSTÄNDIGE CODES hier.

@dataclass
class ExperimentPlan:
   system: str
   speculation: str
   variables: Dict(str, Any)
   protocol: Record(str)


@dataclass
class ExperimentResult:
   plan: ExperimentPlan
   metrics: Dict(str, float)


class ExperimentAgent:
   def design_experiment(self, query: str, speculation: str, hits: Record(PaperHit)) -> ExperimentPlan:
       top_field = hits(0).paper("discipline") if hits else "computational science"
       protocol = (
           f"Assemble dataset combining concepts from: {', '.be part of(h.paper('id') for h in hits)}.",
           "Cut up information into prepare/validation/check.",
           "Examine baseline mannequin vs. augmented mannequin implementing the speculation.",
           "Consider utilizing applicable metrics and carry out ablation evaluation.",
       )
       variables = {
           "baseline_model": "sequence CNN",
           "augmented_model": "protein language mannequin + CNN",
           "n_train_samples": 5000,
           "n_validation_samples": 1000,
           "metric": "AUROC",
       }
       system = f"{top_field} system associated to: {query}"
       return ExperimentPlan(system=system, speculation=speculation, variables=variables, protocol=protocol)


   def run_experiment(self, plan: ExperimentPlan) -> ExperimentResult:
       base = 0.78 + 0.02 * np.random.randn()
       acquire = abs(0.05 + 0.01 * np.random.randn())
       metrics = {
           "baseline_AUROC": spherical(base, 3),
           "augmented_AUROC": spherical(base + acquire, 3),
           "estimated_gain": spherical(acquire, 3),
       }
       return ExperimentResult(plan=plan, metrics=metrics)

Wir entwerfen und simulieren Experimente basierend auf der abgerufenen Literatur und der generierten Hypothese. Wir definieren automatisch Variablen, erstellen ein Protokoll und generieren synthetische Metriken, die die Dynamik einer echten wissenschaftlichen Bewertung nachahmen. Dadurch können wir von theoretischen Ideen zu einem umsetzbaren Versuchsplan übergehen. Schauen Sie sich das an VOLLSTÄNDIGE CODES hier.

class ReportAgent:
   def write_report(self, query: str, hits: Record(PaperHit), plan: ExperimentPlan, consequence: ExperimentResult) -> str:
       related_work = "n".be part of(f"- {h.paper('title')} ({h.paper('discipline')})" for h in hits)
       protocol_str = "n".be part of(f"- {step}" for step in plan.protocol)
       immediate = f"""
You're an AI analysis assistant writing a concise research-style report.


Analysis query:
{query}


Speculation:
{plan.speculation}


Related prior work:
{related_work}


Deliberate experiment:
System: {plan.system}
Variables: {plan.variables}
Protocol:
{protocol_str}


Simulated outcomes:
{consequence.metrics}


Write a transparent report with the next sections:
1. Background
2. Proposed Method
3. Experimental Setup
4. Outcomes and Dialogue
5. Limitations and Future Work
"""
       return generate_text(immediate.strip(), max_new_tokens=320)

Mithilfe des LLM erstellen wir einen vollständigen Bericht im Forschungsstil. Wir stellen die Hypothese, das Protokoll, die Ergebnisse und die damit verbundene Arbeit in einem strukturierten Dokument mit klar definierten Abschnitten zusammen. Dadurch können wir die Rohergebnisse der Pipeline in ausgefeilte wissenschaftliche Kommunikation umwandeln. Schauen Sie sich das an VOLLSTÄNDIGE CODES hier.

class ScientificAgent:
   def __init__(self):
       self.lit_agent = LiteratureAgent(vectorizer, corpus_matrix, LITERATURE)
       self.exp_agent = ExperimentAgent()
       self.report_agent = ReportAgent()


   def propose_hypothesis(self, query: str, hits: Record(PaperHit)) -> str:
       context = " ".be part of(h.paper("summary") for h in hits)
       immediate = f"""
You're an AI scientist. Given a analysis query and associated abstracts,
suggest a single, testable speculation in 2-3 sentences.


Analysis query:
{query}


Associated abstracts:
{context}
"""
       return generate_text(immediate.strip(), max_new_tokens=96)


   def run_pipeline(self, query: str) -> str:
       hits = self.lit_agent.search(query, okay=3)
       speculation = self.propose_hypothesis(query, hits)
       plan = self.exp_agent.design_experiment(query, speculation, hits)
       consequence = self.exp_agent.run_experiment(plan)
       report = self.report_agent.write_report(query, hits, plan, consequence)
       return report


if __name__ == "__main__":
   research_question = (
       "How can protein language mannequin embeddings enhance CRISPR off-target "
       "prediction in comparison with sequence-only CNN baselines?"
   )
   agent = ScientificAgent()
   final_report = agent.run_pipeline(research_question)
   print(final_report)

Wir orchestrieren die gesamte Pipeline, durchsuchen die Literatur, erstellen eine Hypothese, entwerfen das Experiment, führen die Simulation durch und schreiben den Bericht. Anschließend führen wir das System auf eine echte Forschungsfrage aus und beobachten den gesamten Arbeitsablauf in Aktion. Dieser Schritt führt alle Module zu einem einheitlichen wissenschaftlichen Agenten zusammen.

Abschließend sehen wir, wie sich eine kompakte Codebasis zu einem funktionierenden KI-Co-Forscher entwickeln kann, der in der Lage ist, zu suchen, zu argumentieren, zu simulieren und zusammenzufassen. Wir verstehen, wie jedes Snippet zur gesamten Pipeline beiträgt und wie Agentenkomponenten sich gegenseitig verstärken, wenn sie kombiniert werden. Außerdem sind wir in der Lage, den Agenten mit umfangreicheren Literaturquellen, realistischeren Modellen und ausgefeilterer experimenteller Logik zu erweitern und so unsere wissenschaftliche Erforschung mit jeder Iteration weiter voranzutreiben.


Schauen Sie sich das an VOLLSTÄNDIGE CODES hier. Schauen Sie sich gerne bei uns um GitHub-Seite für Tutorials, Codes und Notebooks. Sie können uns auch gerne weiter folgen Twitter und vergessen Sie nicht, bei uns mitzumachen 100.000+ ML SubReddit und Abonnieren Unser E-newsletter. Warten! Bist du im Telegram? Jetzt können Sie uns auch per Telegram kontaktieren.


Asif Razzaq ist CEO von Marktechpost Media Inc.. Als visionärer Unternehmer und Ingenieur setzt sich Asif dafür ein, das Potenzial der künstlichen Intelligenz für das soziale Wohl zu nutzen. Sein jüngstes Unterfangen ist die Einführung einer Medienplattform für künstliche Intelligenz, Marktechpost, die sich durch eine ausführliche Berichterstattung über maschinelles Lernen und Deep-Studying-Nachrichten auszeichnet, die sowohl technisch fundiert als auch für ein breites Publikum leicht verständlich ist. Die Plattform verfügt über mehr als 2 Millionen monatliche Aufrufe, was ihre Beliebtheit beim Publikum verdeutlicht.

[ad_2]

]]>
http://chatgpz.de/artificial-intelligence/eine-coding-implementierung-fuer-ein-agentic-ai-framework-das-literaturanalyse-hypothesengenerierung-experimentelle-planung-simulation-und-wissenschaftliche-berichterstattung-durchfuehrt/feed/ 0 14393
Python Monte Carlo Simulation in Excel http://chatgpz.de/data-analytics/python-monte-carlo-simulation-in-excel/ http://chatgpz.de/data-analytics/python-monte-carlo-simulation-in-excel/#respond Mon, 29 Sep 2025 03:36:02 +0000 https://chatgpz.de/data-analytics/python-monte-carlo-simulation-in-excel/ [ad_1]

In unserem daten dominierten finanziellen Umfeld ist die Monte-Carlo-Simulation ein wichtiges Instrument zur Risikomodellierung und quantitativen Strategien. Viele von uns werden Excel weiterhin als bevorzugte Plattform verwenden, aber es ist bedauerlich, dass Excels Grundfunktionen die zusätzliche Arbeit erfordern, die viele Finanzfachleute für jede stochastische Modellierung abschließen müssen. In diesem Handbuch zeigen wir Ihnen, wie Sie eine Monte -Carlo -Simulation in Python in Excel „anschließen“ können, um eine hybride Optimierung für die fortschrittliche Risikoanalyse und die Finanzmodellierung zu entwickeln.

Verständnis der Monte -Carlo -Simulation im Risikomanagement

Die Monte -Carlo -Simulation führt durch Ausführung von Tausenden oder Millionen von zufälligen Realisierungen, wobei die anfänglichen Eingangsvariablen durch Wahrscheinlichkeitsverteilungen definiert sind. Der probabilistische Modellierungsansatz bietet in Situationen unsicherer Ergebnisse und finanzielles Risikomanagement mehrere Vorteile.

Die Methodik definiert Wahrscheinlichkeitsverteilungen für unsichere Variablen, erzeugt zufällige Variationen, führt Berechnungen für jede Realisierung durch und bewertet statistische Ergebnisse. Die Monte -Carlo -Simulation bietet Einblicke, die über deterministische Modelle hinausgehen und sich als besonders nützlich für die Portfolio -Optimierung und die Kreditrisikomodellierung als nützlich erweisen.

Risikokennzahlen wie Worth-at-Risiko (VAR), erwarteter Mangel und Verlustwahrscheinlichkeit können mit der Monte-Carlo-Schätzung geschätzt werden. Monte-Carlo-Techniken bieten Analysten eine maximale Flexibilität, um komplexe Korrelationen über Variablen hinweg zu modellieren, nicht normale Verteilungen zu verwenden und zeitabhängige Parameter im Einklang mit den Stay-Marktbedingungen zu berücksichtigen.

Python -Bibliotheken für die Monte -Carlo -Risikomodellierung

Viele Python -Bibliotheken unterstützen eine herausragende Unterstützung für die Monte -Carlo -Simulation und die statistische Analyse:

  1. Numpy: Numpy ist das Rückgrat aufgrund seiner leistungsstarken Array -Operationen und der Zufallszahlenerzeugung. Es führt vektorisierte Operationen durch und ermöglicht effiziente groß angelegte Simulationen. Die Bibliothek bietet auch viele statistische Funktionen für Wahrscheinlichkeitsverteilungen in der Finanzmodellierung.
  2. Scipy: Scipy baut auf Numpy mit statistischen Verteilungen und Optimierungsalgorithmen auf. Es bietet über 80 Verteilungen und Assessments zur Risikomodellierung. Scipy unterstützt auch komplexe Finanzanwendungen durch numerische Integrationsmethoden.
  3. Pandas: Pandas ist sehr nützlich für die Datenmanipulation und die Zeitreihenanalyse. Der DataFrame integriert sich reibungslos in Excel durch verschiedene Import- und Exportfunktionen, wodurch die Analyse der Finanzdaten und die Aggregation einfacher wird.
  4. Matplotlib Und Seeborn: Matplotlib und Seeborn ermöglichen Datenvisualisierungen von Simulationsergebnissen in professioneller Qualität. Diese Visualisierungen können Risikoverteilungen oder Sensitivitätsanalysen umfassen, die in Excel -Berichte eingebettet werden können.

Excel-Integrationsstrategien: Python-Excel-Konnektivität

Es gibt mehrere moderne Optionen für Excel -Python -Integrationsoptionen und sie haben unterschiedliche Stärken für die Monte -Carlo -Risikomodellierung:

  1. Xlwings ist die nahtloses Integrationsoption. Diese Bibliothek ermöglicht die bidirektionale Kommunikation zwischen Excel und Python und unterstützt die Stay-Datenaustausch- und Echtzeit-Simulationsergebnisse.
  2. openpyxl Und XLSXWriter Beide bieten eine großartige dateibasierte Integrationsoption, die nicht verwendet werden kann, wenn keine direkte Verbindung erforderlich ist. Mit dieser Bibliothek ermöglichen es, komplexe Berichte zu erstellen, mehrere Arbeitsblätter, Formatierung und Diagramme in Excel aus Python -Simulationen zu bewältigen. Jede Bibliothek kann den Job machen.
  3. Com Automatisierung mit Pywin32 Ermöglicht eine tiefe Integration von Excel auf Home windows -Maschinen, da die Bibliothek die Erstellung und Manipulation von Excel -Objekten, -Rang und -Andabellen automatisiert. Diese Possibility kann von Vorteil sein, wenn Sie anspruchsvolle Risiko -Dashboards und interaktive Modellierungsumgebungen erstellen möchten.

Praktische Implementierung: Aufbau eines Monte-Carlo-Risikomodells

Es ist Zeit, ein robustes Portfolio -Risikoanalyse -System zu erstellen Excel und a Python Monte Carlo Simulation. Anhand dieses praktischen Beispiels werden wir Aktienkursprognose, Korrelationsanalyse und Berechnung von Risikokennzahlen nachweisen.

1. Richten Sie die Python -Umgebung ein und bereiten Sie die Daten vor.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
from datetime import datetime, timedelta
import warnings
warnings.filterwarnings('ignore')

# Portfolio configuration
shares = ('AAPL', 'GOOGL', 'MSFT', 'AMZN', 'TSLA')
initial_portfolio_value = 1_000_000
time_horizon = 252
num_simulations = 10000

np.random.seed(42)
annual_returns = np.array((0.15, 0.12, 0.14, 0.18, 0.25))
annual_volatilities = np.array((0.25, 0.22, 0.24, 0.28, 0.35))
portfolio_weights = np.array((0.25, 0.20, 0.25, 0.15, 0.15))

correlation_matrix = np.array((
    (1.00, 0.65, 0.72, 0.58, 0.45),
    (0.65, 1.00, 0.68, 0.62, 0.38),
    (0.72, 0.68, 1.00, 0.55, 0.42),
    (0.58, 0.62, 0.55, 1.00, 0.48),
    (0.45, 0.38, 0.42, 0.48, 1.00)
))

2. Monte Carlo Simulationsmotor

def monte_carlo_portfolio_simulation(returns, volatilities, correlation_matrix,
                                     weights, initial_value, time_horizon, num_sims):
    # Convert annual parameters to every day
    daily_returns = returns / 252
    daily_volatilities = volatilities / np.sqrt(252)

    # Generate correlated random returns
    L = np.linalg.cholesky(correlation_matrix)

    # Storage for simulation outcomes
    portfolio_values = np.zeros((num_sims, time_horizon + 1))
    portfolio_values(:, 0) = initial_value

    # Run Monte Carlo simulation
    for sim in vary(num_sims):
        random_shocks = np.random.regular(0, 1, (time_horizon, len(shares)))
        correlated_shocks = random_shocks @ L.T

        daily_asset_returns = daily_returns + daily_volatilities * correlated_shocks
        portfolio_daily_returns = np.sum(daily_asset_returns * weights, axis=1)

        for day in vary(time_horizon):
            portfolio_values(sim, day + 1) = portfolio_values(sim, day) * (1 + portfolio_daily_returns(day))

    return portfolio_values

# Execute simulation
print("Working Monte Carlo simulation...")
simulation_results = monte_carlo_portfolio_simulation(
    annual_returns, annual_volatilities, correlation_matrix,
    portfolio_weights, initial_portfolio_value, time_horizon, num_simulations
)

3. Berechnung und Analyse von Risikometriken

def calculate_risk_metrics(portfolio_values, confidence_levels=(0.95, 0.99)):
    final_values = portfolio_values(:, -1)
    returns = (final_values - portfolio_values(:, 0)) / portfolio_values(:, 0)
    losses = -returns

    mean_return = np.imply(returns)
    volatility = np.std(returns)

    # VaR
    var_metrics = {}
    for confidence in confidence_levels:
        var_metrics(f'VaR_{int(confidence*100)}%') = np.percentile(losses, confidence * 100)

    # Anticipated Shortfall
    es_metrics = {}
    for confidence in confidence_levels:
        threshold = np.percentile(losses, confidence * 100)
        es_metrics(f'ES_{int(confidence*100)}%') = np.imply(losses(losses >= threshold))

    max_loss = np.max(losses)
    prob_loss = np.imply(returns < 0)
    sharpe_ratio = mean_return / volatility if volatility > 0 else 0

    return {
        'mean_return': mean_return,
        'volatility': volatility,
        'sharpe_ratio': sharpe_ratio,
        'max_loss': max_loss,
        'prob_loss': prob_loss,
        **var_metrics,
        **es_metrics
    }

risk_metrics = calculate_risk_metrics(simulation_results)

4. Excel -Integration und Dashboard -Erstellung

def create_excel_risk_dashboard(simulation_results, risk_metrics, shares, weights):
    portfolio_data = pd.DataFrame({
        "Inventory": shares,
        "Weight": weights,
        "Anticipated Return": annual_returns,
        "Volatility": annual_volatilities
    })

    metrics_df = pd.DataFrame(checklist(risk_metrics.objects()), columns=('Metric', 'Worth'))
    metrics_df('Worth') = metrics_df('Worth').spherical(4)

    final_values = simulation_results(:, -1)
    # Excel export code would observe right here

summary_stats = {
    "Preliminary Portfolio Worth": f"${initial_portfolio_value:,.0f}",
    "Imply Ultimate Worth": f"${np.imply(final_values):,.0f}",
    "Median Ultimate Worth": f"${np.median(final_values):,.0f}",
    "Commonplace Deviation": f"${np.std(final_values):,.0f}",
    "Minimal Worth": f"${np.min(final_values):,.0f}",
    "Most Worth": f"${np.max(final_values):,.0f}"
}

summary_df = pd.DataFrame(checklist(summary_stats.objects()), columns=('Statistic', 'Worth'))

plt.determine(figsize=(10, 6))
plt.hist(final_values, bins=50, alpha=0.7, colour="skyblue", edgecolor="black")

plt.axvline(initial_portfolio_value, colour="crimson", linestyle="--",
            label=f'Preliminary Worth: ${initial_portfolio_value:,.0f}')
plt.axvline(np.imply(final_values), colour="inexperienced", linestyle="--",
            label=f'Imply Ultimate Worth: ${np.imply(final_values):,.0f}')

var_95 = initial_portfolio_value * (1 - risk_metrics('VaR_95%'))
plt.axvline(var_95, colour="orange", linestyle="--",
            label=f'95% VaR: ${var_95:,.0f}')

plt.title("Portfolio Worth Distribution - Monte Carlo Simulation")
plt.xlabel("Portfolio Worth ($)")
plt.ylabel("Frequency")
plt.legend()
plt.grid(True, alpha=0.3)
plt.savefig("portfolio_distribution.png", dpi=300, bbox_inches="tight")
plt.shut()

5. Superior Szenarioanalyse

def scenario_stress_testing(base_returns, base_volatilities,             correlation_matrix, weights, initial_value, situations):
    scenario_results = {}
    for scenario_name, (return_shock, vol_shock) in situations.objects():
        stressed_returns = base_returns + return_shock
        stressed_volatilities = base_volatilities * (1 + vol_shock)

        scenario_sim = monte_carlo_portfolio_simulation(
            stressed_returns, stressed_volatilities, correlation_matrix,
            weights, initial_value, time_horizon, 5000
        )

        scenario_metrics = calculate_risk_metrics(scenario_sim)
        scenario_results(scenario_name) = scenario_metrics

    return scenario_results


stress_scenarios = {
    "Base Case": (0.0, 0.0),
    "Market Crash": (-0.20, 0.5),
    "Bear Market": (-0.10, 0.3),
    "Excessive Volatility": (0.0, 0.8),
    "Recession": (-0.15, 0.4)
}

scenario_results = scenario_stress_testing(
    annual_returns, annual_volatilities, correlation_matrix,
    portfolio_weights, initial_portfolio_value, stress_scenarios
)

scenario_df = pd.DataFrame(scenario_results).T.spherical(4)

AUSGABE:

Erstellen von Excel Dashboard
Portfoliowertverteilung
Portfoliowertverteilung
Portfolio -Rückgabeverteilung

Ausgangsanalyse:

Die Simulationsausgaben vom Typ Monte Carlo bieten ein umfassendes Verständnis der Risikoanalyse durch wichtige Statistiken und Visualisierungen des potenziellen Portfoliosverhaltens in der Unsicherheit. Die VARTIC-Methoden (Worth-IT-Risiko) geben typischerweise für ein diversifiziertes Portfolio eine 5% ige Wahrscheinlichkeit an, über einen Zeithorizont von 1 Jahr mehr als 15-20% zurückzuführen zu sein. In den erwarteten Mangelkennzahlen werden die durchschnittlichen Verluste schlechter Ergebnisse angegeben. Das Histogramm der Portfoliowertverteilung ergibt den probabilistischen Ergebnisbereich und zeigt häufig ein rechtes Schiefemuster in Bezug auf das Konzentrieren des Abwärtsrisikos, während das Aufwärtspotential bleibt.

Risikobereinigte Leistungsstatistiken wie das Sharpe-Verhältnis (normalerweise im Bereich von 0,8 bis 1,5 für Portfolios mit ausgewogener Exposition) können darauf hinweisen, ob die erwartete potenzielle Rendite die Volatilitätsexposition rechtfertigt. Die Visualisierung von Simulationspfaden zeigt, dass die Marktunsicherheit im Laufe der Zeit verschärft wird, wobei individuelle Szenarien weit von der mittleren Flugbahn entfernt sind, und die Richtungsänderungen, die im Laufe der Zeit auftreten, bieten potenzielle Einblicke in die strategischen Vermögenszuweisung oder Risikomanagemententscheidungen.

Fortgeschrittene Techniken: Verbesserung von Monte -Carlo -Risikomodellen

Durch die Verwendung von Varianzreduktionstechniken können Effizienz und Genauigkeit in Monte -Carlo -Simulationen erheblich verbessert werden.

  • Antithetische Variationen, Kontrollvariationen und Wichtigkeitsabtastverfahren verringern die erforderliche Anzahl von Simulationen, um das gewünschte Genauigkeitsniveau zu erreichen.
  • Quasi-monte-Carlo-Methoden basieren auf Sequenzen mit niedriger Discrepanz wie „Sobol“ oder „Halton-Wiederholungen“, die häufig schneller konvergieren als Pseudo-Random-Methoden, insbesondere bei hochdimensionalen Ableitungen und Portfolio-Optimierungsproblemen.
  • Copula-basierte Abhängigkeitsmodellierungsfunktionen verwenden komplexere Korrelationsstrukturen als eine einfache lineare Korrelation. „Clayton“, „Gumbel“ und „T-Copulas“ können alle Schwanzabhängigkeiten und Asymmetrien zwischen Vermögenswerten passen, um realistische Schätzungen von „Risiko“ vorzulegen.
  • Sprungdiffusionsprozesse und Regime-Switching-Modelle, um plötzliche Schocks auf dem Markt zu berücksichtigen, und die Änderung der Volatilitätsregime ist etwas, das reine geometrische Brownsche Bewegung nicht modellieren kann. Die erweiterten Methoden tragen erheblich zur Verbesserung der Stresstests und zur Analyse des Schwanzrisikos bei.

Mehr lesen: Ein Leitfaden zur Monte -Carlo -Simulation

Abschluss

Die Verwendung von Python Monte -Carlo -Simulation neben Excel ist ein großer Fortschritt im quantitativen Risikomanagement. Diese hybridisierte Model verwendet effektiv die rechnerische Strenge von Python in Verbindung mit der Usability von Excel, was zu fortschrittlichen Risikomodellierungstools führt, die die Verbesserung der Benutzerfreundlichkeit zusammen mit der Funktionalität behalten. Dies bedeutet, dass Finanzfachleute fortschrittliche Szenarioanalysen, Stresstests und Portfoliooptimierung durchführen können und gleichzeitig die Vertrautheit der Excel -Plattform nutzen. Die in diesem Tutorial enthaltenen Methoden bieten ein Paradigma zum Konstruktion von unternehmensweiten Risikomanagementsystemen, bei denen sowohl die analytische Strenge als auch die Benutzerfreundlichkeit das gleiche Ziel erreichen können.

In einem sich ständig weiterentwickelnden regulatorischen und komplexen Marktumfeld wird die verbesserte Kapazität zur Anpassung und Weiterentwicklung von Risikomodellen immer relevanter. Durch die Integration von Python-Excel können wir die Flexibilität und die technischen Fähigkeiten erreichen, um diese Herausforderungen zu tragen und gleichzeitig die Transparenz und Auditabilität der Entwicklung des Risikomanagementmodells zu verbessern.

Häufig gestellte Fragen

Q1. Was ist der Vorteil der Verwendung von Monte -Carlo -Simulation im Risikomanagement?

A. Es modelliert die Unsicherheit, indem Tausende zufälliger Szenarien ausgeführt werden und Einblicke in das Portfolioverhalten, das wertvolle Risiko und den erwarteten Mangel, den deterministische Modelle nicht erfassen können, ergeben.

Q2. Wie kann Python mit Excel für die Risikomodellierung in Verbindung gebracht werden?

A. Bibliotheken wie XLWINGS aktivieren Stay-Interaktion, während OpenPyxl und XLSXWriter dateibasierte Berichterstattung verarbeiten. Die COM -Automatisierung bietet eine tiefe Excel -Integration unter Home windows.

Q3. Welche fortschrittlichen Techniken verbessern die Effizienz von Monte Carlo?

A. Varianzreduktion, Quasi-monte-Carlo-Methoden, kopula-basierte Modellierung und Sprungdiffusionsprozesse verbessern die Genauigkeit, Konvergenzgeschwindigkeit und Spannungstests für komplexe Portfolios.

Knowledge Science Trainee bei Analytics Vidhya
Ich arbeite derzeit als Knowledge Science Trainee bei Analytics Vidhya, wo ich mich darauf konzentriere, datengesteuerte Lösungen zu erstellen und KI/ML-Techniken anzuwenden, um reale Geschäftsprobleme zu lösen. Meine Arbeit ermöglicht es mir, erweiterte Analysen, maschinelles Lernen und KI-Anwendungen zu untersuchen, die Organisationen dazu ermöglichen, intelligentere, evidenzbasierte Entscheidungen zu treffen.
Mit einer starken Grundlage für Informatik, Softwareentwicklung und Datenanalyse bin ich leidenschaftlich, KI zu nutzen, um wirkungsvolle, skalierbare Lösungen zu schaffen, die die Lücke zwischen Technologie und Wirtschaft schließen.
📩 Sie können mich auch an mich erreichen (E -Mail geschützt)

Melden Sie sich an, um weiter zu lesen und Experten-Kuratinhalte zu genießen.

[ad_2]

]]>
http://chatgpz.de/data-analytics/python-monte-carlo-simulation-in-excel/feed/ 0 12773
Simulation der Hochwasserüberschwemmung mit Python- und Höhendaten: Ein Anfängerführer http://chatgpz.de/machine-learning/simulation-der-hochwasserueberschwemmung-mit-python-und-hoehendaten-ein-anfaengerfuehrer/ http://chatgpz.de/machine-learning/simulation-der-hochwasserueberschwemmung-mit-python-und-hoehendaten-ein-anfaengerfuehrer/#respond Sun, 01 Jun 2025 19:22:43 +0000 https://chatgpz.de/machine-learning/simulation-der-hochwasserueberschwemmung-mit-python-und-hoehendaten-ein-anfaengerfuehrer/ [ad_1]

sind weltweit häufiger und verheerender geworden, mit den Auswirkungen des Klimawandels in den letzten Jahrzehnten. In diesem Zusammenhang spielt die Hochwassermodellierung eine wichtige Rolle bei der Risikobewertung und im Bereich der Katastrophenreaktion und bleibt gleichzeitig einen Schwerpunkt der fortschrittlichen Forschung und akademischen Studien.

In diesem Artikel werden wir mit Python und einem digitalen Höhenmodell (DEM) ein grundlegendes Hochwasserüberschwemmungsmodell erstellen. Wir werden eine Hochwasserfülltechnik verwenden, um schrittweise zu simulieren, wie sich steigender Wasserspiegel auf eine Landschaft auswirkt und den Überschwemmungsprozess animiert. Es ist eine visuelle und praktische Möglichkeit, Geodaten und Hochwasserrisiken zu untersuchen, auch ohne Hintergrund in der hydraulischen Modellierung.

Was du lernen wirst

1. Was ist ein digitales Höhenmodell (DEM)

A Digital Elevation Mannequin (DEM) ist eine numerische Darstellung der Erdoberfläche, wobei jede Zelle (oder Pixel) in einem regulären Gitter (bekannt als Rasterdaten) einen Höhenwert enthält. Im Gegensatz zu digitalen Bildern, die Farbinformationen speichern, speichern DEMS-Höhendaten, die normalerweise Oberflächenmerkmale wie Vegetation, Gebäude und andere künstliche Strukturen ausschließen.

DEMs werden üblicherweise in Bereichen wie Kartierung, Hydrologie, Umweltüberwachung und Erdwissenschaften verwendet. Sie dienen als grundlegender Datensatz für jede Anwendung, die ein detailliertes Verständnis von Gelände und Erhebung erfordert.

Viele Quellen bieten kostenlose und zuverlässige DEM -Daten an, einschließlich der USGS Nationale KarteAnwesend NASA Earthdataund die Shuttle Radar Topography Mission (SRTM).

In diesem Artikel werden wir einen DEM verwenden, der von dem bereitgestellt wird USGS Nationwide Geospatial Programdie frei verfügbar und in die Öffentlichkeit freigelassen ist.

HINWEIS: Die von USGS bereitgestellten Daten haben eine räumliche Auflösung von 1 Bogen Sekunde (ca. 30 Meter am Äquator).

Das Interessengebiet (AOI) in dieser Studie befindet sich im Nordosten Brasiliens. Die DEM -Datei deckt eine 1 ° × 1 ° Fliese ab, die sich von 6 ° S, 39 ° W bis 5 ° S, 38 ° W erstreckt, und verwendet das WGS84 -Koordinatensystem (EPSG: 4326), wie unten dargestellt.

Interessenbereich (Bild des Autors unter Verwendung von Google Maps und QGIS).

2. So laden und visualisieren Sie Höhendaten mit Python

Jetzt werden wir Python verwenden, um eine praktikable Umgebung festzulegen, um einige erste Informationen zu DEM -Daten zu visualisieren und zu analysieren. Importieren wir zunächst die erforderlichen Bibliotheken.

# import libraries
import rasterio
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation
  • rasterio: Liest und schreibt Geospatial Raster -Daten wie Dems.
  • matplotlib.pyplot: Erstellt statische und interaktive Visualisierungen.
  • numpy: Griff numerische Operationen und Array-basierte Daten.
  • FuncAnimation: Generiert Animationen durch Aktualisierung von Plots Body nach Body.

Als nächstes verwenden wir die rasterio Bibliothek zum Öffnen und Visualisieren einer DEM -Datei der AOI.

# Helper operate to load DEM Information
def load_dem(path):
    with rasterio.open(path) as src:
        dem = src.learn(1)
        rework = src.rework
        nodata = src.nodata

        if nodata just isn't None:
            # Masks no-data values
            dem = np.ma.masked_equal(dem, nodata)

        return dem, rework

Die obige Funktion liest die Höhendaten und prüft, ob die Datei „No-Information-Werte“ enthält. No-Information-Werte werden verwendet, um Bereiche ohne gültige Höhendaten darzustellen (z. B. Außenabdeckung oder beschädigte Pixel). Wenn ein No-Information-Wert vorhanden ist, ersetzt die Funktion diese Pixel durch np.nanerleichtert es, sie in späteren Analysen und Visualisierungen zu behandeln oder zu ignorieren.

Visualisieren von DEM -Daten

dem = load_dem("s06_w039_1arc_v3.tif")

plt.imshow(dem, cmap='terrain')
plt.title("Digital Elevation Mannequin")
plt.colorbar(label="Elevation (m)")
plt.present()
DEM der AOI (Kredit: US Geological Survey)
  • Verwendung geografischer Koordinaten in der Visualisierung

Wie wir sehen können, befinden sich die Achsen in Pixelkoordinaten (Spalten und Zeilen). Um die Überschwemmung der Hochwasser besser zu verstehen, ist es wichtig, die geografischen Koordinaten (Breitengrad und Länge) zu kennen, die mit jedem Pixel des Bildes verbunden sind.

Um dies zu erreichen, verwenden wir die Koordinaten -Referenzsystemdaten der DEM -Datei. Wie bereits erwähnt, verwendet der DEM, den wir verwenden, das WGS84 -Koordinatensystem (EPSG: 4326).

Wir können die Helferfunktion anpassen, um Dem -Dateien wie folgt zu laden:

def load_dem(path):
    with rasterio.open(path) as src:
        dem = src.learn(1)
        rework = src.rework
        nodata = src.nodata

        if nodata just isn't None:
            # Masks nodata values
            dem = np.ma.masked_equal(dem, nodata)

        return dem, rework

Die Funktion ruft die ab verwandeln Daten aus dem DEM, ein affines Objekt, das Pixelpositionen (Zeile, Spalte) auf geografische Koordinaten (Breitengrad und Längengrad) bildet.

Um die geografischen Koordinaten auf den Achsen des Grundstücks darzustellen extent Parameter aus dem imshow() Funktion.

dem, rework = load_dem("s06_w039_1arc_v3.tif")

# Compute extent from rework
extent = (
    rework(2),                          # xmin (longitude)
    rework(2) + rework(0) * dem.form(1),  # xmax
    rework(5) + rework(4) * dem.form(0),  # ymin (latitude)
    rework(5)                          # ymax
)

# Plot with utilizing geographic coordinates
fig, ax = plt.subplots()
img = ax.imshow(dem, cmap='terrain', extent=extent, origin='higher')
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
plt.colorbar(img, label='Elevation (m)')
plt.title('DEM Visualization')
plt.present()

Der extent Der Parameter wird verwendet, um die räumlichen Grenzen des DEM -Diagramms unter Verwendung von Werten zu definieren, die vom Raster abgeleitet wurden rework Effine -Objekt. Es setzt die minimale und maximale Länge (xminAnwesend xmax) und Breitengrad (yminAnwesend ymax) Damit das Diagramm Koordinaten auf den Achsen anstelle von Pixelindizes zeigt.

Schließlich haben wir die folgenden Ergebnisse:

DEM -Visualisierung mit geografischen Koordinaten (Kredit: US Geological Survey).

3.. Wie man Hochwasserszenarien mit Höhenschwellen simuliert

Jetzt werden wir eine einfache, aber nützliche Methode zur Visualisierung von Hochwasserszenarien und zur Simulation der Überschwemmung demonstrieren. Es besteht darin, eine Höhenschwelle zu definieren und eine binäre Maske zu erzeugen, die alle Bereiche mit einer Höhe unterhalb dieses Niveaus identifiziert.

In diesem Beispiel simulieren wir Überschwemmung über alle Gebiete mit Höhen unter 40 Metern.

flood_threshold = 40  # meters
flood_mask = (dem <= flood_threshold).astype(int)

plt.imshow(flood_mask, extent=extent, cmap='Blues')
plt.title(f"Flooded Space (Threshold: {flood_threshold}m)")
plt.xlabel("Longitude")
plt.ylabel("Latitude")
plt.present()
Überflutete Flächensimulation (Bild des Autors).

Mit nur wenigen Codezeilen können wir die Auswirkungen verschiedener Hochwasserszenarien auf das Interessengebiet (AOI) visualisieren. Da diese Visualisierung jedoch statisch ist, zeigt sie nicht, wie die Flut im Laufe der Zeit fortschreitet. Um damit umzugehen, werden wir Matplotlibs verwenden FuncAnimation Erstellen einer dynamischen Visualisierung.

4. Wie man den Hochwasser -Fortschritt mit Python animiert

Wir werden jetzt ein progressives Hochwasserszenario simulieren, indem wir den Wasserstand inkrementell erhöhen und bei jedem Schritt eine neue Maske erzeugen. Wir werden diese Maske auf dem Geländebild überlagern und sie animieren.

# flood_levels defines how excessive the flood rises per body
flood_levels = np.arange(15, 100, 5)

# Arrange determine and axes
fig, ax = plt.subplots()
img = ax.imshow(dem, cmap='terrain', extent=extent, origin='higher')
flood_overlay = ax.imshow(np.zeros_like(dem), cmap='Blues', alpha=0.4, extent=extent, origin='higher')
title = ax.set_title("")
ax.set_xlabel("Longitude")
ax.set_ylabel("Latitude")

# Animation operate
def replace(body):
    stage = flood_levels(body)
    masks = np.the place(dem <= stage, 1, np.nan)
    flood_overlay.set_data(masks)
    title.set_text(f"Flood Degree: {stage} m")
    return flood_overlay, title

# Create animation
ani = FuncAnimation(fig, replace, frames=len(flood_levels), interval=300, blit=True)
plt.tight_layout()
plt.present()

# save the output as a gif
ani.save("flood_simulation.gif", author='pillow', fps=5)
Hochwasserprogression (Kredit: US Geological Survey)

Wenn Sie daran interessiert sind, Animationen mit Python zu erstellen Tutorial ist ein großartiger Ort zum Begin.

Schlussfolgerung und nächste Schritte

In diesem Artikel haben wir einen grundlegenden Workflow erstellt, um eine Hochwassersimulation in Python mithilfe von Höhendaten aus einer DEM -Datei durchzuführen. Dieses Modell implementiert natürlich nicht die fortschrittlichsten Techniken zu diesem Thema. Diese Höhenschwellenmethode bietet noch eine leistungsstarke und zugängliche Einstiegspunkte.

Erweiterte Simulationstechniken umfassen:

  • Konnektivitätsbasierte Hochwasserausbreitung
  • Strömungsrichtung und Akkumulation
  • Zeitbasierte Flussmodellierung

Trotzdem kann dieser praktische Ansatz für Pädagogen, Studenten und Analysten von großem Nutzen sein, die erforschen Geospatial -Daten In Katastrophenreaktionsstudien und Umweltmodellierung.

Der komplette Code ist verfügbar Hier.

Ich ermutige die Leser nachdrücklich, mit dem Code mit ihren eigenen Höhendaten zu experimentieren, ihn an ihren spezifischen Kontext anzupassen und Wege zu untersuchen, um den Ansatz zu verbessern oder zu erweitern.

Referenzen

(1) US Geological Survey. Nationale Karte. US -Innenministerium. Abgerufen am 17. Mai 2025, von https://www.usgs.gov/applications/national-geospatial-program/national-map

(2) US Geological Survey. Was ist ein digitales Höhenmodell (DEM)? US -Innenministerium. Abgerufen am 17. Mai 2025, von https://www.usgs.gov/faqs/what-a-digital-levation-model-dem

(3) Gillies, S. Georeferenzierung – Rasterio -Dokumentation (stabil). Rasterio. Abgerufen am 27. Mai 2025, von https://rasterio.readthedocs.io/en/steady/subjects/georeferencing.html

(4) Gillies, Sean. Affine Transformations – Rasterio -Dokumentation (neuestes). Zugriff 27. Mai 2025. https://rasterio.readthedocs.io/en/newest/subjects/transforms.html.

Datenquelle: DEM -Daten, die in diesem Projekt verwendet werden, werden von der USGS -Umfrage (USGS) über die nationale Karte bereitgestellt und sind öffentlich zugänglich.

[ad_2]

]]>
http://chatgpz.de/machine-learning/simulation-der-hochwasserueberschwemmung-mit-python-und-hoehendaten-ein-anfaengerfuehrer/feed/ 0 9618
Sie können viel aus einer einfachen Simulation lernen (Beispiel für experimentelles Design mit ungleichen Varianzen für Behandlungs- und Kontrolldaten) http://chatgpz.de/data-science/sie-koennen-viel-aus-einer-einfachen-simulation-lernen-beispiel-fuer-experimentelles-design-mit-ungleichen-varianzen-fuer-behandlungs-und-kontrolldaten/ http://chatgpz.de/data-science/sie-koennen-viel-aus-einer-einfachen-simulation-lernen-beispiel-fuer-experimentelles-design-mit-ungleichen-varianzen-fuer-behandlungs-und-kontrolldaten/#respond Sat, 22 Mar 2025 07:10:22 +0000 http://chatgpz.de/data-science/sie-koennen-viel-aus-einer-einfachen-simulation-lernen-beispiel-fuer-experimentelles-design-mit-ungleichen-varianzen-fuer-behandlungs-und-kontrolldaten/ [ad_1]

Wir haben heute über die Blockierung in Experimenten im Unterricht gesprochen, und ein Schüler fragte: „Wann sollten wir eine ungleiche Anzahl von Einheiten in den Behandlungs- und Kontrollgruppen haben?“

Ich antwortete, dass das einfachste Beispiel ist, wenn die Behandlung teuer ist. Sie könnten 10.000 Menschen in Ihrer Bevölkerung haben, aber nur genug Finances, um die Behandlung auf 100 Menschen anzuwenden, sodass 99% in der Kontrollgruppe liegen. In anderen Umgebungen kann die Behandlung störend sein, und Sie würden sie auch hier nur auf einen kleinen Teil der verfügbaren Einheiten anwenden.

Aber selbst wenn Kosten kein Downside sind und Sie nur die statistische Effizienz maximieren möchten, könnte es sinnvoll sein, den beiden Gruppen unterschiedliche Anzahl von Einheiten zuzuweisen.

Zum Beispiel habe ich angenommen, dass Ihre Ergebnisse unter der Behandlung viel variabler sind als die Kontrolle. Um die grundlegende Schätzung des Behandlungseffekts – das durchschnittliche Ergebnis in der Behandlungsgruppe, abzüglich des Durchschnitts unter den Kontrollen – möchten Sie dann mehr Behandlungsbeobachtungen für die höhere Varianz berücksichtigen.

Aber dann machte ich eine Pause. Ich struggle von Verwirrung beeindruckt.

Hier gibt es zwei Intuitionen, und sie gehen in entgegengesetzte Richtungen:

(1) Behandlungsbeobachtungen sind variabler als Kontrollen. Sie benötigen additionally mehr Behandlungsmessungen, um eine genaue Schätzung für die Behandlungsgruppe zu erhalten.

(2) Behandlungsbeobachtungen sind variabler als Kontrollen. Daher sind die Beobachtungen der Behandlungen knapper, und Sie sollten mehr von Ihrem Finances den qualitativ hochwertigen Kontrollmessungen widmen.

Ich hatte das Gefühl, dass die richtige Argumentation (1), nicht (2) struggle, aber ich struggle mir nicht sicher.

Wie habe ich das Downside gelöst?

Rohe Kraft.

Hier ist der R:

n <- 100
expt_sim <- perform(n, p=0.5, s_c=1, s_t=2){
  n_c <- spherical((1-p)*n)
  n_t <- spherical(p*n)
  se_dif <- sqrt(s_c^2/n_c + s_t^2/n_t)
  se_dif
}
curve(expt_sim(100, x), from=.01, to=.99,
  xlab="Proportion of information within the remedy group",
  ylab="se of estimated remedy impact",
  foremost="Assuming sd of measurements isntwice as excessive for handled as for controls",
  bty="l")

Und hier ist das Ergebnis:

Oh, Shoot, ich magazine es wirklich nicht, wie die y-Achse nicht ganz auf Null geht. Es lässt die Varianzreduzierung dramatischer aussehen als es wirklich ist. Null ist in der NachbarschaftAdditionally luden wir es ein in:

curve(expt_sim(100, x), from=.01, to=.99,
  xlab="Proportion of information within the remedy group",
  ylab="se of estimated remedy impact",
  foremost="Assuming sd of measurements isntwice as excessive for handled as for controls", 
  bty="l",
  xlim=c(0, 1), ylim=c(0, 2), xaxs="i", yaxs="i")

Und wir können die Antwort sehen: Wenn in der Behandlungsgruppe doppelt so viel Variation wie in der Kontrollgruppe vorliegt, sollten Sie in der Behandlungsgruppe doppelt so viele Messungen ergreifen. Die Kurve ist bei x = 2/3 minimiert (was wir überprüfen können, ohne etwas zu zeichnen, aber die Grafik bietet eine gewisse Instinct und eine Gesundheitsprüfung). Argument (1) oben ist korrekt.

Andererseits ist der Standardfehler aus dem optimalen Design nicht viel niedriger als das einfache 50/50 -Design, wie durch Berechnung des Verhältnisses ersichtlich ist:

print(expt_sim(100, 1/2) / expt_sim(100, 2/3))

das ergibt 0,95.

Somit ergibt das bessere Design eine Verringerung des Standardfehlers um 5%-das heißt, eine Effizienzgewinn von 10%. Nicht nichts, aber nicht riesig.

Wie auch immer, der Hauptpunkt dieses Beitrags ist, dass Sie viel aus der Simulation lernen können. After all on this case the issue could be solved analytically—just differentiate (s_c^2/(1-p) + s_t^2/p) with respect to p and set the by-product to zero, and also you get s_c^2/(1-p)^2 – s_t^2/p^2 = 0, thus s_c^2/(1-p)^2 = s_t^2/p^2, so p/(1-p) = s_t/s_c. Das ist alles in Ordnung, aber ich magazine die Brute-Power-Lösung.

[ad_2]

]]>
http://chatgpz.de/data-science/sie-koennen-viel-aus-einer-einfachen-simulation-lernen-beispiel-fuer-experimentelles-design-mit-ungleichen-varianzen-fuer-behandlungs-und-kontrolldaten/feed/ 0 8007