Si Galilée avait été un data scientist...

Piste rouge Le 7 août 2018  - Ecrit par  Aurélien Alvarez Voir les commentaires

Dans un article précédent, Galileo aurait adoré la carte Arduino, nous avons vu comment construire un dispositif expérimental relativement simple pour tester les idées de Galilée sur l’universalité de la chute des corps, en particulier l’indépendance vis-à-vis de la masse de l’objet pesant.
Notre dispositif nous permet de faire varier la hauteur de chute, de mesurer celle-ci, ainsi que le temps de chute libre d’une bille et la vitesse de cette dernière en fin de chute. Il est ainsi facile de faire de nombreuses mesures.
Que faire de toutes ces données ? C’est ce que nous allons voir dans la suite de cet article.

L’image ci-dessus montre un échantillon extrait de notre ensemble de données : chaque ligne correspond à un lâcher de bille bien précis et consigne les mesures correspondantes.
Dans la suite, on notera $h$ la hauteur de chute (height), $t$ le temps de chute libre (fallTime) et $v$ la vitesse en fin de chute (speed) [1].

Face à un tel déluge de chiffres, il n’est pas facile d’extraire immédiatement une information pertinente.
Un ordinateur quant à lui peut immédiatement calculer des moyennes, des corrélations, des indices, etc.
Pour autant, rien ne garantit que ces quantités numériques calculées soient d’une grande utilité, ni même faciles à interpréter...
Plutôt que d’essayer de réduire des phénomènes complexes à la donnée d’un seul nombre pour faire des classements 🤔, plus intéressant est d’essayer de faire preuve d’intelligence !
D’autant plus lorsque les données dont on dispose sont variées, disparates et incomplètes, ce qui, par chance, n’est pas notre cas.

L’outil le plus évident dont on dispose et auquel on se familiarise dès les petites classes à l’école consiste à représenter les données sur un graphe si c’est possible.
Le cerveau humain étant redoutablement performant pour reconnaître des formes ou des motifs, on peut espérer avoir là un bon point de départ.
Dessinons donc sur un graphe à deux axes les couples de points $(t, v)$ correspondant au temps de chute libre et à la vitesse de la bille en fin de chute.
Voici ce qu’on obtient.

PNG - 20.3 ko

Une droite ! Les couples de points s’agencent le long d’une droite.
Nous sommes passés de deux colonnes de nombres indigestes à une information suggérant un véritable contenu scientifique.
Et pourtant ce sont les mêmes données, seule notre façon de les regarder a changé et notre intelligence, via notre cortex visuel, a instantanément fait le reste.

L’étape suivante à laquelle on s’attelle sur les bancs de l’école est de tracer à main levée la « meilleure » droite possible, c’est-à-dire celle qui passe par le plus de points et qui en laisse à peu près autant de part et d’autre.
Dit de manière plus analytique, puisque la vitesse $v$ semble être une fonction linéaire du temps $t$, on cherche à déterminer des nombres $a$ et $b$ tels que
\[v(t) = at + b,\]
où $a$ est la pente de la droite et $b$ l’ordonnée à l’origine.
Or, il est à peu près évident que $v(0) = 0$, ce qui correspond au cas d’une chute libre sur une hauteur nulle, donc un temps de chute nul et une vitesse en fin de chute tout aussi nulle.
En s’aidant des axes et d’une règle graduée, il est possible d’estimer à peu près la pente $a$ de cette droite.
Sa dimension, du point de vue de la physique, est celle d’une vitesse divisée par un temps ; puisque nous mesurons les vitesses en $\text{m}\cdot\text{s}^{-1}$ et les temps en $\text{s}$, on en déduit que $a$ s’exprime en $\text{m}\cdot\text{s}^{-2}$.

Pendant ce temps-là, séries de nombres ou graphe, pour un ordinateur, c’est du pareil au même.
Son intelligence étant réduite à exécuter inlassablement, certes à une vitesse prodigieuse, des algorithmes, si personne ne l’aide à voir une droite là où il y en a une, ben il ne se passera rien 😊 !

Quand l’ordinateur « apprend » les lois de la physique

