diff --git a/notebooks/machine-learning/21.a-linear-model-by-hand.ipynb b/notebooks/machine-learning/21.a-linear-model-by-hand.ipynb
index 9a7946d20329f3df125f2ddcc64b6121309eeddf..b8746b8d5904392e78a51c47a97f820b74050c9a 100644
--- a/notebooks/machine-learning/21.a-linear-model-by-hand.ipynb
+++ b/notebooks/machine-learning/21.a-linear-model-by-hand.ipynb
@@ -572,7 +572,7 @@
     "\n",
     "b = intercept(m, data)\n",
     "\n",
-    "print(f\"L’ordonnée à l’origine vaut : {m}\")"
+    "print(f\"L’ordonnée à l’origine vaut : {b}\")"
    ]
   },
   {
diff --git a/notebooks/machine-learning/answers/21.straight-line-equation.ipynb b/notebooks/machine-learning/answers/21.straight-line-equation.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..c9560c58495bae566a750746353fa70edee1215f
--- /dev/null
+++ b/notebooks/machine-learning/answers/21.straight-line-equation.ipynb
@@ -0,0 +1,268 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "1ffc41af-64bc-4816-9712-7e1c309ce303",
+   "metadata": {},
+   "source": [
+    "# L’équation réduite d’une droite"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "96863e53-700d-4eb3-87a6-5ab659eb391a",
+   "metadata": {},
+   "source": [
+    "L’objectif de cet exercice est de simplement calculer l’équation réduite d’une droite à partir de deux points connus."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "8ee244f7-e0ae-493c-88b4-c35b9edc200a",
+   "metadata": {},
+   "source": [
+    "## Les formules à connaître"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "70d4797a-53c7-4e19-9560-4f89723a1721",
+   "metadata": {},
+   "source": [
+    "**L’équation réduite d’une droite :**\n",
+    "$$y = b + mx$$\n",
+    "\n",
+    "**Le calcul du coefficient directeur :**\n",
+    "$$m = \\frac{\\Delta y}{\\Delta x}$$\n",
+    "\n",
+    "**Le calcul de l’ordonnée à l’origine :**\n",
+    "$$b = y - mx$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "aaba8c55-4864-4034-9eff-5a35662975dc",
+   "metadata": {},
+   "source": [
+    "## Visualisation du problème"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "284863a0-9d22-405e-b6d9-42f0fa0b6d10",
+   "metadata": {},
+   "source": [
+    "Avant de commencer, chargez les librairies nécessaires :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "312ef59e-94fc-4149-a672-ee52b165b8ce",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import matplotlib.pyplot as plt\n",
+    "import seaborn as sns"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9ada3d82-9e66-4fa3-8623-944f7ce8a4ab",
+   "metadata": {},
+   "source": [
+    "Soient deux points $P$ et $P'$ de coordonnées $(9;-2)$ et $(-4;5)$. Définissez-les dans deux variables `X` et `Y` :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "e2b76a11-633b-494d-8829-4635c03768ce",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# your code here\n",
+    "\n",
+    "X = [9, -4]\n",
+    "Y = [-2, 5]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c6b252e9-6119-4d32-9782-3b59c5bf3ad0",
+   "metadata": {},
+   "source": [
+    "Affichons-les dans un repère puis traçons une droite pour les relier :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "9a274f99-5dc2-4951-aafe-ffd9458f0890",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# two plots\n",
+    "fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12,5))\n",
+    "\n",
+    "# spines first ax\n",
+    "ax1.set_xlim([-5, 10])\n",
+    "ax1.set_ylim([-5, 10])\n",
+    "\n",
+    "# spines second ax\n",
+    "ax2.set_xlim([-5, 10])\n",
+    "ax2.set_ylim([-5, 10])\n",
+    "\n",
+    "# plots\n",
+    "sns.scatterplot(x=X, y=Y, ax=ax1)\n",
+    "sns.lineplot(x=X, y=Y, ax=ax2)\n",
+    "\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b5d6f4ec-d5a9-4e22-975e-d17ec23cd63d",
+   "metadata": {},
+   "source": [
+    "## Calcul de l’équation"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "6d1d450f-315e-4088-8424-bf236f6caf29",
+   "metadata": {},
+   "source": [
+    "### Le coefficient directeur"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "2dcc2b3e-51e5-4898-9656-dfcd9f6ec849",
+   "metadata": {},
+   "source": [
+    "Instanciez une variable `m` à laquelle vous affecterez le coefficient directeur de la droite :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "b64a7eb5-336e-48fe-8352-dd6b0ffa9268",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# your code here\n",
+    "\n",
+    "m = (Y[0] - Y[1]) / (X[0] - X[1])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b3a2d31a-5fcf-41a4-96d1-05b750a59327",
+   "metadata": {},
+   "source": [
+    "### L’ordonnée à l’origine"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "eaf041d3-8361-4142-bfda-00991abaed73",
+   "metadata": {},
+   "source": [
+    "Procédez de la même manière pour l’ordonnée à l’origine avec une variable `b` :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "4afad24b-1f63-49e8-9918-f1196cf2bd01",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# your code here\n",
+    "\n",
+    "b = Y[0] - m * X[0]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "8a920f84-31a9-46b4-9937-8dc8b0e638ec",
+   "metadata": {},
+   "source": [
+    "## Vérification de la solution"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "cbe2d953-ae80-4b28-b89c-0f98afd67e9b",
+   "metadata": {},
+   "source": [
+    "Prenez maintenant une valeur de $x$ dans un intervalle $[-3;8]$ et ajoutez-la à la liste `X`. Calculez ensuite $y$ pour cette valeur de $x$ et ajoutez-la à la liste `Y`.\n",
+    "\n",
+    "**Rappel :** la méthode `.append()` permet d’ajouter un élément à la fin d’une liste."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "43fb2212-4d18-4e52-84f1-77ed36f6f47c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# your code here\n",
+    "\n",
+    "x = -2\n",
+    "X.append(x)\n",
+    "\n",
+    "y = b + m * x\n",
+    "Y.append(y)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9c200c9b-ede1-4de7-97f9-36cb0384c482",
+   "metadata": {},
+   "source": [
+    "Il ne vous reste plus qu’à vérifier que la droite passe bien par tous les points :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "249e8103-37f2-463b-aae0-e9412bbaf7ee",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "plt.xlim = [-5, 10]\n",
+    "plt.ylim = [-5, 10]\n",
+    "\n",
+    "sns.regplot(x=X, y=Y, ci=None)\n",
+    "\n",
+    "sns.despine()\n",
+    "\n",
+    "plt.show()"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.10.6"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/machine-learning/exercises/21.straight-line-equation.ipynb b/notebooks/machine-learning/exercises/21.straight-line-equation.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..a9c44f632ded64865065de471272a3a2e297dcc4
--- /dev/null
+++ b/notebooks/machine-learning/exercises/21.straight-line-equation.ipynb
@@ -0,0 +1,255 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "1ffc41af-64bc-4816-9712-7e1c309ce303",
+   "metadata": {},
+   "source": [
+    "# L’équation réduite d’une droite"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "96863e53-700d-4eb3-87a6-5ab659eb391a",
+   "metadata": {},
+   "source": [
+    "L’objectif de cet exercice est de simplement calculer l’équation réduite d’une droite à partir de deux points connus."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "8ee244f7-e0ae-493c-88b4-c35b9edc200a",
+   "metadata": {},
+   "source": [
+    "## Les formules à connaître"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "70d4797a-53c7-4e19-9560-4f89723a1721",
+   "metadata": {},
+   "source": [
+    "**L’équation réduite d’une droite :**\n",
+    "$$y = b + mx$$\n",
+    "\n",
+    "**Le calcul du coefficient directeur :**\n",
+    "$$m = \\frac{\\Delta y}{\\Delta x}$$\n",
+    "\n",
+    "**Le calcul de l’ordonnée à l’origine :**\n",
+    "$$b = y - mx$$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "aaba8c55-4864-4034-9eff-5a35662975dc",
+   "metadata": {},
+   "source": [
+    "## Visualisation du problème"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "284863a0-9d22-405e-b6d9-42f0fa0b6d10",
+   "metadata": {},
+   "source": [
+    "Avant de commencer, chargez les librairies nécessaires :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "312ef59e-94fc-4149-a672-ee52b165b8ce",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import matplotlib.pyplot as plt\n",
+    "import seaborn as sns"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9ada3d82-9e66-4fa3-8623-944f7ce8a4ab",
+   "metadata": {},
+   "source": [
+    "Soient deux points $P$ et $P'$ de coordonnées $(9;-2)$ et $(-4;5)$. Définissez-les dans deux variables `X` et `Y` :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "e2b76a11-633b-494d-8829-4635c03768ce",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# your code here"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c6b252e9-6119-4d32-9782-3b59c5bf3ad0",
+   "metadata": {},
+   "source": [
+    "Affichons-les dans un repère puis traçons une droite pour les relier :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "9a274f99-5dc2-4951-aafe-ffd9458f0890",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# two plots\n",
+    "fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12,5))\n",
+    "\n",
+    "# spines first ax\n",
+    "ax1.set_xlim([-5, 10])\n",
+    "ax1.set_ylim([-5, 10])\n",
+    "\n",
+    "# spines second ax\n",
+    "ax2.set_xlim([-5, 10])\n",
+    "ax2.set_ylim([-5, 10])\n",
+    "\n",
+    "# plots\n",
+    "sns.scatterplot(x=X, y=Y, ax=ax1)\n",
+    "sns.lineplot(x=X, y=Y, ax=ax2)\n",
+    "\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b5d6f4ec-d5a9-4e22-975e-d17ec23cd63d",
+   "metadata": {},
+   "source": [
+    "## Calcul de l’équation"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "6d1d450f-315e-4088-8424-bf236f6caf29",
+   "metadata": {},
+   "source": [
+    "### Le coefficient directeur"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "2dcc2b3e-51e5-4898-9656-dfcd9f6ec849",
+   "metadata": {},
+   "source": [
+    "Instanciez une variable `m` à laquelle vous affecterez le coefficient directeur de la droite :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "b64a7eb5-336e-48fe-8352-dd6b0ffa9268",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# your code here"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b3a2d31a-5fcf-41a4-96d1-05b750a59327",
+   "metadata": {},
+   "source": [
+    "### L’ordonnée à l’origine"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "eaf041d3-8361-4142-bfda-00991abaed73",
+   "metadata": {},
+   "source": [
+    "Procédez de la même manière pour l’ordonnée à l’origine avec une variable `b` :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "4afad24b-1f63-49e8-9918-f1196cf2bd01",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# your code here"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "8a920f84-31a9-46b4-9937-8dc8b0e638ec",
+   "metadata": {},
+   "source": [
+    "## Vérification de la solution"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "cbe2d953-ae80-4b28-b89c-0f98afd67e9b",
+   "metadata": {},
+   "source": [
+    "Prenez maintenant une valeur de $x$ dans un intervalle $[-3;8]$ et ajoutez-la à la liste `X`. Calculez ensuite $y$ pour cette valeur de $x$ et ajoutez-la à la liste `Y`.\n",
+    "\n",
+    "**Rappel :** la méthode `.append()` permet d’ajouter un élément à la fin d’une liste."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "43fb2212-4d18-4e52-84f1-77ed36f6f47c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# your code here"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9c200c9b-ede1-4de7-97f9-36cb0384c482",
+   "metadata": {},
+   "source": [
+    "Il ne vous reste plus qu’à vérifier que la droite passe bien par tous les points :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "249e8103-37f2-463b-aae0-e9412bbaf7ee",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "plt.xlim = [-5, 10]\n",
+    "plt.ylim = [-5, 10]\n",
+    "\n",
+    "sns.regplot(x=X, y=Y, ci=None)\n",
+    "\n",
+    "sns.despine()\n",
+    "\n",
+    "plt.show()"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.10.6"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}