Cos'è una simulazione Monte Carlo?

Simulazioni Monte Carlo in Python

Izzy Weber

Curriculum Manager, DataCamp

Simulazioni e Monte Carlo

Simulazioni:
  • Esperimenti che imitano la realtà
  • Spesso usano programmi informatici

 

Simulazioni Monte Carlo:
  • Per stimare la probabilità di esiti influenzati da variabili casuali
  • Basate su campionamento casuale ripetuto per ottenere risultati numerici
  • Risultati stocastici perché il modello usa campionamento casuale
Simulazioni Monte Carlo in Python

Esempio di simulazione

Lanciare un dado a sei facce
  • Tom lancia un dado equo a sei facce $n$ volte
  • Dopo ogni lancio registra l'esito
  • Poi mette il dado in un sacchetto e ne sceglie uno nuovo per il lancio successivo

Domande

  1. Quanti dadi avrà Tom dopo $n$ lanci?
  2. Quale sarà la media degli esiti dopo $n$ lanci?

 

una mano che lancia un dado

Simulazioni Monte Carlo in Python

Simulare gli esiti di Tom

  • total_dice: numero di dadi nel sacchetto di Tom dopo $n$ lanci
  • mean_point_dice: media di tutti gli esiti dopo $n$ lanci
import random
import numpy as np

def roll_dice(n, seed): random.seed(seed) total_dice = 0 point_dice = []
for i in range(n): total_dice += 1 point_dice.append(random.randint(1, 6))
mean_point_dice = np.mean(point_dice)
return([total_dice, mean_point_dice])
Simulazioni Monte Carlo in Python

Risultati della simulazione

Simulazione uno:

seed=1231

print(roll_dice(10, seed))
print(roll_dice(100, seed))
print(roll_dice(1000, seed))
print(roll_dice(10000, seed))

Simulazione due:

seed=3124
print(roll_dice(10, seed))
print(roll_dice(100, seed))
print(roll_dice(1000, seed))
print(roll_dice(10000, seed))

Risultati:

[10, 3.6]

[100, 3.5]
[1000, 3.495]
[10000, 3.503]

Risultati:

[10, 3.8]
[100, 3.28]
[1000, 3.474]
[10000, 3.5508]
Simulazioni Monte Carlo in Python

Legge dei grandi numeri

All'aumentare del numero di variabili casuali identicamente distribuite, la loro media campionaria si avvicina alla media teorica.

Simulazione tre (seed = 3124):

print(roll_dice(100000, seed))
print(roll_dice(500000, seed))
print(roll_dice(1000000, seed))

Risultati:

[100000, 3.51344]
[500000, 3.50428]
[1000000, 3.501995]
Simulazioni Monte Carlo in Python

Passiamo alla pratica!

Simulazioni Monte Carlo in Python

Preparing Video For Download...