3  Probabilità

Esercizio 3.1 Supponiamo di dover formare una commissione di 5 psicologi su un gruppo di 20 persone (10 psicologi clinici e 10 psicologi del lavoro). Qual è la probabilità che almeno 2 psicologi clinici siano nella commissione? Risolvi il problema usando una simulazione Monte Carlo.

Soluzione. Per calcolare questa probabilità in maniera analitica, utilizziamo la seguente uguaglianza:

\[ P(\text{almeno 2 psicologi clinici}) = 1 - P(\text{nessun psicologo clinico}) - P(\text{1 psicologo clinico}). \]

Il numero totale di modi per selezionare 5 persone dal gruppo di 20 è dato da:

\[ \binom{20}{5} = \frac{20!}{5!(15!)} = 15,504. \]

Il numero di modi per avere nessun psicologo clinico nella commissione (ovvero, selezionare solo psicologi del lavoro) è:

\[ \binom{10}{0} \times \binom{10}{5} = 1 \times 252 = 252. \]

Quindi, la probabilità di avere nessun psicologo clinico è:

\[ P(\text{nessun psicologo clinico}) = \frac{252}{15,504} \approx 0.016. \]

Il numero di modi per avere esattamente 1 psicologo clinico nella commissione è:

\[ \binom{10}{1} \times \binom{10}{4} = 10 \times 210 = 2,100. \]

Quindi, la probabilità di avere esattamente 1 psicologo clinico è:

\[ P(\text{1 psicologo clinico}) = \frac{2,100}{15,504} \approx 0.135. \]

La probabilità di avere almeno 2 psicologi clinici nella commissione è quindi:

\[ \begin{align} P(\text{almeno 2 psicologi clinici}) &= 1 - P(\text{nessun psicologo clinico}) - P(\text{1 psicologo clinico}) \notag\\ &= 1 - 0.016 - 0.135 \notag\\ &= 0.848.\notag \end{align} \]

Quindi, la probabilità che almeno 2 psicologi clinici siano nella commissione è circa 0.848.

import numpy as np
import scipy.stats as stats
import math


# Funzione per calcolare le combinazioni
def nCk(n, k):
    return math.factorial(n) // (math.factorial(k) * math.factorial(n - k))


# Calcolo delle probabilità per il problema della commissione
total_ways = nCk(20, 5)
no_clinical = nCk(10, 0) * nCk(10, 5)
one_clinical = nCk(10, 1) * nCk(10, 4)

p_no_clinical = no_clinical / total_ways
p_one_clinical = one_clinical / total_ways

p_at_least_two_clinical = 1 - p_no_clinical - p_one_clinical

print(f"Probabilità di almeno 2 psicologi clinici: {p_at_least_two_clinical:.3f}")
Probabilità di almeno 2 psicologi clinici: 0.848

In maniera più intuitiva, possiamo risolvere il problema con una simulazione Monte Carlo.

import random

# Numero di simulazioni
simulations = 1000000

# Numero di successi (almeno 2 psicologi clinici nella commissione)
success_count = 0

# Creiamo una lista che rappresenta il gruppo di 20 persone
# 1 rappresenta un psicologo clinico, 0 rappresenta un psicologo del lavoro
group = [1] * 10 + [0] * 10

# Simulazione Monte Carlo
for _ in range(simulations):
    # Estrai casualmente 5 persone dal gruppo
    committee = random.sample(group, 5)

    # Conta quanti psicologi clinici ci sono nella commissione
    num_clinical_psychologists = sum(committee)

    # Verifica se ci sono almeno 2 psicologi clinici
    if num_clinical_psychologists >= 2:
        success_count += 1

# Calcola la probabilità
probability = success_count / simulations

# Mostra il risultato
print(
    f"La probabilità che almeno 2 psicologi clinici siano nella commissione è: {probability:.4f}"
)
La probabilità che almeno 2 psicologi clinici siano nella commissione è: 0.8472