$$\newcommand{\mtn}{\mathbb{N}}\newcommand{\mtns}{\mathbb{N}^*}\newcommand{\mtz}{\mathbb{Z}}\newcommand{\mtr}{\mathbb{R}}\newcommand{\mtk}{\mathbb{K}}\newcommand{\mtq}{\mathbb{Q}}\newcommand{\mtc}{\mathbb{C}}\newcommand{\mch}{\mathcal{H}}\newcommand{\mcp}{\mathcal{P}}\newcommand{\mcb}{\mathcal{B}}\newcommand{\mcl}{\mathcal{L}} \newcommand{\mcm}{\mathcal{M}}\newcommand{\mcc}{\mathcal{C}} \newcommand{\mcmn}{\mathcal{M}}\newcommand{\mcmnr}{\mathcal{M}_n(\mtr)} \newcommand{\mcmnk}{\mathcal{M}_n(\mtk)}\newcommand{\mcsn}{\mathcal{S}_n} \newcommand{\mcs}{\mathcal{S}}\newcommand{\mcd}{\mathcal{D}} \newcommand{\mcsns}{\mathcal{S}_n^{++}}\newcommand{\glnk}{GL_n(\mtk)} \newcommand{\mnr}{\mathcal{M}_n(\mtr)}\DeclareMathOperator{\ch}{ch} \DeclareMathOperator{\sh}{sh}\DeclareMathOperator{\th}{th} \DeclareMathOperator{\vect}{vect}\DeclareMathOperator{\card}{card} \DeclareMathOperator{\comat}{comat}\DeclareMathOperator{\imv}{Im} \DeclareMathOperator{\rang}{rg}\DeclareMathOperator{\Fr}{Fr} \DeclareMathOperator{\diam}{diam}\DeclareMathOperator{\supp}{supp} \newcommand{\veps}{\varepsilon}\newcommand{\mcu}{\mathcal{U}} \newcommand{\mcun}{\mcu_n}\newcommand{\dis}{\displaystyle} \newcommand{\croouv}{[\![}\newcommand{\crofer}{]\!]} \newcommand{\rab}{\mathcal{R}(a,b)}\newcommand{\pss}[2]{\langle #1,#2\rangle} $$
Bibm@th

Optimiser les tests durant une pandémie

Contexte

Nous sommes en 2119. Une nouvelle pandémie frappe le pays. Le virus est très contagieux, et il faut absolument isoler les personnes contaminées. Pour cela, le gouvernement prévoit une campagne massive de dépistage. Pour le moment, on estime qu'environ $1\%$ de la population est porteuse du virus. On dispose d'un test sanguin très efficace pour déterminer si un individu est contaminé ou non. Malheusement, ces test sont très chers et en nombre limité. On souhaite donc trouver une stratégie minimisant le nombre de tests à effectuer.

Essayons de comprendre sur un exemple. Imaginons qu'on teste 100 personnes. En moyenne, une personne sur ces 100 est porteuse du virus. Si on réalise un test pour chaque échantillon de sang, on réalise 100 tests. Une autre stratégie pourrait être de commencer par prélever pour chaque personne un peu de sang de son échantillon, puis de le mélanger avec le sang de 9 autres personnes. On réalise ainsi dix mélanges de sang de dix personnes, et on réalise le test pour chaque mélange. On effectue donc pour cela $10$ tests. En moyenne, un de ces mélanges donne un test positif. On teste alors indivuellement les $10$ échantillons de sang des $10$ personnes concernées par ce mélange. Au total, on a donc effectué $20$ tests pour trouver la personne contaminée, c'est bien mieux!

Bien sûr, la question que l'on se pose, c'est de savoir si ce choix de regrouper par $10$ est optimal. Peut-être que regrouper par $8$ aurait été plus efficace... Et le choix optimal, dépend-il du nombre de personnes dans la population? De la proportion de personnes infectées? Les probabilités vont nous permettre de répondre à ce problème.

Résolution du problème

Les paragraphes qui suivent nécessitent des connaissances mathématiques du niveau Terminale Spécialité.

On suppose qu'on a donc une population de $N$ personnes. Parmi cette population, une proportion $p$ de personnes est infectée. On regroupe le sang par paquets de $r$ personnes (on suppose que $r$ divise $N$, si $N$ est très grand devant $r$, les effets de bord seront négligeables si ce n'est pas le cas). On obtient ainsi $G_1,\dots,G_{N/r}$ échantillons et on procède de la façon suivante : on analyse chaque échantillon $G_i$ et pour chaque échantillon dont le résultat est positif, on analyse individuellement le sang des $r$ personnes constituant cet échantillon.

On note $Z$ la variable aléatoire égale au nombre de tests que l'on doit effectuer en suivant ce protocole et, pour $i=1,\dots,N/r,$ $Y_i$ le nombre de tests que l'on effectue à partir du sang des personnes constituant l'échantillon $G_i.$ Alors $Y_i$ peut prendre uniquement deux valeurs :

  • $1$ si aucune personne parmi les $r$ constituant l'échantillon n'est contaminée;
  • $r+1$ si l'une des personnes (au moins) est contaminée.

Le nombre de personnes contaminées dans l'échantillon $G_i$ suit une loi binomiale de paramètres $r$ et $p$. La probabilité qu'aucune personne ne soit contaminée est donc $(1-p)^r.$ La loi de la variable aléatoire $Y_i$ est alors :

$Y_i=$$1$$r+1$
$P(Y_i=\cdots)=$$(1-p)^r$ $1-(1-p)^r$

L'espérance de $Y_i$ est donc $$E(Y_i)=1\times (1-p)^r+(r+1)\times(1-(1-p)^r)=r+1-r(1-p)^r.$$ De plus, on sait que $$Z=Y_1+\cdots+Y_{N/r}.$$ Par linéarité de l'espérance, on trouve \begin{align*} E(Z)&=E(Y_1)+\cdots+E(Y_{N/r})\\ &=\frac{N}{r}\big((r+1)-r(1-p)^r)\big)\\ &=N\left(1+\frac 1r-(1-p)^r\right). \end{align*} On cherche alors la valeur de $r$ telle que $E(Z)$ soit minimale (c'est-à-dire qu'en moyenne on effectue le plus petit nombre de tests possibles). Comme $N$ est en facteur, il n'intervient pas pour trouver ce minimum, et on doit étudier la fonction $f$ définie par $f(r)=\frac 1r-(1-p)^r.$ On peut prouver que cette fonction est décroissante, puis croissante. Pour déterminer l'entier $r$ pour lequel elle prend la plus petite valeur possible, Le plus simple est, pour une valeur de $p$ donnée, d'utiliser ou bien un programme en Python, ou bien un tableur.

Voici une copie d'écran de ce que donne le tableur si $p=0,\!005.$ Dans ce cas, on voit qu'on a intérêt à faire des lots de 15.