La relation que nous avons trouvée entre la vitesse $v$ en fin de chute et le temps $t$ de chute libre nous permet de faire des prédictions.
En effet, si on souhaite connaître la vitesse d’une bille en chute libre depuis $x$ seconde et que cette donnée ne figure pas dans l’ensemble de mesures, la relation $v = at$ permet de calculer la réponse, à savoir $ax$.
On a ainsi prédit le résultat de l’expérience sur une valeur inconnue.
Par ailleurs, cette prédiction est un algorithme : la vitesse d’une bille en chute libre depuis $x$ secondes est le produit du coefficient $a$ par le nombre $x$.

Contexte scientifique.
C’est là toute la philosophie d’une branche de l’intelligence artificielle qu’on appelle l’apprentissage statistique (ou apprentissage automatique, machine learning en anglais).
Au départ d’un problème d’apprentissage, il y a des données et le but est de faire des prédictions sur des données inconnues.

Dans notre problème, les données sont des couples $(t,v)$ et le but est de prédire $v$ pour des $t$ qui n’ont pas été observés par notre dispositif expérimental.
Par exemple, on pourrait avoir envie de prédire la vitesse pour un temps de chute de 0,38 secondes, ce qui n’est pas une donnée directement lisible dans l’ensemble de nos mesures.
Nos données sont étiquetées puisque pour chaque $t$ de notre jeu de données, la réponse est « connue », il s’agit du deuxième membre du couple $(t,v)$, à savoir $v$.
L’apprentissage est dans ce cas dit supervisé et puisqu’il s’agit de prédire une variable qui dépend continument d’un paramètre $t$, on parle dans ce cas d’un problème de régression.

Stratégie.
Pour rendre la machine un peu plus « intelligente », c’est-à-dire lui permettre de faire des prédictions de vitesse de bille en chute libre depuis $x$ secondes, nous allons lui mettre à disposition un ensemble d’entraînement $X_{\text{train}}$ qui est une partie significative (par exemple 80 %) de notre ensemble total de données de couples $(t,v)$ et lui indiquer de chercher une relation linéaire dans ces données, comme nous le suggère notre intelligence à nous 😃. Nous appelons ensemble de test $X_{\text{test}}$ l’ensemble des données non utilisées (20 % dans notre exemple) que nous utiliserons dans un deuxième temps.
Un algorithme d’apprentissage, c’est donc un algorithme qui dispose de paramètres ajustables (parfois quelques-uns, parfois des millions).
Grâce à l’ensemble d’entraînement, l’algorithme d’apprentissage ajuste ces paramètres et, in fine, retourne un nouvel algorithme prêt à l’emploi.
Dans notre cas, nous allons utiliser un algorithme de régression linéaire qui, à partir de notre ensemble d’entraînement, va retourner une droite, plus précisément des coefficients $a$ et $b$ et un algorithme qui effectue le calcul $ax + b$ chaque fois qu’on lui donne en entrée $x$ secondes.

PNG - 26.3 ko

Pour tous nos calculs, nous utilisons scikit-learn, une bibliothèque développée en Python et dédiée à l’apprentissage statistique.
Voici les coefficients calculés (le premier nombre entre crochets est $a$ et le second $b$) :

Coefficients :
[9.91934557] -0.030721186

On est rassuré de trouver un coefficient $b$ très proche de 0.
Pour autant, dans quelle mesure la droite de régression linéaire que nous avons calculée « colle-t-elle bien » avec l’ensemble de nos données ?
C’est là qu’intervient, après la phase d’entraînement, la phase de test, c’est-à-dire le moment de calculer des prédictions sur notre ensemble de test puis de comparer les valeurs prédites par notre droite de régression linéaire avec les valeurs mesurées par notre dispositif expérimental.
Il est important de souligner que les données de l’ensemble de test n’ont, jusque-là, jamais été « vues » par notre algorithme d’apprentissage, ce qui permet de tester le modèle et de voir dans quelle mesure il généralise à de nouvelles données, c’est-à-dire de voir s’il fait de « bonnes » prédictions quand on lui soumet de nouvelles données (pour lesquelles on connaît les réponses puisqu’elles correspondent à des mesures qui ont été faites).

