Forestil dig, at du kan ”spole frem” i tid og se tusindvis af mulige fremtider for din portefølje – før du overhovedet trykker på købsknappen. Det er præcis den superkraft, en Monte Carlo-simulering giver dig som investor. I stedet for at satse på ét enkelt fremtidsscenarie kan du med få klik teste, hvor robust din strategi er, når virkeligheden kaster både sorte svaner, grønne svaner og alt derimellem efter markedet.
På FCE Invest | Din online investeringsportal får du i denne guide en trin-for-trin-opskrift på, hvordan du bygger din egen Monte Carlo-model – uden at drukne i avanceret matematik eller dyre softwaresystemer. Vi koger processen ned til 9 praktiske trin, der spænder fra at definere dine mål til at validere og implementere resultaterne i din daglige investeringsbeslutning.
Om du vil stress-teste en aktieportefølje, beregne Value at Risk, eller finde ud af om dine pensionsmidler rækker til en tidlig tilbagetrækning, så får du her et solidt fundament. Undervejs lærer du:
- Hvordan du omsætter usikkerhed til konkrete input-fordelinger
- Hvorfor korrekt kalibrering er forskellen på meningsfuld indsigt og talmagi
- Hvilke faldgruber du skal undgå, når du fortolker resultaterne
- Og ikke mindst – hvordan du gør hele processen gentagelig og transparent, så både du og din investeringskomité kan sove roligt om natten
Smut forbi kaffemaskinen, spænd sikkerhedsbæltet, og gør dig klar til at simulere dig til bedre beslutninger. Lad os dykke ned i de 9 trin til en Monte Carlo-simulering!
Trin 1: Afklar problem og beslutningsmål
Før du skriver én linje kode, skal du være krystalklar på hvorfor du overhovedet laver en Monte Carlo-simulering. En skarp problemformulering fungerer som GPS for hele projektet – uden den risikerer du at få svar på et spørgsmål, ingen har stillet.
1. Hvad vil du vide?
- Porteføljeafkast: Hvad er den forventede årlige eller kumulative performance?
- Sandsynlighed for tab: Hvor stor er chancen for et negativt afkast over en given periode?
- VaR / CVaR: Hvilket tab kan forventes (eller overskrides) med fx 95 % konfidens?
- Net Present Value (NPV): Hvad er nutidsværdien af fremtidige cashflows under usikkerhed?
- Kapitalbehov: Hvilken indskudskapacitet kræves for at holde sandsynligheden for insolvens under X %?
2. Afgræns tidshorisont
Alle risikomål er tidsafhængige. En 1-dags VaR fortæller intet om et 10-års pensionsmål. Gør derfor følgende:
- Fastlæg måldato (fx de næste 12 måneder, 5 år eller 30 år).
- Vælg tidsdiskretisering (dag, uge, måned, kvartal) – den styrer datakrav og beregningstid.
- Beslut om der skal antages kontinuerlig vs. diskret rebalancering.
3. Definér beslutnings- og succeskriterier
| Dimension | Eksempel |
|---|---|
| Beslutningskriterium | Vælg portefølje A, hvis den har lavere 5 %-CVaR end portefølje B og en forventet Sharpe > 0,6. |
| Succesmetrik | ≥ 90 % sandsynlighed for at slutte over inflationsrate + 3 % p.a. |
| Constraint | Max 15 % sandsynlighed for drawdown > 20 % på 12 måneder. |
4. Formuler målet som en smart-sætning
Specifikt, Målbart, Achievable, Relevant, Tidsbestemt.
Eksempel: “Opnå mindst 5 % realt årligt afkast med 95 % sikkerhed over de næste 10 år.”
5. Tjekliste før du går videre
- Har du én klar hovedmetrik + 1-2 sekundære?
- Er tidshorisonten entydigt defineret?
- Er beslutningsreglen nedskrevet, så en kollega kan forstå og implementere den?
- Ved du, hvilke interessenter der skal bruge resultaterne, og i hvilket format?
Når disse punkter er “green-lighted”, kan du trygt bevæge dig videre til Trin 2 og begynde at kortlægge de usikre drivere.
Trin 2: Kortlæg usikre drivere og antagelser
Med et klart beslutningsmål i hånden er næste opgave at afdække hvor usikkerheden kommer fra. En Monte Carlo-model er kun så god som de drivere, du tillader den at variere, så brug lidt ekstra tid på denne kortlægning.
1. Saml en bruttoliste over usikre variable
- Finansielle markedsvariable: afkast på aktier, obligationer, råvarer, alternative aktiver.
- Volatiliteter & korrelationer: tidsvarierende volatilitet (f.eks. GARCH) og samvariation mellem aktivklasser.
- Makroøkonomi: renter, inflation, valutakurser, BNP-vækst, arbejdsløshed.
- Porteføljeforhold: løbende ind- og udbetalinger, rebalanceringstriggere, cash-drag.
- Omkostninger: forvaltningsgebyrer, transaktionsomkostninger, skat.
- Projekt-/virksomhedsspecifikt: salgsvolumen, priselasticitet, CAPEX/OPEX, restværdi.
2. Klassificér som eksogene eller endogene
En praktisk måde at strukturere listen på er at afgøre, om en variabel påvirkes af modellens andre output eller ej:
| Driver | Beskrivelse | Type |
|---|---|---|
| Aktieafkast | Årligt (log)-afkast på MSCI World | Eksogen – fastsat af markedet |
| Volatilitet | 10-dages rullende standardafvigelse | Eksogen |
| Porteføljeværdi | Sum af aktivstier | Endogen – beregnes i hvert tidssteg |
| Transaktionsomk. | Afhænger af handelsvolumen pr. rebalancering | Endogen |
| Inflation | Årlig CPI-ændring (scenarier fra Nationalbanken) | Eksogen |
3. Tegn et influence-diagram
- Placer output-metric (f.eks. samlet formue efter 30 år) i højre side.
- Tegn pile fra hver usikker driver, der påvirker outputtet direkte.
- Indsæt mellemliggende beregnede størrelser (skat, gebyrer, cashflows) som cirkler – disse er typisk endogene.
Diagrammet fungerer som tjekliste: Hvis en eksogen variabel ikke har en pil ind i modellen, mangler du en formel; hvis en endogen variabel ikke fodrer videre til et resultat, er den måske irrelevant.
4. Vurder materialitet
Ikke alle usikre variable kræver fuld stokastisk behandling. Overvej:
- Elasticitet: Hvor meget ændres output pr. 1 %-ændring i driveren?
- Variationsbredde: Er der realistisk udsving nok til at påvirke beslutningen?
- Kompleksitet: Koster det mere regnetid end den information, du får retur?
5. Dokumentér antagelser
For hver driver skal du nedfælde følgende:
- Datakilde & tidsperiode (f.eks. Stoxx Global 1800, 2000-2023 daglige priser).
- Stikord om statistik (middel, σ, haletykkelse).
- Begrundelse for eksogen vs. endogen klassificering.
- Eventuelle forretningsregler (f.eks. Rebalancer når aktivallokation afviger >5 pp.).
Når denne kortlægning er fuldført, har du en solid base til at vælge fordelinger og afhængigheder i næste trin – og du kan allerede nu sortere irrelevante eller redundante variable fra, før de fordyrer simuleringen.
Trin 3: Vælg passende sandsynlighedsfordelinger og afhængigheder
Før du trykker “kør” på din Monte Carlo-model, skal hver usikker driver klædes på med en realistisk sandsynlighedsfordeling og en troværdig samvariation med de øvrige drivere. Forkerte antagelser her forplanter sig direkte til dine resultater, så brug tid på at få matchet fordeling og afhængighed rigtigt.
1. Match drivere med den rette fordeling
| Type af driver | Typiske fordelinger | Hvornår giver det mening? |
|---|---|---|
| Aktieafkast (log-retur) | Lognormal, Student-t | Lognormal til “normale” perioder; t-fordeling hvis du vil fange fat tails og hyppigere ekstreme udsving. |
| Valuta- og råvareafkast | Normal, t, jump-diffusion | Normal til korte horisonter med små udsving; t eller jump-diffusion hvis pludselige prisstød er vigtige. |
| Renteniveau | Normal, lognormal (shiftet) | Normal omkring nul; lognormal hvis renten ikke må blive negativ, eller ved lange horisonter. |
| Inflation | Triangulær, normal | Triangulær når du kun har bedste bud på min-, base- og maks-scenarie; normal ved rige historikdata. |
| Default-sandsynlighed / recovery | Beta | Beta ligger naturligt mellem 0 og 1 og kan formes til både symmetriske og skæve forløb. |
| Projekt-NPV / omkostningsoverskridelser | Triangulær, PERT | God når viden er ekspertbaseret, og “most likely” scenariet er kendt. |
Tre tommelfingerregler
- Respektér naturlige grænser. Afkast kan i princippet gå fra −100 % til ∞, mens volatilitet eller sandsynligheder aldrig må blive negative.
- Tjek halerne. Undervurderer du halerisiko, undervurderer du VaR/CVaR – især kritisk ved porteføljestyring.
- Test med data. Brug histogrammer, QQ-plots og goodness-of-fit tests (Kolmogorov-Smirnov, Anderson-Darling) før du låser en fordeling.
2. Indbyg afhængigheder mellem drivere
Selv den bedst valgte marginalfordeling er utilstrækkelig, hvis aktie-, rente- og råvarestier trækkes uafhængigt. Virkeligheden er fuld af korrelationer – og de er sjældent konstante.
- Korrelationsmatrix
Hvornår? Når alle marginals er (tilnærmelsesvis) normalfordelte.
Hvordan? Estimér historisk korrelationsmatrixΣ, sørg for at den er positiv definit (evt. via nearest PD-algoritme), og anvend Cholesky-dekomponering:z ~ N(0,I)L = cholesky(Σ)x = μ + L · z // giver korrelerede normaler
- Gaussian eller t-copula
Hvornår? Når marginals er forskellige (fx lognormal aktieafkast, beta defaultrate) men du stadig vil styre lineær korrelation.
Hvordan? Generér korrelerede standard-normaler som ovenfor, transformér hver komponent gennem sin inverse CDF:u = Φ(x) // uniform på [0,1]y = F-1(u) // brug specifik marginal CDF
En t-copula giver tykkere multivariate haler ved at erstatte
N(0,I)med multivariat t-støj. - Archimedean copula (Clayton, Gumbel)
Hvornår? Hvis du især bekymrer dig om tail-dependence: fx simultane tab ved markedsstress.
Hvordan? Kalibrér copula-parameter til at matche observeret tail-sammenhæng eller stress-scenarier, og brug samme CDF-inversion som ovenfor.
Praktisk tjekliste før du går videre til Trin 4:
- Alle drivere har nu en valideret marginalfordeling, inkl. parameterværdier.
- Du har dokumenteret kilder (historik, ekspertvurdering) og eventuelle transformationer (log, differens).
- Korrelations- eller copula-strukturen er kalibreret og testet med back-of-the-envelope-scenarier: giver den rimelige porteføljeudsving i stress og boom?
- Monte Carlo-koden kan generere ét sæt korrelerede tilfældige træk, der rammer både marginal- og afhængighedsantagelserne. Log fejl, så du opdager negative variancer eller korrelationsbrud tidligt.
Med en veldefineret fordeling for hver driver – og en realistisk fælles afhængighed – er du klar til at samle data og finjustere parametrene i næste trin.
Trin 4: Indsaml data og kalibrér parametre
Når de usikre drivere og deres fordelinger er valgt, gælder det om at få de numeriske parametre på plads. Det gør du ved at kombinere historiske datasæt med kvalitative skøn, så modellen både hviler på evidens og forretningsforståelse.
1. Vælg datakilder
- Markedsdata: prisserier fra Bloomberg, Refinitiv, Stoxx m.fl.
- Makrodata: inflation, BNP-vækst, rentekurver fra Danmarks Statistik, OECD, FRED.
- Regnskabsdata: cash-flows, marginer, CAPEX fra årsrapporter eller databaser som FactSet.
- Ekspertinput: strategers 10-års forventninger, scenarier fra IMF, eller intern risk-komités “house view”.
2. Estimér moments og haler
- Middelværdi (μ): Gennemsnitligt årligt afkast, vægtet for driftstid hvis der er fusioner/spin-offs.
- Volatilitet (σ): Årlig standardafvigelse eller EWMA/GARCH hvis volatiliteten er tidsvarierende.
- Skævhed & kurtosis: Brug
stats.skew()ogstats.kurtosis()til at måle hale-tykkelse. Er kurtosis > 3, bør du overveje en t-fordeling eller EVT-tilpasning. - Regimeparametre: Identificér bull/bear-regimer med Markov-skift eller Bai-Perron break-tests og estimer separate μ/σ for hvert regime.
3. Test nøgleantagelser
| Antagelse | Test | Mulig justering |
|---|---|---|
| Stationaritet | ADF, KPSS | Differencér serie eller arbejd med excess returns |
| Ingen autokorrelation | Ljung-Box, Durbin-Watson | Modelér AR(1)/ARMA eller øg tidsinterval (dag → uge) |
| Tynde haler (normalitet) | Jarque-Bera, Q-Q plot | Skift til t, skewed t eller brug cornish-fisher korrektion |
4. Kalibrér til fremtiden – Ikke blot fortiden
- Blend historik og forecast: Lav en vægtet middel: 70 % historik / 30 % strategisk outlook.
- Shrinkage-teknikker: Ledoit-Wolf til at stabilisere kovarians-matricen, især ved få observationer.
- Stressscenarier: Skru bevidst op for haletykkelsen ift. finansielle kriser og pandemier.
5. Dokumentér og versionér
Gem alle inputfiler, kode-notebooks og valgte statistik-tests som en del af model-dokumentationen. Brug versionskontrol (Git) og noter dato, datakilde og ansvarlig analytiker, så du kan genskabe kalibreringen, når modellen senere skal revideres.
Trin 5: Opbyg den deterministiske model
Før du smider et eneste tilfældigt tal ind i modellen, skal du have en deterministisk “rygrad”, der beskriver præcis, hvordan en krone bevæger sig gennem systemet:
- Indskud / kapitalgrundlag – startportefølje og fremtidige indbetalinger.
- Kontantstrømme fra aktiver – dividender, kuponer, udbytter.
- Interne modregninger – gebyrer, transaktionsomkostninger, performance fees.
- Eksterne fradrag – skat på afkast og realiserede gevinster.
- Output – slutkapital, løbende udbetalinger, risk-metrics (VaR, drawdown mv.).
Modelstrukturen skal være så klar, at du kan køre en nul-støj-scenarie (alle afkast = 0), og stadig få et meningsfuldt forløb af kontanter ind / ud af porteføljen.
2. Rebalancering og porteføljeregler
Bestem hvordan porteføljen justeres over tid. De mest udbredte varianter er:
| Metode | Beskrivelse | Data der kræves |
|---|---|---|
| Fast frekvens | Rebalancér fx månedligt til en strategivægt. | Dato-kalender, vægte, max. afvigelser |
| Trigger-baseret | Kun hvis vægtafvigelse > tærskel (±5 ppt). | Aktuelle vægte, tærskel, cut-off-dato |
| Cashflow-drevet | Nye indskud bruges til at bringe vægte tilbage på mål. | Kontantstrømme, target weights |
Indarbejd transaktionsomkostninger som lineære (procent af handelsværdi) eller ikke-lineære (fast + variabel). Husk at gebyrerne forstørres i simuleringen, når handelsfrekvensen stiger.
3. Skatte- og omkostningsblokke
- Løbende beskatning – fx lagerbeskatning af danske investeringsforeninger.
- Realisation – trigger ved salg i rebalancering; behold drift mellem salg for at udskyde skat.
- Gebyrer – administrative %, performance fees med high-water-mark, fast depotgebyr.
Implementér disse som cashflow(t)-funktioner, så de indgår i samme tidslinje som afkastet.
4. Vælg tidsdiskretisering
Ofte gælder: jo kortere tidsskridt, jo mere præcist – men også jo dyrere numerisk.
- Dag – nødvendigt til intradag-risiko, optionsporteføljer, jump-processer.
- Uge – kompromis ved porteføljer med illikvide aktiver, hvor der ikke handles dagligt.
- Måned – til pensionsporteføljer eller strategiske allokeringer.
Dokumentér dine antagelser: lader du fx “daglige” gebyrer opkræves pro rata? Skal skatten først betales årligt?
5. Definér dynamikken for afkastet
| Proces | Formel (kontinuerlig notation) | Hvornår egnet? |
|---|---|---|
| Geometrisk Brownsk Bevægelse (GBM) | dS/S = μ dt + σ dW | Aktier, brede indeks – simpelt, log-normal fordeling. |
| AR(1) | r_t = α + φ r_{t-1} + ε_t | Renter, inflationsserier, mean-reversion. |
| Jump-diffusion (Merton) | dS/S = (μ-λκ)dt + σ dW + J dq | Olieselskaber, krypto, hvor større spring forekommer. |
| Regime skift (Markov) | μ, σ skifter efter skjult Markov-kæde | Makro-styrede strategier, krise/anvende konjunkturafhængighed. |
Alle processer skal omskrives til den valgte tidsdiskretisering. For GBM med Δt i år gælder fx:
r_t = (μ - 0.5 σ²) Δt + σ √Δt · Z_t
6. Constraints og realitetscheck
Indfør begrænsninger tidligt, så de ikke “hacker” din stokastiske del senere:
- Vægte: 0 % ≤ w_i ≤ 20 % i enkeltaktier, maks. 60 % aktier totalt.
- Likviditet: minimum 3 % af porteføljen i kontanter.
- Caps på gearing, belåning eller derivat-eksponering.
Når afkastene senere simuleres, kontrollerer modellen automatisk om constraints brydes og foretager tvangssalg eller nedskalering.
7. Eksempel på “deterministisk skelet” i pseudo-kode
# initialiseringvalue[0] = startkapitalweights[0] = target_weightsfor t in tidssteg: # 1. modtag kontantstrømme (dividend, kupon) cash_in = cashflow_in(t, value[t-1]) # 2. træk gebyrer og skatter cash_out = fee(t, value[t-1]) + tax(t) # 3. anvend rebalancering value_post_fee = value[t-1] + cash_in - cash_out weights[t] = rebalance(value_post_fee, weights[t-1], constraints) # 4. afkast beregnes først i Trin 7 (stoch. simulering) # placeholder så du kan teste flowet value[t] = value_post_fee # uden afkast
Når denne kode kører uden fejl, før du tilføjer tilfældige afkast, har du en solid deterministisk model, der kan danne basis for den efterfølgende Monte Carlo-simulering.
Trin 6: Opsæt tilfældighedsmotor og sampling-teknikker
Før du kan trykke “Run” på selve Monte Carlo-modellen, skal fundamentet for den tilfældige talstrøm være solidt og gennemtænkt. En dårlig generator eller forkert sampling kan forplante sig som systematiske fejl i alle efterfølgende trin. Nedenfor finder du en praktisk tjekliste, eksempler på kode og et overblik over de mest udbredte teknikker.
1. Vælg en robust rng & fastsæt seed
- Generator-typer:
- Mersenne Twister (MT19937) – høj periode (219937-1), standard i NumPy/R/Matlab.
- PCG – moderne, hurtig og med bedre statistiske egenskaber end MT til kortere sekvenser.
- Xoshiro/Xoroshiro – ekstremt hurtige til GPU-beregninger, men kræver TestU01 validering.
- Seed-strategi:
- Fastsæt altid et
seedi analysefasen (fxrng = np.random.default_rng(seed=42)) så resultaterne kan genskabes. - Generér uafhængige strømme (sub-streams) til forskellige porteføljer:
Seed₀ + i · Δ. - Log seed i output-filen sammen med versionsnummer for koden.
- Fastsæt altid et
2. Sampling: Fra u(0,1) til ønsket fordeling
| Metode | Ide | Fordele | Ulemper |
|---|---|---|---|
| Inverse transform | u → F-1(u) | Simpel, virker for alle fordelinger m. lukket invers | Kan være numerisk tung (fx t-fordeling med mange frihedsgrader) |
| Box-Muller (polar) | To u → N(0,1) via trig-transformation | Elegant, ingen tabeller, høj præcision | Dobbelt brug af log() & sqrt() ⇒ dyrt på store simuleringer |
| Ziggurat | Piecewise-konstant approksimation | 3-4× hurtigere end Box-Muller | Mere kompleks kode, svært at debugge |
# Eksempel: normalfordelte afkast med Box-Mullerimport numpy as npseed = 42rng = np.random.default_rng(seed)u1 = rng.random(size=n_paths * n_steps)u2 = rng.random(size=n_paths * n_steps)z = np.sqrt(-2 * np.log(u1)) * np.cos(2 * np.pi * u2) # N(0,1)
3. Variansreduktion – Få mere præcision for samme regnetid
- Antithetiske variabler
Generér bådeuog1-u; middelværdiens varians falder typisk 30-50 %. - Latin Hypercube Sampling (LHS)
Del[0,1]ind i n lige store intervaller og træk ét punkt pr. interval. Garanterer bedre dækning af input-rummet – især ved få scenarier (n < 1 000). - Stratificering
Brug prædefinerede strata (fx kvartiler af volatilitet) og vægt resultaterne efter strata-sandsynligheder. Reducerer højre-hale-støj ved VaR/CVaR-beregninger. - Control variates & importance sampling (avanceret)
Indbyg referencevariable med kendt forventning eller overvægt ekstreme stier. Kræver matematisk kalibrering men kan skære varians med en størrelsesorden.
4. Praktiske tommelfingerregler
- Kør mindst 10 000 stier uden variansreduktion eller 2 000-5 000 stier med LHS/antithetics for at opnå SE < 1 % på 95-percentiler.
- Dokumentér RNG-type, seed, antal stier og variansreduktion i modelrapporten (audit trail).
- Benchmark mean-variance mod analytiske løsninger (fx Black-Scholes) før du går live.
Når du konsekvent anvender ovenstående principper, er du sikker på, at enhver variation i dine resultater reelt skyldes økonomisk usikkerhed – ikke ustyrlige tilfældige tal.
Trin 7: Kør simuleringen
Når den deterministiske model er på plads, skal du bringe den til live via Monte Carlo-kørslen. Her gælder det om at finde den rette balance mellem præcision, performance og sporbarhed.
1. Fastlæg antal iterationer (n)
- Usikkerheden på et estimat falder proportionalt med
1/√N. Dobbelt præcision kræver derfor cirka fire gange så mange simuleringer. - Start med et konservativt mål og udvid i batches. Eksempel: 10.000, 50.000, 100.000 … indtil konvergenskriteriet (se punkt 4) er opfyldt.
| Output-metrik | Typisk præcisionskrav | Guideline for N |
|---|---|---|
| Gennemsnitligt afkast | ±0,10 %-point | 5.000 – 10.000 |
| 95 % VaR | ±0,05 %-point | 30.000 – 100.000 |
| CVaR / tail-risiko | ±0,02 %-point | 100.000+ |
2. Vælg tidsdiskretisering (δt)
- Daglig: Nødvendig ved options-prissætning, intradag-gebyrer eller højfrekvent rebalancering.
- Månedlig: Ofte tilstrækkelig til pensions- og porteføljesimuleringer, hvor omkostninger og cashflows posteres månedligt.
- Årlig: Kun hvis dynamikken er simplificeret, fx NPV-analyse af et enkelt projekt.
3. Parallelisér for hastighed
- Monte Carlo er ideelt til embarrassingly parallel behandling: hver tilfældig sti kan køres uafhængigt.
- Udnyt:
- Multi-core CPU (Python
multiprocessing, Rparallel, MATLABparfor). - GPU (CUDA, PyTorch, TensorFlow) til massive matricemultiplikationer.
- Cloud-clusters via Spark eller Dask, hvis iterationsantallet går i millioner.
- Multi-core CPU (Python
- Husk at synkronisere tilfældighedskilderne (
seed) på tværs af worker-processer for reproducerbarhed.
4. Log mellemresultater for diagnosticering
- Gem hele stier eller aggregerede nøglepunkter (slutværdi, drawdown, tid-under-vand).
- Log periodisk (fx hver 5.000 iteration) så du kan:
- Overvåge konvergens af middel, VaR, elasticiteter m.m.
- Fange numeriske fejl, overflow eller urealistiske værdier tidligt.
- Inkludér metadata: timestamp, model-version, seed, hardware-profil.
5. Anvend stopkriterier, når estimaterne konvergerer
- Definér et toleranceniveau (
ε) for hver vigtig metrik, fx:- Gennemsnitligt afkast:
ε = ±0,05 %-point - 95 % VaR:
ε = ±0,03 %-point
- Gennemsnitligt afkast:
- Kør i batches på fx 10.000 stier ad gangen.
- Efter hvert batch opdateres det kumulative estimat og dets 95 % konfidensinterval.
- Stop når både:
- CI-bredden <
2·ε, og - den ikke har ændret sig væsentligt de seneste tre batches.
- CI-bredden <
Når disse kriterier er opfyldt, er simuleringen både statistisk robust og effektiv i ressourcer – klar til næste trin, hvor resultaterne skal analyseres og omsættes til investeringsbeslutninger.
Trin 8: Analysér og fortolk resultaterne
Nu ligger der et stort datasæt med N simulerede udfald – typisk flere tusinde stier. Det næste skridt er at koge den enorme informationsmængde ned til få, handlingsorienterede indsigter.
1. Beregn centrale nøgletal
- Deskriptiv statistik
Udregn middelværdi, median, standardafvigelse, skævhed og kurtosis på det samlede slut-afkast eller NPV. Disse tal giver et hurtigt overblik over fordelingens form. - Percentiler & konfidensintervaller
Percentilerne (fx 1 %, 5 %, 25 %, 50 %, 75 %, 95 %, 99 %) viser hvor i fordelingen de enkelte stier ender. For et 95 %-konfidensinterval finder du blot 2,5 %- og 97,5 %-percentilerne. - VaR og CVaR
- Value at Risk (VaRα): det maksimale forventede tab ved et givet konfidensniveau α (fx 5 %).
- Conditional VaR (CVaR eller Expected Shortfall): gennemsnitstabet i den “hale”, der ligger ud over VaRα. CVaR fanger halerisikoen bedre end VaR.
- Sandsynlighed for målopnåelse
Regn andelen af stier hvor f.eks. porteføljen overstiger et givet målafkast, dækningsgrad eller NPV > 0. Det er ofte mere intuitivt for beslutningstagere end abstrakte risikomål. - Worst-case (min/max)
Identificér de værste og bedste stier – eller de 1 % dårligste – for at illustrere ekstreme scenarier, stress-test og robusthed.
2. Visualiser fordelingen
Grafer hjælper hjernen med at forstå usikkerhed hurtigere end talkolonner.
- Histogram: viser frekvensen af slut-afkast; supplér evt. med Kernel Density Estimate for en glattere kurve.
- Fan-chart: læg alle stier oven på hinanden over tid og farv mellem percentiler (10/30/50/70/90 %). Det viser hvordan usikkerheden breder sig gennem tid.
- Box-plot pr. periode: hurtigt overblik over median og haler i et tidsforløb.
- Scenarietabel: kombiner flere KPI’er (f.eks. årligt afkast, drawdown, varighed) i en kompakt matrix.
| Median | 5 %-percentil | 95 %-percentil | VaR5 % | CVaR5 % | P(mål ≥ 6 % p.a.) | |
|---|---|---|---|---|---|---|
| Portefølje | 8,2 % | -4,7 % | 18,5 % | -5,0 % | -7,9 % | 71 % |
3. Fortolkning og kommunikation
- Sæt tallene i kontekst: Hvad betyder en 5 %-VaR på -5 %? Er virksomheden eller kunden komfortabel med den risiko?
- Brug det “sandsynlige” som udgangspunkt: Medianen eller 50 %-fanen beskriver det mest probable forløb.
- Fremhæv asymmetrier: Højre- eller venstrehale? Det påvirker valget af downside-beskyttelse.
- Tal i beslutningssprog: “Der er 71 % chance for at nå målet” er mere handlingsorienteret end “forventet afkast er 8,2 %”.
- Undgå falsk præcision: Afrund til hele eller halve procent-point og anfør usikkerhed (±).
Med en skarp analyse og klar visualisering bliver Monte Carlo-output ikke blot et hav af tal, men et solidt beslutningsgrundlag for alt fra aktivallokering til likviditetsstyring.
Trin 9: Sensitivitet, validering og implementering
Når du har kørt dine Monte Carlo-simulationer, stopper arbejdet ikke her. Resultaterne skal trykprøves, forklares og kobles til konkrete beslutninger, før de skaber reel værdi. Her er en struktureret fremgangsmåde:
1. Følsomhedsanalyse – Hvor robust er konklusionen?
- Tornado-diagrammer: Variér én inputvariabel ad gangen (±1 σ, worst/best case eller pct.-ændring) og plot indvirkningen på et centralt output (f.eks. porteføljens 5 %-VaR). De længste bjælker afslører de drivere, der virkelig batter.
- Elasticiteter: Beregn
∂Output/∂Input · (Input/Output). En elasticitet på 0,4 betyder, at en 10 % stigning i input øger output med 4 % – et hurtigt mål for “bang-for-the-buck”. - Multivariat scenarie-stress: Kombinér flere negative antagelser (fx faldende aktier, stigende renter, høj inflation) for at teste porteføljens survival-rate under simultane chok.
2. Validering – Rammer modellen virkeligheden?
- Backtest: Rul simulationen én måned (eller kvartal) ad gangen gennem historiske perioder og sammenlign forudsagte mod realiserede return- og risikotal. Brug MAPE, hit-rate på VaR-overskridelser og Kupiec-test.
- Sanity checks:
- Er middel og volatilitet for simuleret afkast på linje med inputparametrene?
- Ligger simulerede korrelationer i samme boldgade som den anvendte korrelationsmatrix?
- Forekommer negative saldi eller arbitrage-situationer, som ikke burde kunne eksistere? Hvis ja, lås constraints eller justér koden.
- Benchmark mod lukkede formler: Når en lukket-formel findes (Black-Scholes, Gordon Growth, analytisk VaR), sammenlignes simulationens estimat med teorien for at spotte numeriske fejl eller modelskævhed.
3. Dokumentation og governance
| Element | Hvad skal dokumenteres? | Hvor gemmes det? |
|---|---|---|
| Antagelser | Fordelinger, parametre, korrelationer, rebalancerings-logik | Model-wiki, version-kontrol |
| Beslutningsregler | Hvornår handles? Hvilket konfidensniveau bruges? Stop-loss? | Investeringspolitik (IPS) |
| Validerings-log | Dato, testtype, resultat, anbefaling | Audit-mappe |
Gennemsigtighed gør, at både interne og eksterne interessenter (risikokomité, revisor, Finanstilsyn) kan gentage og forstå processen.
4. Implementering i investeringsprocessen
- Beslutnings-dashboard: Integrér nøgletal (medianafkast, 95 %-VaR, sandsynlighed for at nå målet) i et live-dashboard, så porteføljeforvaltere ser dem sammen med markedsdata.
- Opdaterings-kadence: Fastlæg, hvornår modellen re-kalibreres (månedligt, ved regimeskift, ved nye aktivklasser).
- Automatiseret alarm: Sæt triggers, der udsender notifikation, hvis simuleret risikoniveau bryder foruddefinerede tærskler.
- Løbende læring: Brug forskellen mellem simuleret og faktisk performance til at forbedre parameterestimering og modelvalg (Bayesiansk opdatering eller machine-learning re-fit).
Når følsomheden er forstået, valideringen bestået, og governance er på plads, kan Monte Carlo-resultaterne med ro i maven anvendes som beslutningsgrundlag – og løbende justeres, så de forbliver relevante i en verden, der ændrer sig hurtigere end Excel nogensinde kan regne.