{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Multi Arm Bandit Problem" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Row of slot machines with different probabilities of paying off? \n", "Which ones should you play often and how often?\n", "\n", "- Exploit vs Explore\n", "- Application Areas\n", " - Model for A/B Testing: Ad someone clicks or doesnot\n", " - Medical Diagnosis: Well known treatment or new treatment\n", " - Diseases Epidemic : " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import scipy as sp\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import empiricaldist\n", "from empiricaldist import Pmf, Distribution\n", "from ipywidgets import interact, interactive, fixed" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prior" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def decorate_bandit(title):\n", " \"\"\"\n", " Labels the axes\n", " title: string\n", " \"\"\"\n", " plt.xlabel('Probability of winning')\n", " plt.ylabel('PMF')\n", " plt.title(title)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAEWCAYAAABBvWFzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAc4klEQVR4nO3de5RdVYHn8e/PxEQQAQlBEYKJJigBGxrKCA7QKopB0dAOSlCHYNOwuoUGHNEBu22FWc5I0y3dNOhaTAd5qDxE1IwPwBFBYIZARUEIzzKAJLxCeMhLIPibP84uuLncSiVh35R16/dZK6vO3WefffapA/dX55x795ZtIiIiXq5XjHQHIiKiNyRQIiKiigRKRERUkUCJiIgqEigREVFFAiUiIqpIoMSYJukJSW9aj/vbQ9JtFdv7qaR5ZflgSVdVbPsTki6t1V70vgRK9BRJd0l6ugTFA5LOlLTRUPVtb2R7SaV9f1nSc5IeL/9ul3SqpC1b9nel7besYVvfGq6e7X1sn1Wh71MlWdL4lra/bXvvl9t2jB0JlOhFH7K9EbAz0Af8Q3uF1jfOdbGa7c+3/RpgM+AvgdcDi1pDpQY18v9v/EnJf5DRs2wvA34K7ABQ/gI/XNIdwB0tZdPL8iaSzpa0XNLdkv5h8E273E66WtLJklYAXx5m38/ZXgwcACwHPlvaeZekpYP1JP03ScvKFc1tkvaSNBv4AnBAudK6odS9XNJXJF0NPAW8qZT9dcuuVa6KHpN0q6S9WlbcJem9La9br4J+WX4+Wva5W/stNEnvlHRdafs6Se9sWXe5pP9efkePS7pU0ubDnKLoMQmU6FmSpgAfAH7dUrwf8A5gZodN/h3YBHgT8BfAQcCnWta/A1gCvA74ypr0wfbzwA+BPTr07y3AEcDby1XN+4G7bF8M/A+aq52NbO/Ystl/AQ4DXgPc3WGX7wB+C2wOfAm4SNJma9DVPcvPTcs+/19bXzcDfgycAkwCvgb8WNKklmofp/l9bQFMAI5Zg/1GD0mgRC/6gaRHgauAK2jenAf9T9sP2366dQNJ44C5wHG2H7d9F/AvNG/gg+61/e+2V7ZvP4x7aW6BtXsemAjMlPRK23fZ/u0wbZ1pe3Hpw3Md1j8I/Gu5QjofuA344Fr0dSgfBO6wfU7Z97nArcCHWup80/bt5XdzAbBThf3GKJJAiV60n+1Nbb/R9qfb3vzvGWKbzYFXsupf/XcDW63BtsPZCni4vdD2AHA0ze2zByWdJ+kNw7Q1XB+WedURX+8GhmtzTbyBl14Rtf9+7m9ZfgoY8sMQ0ZsSKDHWDDW89kPAc8AbW8q2AZatwbZDKs9gPgRc2bEz9nds7172a+DEYfY1XB+2kqSW19vQXCEBPAls2LLu9WvR7r2s+rsZbHtZh7oxRiVQInjhWccFwFckvUbSG4H/Cgz70d1OJI2XtB1wLs0b99c61HmLpPdImgj8AXga+GNZ/QAwdR0+ybUFcKSkV0r6KLAd8JOy7npgblnXB+zfst3ysu+hvpPzE2BbSR8vx3YAzXOoH61l/6KHJVAiXvR3NH/FL6F5/vId4Iy1bOMASU8AjwELgBXALrbv7VB3IvBVmquj+2nC4Liy7rvl5wpJv1qL/S8EZpQ2vwLsb3tFWfdF4M3AI8DxNMcHgO2nSv2rJT0qadfWRksb+9J8Wm0F8HlgX9sPrUXfoscpE2xFREQNuUKJiIgqEigREVFFAiUiIqpIoERERBUva4C80W7zzTf31KlTR7obERGjyqJFix6yPbm9fEwHytSpU+nv7x/pbkREjCqSOo0jl1teERFRRwIlIiKqSKBEREQVCZSIiKiiq4EiaXaZhW5A0rEd1k+UdH5Zv1DS1FI+SdIvysxxp7Zts4ukG8s2p7SNrIqkz5ZZ+DJbXETEetS1QCkTFp0G7EMzKumBktpnyTsEeMT2dOBkXhy6+w80A9l1mvHtG8ChNAPgzQBmt+xzCrA38Lt6RxIREWuim1cos4AB20tsPwucB8xpqzMHOKssXwjsJUm2n7R9FU2wvEDSlsDGtq8pkwidTTOl66CTaUZBzYiXERHrWTcDZStWnV1uKavO7rZKHdsraYb8nsTQtirtvKRNSXNoZqu7YXWdknSYpH5J/cuXL1+T44iIiDXQEw/lJW0IfAH4x+Hq2j7ddp/tvsmTX/JFz4iIWEfdDJRlwJSW11vz0ulCX6gjaTywCc3kPatrc+sObb4ZmAbcIOmuUv4rSa9/SQsREdEV3QyU64AZkqZJmgDMpZnBrtUCYF5Z3h+4zKuZ8cv2fcDvJe1aPt11EPBD2zfa3sL2VNtTaW6F7Wz7/srHFBERQ+jaWF62V0o6ArgEGAecYXuxpBOAftsLgPnAOZIGgIdpQgeAcqWxMTBB0n7A3rZvBj4NnAlsAPy0/IuIiBE2pqcA7uvrcwaHjIhYO5IW2e5rL++Jh/IRETHyEigREVFFAiUiIqpIoERERBUJlIiIqCKBEhERVSRQIiKiigRKRERUkUCJiIgqEigREVFFAiUiIqpIoERERBUJlIiIqCKBEhERVSRQIiKiigRKRERUkUCJiIgqEigREVFFAiUiIqpIoERERBUJlIiIqCKBEhERVSRQIiKiigRKRERUkUCJiIgqEigREVFFAiUiIqpIoERERBUJlIiIqCKBEhERVSRQIiKiiq4GiqTZkm6TNCDp2A7rJ0o6v6xfKGlqKZ8k6ReSnpB0ats2u0i6sWxziiSV8pMk3SrpN5K+L2nTbh5bRESsqmuBImkccBqwDzATOFDSzLZqhwCP2J4OnAycWMr/AHwROKZD098ADgVmlH+zS/nPgB1s/xlwO3BcvaOJiIjhdPMKZRYwYHuJ7WeB84A5bXXmAGeV5QuBvSTJ9pO2r6IJlhdI2hLY2PY1tg2cDewHYPtS2ytL1WuArbtxUBER0Vk3A2Ur4J6W10tLWcc6JQweAyYN0+bSYdoE+Cvgp50akHSYpH5J/cuXL1/tAURExJrruYfykv4eWAl8u9N626fb7rPdN3ny5PXbuYiIHtbNQFkGTGl5vXUp61hH0nhgE2DFMG223spapU1JBwP7Ap8ot8QiImI96WagXAfMkDRN0gRgLrCgrc4CYF5Z3h+4bHVBYPs+4PeSdi2f7joI+CE0nygDPg982PZTdQ8lIiKGM75bDdteKekI4BJgHHCG7cWSTgD6bS8A5gPnSBoAHqYJHQAk3QVsDEyQtB+wt+2bgU8DZwIb0DwnGXxWciowEfhZ+STxNbb/plvHFxERq9JYvjPU19fn/v7+ke5GRMSoImmR7b728p57KB8RESMjgRIREVUkUCIioooESkREVJFAiYiIKhIoERFRRQIlIiKqSKBEREQVCZSIiKgigRIREVUkUCIioooESkREVJFAiYiIKhIoERFRRQIlIiKqSKBEREQVCZSIiKgigRIREVUkUCIioooESkREVJFAiYiIKhIoERFRRQIlIiKqSKBEREQVCZSIiKgigRIREVUkUCIioooESkREVJFAiYiIKhIoERFRRQIlIiKq6GqgSJot6TZJA5KO7bB+oqTzy/qFkqaW8kmSfiHpCUmntm2zi6QbyzanSFIp30zSzyTdUX6+tpvHFhERq+paoEgaB5wG7APMBA6UNLOt2iHAI7anAycDJ5byPwBfBI7p0PQ3gEOBGeXf7FJ+LPBz2zOAn5fXERGxnnTzCmUWMGB7ie1ngfOAOW115gBnleULgb0kyfaTtq+iCZYXSNoS2Nj2NbYNnA3s16Gts1rKIyJiPehmoGwF3NPyemkp61jH9krgMWDSMG0uHaLN19m+ryzfD7yuUwOSDpPUL6l/+fLla3IcERGxBnryoXy5evEQ60633We7b/Lkyeu5ZxERvaubgbIMmNLyeutS1rGOpPHAJsCKYdrceog2Hyi3xAZvjT24zj2PiIi11s1AuQ6YIWmapAnAXGBBW50FwLyyvD9wWbm66Kjc0vq9pF3Lp7sOAn7Yoa15LeUREbEejO9Ww7ZXSjoCuAQYB5xhe7GkE4B+2wuA+cA5kgaAh2lCBwBJdwEbAxMk7Qfsbftm4NPAmcAGwE/LP4CvAhdIOgS4G/hYt44tIiJeSqu5IOh5fX197u/vH+luRESMKpIW2e5rL+/Jh/IREbH+JVAiIqKKBEpERFSRQImIiCoSKBERUUUCJSIiqkigREREFasNFElntizPW03ViIgY44a7QtmxZfmobnYkIiJGt+ECZex+jT4iItbKcGN5bS3pFEAtyy+wfWTXehYREaPKcIHyuZblDHoVERFDWm2g2D5rdesjIiIGrTZQJLXPX7IK2x+u253R4fj/vZib7/39SHcjImKdzXzDxnzpQ9tXbXO4W1670cz5fi6wkOZZSkRExEsMFyivB94HHAh8HPgxcK7txd3u2J+y2qkeEdELVvuxYdvP277Y9jxgV2AAuLzMxBgREfGCYacAljQR+CDNVcpU4BTg+93tVkREjDbDPZQ/G9gB+AlwvO2b1kuvIiJi1BnuCuWTwJM0w64cJWnwm/MCbHvjbnYuIiJGj+G+h5LRiCMiYo0Md8vrVcDfANOB3wBn2F65PjoWERGjy3BXIGcBfcCNwAeAf+l6jyIiYlQa7hnKTNtvA5A0H7i2+12KiIjRaLgrlOcGF3KrKyIiVme4K5QdJQ0OWiVgg/I6n/KKiIhVDPcpr3HrqyMRETG65WPBERFRRQIlIiKqSKBEREQVCZSIiKiiq4Eiabak2yQNSDq2w/qJks4v6xdKmtqy7rhSfpuk97eUHyXpJkmLJR3dUr6TpGskXS+pX9Ksbh5bRESsqmuBImkccBqwDzATOFDSzLZqhwCP2J4OnAycWLadCcwFtgdmA1+XNE7SDsChwCxgR2BfSdNLW/9EMyLyTsA/ltcREbGedPMKZRYwYHuJ7WeB84A5bXXm0AzvAnAhsJcklfLzbD9j+06aib1mAdsBC20/Vb5oeQXwkbK9gcHvxWwC3Nul44qIiA66GShb0cxHP2hpKetYpwTEY8Ck1Wx7E7CHpEmSNqQZX2xKqXM0cJKke4B/Bo7r1ClJh5VbYv3Lly9f96OLiIhVjKqH8rZvobktdilwMXA98HxZ/bfAZ2xPAT4DzB+ijdNt99numzx5cvc7HRExRnQzUJbx4tUDwNalrGMdSeNpblWtWN22tufb3sX2nsAjwO2lzjzgorL8XZpbZBERsZ50M1CuA2ZImiZpAs1D9gVtdRbQBAHA/sBltl3K55ZPgU0DZlBGOpa0Rfm5Dc3zk++U7e8F/qIsvwe4oytHFRERHQ03OOQ6s71S0hHAJcA4msm5Fks6Aei3vYDmttQ5kgaAh2lCh1LvAuBmYCVwuO3BW1vfkzSJZiTkw20/WsoPBf6tXOn8ATisW8cWEREvpeaCYGzq6+tzf3//SHcjImJUkbTIdl97+ah6KB8REX+6EigREVFFAiUiIqpIoERERBUJlIiIqCKBEhERVSRQIiKiigRKRERUkUCJiIgqEigREVFFAiUiIqpIoERERBUJlIiIqCKBEhERVSRQIiKiigRKRERUkUCJiIgqEigREVFFAiUiIqpIoERERBUJlIiIqCKBEhERVSRQIiKiigRKRERUkUCJiIgqEigREVFFAiUiIqpIoERERBUJlIiIqCKBEhERVSRQIiKiiq4GiqTZkm6TNCDp2A7rJ0o6v6xfKGlqy7rjSvltkt7fUn6UpJskLZZ0dFt7fyfp1rLun7p5bBERsarx3WpY0jjgNOB9wFLgOkkLbN/cUu0Q4BHb0yXNBU4EDpA0E5gLbA+8Afg/krYFtgMOBWYBzwIXS/qR7QFJ7wbmADvafkbSFt06toiIeKluXqHMAgZsL7H9LHAezRt+qznAWWX5QmAvSSrl59l+xvadwEBpbztgoe2nbK8ErgA+Urb/W+Crtp8BsP1gF48tIiLadDNQtgLuaXm9tJR1rFMC4jFg0mq2vQnYQ9IkSRsCHwCmlDrblnULJV0h6e2dOiXpMEn9kvqXL1/+sg4wIiJeNKoeytu+hea22KXAxcD1wPNl9XhgM2BX4HPABeVqp72N02332e6bPHnyeul3RMRY0M1AWcaLVw8AW5eyjnUkjQc2AVasblvb823vYntP4BHg9lJnKXCRG9cCfwQ2r3pEERExpG4GynXADEnTJE2geci+oK3OAmBeWd4fuMy2S/nc8imwacAM4FqAwYftkraheX7ynbL9D4B3l3XbAhOAh7pzaBER0a5rn/KyvVLSEcAlwDjgDNuLJZ0A9NteAMwHzpE0ADxMEzqUehcANwMrgcNtD97a+p6kScBzpfzRUn4GcIakm2g+ATavhFNERKwHGsvvuX19fe7v7x/pbkREjCqSFtnuay8fVQ/lIyLiT1cCJSIiqkigREREFQmUiIioIoESERFVJFAiIqKKBEpERFSRQImIiCoSKBERUUUCJSIiqkigREREFQmUiIioIoESERFVJFAiIqKKBEpERFSRQImIiCoSKBERUUUCJSIiqkigREREFQmUiIioIoESERFVJFAiIqKKBEpERFSRQImIiCoSKBERUUUCJSIiqkigREREFQmUiIioIoESERFVJFAiIqKKBEpERFTR1UCRNFvSbZIGJB3bYf1ESeeX9QslTW1Zd1wpv03S+1vKj5J0k6TFko7u0OZnJVnS5t06roiIeKmuBYqkccBpwD7ATOBASTPbqh0CPGJ7OnAycGLZdiYwF9gemA18XdI4STsAhwKzgB2BfSVNb9nnFGBv4HfdOq6IiOism1cos4AB20tsPwucB8xpqzMHOKssXwjsJUml/Dzbz9i+Exgo7W0HLLT9lO2VwBXAR1raOxn4POBuHVRERHTWzUDZCrin5fXSUtaxTgmIx4BJq9n2JmAPSZMkbQh8AJgCIGkOsMz2DavrlKTDJPVL6l++fPm6HltERLQZP9IdWBu2b5F0InAp8CRwPfB8CZcv0NzuGq6N04HTAfr6+nIlExFRSTevUJZRrh6KrUtZxzqSxgObACtWt63t+bZ3sb0n8AhwO/BmYBpwg6S7Sv1fSXp95WOKiIghdDNQrgNmSJomaQLNQ/YFbXUWAPPK8v7AZbZdyueWT4FNA2YA1wJI2qL83Ibm+cl3bN9oewvbU21PpblFtrPt+7t4fBER0aJrt7xsr5R0BHAJMA44w/ZiSScA/bYXAPOBcyQNAA/ThA6l3gXAzcBK4HDbz5emvydpEvBcKX+0W8cQERFrTs0FwdjU19fn/v7+ke5GRMSoImmR7b728nxTPiIiqkigREREFQmUiIioYkw/Q5G0HLh7HTffHHioYndGgxzz2JBjHhtezjG/0fbk9sIxHSgvh6T+Tg+lelmOeWzIMY8N3Tjm3PKKiIgqEigREVFFAmXdnT7SHRgBOeaxIcc8NlQ/5jxDiYiIKnKFEhERVSRQIiKiigTKOpA0u8x1PyDp2JHuT22Spkj6haSbJS2WdFQp30zSzyTdUX6+dqT7WluZavrXkn5UXk+TtLCc6/PLyNk9Q9Kmki6UdKukWyTt1uvnWdJnyn/XN0k6V9Kreu08SzpD0oOSbmop63he1TilHPtvJO28rvtNoKwlSeOA04B9gJnAgZJmjmyvqlsJfNb2TGBX4PByjMcCP7c9A/h5ed1rjgJuaXl9InCy7ek08+8cMiK96p5/Ay62/VZgR5pj79nzLGkr4Eigz/YONCOhz6X3zvOZwOy2sqHO6z40U4TMAA4DvrGuO02grL1ZwIDtJbafBc4D5oxwn6qyfZ/tX5Xlx2neZLaiOc6zSrWzgP1GpINdImlr4IPAf5TXAt4DXFiq9NQxS9oE2JNmGglsP1umg+jp80wzbccGZVK/DYH76LHzbPuXNFOCtBrqvM4BznbjGmBTSVuuy34TKGtvqPnue5KkqcCfAwuB19m+r6y6H3jdSPWrS/4V+Dzwx/J6EvCo7ZXlda+d62nAcuCb5Tbff0h6NT18nm0vA/4Z+B1NkDwGLKK3z/Ogoc5rtfe0BEoMSdJGwPeAo23/vnVdmVmzZz5zLmlf4EHbi0a6L+vReGBn4Bu2/xx4krbbWz14nl9L8xf5NOANwKt56a2hntet85pAWXtDznffSyS9kiZMvm37olL8wOClcPn54Ej1rwv+E/BhSXfR3MZ8D83zhU3LrRHovXO9FFhqe2F5fSFNwPTyeX4vcKft5bafAy6iOfe9fJ4HDXVeq72nJVDW3nXAjPKpkAk0D/QWjHCfqirPDuYDt9j+WsuqBcC8sjwP+OH67lu32D7O9ta2p9Kc08tsfwL4BbB/qdZrx3w/cI+kt5SivWim3e7Z80xzq2tXSRuW/84Hj7lnz3OLoc7rAuCg8mmvXYHHWm6NrZV8U34dSPoAzf32ccAZtr8ysj2qS9LuwJXAjbz4POELNM9RLgC2oRn2/2O22x/8jXqS3gUcY3tfSW+iuWLZDPg18Enbz4xg96qStBPNhxAmAEuAT9H8odmz51nS8cABNJ9m/DXw1zTPDHrmPEs6F3gXzRD1DwBfAn5Ah/NagvVUmlt/TwGfsr1Oc6MnUCIioorc8oqIiCoSKBERUUUCJSIiqkigREREFQmUiIioIoESo56k5yVdX0aP/a6kDddi24MlnbqW+3tiiPITJL23LF8uqa8s/6SM6ruppE+vzb6G6cdJZdTck9Zyuz5Jp7yM/b5wnBGt8rHhGPUkPWF7o7L8bWBR6xcyJY1vGaepfduDaUaePWJd9reaOpfTfJelv6VsKvCjMsrtyybpMWAz28/XaC/i5coVSvSaK4Hpkt4l6UpJC4Cby5wX35R0YxkI8d0t20wpVxR3SPrSYKGkH0haVK4CDmvdiaSTS/nPJU0uZWdK2p82ku6StDnwVeDN5WrqJElnS9qvpd63Jc1p21al7k2l7weU8gXARsCiwbKWbW4sV0OStELSQaX8bEnvK7+bwflevqxm7ozLJS2RdGQpn6pmfpT/VY7zUkkbtB9nObbjJf2q7PetpXyymjk3FqsZdPLu8juIHpZAiZ6hZiymfWi+4Q/NuFRH2d4WOJxmTLy3AQcCZ0l6Vak3C/jPwJ8BHx28VQX8le1dgD7gSEmTSvmrgX7b2wNX0HwLeU0cC/zW9k62P0czvM3Bpe+bAO8Efty2zUeAnWjmKnkvcJKkLW1/GHi6tHV+2zZX04xPtT3Nt9/3KOW7Af+3Q7/eCry//B6+pGYcN2jmxzitHOejNL+jTh6yvTPNPBrHlLIv0Qxfsz3NGGHbDLFt9JAESvSCDSRdD/TTjNU0v5Rfa/vOsrw78C0A27fSDD2xbVn3M9srbD9NM1jg7qX8SEk3ANfQDJ43o5T/ERh8E/9WS/21YvsKmnHhJtOE3Pc63JrbHTjX9vO2H6AJsLcP0/SVNPOc7EnzJv82NRNLPWL7yQ71f2z7GdsP0QwYODis+Z22ry/Li4CpQ+zvog51dqcZygTbF9NMWhU9bvzwVSL+5D1te6fWgmZ4Ijq9eXbS/iDRZTyv9wK72X6qPBN5FZ29nAeRZwOfpBmQ8lMvo51Wv6S5ItsG+HvgL2kGPrxyiPqtY1Y9z4vvC+3lGwyzfeu2MQblCiXGiiuBTwBI2pbmzfa2su59aubb3oBmFrurgU1o/qJ/qjwX2LWlrVfw4si0HweuWsM+PA68pq3sTOBoANs3D9HvA9TMdT+Z5qrj2tXtxPY9NIMCzrC9pPTvGJqgWV+uBj4GIGlvoKfmpY/OEigxVnwdeIWkG2luVx3cMprstTRzv/yG5rZTP3AxMF7SLTQP069paetJYJakm2jmTTlhTTpgewVwdXnAflIpe4BmiuVvDrHZ90u/bgAuAz5fhp0fzkLg9rJ8Jc1oumsafDUcD+xdfkcfpZkh8PH1uP8YAfnYcMQIUvOdmRuBnW0/NtL9qUXSROB52ysl7UYzK+ROI9yt6LLc74wYIeXLgfOBk3spTIptgAskvQJ4Fjh0hPsT60GuUCIiooo8Q4mIiCoSKBERUUUCJSIiqkigREREFQmUiIio4v8DtwsHLnxXPX8AAAAASUVORK5CYII=\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "bandit = Pmf.from_seq(range(101))\n", "bandit.plot()\n", "decorate_bandit(title=\"Prior Distribution\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- We are assuming uniform prior distribution here for probability" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def likelihood_bandit(data, hypo):\n", " x = hypo/100\n", " if data == \"W\":\n", " return x\n", " else:\n", " return 1-x" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "actual_probs = [0.1, 0.2, 0.3, 0.4]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def posterior(n_w=1, n_l=9):\n", " bandit = Pmf.from_seq(range(101))\n", " outcomes = 'W'*n_w+\"L\"*n_l\n", " bandit.plot(color='steelblue', label='Prior', linestyle=\"--\")\n", " for data in outcomes:\n", " bandit.update(likelihood_bandit, data)\n", " bandit.plot(color='steelblue', label='Posterior')\n", " plt.legend()\n", " decorate_bandit(title=\"Prior vs Posterior\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "441e958e88894834954841fe9e74654b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=1, description='n_w', max=10), IntSlider(value=9, description='n_l', max…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "interactive(posterior, n_w=(0,10), n_l=(0,10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulate Machines Based on Given Probabilities" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from random import random\n", "from collections import Counter\n", "\n", "counter = Counter()\n", "\n", "\n", "def flip(p):\n", " return random()<p\n", "\n", "def play(i):\n", " counter[i] += 1\n", " p = actual_probs[i]\n", " if flip(p):\n", " return 'W'\n", " else:\n", " return 'L'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('W', 'L', 'W', 'W')" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "play(1), play(2), play(3), play(0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Playing machines 20 times" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "results = []\n", "for i in range(20):\n", " single = []\n", " for j in range(4):\n", "# print(i,j)\n", " single.append(play(j))\n", " results.append(single)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "counter[4]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0, 1, 2, 3]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(range(4))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['L', 'L', 'L', 'L'],\n", " ['L', 'W', 'L', 'W'],\n", " ['L', 'W', 'L', 'L'],\n", " ['L', 'W', 'W', 'L'],\n", " ['L', 'W', 'L', 'W'],\n", " ['L', 'L', 'L', 'L'],\n", " ['L', 'L', 'W', 'L'],\n", " ['L', 'W', 'W', 'L'],\n", " ['L', 'L', 'L', 'W'],\n", " ['W', 'W', 'L', 'L'],\n", " ['L', 'L', 'L', 'L'],\n", " ['L', 'L', 'W', 'L'],\n", " ['W', 'W', 'W', 'L'],\n", " ['L', 'W', 'L', 'L'],\n", " ['L', 'W', 'W', 'W'],\n", " ['L', 'W', 'L', 'W'],\n", " ['L', 'W', 'W', 'L'],\n", " ['W', 'L', 'L', 'L'],\n", " ['L', 'L', 'L', 'L'],\n", " ['L', 'L', 'L', 'L']]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0 0.009901\n", " 1 0.009901\n", " 2 0.009901\n", " 3 0.009901\n", " 4 0.009901\n", " ... \n", " 96 0.009901\n", " 97 0.009901\n", " 98 0.009901\n", " 99 0.009901\n", " 100 0.009901\n", " Length: 101, dtype: float64,\n", " 0 0.009901\n", " 1 0.009901\n", " 2 0.009901\n", " 3 0.009901\n", " 4 0.009901\n", " ... \n", " 96 0.009901\n", " 97 0.009901\n", " 98 0.009901\n", " 99 0.009901\n", " 100 0.009901\n", " Length: 101, dtype: float64,\n", " 0 0.009901\n", " 1 0.009901\n", " 2 0.009901\n", " 3 0.009901\n", " 4 0.009901\n", " ... \n", " 96 0.009901\n", " 97 0.009901\n", " 98 0.009901\n", " 99 0.009901\n", " 100 0.009901\n", " Length: 101, dtype: float64,\n", " 0 0.009901\n", " 1 0.009901\n", " 2 0.009901\n", " 3 0.009901\n", " 4 0.009901\n", " ... \n", " 96 0.009901\n", " 97 0.009901\n", " 98 0.009901\n", " 99 0.009901\n", " 100 0.009901\n", " Length: 101, dtype: float64]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prior = range(101)\n", "\n", "beliefs = [Pmf.from_seq(prior) for i in range(4)]\n", "beliefs" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "options = dict(xticklabels='invisible', yticklabels='invisible')\n", "\n", "def plot(beliefs,label_pre='Prior',**options):\n", " sns.set_context('paper')\n", " for i, b in enumerate(beliefs):\n", " plt.subplot(2,2, i+1, label=f\"{label_pre}{i}\")\n", " b.plot(label=f\"Machine {i}\")\n", " plt.gca().set_yticklabels([])\n", " plt.legend()\n", " plt.tight_layout()\n", " sns.set_context('talk')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 4 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot(beliefs)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def update(beliefs, i, outcome):\n", " beliefs[i].update(likelihood_bandit, outcome)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 4 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "prior = range(101)\n", "\n", "counter = Counter()\n", "\n", "def flip(p):\n", " return random()<p\n", "\n", "def play(i):\n", " counter[i] += 1\n", " p = actual_probs[i]\n", " if flip(p):\n", " return 'W'\n", " else:\n", " return 'L'\n", "\n", "def update(beliefs, i, outcome):\n", " beliefs[i].update(likelihood_bandit, outcome)\n", " \n", "beliefs = [Pmf.from_seq(prior) for i in range(4)]\n", "# beliefs\n", "plot(beliefs, label_pre='Prior')\n", "for i in range(20):\n", " for j in range(4):\n", " update(beliefs, j, play(j))\n", " \n", "plot(beliefs, label_pre='Posterior')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9.12 [ 2. 21.]\n", "22.73 [10. 38.]\n", "50.00 [33. 67.]\n", "27.27 [13. 44.]\n" ] } ], "source": [ "for i, b in enumerate(beliefs):\n", " print(f\"{b.mean():0.02f}\", b.credible_interval(0.9))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bayesian Bandit " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Idea is to choose best course of action while running the experiment/ simulation\n", "\n", "- Choice internally call np.random.choice on quantities \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "40" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# def choose(beliefs):\n", "# ps = []\n", "\n", "beliefs[3].choice()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Pmf.choice?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n", " 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,\n", " 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,\n", " 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,\n", " 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,\n", " 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,\n", " 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,\n", " 91, 92, 93, 94, 95, 96, 97, 98, 99, 100])" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beliefs[3].qs\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([0, 11, 21, 40], 3)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ps = [b.choice() for b in beliefs]\n", "ps, np.argmax(ps)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def choose(beliefs):\n", " ps = [b.choice() for b in beliefs]\n", " return np.argmax(ps)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "choose(beliefs)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def choose_play_update(beliefs, verbose=False):\n", " machine = choose(beliefs)\n", " \n", " outcome = play(machine)\n", " \n", " update(beliefs,machine,outcome)\n", " \n", " if verbose:\n", " print(machine, outcome, beliefs[machine].mean())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3 W 42.85714285714286\n" ] } ], "source": [ "choose_play_update(beliefs, verbose=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "prior = range(101)\n", "beliefs = [Pmf.from_seq(prior) for i in range(4)]\n", "counter = Counter()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 4 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "num_plays = 200\n", "for i in range(num_plays):\n", " choose_play_update(beliefs)\n", " \n", "plot(beliefs)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "15.000082130288831 [ 4. 30.]\n", "18.181782304462693 [ 7. 33.]\n", "21.2121212181695 [11. 34.]\n", "33.834586466165426 [27. 41.]\n" ] } ], "source": [ "for i,b in enumerate(beliefs):\n", " print(b.mean(), b.credible_interval(0.9))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 18\n", "1 20\n", "2 31\n", "3 131\n" ] } ], "source": [ "for machine, count in sorted(counter.items()):\n", " print(machine , count)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 4 }