Känslighetsanalys används för att bestämma inverkan av en samling oberoende faktorer på en beroende variabel under vissa förhållanden.
Det är ett starkt tillvägagångssätt för att avgöra hur modellens produktion påverkas av modellens indata i allmänna termer. I det här inlägget kommer jag att ge en snabb översikt över känslighetsanalys med SALib, ett gratis Python-känslighetsanalyspaket.
Ett numeriskt värde känt som känslighetsindex representerar ofta varje ingångs känslighet. Det finns många typer av känslighetsindex:
- Första ordningens index: beräknar bidraget från en enskild modellindata till outputvariansen.
- Andra ordningens index: beräknar bidraget från två modellindata till outputvariansen.
- Totalordersindex: kvantifierar en modellindatas bidrag till outputvarians, vilket omfattar både första ordningens effekter (inmatningen fluktuerar ensam) och eventuella interaktioner av högre ordning.
Vad är SALib?
SALib är en Python-baserad öppen källkod verktygslåda för att göra känslighetsbedömningar. Den har ett fristående arbetsflöde, vilket innebär att det inte interagerar direkt med den matematiska eller beräkningsmodellen. Istället är SALib ansvarig för att producera modellingångarna (genom en av provfunktionerna) och beräkna känslighetsindexen (via en av analysfunktionerna) från modellutgångarna.
En typisk SALib-känslighetsanalys består av fyra steg:
- Bestäm modellingångarna (parametrarna) och provintervallet för var och en.
- För att skapa modellingångar, kör exempelfunktionen.
- Utvärdera modellen med hjälp av de genererade indata och spara modellresultaten.
- För att beräkna känslighetsindexen, använd analysfunktionen på utgångarna.
Sobol, Morris och FAST är bara några av de känslighetsanalysmetoder som tillhandahålls av SALib. Många faktorer påverkar vilket tillvägagångssätt som är bäst för en given applikation, som vi kommer att se senare. För närvarande, tänk på att du bara behöver använda två funktioner, provtagning och analys, oavsett vilken teknik du använder. Vi guidar dig genom ett grundläggande exempel för att illustrera hur du använder SALib.
SALib Exempel – Sobol' Känslighetsanalys
I det här exemplet kommer vi att undersöka Sobols känslighet för Ishigami-funktionen, som visas nedan. På grund av sin höga olinjäritet och icke-monotonicitet används Ishigami-funktionen i stor utsträckning för att utvärdera metoder för osäkerhet och känslighetsanalys.
Stegen går till som följer:
1. Importera SALib
Det första steget är att lägga till de nödvändiga biblioteken. Prov- och analysfunktionerna för SALib hålls åtskilda i Python-moduler. Import av satellitprovet och Sobols analysfunktioner, till exempel, visas nedan.
Vi använder även Ishigami-funktionen som finns som testfunktion i SALib. Slutligen importerar vi NumPy eftersom SALib använder det för att lagra modellingångar och utdata i en matris.
2. Modellingång
Modellingångarna måste sedan definieras. Ishigami-funktionen accepterar tre ingångar: x1, x2 och x3. I SALib konstruerar vi ett dikt som specificerar antalet ingångar, deras namn och gränserna för varje ingång, som ses nedan.
3. Generera prover och modellen
Proverna genereras sedan. Vi måste skapa prover med hjälp av Saltelli-provtagaren eftersom vi gör en Sobol-känslighetsanalys. I det här fallet är paramvärdena en NumPy-matris. Vi kan observera att matrisen är 8000 gånger 3 genom att köra param values.shape. 8000 prover skapades med Saltelli-provtagaren. Saltelli-samplaren skapar sampel, där N är 1024 (parametern vi angav) och D är 3. (antalet modellingångar).
Som tidigare nämnts är SALib inte engagerad i matematisk eller beräkningsmodellutvärdering. Om modellen är skriven i Python kommer du vanligtvis att gå igenom varje provinmatning och bedöma modellen:
Exemplen kan sparas i en textfil om modellen inte är utvecklad i Python:
Varje rad i param values.txt representerar en modellingång. Modellens utdata bör sparas till en annan fil i liknande stil, med en utdata på varje rad. Därefter kan utgångarna laddas med:
I det här exemplet kommer vi att använda Ishigami-funktionen från SALib. Dessa testfunktioner kan utvärderas enligt följande:
4. Utför analys
Vi kan äntligen beräkna känslighetsindexen efter att ha laddat in modellresultaten i Python. I det här exemplet kommer vi att använda sobol.analyze för att beräkna första, andra och totala ordningens index.
Si är en Python-ordbok med nycklarna "S1", "S2", "ST", "S1 conf", "S2 conf" och "ST conf." _conf-nycklarna håller de associerade konfidensintervallen, som vanligtvis är inställda på 95 procent. För att skriva ut alla index, använd nyckelordsparametern print till console=True. Alternativt, som illustreras nedan, kan vi skriva ut de individuella värdena från Si.
Vi kan se att x1 och x2 har första ordningens känslighet, men x3 verkar inte ha några första ordningens effekter.
Om totalordningens index är betydligt större än första ordningens index, sker med största säkerhet interaktioner av högre ordning. Vi kan se dessa interaktioner av högre ordning genom att titta på andra ordningens index:
Vi kan observera att x1 och x3 har signifikanta interaktioner. Därefter kan resultatet omvandlas till en Pandas DataFrame för vidare studier.
5. Ritning
För din bekvämlighet tillhandahålls grundläggande kartläggningsmöjligheter. Funktionen plot() producerar matplotlib-axelobjekt för efterföljande manipulation.
Slutsats
SALib är en sofistikerad verktygslåda för känslighetsanalys. Andra tekniker i SALib inkluderar Fourier Amplitude Sensitivity Test (FAST), Morris Method och Delta-Moment Independent Measure. Även om det är ett Python-bibliotek, är det tänkt att fungera med modeller av alla slag.
SALib erbjuder ett lättanvänt kommandoradsgränssnitt för att skapa modellingångar och utvärdera modellutgångar. Kolla upp SALib dokumentation att lära sig mer.
Kommentera uppropet