Følsomhedsanalyse bruges til at bestemme virkningen af en samling af uafhængige faktorer på en afhængig variabel under visse betingelser.
Det er en stærk tilgang til at bestemme, hvordan modellens output påvirkes af modellens input generelt. I dette indlæg vil jeg give et hurtigt overblik over følsomhedsanalyse ved hjælp af SALib, en gratis Python-følsomhedsanalysepakke.
En numerisk værdi kendt som følsomhedsindekset repræsenterer ofte hvert inputs følsomhed. Der er adskillige typer af følsomhedsindekser:
- Førsteordens indekser: beregner bidraget fra et enkelt modelinput til outputvariansen.
- Andenordens indekser: beregner bidraget fra to modelinput til outputvarians.
- Totalordensindeks: kvantificerer et modelinputs bidrag til outputvarians, der omfatter både førsteordenseffekter (inputtet fluktuerer alene) og eventuelle interaktioner af højere orden.
Hvad er SALib?
SALib er en Python-baseret open source værktøjskasse til at lave følsomhedsvurderinger. Den har en adskilt arbejdsgang, hvilket betyder, at den ikke interagerer direkte med den matematiske eller beregningsmæssige model. I stedet er SALib ansvarlig for at producere modelinput (gennem en af prøvefunktionerne) og beregne følsomhedsindekserne (via en af analysefunktionerne) fra modeloutput.
En typisk SALib-følsomhedsanalyse består af fire trin:
- Bestem modelinput (parametre) og prøveintervallet for hver.
- For at oprette modelinput skal du køre eksempelfunktionen.
- Evaluer modellen ved hjælp af de genererede input og gem modelresultaterne.
- For at beregne følsomhedsindeksene skal du bruge analysefunktionen på udgangene.
Sobol, Morris og FAST er blot nogle få af følsomhedsanalysemetoderne leveret af SALib. Mange faktorer påvirker, hvilken tilgang der er bedst til en given applikation, som vi vil se senere. Indtil videre skal du huske på, at du kun behøver at bruge to funktioner, prøve og analysere, uanset hvilken teknik du anvender. Vi vil guide dig gennem et grundlæggende eksempel for at illustrere, hvordan du bruger SALib.
SALib-eksempel – Sobol' følsomhedsanalyse
I dette eksempel vil vi undersøge Sobol'-følsomheden af Ishigami-funktionen, som vist nedenfor. På grund af dens høje ikke-linearitet og ikke-monotonicitet er Ishigami-funktionen meget brugt til at evaluere metoder til usikkerhed og følsomhedsanalyse.
Trinene går som følger:
1. Import af SALib
Det første trin er at tilføje de nødvendige biblioteker. Prøve- og analysefunktionerne i SALib holdes adskilt i Python-moduler. Import af satellitprøven og Sobol-analysefunktioner er for eksempel vist nedenfor.
Vi bruger også Ishigami-funktionen, som er tilgængelig som testfunktion i SALib. Til sidst importerer vi NumPy, da SALib bruger det til at gemme model input og output i en matrix.
2. Modelindgang
Modelindgangene skal derefter defineres. Ishigami-funktionen accepterer tre input: x1, x2 og x3. I SALib konstruerer vi en diktat, der specificerer antallet af input, deres navne og grænserne for hver input, som vist nedenfor.
3. Generer prøver og modellen
Prøverne genereres derefter. Vi er nødt til at oprette prøver ved hjælp af Saltelli-prøvetageren, da vi laver en Sobol-følsomhedsanalyse. I dette tilfælde er param-værdier en NumPy-matrix. Vi kan observere, at matrixen er 8000 gange 3 ved at køre param values.shape. 8000 prøver blev lavet med Saltelli-prøvetageren. Saltelli-sampleren opretter prøver, hvor N er 1024 (den parameter, vi har angivet), og D er 3. (antallet af modelinput).
Som tidligere nævnt er SALib ikke involveret i matematisk eller beregningsmæssig modelevaluering. Hvis modellen er skrevet i Python, vil du typisk gå gennem hvert eksempelinput og vurdere modellen:
Eksemplerne kan gemmes i en tekstfil, hvis modellen ikke er udviklet i Python:
Hver linje i param values.txt repræsenterer én modelinput. Modellens output skal gemmes i en anden fil i en lignende stil, med et output på hver linje. Derefter kan udgangene indlæses med:
I dette eksempel skal vi bruge Ishigami-funktionen fra SALib. Disse testfunktioner kan evalueres som følger:
4. Udfør analyse
Vi kan endelig beregne følsomhedsindekserne efter indlæsning af modelresultaterne i Python. I dette eksempel vil vi bruge sobol.analyze til at beregne første-, anden- og totalordensindekser.
Si er en Python-ordbog med tasterne "S1", "S2", "ST", "S1 conf", "S2 conf" og "ST conf." _conf-tasterne holder de tilhørende konfidensintervaller, som generelt er sat til 95 procent. For at udskrive alle indekser skal du bruge nøgleordsparameteren print til console=True. Alternativt, som illustreret nedenfor, kan vi udskrive de individuelle værdier fra Si.
Vi kan se, at x1 og x2 har førsteordens følsomhed, men x3 ser ikke ud til at have nogen førsteordens indvirkninger.
Hvis totalordensindekserne er væsentligt større end førsteordensindekserne, finder der helt sikkert interaktioner af højere orden sted. Vi kan se disse højere-ordens interaktioner ved at se på andenordens indekser:
Vi kan observere, at x1 og x3 har signifikante interaktioner. Derefter kan resultatet blive transformeret til en Pandas DataFrame for yderligere undersøgelse.
5. Plotning
For nemheds skyld er der grundlæggende kortlægningsfaciliteter. Funktionen plot() producerer matplotlib-akseobjekter til efterfølgende manipulation.
Konklusion
SALib er et sofistikeret værktøjssæt til følsomhedsanalyse. Andre teknikker i SALib omfatter Fourier Amplitude Sensitivity Test (FAST), Morris Method og Delta-Moment Independent Measure. Selvom det er et Python-bibliotek, er det beregnet til at fungere med modeller af enhver art.
SALib tilbyder en brugervenlig kommandolinjegrænseflade til oprettelse af modelinput og vurdering af modeloutput. Tjek ud SALib dokumentation at lære mere.
Giv en kommentar