{
  "chapter": {
    "id": "experimentations",
    "level": "premiere-specialite",
    "theme": "Probabilités et statistiques",
    "title": "Expérimentations et simulation",
    "description": "Simulation d'une variable aléatoire avec Python, échantillons :\nmoyenne d'un échantillon et espérance de la variable, effet de\nla taille de l'échantillon, ordre de grandeur des écarts en\n$\\dfrac{2\\sigma}{\\sqrt{n}}$, lecture et écriture de fonctions\nPython (moyenne, fréquence, répétition d'expériences).",
    "prerequisites": [],
    "references": []
  },
  "questions": [
    {
      "id": "q01",
      "difficulty": 1,
      "skills": [
        "python",
        "simulation"
      ],
      "title": "Simuler un dé en Python",
      "statement": "Quelle instruction Python simule le lancer d'un dé équilibré\nà six faces (après `from random import randint`) ?",
      "options": [
        {
          "text": "`randint(1, 6)`",
          "correct": true,
          "feedback": "Bonne réponse : `randint(a, b)` renvoie un entier au\nhasard entre `a` et `b` **inclus** : ici un entier de $1$\nà $6$, chacun avec la même probabilité."
        },
        {
          "text": "`randint(0, 6)`",
          "correct": false,
          "feedback": "Erreur : cette instruction peut renvoyer $0$, qui n'est\npas une face du dé (sept valeurs au lieu de six)."
        },
        {
          "text": "`randint(1, 5)`",
          "correct": false,
          "feedback": "Erreur : la borne supérieure de `randint` est\n**incluse** : `randint(1, 5)` ne produirait jamais de\n$6$."
        },
        {
          "text": "`6 * randint(0, 1)`",
          "correct": false,
          "feedback": "Erreur : cette expression ne renvoie que $0$ ou $6$ :\nrien à voir avec un dé."
        }
      ],
      "explanation": "`randint(a, b)` : entier uniforme sur $\\{a, \\ldots, b\\}$,\nbornes incluses. Un dé : `randint(1, 6)`. (Autre outil :\n`random()`, réel uniforme dans $[0\\,;\\,1[$.)"
    },
    {
      "id": "q02",
      "difficulty": 2,
      "skills": [
        "python",
        "bernoulli"
      ],
      "title": "Simuler une épreuve de Bernoulli",
      "statement": "Après `from random import random`, quelle expression Python\nvaut `True` avec la probabilité $0{,}3$ (simulation d'un\nsuccès de probabilité $0{,}3$) ?",
      "options": [
        {
          "text": "`random() < 0.3`",
          "correct": true,
          "feedback": "Bonne réponse : `random()` est uniforme sur $[0\\,;\\,1[$ :\nla probabilité qu'il tombe sous $0{,}3$ vaut exactement\n$0{,}3$."
        },
        {
          "text": "`random() > 0.3`",
          "correct": false,
          "feedback": "Erreur de sens : cette condition a pour probabilité\n$1 - 0{,}3 = 0{,}7$ : elle simule l'**échec**."
        },
        {
          "text": "`random() == 0.3`",
          "correct": false,
          "feedback": "Erreur : l'égalité exacte avec un réel tiré au hasard a\nune probabilité (quasi) nulle : ce test ne réussit\npratiquement jamais."
        },
        {
          "text": "`randint(0, 3)`",
          "correct": false,
          "feedback": "Erreur : cette instruction renvoie un entier entre $0$ et\n$3$, pas un booléen de probabilité $0{,}3$."
        }
      ],
      "explanation": "Simulation d'un succès de probabilité $p$ :\n`random() < p`. C'est la brique de base de toutes les\nsimulations de variables aléatoires."
    },
    {
      "id": "q03",
      "difficulty": 2,
      "skills": [
        "echantillon",
        "distinction"
      ],
      "title": "Moyenne d'échantillon et espérance",
      "statement": "On simule un échantillon de taille $n$ d'une variable\naléatoire $X$ et on calcule la moyenne $m$ des valeurs\nobtenues. Quelle affirmation est correcte ?",
      "options": [
        {
          "text": "$m$ varie d'un échantillon à l'autre, alors que $E(X)$\nest un nombre fixe du modèle",
          "correct": true,
          "feedback": "Bonne réponse : la moyenne observée est **aléatoire**\n(chaque simulation en donne une différente) ; l'espérance\nest une constante théorique dont $m$ s'approche."
        },
        {
          "text": "$m = E(X)$ exactement, dès que $n \\geq 30$",
          "correct": false,
          "feedback": "Erreur : aucune taille finie ne garantit l'égalité\nexacte : $m$ fluctue autour de $E(X)$, de moins en moins\nquand $n$ grandit."
        },
        {
          "text": "$E(X)$ change à chaque simulation",
          "correct": false,
          "feedback": "Erreur : l'espérance est calculée sur la **loi** (les\nprobabilités du modèle), pas sur les données simulées :\nelle ne bouge pas."
        },
        {
          "text": "$m$ et $E(X)$ n'ont aucun lien",
          "correct": false,
          "feedback": "Erreur : tout le chapitre repose sur leur lien : $m$\n**estime** $E(X)$, d'autant mieux que l'échantillon est\ngrand."
        }
      ],
      "explanation": "Distinction clé du programme : moyenne d'échantillon\n(aléatoire, observée) contre espérance (fixe, théorique). La\nsimulation fait percevoir la convergence de l'une vers\nl'autre."
    },
    {
      "id": "q04",
      "difficulty": 2,
      "skills": [
        "python",
        "lecture-code"
      ],
      "title": "Une fonction moyenne en Python",
      "statement": "Quelle fonction Python renvoie correctement la moyenne d'une\nliste non vide `L` de nombres ?",
      "options": [
        {
          "text": "```\ndef moyenne(L):\n    return sum(L) / len(L)\n```",
          "correct": true,
          "feedback": "Bonne réponse : `sum(L)` additionne les éléments et\n`len(L)` en donne le nombre : somme divisée par\nl'effectif."
        },
        {
          "text": "```\ndef moyenne(L):\n    return sum(L) / n\n```",
          "correct": false,
          "feedback": "Erreur : la variable `n` n'est définie nulle part dans la\nfonction : erreur d'exécution. L'effectif s'obtient par\n`len(L)`."
        },
        {
          "text": "```\ndef moyenne(L):\n    return len(L) / sum(L)\n```",
          "correct": false,
          "feedback": "Fraction renversée : ceci calcule l'inverse de la\nmoyenne. La somme va au numérateur."
        },
        {
          "text": "```\ndef moyenne(L):\n    return sum(L) - len(L)\n```",
          "correct": false,
          "feedback": "Erreur : une moyenne se calcule par **division**, pas par\nsoustraction."
        }
      ],
      "explanation": "Fonction attendue au programme : `sum(L) / len(L)`. La lire,\nl'écrire et la modifier (moyenne d'une partie, fréquence…)\nsont des capacités attendues."
    },
    {
      "id": "q05",
      "difficulty": 2,
      "skills": [
        "echantillon",
        "taille"
      ],
      "title": "Effet de la taille de l'échantillon",
      "statement": "On compare des moyennes d'échantillons de taille $n = 100$\npuis $n = 10\\,000$ d'une même variable aléatoire. Qu'observe-t-on\ntypiquement ?",
      "options": [
        {
          "text": "Les moyennes des grands échantillons sont plus resserrées\nautour de l'espérance",
          "correct": true,
          "feedback": "Bonne réponse : plus l'échantillon est grand, plus la\nmoyenne observée est stable et proche de $E(X)$ : les\nfluctuations se diluent."
        },
        {
          "text": "Les moyennes fluctuent autant, quelle que soit la taille",
          "correct": false,
          "feedback": "Erreur : la simulation montre le contraire : l'écart\ntypique décroît (en $\\frac{1}{\\sqrt{n}}$)."
        },
        {
          "text": "Les grands échantillons donnent des moyennes plus grandes",
          "correct": false,
          "feedback": "Erreur : la taille réduit la **dispersion** des moyennes,\nelle ne déplace pas leur centre (toujours $E(X)$)."
        },
        {
          "text": "Au-delà de $n = 1000$, la moyenne devient exactement\nl'espérance",
          "correct": false,
          "feedback": "Erreur : aucun seuil ne supprime l'aléa ; il s'atténue\nprogressivement, sans jamais disparaître."
        }
      ],
      "explanation": "Constat expérimental central : la distance entre moyenne\nd'échantillon et espérance a tendance à diminuer quand $n$\naugmente, à l'échelle $\\frac{\\sigma}{\\sqrt{n}}$."
    },
    {
      "id": "q06",
      "difficulty": 3,
      "skills": [
        "ecart-type-moyenne"
      ],
      "title": "L'échelle $\\dfrac{2\\sigma}{\\sqrt{n}}$",
      "statement": "Pour diviser par $10$ l'ordre de grandeur\n$\\dfrac{2\\sigma}{\\sqrt{n}}$ des écarts entre moyenne\nd'échantillon et espérance, par combien faut-il multiplier la\ntaille $n$ de l'échantillon ?",
      "options": [
        {
          "text": "Par $100$",
          "correct": true,
          "feedback": "Bonne réponse : l'écart varie en $\\dfrac{1}{\\sqrt{n}}$ :\ndiviser par $10$ exige $\\sqrt{n}$ multiplié par $10$,\ndonc $n$ par $100$."
        },
        {
          "text": "Par $10$",
          "correct": false,
          "feedback": "Erreur : $n \\times 10$ ne divise l'écart que par\n$\\sqrt{10} \\approx 3{,}2$, à cause de la racine carrée."
        },
        {
          "text": "Par $\\sqrt{10}$",
          "correct": false,
          "feedback": "Erreur : cela ne diviserait l'écart que par\n$10^{1/4} \\approx 1{,}8$. La racine impose de\n**quadrupler l'effort** pour chaque facteur $2$… et\n$\\times 100$ pour un facteur $10$."
        },
        {
          "text": "Par $1000$",
          "correct": false,
          "feedback": "Trop : $\\sqrt{1000} \\approx 31{,}6$ diviserait l'écart\npar plus de $30$. Le bon facteur est $10^2 = 100$."
        }
      ],
      "explanation": "La précision d'une moyenne d'échantillon évolue en\n$\\frac{1}{\\sqrt{n}}$ : gagner un facteur $10$ de précision\ncoûte un facteur $100$ de données. Racine carrée : le coût de\nla précision statistique."
    },
    {
      "id": "q07",
      "difficulty": 2,
      "skills": [
        "python",
        "repetition"
      ],
      "title": "Répéter une expérience",
      "statement": "Que fait l'instruction Python `for _ in range(1000):` placée\nau-dessus d'un bloc de code ?",
      "options": [
        {
          "text": "Elle exécute le bloc $1000$ fois",
          "correct": true,
          "feedback": "Bonne réponse : `range(1000)` fournit $1000$ tours de\nboucle ; le nom `_` signale qu'on n'utilise pas le\ncompteur. C'est le squelette de toute simulation répétée."
        },
        {
          "text": "Elle exécute le bloc jusqu'à obtenir $1000$",
          "correct": false,
          "feedback": "Erreur : aucune condition d'arrêt sur une valeur : le\nnombre de répétitions est **fixé** à $1000$ (ce serait le\nrôle d'un `while`)."
        },
        {
          "text": "Elle crée une liste de $1000$ zéros",
          "correct": false,
          "feedback": "Erreur : `for` répète du code ; la création de liste\nutiliserait par exemple `[0] * 1000`."
        },
        {
          "text": "Elle exécute le bloc une fois avec $n = 1000$",
          "correct": false,
          "feedback": "Erreur : la boucle exécute le bloc **mille fois**, une\npar tour."
        }
      ],
      "explanation": "`for _ in range(N):` répète $N$ fois : combinée à un\ncompteur de succès ou à une liste de résultats, elle simule\n$N$ expériences pour estimer fréquences et moyennes."
    },
    {
      "id": "q08",
      "difficulty": 2,
      "skills": [
        "estimation",
        "monte-carlo"
      ],
      "title": "Estimer une probabilité par simulation",
      "statement": "Pourquoi simuler $10\\,000$ fois une expérience pour estimer\nla probabilité d'un événement ?",
      "options": [
        {
          "text": "Parce que la fréquence observée sur un grand nombre de\nrépétitions approche la probabilité cherchée",
          "correct": true,
          "feedback": "Bonne réponse : c'est la loi des grands nombres (version\nvulgarisée) : la fréquence estime la probabilité, utile\nquand le calcul exact est hors de portée (méthode de\nMonte-Carlo)."
        },
        {
          "text": "Parce que la fréquence observée est exactement égale à la\nprobabilité",
          "correct": false,
          "feedback": "Erreur : la fréquence reste une **approximation**\nfluctuante ; elle se resserre autour de la probabilité\nsans la donner exactement."
        },
        {
          "text": "Parce qu'une simulation remplace toute démonstration",
          "correct": false,
          "feedback": "Erreur : la simulation **conjecture** et illustre ; elle\nne démontre pas. Les deux registres se complètent."
        },
        {
          "text": "Parce que l'ordinateur produit du vrai hasard parfait",
          "correct": false,
          "feedback": "Erreur : les générateurs sont pseudo-aléatoires ;\nl'argument valable est statistique (grand nombre de\nrépétitions), pas la perfection du hasard machine."
        }
      ],
      "explanation": "Estimation par simulation : fréquence sur $N$ répétitions\n$\\approx$ probabilité, avec une précision qui croît avec $N$.\nExemple du programme : estimer $\\pi$ ou une aire par\nMonte-Carlo."
    },
    {
      "id": "q09",
      "difficulty": 3,
      "skills": [
        "proportion-2sigma"
      ],
      "title": "La proportion des cas dans $\\left[\\mu - \\frac{2\\sigma}{\\sqrt{n}}\\,;\\,\\mu + \\frac{2\\sigma}{\\sqrt{n}}\\right]$",
      "statement": "On simule $N$ échantillons de taille $n$ d'une variable\nd'espérance $\\mu$ et d'écart-type $\\sigma$, et on calcule\nchaque moyenne $m$. Quelle proportion des cas vérifie\ntypiquement $|m - \\mu| \\leq \\dfrac{2\\sigma}{\\sqrt{n}}$ ?",
      "options": [
        {
          "text": "Environ $95\\ \\%$",
          "correct": true,
          "feedback": "Bonne réponse : c'est le constat expérimental attendu au\nprogramme : l'écart dépasse rarement deux fois\n$\\dfrac{\\sigma}{\\sqrt{n}}$ (ordre de grandeur, précisé en\nterminale)."
        },
        {
          "text": "Environ $50\\ \\%$",
          "correct": false,
          "feedback": "Erreur : la moitié des cas correspondrait à un intervalle\nbien plus étroit (environ $0{,}7\\sigma/\\sqrt{n}$ de\nrayon). À $2\\sigma/\\sqrt{n}$ : autour de $95\\ \\%$."
        },
        {
          "text": "Exactement $100\\ \\%$",
          "correct": false,
          "feedback": "Erreur : quelques échantillons « malchanceux » sortent de\nl'intervalle (environ $5\\ \\%$) : l'aléa ne se laisse pas\nenfermer totalement."
        },
        {
          "text": "Environ $5\\ \\%$",
          "correct": false,
          "feedback": "Inversé : $5\\ \\%$ est la proportion des cas qui\n**sortent** de l'intervalle."
        }
      ],
      "explanation": "Constat de simulation (capacité attendue) : environ $95\\ \\%$\ndes moyennes d'échantillons tombent à moins de\n$\\frac{2\\sigma}{\\sqrt{n}}$ de $\\mu$. La terminale en fera un\nthéorème (concentration, Bienaymé-Tchebychev)."
    },
    {
      "id": "q10",
      "difficulty": 2,
      "skills": [
        "python",
        "lecture-code"
      ],
      "title": "Lire une simulation complète",
      "statement": "Que renvoie cette fonction ?\n\n```\nfrom random import randint\ndef f(n):\n    c = 0\n    for _ in range(n):\n        if randint(1, 6) == 6:\n            c = c + 1\n    return c / n\n```",
      "options": [
        {
          "text": "La fréquence de « 6 » observée sur $n$ lancers de dé\nsimulés",
          "correct": true,
          "feedback": "Bonne réponse : le compteur `c` compte les 6 obtenus, et\n`c / n` en donne la fréquence : elle approche\n$\\dfrac{1}{6} \\approx 0{,}167$ pour $n$ grand."
        },
        {
          "text": "Le nombre de « 6 » obtenus",
          "correct": false,
          "feedback": "Presque : ce serait `return c`. La division finale\n`c / n` transforme le compte en **fréquence**."
        },
        {
          "text": "La probabilité exacte $\\dfrac{1}{6}$",
          "correct": false,
          "feedback": "Erreur : la fonction renvoie une fréquence **simulée**,\nfluctuante ($0{,}171$, $0{,}163$…), proche de\n$\\frac{1}{6}$ sans lui être égale."
        },
        {
          "text": "Toujours $0$, car `c` est initialisé à $0$",
          "correct": false,
          "feedback": "Erreur : `c` **démarre** à $0$ puis s'incrémente à chaque\n6 : l'initialisation n'est pas une valeur définitive."
        }
      ],
      "explanation": "Schéma type d'une simulation : initialiser un compteur,\nboucler $n$ fois, incrémenter sous condition, renvoyer\n`c / n` (fréquence). À savoir lire, modifier et écrire."
    },
    {
      "id": "q11",
      "difficulty": 3,
      "skills": [
        "python",
        "modification"
      ],
      "title": "Modifier la simulation",
      "statement": "Dans la fonction précédente, par quoi remplacer la condition\n`randint(1, 6) == 6` pour estimer la fréquence d'un résultat\n**pair** ?",
      "options": [
        {
          "text": "`randint(1, 6) % 2 == 0`",
          "correct": true,
          "feedback": "Bonne réponse : le reste modulo $2$ nul caractérise les\npairs ($2$, $4$, $6$) : la fréquence approchera\n$\\dfrac{3}{6} = 0{,}5$."
        },
        {
          "text": "`randint(1, 6) == 2, 4, 6`",
          "correct": false,
          "feedback": "Erreur de syntaxe : cette écriture ne teste pas\nl'appartenance (il faudrait `in (2, 4, 6)` ou le test de\nparité `% 2 == 0`)."
        },
        {
          "text": "`randint(1, 6) % 2 == 1`",
          "correct": false,
          "feedback": "Sens inversé : reste $1$ modulo $2$ caractérise les\n**impairs**."
        },
        {
          "text": "`randint(2, 6)`",
          "correct": false,
          "feedback": "Erreur : changer les bornes fausse le dé lui-même (plus\nque $5$ faces) au lieu de tester la parité du résultat."
        }
      ],
      "explanation": "Adapter une simulation = changer la **condition de succès**\nsans toucher au générateur : parité par `% 2 == 0`, seuil par\n`>= 5`, appartenance par `in (2, 4, 6)`."
    },
    {
      "id": "q12",
      "difficulty": 3,
      "skills": [
        "interpretation",
        "fluctuation"
      ],
      "title": "Conclure prudemment d'une simulation",
      "statement": "On simule $100$ lancers d'une pièce supposée équilibrée et\non observe une fréquence de pile de $0{,}56$. Peut-on\nconclure que la pièce est truquée ?",
      "options": [
        {
          "text": "Non : pour $n = 100$, un écart de $0{,}06$ est dans la\nfluctuation normale d'échantillonnage",
          "correct": true,
          "feedback": "Bonne réponse : l'ordre de grandeur des fluctuations est\n$\\dfrac{2\\sigma}{\\sqrt{n}} = \\dfrac{2 \\times 0{,}5}{10} =\n0{,}1$ : observer $0{,}56$ n'a rien d'anormal pour une\npièce équilibrée."
        },
        {
          "text": "Oui : $0{,}56 \\neq 0{,}5$, donc la pièce est déséquilibrée",
          "correct": false,
          "feedback": "Erreur : la fréquence observée fluctue **toujours**\nautour de la probabilité ; l'égalité exacte serait au\ncontraire surprenante. Il faut comparer l'écart à son\nordre de grandeur naturel."
        },
        {
          "text": "Oui, si la simulation a été faite en Python",
          "correct": false,
          "feedback": "Erreur : l'outil n'y change rien ; la question est\nstatistique (taille de l'écart contre taille de la\nfluctuation attendue)."
        },
        {
          "text": "Non : une simulation ne donne jamais aucune information",
          "correct": false,
          "feedback": "Trop fort : la simulation informe (avec $n = 100\\,000$,\nune fréquence de $0{,}56$ serait accablante) ; ici\nl'échantillon est simplement trop petit pour conclure."
        }
      ],
      "explanation": "Esprit critique attendu : comparer l'écart observé\n($0{,}06$) à la fluctuation typique\n$\\frac{2\\sigma}{\\sqrt{n}}$ ($0{,}1$ pour $n = 100$) : rien\nd'anormal. Grossir l'échantillon resserre l'intervalle et\nrend le verdict possible."
    }
  ]
}