Voici ci-dessous les calculs de la moyenne quadratique carrée (Mean Squared Error) et du coefficient de détermination $R^2$ :

$\text{MSE} = 0.0004592885 \quad \text{et} \quad R^2 = 0.9994868230$.

Moyenne quadratique carrée et coefficient de détermination ?

La moyenne quadratique carrée est la moyenne des carrés des différences entre la valeur mesurée $v$ et la valeur prédite $v(t)$ prise sur les temps $t$ dans l’ensemble de test. En formules :
\[MSE = \frac{1}{|X_{\text{test}}|} \sum_{(t,v) \in X_{\text{test}}} \bigl|v-v(t)\bigr|^2,\]
où $v(t)=at+b$ est la valeur calculée par la droite de régression linéaire.

Le coefficient de détermination est une autre mesure de la qualité de la prédiction. Notons $\bar{v}$ la moyenne des vitesses prises dans l’ensemble de test. On a alors la définition suivante :
\[R^2 = 1 - \frac{\sum_{(t,v) \in X_{\text{test}}} \bigl|v-v(t)\bigr|^2}{\sum_{(t,v) \in X_{\text{test}}} |v-\bar{v}|^2}.\]

Ces deux valeurs calculées permettent d’apprécier à quel point le modèle linéaire est en adéquation avec les données puisque la moyenne quadratique carrée est presque nulle et le coefficient de détermination quasiment égal à 1.

Que se cache précisément derrière notre algorithme d’apprentissage ?
Un modèle de régression linéaire estimé par la méthode des moindres carrés.
Pour les lecteurs les plus aventureux, nous essayons d’expliquer tout cela dans l’article De la méthode des moindres carrés à la descente de gradient.

Quid de la relation entre hauteur et temps de chute libre ?

On se trouve face à la même difficulté que précédemment : donner du sens à une nouvelle avalanche de nombres.
Même stratégie du coup, on commence par représenter sur un graphe les couples $(h,t)$ (hauteur et temps de chute libre).
Voici ce qu’on obtient cette fois-ci.

PNG - 22.7 ko

Là encore, il apparaît immédiatement qu’il doit exister une relation « sympathique » entre hauteur et temps de chute libre, mais celle-ci semble de nature plus compliquée, en tout cas pas linéaire.
Il est alors temps de se rappeler que Galilée, à la suite de ces expérimentations, avait indiqué à ce propos que le temps de chute libre est multiplié par deux quand la hauteur de chute est multipliée par quatre.
Ainsi il semble raisonnable de chercher une relation quadratique entre $h$ et $t$, autrement dit la « meilleure » parabole qui passe par les couples de points $(t,h)$.
En formules, on cherche donc une relation de la forme
\[h(t) = At^2 + Bt + C,\]
où $A$, $B$ et $C$ sont des constantes, et l’on s’attend à ce que $B$ et $C$ soient très proches de 0.
Nous souhaiterions utiliser le même algorithme d’apprentissage que précédemment, ce qui ne semble pas possible a priori compte tenu de la non-linéarité de notre nouveau problème...

Astuce 💡.
Remplaçons chaque $t$ dans notre ensemble d’apprentissage par le couple $(t_1 = t, t_2 = t^2)$.
Dans ces nouvelles coordonnées $(t_1, t_2)$, la relation que l’on cherche se réécrit donc
\[h(t_1, t_2) = At_2 + Bt_1 + C,\]
et ceci est l’équation d’un plan affine.
Nous nous retrouvons donc avec un problème linéaire 👍 mais en dimension deux.
L’algorithme d’apprentissage que nous avons utilisé fonctionne tout aussi bien en dimension deux, et même en dimension quelconque.
À ce stade, il nous suffit alors de préparer notre nouvel ensemble de données formé de triplets $(t_1 = t, t_2 = t^2, h)$, de le séparer en un ensemble d’entraînement et en un ensemble de test, pour finalement laisser notre algorithme de régression linéaire calculer les coefficients $A$, $B$ et $C$.
La figure suivante se dessine sous nos yeux.

PNG - 27.2 ko

Les coefficients retournés par notre algorithme sont $A = 4.35$, $B = 0.24$ et $C=-0.02$.
Là encore, on est rassuré de trouver des coefficients $B$ et $C$ négligeables devant $A$.

