Lorsque la rivière qui longe le village XXX déborde, la probabilité que la source du village soit polluée est de 0.45 le lendemain. Dans le cas où cette rivière déborde, un employé municipal est chargé de prélever et d’analyser un échantillon d’eau de la source.
L’analyse d’un échantillon n’est pas totalement fiable :
Nous allons faire une simulation en Python pour compter sur un grand nombre d'expériences le nombre de fois ou le Maire se trompe. On considère les événements :
from random import *
proba_P=0.45 # Probabilité de P
proba_PA=0.81 # Probabilité de A sachant P
proba_PbAb=0.79 # Probabilité de Abarre sachant Pbarre
nbExp=100000
def simulPollution(proba):
""" On simule la pollution de la rivière au cas ou la rivière déborde
proba est la probabilité que la rivière soit polluée en cas de débordement. 0,45 dans l'énoncé
renvoie True si la rivière est polluée (événement de probabilité proba)
"""
return (random()<proba)
Test de la fonction simulPollution
count=0
for i in range(nbExp):
if simulPollution(proba_P):
count+=1
print(count/nbExp)
0.44974
def simulAnalyse(p1,p2,estPolluee):
""" On simule le résultat de l'analyse :
Si la rivière est polluée (variable estPolluee) on renvoie Vrai avec une probabilité p1
Si la rivière est non polluée on renvoie Faux avec une probabilité p2
"""
if estPolluee :
return (random()<p1)
else:
return (random()>p2)
Test de la fonction simulAnalyse
count=0
# On simule en cas de pollution de la riviere
for i in range(nbExp):
if simulAnalyse(proba_PA,proba_PbAb,True):
count+=1
print(count/nbExp)
count=0
# On simule en cas de non pollution de la riviere
for i in range(nbExp):
if not simulAnalyse(proba_PA,proba_PbAb,False):
count+=1
print(count/nbExp)
0.8093 0.79066
Les observations effectuées sont conformes aux probabilités
count=0 # Nombre de fois ou le maire se trompe
countA=0 # Nombre de fois ou l'analyse révèle un epollution
for i in range(nbExp):
# On simule le débordement de la rivière
pollution=simulPollution(proba_P)
# On simule l'analyse de l'échantillon
analyse=simulAnalyse(proba_PA,proba_PbAb,pollution)
if analyse : # si l'eau contenue dans l'échantillon est déclarée polluée
countA+=1
if analyse != pollution : # le maire s'est-il trompé
count+=1 # on compte le nb de fois que le maire se trompe
# Affichage du résultat de la simulation
print("Fréquence Pbarre inter A = ", count/nbExp) # L'univers est l'ensemble des simulations. C'est Inter
print("Fréquence Pbarre sachant A = ",count/countA) # L'univers est celui des analyse positives. C'est Sachant que A
Fréquence Pbarre inter A = 0.11646 Fréquence Pbarre sachant A = 0.24205516180658035
Ces résultats sont conformes à l'étude théorique
On suppose que pour diminuer le risque de se tromper, l’employé municipal est chargé de prélever 3 échantillons d’eau de la source le lendemain et d’analyser séparément chaque échantillon.
Si l’eau contenue dans 2 échantillons sur les 3 échantillons prélevés est déclarée polluée par l’analyse effectuée, quelle est alors la probabilité que le maire se trompe en déclarant que l’eau est polluée ?
Les fonctions de simulations fabriquées pour la question précédente fonctionnent toujours. Il faut juste refaire la simulation de l'expérience en tenant compte des 3 analyses
count=0 # Nombre de fois ou le maire se trompe
countA=0 # Nombre de fois ou l'analyse révèle un epollution
for i in range(nbExp):
# On simule le débordement de la rivière
pollution=simulPollution(proba_P)
# On simule l'analyse de l'échantillon
analyses=[]
for j in range(3): # on simule 3 analyses
analyses.append(simulAnalyse(proba_PA,proba_PbAb,pollution))
nbAnalysePositives=analyses.count(True)
if nbAnalysePositives==2 : # si l'eau contenue dans exactement 2 échantillons est déclarée polluée
countA+=1
if not pollution : # le maire s'est-il trompé, l'eau n'est pas polluée
count+=1 # on compte le nb de fois que le maire se trompe
# Affichage du résultat de la simulation
print("Fréquence Pbarre inter A = ", count/nbExp) # L'univers est l'ensemble des simulations. C'est Inter
print("Fréquence Pbarre sachant A = ",count/countA) # L'univers est celui des analyse positives. C'est Sachant que A
Fréquence Pbarre inter A = 0.05728 Fréquence Pbarre sachant A = 0.2526687251874724
On trouve ici une proibabilité d'environ 25%
On suppose que pour diminuer le risque de se tromper, l’employé municipal est chargé de prélever 3 échantillons d’eau de la source le lendemain et d’analyser séparément chaque échantillon.
Si l’eau contenue dans *au moins * 2 échantillons sur les 3 échantillons prélevés est déclarée polluée par l’analyse effectuée, quelle est alors la probabilité que le maire se trompe en déclarant que l’eau est polluée ?
count=0 # Nombre de fois ou le maire se trompe
countA=0 # Nombre de fois ou l'analyse révèle un epollution
for i in range(nbExp):
# On simule le débordement de la rivière
pollution=simulPollution(proba_P)
# On simule l'analyse de l'échantillon
analyses=[]
for j in range(3): # on simule 3 analyses
analyses.append(simulAnalyse(proba_PA,proba_PbAb,pollution))
nbAnalysePositives=analyses.count(True)
if nbAnalysePositives>=2 : # si l'eau contenue dans exactement 2 échantillons est déclarée polluée
countA+=1
if not pollution : # le maire s'est-il trompé, l'eau n'est pas polluée
count+=1 # on compte le nb de fois que le maire se trompe
# Affichage du résultat de la simulation
print("Fréquence Pbarre inter A = ", count/nbExp) # L'univers est l'ensemble des simulations. C'est Inter
print("Fréquence Pbarre sachant A = ",count/countA) # L'univers est celui des analyse positives. C'est Sachant que A
Fréquence Pbarre inter A = 0.06259 Fréquence Pbarre sachant A = 0.13299477285283243
On trouve ici une probabilité d'environ 13% ce qui est plus réaliste avec l'intuition que 3 tests doivent mener à moins d'erreur qu'un seul...