{"cells":[{"metadata":{},"cell_type":"markdown","source":"![En tête general](https://raw.githubusercontent.com/PythonLycee/PyLyc/master/img/En_tete_general.png)\n\n\n© Copyright Franck CHEVRIER 2019-2022 https://www.python-lycee.com.
\nLes activités partagées sur Capytale sont sous licence Creative Commons.\n\n Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.\n"},{"metadata":{},"cell_type":"markdown","source":"# Inférence bayésienne (corrigé)\n"},{"metadata":{},"cell_type":"markdown","source":"### Sommaire \n\n1. De cause à effet...
\n2. ...et de l'effet à la cause.
\n"},{"metadata":{},"cell_type":"markdown","source":"## 1. De cause à effet..."},{"metadata":{},"cell_type":"markdown","source":"
\n \n
\nOn dispose de deux urnes, numérotées 1 et 2 :
\n\nL'expérience étudiée dans cette activité consiste à lancer une pièce de monnaie équilibrée, puis :
\n\n\nLorsqu'on souhaite répéter l'expérience, on remet la boule tirée précédemment dans l'urne avant chaque nouveau tirage.
\nOn donnera les résultats sous la forme de fractions irréductibles.
"},{"metadata":{},"cell_type":"markdown","source":"__1.1. On fournit la fonction Python Piece ci-dessous, permettant de simuler le lancer d'une pièce de monnaie équilibrée.__
\n$\\quad\\;\\;$__Tester cette fonction et expliquer brièvement son fonctionnement.__
\n$\\quad\\;\\;$On conviendra que la fonction renvoie True si on obtient \"Pile\" et False sinon."},{"metadata":{"trusted":false},"cell_type":"code","source":"# Exécuter cette cellule pour tester la fonction Piece\n\nfrom random import*\n\ndef Piece():\n \"fonction qui simule le lancer d'une pièce équilibrée\"\n return random()<0.5\n\nPiece()","execution_count":1,"outputs":[{"data":{},"execution_count":1,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"__1.2. a. On tire une boule de l'urne n°1. Quelle est la probabilité qu'elle soit rouge ?__
\n
\n$\\quad\\quad p_{U_1}(R)=\\frac{7}{10}=0,7$\n

\n$\\quad\\;\\;$__b. Écrire une fonction Python urne_1 permettant de simuler le tirage aléatoire d'une boule de l'urne n°1.__
\n$\\quad\\quad\\;$__La fonction renverra True si la boule est rouge et False sinon.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Écrire ici la fonction urne_1\ndef urne_1():\n \"fonction qui simule le tirage d'une boule dans l'urne n°1\"\n return random()<0.7","execution_count":2,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# Exécuter cette cellule pour tester la fonction urne_1\nurne_1()","execution_count":3,"outputs":[{"data":{},"execution_count":3,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"$\\quad\\;\\;$__c. On tire une boule de l'urne n°2. Quelle est la probabilité qu'elle soit rouge?__
\n
\n$\\quad\\quad p_{U_2}(R)=\\frac{2}{5}=0,4$\n

\n$\\quad\\;\\;$__d. Écrire une fonction Python urne_2 permettant de simuler le tirage aléatoire d'une boule de l'urne n°2.__
\n$\\quad\\quad\\;\\;$On utilisera la même convention pour les couleurs que dans la fonction urne_1."},{"metadata":{"trusted":false},"cell_type":"code","source":"# Écrire ici la fonction urne_2\ndef urne_2():\n \"fonction qui simule le tirage d'une boule dans l'urne n°2\"\n return random()<0.4","execution_count":4,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# Exécuter cette cellule pour tester la fonction urne_2\nurne_2()","execution_count":5,"outputs":[{"data":{},"execution_count":5,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"__1.3. a. Écrire une fonction Python experience qui simule le protocole de l'expérience :__
\n$\\quad\\quad\\;$__Lancer d'une pièce de monnaie puis tirage aléatoire d'une boule dans l'urne correspondante.__
\n$\\quad\\quad\\;$__La fonction renverra le booléen True ou False correspondant à la couleur de la boule obtenue.__
\n$\\quad\\quad\\;$On utilisera la même convention pour les couleurs que dans les fonctions urne_1 et urne_2.
\n$\\quad\\;$__b. Tester cette fonction.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Écrire ici la fonction experience\ndef experience():\n \"fonction qui simule le protocole de l'expérience\"\n if Piece():\n return urne_1()\n else:\n return urne_2()\n \n\"\"\"\n#Autre version\ndef experience():\n return urne_1() if Piece() else urne_2()\n\"\"\"\n","execution_count":6,"outputs":[{"data":{},"execution_count":6,"metadata":{},"output_type":"execute_result"}]},{"metadata":{"trusted":false},"cell_type":"code","source":"# Tester la fonction ici\nexperience()","execution_count":7,"outputs":[{"data":{},"execution_count":7,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"__1.5. a. Écrire une fonction Python repetition qui simule successivement 100 fois l'expérience et renvoie le nombre de boules rouges obtenues.__
\n$\\quad\\;\\;$__b. Tester cette fonction.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Écrire ici la fonction\ndef repetition():\n \"fonction qui compte les boules rouges lors de 1000 simulations de l'expérience\"\n S=0\n for k in range(100):\n if experience(): S = S+1\n return S\n ","execution_count":8,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# Tester la fonction ici\nrepetition()","execution_count":9,"outputs":[{"data":{},"execution_count":9,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"__1.6. a. Adapter la fonction repetition pour qu'elle reçoive n en argument et renvoie la fréquence de boules rouges obtenues lors de $n$ expériences.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Écrire ici la fonction modifiée\ndef repetition(n):\n \"fonction qui renvoie la fréquence de boules rouges lors de n simulations de l'expérience\"\n S=0\n for k in range(n):\n if experience(): S = S+1\n return S/n\n","execution_count":10,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"$\\quad$__b. Tester cette fonction pour obtenir les fréquences de boules rouges pour $1000$ puis $10000$ expériences successives.__"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Tester la fonction ici\nrepetition(1000)","execution_count":11,"outputs":[{"data":{},"execution_count":11,"metadata":{},"output_type":"execute_result"}]},{"metadata":{"trusted":false},"cell_type":"code","source":"# Tester la fonction ici\nrepetition(10000)","execution_count":12,"outputs":[{"data":{},"execution_count":12,"metadata":{},"output_type":"execute_result"}]},{"metadata":{},"cell_type":"markdown","source":"__1.7. a. Réaliser un arbre de probabilités pour modéliser la situation étudiée.__
\n$\\quad\\;\\;$On pourra noter respectivement $U_1$ et $R$ les événements \"On a tiré la boule de l'urne n°1\" et \"La boule tirée est Rouge\".
\n$\\quad\\;\\;$__b. Calculer la probabilité que la boule obtenue soit rouge. Comparer avec les fréquences obtenues en 1.7.b.__\n\n
\n\n$\\quad\\quad$À l'aide d'un arbre de probabilités, on peut établir que :
\n$\\displaystyle \\quad\\quad p(R)=p(U_1\\cap R)+p(U_2\\cap R)=p(U_1)p_{U_1}(R)+p(U_2)p_{U_2}(R)=\\frac{1}{2}\\times\\frac{7}{10}+\\frac{1}{2}\\times\\frac{2}{5}=\\frac{11}{20}=0,55$
\n

\n"},{"metadata":{},"cell_type":"markdown","source":"## 2. ... et de l'effet à la cause.\n\nDans cette partie, on va évaluer la probabilité d'une cause connaissant le résultat de l'expérience.
\nAinsi, sachant qu'une boule rouge a été tirée, on souhaite évaluer la probabilité que cette boule ait été tirée de l'urne n°1, c'est à dire la probabilité qu'on ait obtenu \"Pile\" lors du lancer de la pièce de monnaie."},{"metadata":{},"cell_type":"markdown","source":"__2.1. Démontrer le théorème suivant :__

\n\n
\n Théorème de Bayes:

\n Étant donné $A$ et $B$ deux événements de probabilités non nulles, on a :

\n $$\\displaystyle p_B(A)=\\frac{p_A(B)\\;p(A)}{p(B)}=\\frac{p_A(B)\\;p(A)}{p_A(B)\\;p(A)+p_{\\bar{A}}(B)\\;p(\\bar{A})}$$\n
\n\n

\n\n$$\\displaystyle p_B(A)=\\frac{p(A\\cap B)}{p(B)}=\\frac{p_A(B)\\;p(A)}{p(B)}=\\frac{p_A(B)\\;p(A)}{p(A\\cap B)+p(A\\cap \\bar{B})}=\\frac{p_A(B)\\;p(A)}{p_A(B)\\;p(A)+p_{\\bar{A}}(B)\\;p(\\bar{A})}$$\n
\n"},{"metadata":{},"cell_type":"markdown","source":"__2.2. À l'aide du théorème de Bayes, déterminer la probabilité que la boule ait été tirée de l'urne n°1 sachant qu'elle est rouge.__\n

\n\n$$\\displaystyle p_R(U_1)=\\frac{p_{U_1}(R)\\;p(U_1)}{p(R)}=\\frac{\\frac{7}{10} \\times \\frac{1}{2} }{\\frac{11}{20}}=\\frac{7}{11}$$\n
"},{"metadata":{},"cell_type":"markdown","source":"__2.3 On souhaite maintenant vérifier expérimentalement les résultats précédents. La fonction Python Synthese donnée ci-dessous permet d'effectuer une répétition de l'expérience et renvoie un tableau consignant une synthèse des résultats obtenus.__

\n\n$\\quad$__a. Exécuter cette cellule.__
\n$\\quad\\;\\;\\;$Attention, l'exécution de cette cellule nécessite que les fonctions Piece, urne_1 et urne_2 aient été définies précédemment.
"},{"metadata":{"trusted":false},"cell_type":"code","source":"import IPython ; from IPython.display import display, HTML \n\ndef Synthese(n=500,f=[urne_2,urne_1]): \n \"\"\"\n Fonction qui génère une liste de n couples contenant chacun :\n - une information Pile/Face (True/False)\n - une information Rouge/Vert (True/False)\n \"\"\"\n #f est la liste des fonctions de simulations de tirages dans les urnes\n res=[] # stockage des résultats (True pour urne n°1, False pour urne n°2)\n \n for k in range(n): \n Choix=Piece() # lancer d'une pièce\n res.append((Choix,(f[Choix]()))) # ajout du couple pièce/boule dans la liste des résultats\n \n return res\n \n \ndef Genere_html(res):\n \"\"\"\n Fonction qui génère un affichage de la liste des résultats (format html)\n \"\"\"\n \n #code html pour la pièce (Face et Pile)\n Piece_img=\"\",\"\"\n \n #code html pour les boules colorées (Rouges et vertes)\n boule_coloree_img = \"\",\"\"\n \n #calculs et génération des affichages (pièces et boules):\n pieces=\"\"\n contenu_urne={True:\"\",False:\"\"}\n nb_faces=0\n nb_rouges=[0,0]\n for couple in res:\n piece,couleur=couple\n pieces+=Piece_img[piece]\n contenu_urne[piece]+=boule_coloree_img[couleur]\n nb_rouges[piece]+=couleur\n nb_faces+=piece\n nb_piles=len(res)-nb_faces\n \n #en-tête du rendu html (avec balise de style) \n html=\"\"\n html+=\"\"\" \n \n \n \n \n \"\"\"\n #corps du rendu html\n html+=\"\"\"\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Lancers de pièces

\"\"\"+pieces+\"

\"+str(nb_piles)+\" Piles et \"+str(nb_faces)+\"\"\" Faces

Urne n°1

Urne n°2
Tirages des boules

\"\"\"+contenu_urne[True]+\"

\"+str(nb_rouges[True])+\" boules rouges et \"+str(nb_piles-nb_rouges[True])+\"\"\" boules vertes

\"\"\"+contenu_urne[False]+\"

\"+str(nb_rouges[False])+\" boules rouges et \"+str(nb_faces-nb_rouges[False])+\"\"\" boules vertes
Total

\"\"\"+str(sum(nb_rouges))+\" boules rouges et \"+str(len(res)-sum(nb_rouges))+\"\"\" boules vertes
\n \n \"\"\"\n html+=\"\"\n return html\n \ndisplay(HTML(Genere_html(Synthese())))","execution_count":13,"outputs":[{"data":{},"metadata":{},"output_type":"display_data"}]},{"metadata":{},"cell_type":"markdown","source":"$\\quad$__b. Calculer, parmi les boules tirées de l'urne n°1, la fréquence de celles qui sont rouges. Comparer avec la réponse à la question 1.2.a.__
\n$\\quad$__c. Calculer la fréquence de boules rouges parmi toutes les boules tirées. Comparer avec la réponse à la question 1.7.b.__
\n$\\quad$__d. Calculer, parmi les boules rouges tirées, la fréquence de celles qui ont été tirées de l'urne n°1. Comparer avec la réponse à la question 2.2.__
"},{"metadata":{},"cell_type":"markdown","source":"![Thomas_Bayes](https://raw.githubusercontent.com/PythonLycee/PyLyc/master/img/Thomas_Bayes.png)\n\n
Thomas Bayes (1702-1761)
"},{"metadata":{},"cell_type":"markdown","source":"© Copyright Franck CHEVRIER 2019-2022 https://www.python-lycee.com.
\nLes activités partagées sur Capytale sont sous licence Creative Commons.\n

\nDernière modification de l'activité : Juillet 2022"}],"metadata":{"celltoolbar":"Raw Cell Format","kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":2}