Exercice En suivant les mêmes idées que précédemment, trouver un modèle mathématique liant les variables $h$ et $v$, et le comparer à la combinaison $v=\frac{a}{\sqrt{A}} \sqrt{h}$ des deux modèles vus précédemment, le premier donnant la relation linéaire $v=at$ entre les variables $t$ et $v$, et le deuxième la relation quadratique $h=At^2$ entre les variables $t$ et $h$.

Selon Galilée, la nature est un livre écrit en langage mathématique

Une fois que l’on dispose du formalisme mathématique introduit par Leibniz et Newton, et des principes fondamentaux de la mécanique tels qu’énoncés par Newton dans les Principia, c’est un exercice élémentaire que de démontrer les formules théoriques reliant hauteur de chute, temps de chute libre et vitesse en fin de chute que nous avons devinées précédemment.
En effet, une façon de procéder est de partir d’un principe fondamental de la mécanique en l’absence de frottements, le principe de conservation de l’énergie mécanique.

Nous continuons d’utiliser les notations $h$, $t$ et $v$ pour désigner respectivement, à chaque instant de la chute, la hauteur de chute, le temps de chute libre depuis le lâcher de la bille, ainsi que la vitesse instantanée de la bille.
À l’instant initial, la bille étant lâchée sans vitesse initiale, on a donc
\[h=0, \quad t=0 \quad \text{et} \quad v=0.\]
Notons enfin $m$ la masse de la bille même si, comme Galilée nous l’a enseigné et comme nous avons pu le tester expérimentalement, cette caractéristique de la bille ne doit jouer aucun rôle in fine.
D’après la conservation de l’énergie mécanique, à tout instant, la variation d’énergie cinétique $\Delta E_c$ depuis le lâcher de la bille est égale à la variation d’énergie potentielle $\Delta E_p$ depuis ce même lâcher.
Puisque l’énergie cinétique initiale est nulle (la bille est lâchée sans être poussée) et que la différence d’altitude depuis le lâcher est précisément ce que nous avons noté $h$, on en déduit donc

\[\frac{1}{2}mv^2 = mgh.\]

Après simplification par la masse 😃, l’équation se réécrit $\frac{1}{2}v^2 = gh$.
Finalement, la vitesse en fonction de la hauteur de chute s’exprime par la formule suivante

\[v = \sqrt{2gh}.\]

Application numérique : si $h = 1 \, \text{m}$ et $g=9.81 \, \text{m}\cdot\text{s}^{-2}$, alors $v \simeq 4.43 \, \text{m}\cdot\text{s}^{-1}$, ou encore $v \simeq 15.9 \, \text{km} / \text{h}$.

Par définition, la vitesse instantanée de la bille est la dérivée de la hauteur de chute par rapport au temps $t$.
L’équation précédente se réécrit donc

\[v = \frac{\text{d}h}{\text{d}t} = \sqrt{2gh},\]

ou encore

\[\frac{\text{d}h}{\sqrt{2h}} = \sqrt{g} \, \text{d}t.\]

En intégrant cette équation différentielle (on reconnaît dans le membre de gauche la dérivée de la fonction $h \mapsto \sqrt{2h}$) et en se rappelant que $h(0)=0$, on obtient finalement

\[t = \sqrt{\frac{2h}{g}} \quad \text{ou} \quad h = \frac{1}{2}gt^2.\]

Application numérique : si $h = 1 \, \text{m}$ et $g=9.81 \, \text{m}\cdot\text{s}^{-2}$, alors $t = 0.45 \, \text{s}$ [2].

Cette formule confirme ce qu’avait bien compris Galilée : si on multiplie par quatre la hauteur de chute, le temps de chute libre est quant à lui multiplié par deux.
En éliminant la hauteur de chute $h$ des deux formules précédentes, on peut exprimer la vitesse $v$ en fonction de $t$ et, sans trop de surprise, on trouve

\[v = g t\]

On aurait bien entendu pu déduire cette équation du principe fondamental de la dynamique puisque la seule force s’exerçant sur la bille pendant sa chute [3] est la force de pesanteur.
Ainsi, l’accélération de la bille est exactement égale à l’accélération $g$ de la pesanteur puisque, d’après la version faible du principe d’équivalence, masse inertielle et masse grave sont égales.

