{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# 1A.e - Enonc\u00e9 23 octobre 2018 (2)\n", "\n", "Correction du second \u00e9nonc\u00e9 de l'examen du 23 octobre 2018. L'\u00e9nonc\u00e9 propose une m\u00e9thode pour renseigner les valeurs manquantes dans une base de deux variables."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["On sait d'apr\u00e8s les derni\u00e8res questions qu'il faudra tout r\u00e9p\u00e9ter plusieurs fois. On prend le soin d'\u00e9crire chaque question dans une fonction."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Q1 - \u00e9chantillon al\u00e9atoire\n", "\n", "G\u00e9n\u00e9rer un ensemble de $N=1000$ couples al\u00e9atoires $(X_i,Y_i)$ qui v\u00e9rifient :\n", "\n", "* $X_i$ suit une loi normale de variance 1.\n", "* $Y_i = 2 X_i + \\epsilon_i$ o\u00f9 $\\epsilon_i$ suit une loi normale de variance 1."]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[-1.56987627, -0.87585938],\n", " [ 0.21230699, 1.85706677],\n", " [-1.32971056, -1.31614371],\n", " [ 0.99469359, 2.63550262],\n", " [-1.90844194, -3.84040783]])"]}, "execution_count": 3, "metadata": {}, "output_type": "execute_result"}], "source": ["import numpy.random as rnd\n", "import numpy\n", "\n", "def random_mat(N):\n", " mat = numpy.zeros((N, 2))\n", " mat[:, 0] = rnd.normal(size=(N,))\n", " mat[:, 1] = mat[:, 0] * 2 + rnd.normal(size=(N,))\n", " return mat\n", "\n", "N = 1000\n", "mat = random_mat(N)\n", "mat[:5]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**Remarque :** Un \u00e9l\u00e8ve a retourn\u00e9 cette r\u00e9ponse, je vous laisse chercher pourquoi ce code produit deux variables tout-\u00e0-fait d\u00e9corr\u00e9l\u00e9es.\n", "\n", "```\n", "def random_mat(N=1000):\n", " A = np.random.normal(0,1,(N,2))\n", " A[:,1] = 2*A[:,1] + np.random.normal(0,1,N)/10\n", " return A\n", "```\n", "\n", "Cela peut se v\u00e9rifier en calculant la corr\u00e9lation.\n", "\n", "**Remarque 2 :** Un \u00e9l\u00e8ve a g\u00e9n\u00e9r\u00e9 le nuage $X + 2\\epsilon$ ce qui produit un nuage de points dont les deux variable sont moins corr\u00e9l\u00e9es. Voir \u00e0 la fin pour plus de d\u00e9tail."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Q2 - matrice m1\n", "\n", "On d\u00e9finit la matrice $M \\in \\mathbb{M}_{N,2}(\\mathbb{R})$ d\u00e9finie par les deux vecteurs colonnes $(X_i)$ et $(Y_i)$. Choisir al\u00e9atoirement 20 valeurs dans cette matrice et les remplacer par ``numpy.nan``. On obtient la matrice $M_1$."]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[-1.48750338, -4.92138266],\n", " [-0.59978536, -2.22258934],\n", " [ 1.72143302, nan],\n", " [ 1.02229479, 1.52222862],\n", " [-0.1157862 , 1.97598417]])"]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["import random\n", "\n", "def build_m1(mat, n=20):\n", " mat = mat.copy()\n", " positions = []\n", " while len(positions) < n:\n", " h = random.randint(0, mat.shape[0] * mat.shape[1] - 1)\n", " pos = h % mat.shape[0], h // mat.shape[0]\n", " if pos in positions:\n", " # La position est d\u00e9j\u00e0 tir\u00e9e.\n", " continue\n", " positions.append(pos)\n", " mat[pos] = numpy.nan\n", " return mat, positions\n", "\n", "m1, positions = build_m1(mat)\n", "p = positions[0][0]\n", "m1[max(p-2, 0):min(p+3, mat.shape[0])]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**Remarque 1:** l'\u00e9nonc\u00e9 ne pr\u00e9cisait pas s'il fallait choisir les valeurs al\u00e9atoires sur une ou deux colonnes, le faire sur une seule colonne est sans doute plus rapide et ne change rien aux conclusions des derni\u00e8res questions.\n", "\n", "**Remarque 2:** il ne faut pas oublier de copier la matrice ``mat.copy()``, dans le cas contraire, la fonction modifie la matrice originale. Ce n'est pas n\u00e9cessairement un probl\u00e8me except\u00e9 pour les derni\u00e8res questions qui requiert de garder cette matrice.\n", "\n", "**Remarque 3:** l'\u00e9nonc\u00e9 ne pr\u00e9cisait pas avec ou sans remise. L'impl\u00e9mentation pr\u00e9c\u00e9dente le fait sans remise."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Q3 - moyenne\n", "\n", "Calculer $\\mathbb{E}{X} = \\frac{1}{N}\\sum_i^N X_i$ et $\\mathbb{E}Y = \\frac{1}{N}\\sum_i^N Y_i$. Comme on ne tient pas compte des valeurs manquantes, les moyennes calcul\u00e9es se font avec moins de $N$ termes. Si on d\u00e9finit $V_x$ et $V_y$ l'ensemble des valeurs non manquantes, on veut calculer $\\mathbb{E}{X} = \\frac{\\sum_{i \\in V_x} X_i}{\\sum_{i \\in V_x} 1}$ et $\\mathbb{E}Y = \\frac{\\sum_{i \\in V_y} Y_i}{\\sum_{i \\in V_y} 1}$."]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([0.01928312, 0.09388639])"]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["def mean_no_nan(mat):\n", " res = []\n", " for i in range(mat.shape[1]):\n", " ex = numpy.mean(mat[~numpy.isnan(mat[:, i]), i])\n", " res.append(ex)\n", " return numpy.array(res)\n", "\n", "mean_no_nan(m1)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**Remarque 1 :** il \u00e9tait encore plus simple d'utiliser la fonction [nanmean](https://docs.scipy.org/doc/numpy/reference/generated/numpy.nanmean.html#numpy.nanmean).\n", "\n", "**Remarque 2 :** Il fallait diviser par le nombre de valeurs non nulles et non le nombre de lignes de la matrice."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Q4 - matrice m2\n", "\n", "Remplacer les valeurs manquantes de la matrice $M_1$ par la moyenne de leurs colonnes respectives. On obtient la matrice $M_2$."]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[-1.48750338, -4.92138266],\n", " [-0.59978536, -2.22258934],\n", " [ 1.72143302, 0.09388639],\n", " [ 1.02229479, 1.52222862],\n", " [-0.1157862 , 1.97598417]])"]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["def build_m2(mat):\n", " means = mean_no_nan(mat)\n", " m1 = mat.copy()\n", " for i in range(len(means)):\n", " m1[numpy.isnan(m1[:, i]), i] = means[i]\n", " return m1\n", "\n", "m2 = build_m2(m1)\n", "m2[max(p-2, 0):min(p+3, mat.shape[0])]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Q5 - x le plus proche\n", "\n", "On consid\u00e8re le point de coordonn\u00e9es $(x, y)$, \u00e9crire une fonction qui retourne le point de la matrice $M$ dont l'abscisse est la plus proche de $x$."]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/plain": ["10"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["def plus_proche(mat, x, col, colnan):\n", " mini = None\n", " for k in range(mat.shape[0]):\n", " if numpy.isnan(mat[k, col]) or numpy.isnan(mat[k, colnan]):\n", " continue\n", " d = abs(mat[k, col] - x)\n", " if mini is None or d < mini:\n", " mini = d\n", " best = k\n", " return best\n", "\n", "plus_proche(m1, m1[10, 0], 0, 1)"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/plain": ["10"]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["def plus_proche_rapide(mat, x, col, colnan):\n", " mini = None\n", " na = numpy.arange(0, mat.shape[0])[~(numpy.isnan(mat[:, col]) | numpy.isnan(mat[:, colnan]))]\n", " diff = numpy.abs(mat[na, col] - x)\n", " amin = numpy.argmin(diff)\n", " best = na[amin]\n", " return best\n", "\n", "plus_proche_rapide(m1, m1[10, 0], 0, 1)"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["4.12 ms \u00b1 399 \u00b5s per loop (mean \u00b1 std. dev. of 7 runs, 100 loops each)\n"]}], "source": ["%timeit plus_proche(m1, m1[10, 0], 0, 1)"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["33.1 \u00b5s \u00b1 2.26 \u00b5s per loop (mean \u00b1 std. dev. of 7 runs, 10000 loops each)\n"]}], "source": ["%timeit plus_proche_rapide(m1, m1[10, 0], 0, 1)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["C'est beaucoup plus rapide car on utilise les fonctions *numpy*."]}, {"cell_type": "markdown", "metadata": {"scrolled": false}, "source": ["## Q6 - matrice m3\n", "\n", "Pour chaque $y$ manquant, on utilise la fonction pr\u00e9c\u00e9dente pour retourner le point dont l'abscisse et la plus proche et on remplace l'ordonn\u00e9e $y$ par celle du point trouv\u00e9. On fait de m\u00eame avec les $x$ manquant.\n", "On construit la matrice ainsi $M_3$ \u00e0 partir de $M_1$."]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[-1.48750338, -4.92138266],\n", " [-0.59978536, -2.22258934],\n", " [ 1.72143302, 2.83806507],\n", " [ 1.02229479, 1.52222862],\n", " [-0.1157862 , 1.97598417]])"]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["def build_m3(mat):\n", " mat = mat.copy()\n", " for i in range(mat.shape[0]):\n", " for j in range(mat.shape[1]):\n", " if numpy.isnan(mat[i, j]):\n", " col = 1-j\n", " if numpy.isnan(mat[i, col]):\n", " # deux valeurs nan, on utilise la moyenne\n", " mat[i, j] = numpy.mean(mat[~numpy.isnan(mat[:,j]), j])\n", " else:\n", " pos = plus_proche_rapide(mat, mat[i, col], col, j)\n", " mat[i, j] = mat[pos, j]\n", " return mat\n", "\n", "m3 = build_m3(m1)\n", "m3[max(p-2, 0):min(p+3, mat.shape[0])]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Q7 - norme\n", "\n", "On a deux m\u00e9thodes pour compl\u00e9ter les valeurs manquantes, quelle est la meilleure ? Il faut v\u00e9rifier num\u00e9riquement en comparant $\\parallel M-M_2 \\parallel^2$ et $\\parallel M-M_3 \\parallel^2$."]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"data": {"text/plain": ["(93.88020645836853, 10.054794671768933)"]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["def distance(m1, m2):\n", " d = m1.ravel() - m2.ravel()\n", " return d @ d\n", "\n", "d2 = distance(mat, m2)\n", "d3 = distance(mat, m3)\n", "d2, d3"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**Remarque :** Un \u00e9l\u00e8ve a r\u00e9pondu :\n", "\n", "```\n", "On obtient (norme(M-M2))^2 = 98.9707 et (norme(M-M3))^2 = 98.2287 : la meilleure m\u00e9thode semble \u00eatre la seconde (Q6).\n", "```\n", "\n", "La diff\u00e9rence n'est significative et cela sugg\u00e8re une erreur de calcul. Cela doit mettre la puce \u00e0 l'oreille."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Q8 - r\u00e9p\u00e9tition\n", "\n", "Une experience r\u00e9ussie ne veut pas dire que cela fonctionne. Recommencer 10 fois en changeant le nuages de points et les valeurs manquantes ajout\u00e9es."]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[38.93113166, 13.65407502],\n", " [44.59161999, 31.20763444],\n", " [56.36123306, 39.49474066],\n", " [40.20767715, 15.72341549],\n", " [86.99591576, 36.28602503],\n", " [81.35006845, 12.18103292],\n", " [85.775306 , 37.15330721],\n", " [79.44248685, 22.80699951],\n", " [52.70774305, 21.74452936],\n", " [83.59144759, 15.22093401]])"]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["def repetition(N=1000, n=20, nb=10):\n", " res = []\n", " for i in range(nb):\n", " mat = random_mat(N)\n", " m1, _ = build_m1(mat, n)\n", " m2 = build_m2(m1)\n", " m3 = build_m3(m1)\n", " d2, d3 = distance(mat, m2), distance(mat, m3)\n", " res.append((d2, d3))\n", " return numpy.array(res)\n", "\n", "repetition()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Q9 - plus de valeurs manquantes\n", "\n", "Et si on augmente le nombre de valeurs manquantes, l'\u00e9cart se creuse-t-il ou se r\u00e9duit -il ? Montrez-le num\u00e9riquement."]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["100\n", "200\n", "300\n", "400\n", "500\n", "600\n", "700\n", "800\n", "900\n"]}, {"data": {"text/plain": ["array([[3.35913762, 1.46902292],\n", " [3.02940671, 1.50112628],\n", " [3.06988804, 1.66400287],\n", " [3.02826212, 1.6163169 ],\n", " [2.98007237, 1.7964768 ]])"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["diff = []\n", "ns = []\n", "for n in range(100, 1000, 100):\n", " print(n)\n", " res = repetition(n=n, nb=10)\n", " diff.append(res.mean(axis=0) / n)\n", " ns.append(n)\n", "diff = numpy.array(diff)\n", "diff[:5]"]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["import pandas\n", "df = pandas.DataFrame(diff, columns=[\"d2\", \"d3\"])\n", "df['N'] = ns\n", "df = df.set_index('N')\n", "df[\"ratio\"] = df[\"d2\"] / df[\"d3\"]\n", "\n", "import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots(1, 2, figsize=(10, 4))\n", "df[[\"d2\", \"d3\"]].plot(ax=ax[0])\n", "df[[\"ratio\"]].plot(ax=ax[1])\n", "ax[0].set_title(\"d2 et d3\\nErreur moyenne par valeur manquante\")\n", "ax[1].set_title(\"d2 / d3\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Plus il y a de valeurs manquantes, plus le ratio tend vers 1 car il y a moins d'informations pour compl\u00e9ter les valeurs manquantes autrement que par la moyenne. Il y a aussi plus souvent des couples de valeurs manquantes qui ne peuvent \u00eatre remplac\u00e9s que par la moyenne."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Q10\n", "\n", "Votre fonction de la question 5 a probablement un co\u00fbt lin\u00e9aire. Il est probablement possible de faire mieux, si oui, il faut pr\u00e9ciser comment et ce que cela implique sur les donn\u00e9es. Il ne faut pas l'impl\u00e9menter."]}, {"cell_type": "markdown", "metadata": {}, "source": ["Il suffit de trier le tableau et d'utiliser une recherche dichotomique. Le co\u00fbt du tri est n\u00e9gligeable par rapport au nombre de fois que la fonction ``plus_proche`` est utilis\u00e9e."]}, {"cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
corrd2d3
4950.97847214.7877245.693286
4960.98094417.3991393.579552
4970.97996016.0644287.893382
4980.97711715.4922004.140280
4990.98120717.7977782.785862
\n", "
"], "text/plain": [" corr d2 d3\n", "495 0.978472 14.787724 5.693286\n", "496 0.980944 17.399139 3.579552\n", "497 0.979960 16.064428 7.893382\n", "498 0.977117 15.492200 4.140280\n", "499 0.981207 17.797778 2.785862"]}, "execution_count": 17, "metadata": {}, "output_type": "execute_result"}], "source": ["def random_mat(N, alpha):\n", " mat = numpy.zeros((N, 2))\n", " mat[:, 0] = rnd.normal(size=(N,))\n", " mat[:, 1] = mat[:, 0] * alpha + rnd.normal(size=(N,))\n", " return mat\n", "\n", "rows = []\n", "for alpha in [0.01 * h for h in range(0, 500)]:\n", " m = random_mat(1000, alpha)\n", " m1, _ = build_m1(m, 20)\n", " m2 = build_m2(m1)\n", " m3 = build_m3(m1)\n", " d2, d3 = distance(m, m2), distance(m, m3)\n", " cc = numpy.corrcoef(m.T)[0, 1]\n", " rows.append(dict(corr=cc, d2=d2**0.5, d3=d3**0.5))\n", "\n", "df = pandas.DataFrame(rows)\n", "df.tail()"]}, {"cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["ax = df.sort_values(\"corr\").plot(x=\"corr\", y=[\"d2\", \"d3\"])\n", "ax.set_title(\"Evolution de l'erreur en fonction de la corr\u00e9lation\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["On voit que la second m\u00e9thode est meilleure si la corr\u00e9lation est sup\u00e9rieur \u00e0 0.7. Plut\u00f4t moins bonne avant."]}, {"cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": []}], "metadata": {"kernelspec": {"display_name": "Python 3", "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.7.0"}}, "nbformat": 4, "nbformat_minor": 2}