diff --git a/your-code/main.ipynb b/your-code/main.ipynb index 95bfcb9..5e8d2bb 100644 --- a/your-code/main.ipynb +++ b/your-code/main.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -31,10 +31,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "def bayes(priori, verosimilitud): \n", + " marginal=sum(np.multiply(priori, verosimilitud))\n", + " posteriori=np.divide(np.multiply(priori, verosimilitud), marginal)\n", + " return posteriori" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "prioris=[1/2, 1/2] # bolws de galletas\n", + "v_vainilla=[3/4, 2/4] # verosimilitud vainilla\n", + "v_chocolate=[1/4, 2/4] # verosimilitud chocolate" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Probabilidad de que venga del cuenco de galletas 1: 0.6\n" + ] + } + ], + "source": [ + "print ('Probabilidad de que venga del cuenco de galletas 1: ',bayes(prioris, v_vainilla)[0])\n" + ] }, { "cell_type": "markdown", @@ -45,10 +78,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.4\n", + "0.4\n" + ] + } + ], + "source": [ + "print (bayes(prioris, v_vainilla)[1])\n", + "print (1-bayes(prioris, v_vainilla)[0])\n", + "#probabilidad de que venga del cuenco de galletas 2." + ] }, { "cell_type": "markdown", @@ -59,10 +105,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Probabilidad de que venga del cuenco de galletas 1: 0.3333333333333333\n", + "Probabilidad de que venga del cuenco de galletas 2: 0.6666666666666666\n" + ] + } + ], + "source": [ + "print ('Probabilidad de que venga del cuenco de galletas 1:',bayes(prioris, v_chocolate)[0])\n", + "print ('Probabilidad de que venga del cuenco de galletas 2:',bayes(prioris, v_chocolate)[1])" + ] }, { "cell_type": "markdown", @@ -95,10 +153,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "0.5882352941176471" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "prioris=[1/2, 1/2] # bags\n", + "\n", + "#verosimilitud\n", + "v_marron=[0.3, 0.13] \n", + "v_amarillo=[0.2, 0.14] \n", + "v_rojo=[0.2, 0.13] \n", + "v_verde=[0.1, 0.2] \n", + "v_naranja=[0.1, 0.16] \n", + "v_mandarina=[0.1, 0] \n", + "v_azul=[0, 0.24] \n", + "\n", + "v_amarillo[0]*prioris[0]/(v_verde[1]*prioris[1] + v_amarillo[1]*prioris[1])\n" + ] }, { "cell_type": "markdown", @@ -109,10 +191,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 53, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "0.411764705882353" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v_amarillo[1]*prioris[1]/(v_verde[1]*prioris[1] + v_amarillo[1]*prioris[1])\n" + ] }, { "cell_type": "markdown", @@ -123,10 +218,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 56, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "0.3333333333333333" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v_verde[0]*(1/2)/(v_verde[0]*(1/2) + v_verde[1]*(1/2))" + ] }, { "cell_type": "markdown", @@ -141,10 +249,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Si se queda en puerta A, probabilidad: 0.3333333333333333\n", + "Si se cambia a puerta C, probabilidad: 0.6666666666666666\n" + ] + } + ], + "source": [ + "prioris=[1/3, 1/3, 1/3] # puertas\n", + "v_premio=[0, 1/2, 1] # verosimilitud premio\n", + "\n", + "print ('Si se queda en puerta A, probabilidad:',bayes(prioris, v_premio)[1])\n", + "print ('Si se cambia a puerta C, probabilidad: ',bayes(prioris, v_premio)[2]) \n" + ] }, { "cell_type": "markdown", @@ -157,10 +280,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "priori=pd.Series(np.random.uniform(0, 1, size=10000)) # distribucion a priori uniforme\n", + "sign_up=14 # 14 personas piden servicio\n", + "\n", + "\n", + "def modelo(param): # modelo binomial random\n", + " res=np.random.binomial(100, param) # se suponen 100 visitas\n", + " return res\n", + "\n", + "\n", + "datos=[modelo(p) for p in priori]\n", + "\n", + "posteriori=priori[list(map(lambda x: x==sign_up, datos))] # se genera el a posteriori\n", + "posteriori.hist()\n", + "plt.show()" + ] }, { "cell_type": "markdown", @@ -171,10 +322,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Se describe el a posteriori:\n", + "count 98.000000\n", + "mean 0.146408\n", + "std 0.035133\n", + "min 0.081052\n", + "25% 0.122832\n", + "50% 0.143073\n", + "75% 0.166139\n", + "max 0.271698\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "print ('Se describe el a posteriori:')\n", + "print (posteriori.describe())" + ] }, { "cell_type": "markdown", @@ -185,10 +356,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rango intercuantil: 0.09785696449580149 | 0.20233792671069697\n" + ] + } + ], + "source": [ + "print('Rango intercuantil: ', posteriori.quantile(.05), '|', posteriori.quantile(.95)) \n", + "# rango intercuantil (90% de confianza)" + ] }, { "cell_type": "markdown", @@ -199,10 +381,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Estimación máximo-verosímil: 0.14 | 0.15306122448979592\n" + ] + } + ], + "source": [ + "modo=posteriori.round(2).mode()[0] #redondeo para maxima verosimilitud proporcion de visitantes...\n", + "prob=list(posteriori.round(2)).count(modo)/len(posteriori.round(2)) # ....con probabilidad \n", + "print('Estimación máximo-verosímil: ', modo, '|',prob)" + ] } ], "metadata": { @@ -221,7 +415,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.2" + "version": "3.8.8" } }, "nbformat": 4,