Remarque. A posteriori, nous comprenons le sens physique du coefficient de proportionnalité $a$ dont il était question quand nous cherchions la relation entre $t$ et $v$ : ce coefficient n’est autre que l’accélération de la pesanteur.
Notre dispositif nous permet donc de calculer une valeur numérique pour $g$, à savoir $9.91 \, \text{m}\cdot\text{s}^{-2}$, ce qui n’est pas si mal pour un dispositif aussi rudimentaire et sachant qu’une valeur plus précise à nos latitudes est de l’ordre de $9,81 \, \text{m}\cdot\text{s}^{-2}$.

Deux approches complémentaires

Extraire des connaissances à partir d’un ensemble de données, c’est tout l’enjeu de la science des données et ce que nous avons essayé d’illustrer dans cet article sur un exemple jouet.
Dans un premier temps, on accumule des données, par exemple avec un dispositif expérimental comme celui que nous avons construit dans l’article Galileo aurait adoré la carte Arduino, puis on en extrait des modèles, ici des lois de la physique (que nous avons inférées grâce à des modèles de régression linéaire, pour plus de détails voir l’article De la méthode des moindres carrés à la descente de gradient), et enfin on les exploite.
L’intérêt évident de cette approche est de pouvoir s’attaquer à des problèmes aussi compliqués que reconnaître des objets dans une image, faire de la traduction automatique, etc. etc.

Mais d’un autre côté, ce genre de méthodes peut laisser un sentiment de frustration, celui de ne pas bien comprendre pourquoi le modèle est ainsi et pas autrement.
Dans notre exemple jouet de la chute libre, la théorie nous permet de dériver les équations reliant la hauteur de chute, le temps de chute libre, la vitesse de la bille en fin de chute et l’accélération de la pesanteur.
La théorie s’appuie sur des principes extrêmement généraux, comme le principe de conservation de l’énergie mécanique, que l’on retrouve comme explication à d’innombrables phénomènes dans la nature.
Même si bien sûr on part d’un postulat que l’on ne cherche pas à discuter outre mesure, par exemple le principe de conservation de l’énergie en lui-même, nous avons le sentiment d’une compréhension beaucoup plus profonde des raisons pour lesquelles $h$, $t$, $v$ et $g$ sont reliées et des équations sous-jacentes.

Théorie et science des données... deux visions différentes mais certainement deux approches complémentaires.

Post-scriptum :

La rédaction d’Images des mathématiques ainsi que l’auteur remercient Gabriel Sarrazin pour sa relecture attentive et ses suggestions.

Notes

[1Donner un temps de chute libre avec 10 chiffres derrière la virgule à partir d’un dispositif expérimental aussi primitif que le nôtre n’a bien entendu aucun sens physique. Nous prenons là les données brut renvoyées par nos capteurs pour insister sur le fait que, bien souvent, plus il y a de chiffres derrière la virgule, moins la valeur scientifique du résultat est grande...

[2Sur la Lune, la gravité est d’environ $1.62 \, \text{m}\cdot\text{s}^{-2}$. Une bille lâchée d’une hauteur de 1 mètre met donc approximativement $1.11 \, \text{s}$ avant de toucher le sol avec une vitesse d’environ $1.8 \, \text{m}\cdot\text{s}^{-1}$.
Maintenant que nous avons un bon dispositif expérimental, il ne nous reste plus qu’à trouver quelques crédits pour aller vérifier tout ça 🚀...

[3toujours dans l’approximation de frottements avec l’air négligeables

Partager cet article

Pour citer cet article :

Aurélien Alvarez — «Si Galilée avait été un data scientist...» — Images des Mathématiques, CNRS, 2018

Commentaire sur l'article

Laisser un commentaire

Forum sur abonnement

Pour participer à ce forum, vous devez vous enregistrer au préalable. Merci d’indiquer ci-dessous l’identifiant personnel qui vous a été fourni. Si vous n’êtes pas enregistré, vous devez vous inscrire.

Connexions’inscriremot de passe oublié ?

Suivre IDM