{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can order print and ebook versions of *Think Bayes 2e* from\n", "[Bookshop.org](https://bookshop.org/a/98697/9781492089469) and\n", "[Amazon](https://amzn.to/334eqGo)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Testing" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:57.008876Z", "iopub.status.busy": "2021-04-16T19:35:57.008345Z", "iopub.status.idle": "2021-04-16T19:35:57.010962Z", "shell.execute_reply": "2021-04-16T19:35:57.010380Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "# install empiricaldist if necessary\n", "\n", "try:\n", " import empiricaldist\n", "except ImportError:\n", " !pip install empiricaldist\n", " import empiricaldist" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:57.015477Z", "iopub.status.busy": "2021-04-16T19:35:57.014870Z", "iopub.status.idle": "2021-04-16T19:35:57.017060Z", "shell.execute_reply": "2021-04-16T19:35:57.017656Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "# Get utils.py\n", "\n", "from os.path import basename, exists\n", "\n", "def download(url):\n", " filename = basename(url)\n", " if not exists(filename):\n", " from urllib.request import urlretrieve\n", " local, _ = urlretrieve(url, filename)\n", " print('Downloaded ' + local)\n", " \n", "download('https://github.com/AllenDowney/ThinkBayes2/raw/master/soln/utils.py')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:57.022776Z", "iopub.status.busy": "2021-04-16T19:35:57.021815Z", "iopub.status.idle": "2021-04-16T19:35:57.803761Z", "shell.execute_reply": "2021-04-16T19:35:57.802992Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "from utils import set_pyplot_params\n", "set_pyplot_params()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In <<_TheEuroProblem>> I presented a problem from David MacKay's book, [*Information Theory, Inference, and Learning Algorithms*](http://www.inference.org.uk/mackay/itila/p0.html):\n", "\n", "\"A statistical statement appeared in *The Guardian* on Friday January 4, 2002:\n", "\n", "> When spun on edge 250 times, a Belgian one-euro coin came up heads 140 times and tails 110. \\`It looks very suspicious to me,' said Barry Blight, a statistics lecturer at the London School of Economics. \\`If the coin were unbiased, the chance of getting a result as extreme as that would be less than 7%.'\n", "\n", "\"But [MacKay asks] do these data give evidence that the coin is biased rather than fair?\"\n", "\n", "We started to answer this question in <<_EstimatingProportions>>; to review, our answer was based on these modeling decisions:\n", "\n", "* If you spin a coin on edge, there is some probability, $x$, that it will land heads up.\n", "\n", "* The value of $x$ varies from one coin to the next, depending on how the coin is balanced and possibly other factors.\n", "\n", "Starting with a uniform prior distribution for $x$, we updated it with the given data, 140 heads and 110 tails. Then we used the posterior distribution to compute the most likely value of $x$, the posterior mean, and a credible interval.\n", "\n", "But we never really answered MacKay's question: \"Do these data give evidence that the coin is biased rather than fair?\"\n", "\n", "In this chapter, finally, we will." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Estimation\n", "\n", "Let's review the solution to the Euro problem from <<_TheBinomialLikelihoodFunction>>. We started with a uniform prior." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:57.810691Z", "iopub.status.busy": "2021-04-16T19:35:57.810259Z", "iopub.status.idle": "2021-04-16T19:35:57.812763Z", "shell.execute_reply": "2021-04-16T19:35:57.812378Z" } }, "outputs": [], "source": [ "import numpy as np\n", "from empiricaldist import Pmf\n", "\n", "xs = np.linspace(0, 1, 101)\n", "uniform = Pmf(1, xs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we used the binomial distribution to compute the probability of the data for each possible value of $x$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:57.816818Z", "iopub.status.busy": "2021-04-16T19:35:57.816328Z", "iopub.status.idle": "2021-04-16T19:35:57.818361Z", "shell.execute_reply": "2021-04-16T19:35:57.817986Z" } }, "outputs": [], "source": [ "from scipy.stats import binom\n", "\n", "k, n = 140, 250\n", "likelihood = binom.pmf(k, n, xs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We computed the posterior distribution in the usual way." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:57.823943Z", "iopub.status.busy": "2021-04-16T19:35:57.823225Z", "iopub.status.idle": "2021-04-16T19:35:57.833447Z", "shell.execute_reply": "2021-04-16T19:35:57.833883Z" }, "tags": [ "remove-output" ] }, "outputs": [ { "data": { "text/plain": [ "0.3984063745019918" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "posterior = uniform * likelihood\n", "posterior.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what it looks like." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:57.838678Z", "iopub.status.busy": "2021-04-16T19:35:57.837996Z", "iopub.status.idle": "2021-04-16T19:35:58.041887Z", "shell.execute_reply": "2021-04-16T19:35:58.042248Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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69GjB4KCgpq835Vce+216N27NyorKzF37lyb9yPfxIAln6HT6WAymfDrr7/Kz+Xn50On0wFovIXmxRdfxLFjx/Ddd9/hq6++km9J8fNr+ldFr9fDz88PxcXFKC8vl39MJhN69uwpb3f5fpfXU1BQID+uq6tDcXGxXM+V9u/SpQsCAgJw6tQp+bnCwsJWt7fn+9ny+QBgMplw9uzZJp8vff+wsDDU1NTIr9XU1KCystLm9778+ABN//+y1+XvV1JSArPZbNf7rVy5EmazGQMGDMATTzzRrjrIdzBgyWf07NkTY8aMwf/7f/8P1dXVKCwsxLJlyzBr1iwAwKefforjx4/DarVCq9UiICAA/v7+AIDo6GicPHlSfq+YmBhMnjwZ9957L86fPw+g8Rf2Rx99ZHM9M2bMwOuvv468vDyYzWY8+eST6NmzJ4YOHWrT/mq1GrfffjueeuoplJeXo7i4GC+99FKr29vz/Wzl5+eHxx9/HLW1tTh27BhWrVolX9ccPHgwvvvuOxw9ehQmkwmPP/54k3t0o6OjcerUqVZnJ0+YMAFnz57FP/7xDzQ0NGDXrl3YtGkTZs6caXedQOPxXrZsGYqKimA0GvHggw9i3Lhx6NGjh03779+/H8899xz+9a9/YdOmTVi/fj3+85//tKsW8g0MWPIpmzZtQm1tLeLi4nDttddi4sSJeOSRRwAAJ06cwE033YTw8HAkJibimmuuwT333AMAeOCBB/Dll18iMjISkyZNAtA4AUg6NazVajFy5Ejs37/f5lpmzpyJxYsXY9KkSYiJicHBgwfx73//Ww49W7z22mvy9eSxY8ciPT291W3t/X62CA8PR2pqKnr37o3rrrsOM2fOlP/BMnbsWCxYsADDhw9HQkICkpOTER4eLu972223QavVokuXLi02rIiKisLnn3+OjRs3onPnzpg/fz7++c9/YsSIETbXd6nHH38cN954I6655hrEx8ejvr4eGzdutGlfo9GIP/3pT/jrX/+K5ORk6PV6vPXWW5g1a1aTETzRpdhogoiISAEcwRIRESmAAUtERKQABiwREZECGLBEREQKsH26oofQarXtvk+OiIjIHgaDocn93ZfyuoDV6XTIy8tzdRlEROQDEhMTW32Np4iJiIgUwIAlIiJSgNedIiYiuhR76ZAjXNrm01YMWCLySlarFUVFRU0WHCBq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kpISefm2NWvWYMyYMXbVP3r0aKxZswYAkJOTg/Lycrtn8V5q/Pjx8jVQAMjNzYUQApWVlYiJiYFarcb333+PgwcPAgAGDBiA4uJi/PjjjwAaFwyXnDhxAnq9HvPnz8eSJUuwd+/eZp+XlJTUZMT9448/4vXXX8fBgwfx3//+F1988YX82rFjx+SRMpHSOIIlcoDMzEwsXLgQf/nLXxAZGYn169fLr40ZMwYLFy7Ezz//jLS0NMybN++K+1zu/vvvx9ChQ6HT6bB9+3b5+aCgIGzatAnz589HXV0ddDod1q5da1ftr776KubOnYs1a9YgKCgI//rXvxAQEGDnEWj6fvfddx+Sk5NhtVqh1+uxbds23HvvvZg6dSo++eQTJCYmYsiQIfJ3eOedd3DbbbchKipKXvcVAP7v//4P7777LgIDAxEcHIw33nij2edNmDBBft5sNmPGjBl48803ER0djY0bN+Lmm2/G3r170blzZ3z55ZdYtmxZu78bkT14mw6RgtatW4fdu3fj7bffdnUpXu3OO+/Egw8+iKFDh7a6zalTpzB79mxkZWU5sTLyZTxFTEQe78UXX8T58+fb3KaoqAivvvqqkyoi4giWiIhIERzBEhERKYABS0REpAAGLBERkQIYsERERApgwBIRESmAAUtERKSA/w+YWS18XcI95QAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from utils import decorate\n", "\n", "posterior.plot(label='140 heads out of 250')\n", "\n", "decorate(xlabel='Proportion of heads (x)',\n", " ylabel='Probability',\n", " title='Posterior distribution of x')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, the posterior mean is about 0.56, with a 90% credible interval from 0.51 to 0.61." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.046639Z", "iopub.status.busy": "2021-04-16T19:35:58.046025Z", "iopub.status.idle": "2021-04-16T19:35:58.048789Z", "shell.execute_reply": "2021-04-16T19:35:58.048386Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.5595238095238095 [0.51 0.61]\n" ] } ], "source": [ "print(posterior.mean(), \n", " posterior.credible_interval(0.9))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The prior mean was 0.5, and the posterior mean is 0.56, so it seems like the data is evidence that the coin is biased.\n", "\n", "But, it turns out not to be that simple." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Evidence\n", "\n", "In <<_OliversBlood>>, I said that data are considered evidence in favor of a hypothesis, $A$, if the data are more likely under $A$ than under the alternative, $B$; that is if\n", "\n", "$$P(D|A) > P(D|B)$$\n", "\n", "Furthermore, we can quantify the strength of the evidence by computing the ratio of these likelihoods, which is known as the [Bayes factor](https://en.wikipedia.org/wiki/Bayes_factor) and often denoted $K$:\n", "\n", "$$K = \\frac{P(D|A)}{P(D|B)}$$\n", "\n", "So, for the Euro problem, let's consider two hypotheses, `fair` and `biased`, and compute the likelihood of the data under each hypothesis.\n", "\n", "If the coin is fair, the probability of heads is 50%, and we can compute the probability of the data (140 heads out of 250 spins) using the binomial distribution:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.053831Z", "iopub.status.busy": "2021-04-16T19:35:58.053237Z", "iopub.status.idle": "2021-04-16T19:35:58.057509Z", "shell.execute_reply": "2021-04-16T19:35:58.057086Z" } }, "outputs": [ { "data": { "text/plain": [ "0.008357181724918188" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "k = 140\n", "n = 250\n", "\n", "like_fair = binom.pmf(k, n, p=0.5)\n", "like_fair" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's the probability of the data, given that the coin is fair.\n", "\n", "But if the coin is biased, what's the probability of the data? That depends on what \"biased\" means.\n", "If we know ahead of time that \"biased\" means the probability of heads is 56%, we can use the binomial distribution again:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.061641Z", "iopub.status.busy": "2021-04-16T19:35:58.061171Z", "iopub.status.idle": "2021-04-16T19:35:58.063847Z", "shell.execute_reply": "2021-04-16T19:35:58.064196Z" } }, "outputs": [ { "data": { "text/plain": [ "0.05077815959518337" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "like_biased = binom.pmf(k, n, p=0.56)\n", "like_biased" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can compute the likelihood ratio:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.067262Z", "iopub.status.busy": "2021-04-16T19:35:58.066813Z", "iopub.status.idle": "2021-04-16T19:35:58.069918Z", "shell.execute_reply": "2021-04-16T19:35:58.069347Z" } }, "outputs": [ { "data": { "text/plain": [ "6.075990838368477" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "K = like_biased / like_fair\n", "K" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data are about 6 times more likely if the coin is biased, by this definition, than if it is fair.\n", "\n", "But we used the data to define the hypothesis, which seems like cheating. To be fair, we should define \"biased\" before we see the data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Uniformly Distributed Bias\n", "\n", "Suppose \"biased\" means that the probability of heads is anything except 50%, and all other values are equally likely.\n", "\n", "We can represent that definition by making a uniform distribution and removing 50%." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.074465Z", "iopub.status.busy": "2021-04-16T19:35:58.073171Z", "iopub.status.idle": "2021-04-16T19:35:58.077599Z", "shell.execute_reply": "2021-04-16T19:35:58.077998Z" }, "tags": [ "remove-output" ] }, "outputs": [ { "data": { "text/plain": [ "100" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "biased_uniform = uniform.copy()\n", "biased_uniform[0.5] = 0\n", "biased_uniform.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To compute the total probability of the data under this hypothesis, we compute the conditional probability of the data for each value of $x$." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.081758Z", "iopub.status.busy": "2021-04-16T19:35:58.081326Z", "iopub.status.idle": "2021-04-16T19:35:58.082976Z", "shell.execute_reply": "2021-04-16T19:35:58.083364Z" } }, "outputs": [], "source": [ "xs = biased_uniform.qs\n", "likelihood = binom.pmf(k, n, xs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then multiply by the prior probabilities and add up the products:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.088242Z", "iopub.status.busy": "2021-04-16T19:35:58.087311Z", "iopub.status.idle": "2021-04-16T19:35:58.093392Z", "shell.execute_reply": "2021-04-16T19:35:58.092951Z" } }, "outputs": [ { "data": { "text/plain": [ "0.0039004919277707355" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "like_uniform = np.sum(biased_uniform * likelihood)\n", "like_uniform" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So that's the probability of the data under the \"biased uniform\" hypothesis.\n", "\n", "Now we can compute the likelihood ratio of the data under the `fair` and `biased uniform` hypotheses:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.098055Z", "iopub.status.busy": "2021-04-16T19:35:58.097522Z", "iopub.status.idle": "2021-04-16T19:35:58.100321Z", "shell.execute_reply": "2021-04-16T19:35:58.100683Z" } }, "outputs": [ { "data": { "text/plain": [ "2.142596851801358" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "K = like_fair / like_uniform\n", "K" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data are about two times more likely if the coin is fair than if it is biased, by this definition of \"biased\".\n", "\n", "To get a sense of how strong that evidence is, we can apply Bayes's rule.\n", "For example, if the prior probability is 50% that the coin is biased, the prior odds are 1, so the posterior odds are about 2.1 to 1 and the posterior probability is about 68%." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.105140Z", "iopub.status.busy": "2021-04-16T19:35:58.104540Z", "iopub.status.idle": "2021-04-16T19:35:58.107287Z", "shell.execute_reply": "2021-04-16T19:35:58.107715Z" } }, "outputs": [ { "data": { "text/plain": [ "2.142596851801358" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prior_odds = 1\n", "posterior_odds = prior_odds * K\n", "posterior_odds" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.112140Z", "iopub.status.busy": "2021-04-16T19:35:58.111425Z", "iopub.status.idle": "2021-04-16T19:35:58.114066Z", "shell.execute_reply": "2021-04-16T19:35:58.113607Z" } }, "outputs": [], "source": [ "def prob(o):\n", " return o / (o+1)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.118640Z", "iopub.status.busy": "2021-04-16T19:35:58.117930Z", "iopub.status.idle": "2021-04-16T19:35:58.121841Z", "shell.execute_reply": "2021-04-16T19:35:58.121067Z" } }, "outputs": [ { "data": { "text/plain": [ "0.6817918278551087" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "posterior_probability = prob(posterior_odds)\n", "posterior_probability" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Evidence that \"moves the needle\" from 50% to 68% is not very strong." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now suppose \"biased\" doesn't mean every value of $x$ is equally likely. Maybe values near 50% are more likely and values near the extremes are less likely.\n", "We could use a triangle-shaped distribution to represent this alternative definition of \"biased\":" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.129005Z", "iopub.status.busy": "2021-04-16T19:35:58.128299Z", "iopub.status.idle": "2021-04-16T19:35:58.130682Z", "shell.execute_reply": "2021-04-16T19:35:58.131027Z" }, "tags": [ "remove-output" ] }, "outputs": [ { "data": { "text/plain": [ "2500" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ramp_up = np.arange(50)\n", "ramp_down = np.arange(50, -1, -1)\n", "a = np.append(ramp_up, ramp_down)\n", "\n", "triangle = Pmf(a, xs, name='triangle')\n", "triangle.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we did with the uniform distribution, we can remove 50% as a possible value of $x$ (but it doesn't make much difference if we skip this detail)." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.135933Z", "iopub.status.busy": "2021-04-16T19:35:58.135294Z", "iopub.status.idle": "2021-04-16T19:35:58.138207Z", "shell.execute_reply": "2021-04-16T19:35:58.137815Z" }, "tags": [ "remove-output" ] }, "outputs": [ { "data": { "text/plain": [ "0.98" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "biased_triangle = triangle.copy()\n", "biased_triangle[0.5] = 0\n", "biased_triangle.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the triangle prior looks like, compared to the uniform prior." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.173569Z", "iopub.status.busy": "2021-04-16T19:35:58.156145Z", "iopub.status.idle": "2021-04-16T19:35:58.338847Z", "shell.execute_reply": "2021-04-16T19:35:58.337549Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "biased_uniform.plot(label='uniform prior')\n", "biased_triangle.plot(label='triangle prior')\n", "\n", "decorate(xlabel='Proportion of heads (x)',\n", " ylabel='Probability',\n", " title='Uniform and triangle prior distributions')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** Now compute the total probability of the data under this definition of \"biased\" and compute the Bayes factor, compared with the fair hypothesis.\n", "Is the data evidence that the coin is biased?" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.343799Z", "iopub.status.busy": "2021-04-16T19:35:58.343267Z", "iopub.status.idle": "2021-04-16T19:35:58.345785Z", "shell.execute_reply": "2021-04-16T19:35:58.346132Z" } }, "outputs": [ { "data": { "text/plain": [ "0.0069813254648578805" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "like_triangle = np.sum(biased_triangle * likelihood)\n", "like_triangle" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.349999Z", "iopub.status.busy": "2021-04-16T19:35:58.349509Z", "iopub.status.idle": "2021-04-16T19:35:58.352346Z", "shell.execute_reply": "2021-04-16T19:35:58.352665Z" } }, "outputs": [ { "data": { "text/plain": [ "1.1970766535647133" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "K = like_fair / like_triangle\n", "K" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.356295Z", "iopub.status.busy": "2021-04-16T19:35:58.355503Z", "iopub.status.idle": "2021-04-16T19:35:58.357268Z", "shell.execute_reply": "2021-04-16T19:35:58.357642Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "# For this definition of \"biased\", the data are \n", "# very slightly in favor of the fair hypothesis." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bayesian Hypothesis Testing\n", "\n", "What we've done so far in this chapter is sometimes called \"Bayesian hypothesis testing\" in contrast with [statistical hypothesis testing](https://en.wikipedia.org/wiki/Statistical_hypothesis_testing).\n", "\n", "In statistical hypothesis testing, we compute a p-value, which is hard to define concisely, and use it to determine whether the results are \"statistically significant\", which is also hard to define concisely.\n", "\n", "The Bayesian alternative is to report the Bayes factor, $K$, which summarizes the strength of the evidence in favor of one hypothesis or the other.\n", "\n", "Some people think it is better to report $K$ than a posterior probability because $K$ does not depend on a prior probability.\n", "But as we saw in this example, $K$ often depends on a precise definition of the hypotheses, which can be just as controversial as a prior probability.\n", "\n", "In my opinion, Bayesian hypothesis testing is better because it measures the strength of the evidence on a continuum, rather that trying to make a binary determination.\n", "But it doesn't solve what I think is the fundamental problem, which is that hypothesis testing is not asking the question we really care about." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To see why, suppose you test the coin and decide that it is biased after all. What can you do with this answer? In my opinion, not much.\n", "In contrast, there are two questions I think are more useful (and therefore more meaningful):\n", "\n", "* Prediction: Based on what we know about the coin, what should we expect to happen in the future?\n", "\n", "* Decision-making: Can we use those predictions to make better decisions?\n", "\n", "At this point, we've seen a few examples of prediction. For example, in <<_PoissonProcesses>> we used the posterior distribution of goal-scoring rates to predict the outcome of soccer games.\n", "\n", "And we've seen one previous example of decision analysis: In <<_DecisionAnalysis>> we used the distribution of prices to choose an optimal bid on *The Price is Right*.\n", "\n", "So let's finish this chapter with another example of Bayesian decision analysis, the Bayesian Bandit strategy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bayesian Bandits\n", "\n", "If you have ever been to a casino, you have probably seen a slot machine, which is sometimes called a \"one-armed bandit\" because it has a handle like an arm and the ability to take money like a bandit.\n", "\n", "The Bayesian Bandit strategy is named after one-armed bandits because it solves a problem based on a simplified version of a slot machine.\n", "\n", "Suppose that each time you play a slot machine, there is a fixed probability that you win. And suppose that different machines give you different probabilities of winning, but you don't know what the probabilities are.\n", "\n", "Initially, you have the same prior belief about each of the machines, so you have no reason to prefer one over the others. But if you play each machine a few times, you can use the results to estimate the probabilities. And you can use the estimated probabilities to decide which machine to play next.\n", "\n", "At a high level, that's the Bayesian bandit strategy. Now let's see the details." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prior Beliefs\n", "\n", "If we know nothing about the probability of winning, we can start with a uniform prior." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.362415Z", "iopub.status.busy": "2021-04-16T19:35:58.361811Z", "iopub.status.idle": "2021-04-16T19:35:58.364588Z", "shell.execute_reply": "2021-04-16T19:35:58.364200Z" }, "tags": [ "remove-output" ] }, "outputs": [ { "data": { "text/plain": [ "101" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xs = np.linspace(0, 1, 101)\n", "prior = Pmf(1, xs)\n", "prior.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Supposing we are choosing from four slot machines, I'll make four copies of the prior, one for each machine." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.368917Z", "iopub.status.busy": "2021-04-16T19:35:58.368277Z", "iopub.status.idle": "2021-04-16T19:35:58.372099Z", "shell.execute_reply": "2021-04-16T19:35:58.372588Z" } }, "outputs": [], "source": [ "beliefs = [prior.copy() for i in range(4)]" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "This function displays four distributions in a grid." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.378500Z", "iopub.status.busy": "2021-04-16T19:35:58.377897Z", "iopub.status.idle": "2021-04-16T19:35:58.379963Z", "shell.execute_reply": "2021-04-16T19:35:58.380451Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "options = dict(xticklabels='invisible', yticklabels='invisible')\n", "\n", "def plot(beliefs, **options):\n", " for i, pmf in enumerate(beliefs):\n", " plt.subplot(2, 2, i+1)\n", " pmf.plot(label='Machine %s' % i)\n", " decorate(yticklabels=[])\n", " \n", " if i in [0, 2]:\n", " decorate(ylabel='PDF')\n", " \n", " if i in [2, 3]:\n", " decorate(xlabel='Probability of winning')\n", " \n", " plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the prior distributions look like for the four machines." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:58.416688Z", "iopub.status.busy": "2021-04-16T19:35:58.402941Z", "iopub.status.idle": "2021-04-16T19:35:59.013473Z", "shell.execute_reply": "2021-04-16T19:35:59.013020Z" }, "scrolled": false }, "outputs": [ { "data": { "image/png": "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c7OVtUpKSvSTn/wkLvfVs2dPPfroozpw4ID27Nmj1157TZs2bYrLfQNOStYZlKTnnntOf/jDH7R3714NHjxYTzzxRFzul4JFyrjlllu0bt06SdLatWs1Y8aMTtdXVFSopKRE+fn5WrBgQejy48ePa/r06SooKFBhYaHWrFkTum7lypUaPXq0hg8frtdff12SVFtbqxtuuCF0+otf/KJmzpyp3NxcfeUrX9HJkyclSR9++KFuueUWjRkzRkVFRXruuee6ZL788stVUlIiSerdu7cKCwv17rvvxvFRAZyTjDMoSQMGDJAkBYNBnThxIk6PBgc5IU78L+xW47H47FY5k/fSDN399ZKItq2srNS0adM0b948Pf3003rxxRd1//33h65fsWKFMjMzFQwGNXXqVL388ssqKyvT/PnzlZ+fr2eeeUaSOv3V3bdvX9XV1enZZ5/VkiVL9Otf/7rLuvX19Vq9erWGDh2qyZMna/369aqsrNS9996rqqoqlZWVKRAIaPTo0bruuus0aNCgbvM3Nzdrw4YNeuWVV6J5iIAQt+cwmWdwypQp2rlzp3w+nx5//PFYHqYueAWLlJGVlaU+ffro+eef12c/+1l97nOf63T9k08+qZEjR6q4uFi7du3Svn37JEkvv/yy5s+fH9ouMzMzdLqiokKSNGbMGB06dKjbda+++urQofujR48ObffSSy/pwQcfVHFxsSZOnKi2tjYdPHiw2/tobW1VRUWFFi5cqNzc3BgfAcBdyTyDmzZt0vvvv69rrrlGP/7xj2N8BDrjFSziItJXmbbddtttmjNnjn70ox91unzr1q1av369tm3bpv79++u+++4L7UaSzn2EYHp6uqSP319qb28Pu83Z2wWDQdXW1mrgwIFhM3d0dKiyslIlJSWddpsB0UqEOUzGGTzzttXV1br55pv1wAMPRHSbcHgFi5Ry8803a/Hixfra177W6fKWlhYNHDhQ/fv3V3Nzs9avXx+6rqysTD/84Q9D5z/88MO4ZCkvL9eyZctC5+vr67v9Oru5c+cqIyNDS5cujcu6gJuSbQZbWlp05MiR0Pn169crPz8/LutTsEgp/fv316JFi9SvX79Ol99444266KKLlJeXp5kzZ2r8+PGh62pqarRv3z7l5+erqKhIL730UlyyLF++XAcPHlRBQYHy8vL07W9/u8tw79ixQ6tW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LU319fV66623dM011+i+++7rsk1HR4djeX7605+quLg47OXxHu6f/vSnWrZsmerr69W7d++objtlyhR997vfjXntK664Qps2bYr59kh+zCAzmMgo2DiZMGGC/vznP0uScnJy9L3vfU/jx4/XsmXLtH//fo0dO1aFhYUaN26c/vSnP4Vud/ToUZWVlWnEiBG6/fbbQ3+B/vu//7tGjx6t4uJiTZ48Wc3Nzee9zZl/MZ+dbfv27Vq7dq12796tqqoqFRcXa+vWrbrqqqtC36958uRJXXHFFd1+ndt3v/td5efnKz8/P/QX77/8y7/otdde07e+9a0u3xv6wgsvhL6H9cUXX1RaWlrofj//+c/rgw8+6PRK4KmnntJNN92kKVOmaPjw4Z3ub8KECXrwwQf1hS98QUOGDNELL7wgSfrLX/6iYcOGhU4PHTpU3/rWt1RYWKjS0lIdO3ZM0sdfAl9eXq68vDxNmzZN//zP/9zt44Tkxgwyg4mGgo0DY4w2bdoU+h5NSTp16pS2bt2q+++/X7fddpvuv/9+7d27V/Pnz9ftt98e2m7Hjh166qmndODAAZ04cUJPPvmkJOnOO+9UXV2d6uvrdd111+nxxx8/723O55Pva/35z3+u+vp6jR8/XsOGDdOWLVskfbyr6brrrtPFF1/c6XabNm3Sb37zG+3evVu7d+/Wiy++qM2bN+vf/u3fQvf3X//1X51uM378eG3btk2StHXrVpWUlGjbtm3661//qvT09G5/YeTNN9/Uz3/+czU0NGjv3r2dfk2jpaVFO3fu1H//93/rgQce6Pa/7y9/+YtmzJihvXv3auTIkVq5cqUk6V//9V919dVXa//+/XrooYf05ptvRvR4IXkwg8xgIqJgL0BHR4eKi4tVVFSk5uZm/cd//EfousrKSkkfPykbGxtD71PcfPPNevvtt3XixAlJ0g033KDLL79cHo9HM2fO1NatWyVJr7/+ukpLS1VQUKAf//jH2rdvX+i+z3WbWNx5552hIVi5cqXuuOOOLtvU1taqsrJSn/nMZ/SZz3xGt956q1599dWw9zto0CD169dP7777rnbs2KHFixertrZWW7du1fjx47u9zcSJE5WZmamePXtq5MiROnToUOi6iooKSVJJSYnefffdbm+flZWlL3zhC5KkMWPGhG6/bdu20L9HUVFRp/8JI7kxg+fGDLrP1d+DTXafvP/TnYsuukhS9z9vFO7bKT0ej1pbW/WNb3xDb7zxhq688kr98pe/VE1NTdjbxGrSpElauHChdu3apffff7/bwesubyRrjh8/Xr/85S/Vo0cPffnLX9YjjzyiEydO6IYbbuh2+/T09NDptLQ0tbe3d7nO4/EoGAxGffsLeYyQuJjB8JhBd/EK1rIBAwbI6/Vq48aNkj7eBXTVVVepb9++kqTf/OY3OnLkiIwxWrNmjcaNG6eTJ08qGAzq0ksvVUdHh372s591us/ubhOpjIwM/e1vfwudT0tL08yZMzVt2jTNnj2729tMnDhRa9asUWtrq06ePKmnn35aEydOPO9aEyZM0GOPPaZrr71Wffr0UXp6un71q19FlTcexo4dqzVr1kiS/vCHP3R6JYLUxwwyg26hYB2wevVqPf744yosLFRNTY3+8z//M3TdxIkTdddddykvL099+vTRHXfcoQEDBmjhwoUqKirS9ddfrxEjRnS6v+5uE6k5c+bovvvu67Sb5/bbb9fRo0c7vS91pilTpuhLX/qSRo0apVGjRmny5Mm68cYbz7vWuHHj1NjYqAkTJkj6eMguuugiXXbZZRHnjYclS5Zo9+7dKioq0rJly1RUVKSMjAxHM8BdzOAEScyg0/g1HegXv/iFNm3apF/84hduR7Hi1KlT8ng86tWrl/785z9r4sSJevvtt0OvYAC3MYOpifdgP+UqKytVV1en//mf/3E7ijVHjhzRlClTQu9jrVixIuUHG8mDGUxdvIIFAMAC3oMFAMACChYAAAsoWAAALKBgAQCwgIIFAMACChYAAAv+H5mDs4aKJzVJAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(beliefs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Update\n", "\n", "Each time we play a machine, we can use the outcome to update our beliefs. The following function does the update." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.016676Z", "iopub.status.busy": "2021-04-16T19:35:59.016156Z", "iopub.status.idle": "2021-04-16T19:35:59.017869Z", "shell.execute_reply": "2021-04-16T19:35:59.018210Z" } }, "outputs": [], "source": [ "likelihood = {\n", " 'W': xs,\n", " 'L': 1 - xs\n", "}" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.022657Z", "iopub.status.busy": "2021-04-16T19:35:59.022046Z", "iopub.status.idle": "2021-04-16T19:35:59.024564Z", "shell.execute_reply": "2021-04-16T19:35:59.024066Z" } }, "outputs": [], "source": [ "def update(pmf, data):\n", " \"\"\"Update the probability of winning.\"\"\"\n", " pmf *= likelihood[data]\n", " pmf.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This function updates the prior distribution in place.\n", "`pmf` is a `Pmf` that represents the prior distribution of `x`, which is the probability of winning.\n", "\n", "`data` is a string, either `W` if the outcome is a win or `L` if the outcome is a loss.\n", "\n", "The likelihood of the data is either `xs` or `1-xs`, depending on the outcome.\n", "\n", "Suppose we choose a machine, play 10 times, and win once. We can compute the posterior distribution of `x`, based on this outcome, like this:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.028218Z", "iopub.status.busy": "2021-04-16T19:35:59.027687Z", "iopub.status.idle": "2021-04-16T19:35:59.030098Z", "shell.execute_reply": "2021-04-16T19:35:59.029565Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "np.random.seed(17)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.042870Z", "iopub.status.busy": "2021-04-16T19:35:59.042257Z", "iopub.status.idle": "2021-04-16T19:35:59.044114Z", "shell.execute_reply": "2021-04-16T19:35:59.044493Z" } }, "outputs": [], "source": [ "bandit = prior.copy()\n", "\n", "for outcome in 'WLLLLLLLLL':\n", " update(bandit, outcome)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the posterior looks like." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.067179Z", "iopub.status.busy": "2021-04-16T19:35:59.058633Z", "iopub.status.idle": "2021-04-16T19:35:59.174296Z", "shell.execute_reply": "2021-04-16T19:35:59.173745Z" }, "scrolled": true, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAFgCAYAAAAYQGiBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAAuJAAALiQE3ycutAABD1ElEQVR4nO3dd3hUVf4G8PdOSZn0AoRkEghECCkkFCkBkgA2UNFFcFUEwdhxdVdF19UVy65lLbv8VlwVF1Gsq+IK2BBM6B0iSOikMAktIX0yM8nM+f0RMksgZRLmzp1k3s/z5CEzc8t3bsK8Oefee44khBAgIiIip1IpXQAREVF3xIAlIiKSAQOWiIhIBgxYIiIiGTBgiYiIZMCAJSIikgEDltySv78/9u7dK9v2c3NzIUmS/fGkSZPw1ltvOW37528vJycHwcHBTts2ANx333144oknnLrNznL2sTvf7Nmz8fvf/16WbXsiOX9WdDGN0gWQcjIzM7F582ZotVpotVoMHjwYr732Gi6//PJL2uaNN954yR+KNTU1l7R+R33//fcOLefo+3N0e4549tlnkZubi//+97/2595++22nbf9SOfO9krz4s3IttmA93CuvvIKamhqcOHECQ4cOxY033qhoPQ0NDZe0vhACVqvVSdV0vf0TkftgwBIAwMfHB1lZWSgpKUFZWRlOnTqFm2++GT169EBMTAyeeuope/idPXsWv/nNbxAaGorg4GAMGzYMhYWFePTRR7F+/Xo88cQT8Pf3x6RJkwA0tkYffPBBxMTEoGfPnpg1axYqKysBAAUFBZAkCe+//z7i4uIQFRUFAJAkCbm5uQAaQ+v1119H//79ERoaimuuuQbHjh2z1963b1+89NJLGDVqFHQ6HfLy8i56fxUVFbj55psRHByM+Ph4rFu3rtnrmZmZ+Mc//tGp99fS/s/fXpN//vOf6N27NyIiIjB//nw0DaL27LPPXvSHTXBwMHJycvDf//4XL774IlauXAl/f3/4+/sDuLjrdMeOHRgzZgyCg4ORkJCATz/91P7as88+i+uvvx4PPvgggoODERMTg88//7zN34fzzZ49G3fffTduueUWBAQEYODAgcjJyWnx2DV1h7/33nuIjo5GWFgYHn/88WbbW716NUaMGIHg4GAkJiZi+fLlDtfS1vvctWsXRo0ahcDAQISHh+P6668H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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "bandit.plot()\n", "decorate(xlabel='Probability of winning',\n", " ylabel='PDF',\n", " title='Posterior distribution, nine losses, one win')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multiple Bandits" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now suppose we have four machines with these probabilities:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.177407Z", "iopub.status.busy": "2021-04-16T19:35:59.176903Z", "iopub.status.idle": "2021-04-16T19:35:59.180228Z", "shell.execute_reply": "2021-04-16T19:35:59.179776Z" } }, "outputs": [], "source": [ "actual_probs = [0.10, 0.20, 0.30, 0.40]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember that as a player, we don't know these probabilities.\n", "\n", "The following function takes the index of a machine, simulates playing the machine once, and returns the outcome, `W` or `L`." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.184112Z", "iopub.status.busy": "2021-04-16T19:35:59.183689Z", "iopub.status.idle": "2021-04-16T19:35:59.186969Z", "shell.execute_reply": "2021-04-16T19:35:59.186469Z" } }, "outputs": [], "source": [ "from collections import Counter\n", "\n", "# count how many times we've played each machine\n", "counter = Counter()\n", "\n", "def play(i):\n", " \"\"\"Play machine i.\n", " \n", " i: index of the machine to play\n", " \n", " returns: string 'W' or 'L'\n", " \"\"\"\n", " counter[i] += 1\n", " p = actual_probs[i]\n", " if np.random.random() < p:\n", " return 'W'\n", " else:\n", " return 'L'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`counter` is a `Counter`, which is a kind of dictionary we'll use to keep track of how many times each machine is played.\n", "\n", "Here's a test that plays each machine 10 times." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.214098Z", "iopub.status.busy": "2021-04-16T19:35:59.213601Z", "iopub.status.idle": "2021-04-16T19:35:59.215958Z", "shell.execute_reply": "2021-04-16T19:35:59.215585Z" } }, "outputs": [], "source": [ "for i in range(4):\n", " for _ in range(10):\n", " outcome = play(i)\n", " update(beliefs[i], outcome)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each time through the inner loop, we play one machine and update our beliefs.\n", "\n", "Here's what our posterior beliefs look like." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.228398Z", "iopub.status.busy": "2021-04-16T19:35:59.227960Z", "iopub.status.idle": "2021-04-16T19:35:59.826737Z", "shell.execute_reply": "2021-04-16T19:35:59.827463Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(beliefs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are the actual probabilities, posterior means, and 90% credible intervals." ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.834767Z", "iopub.status.busy": "2021-04-16T19:35:59.833729Z", "iopub.status.idle": "2021-04-16T19:35:59.838437Z", "shell.execute_reply": "2021-04-16T19:35:59.838980Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "import pandas as pd\n", "\n", "def summarize_beliefs(beliefs):\n", " \"\"\"Compute means and credible intervals.\n", " \n", " beliefs: sequence of Pmf\n", " \n", " returns: DataFrame\n", " \"\"\"\n", " columns = ['Actual P(win)', \n", " 'Posterior mean', \n", " 'Credible interval']\n", " \n", " df = pd.DataFrame(columns=columns)\n", " for i, b in enumerate(beliefs):\n", " mean = np.round(b.mean(), 3)\n", " ci = b.credible_interval(0.9)\n", " ci = np.round(ci, 3)\n", " df.loc[i] = actual_probs[i], mean, ci\n", " return df" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.866461Z", "iopub.status.busy": "2021-04-16T19:35:59.865346Z", "iopub.status.idle": "2021-04-16T19:35:59.891615Z", "shell.execute_reply": "2021-04-16T19:35:59.891015Z" }, "tags": [ "hide-input" ] }, "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", "
Actual P(win)Posterior meanCredible interval
00.10.250[0.08, 0.47]
10.20.250[0.08, 0.47]
20.30.500[0.27, 0.73]
30.40.417[0.2, 0.65]
\n", "
" ], "text/plain": [ " Actual P(win) Posterior mean Credible interval\n", "0 0.1 0.250 [0.08, 0.47]\n", "1 0.2 0.250 [0.08, 0.47]\n", "2 0.3 0.500 [0.27, 0.73]\n", "3 0.4 0.417 [0.2, 0.65]" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "summarize_beliefs(beliefs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We expect the credible intervals to contain the actual probabilities most of the time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Explore and Exploit\n", "\n", "Based on these posterior distributions, which machine do you think we should play next? One option would be to choose the machine with the highest posterior mean. \n", "\n", "That would not be a bad idea, but it has a drawback: since we have only played each machine a few times, the posterior distributions are wide and overlapping, which means we are not sure which machine is the best; if we focus on one machine too soon, we might choose the wrong machine and play it more than we should.\n", "\n", "To avoid that problem, we could go to the other extreme and play all machines equally until we are confident we have identified the best machine, and then play it exclusively.\n", "\n", "That's not a bad idea either, but it has a drawback: while we are gathering data, we are not making good use of it; until we're sure which machine is the best, we are playing the others more than we should." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Bayesian Bandits strategy avoids both drawbacks by gathering and using data at the same time. In other words, it balances exploration and exploitation.\n", "\n", "The kernel of the idea is called [Thompson sampling](https://en.wikipedia.org/wiki/Thompson_sampling): when we choose a machine, we choose at random so that the probability of choosing each machine is proportional to the probability that it is the best.\n", "\n", "Given the posterior distributions, we can compute the \"probability of superiority\" for each machine.\n", "\n", "Here's one way to do it. We can draw a sample of 1000 values from each posterior distribution, like this:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.897634Z", "iopub.status.busy": "2021-04-16T19:35:59.896107Z", "iopub.status.idle": "2021-04-16T19:35:59.904029Z", "shell.execute_reply": "2021-04-16T19:35:59.903164Z" } }, "outputs": [ { "data": { "text/plain": [ "(4, 1000)" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "samples = np.array([b.choice(1000) \n", " for b in beliefs])\n", "samples.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result has 4 rows and 1000 columns. We can use `argmax` to find the index of the largest value in each column:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.909255Z", "iopub.status.busy": "2021-04-16T19:35:59.908170Z", "iopub.status.idle": "2021-04-16T19:35:59.916958Z", "shell.execute_reply": "2021-04-16T19:35:59.916095Z" } }, "outputs": [ { "data": { "text/plain": [ "(1000,)" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "indices = np.argmax(samples, axis=0)\n", "indices.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `Pmf` of these indices is the fraction of times each machine yielded the highest values." ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.926458Z", "iopub.status.busy": "2021-04-16T19:35:59.925706Z", "iopub.status.idle": "2021-04-16T19:35:59.932359Z", "shell.execute_reply": "2021-04-16T19:35:59.931702Z" } }, "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", "
probs
00.048
10.043
20.625
30.284
\n", "
" ], "text/plain": [ "0 0.048\n", "1 0.043\n", "2 0.625\n", "3 0.284\n", "Name: , dtype: float64" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pmf = Pmf.from_seq(indices)\n", "pmf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These fractions approximate the probability of superiority for each machine. So we could choose the next machine by choosing a value from this `Pmf`." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.938638Z", "iopub.status.busy": "2021-04-16T19:35:59.936984Z", "iopub.status.idle": "2021-04-16T19:35:59.941814Z", "shell.execute_reply": "2021-04-16T19:35:59.942478Z" } }, "outputs": [ { "data": { "text/plain": [ "array([1])" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pmf.choice()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But that's a lot of work to choose a single value, and it's not really necessary, because there's a shortcut.\n", "\n", "If we draw a single random value from each posterior distribution and select the machine that yields the highest value, it turns out that we'll select each machine in proportion to its probability of superiority.\n", "\n", "That's what the following function does." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.949635Z", "iopub.status.busy": "2021-04-16T19:35:59.948833Z", "iopub.status.idle": "2021-04-16T19:35:59.950888Z", "shell.execute_reply": "2021-04-16T19:35:59.950296Z" } }, "outputs": [], "source": [ "def choose(beliefs):\n", " \"\"\"Use Thompson sampling to choose a machine.\n", " \n", " Draws a single sample from each distribution.\n", " \n", " returns: index of the machine that yielded the highest value\n", " \"\"\"\n", " ps = [b.choice() for b in beliefs]\n", " return np.argmax(ps)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This function chooses one value from the posterior distribution of each machine and then uses `argmax` to find the index of the machine that yielded the highest value.\n", "\n", "Here's an example." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.958607Z", "iopub.status.busy": "2021-04-16T19:35:59.957868Z", "iopub.status.idle": "2021-04-16T19:35:59.960724Z", "shell.execute_reply": "2021-04-16T19:35:59.959178Z" } }, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "choose(beliefs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Strategy\n", "\n", "Putting it all together, the following function chooses a machine, plays once, and updates `beliefs`:" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.965882Z", "iopub.status.busy": "2021-04-16T19:35:59.965161Z", "iopub.status.idle": "2021-04-16T19:35:59.971103Z", "shell.execute_reply": "2021-04-16T19:35:59.970557Z" } }, "outputs": [], "source": [ "def choose_play_update(beliefs):\n", " \"\"\"Choose a machine, play it, and update beliefs.\"\"\"\n", " \n", " # choose a machine\n", " machine = choose(beliefs)\n", " \n", " # play it\n", " outcome = play(machine)\n", " \n", " # update beliefs\n", " update(beliefs[machine], outcome)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To test it out, let's start again with a fresh set of beliefs and an empty `Counter`." ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.976029Z", "iopub.status.busy": "2021-04-16T19:35:59.975106Z", "iopub.status.idle": "2021-04-16T19:35:59.978061Z", "shell.execute_reply": "2021-04-16T19:35:59.978970Z" } }, "outputs": [], "source": [ "beliefs = [prior.copy() for i in range(4)]\n", "counter = Counter()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we run the bandit algorithm 100 times, we can see how `beliefs` gets updated:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:59.982092Z", "iopub.status.busy": "2021-04-16T19:35:59.981421Z", "iopub.status.idle": "2021-04-16T19:36:00.969027Z", "shell.execute_reply": "2021-04-16T19:36:00.969685Z" } }, "outputs": [ { "data": { "image/png": "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OrJfaofTz0Vt0DGzfu/PoLvaacxmM0tKSmLl5eWMMcZuueWWSSdYXG4bIXIxxti2bdvY1q1bmdVq5TWPo7kmcuUkp+lkW7FihX1SygcffMAKCwsFz9XS0sJUKhXT6XSMMcY+/PBDtmDBAl5zTTTVBAu+3/tibYOO7JfaoWO5qA1ejK82KGiBZYyxr7/+mmVmZrLk5GS2detWZjKZWElJCVu3bt2U2wid6+DBgwwAy87OZnl5eSwvL49t375d8FwXclWBnW628vJytnjxYpaTk8OWL19unzUodK5XXnmFaTQalpubywoLC1lpaSnvue69914WExPDALCYmBh27733CvLeF2sbnE42aoeO56I2+B2+2yAtlUgIIYTwQPBJToQQQognogJLCCGE8IAKLCGEEMIDKrCEEEIID6jAEkIIITygAjsLHMchPz8f2dnZWLlyJWprax16/Kuvvoq7777baY+5++67UVpaCgBYtWoVDh48eNHfX3311fNOnJ6tnTt3IjMzE/n5+TAajQ49dteuXfjlL3854323tLRg48aNM348cX/UBqkNihkV2FmQSqUoLS3FmTNnsHjxYjzyyCMXbWOxWFyW569//Svy8/On/LuzG/df//pXPP/88ygtLYVcLnfosRs3bsRTTz01431HR0dj165dM348cX/UBqkNihkVWCdZtWoVqqurAQAJCQn4r//6L6xcuRLPP/88ysvLsXz5cuTm5mLFihWorKy0P669vR1r1qxBRkYG7rzzTvs30F//+tdYuHAh8vPzsWHDBuj1+ss+ZuI35guzHTx4EG+88QaOHTuGrVu3Ij8/H/v27UN6erp9fc2RkRFER0dPupzbU089hezsbGRnZ9u/8f7Hf/wHDhw4gB//+McXrRv6/vvv29dh/fjjjyGVSu3Pm5qais7OzvOOBF599VVcf/312LhxI9LS0s57vlWrVuGnP/0plixZgsTERLz//vsAgIaGBqSkpNh/T0pKwo9//GPk5uaisLAQHR0dAMYWgV+3bh2ysrJw880344orrpj0dSLujdogtUGxoQLrBIwx7Nq1y76OJgAYjUbs27cPjz32GG6//XY89thjKCsrw4MPPog777zTvt2hQ4fw6quv4uzZsxgaGsJLL70EALjvvvtQUlKC0tJSXHnllXjuuecu+5jLsa3X+ve//x2lpaVYuXIlUlJSsGfPHgBjXU1XXnkllErleY/btWsXvvrqKxw7dgzHjh3Dxx9/jM8++wy/+tWv7M/3z3/+87zHrFy5Evv37wcA7Nu3DwUFBdi/fz+am5uhUCgmvcLI8ePH8fe//x0VFRUoKys772oaBoMBhw8fxv/93//h8ccfn/T/r6GhAbfddhvKysowb948vPzyywCAX/ziF5g/fz7Ky8vx5JNP4vjx49N6vYj7oDZIbVCMqMDOgsViQX5+PvLy8qDX6/H73//eft/mzZsBjL0ptVqtfZzipptuQlVVFYaGhgAAV199NaKiosBxHLZs2YJ9+/YBAL755hsUFhYiJycHf/7zn3H69Gn7c1/qMTNx33332RvByy+/jHvuueeibfbu3YvNmzfD29sb3t7e+P73v4/du3dP+bwhISHw8/NDY2MjDh06hCeeeAJ79+7Fvn37sHLlykkfs3r1aqhUKnh5eWHevHmor6+337dp0yYAQEFBARobGyd9fExMDJYsWQIAWLRokf3x+/fvt/975OXlnfchTNwbtcFLozYoPEGvB+vubOM/k/H39wcw+eWNplqdkuM4jI6O4gc/+AGOHj2K5ORkfPTRR9i+ffuUj5mp9evX4+GHH8aRI0fQ1tY2acObLO909rly5Up89NFHkEgk+N73vodnnnkGQ0NDuPrqqyfdXqFQ2H+XSqUwm80X3cdxHKxWq8OPn81rRMSL2uDUqA0Ki45geRYUFAS1Wo0PP/wQwFgXUHp6Onx9fQEAX331FVpbW8EYw+uvv44VK1ZgZGQEVqsV4eHhsFgs+Nvf/nbec072mOkKDAxEf3+//bZUKsWWLVtw880346677pr0MatXr8brr7+O0dFRjIyM4M0338Tq1asvu69Vq1bhd7/7HZYtWwYfHx8oFAp88sknDuV1huXLl+P1118HAJw6deq8IxHi+agNUhsUChVYF3jttdfw3HPPITc3F9u3b8c//vEP+32rV6/GD3/4Q2RlZcHHxwf33HMPgoKC8PDDDyMvLw9XXXUVMjIyznu+yR4zXXfffTceeeSR87p57rzzTrS3t583LjXRxo0bcc0112DBggVYsGABNmzYgLVr1152XytWrIBWq8WqVasAjDUyf39/RERETDuvMzz99NM4duwY8vLy8PzzzyMvLw+BgYEuzUCERW1wFQBqg65GV9MheOutt7Br1y689dZbQkfhhdFoBMdxkMlkqK6uxurVq1FVVWU/giFEaNQGPRONwc5xmzdvRklJCf71r38JHYU3ra2t2Lhxo30c68UXX/T4hk3cB7VBz0VHsIQQQggPaAyWEEII4QEVWEIIIYQHVGAJIYQQHlCBJYQQQnhABZYQQgjhARVYQgghhAf/P8JrruNIoYJEAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "num_plays = 100\n", "\n", "for i in range(num_plays):\n", " choose_play_update(beliefs)\n", " \n", "plot(beliefs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following table summarizes the results." ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:00.997808Z", "iopub.status.busy": "2021-04-16T19:36:00.997037Z", "iopub.status.idle": "2021-04-16T19:36:01.000101Z", "shell.execute_reply": "2021-04-16T19:36:01.000816Z" }, "tags": [ "hide-input" ] }, "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", "
Actual P(win)Posterior meanCredible interval
00.10.107[0.0, 0.31]
10.20.269[0.14, 0.42]
20.30.293[0.18, 0.41]
30.40.438[0.3, 0.58]
\n", "
" ], "text/plain": [ " Actual P(win) Posterior mean Credible interval\n", "0 0.1 0.107 [0.0, 0.31]\n", "1 0.2 0.269 [0.14, 0.42]\n", "2 0.3 0.293 [0.18, 0.41]\n", "3 0.4 0.438 [0.3, 0.58]" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "summarize_beliefs(beliefs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The credible intervals usually contain the actual probabilities of winning.\n", "The estimates are still rough, especially for the lower-probability machines. But that's a feature, not a bug: the goal is to play the high-probability machines most often. Making the estimates more precise is a means to that end, but not an end itself.\n", "\n", "More importantly, let's see how many times each machine got played. " ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.007207Z", "iopub.status.busy": "2021-04-16T19:36:01.006002Z", "iopub.status.idle": "2021-04-16T19:36:01.012730Z", "shell.execute_reply": "2021-04-16T19:36:01.011748Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "def summarize_counter(counter):\n", " \"\"\"Report the number of times each machine was played.\n", " \n", " counter: Collections.Counter\n", " \n", " returns: DataFrame\n", " \"\"\"\n", " index = range(4)\n", " columns = ['Actual P(win)', 'Times played']\n", " df = pd.DataFrame(index=index, columns=columns)\n", " for i, count in counter.items():\n", " df.loc[i] = actual_probs[i], count\n", " return df" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.028250Z", "iopub.status.busy": "2021-04-16T19:36:01.026782Z", "iopub.status.idle": "2021-04-16T19:36:01.031917Z", "shell.execute_reply": "2021-04-16T19:36:01.029480Z" }, "tags": [ "hide-input" ] }, "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", "
Actual P(win)Times played
00.17
10.224
20.339
30.430
\n", "
" ], "text/plain": [ " Actual P(win) Times played\n", "0 0.1 7\n", "1 0.2 24\n", "2 0.3 39\n", "3 0.4 30" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "summarize_counter(counter)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If things go according to plan, the machines with higher probabilities should get played more often." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "In this chapter we finally solved the Euro problem, determining whether the data support the hypothesis that the coin is fair or biased. We found that the answer depends on how we define \"biased\". And we summarized the results using a Bayes factor, which quantifies the strength of the evidence.\n", "\n", "But the answer wasn't satisfying because, in my opinion, the question wasn't interesting. Knowing whether the coin is biased is not useful unless it helps us make better predictions and better decisions.\n", "\n", "As an example of a more interesting question, we looked at the \"one-armed bandit\" problem and a strategy for solving it, the Bayesian bandit algorithm, which tries to balance exploration and exploitation, that is, gathering more information and making the best use of the information we have.\n", "\n", "As an exercise, you'll have a chance to explore adaptive strategies for standardized testing.\n", "\n", "Bayesian bandits and adaptive testing are examples of [Bayesian decision theory](https://wiki.lesswrong.com/wiki/Bayesian_decision_theory), which is the idea of using a posterior distribution as part of a decision-making process, often by choosing an action that minimizes the costs we expect on average (or maximizes a benefit).\n", "\n", "The strategy we used in <<_MaximizingExpectedGain>> to bid on *The Price is Right* is another example.\n", "\n", "These strategies demonstrate what I think is the biggest advantage of Bayesian methods over classical statistics. When we represent knowledge in the form of probability distributions, Bayes's theorem tells us how to change our beliefs as we get more data, and Bayesian decision theory tells us how to make that knowledge actionable." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercises\n", "\n", "**Exercise:** Standardized tests like the [SAT](https://en.wikipedia.org/wiki/SAT) are often used as part of the admission process at colleges and universities.\n", "The goal of the SAT is to measure the academic preparation of the test-takers; if it is accurate, their scores should reflect their actual ability in the domain of the test.\n", "\n", "Until recently, tests like the SAT were taken with paper and pencil, but now students have the option of taking the test online. In the online format, it is possible for the test to be \"adaptive\", which means that it can [choose each question based on responses to previous questions](https://www.nytimes.com/2018/04/05/education/learning/tests-act-sat.html).\n", "\n", "If a student gets the first few questions right, the test can challenge them with harder questions. If they are struggling, it can give them easier questions.\n", "Adaptive testing has the potential to be more \"efficient\", meaning that with the same number of questions an adaptive test could measure the ability of a tester more precisely.\n", "\n", "To see whether this is true, we will develop a model of an adaptive test and quantify the precision of its measurements.\n", "\n", "Details of this exercise are in the notebook." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove-cell" ] }, "source": [ "## The Model\n", "\n", "The model we'll use is based on [item response theory](https://en.wikipedia.org/wiki/Item_response_theory), which assumes that we can quantify the difficulty of each question and the ability of each test-taker, and that the probability of a correct response is a function of difficulty and ability.\n", "\n", "Specifically, a common assumption is that this function is a three-parameter logistic function:\n", "\n", "$$\\mathrm{p} = c + \\frac{1-c}{1 + e^{-a (\\theta-b)}}$$\n", "\n", "where $\\theta$ is the ability of the test-taker and $b$ is the difficulty of the question.\n", "\n", "$c$ is the lowest probability of getting a question right, supposing the test-taker with the lowest ability tries to answer the hardest question. On a multiple-choice test with four responses, $c$ might be 0.25, which is the probability of getting the right answer by guessing at random.\n", "\n", "$a$ controls the shape of the curve.\n", "\n", "The following function computes the probability of a correct answer, given `ability` and `difficulty`:" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.036525Z", "iopub.status.busy": "2021-04-16T19:36:01.035610Z", "iopub.status.idle": "2021-04-16T19:36:01.043010Z", "shell.execute_reply": "2021-04-16T19:36:01.042192Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "def prob_correct(ability, difficulty):\n", " \"\"\"Probability of a correct response.\"\"\"\n", " a = 100\n", " c = 0.25\n", " x = (ability - difficulty) / a\n", " p = c + (1-c) / (1 + np.exp(-x))\n", " return p" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "I chose `a` to make the range of scores comparable to the SAT, which reports scores from 200 to 800.\n", "\n", "Here's what the logistic curve looks like for a question with difficulty 500 and a range of abilities." ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.051026Z", "iopub.status.busy": "2021-04-16T19:36:01.049832Z", "iopub.status.idle": "2021-04-16T19:36:01.055461Z", "shell.execute_reply": "2021-04-16T19:36:01.054373Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "abilities = np.linspace(100, 900)\n", "diff = 500\n", "ps = prob_correct(abilities, diff)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.065949Z", "iopub.status.busy": "2021-04-16T19:36:01.064663Z", "iopub.status.idle": "2021-04-16T19:36:01.256592Z", "shell.execute_reply": "2021-04-16T19:36:01.257891Z" }, "tags": [ "hide-input", "hide-cell" ] }, "outputs": [ { "data": { "image/png": "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75vu8YiJicH06dMRERGBXr16oV+/fq26azMqKgpvv/02Fi9eDAcHB9x33326QSimT5+OoUOHok+fPggNDcX48eNvej+t8f69mStXrmD69OlwdHSEh4cHduzYgb1796Jnz54AgC5dumDXrl34+eef4ejoiCeeeAJbt26Fr6+vXsvpzsiEvvuHiNqxzZs345133tF9ZIY6jlWrVqF79+5YsGCBoaNIhu/fjokFS0ZPrVZj2LBhWLhwIebOnWvoOES3he/fjou7iMmoxcfHw83NDR4eHnofSyVqL/j+7di4BUtERCQBbsESERFJgAVLREQkATNDB7hT9vb2eg8QQEREJAWVSoWKiopmlxltwcrlciiVSkPHICKiTkyhUNx0GXcRExERSYAFS0REJAEWLBERkQRYsERERBJgwRIREUmABUtERCQBFiwREZEEWLBEREQSYMESERFJQNKCffzxxyGXy2FmdvMBoxISEqBQKODr64uYmBg0NDRIGYmIiKhNSFqwDz/8MI4dO3bT5VqtFrGxsdi2bRvS09OhVqsRHx8vZSQiIqI2IWnBDhkyBG5ubjddfuTIEcjlcgQGBgIAYmNjsWPHDikjERERtQmDDvavUqng6empm/by8oJKpWp23bi4OMTFxemmS0tLJc9HRER0pwx+kpNMJtN9L4S46XqLFy+GUqnUfTk5ObVFPCIiojti0IL19PRETk6OblqlUvEar0REJBkhBOrqtW3yWAbdRRwWFobc3FwolUooFAps3LgRkydPNmQkIiIyMg3aRpSpa1BWWYOSyhqUqWtQUVWLCk0tyjXX/q1DhaYWFVW16Ofrhn9Mv1/yXJIW7IIFC/D9999Dq9VCLpdj/PjxmDdvHpYvX449e/bA1NQUGzZswJQpU1BXV4fIyEjMmDFDykhERGQkhBCoqqlHUXk1isqrUFxRjaKyKhRXVqO0ogal6hqUVtagsqr2pvdha2UOBxsL2NtYoIezDeysLdDb3bFN8stESwc+2zGFQgGlUmnoGEREdBc01XUoLKtCQYkal0s0uFyqQWGpBkXl1bhSVoXa+hvHRrDoYgZne0s42VnB0dYSznaWcLT777+2V793sLGAnZU5TE2lPRLaUhcZdBcxERF1fDV1DcgrqkTulUqo/vvv5VINLpdooKmpa7KuiYkJujlaw8XBGr5yJ7jYW6OrgxVcHP77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FhaGdevWtTifBUvUOliwREasoaEB27Ztw2effYaDBw+ipKREt+yDDz5Av379oFAokJCQAKDpVuv1rp//1FNPITk5GaGhoXj++ecRGxvbpLzXrFmD5557TuJnRmT8WLBERuynn35CYGAgfHx88MADD+Drr7/WLWtsbERKSgq++OILzJo1C3V1dXrd57///W8MHDgQqampeOONN7Bw4UJs2LBBt3zjxo2YO3duqz8Xoo6GBUtkxOLj4zFt2jQAwLRp05psaV67AkpISAi6du2KCxcu3NFj3HfffdBoNDh37hwSExPh7u4OPz+/uw9P1MGZGToAEd2ZyspKfPfddzh48CBWrFgBAMjLy0NGRkaz6//5kly3Y/78+fj444+Rn5+PefPm3fH9EHUm3IIlMlLbt2/HmDFjkJOTg6ysLGRlZWHp0qXYsmULAOhOVDpx4gSKi4vh6+ur1/3a29ujsrKyybzo6Ghs374dCQkJmDx5cus+EaIOiluwREYqPj5e99Gaax566CE8/PDDAABra2sMHjwY5eXl2LRpE8zNzfW63+DgYDg5OaF///4YO3YsXn31VdjZ2SEyMhJOTk6wtLRs9edC1BHxajpEdEtarRahoaH4+uuvERAQYOg4REaBu4iJqEUHDhyAv78/xowZw3Ilug3cgiUiIpIAt2CJiIgkwIIlIiKSAAuWiIhIAixYIiIiCbBgiYiIJMCCJSIiksD/A1DkgNQD8nNpAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(abilities, ps)\n", "decorate(xlabel='Ability',\n", " ylabel='Probability correct',\n", " title='Probability of correct answer, difficulty=500',\n", " ylim=[0, 1.05])" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Someone with `ability=900` is nearly certain to get the right answer.\n", "Someone with `ability=100` has about a 25% change of getting the right answer by guessing." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "## Simulating the Test\n", "\n", "To simulate the test, we'll use the same structure we used for the bandit strategy:\n", "\n", "* A function called `play` that simulates a test-taker answering one question.\n", "\n", "* A function called `choose` that chooses the next question to pose.\n", "\n", "* A function called `update` that uses the outcome (a correct response or not) to update the estimate of the test-taker's ability.\n", "\n", "Here's `play`, which takes `ability` and `difficulty` as parameters." ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.265718Z", "iopub.status.busy": "2021-04-16T19:36:01.264868Z", "iopub.status.idle": "2021-04-16T19:36:01.267337Z", "shell.execute_reply": "2021-04-16T19:36:01.268087Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "def play(ability, difficulty):\n", " \"\"\"Simulate a test-taker answering a question.\"\"\"\n", " p = prob_correct(ability, difficulty)\n", " return np.random.random() < p" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "`play` uses `prob_correct` to compute the probability of a correct answer and `np.random.random` to generate a random value between 0 and 1. The return value is `True` for a correct response and `False` otherwise.\n", "\n", "As a test, let's simulate a test-taker with `ability=600` answering a question with `difficulty=500`. The probability of a correct response is about 80%." ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.276639Z", "iopub.status.busy": "2021-04-16T19:36:01.275174Z", "iopub.status.idle": "2021-04-16T19:36:01.278834Z", "shell.execute_reply": "2021-04-16T19:36:01.279603Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "0.7982939339725037" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prob_correct(600, 500)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Suppose this person takes a test with 51 questions, all with the same difficulty, `500`.\n", "We expect them to get about 80% of the questions correct.\n", "\n", "Here's the result of one simulation." ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.282857Z", "iopub.status.busy": "2021-04-16T19:36:01.282096Z", "iopub.status.idle": "2021-04-16T19:36:01.286226Z", "shell.execute_reply": "2021-04-16T19:36:01.287063Z" }, "tags": [ "remove-cell", "hide-cell" ] }, "outputs": [], "source": [ "np.random.seed(18)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.291285Z", "iopub.status.busy": "2021-04-16T19:36:01.290391Z", "iopub.status.idle": "2021-04-16T19:36:01.298808Z", "shell.execute_reply": "2021-04-16T19:36:01.299584Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "0.803921568627451" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "num_questions = 51\n", "outcomes = [play(600, 500) for _ in range(num_questions)]\n", "np.mean(outcomes)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "We expect them to get about 80% of the questions right.\n", "\n", "Now let's suppose we don't know the test-taker's ability. We can use the data we just generated to estimate it.\n", "And that's what we'll do next." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "## The Prior\n", "\n", "The SAT is designed so the distribution of scores is roughly normal, with mean 500 and standard deviation 100.\n", "So the lowest score, 200, is three standard deviations below the mean, and the highest score, 800, is three standard deviations above.\n", "\n", "We could use that distribution as a prior, but it would tend to cut off the low and high ends of the distribution.\n", "Instead, I'll inflate the standard deviation to 300, to leave open the possibility that `ability` can be less than 200 or more than 800.\n", "\n", "Here's a `Pmf` that represents the prior distribution." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.306918Z", "iopub.status.busy": "2021-04-16T19:36:01.306067Z", "iopub.status.idle": "2021-04-16T19:36:01.319073Z", "shell.execute_reply": "2021-04-16T19:36:01.318203Z" }, "tags": [ "remove-output", "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "0.04464186995102338" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from scipy.stats import norm\n", "\n", "mean = 500\n", "std = 300\n", "\n", "qs = np.linspace(0, 1000)\n", "ps = norm(mean, std).pdf(qs)\n", "\n", "prior = Pmf(ps, qs)\n", "prior.normalize()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "And here's what it looks like." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.327517Z", "iopub.status.busy": "2021-04-16T19:36:01.326687Z", "iopub.status.idle": "2021-04-16T19:36:01.602546Z", "shell.execute_reply": "2021-04-16T19:36:01.602989Z" }, "tags": [ "hide-input", "hide-cell" ] }, "outputs": [ { "data": { "image/png": "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ekT/TF4inqWoqCiMj49zZRwioiVGLpcjLy8PDQ0NCA0NFf3zGLCzFBQUhIyMDKnLICKiOfD29kZWVtaCfBYvERMREYmAAUtERCQCBiwREZEIGLBEREQiYMASERGJgAFLREQkAgYsERGRCBiwREREImDAEhERiYABS0REJAIGLBERkQgYsERERCJgwBIREYmAAUtERCQCBiwREZEIGLBEREQiEDVgy8vLodVqoVarsXXrVthstlm1eeyxx6BWq5GRkYGDBw86n9+yZQuSkpJQUFCAgoIC7N27V8zdICIimjXRAtZut6O4uBgHDhxAY2MjzGYzysrKXG5z5MgRHDt2DLW1tSgvL8fDDz8Mk8nkfO+zzz6LyspKVFZWoqioSKzdICIimhPRAraiogJKpRLZ2dkAgOLiYhw6dMjlNocOHcKWLVvg7e2NhIQE3HDDDThy5IhY5RIREc0r0QLWYDBApVI5HycmJsJgMLjc5nLvf+aZZ5CXl4fCwkJ0dnaKtRtERERzIuo9WJlM5vy3IAizbjPdazt37kR9fT0qKyuh0Whw9913T7ntkpISaLVa509/f/+c9oOIiGi2RAtYlUoFvV7vfGwwGKBUKl1uM9Nr8fHxkMlk8PLywkMPPYRjx45NWcO2bdug0+mcP+Hh4fO2f0RERDMRLWCXL18Oo9EInU4HACgtLcX69etdbrN+/Xrs2bMHdrsd7e3t+Pjjj/H1r38dANDe3u7cxv79+5GXlyfWbhAREc2Jt1gblsvl2L17NzZs2IDx8XGsWrUKhYWFOH78OJ588kkcPnx42jYAcNNNN+Hvf/87NBoNZDIZXnzxRQQHBwMAioqK0NXVBS8vL8THx6O0tFSs3SAiIpoTmTDdzVE3pNVqnWfLREREV2qmXOFMTkRERCJgwBIREYmAAUtERCQCBiwREZEIGLBEREQiYMASERGJgAFLREQkAgYsERGRCBiwREREImDAEhERiYABS0REJAIGLBERkQgYsERERCJgwBIREYmAAUtERCQCBiwREZEIGLBEREQiYMASERGJgAFLREQkAgYsERGRCBiwREREImDAEhERiYABS0REJAIGLBERkQgYsERERCJgwBIREYmAAUtERCQCBiwREZEIGLBEREQiYMASERGJgAFLREQkAgYsERGRCBiwREREImDAEhERiYABS0REJAIGLBERkQgY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8pRTvx0/fhz33XcfAODo0aP42te+dsnzLS0t2Lt37wJUTuQeGLBEbqqsrAyrVq1CWVnZZdsuX74cr7766ozPM2CJZocBS+SGbDYbDhw4gD179uCTTz5BX1+f87VXXnkFV111FbRaLcrLywFMPmu90IXPP/zww/jss89QUFCAH/3oRyguLp4U3s8//zy2b98u8p4RLR0MWCI3dOTIEWRnZyM5ORnr1q3DO++843zN4XDg1KlT2LdvH+666y6Mj4+7tM2XXnoJ1113HSorK7Fr1y7cd9992L17t/P10tJSfP/735/3fSFaqhiwRG6orKwMd955JwDgzjvvnHSmObH6Sn5+PiIjI9HQ0DCnz7j22msxPDyMuro6HD16FPHx8UhPT7/y4onchLfUBRDR/DKZTPjzn/+MTz75BE899RQAoL29HU1NTVO2v3jprtm499578bvf/Q4dHR2455575rwdInfEM1giN3Pw4EGsWbMGer0eLS0taGlpwSOPPII333wTAJwdlU6fPo3e3l6o1WqXthsSEgKTyTTpuc2bN+PgwYMoLy/H+vXr53dHiJY4nsESuZmysjLn0JoJt99+OzZu3AgACAwMxPXXX4/BwUG88cYb8PX1dWm7eXl5CA8Px9VXX421a9fi2WefRXBwMFatWoXw8HD4+/vP+74QLWVcTYeI5sxut6OgoADvvPMOsrKypC6HaFHhJWIimpOPP/4YGRkZWLNmDcOVaAo8gyUiIhIBz2CJiIhEwIAlIiISAQOWiIhIBAxYIiIiETBgiYiIRMCAJSIiEsH/B/axm539teNoAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "prior.plot(label='std=300', color='C5')\n", "\n", "decorate(xlabel='Ability',\n", " ylabel='PDF',\n", " title='Prior distribution of ability',\n", " ylim=[0, 0.032])" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "## The Update\n", "\n", "The following function takes a prior `Pmf` and the outcome of a single question, and updates the `Pmf` in place." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.607271Z", "iopub.status.busy": "2021-04-16T19:36:01.606844Z", "iopub.status.idle": "2021-04-16T19:36:01.608679Z", "shell.execute_reply": "2021-04-16T19:36:01.609044Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "def update_ability(pmf, data):\n", " \"\"\"Update the distribution of ability.\"\"\"\n", " difficulty, outcome = data\n", " \n", " abilities = pmf.qs\n", " ps = prob_correct(abilities, difficulty)\n", " \n", " if outcome:\n", " pmf *= ps\n", " else:\n", " pmf *= 1 - ps\n", " \n", " pmf.normalize()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "`data` is a tuple that contains the difficulty of a question and the outcome: `True` if the response was correct and `False` otherwise.\n", "\n", "As a test, let's do an update based on the outcomes we simulated previously, based on a person with `ability=600` answering 51 questions with `difficulty=500`." ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.654214Z", "iopub.status.busy": "2021-04-16T19:36:01.653478Z", "iopub.status.idle": "2021-04-16T19:36:01.656020Z", "shell.execute_reply": "2021-04-16T19:36:01.655560Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "actual_600 = prior.copy()\n", "\n", "for outcome in outcomes:\n", " data = (500, outcome)\n", " update_ability(actual_600, data)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Here's what the posterior distribution looks like." ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.678509Z", "iopub.status.busy": "2021-04-16T19:36:01.663304Z", "iopub.status.idle": "2021-04-16T19:36:01.832256Z", "shell.execute_reply": "2021-04-16T19:36:01.832886Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAFgCAYAAAAYQGiBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAAuJAAALiQE3ycutAAA3K0lEQVR4nO3de3RTZb4+8Cdt0qZp06aFtkDTFiFc2gJWpg6CgJdBRWRGh0FQGFBbFWeAWeMNL+MZXS6PimfweGbE0cPIQesZRRDR4cwoM1IU+CEWsKIWVBAoaaE3mrRJmjaX9/dH3ZveSdvs7KQ8n7VYq0l29v5mA3n6vnu/76sRQggQERFRUEWpXQAREdFgxIAlIiJSAAOWiIhIAQxYIiIiBTBgiYiIFMCAJSIiUgADlqgPEhIS8OWXXyq2/7KyMmg0Gvnx9ddfj5deeilo+2+/v507d8JkMgVt3wBwzz334KGHHgrqPgP13Xff4dJLL4XRaMT999/f5/dfeeWVeOGFF3p8PS8vD9u2bQMAbNiwAfn5+d2+RiTRql0AUWdXXnkl9u7dC51OB51Oh0mTJuEPf/gDLr300gHt86abbsJvf/vbAdXmcDgG9P6++sc//hHQdoF+vkD3F4gnnngCZWVl2Lp1q/zcyy+/HLT999Vzzz2HSZMmobS0VJH9f/311wG9tmHDBrzwwgsoKytTpA6KHGzBUlhavXo1HA4HTp8+jcmTJ+Omm25StR6v1zug9wsh4PP5glRN5B0/FI4fP46JEyeqXQaRjAFLYU2v16OoqAhVVVWor69HdXU1FixYgNTUVGRlZeF3v/udHH5nz57Fz3/+c6SkpMBkMuFHP/oRTp48ifvvvx+7du3CQw89hISEBFx//fUA2lqjK1asQFZWFtLS0rB06VLY7XYAwIkTJ6DRaPA///M/sFgsyMjIAABoNBq5ZSKEwJo1azB69GikpKRg9uzZ+P777+XaR44ciWeeeQaXXXYZDAYDysvLu3w+m82GBQsWwGQyYfz48fjkk086vN6+27Kvn6+743fXDfqnP/0Jw4cPx7Bhw/D4449DmtztiSee6PKLjclkws6dO7F161Y8/fTT2LZtGxISEpCQkAAAuP322zu0ovfv34/LL78cJpMJubm5ePPNN+XXnnjiCfz0pz/FihUrYDKZkJWVhY0bN/b4b8Hj8eCRRx5BVlYWUlNTsXDhQtTW1gIAfvzjH6OkpEQ+B//617+6vP/zzz/H9OnTkZKSgtTUVNx6662or6/vsE1lZSWuvPJKGI1GTJ06FYcPH5ZfGzlyZIfWenvSa59//jnuuecefPnll/J5OXnyJPR6PY4fPy5v73a7kZycjM8++6zHz0uRjwFLYc3lcuEvf/kLsrOzMWTIECxatAg6nQ7Hjx/Hrl27sHXrVjz33HMAgD/84Q/wer2wWq2or6/Hq6++CqPRiDVr1mDGjBlyq1jqJi0sLMTZs2dx6NAhHD9+HB6PBytWrOhw/Pfffx/79+/v8OUoKS4uxvPPP4+tW7eiqqoKeXl5mDt3bofW7oYNG/Daa6/B4XBg3LhxXfbxm9/8BjabDSdOnMCOHTvw+uuv93gu+vr5Ajl+U1MTDh48iGPHjmHnzp1Yv359rzVIbrrpJjz66KOYO3cuHA5Ht13nNpsNs2fPxi233ILa2lr8+c9/xl133YU9e/bI23z44Ye4/PLLUV9fj6eeegp33nknmpqauj3mM888g23btmH37t04fvw4NBoNFi9eDAD47LPPOpyDWbNmdXl/VFQUnn32WVRXV+Orr75CZWUlHn744Q7bvPrqq3jmmWdQX1+Pq6++GjfeeGOfei8uueQSvPzyy5g4caJ8XrKzszF37ly89tpr8nbvvvsuRowYgR//+McB75siDwOWwtIjjzwCk8mEUaNG4ciRI3j//fdRWVmJHTt2YM2aNUhISEB2djZ+97vfYcOGDQAAnU6H+vp6fPfdd4iOjkZ+fj5SUlK63X9tbS3eeecdvPjiizCZTIiPj8eTTz6JjRs3duhKffzxx2EymWAwGLrso7i4GL/5zW8wceJE6PV6PP3007BarR1aJb/61a8wbtw4REdHIyYmpsP7fT4fNm7ciKeeegomkwkjRozAgw8+2OM56cvnC+T4AOD3+7F69WoYDAaMHz8eK1asQHFxca/7DNT//d//ITU1FStXroROp8MVV1yBRYsWdQiayZMn49Zbb0V0dDSWLFmC1tZWfPvtt93ur7i4GI899hiysrKQkJCA559/Hv/85z9RVVUVUD0XX3wxpk+fDp1Oh/T0dNx3333YuXNnh21uueUWTJ06FTExMXjiiSdQXV2NTz/9tN/nQFJUVITXX39d7h3YsGED7rjjjgHvl8Ibb3KisPTMM890uWFn37590Ov1GDZsmPzcqFGjYLVaAQAPPvgg3G43FixYALvdjoULF+LZZ59FXFxcl/2fOHECfr8fo0aN6vB8VFQUzpw5Iz/OysrqsUar1YqRI0fKj2NjYzFixAi5nvO9v66uDq2trcjOzpafa/9zZ335fIEcH2jrgk9LS+tw/MrKyl7fE6jO5wdo+/tq3w3e/u9So9EgLi6uxxZs5/2NGDECsbGxsFqtGDFixHnrOXr0KO6//36UlpbC4XDA7/dDp9N12Kb9+dfpdBg+fHhQzsd1110Hj8eDjz/+GGPGjMHHH38cUE8BRTa2YClimM1muN1uVFdXy88dP34cZrMZQNsQmtWrV+Obb77B3r178dFHH8lDUqKiOv5Tz8zMRFRUFKqqqmCz2eQ/brdbvt7a3fs613PixAn5cWtrK6qqquR6zvf+oUOHQqfT4eTJk/JzFRUVPW7fl88XyPGBtmuBNTU1HY4vff6EhAS4XC75NZfLhcbGxoD33fn8AB3/vvqq8/7OnDmDlpaWgPd3zz33ICMjA+Xl5WhsbMQbb7yBzouJtf+78Hg8OH36dId/D4Ho7rxERUXhtttuw4YNG/D666/juuuuQ3p6ep/2S5GHAUsRIyMjA1dddRUeeOABOJ1OVFRU4Omnn8Ztt90GANi2bRu+/fZb+P1+JCYmQqfTQatt66RJT0/HsWPH5H0NGzYMN910E1asWIG6ujoAbV/Y7777bsD1/PKXv8SLL76I8vJytLS04LHHHkNGRkbA19Wio6OxYMEC/P73v4fNZkNVVRX+4z/+o8ft+/L5AhUVFYVHHnkEzc3N+Oabb7B27Vr5uubkyZOxd+9eHDlyBG63G4888kiHMbrp6ek4efJkj3cnz5kzBzU1NXjppZfg9Xqxa9cu/PWvf8XSpUv7XCfQdr6ffvppnDp1Cg6HA/fddx9mzZoVUOsVABobG2E0GpGYmIhTp051e643btyIffv2obW1FU8++SRSU1Nx2WWX9anO9PR0nD59Gs3NzR2eLywsxJYtW/Dqq6+ye/gCwYCliPLXv/4Vzc3NyM7OxuWXX44bbrgBq1atAtDWBTh79mwYjUbk5uZi6tSp+NWvfgUA+O1vf4t//etfMJlMmDt3LoC262AmkwmXXnopEhMTMWPGDBw4cCDgWpYuXYqVK1di7ty5GDZsGL744gv87W9/k0MvEH/605/k68lXX301lixZ0uO2ff18gTAajcjPz8eoUaMwc+ZMLF26VP6F5eqrr8ayZcswbdo0WCwWTJw4EUajUX7vzTffjMTERAwdOrTbCSuSk5Pxj3/8A2+88QaGDBmCu+++G3/+858xffr0gOtr75FHHsF1112HqVOnYuTIkfB4PHjjjTcCfv/zzz+Pbdu2ITExETfeeCN+8YtfdNmmsLAQDz30EFJSUvDPf/4TW7du7dPfJ9B23i677DJkZGTAZDLJvRKjRo1CQUEBGhsbccMNN/RpnxSZNFxwnYgoNAoLC2EymfD888+rXQqFAG9yIiIKgWPHjmHTpk196iWhyMYuYiIihS1btgz5+fl46KGHMHbsWLXLoRBhFzEREZEC2IIlIiJSAAOWiIhIAYPuJqfExMR+D2QnIiLqC6vV2mEClvYGXcCazeZuVy0hIiIKttzc3B5fYxcxERGRAhiwRERECmDAEhERKYABS0REpAAGLBERkQIYsERERApgwBIRESmAAUtERKQABiwREZECGLBEREQKGHRTJRLR4CGEgNvlQVNDMxwNbriaWjD64mGIi49RuzSi82LAElHYOPyZFaXbj8Jhc8PR4EZTQzO8Hl+HbX5y6yTMWjRJpQqJAseAJaKw8fHmr1F1rAHp2UkYNtIEyyXDYUzWw5gchwSTHu/88VPUn25Su0yigDBgiShs2OtcGH1xOm77/VXdvr7jrS9hq3GGuCqi/lH0JqeSkhLk5ubCYrGgsLAQXq+3w+unTp3CT37yE+Tk5GDChAl47LHHOry+atUqWCwWjB07Fps3b1ayVCJSmd/vR2N9M5KGxve4jSktHg0MWIoQigWsz+dDUVERNm3ahKNHj8LhcKC4uLjDNlqtFqtXr8bhw4dx8OBB7Nq1C++//z4AYPv27fj0009x5MgRlJSU4N5770VTE7uGiAYrh80Nv9+PpKGGHrdJTktAY70LXq+vx22IwoViAVtaWgqz2Yy8vDwAQFFREbZs2dJhm+HDh6OgoAAAEBMTg0mTJuHkyZMAgC1btuD222+HVqtFRkYGpk+fju3btytVLhGpzFbrAgCYUnsOWFOqAUIINJ1tDlVZRP2mWMBarVZkZmbKj7OysmC1Wnvcvr6+Hlu3bsWsWbP69P61a9ciNzdX/tPQ0BDET0FEoWKva+v67a2LOCm17TV2E1MkUPQarEajkX8WQvS4XUtLC+bPn4/77rsPOTk5fXr/8uXLUV5eLv9JTk4OQuVEFGr2urYWbO9dxG0Ba69lwFL4UyxgMzMzUVFRIT+2Wq0wm81dtvP5fFi8eDEKCgpw77339vn9RDQ4SF3EvQWsKY0tWIocigVsQUEBKisrUV5eDgBYv3495s2b12W7u+++G4mJiXjuuec6PD9v3jy89tpr8Pl8qKqqwu7du3HttdcqVS4Rqcxe50R8kh5aXXSP2yQk6aGL0XKoDkUExQI2Ojoa69atw/z582GxWGAwGLBkyRLs378fc+bMAQDs2bMH69evR2lpKS655BLk5+fjj3/8IwDgmmuuwZQpUzBu3DhcccUVWLNmDYxGo1LlEpHK7HUumFJ7vv4KtF02Sko1sAVLEUEjers4GoFyc3PlVjMRRY5nbt+CDEsKlj52Za/bvfpvH8FW68T9L/8sNIUR9aK3zOFqOkSkOp/Pj6azzedtwQKAKTUe9lpXrzdOEoUDBiwRqa7pbDOEEL3e4CQxpcXD0+qFs7ElBJUR9R8DlohUJw3RCaQFKw3V4Y1OFO4YsESkOlutNMlEYC1YAGiocShaE9FAMWCJSHWBTDIhYQuWIgUDlohUZ69zQaPRwJgSd95tjSlx0Gg08sQUROGKAUtEqrPXOWFMjoNW2/MkExKtNhqJQwzsIqawx4AlItXZ61wBdQ9LTKkG2NmCpTDHgCUi1dlq+xiwXHidIgADlohU5fX44LA1y0vRBSI5LQHNjha0NHsUrIxoYBiwRKQqe33gdxBLpEXZ2YqlcMaAJSJV9WWIjsSUlgDg3PhZonDEgCUiVUmLpwcyi5OEY2EpEjBgiUhV/WnBJv3QRcwWLIUzBiwRqcpe50JUVBSMyfqA3xOr18FgjGULlsIaA5aIVGWvc8GYEoeoqL59HXGoDoU7BiwRqcpe55LvCu4LU2o8W7AU1hiwRKQqW62zT9dfJclp8WhqaIbX61OgKqKBY8ASkWpaW7xwNbUgaWjgdxBLTGnxEELIN0kRhRsGLBGp5txC6/3rIgY4VIfCFwOWiFTTnyE6EmnhdQ7VoXDFgCUi1djr2sKxX13EbMFSmGPAEpFq5BZsP7qI4xNjoYvRcqgOhS0GLBGpxl7nQrQ2GglJgU8yIdFoNDClcagOhS8GLBGpxlbrROKQOGg0mn69PzktntdgKWwxYIlINW2TTPT9+qvElBYPW60LQoggVkUUHAxYIlKNvc7VrzuIJabUePi8PjQ1NAexKqLgYMASkSpamj1wO1sHGLDSqjqcbILCDwOWiFRxbpKJgXQR/7Dweo0jKDURBRMDlohUMZBJJiTSwuscqkPhiAFLRKo4N8lE/wNWWuaOXcQUjhiwRKQKKRQHErDR0VFIGmpgFzGFJQYsEanCXueCLkYLgzF2QPuRhuoQhRsGLBGpQloHtr+TTEhMqQbO5kRhiQFLRKoY6BhYiSk1Hm5XK5qdrUGoiih4GLBEFHLSQun9meS/M3nZOrZiKcwwYIko5NwuD1rdnn4tU9dZsjQWlnMSU5hhwBJRyElhGJQuYo6FpTDFgCWikAvGLE4SKaTZRUzhhgFLRCEnBWzikLgB7ysmVov4JD27iCnsMGCJKOTsP4RhMFqwwA/rwrIFS2GGAUtEIWevcyFGr4PeoAvK/kyp8bwGS2GHAUtEIde20PrAJ5mQmNLi4bA1w9PqDcr+iIKBAUtEIResSSYk0qo60rVdonDAgCWikJInmQjCGFhJUiqH6lD4YcASUUi5mlrgafXCFIRZnCRyC5Z3ElMYYcASUUgFY6H1zkxswVIYYsASUUidm8UpeF3EcQkxiNHrOFSHwgoDlohCSokWrEajQXIah+pQeGHAElFIyQEbxGuwgLTwOgOWwgcDlohCyl7ngj4+BrH64EwyITGlxsNe54Lf7w/qfon6iwFLRCHVNslE8K6/Skxp8fD7/Gg82xz0fRP1BwOWiELKVusM6vVXSdIPCwc0MWApTDBgiShkhBBorG9WJGATkn8I2AYGLIUHBiwRhYzD5obP61MkYI1ywLqDvm+i/lA0YEtKSpCbmwuLxYLCwkJ4vV0n4l65ciXMZjO0Wm2H53fu3Amj0Yj8/Hzk5+dj/vz5SpZKRCGgxBAdiTFZD6AtxInCgWIB6/P5UFRUhE2bNuHo0aNwOBwoLi7ust3ChQtx4MCBbvcxZcoUlJWVoaysDJs3b1aqVCIKEVuQ14Ftz2CMRVRUFBzsIqYwoVjAlpaWwmw2Iy8vDwBQVFSELVu2dNlu+vTpSE9PV6oMIgoj0vVRY0pc0Pet0WiQYNKzBUthQ7GAtVqtyMzMlB9nZWXBarX2aR8HDhxAfn4+Zs6ciQ8//DDYJRJRiEnhl2DSK7L/hGQ9b3KisKE9/yb9134xZSFEn947efJknDx5EomJiSgrK8OcOXOwd+9eZGdnd9hu7dq1WLt2rfy4oaFhYEUTkWKc9hZERUchLj5Gkf0bk+NQa21UZN9EfaVYCzYzMxMVFRXyY6vVCrPZHPD7ExMTkZiYCADIz8/HtGnTUFZW1mW75cuXo7y8XP6TnJw84NqJSBlOuxsJSfoOv3wHE7uIKZwoFrAFBQWorKxEeXk5AGD9+vWYN29ewO8/ffq03Oq1Wq3Yt28fcnNzFamViELDYXMr1j0MtLVgW90etLg9ih2DKFCKBWx0dDTWrVuH+fPnw2KxwGAwYMmSJdi/fz/mzJkjb7ds2TKYzWb4fD6YzWYsW7YMAPDOO+9gwoQJyM/Px9y5c7F69WqMGTNGqXKJKAQcdqUD9oehOhwLS2FA0WuwV199tdyClRQUFODvf/+7/PiVV17p9r0rVqzAihUrlCyPiELMYXMjc+wQxfbffjanIcONih2HKBCcyYmIQsLr8cHtbEWCKfhDdCRS65jXYSkcMGCJKCQc9rbQi0+KVewYRs5HTGGEAUtEIeG0twBQbgxs+31zPmIKBwxYIgoJqds2Pkm5gNUbdNDqojldIoUFBiwRhYTTruwsTkDb5DbG5Dheg6WwwIAlopAIRcACnC6RwgcDlohCQrouGp+o3E1OQFuA8xoshQMGLBGFhNPuht4QA12MosPv5S7ivs5/ThRsDFgiCgmH3a3oEB1JgkkPn9eHZmer4sci6g0DlohCQul5iCXSWFhOl0hqY8ASUUg47S0hClhpLCxvdCJ1MWCJSHFCCDhsbkXHwEqkqRg5VIfUxoAlIsW5XR74vL6QtGAT2IKlMMGAJSLFhWIWJwkn/KdwwYAlIsWFapIJAIjV6xAbp2MLllTHgCUixUmtyYQQtGCBtiDnXcSkNgYsESkulC1YAJyPmMICA5aIFOcIwVJ17XE+YgoHDFgiUpzD5kZUVBTiEmJCcjypBev3+0NyPKLuMGCJSHEOWzPik2Kh0WhCcrwEkx5CCDgbW0JyPKLuMGCJSHFOe0tIhuhI5OkSeR2WVMSAJSLFhWoeYgnnI6ZwwIAlIsU5Q7SSjkQKc97oRGpiwBKRorxeH1xNLfIcwaHA6RIpHDBgiUhRrsbQDtEBzk1owWuwpCYGLBEp6twsTqHrItbqomEwxrIFS6piwBKRopzyJBOh6yJuOx6nSyR1MWCJSFEOW1srMpQ3OQFtdxKzBUtqYsASkaJCPU2iJMGk5zVYUhUDlogUJU30H8qJJgAgITkOrqYWeL2+kB6XSMKAJSJFOWxuxOh1iInVhvS4xmTeSUzqYsASkaKc9tDO4iSRjskbnUgtDFgiUpTDFtpZnCScj5jUxoAlIkWFeh5iybmA5Z3EpA4GLBEpRggBp71FnlkplM5Nl8gWLKmDAUtEiml1e+Fp9arSgo1PbFt/lmNhSS0MWCJSjDxNogoBGxUVhfgkjoUl9TBgiUgxDpXGwEqMyXq2YEk1DFgiUoyaLVig7UYnDtMhtTBgiUgxUsCq1YJNMLEFS+phwBKRYqRpEtVqwSYkx6Gl2YPWFq8qx6cLGwOWiBTjtLdAo9HAYIxR5ficLpHUxIAlIsU4bM0wJMYiKkqdrxppsgl2E5MaGLBEpBinvUW17mGg/XzEDFgKPQYsESmmqaFZlVmcJJyPmNTEgCUixYRLC5bTJZIaGLBEpAifzw9XU4tqQ3QAIC4hBtHaaF6DJVUwYIlIEa6mFgghVG3BajQajoUl1TBgiUgR5yaZCP1asO0ZkzkfMamj14B97rnn5J8PHjyoeDFENHg47S0A1JtkQpJg0nO6RFJFrwH71ltvyT/feeedihdDRIPHuVmc4lStw5gcB4fNDSGEqnXQhafXgG3/D5L/OImoL6Trnmp3ESeY9PC0euF2eVStgy482t5edDqd2Lt3L/x+P1wuF/bu3dshaKdNm6Z4gUQUmcKmi7jdWNi4eHWmbKQLU68Bm5GRgUcffRQAMGLECPlnoO3uvB07dihbHRFFLIfNDV2MFjGxvX7NKE6aj7ipoRmpGYmq1kIXll7/5ZeUlISqDiIaZJx2NxJMemg0GlXr4GxOpJbz/mrZ0NCA//3f/8Xhw4eh0WiQl5eHW2+9FSaTKQTlEVGkcvwQsGrjfMSkll5vcjp69ChycnKwceNG6HQ6aLVavPXWW8jLy8Px48fPu/OSkhLk5ubCYrGgsLAQXm/XNRlXrlwJs9kMrbZr1q9atQoWiwVjx47F5s2b+/CxiEhtDptb9RucALZgST29Buzjjz+OBx54ALt27cILL7yAF154AR9//DEeeOAB/Nu//VuvO/b5fCgqKsKmTZtw9OhROBwOFBcXd9lu4cKFOHDgQJfnt2/fjk8//RRHjhxBSUkJ7r33XjQ1NfXx4xGRWhw2t+pDdAAgRq+FLlbL+Ygp5HoN2NLSUjzwwANdnv/tb3+L0tLSXndcWloKs9mMvLw8AEBRURG2bNnSZbvp06cjPT29y/NbtmzB7bffDq1Wi4yMDEyfPh3bt2/v9ZhEFB5a3B54Wrxh0YLVaDQwJsdxukQKuV4DNj4+vtvnNRoNDAZDrzu2Wq3IzMyUH2dlZcFqtQZcWKDvX7t2LXJzc+U/DQ0NAR+DiJQRLkN0JAkmTpdIoRfQONjuJplwuVzn3Xn7uwf7M1FFIO9fvnw5li9fLj/Ozc3t83GIKLjOzUMcHgFrTNbj1Lf1apdBF5heA7bz2NfOr/UmMzMTFRUV8mOr1Qqz2RxwYd29f8qUKQG/n4jUc26axHAJ2HPTJao9bIguHL0G7M6dO/u944KCAlRWVqK8vBy5ublYv3495s2bF/D7582bh6eeegq33XYbqqursXv3brzyyiv9roeIQifcAjYhOQ5+aX3axPCoiQa/Xq/BHj9+HPPmzcPEiROxePFinD59OuAdR0dHY926dZg/fz4sFgsMBgOWLFmC/fv3Y86cOfJ2y5Ytg9lshs/ng9lsxrJlywAA11xzDaZMmYJx48bhiiuuwJo1a2A0Gvv5MYkolKQ7dhPCpItYHgvL67AUQhrRy8XRq666ClOmTMGVV16J999/H2fPnu2wwk44ys3NRXl5udplEF3Qtq3bjz3vH8FTWxchOlr9ZafL951C8VMfo+ipWbBcPEztcmgQ6S1zeu0irqurw7PPPgsAuO6663DJJZcEvzoiGnQcNjcMxtiwCFfg3JJ5HKpDodTrv36dTif/rNFoEBUVHv9ZiCi8hcs0iRJpwn9Ol0ih1GsLtqysDDEx55Z38nq9iImJke/Ea21tVbxAIoo8TntL2AzRAXgNltTRa8D6/f5Q1UFEg4jD5kaqOXyWhtPFaKGPj2EXMYUU+3yJKKiEEPJSdeEkwaTnfMQUUgxYIgoqZ2MLhBBh1UUMgPMRU8gxYIkoqMJtkgmJKdUAe62rX9O2EvUHA5aIgkq6kSghDFbSac+UlgC3qxXNTt6cSaHBgCWioDrXglV/Ldj2ktPaVgez1ThVroQuFAxYIgoquQUbbl3EUsDWMmApNBiwRBRUjh/Wgg2HxdbbM6WyBUuhxYAloqBy2NzQ6qIRG6c7/8YhZEo1AADOVjNgKTQYsEQUVA5bM+KT9GG37qouRgtjchzs7CKmEGHAElFQOe0tYXf9VWJKi0cDu4gpRBiwRBRUTrs77K6/Skyp8bwGSyHDgCWioHLYwm+aRElyegKcjW60uD1ql0IXAAYsEQVNa4sXLc2esBsDK5HGwtprXSpXQhcCBiwRBY00xjRpqEHlSronDdXhdVgKBQYsEQWNdH1TaimGG3myiRqHypXQhYABS0RBI7VgTWEasFLwswVLocCAJaKgkVqwUldsuImN08FgjOWdxBQSDFgiChpbrRN6Qwzi4mPULqVHplSOhaXQYMASUdA01DjDtntYYkrjWFgKDQYsEQWNvdYlz/kbrpLTE9B41gWvx6d2KTTIMWCJKCh8Pj/sdS6Y0hLULqVX0i8A9jqOhSVlMWCJKCiazjbD7/eHfwuWdxJTiDBgiSgoGsJ8DKwkOb2thc2xsKQ0BiwRBYUUWOHfRcwWLIUGA5aIgsL2w/y+4d5FHJcQgxi9jncSk+IYsEQUFLZaJ6K10TAmh+dE/xKNRoNkrgtLIcCAJaKgsNU4YUo1QKPRqF3KeSWncywsKY8BS0RB0VDjDNspEjszpcbDXueCz+dXuxQaxBiwRDRgQgjYasN/FieJKS0efr8fTWeb1S6FBjEGLBENmKupBZ4Wb9gP0ZFwLCyFAgOWiAZMCqqkSOkiTuNYWFIeA5aIBizcF1rvjC1YCgUGLBENmLzQeoS0YBNMemh10byTmBTFgCWiAbPVuqDRaJAU5pNMSDQaDdeFJcUxYIlowGw1DhiT46DVRqtdSsC4LiwpjQFLRAPWUOOMmNarJDktHrZaJ4QQapdCgxQDlogGzFbjjJgbnCSmtHh4PT44bG61S6FBigFLRAPS4vbA1dQS9qvodMY7iUlpDFgiGhD7D6voRF4LlmNhSVkMWCIaEKkFGClDdCRswZLSGLBENCDSGNhIu8nJmBKHqKgo3klMimHAEtGARNosTpLo6CgkDTXIvyAQBRsDlogGxFbrhD4+BnpDjNql9JkpLR4N1QxYUgYDlogGJBKH6EiS09pmc+JYWFICA5aIBqShJnLWge3MlBaPVrcHzY5WtUuhQYgBS0T95vX60Fjvirg7iCVSy5vXYUkJDFgi6rems80QQkRsF7E0FrahmmNhKfgYsETUb5G20HpnHAtLSmLAElG/2Wsjc4iOJGlo29hd2w+zUREFEwOWiPpNnsUpQgNWq4tGYoqB0yWSIhiwRNRvthontLpoJCTp1S6l3zgWlpSiaMCWlJQgNzcXFosFhYWF8Hq9AW+zc+dOGI1G5OfnIz8/H/Pnz1eyVCLqB1utE6bUeGg0GrVL6TdpXViiYFMsYH0+H4qKirBp0yYcPXoUDocDxcXFfdpmypQpKCsrQ1lZGTZv3qxUqUTUT5E8BlZiSouHq6kFLc0etUuhQUaxgC0tLYXZbEZeXh4AoKioCFu2bOnzNkQUnoQQsNdG7hhYCe8kJqUoFrBWqxWZmZny46ysLFit1j5tc+DAAeTn52PmzJn48MMPlSqViPrB2dgCT6t3ELRgpXVhGbAUXFold97+ukxPc332tM3kyZNx8uRJJCYmoqysDHPmzMHevXuRnZ3d4f1r167F2rVr5ccNDQ3BKp+IemGT14GNrGXqOuNsTqQUxVqwmZmZqKiokB9brVaYzeaAt0lMTERiYiIAID8/H9OmTUNZWVmX4yxfvhzl5eXyn+TkZAU+DRF1ZpPHwCaoXMnASOvYsouYgk2xgC0oKEBlZSXKy8sBAOvXr8e8efMC3ub06dNyi9ZqtWLfvn3Izc1Vqlwi6qNIHwMridXrEJ+o53SJFHSKBWx0dDTWrVuH+fPnw2KxwGAwYMmSJdi/fz/mzJnT6zYA8M4772DChAnIz8/H3LlzsXr1aowZM0apcomoj2w1Tmg0GiQOiVO7lAEzcagOKUAjBtlCiLm5uXKLmIiU8/pTO1F59Cwe2TDv/BuHuf995hOcPFyLR1//hdqlUITpLXM4kxMR9Yu91hWxcxB3ZkqLR1NDMzytXSfDIeovBiwR9Ys0i9NgcO5OYk76T8HDgCWiPmtxe+Bqaon4G5wkJg7VIQUwYImoz6QxsIOmi/iHljgnm6BgYsASUZ9F+kLrnaUMaxvLW3PKrnIlNJgwYImozyJ9ofXO9IYYpGUmoeJIndql0CDCgCWiPhssk0y0l52TisqjZ+H1+NQuhQYJBiwR9ZmtxgmDMRaxep3apQRNVk4qfF4fKo+dVbsUGiQYsETUZ4NpiI4kOycVAFBxuFblSmiwYMASUZ811DjlSfIHi6EjjDAYY3kdloKGAUtEfeL1+tB0tjniV9HpTKPRIGv8UJw8XNvj8ppEfcGAJaI+aaxvhhBiUN3gJMkan4qmhmYuXUdBwYAloj4ZbJNMtCdfhz3C67A0cAxYIuqThpq2dVMH201OAJAxJgVRUVE4eZjXYWngGLBE1CfShPiDsYs4Vq/DsItMvJOYgoIBS0R9YqtxQhejRXxirNqlKCI7JxWnjzegxe1RuxSKcAxYIuqTMycaMGSEERqNRu1SFJGdkwohBKzf1qtdCkU4BiwRBazZ2YrKo2cxamK62qUoJmv8UADgeFgaMAYsEQXsxNc1EEJg1KTBG7Cm1HgkphhwktdhaYAYsEQUsGOHqqHRaHDRhDS1S1GMRqNBVs5QVByp44QTNCAMWCIK2PEvqzF8VDIMCYPzBidJ1vhUNDtaUGttVLsUimAMWCIKiKupBVXfn8XoScPULkVxnHCCgoEBS0QB+f7LagAY1Dc4SUaMSoZWF80JJ2hAGLBEFJBjh6oRFRWFkXmpapeiOK0uGhmWFLZgaUAYsEQUkO8PnUHGmBToDTFqlxIS2TmpqDllh6upRe1SKEIxYInovJoamlFzyn5BXH+VyONhv2E3MfUPA5aIzku+/jqIx792ljX+hxudOB6W+okBS0TndexQNaK10fLdtRcCY3IcUoYZOaMT9RsDlojO6/tDZ5A5bghiYrVqlxJS2TlDcerbevh8frVLoQjEgCWiXtnqnKg/3XRBXX+VZI1PRavbg+qTNrVLoQjEgCWiXn1/6MK7/iqRusQ5LzH1BwOWiHp17NAZ6GK0yBo3VO1SQi49Owkxeh0DlvqFAUtEPRJC4PtD1cjKGQqtLlrtckIuKioKmeOGoIIzOlE/MGCJqEdnqx2w1TovyOuvkuycVDTUONB41qV2KRRhGLBE1KML+fqrRB4Py+E61EcMWCLq0bFDZxCj1yHDkqJ2KaqRZ3RiwFIfMWCJqFvS9deReanQai+866+SuPgYpGeZeKMT9RkDloi6VVvZiKaG5gv6+qska/xQVB49C0+rV+1SKIIwYImoW/L11wtg/dfzsVwyHD6vDwd3HFe7FIogDFgi6taxQ2egj4/BiNHJapeiugnTMpGebcJHfz2EFrdH7XIoQjBgiagL6frrRRPSEBXFr4moqCjMvu0SNDU0Y/fWI2qXQxGC/3OIqIszJ21wNbXw+ms74wpG4KIJ6fjknXI47G61y6EIwIAloi44/rUrjUaD2bdfgla3ByUbv1K7HIoADFgi6uLYoTOIT9RjWLZJ7VLCSta4oZhweRb2/eM71J9uUrscCnMMWCLqwO/34/hXNbhoYho0Go3a5YSd65bmQ/gFtheXqV0KhTkGLBF1UHn0LNzOVl5/7cHQEYn48WwLDu06Cet39WqXQ2GMAUtEMq/Hh/dfLoVWF41xBSPULidsXX3rRMTodfhgw+cQQqhdDoUpBiwRyf723/th/a4eP7vnUiSnJahdTtgymuIw4+c5OHboDL49eFrtcihMMWCJCABw4KNj+OyD71BwjQWXXmtRu5ywN+PnOYhP0uODDZ/D7/erXQ6FIQYsEaHq+7N476VSjBidgp/dU6B2OREhNk6HWYsm4cyJBnzx8Qm1y6EwxIAlusC5HC144+lPoIuNxi8fnQldjFbtkiJGwbWjMWS4EduLv+BCANQFA5boAiaEwNtr/h9sNU4suP9yXnftI602GtcuzYet1ok973EKReqIAUt0Adux8St8s78SP1k0CeN+xLuG+2Pi5VnIzknFh6+X4c3ndqHxrEvtkihMMGCJLlDfHKjCR389hHEFGbh64QS1y4lYGo0Gtz9xFS7/2Xh8ubsC//mrbfj079/yxidiwBJdiBpqHNj4hz0wpcZjwX3TOGPTAOkNMZh7VwF+/fxspAxPwHt//gwvP7gdVd+fVbs0UpGiAVtSUoLc3FxYLBYUFhbC6+16E0Bv26xatQoWiwVjx47F5s2blSyV6ILQUOPA//vbEaz//Q54W3345e9mwmCMVbusQcNsGYJfr5mNuXcVoLrCjrX3foC/rz/INWQvUBqh0DQkPp8PY8aMwd/+9jfk5eVhwYIFuP7663HHHXcEtM327dvx1FNPYceOHaiursZll12G8vJyGI3GXo+bm5uL8vJyJT4SUcQRQqDq+waUf3oKh/dZcfp4AwDAmByHuXcXYNL0bJUrHLxsdU7837oD+Or/VSBpaDwmzchGenYSho1MRlpmIu/WHiR6yxzF/oZLS0thNpuRl5cHACgqKsKLL77YIWB722bLli24/fbbodVqkZGRgenTp2P79u34xS9+oVTJRBFFCIHWFi/cTg9aXB64XR64na1wu9oeV33fgMP7rLDXOQEA6VkmXLVgAnKmmGEeM4TdwgozDY3H4kdm4khpJf7xPwex691zX8JRUVEYMsKIYSNNSM82IdWciNg4HWL0WvmPLjYaMbFtP0dro/j3FYEUC1ir1YrMzEz5cVZWFqxWa8DbWK3WDmHa3fuV9Jff/QtnTtpCdjy6QLXrP+quM0mItueFX7T97BcQQsDvF/LPPdFoNBiZl4bLbxyP3ClmDBnee+8PKWP8pRkYf2kG3K5WVFfYceaEDdUnbThzwoZjX5zBl7tPBrQfjUYDTZQGUVGaDj9DAzl8O2ewHMrM5i4e3vBzaLXRih5D0T6K9r9x9fRF0Ns2gbx/7dq1WLt2rfy4oaGhX7V2Zh47BAkmfVD2RdSrdl9+nVspGg2gkb5Qf/hS1WjQ9iUbpYHeoEOsQQe9QQd9fAxi43TQx7c9lzTUAEMCr6+GC70hBtnjU5E9PlV+TgiBpoZm1J92oNXtRavbg1a3F54W3w+P2/74vH75Fy1/u1+2/H4/hL/jd6P0VSl/Z3Itgm6FokdAsYDNzMxERUWF/NhqtcJsNge8TXevTZkypctxli9fjuXLl8uPc3Nzg1L/7NsuCcp+iIh6otFokJhiQGKKQe1SSAGK3UVcUFCAyspK+eLv+vXrMW/evIC3mTdvHl577TX4fD5UVVVh9+7duPbaa5Uql4iIKKgUC9jo6GisW7cO8+fPh8VigcFgwJIlS7B//37MmTOn120A4JprrsGUKVMwbtw4XHHFFVizZs157yAmIiIKF4oN01ELh+kQEVGo9JY5nMmJiIhIAQxYIiIiBTBgiYiIFMCAJSIiUgADloiISAEMWCIiIgUwYImIiBTAgCUiIlLAoJtoIjExscucx/3V0NCA5OTkoOxrsOO5ChzPVeB4rgLHcxW4YJ4rq9WKxsbGbl8bdAEbTJwVKnA8V4HjuQocz1XgeK4CF6pzxS5iIiIiBTBgiYiIFMCA7UX7dWapdzxXgeO5ChzPVeB4rgIXqnPFa7BEREQKYAuWiIhIAQxYIiIiBTBgu1FSUoLc3FxYLBYUFhbC6/WqXZKqTp06hZ/85CfIycnBhAkT8Nhjj8mvrVq1ChaLBWPHjsXmzZs7vGfGjBkYO3YsrrjiClRVValRuqp+/etfQ6vVyo95rrpyOBxYunQpxo4di/Hjx+OVV14BwHPVnQ8++AD5+fnIz8/HtGnTcPjwYQA8VwCwcuVKmM3mDv/fgP6dm7feegtjx47F6NGj8eijjw6sMEEdeL1ecdFFF4mvvvpKCCHEzTffLNavX69yVeqqqqoSpaWlQgghWlpaxMyZM8V7770nPvzwQzFjxgzh8XiE1WoVZrNZNDY2CiGEuPXWW8Urr7wihBBi7dq1YunSparVr4ZPPvlELF26VERHRwshBM9VD+666y6xevVqIYQQfr9fVFdX81z1IDMzU5SXlwshhHjllVfE/Pnzea5+sGvXLnHmzBn5/5sQ/fs/19DQIMxms6iqqhIej0dMnTpV7Nixo991MWA72bt3r5gxY4b8+IMPPhBz585VsaLws2LFCvHHP/5RLFu2TLz66qvy87fccovYvHmz8Pv9IikpSTQ3NwshhHA4HMJkMqlVbsi53W4xbdo0UVNTI/+H57nqqrGxUQwfPlx4PJ4Oz/NcdS8rK0t8+umnQgghnnvuObFy5Uqeq07aB2x/zs2bb74plixZIr/n5ZdfFitWrOh3Pewi7sRqtSIzM1N+nJWVBavVqmJF4aW+vh5bt27FrFmzejxX9fX1iI+Ph16vBwDEx8cjJiYGdrtdrbJD6sknn0RRURFSU1Pl53iuuvr++++Rnp6OFStWYPLkybjxxhtx4sQJnqseFBcX44YbbkBmZiZeffVVPP744zxXvejPuQn29z8DthsajUb+WXAUk6ylpQXz58/Hfffdh5ycHAA9n6v2z3d+bTA7dOgQ9u3bhzvuuKPLazxXHXk8HpSVleHGG2/EwYMH8dOf/hSFhYUAeK468/l8eOaZZ1BSUoJTp05h1apVWLp0KQCeq97059wE8/ufAdtJZmYmKioq5MdWqzVoiwdEMp/Ph8WLF6OgoAD33nsvgJ7P1ZAhQ+BwOOB2uwEALpcLHo8HSUlJqtQeSnv27EF5eTkuuugijBw5Ej6fDyNHjuS56kZmZiZSUlJw/fXXAwAWLVqEgwcP8lx14/PPP0djYyMmTpwIAPjlL3+JnTt38lz1oj/nJujf//3uXB6kvF6vGDVqlPj666+FEEIsXLjwgr/JSQghCgsLxR133CH8fr/83Pbt28XMmTOF1+sVlZWVIjMzU76JYNGiReK///u/hRBCvPTSS4P6BoveSNeEeK66N3PmTPkGuq1bt4pp06bxXHWjqqpKDBkyRFitViGEEO+995740Y9+xHPVSftrsP05NzabTWRmZorTp08Lj8cjLr/8ct7kFGwfffSRyMnJEaNHjxZ33HFHl5swLjS7d+8WAMSECRPExRdfLC6++GLxX//1X0IIIR588EExevRoYbFYxNtvvy2/p6KiQkyfPl2MGTNGzJgxQ/5iuNC0/w/Pc9XV119/LS677DIxceJEMWPGDPkuWZ6rrtavXy9yc3PFpEmTxLRp00RZWZkQgudKCCHuvvtukZGRIQCIjIwMcffddwsh+ndu3nzzTWGxWMSoUaPEww8/PKC6OFUiERGRAngNloiISAEMWCIiIgUwYImIiBTAgCUiIlIAA5aIiEgBDFiiQeTAgQPQaDR499135edGjhzZ7XRv+/fvxz333AMA2LlzJ2bNmtXl+RMnTuD1118PQeVEgw8DlmgQKS4uxsyZM1FcXHzebQsKCvDyyy/3+jwDlqj/GLBEg4TX68WmTZvw2muvYc+ePTh79qz82ksvvYRLLrkEubm5KCkpAdCx1dpe++fvvfde7Nu3D/n5+Xj44YdRVFTUIbxXr16Nhx56SOFPRhSZGLBEg8T27duRl5eHkSNH4mc/+xnefvtt+TW/34/PP/8cb775Jm677Ta0trYGtM///M//xJQpU1BWVoZnn30W99xzD9atWye/vn79etx5551B/yxEgwEDlmiQKC4uxuLFiwEAixcv7tDSlFZeufjiizFkyBB89913/TrGpZdeCqfTiW+++QY7d+7EiBEjMGbMmIEXTzQIadUugIgGrqmpCdu2bcOePXvw+OOPAwCqqqpw7NixbrfvvFxXX9x99934y1/+gtOnT+Ouu+7q936IBju2YIkGgc2bN2P27NmoqKjAiRMncOLECdx333144403AEC+UemLL75AfX09LBZLQPtNTExEU1NTh+cWLVqEzZs3o6SkBPPmzQvuByEaRNiCJRoEiouL5aE1kptvvhkLFy4EABgMBkydOhV2ux0bNmxATExMQPudNGkSkpOTMXnyZFx//fX493//dxiNRsycORPJycnQ6/VB/yxEgwVX0yGiPvH5fMjPz8fbb7+NnJwctcshClvsIiaigO3evRtjx47F7NmzGa5E58EWLBERkQLYgiUiIlIAA5aIiEgBDFgiIiIFMGCJiIgUwIAlIiJSAAOWiIhIAf8fRbsaGqLKi1MAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "actual_600.plot(color='C4')\n", "\n", "decorate(xlabel='Ability',\n", " ylabel='PDF',\n", " title='Posterior distribution of ability')" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "The posterior mean is pretty close to the test-taker's actual ability, which is 600." ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.838050Z", "iopub.status.busy": "2021-04-16T19:36:01.837246Z", "iopub.status.idle": "2021-04-16T19:36:01.840157Z", "shell.execute_reply": "2021-04-16T19:36:01.840790Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "604.3325737356816" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "actual_600.mean()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "If we run this simulation again, we'll get different results." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "## Adaptation\n", "\n", "Now let's simulate an adaptive test.\n", "I'll use the following function to choose questions, starting with the simplest strategy: all questions have the same difficulty." ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.844976Z", "iopub.status.busy": "2021-04-16T19:36:01.844147Z", "iopub.status.idle": "2021-04-16T19:36:01.846868Z", "shell.execute_reply": "2021-04-16T19:36:01.846106Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "def choose(i, belief):\n", " \"\"\"Choose the difficulty of the next question.\"\"\"\n", " return 500" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "As parameters, `choose` takes `i`, which is the index of the question, and `belief`, which is a `Pmf` representing the posterior distribution of `ability`, based on responses to previous questions.\n", "\n", "This version of `choose` doesn't use these parameters; they are there so we can test other strategies (see the exercises at the end of the chapter).\n", "\n", "The following function simulates a person taking a test, given that we know their actual ability." ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:01.855382Z", "iopub.status.busy": "2021-04-16T19:36:01.854536Z", "iopub.status.idle": "2021-04-16T19:36:01.859080Z", "shell.execute_reply": "2021-04-16T19:36:01.859755Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "def simulate_test(actual_ability):\n", " \"\"\"Simulate a person taking a test.\"\"\"\n", " belief = prior.copy()\n", " trace = pd.DataFrame(columns=['difficulty', 'outcome'])\n", "\n", " for i in range(num_questions):\n", " difficulty = choose(i, belief)\n", " outcome = play(actual_ability, difficulty)\n", " data = (difficulty, outcome)\n", " update_ability(belief, data)\n", " trace.loc[i] = difficulty, outcome\n", " \n", " return belief, trace" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "The return values are a `Pmf` representing the posterior distribution of ability and a `DataFrame` containing the difficulty of the questions and the outcomes.\n", "\n", "Here's an example, again for a test-taker with `ability=600`." ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:02.065735Z", "iopub.status.busy": "2021-04-16T19:36:01.972864Z", "iopub.status.idle": "2021-04-16T19:36:02.073027Z", "shell.execute_reply": "2021-04-16T19:36:02.073660Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "belief, trace = simulate_test(600)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "We can use the trace to see how many responses were correct." ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:02.078607Z", "iopub.status.busy": "2021-04-16T19:36:02.077821Z", "iopub.status.idle": "2021-04-16T19:36:02.080643Z", "shell.execute_reply": "2021-04-16T19:36:02.081214Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "42" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trace['outcome'].sum()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "And here's what the posterior looks like." ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:02.102082Z", "iopub.status.busy": "2021-04-16T19:36:02.100560Z", "iopub.status.idle": "2021-04-16T19:36:02.262629Z", "shell.execute_reply": "2021-04-16T19:36:02.262216Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "belief.plot(color='C4', label='ability=600')\n", "\n", "decorate(xlabel='Ability',\n", " ylabel='PDF',\n", " title='Posterior distribution of ability')" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Again, the posterior distribution represents a pretty good estimate of the test-taker's actual ability." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "## Quantifying Precision\n", "\n", "To quantify the precision of the estimates, I'll use the standard deviation of the posterior distribution. The standard deviation measures the spread of the distribution, so higher value indicates more uncertainty about the ability of the test-taker.\n", "\n", "In the previous example, the standard deviation of the posterior distribution is about 40." ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:02.267364Z", "iopub.status.busy": "2021-04-16T19:36:02.266590Z", "iopub.status.idle": "2021-04-16T19:36:02.270685Z", "shell.execute_reply": "2021-04-16T19:36:02.271080Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "(618.6942050450824, 40.08554296596485)" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "belief.mean(), belief.std()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "For an exam where all questions have the same difficulty, the precision of the estimate depends strongly on the ability of the test-taker. To show that, I'll loop through a range of abilities and simulate a test using the version of `choice` that always returns `difficulty=500`." ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:02.629755Z", "iopub.status.busy": "2021-04-16T19:36:02.453372Z", "iopub.status.idle": "2021-04-16T19:36:11.198947Z", "shell.execute_reply": "2021-04-16T19:36:11.198539Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "actual_abilities = np.linspace(200, 800)\n", "results = pd.DataFrame(columns=['ability', 'posterior_std'])\n", "series = pd.Series(index=actual_abilities, dtype=float, name='std')\n", "\n", "for actual_ability in actual_abilities:\n", " belief, trace = simulate_test(actual_ability)\n", " series[actual_ability] = belief.std()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "The following plot shows the standard deviation of the posterior distribution for one simulation at each level of ability.\n", "\n", "The results are noisy, so I also plot a curve fitted to the data by [local regression](https://en.wikipedia.org/wiki/Local_regression)." ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:11.221079Z", "iopub.status.busy": "2021-04-16T19:36:11.215993Z", "iopub.status.idle": "2021-04-16T19:36:11.368244Z", "shell.execute_reply": "2021-04-16T19:36:11.367858Z" }, "tags": [ "hide-input", "hide-cell" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAFgCAYAAAAYQGiBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAAuJAAALiQE3ycutAABTFklEQVR4nO3dd3hUZdo/8O9zzpmECSkQIJQUAoYkhJKIdJIAoQmKKOVVaSJFVrEsy8rrz3XVdxd1V0UXV1AQUQTLKosiiJIgNSDdABoCSJEMkUQgpJB2yvP7Y2BMhCSTzJw5U+7PdeWCOWfOOfcDSe55OuOccxBCCCHEqQSjAyCEEEK8ESVYQgghRAeUYAkhhBAdUIIlhBBCdEAJlhBCCNEBJVhCCCFEB5LRAThDcHAwIiIijA6DEEKIj7FYLCguLr7pOa9IsBEREcjOzjY6DEIIIT4mISGh1nPUREwIIYTogBIsIYQQogOvaCImhBDifrxpJV7GWIOvoQRLCCHEqWRZRm5uLiorK40OxWn8/f0RGRkJk8lk9zWUYAkhhDhVbm4ugoKCEB0d3aian7vhnOPSpUvIzc1Fx44d7b6OEiwhhBCn4ZyjsrIS0dHREATvGObDGEOLFi1w8eJFcM7t/tDgHaUnhBDiVryh5lpdY8pDCZYQQgjRASVYQgghboGrMnh5Ebgq6/aMbdu2YceOHbWenzZtGlavXu2UZ1EfLCGEEENxTYN6MhNazhZALgdMZgjxaRA7JYM5uR9327ZtkCQJqampTr3vzVCCrYYrVYBo8rq+A0IIcWfqyUxoWeuA4DCwpqHgcrn1NQAprvGJsKysDJMmTcKpU6egaRq6deuGrVu3gjGGNWvW4JlnnsGdd96JmTNn4sCBA+jQoYNTB2bp2kT82GOPISIiApJUM4/Pnz8fMTExiI2NxZo1a2zHc3NzkZKSgtjYWAwcOBB5eXl6hlcDv3oZ8oYXoB3f5rJnEkKIr+OqbK25BoeBmcwAYP0zOAxazhaHmos3bdqE0NBQHDlyBD/88AOWLFmCP/zhD5gzZw6ysrIwfvx4vP3221BVFceOHcPy5cuRmZnprKLpm2DvvfdeHDx4sMax9PR07NmzBzk5Odi6dSvmzp2LkpISAMD//u//YsqUKThx4gTuvfde/L//9//0DK+mJsFg/k2hHPgM2sWzrnsuIYT4sqoyQC63JdfrmMlsbS6uKmv0rbt3745t27bhySefxKZNmxAcHHzDe7Zv344pU6aAMYbw8HCkpaU1+nm/p2uCTU5ORuvWrWscW7t2LaZNmwZJkhAeHo7k5GSkp6eDc46NGzdi6tSpAIAHHngAX375pZ7h1cBECVLqTDCTGcr2ZeCVV132bEII8Vl+AYDJDC6X1zjMr/XFwi+g0be+5ZZbcOjQIfTu3RvLly/HXXfddcN79FzO0eWjiC0WCyIjI22vo6KiYLFYcOnSJTRt2hRNmjQBADRt2hR+fn4oKipyWWysaSiklBngVy9D2fW+V62jSQgh7oiJJgjxaUBxgS3JcrkcKC6AEJ8GJtq/NOHvWSwWmEwmTJgwAYsWLcK+ffsQHBxsazUFgEGDBmHVqlXgnOP8+fPYunWrw2W6zpBBTtUHEVVPYr8fXFRbglu8eDEWL15se11YWOi02IR2CRC7j4J65Cto2RkQuwx32r0JIYTcSOyUDADWPterl62jiJPG2I431tGjR/HUU0+BMQbOOf7973+jd+/eGDduHL799ls8/fTT+MMf/oADBw6ga9euiIuLw+DBg51RJAAGJNjIyEicO3fO9tpisaBPnz5o0aIFSktLUVFRgSZNmqCsrAyyLCMkJOSGe8yZMwdz5syxva5rw9vGELvfCV7wE5RDn4O17AihdYxT708IIeQ3TBAgxaWCx/Sz9rn6BThUc71u5MiRGDly5A3Hv//++xqvnTXv9fdc3kQ8duxYrFy5EqqqIi8vD5mZmRg+fDgYY7jjjjuwatUqAMDKlStv2l7uCkwQIKXMBGsSCGXHMvCKkvovcmOumLxNCCGOYqIJzBzilOTqDnStwc6ePRtfffUVVFVFREQE7rjjDixduhQZGRmIi4sDYwwLFy5EUFAQAOAf//gHJk6ciFdeeQVt2rTBxx9/rGd4dWLmYEgpsyCnvwZl57uQhjzu9AnPzsJV+aaf+lw5eZsQQkhNjHvBSJ6EhARkZ2frcm/16DdQvv8cYuJoSIl36vKMxqovgSrHd/w2efv6KL3iAghJYxyavE0IIbXhnCMnJwdxcXFes5sOAGiahuPHjyM+Pr7GeKG68o/3lF4nQtcREMK7Qj28AVqePkm8sWyrn/iZwZqFA35maFnroJ7M1HXyNiGE1IYxBlEUIcve9TtGlmWIotiglf4owdaDMQYp+UGwps2hZK4AL7tidEgA7Fj9pLxIt8nbhBBSl5CQEOTn50NVVXDOPf5LVVXk5+ffdNBtXWgtYjsw/0BIqbMgb3oVys7lkIbNBRNEY4O6vvpJ09Aah5nJbB3mDmabvF09yTpj8jYhhNSlVatWyM3NxYkTJ4wOxWkCAgLQqlWrBl1DCdZOQquOkHqMhXLgM6iH10O69W5jA6q2+snNEigzB0OIT4OWtQ78Jn2w3jJKjxDifgRBQPv27b1qsZ7GbAJDCbYBhM5DIFw4AfXoNxDCOkEI72JYLNdXP6krgeo1eZsQQuzh6zuT0SjiBuKVVyFveAFQKmEa/QxYQHOXPPemsdg5Dae2aTyEEEIcU1f+oRpsAzH/ppAGzoL8zStQdiyHNPxPdvXH6pHk7F39hIkmwNywznl7UfImhJCbowTbCELLDpBuGwdl/6f19se6YrEHPRNobWgRC0IIqRv9JmwkIT4NQmQS1KNfQzv/Y63LEdY1V7U6T1vO0N5yGcnT/k0JId6FarCNxBiD1H8q5PXnULXxH2DNw8HAa9TkwNWbzlXl1+eqxvQDmOhxNcHa5uBWL5eRzcVUuyaEuAP6beMA5t8UrH0P8Es/gxecBELa1qzJXZ+rWsdiD55QE7yBHeUykkf+mxJCvA4lWAdwVQbP+xFCRDegvAT8wvGaqymJJttc1RrXXatVcdHkmcsZVpuDW507LGJBS0QSQtwFJVhHXK/JtY4FC2kDXnAKvLjAVpNjqgwhPg0oLrAlI9tc1fg0MFV265pgba7Pwa21XEaOJnbz2jUhxHdQH6wjrtXkoFSARSaClxdBy80C69Db+gvdL6DuxR646rHLGbrtIhb1rHDlzv+mhBDvQgnWAdVXU0JwGIT2PaCe3Amc3gNhxHxbTa72uaqCxy5naO8cXJfHZccKV4QQ4gqUYB1UvSYHuRxCaHvw8iKw8qIa76ttrqrb1gTtZMQc3Pp4+r8pIcQ70FKJTnJ9RSNuMkPdvgza+R9gGvZHCG3jG3S9u9QEvQH9mxJC9EYbrrsAE01g5hAIkh+k5GlgAc2gZL4LXl7coOspETgP/ZsSQoxECVYH1v1jZ4JXlFo3aff8RgJCCCENRAlWJ0JYDKSkMdB+OQb16NdGh0MIIcTFKMHqSOg6AkK7BKhZX0LLP2l0OIQQQlyIEqyOGGOQkqeDmYOh7FwOXlFqdEiEEEJchBKszliTIEgpM8HLiqg/lhBCfAglWBcQ2sRCTLwTWt6P0LIzjA6HEEKIC1CCdRGx2ygIbeKgHPoc2sUzRodDCCFEZ5RgXYQJgrU/1r8plB3vgNOi84QQ4tUowboQC2gGacA08NJLUL5bRf2xhBDixSjBupgQ3hVil+HQfj4E7cQOo8MhhBCiE0qwBhCTxkBo2QHK/k+hFVqMDse6cXx5kS6bkXvqvQkhxFG0m44BmChBSp0Fef3foWx/B6Y7ngYz+bs8Dq5pUE9m2nYCgskMIT4NYqdkMMGxz16eem9CCHEW+m1kEBbYAmL/qeDFF6Du+9iQGNSTmda9bP3MYM3CAT8ztKx1UE9m+uy9CSHEWSjBGkhs3wNi7ECop76DemqPS5/NVdlaA7y2KTkA65/BYdZ9VB1odvXUexNCiDNRgjWY2HM8WLNwKHs/Ai+64LoHV5UBcrktSV3HTGZrs6sj04g89d6EEOJElGANxiQ/mAY+BHAOecdy19XA/AIAkxlcLq9xmF/r04RfgO/dmxBCnIgSrBtgIW0g9bkfvDAX6sH/uuaZoglCfBpQXGBLVlwuB4oLIMSnObRJuafemxBCnMmwBPv222+ja9eu6NKlC/7whz9AVVUAwPz58xETE4PY2FisWbPGqPBcTrilH4SOfaDmbIWWe9glzxQ7JUNIGgNUlYNfOQ9UlUNIGgOxU7LP3psQQpyFcQOWE/rxxx8xZswYHDx4ECEhIXjiiSfQo0cPtG3bFgsWLMCWLVuQn5+Pvn37Ijs7G0FBQXXeLyEhAdnZ2S6KXj9croC8YQFQWQbT6GfAmoa65rmqbO279Atweg3QU+9NCCH2qCv/GFKDzc7ORp8+fRASEgIAGDFiBD799FOsXbsW06ZNgyRJCA8PR3JyMtLT040I0RDM1ARS6kPgSgWUne+Ca6prniuawMwhuiQpT703IYQ4ypAEm5iYiF27diEvLw+qquKzzz5Dbm4uLBYLIiMjbe+LioqCxXLjSkeLFy9GQkKC7auwsNCV4etKaBEF6bZx0Ap+gnrkK6PDIYQQ0kiGJNjY2Fi89NJLuPvuu5GSkoKoqChIknVRKcaY7X21tV7PmTMH2dnZtq/mzZu7JG5XEeLTIIR3g3pkI7RfcowOhxBCSCMYNsjp/vvvx759+7B7924kJSUhLi4OkZGROHfunO09FosFERERRoVoGMYYpAHTwAJCoGSuAK8oMTokQgghDWRYgs3PzwcAFBcX45///Ccee+wxjB07FitXroSqqsjLy0NmZiaGDx9uVIiGYk0CISXPAC8vhrLrfdrajhBCPIxhi/3fd999yM/PB+ccTz75JPr37w8AyMjIQFxcHBhjWLhwYb0jiL2Z0CYWYuKdUA+vh3bsW4gJQ40OiRBCiJ0MmabjbN4yTedmuKZByXgN2q+nYbp9PoSW0UaHRAgh5Bq3m6ZD7McEAVLydDCpCZSdy8HlCqNDIoQQYgdKsB6ANQ2FNOAB8JJfoez5kPpjCSHEA1CC9RBCZCLE+MHQzuyDduo7o8MhhBBSD0qwHkTsMRaseSSUfZ+4dms7QgghDUYJ1oMwyQ+m1JkA4Nqt7QghhDQYJVgPw0LaQOp9n3Vru0NrjQ6HEEJILepNsJqmITMz0xWxEDsJt/SD0KE31GNbXLa1HSGEkIapN8EKgoAnn3zSFbEQOzHGIPWZCBbUCsquleBl3rPZASGEeAu7moj79++Pbdu26RwKaQjmZ4aUMrPa1naa0SERQgipxq4E+8UXXyAtLQ3t2rVDbGwsOnXqhNjYWL1jI/UQWkZDuvVuaPknoR7daHQ4hBBCqrFrLeItW7boHQdpJCFhGIRfcqAe3gChTTyE1jFGh0QIIQR21mDbt2+PoKAgHDt2DDk5OQgKCkL79u31jo3YgTEGKflBMHOQdSnFylKjQyKEEAI7E+yGDRvQrVs3LFu2DG+//Ta6d++OjRupSdJdsCZBkAY8CF52Bcp3q2gpRUIIcQN2NRH/9a9/xe7du2211rNnz+Kee+7BqFGjdA2O2E9olwCx63CoP2yCdmI7xLhBRodECCE+za4arKqqNZqEo6OjoaqqbkGRxhET74LQsgOU/Z9BK7QYHQ4hhPg0uxJsQkIC5s2bh2PHjuHYsWOYN28eEhIS9I6NNBATJUgpM8FECcqO5eBKldEhEUKIz7IrwS5btgwAMHnyZEyaNKnGMeJeWFBLiP2mgBf9AnX/f4wOhxBCfJZdfbDBwcFYuHCh3rEQJxGje4LnZUM9mQnWtjPE6J5Gh0QIIT6nzgS7YsUKTJ8+HS+88AIYYzecf/rpp3ULjDhG7H0ftF9PQ/1uNYSWHcACWxgdEiGE+JQ6m4hl2bodmqIokGX5hi/ivpjkByl1JrgqQ9nxDriqGB0SIYT4lDprsLNnz4amaQgMDMS8efNcFRNxEqF5BKReE6Ds/Rjq4fWQetxjdEiEEOIz7NpNZ8OGDa6IhehAiB0IISrJOj/2l2NGh0MIIT7DrlHEQ4YMwXPPPYcTJ04gLy/P9kXcH2MMUr8pYAHNoGSuAK8oMTokQgjxCYzbsa5ehw4dbryQMZw+fVqXoBoqISEB2dnZDt+HqzJQVQb4BYCJJrvPeQIt/yTkTQshtEuANOSxmw5aI4QQ0jB15R+7pumcOXPGqQG5G65pUE9mQsvZAsjlgMkMIT4NYqdkAKj1HBPsagBwC0LrThAT74R6eD20Y5shJgwzOiRCCPFqdi+VuHTpUjz11FMArGsR79q1S9fAXEk9mQktax3gZwZrFg74maFlrYN6MrPOc55G7DYKQutOUA59Du3Sz0aHQwghXs2uBPvwww/jyJEj+PLLLwEAzZs3xxNPPKFrYK7CVdlaOw0OAzOZAcD6Z3AY1OzN0I5l3PSclrPF2mzsQZggQEqeDiY1sU7dkSuMDokQQryWXQl2//79WLx4Mfz9/QEAISEh3jMPtqoMkMttCfQ6ZjIDlSXgFaU3PyeXW6/1MKxpKKQBD4CX/Apl70dGh0MIIV7LrgTr5+cHALaBMVeuXNEtIJfzCwBMZnC5vMZhLpcD/kFgTQJvfs5ktl7rgYTIRIjxg6Gd3gv11HdGh0MIIV7JrgQ7ZcoUTJkyBYWFhXjjjTcwePBgPPzww3rH5hJMNEGITwOKC2yJlMvlQHEBxIShEDoPu+k5IT7NI0cTXyf2GAvWPALK3o/Biy4YHQ4hhHgdu6bpAMDWrVuxceNGcM4xcuRIDBkyRO/Y7OboNB1fGEV8M7zoAqo2vAAW3BqmUf/r0R8YCCHECHXlH7sS7JtvvolHH320xrElS5bgkUcecU6EDqJ5sI2n/rQLyu4PIHYeAqnX/xgdDiGEeJS68o9dVbAVK1bccOz99993KCh3xEQTmDnkpgm0rnOeTLilP4ToXlCPfQvNcsTocAghxGvUudDE+vXr8eWXXyI3NxcPPfSQ7XhxcTFEUdQ9OKI/xhikvpMgXzwDJfN9mO76K1hAc6PDIoQQj1dnDTYqKgrJyckICAjAgAEDbF/33nsvvvnmG4ce/M033yApKQlJSUno378/jh2zLkQ/f/58xMTEIDY2FmvWrHHoGcQ+zM8MKXUWuFwOZee74JpmdEiEEOLx7OqDLS0tRWBgoO11WVkZAgIcm6ISFRWFTZs2oXPnzli2bBkyMjIwa9YsLFiwAFu2bEF+fj769u2L7OxsBAUF1XkvZ/XB+jr1x3QoB/8LMXE0pMQ7jQ6HEELcnsN9sI8//jiKiopQWVmJpKQkREZG4s0333QoKMYYiouLAQBFRUVo27Yt1q5di2nTpkGSJISHhyM5ORnp6ekOPYfYT0gYBqFdF6iHN0DLP2l0OIQQ4tHsSrCHDh1CSEgINm3ahD59+sBiseCdd95x6MGrVq3CHXfcgcjISLz77rt47rnnYLFYEBkZaXtPVFQULBbLDdcuXrwYCQkJtq/CwkKHYiFWjDFIyQ+CmYOsTcWVpUaHRAghHsvuxf4BICMjA2PGjIHZbHZouzNVVfHSSy9h69atyM3Nxfz58zF16lQAqHHf2lqv58yZg+zsbNtX8+Y0KMdZWJMgSMnTwcuuQNn1Qa3/B4QQQupmV4Lt378/hg4dis2bN2PIkCEoKipyaBTx999/j+LiYnTr1g0AMHnyZGzbtg2RkZE4d+6c7X0WiwURERGNfg5pHKFtZ4hdR0CzHIZ2fJvR4RBCiEeyK8G+/fbbePXVV7Fnzx74+/tDlmUsX7680Q8NDw/H8ePHcf78eQDWEcWdO3fG2LFjsXLlSqiqiry8PGRmZmL48OGNfg5pPDFxNIRWHaEcWAPtcq7R4RBCiMexa8N1xhgKCgrwySefgDGGwYMHO5T42rZti1deeQXDhw+HJEkIDAzEu+++i8TERGRkZCAuLg6MMSxcuLDeEcREH0yUIKXMhLz+71B2vAPTHX8BM/kbHRYhhHgMu6bp/P3vf8eGDRswceJEAMBHH32Eu+66C3/5y190D9AeNE1HP+rPh6BsXwrxlv6QBjxgdDiEEOJWHF6LuHv37ti/f79tP9iKigr06tULR48edW6kjUQJVl/Kng+hntgBKXk6xI59jA6HEELchsPzYDnnEKrtHCN4+C4ypGHEnhPAmrWDsudD8OICo8MhhBCPYFemvOeeezB48GC89dZbeOuttzB48GCMGzdO79jINVyVwcuLrDv6GIBJfpBSHwK4BnnHO4bFQQghnsTu/WC//PJLbN++HZxzDB48GKNHj9Y7Nrt5axNxXfvUGrEXrXpyF5TvaGs7Qgi5rq78Y9coYgAYNWoUOnXqBMYYYmJinBYcqZ16MhNa1jogOAysaSi4XG59DUCKS3V5PEJMfwi/HIN67FsIbeMhRHR3eQyEEOIp7KoGbdu2DbfccgsmT56MiRMnIiYmBtu3b9c7Np/GVdlacw0OAzOZAcD6Z3AYtJwthjTTWre2mwgW2BJK5vvgZbREJSGE1MauBPvoo49i/fr1OHjwIA4dOoR169Zhzpw5esfm26rKALncllyvYyaztbm4qsyQsJhfAG1tRwghdrArwfr5+aF799+aAxMTExEcHKxbUASAXwBgMoPL5TUO82t9sfBzbLtARwgtoyH1uAda/kmoRzcaFgchhLgzuxLsyJEj8fTTTyMnJwc5OTl4+umnMWrUKOTl5SEvL0/vGH0SE00Q4tOA4gJbkuVyOVBcACE+DUw0GRpfja3tLpwwNBZCCHFHdo0i7tChQ+03YAynT592alANRaOIDYqvogTy+r8DTIBp9DNg/oFGh0QIsRNXZWtXk1/ATT+w13feyNjc6d4OjyI+c+aMw0GQhmOCACkuFTymn2Hf6HW5vrWdnPEvKJnvQ0qb49A2hoQQ/dX3wd3ID/Z6PtuIchlfDSL1YqIJzBziVsn1OqFtPMTuo6CdP2r9xiWEuDXb9D8/M1izcMDPDC1rHdSTmXadNzI2d713bSjBEoeJ3e+AEBYD5eB/oV362ehwCCG1qG/6n1ZVZtj0QD2nJho17bHOBKsoii4PJd6FCSKklBlgUhMoO94Bryqv/yJCiOvVN/2v9JJx0wP1nJpo0LTHOhNs7969AQDTpk3T5eHEe7CmoZAGPABe8qt1UwD7VuAkhLhSfdP/AlsYNz1Qz6mJBk17rDPBVlRUYNOmTfjuu+/w3XffYffu3TW+CKlOiEyE2HkItLP7of1E3x+EuJv6pv8JfgGGTQ/Uc2qiUdMe6xxFvGDBAixatAh5eXl4+umnawbMGLZsoUEtpCbx2gIUyr6PwVp1hNCsrdEhEUKqETslA4C17/HqZeto2qQxtuP1nTcyNne9d23smgf7zDPPYMGCBboF4ShvnQfrqXhxAeQNLwCBoTCN+n9gkp/RIRFCfofmweo/D9bu7erS09OxZcsWMMaQlpaGYcOGORyYs1CCdT/qmf1Qdi6H2CkFUr/JRodDCCG6qCv/2DVNZ8GCBfjrX/+Ktm3bok2bNnjmmWfwwgsvODVI4l3EDr0gxgyAenIn1LMHjA6HEEJczq4abPfu3bF//374+/sDsA5+6tWrF44ePap7gPagGqx74nIl5I0vAWWFMN35DFhQK6NDIoQQp3K4Bss5h1BtKSnBDdbBJe6PmfytW9tpKuQd74CrNK+aEOI77FqL+J577sHgwYMxadIkAMDq1asxbtw4XQMj3kFoHg6p171Q9qyG+v3nkHpOMDokQghxCbsS7N/+9jf06tUL27ZtA+ccTz31FEaPHq13bMRLCJ2SIVw4DjV7M4Q2cRAiutd/ESGEeDi7RxG7M+qDdX+8qhzyVy8AlWXWre2ahhodEiGEOMzhPlhCHMX8zJBSZoIrFVB2vguuqUaHRAghuqIES1xGaBkN6bZx0Ap+gnp4g9HhEEKIrijBEpcS4tMgRCRCPfo1tDxq1ieEuBavLAUv+dUlz7JrkNPFixfxzjvv4MyZMzW2sFuxYoVugRHvxBiDNGAq5PULoGSugGn0s2DmYKPDIoT4AF55FXLGIqCyFKYx/6f7Mq52Jdi7774bSUlJSE5OhiiKugZEvB/zD4SUOhPypoVQMldAGvoEGGNGh0UI8WK8qgzy5kXgl3MhDZjmkjXS7UqwJSUlePPNN/WOhfgQISwGYuJoqFnroP3wDcRuI40OiRDipXhVGeSMf4FfOgdpwDSIt/R1yXPt6oMdNGgQ9u3bp3csxMeI3UZCaNsZStaX0PJ/MjocQogXqpFc+091WXIF7EywGzZsQP/+/dG+fXvExsaiU6dOiI2N1Ts24uUYY5CSp4P5N4Wyczl4ZanRIRFCPBxXZfDyIuufVWVQNr/xW3KN6e/SWOxqIqaN1YlemDkYUsoMyBmLoOxaCWnwI9QfSwhpMK5pUE9mQsvZAsjl4IIJKLsCaLIhyRWwswbbvn17BAUF4dixY8jJyUFQUBDat2/f6Ifm5eUhKSnJ9tWmTRvcc889AID58+cjJiYGsbGxWLNmTaOfQTyH0LYzxO6joFmOQDv2rdHhEEI8kHoyE1rWOsDPDASFgf9yDJrlMFhkEsSYAYbEZFcNdsOGDZg9ezb69OkDzjlmzJiBZcuWYdSoUY16aLt27ZCVlWV7PXToUEyYMAHp6enYs2cPcnJykJ+fj759+2LEiBEICgpq1HOI5xC73wGefwLKobVgYTEQWkYbHRIhxENwVbbWXIPDAMEE7cxeoKIEQlQSUJwPrspgosnlcdlVg/3rX/+K3bt3Y+3atfj888+RmZmJv/zlL04JIC8vDwcOHMDdd9+NtWvXYtq0aZAkCeHh4UhOTkZ6erpTnkPcGxNESCkzwKQmUHYsA68qMzokQkgjVe8HdYmqMkAu/y25Xi0Ei+gGIayT9bhBv0/sSrCqqtZoEo6OjoaqOmct2Q8//BB33303AgICYLFYEBkZaTsXFRUFi8XilOeQxtHzB+X392YBzSElTwMvvQTlu9Xwgn0oCPEpXNOgHN8BecMLkL96EfKGF6Ac3wGuafo+2C8AXDRBO7Xrt+Taoj24XA6YzIBfgL7Pr4VdTcQJCQmYN28eZs6cCQBYvnw5EhISnBLA6tWrsXDhQtvr6gNcavsFu3jxYixevNj2urCw0CmxkN/8fsAATGYI8WkQOyWDCY6tsFnXvYWI7hAThkHNzoB2Mh5ibKqTSkQI0ZutHzQ4DKxpKLhcbn0NQIrT8WdZU4GyIvDiAgiRSb8l1+ICCEljDGkeBuyswS5btgwAMHnyZNum69ePOeLo0aO4ePEi0tLSAACRkZE4d+6c7bzFYkFERMQN182ZMwfZ2dm2r+bNmzscC6mp+oAB1iwc8DNDy1oH9WSm7vcWb70bQssOUPb9B1ohtWAQ4gmq94MykxkArH8Gh0HL2aJbczGXK6BsfgNQKiH2vh8ssAX4lfNAVTmEpDEQOyXr8lx72FWDDQ4OrlHLdJZVq1Zh0qRJEK7ViMaOHYsFCxbggQceQH5+PjIzM7F06VKnP5fUrbYfFH79ByWmX6M/Edp7byl1FuT1f4eyfRlMd/wFzOTvtPIRQnRwrR/093s9M5MZ/Opl63lziFMfeT25ar+egtRvMsTYVGsiryoD/AIMq7leV2eCXbFiBaZPn44XX3zxpueffvrpRj9Y0zR8/PHH+Oqrr2zHhg0bhoyMDMTFxYExhoULF9IIYiPo+YNi571ZYAuI/adC2b4U6r6PIQ2Y1sjCEEJcwi8AMJnB5XLbh2cAuvWD1kiufSfZupOYaHJ6Im+sOhOsLMs1/qzO0cUABEFAbm7uDcdffvllvPzyyw7dmzhIzx+UBtxbbN8DPHYg1BPbwdrEu3SJM0JIwzDRBCE+DVrWOvBrLVR69YPWllzdTZ0Jdvbs2QCAESNGoG/fmr/c9u7dq19UxFB6/qA09N5iz/HQCn6CsvcjCC2jwULaOFo8QohOrvd3ajlbrC1SJrPT+0F5VTmUb//t9skVABi3Yy5Ejx49cOjQoRrH+vTp4zZJNiEhAdnZtHm3Mxk1ivhm9+ZFF1C14QWw4NYwjfpfw/tVCCF106sflFeVXUuup90mudaVf+qswf7www84fPgwCgsL8dFHH9mOFxcXo7y83LlRErfCBAFSXCp4TD+n/6A09N4spA2kPvdD2b0S6sH/Qup9n1PiIIToQ49+0OsL92sXz0DqN8XQ0cH2qjPBnjp1Cps3b0ZxcTEyMjJsx4ODg7F8+XLdgyPG03PAQEPuLdzSD8KFHKg5WyG0ibcugUYI8QnW5LoI2sWfIfWbCrGTMWsLN1SdCXbMmDEYM2YMtm3bhkGDBrkoJEJuxBiD1Gci5F/PQNm9EqbQKLDA0PovJIR4NF55FfLmRde2nJti2ML9jWHXPNhBgwYhIyMDR48eRUVFhe24I9N0CGkoZmoCaeAsyBv/AWXnckgj5oEJotFhEUJ0witLIRu4n6uj7BqtMm/ePCxZsgSvvvoqLl++jHfeeQcnT57UOzZCbiCERkHqOQHar6egHl5vdDiEEJ3wylLI6f+yJtcB0zwuuQJ2JtiMjAysXbsWrVq1wquvvooDBw6goKBA79gIuSkhbhCEyCSoR7+BlkejxwnxNrbkWmiBlPygx86BtyvBNmnSBIwxiKKIsrIytGjRosaawYS4EmMMUv8pYAHNoOx6H7yixOiQCCFOwitKIae/bk2uKTMgduxjdEiNZleCbd++PQoLCzFhwgQMGjQIw4cPR0xMjN6xEVIr5h8IKWUGeHkxlN0f0NZ2hHgBXlECOX0h+JU8a3Lt0MvokBxi10IT1e3YsQPFxcW4/fbbIUl2jZHSHS004buUrC+hHvkKUp/7IcYNMjocQkgj8fIia821OB9S6kyI7W8zOiS7NHqhiZtJTTV+5QxCrhO73wH+yzEoB9aAhXWC0Dzc6JAIIQ3Ey65ATn8NvPQiTANne8089zqbiHv37g0AMJlM8PPzs31df02I0ZggQkqeAcZEKDuXgytVRodECGkAfvUy5E0LvS65AvUk2H379gGw7qZTVVVl+7r+mhB3wIJaQuw7CfxKHtRDa40OhxBiJ156LblevQzToIchRCYaHZJT2TXI6cknn8Thw4f1joWQRhM79obQsQ/UnK3QLEeMDocQUg9eegnyplfBy4tgSpsDIaKb0SE5nV0Jtl27dpg5cya6du2Kl156CT///LPecRHSYFLv+8ECW1pHFZcXGR0OIaQWvLjAmlwriq3JtV2C0SHpwq4EO3fuXOzfvx+ff/45KisrMWLECBrsRNwO8zNbp+5UXoWS+T5N3SHEDfGiC9apOBWlMA15DELbzkaHpJsGbezZsmVLtG3bFmFhYbSSE3FLQquOEBNHQ/slG9qxb40OhxBSjXblF8ibXgWqKmAa+gSENnFGh6QruxLsp59+irvuugtJSUnIycnBa6+9hpycHL1jI6RRxK63Q2jdCcqhtdAu04pjhLgDrdACJX0hoCqQhj0BobX3L1ZkV4LdsGEDHn30UZw5cwavv/46evbsqXdchDQaEwRIydPBRD8ou1aCq4rRIRHi07RL56Bseg3QNEjD50Jo1dHokFzCrgT7wQcfICoqCuvXW3cvuXr1Ki5fvqxrYIQ4gjUNhdjrf8ALLVCPbjQ6HEJ8lvbraSjprwGCYE2uLdobHZLL2JVglyxZgsmTJ2PevHkAgAsXLmD8+PG6BkaIo4Rb+kEI7wb16NfQLlFTMSGupuX/BDnjX4BkgjR8HoTQSKNDcim7EuzSpUuxa9cuBAUFAQBuueUWXLx4UdfACHEUYwxSv0lgkr911x1qKibEZbRfciBvXgTmZ4Zp+DwIzdoaHZLL2ZVgzWYz/P39ba81TaMpEMQjsIDmEHvfC37lPNQjXxkdDiE+QcvLhrzlTbAmgTANnwcW0sbokAxhV4K99dZb8c4770BRFBw5cgQzZ87E4MGD9Y6NEKcQOva1NhX/8A20S7RICiF60nIPW5OrOQSmEX8GCw4zOiTD2JVgX3/9dVgsFjRp0gTTp09HeHg4XnnlFb1jI8QprE3Fk8FMTaBkvgeuykaHRIhXUs8egLztbbDAVjDd/mewwBZGh2SoBu8H645oP1hiD/XUHii73oPYbSSkW+82OhxCvIp66jsou1aCNWsH0/C5YE2CjA7JJRq9H+ysWbPAGKv1/LJlyxyLjBAXEjr2gfDzIag/bIIQmQShZbTRIRHiFdQTO6Ds+RCsRXuYhj4O5h9odEhuoc4m4uTkZAwYMACSJOHHH39E165d0bVrV2RnZ9tGFBPiKWyjik1m66hi2juWEIep2Zuh7PkQQqtbYBr2R0qu1djVRDxgwABs374dkmSt8FZVVWHkyJH49lv3WOuVmohJQ6in90HJfBdi1xGQeow1OhxCPJZ69Gso338BoU0cpMFzwEz+9V/kZerKP3YNcvr1119RWVlpey3LMiwWi3OiI8TFhA69IEQlQf0hHdqvp40OhxCPwzmH8v06a3Jt1wVS2qM+mVzrU2cf7HUzZ85Ez549MWbMGADAunXrMGvWLF0DI0QvjDFIfSZBzv8Jyq73YbrzGTDJz+iwCPEInHOoBz6Dmp0BoW0CxNSZDf754aoMVJUBfgFgoqnhMTh4vavYPYr48OHD2L59OzjnGDhwIJKSknQOzX7UREwaQ/35IJTtyyB2ToPU616jwyHE7XFNg/LdKqiH1wOCCNYiCsyvKYT4NIidksGEuhtFuaZBPZkJLWcLIJcDJrPd1zrjej00ehRxdYmJiUhMTHRaUIQYTWx/G7QOvaEe2wIhIhFC23ijQyLEbXFVgbLrfag/fANwDSyqJwS/AHC5HFrWOgCAFJda5z3Uk5nW9waHgTUNbdC1zrje1YxJ+YS4Can3vWDmECi7PwCvKjc6HELcEleqoGxfBu3MXsBkBuvQG4JfAACAmcxAcBi0nC11LuLCVdla8wwOs17TgGudcb0RDEuwpaWlmDp1KmJjYxEfH4+lS5cCAObPn4+YmBjExsZizZo1RoVHfATzD4TUfyr41UtQD3xmdDiEuB0uV0LZugSa5TDEhGFgzdrakut1zGS2NtlWldV+o6oyQC63JccGXeuM6w1gdxOxs/3pT39C165d8cEHH4Bzjl9//RXp6enYs2cPcnJykJ+fj759+2LEiBE055boSgjvCrFTMtSTmRCikiBEdDc6JELcAq8qg/Ltm9B+PQXptnEQ4gdDy8sG/12i49f6Q/G7xFuDXwBgMjfuWmdcb4A6E+ywYcPqXMkpPT29UQ8tKSnBhg0bcO6cdY9OxhjCwsKwdu1aTJs2DZIkITw8HMnJyUhPT8e4ceMa9RxC7CX2nAAt7xiU71bBdNdzNFme+DxeUQo541/ghRZIfSdBjLX2cQrxadCy1oFfa6rlcjlQXAAhaUydI3qZaGr0tc643gh1JthnnnkGALB+/XqcO3cOkydPBgCsXr0acXFxjX7o6dOn0bp1azz66KPYt28fIiMjsWjRIlgslhrJNCoq6qbzbRcvXozFixfbXhcWFjY6FkIAgJmaQBowDXL6Qih7P4EpdabRIRFiGF5WCDljEXhxPqTkByF27GM7J3ZKBgBrv+fVy9aRvEljbMfr4si1zrje1eyaptOnTx/s3bvX9ppzjkGDBmH79u2NeuiBAwfQq1cvbNy4ESNHjsTy5cvx0UcfISAgAH/84x8xdOhQANb+2PDwcDzxxBN13o+m6RBnUfZ/CvXYt5BSZ0GM7ml0OIS4HC8usNZcy6/AlPoQhKikm7/Pgbmo3jQP1uGVnAoLC1FQUGB7XVBQgAsXLjQ6oMjISISGhmLkyJEAgIkTJ+LQoUOIjIy0NRsDgMViQURERKOfQ0hDibfeDRbcGuqej8DLi4wOhxCX0grPQ970CnhlKUxDHqs1uQLWJltmDmlUgnPkWmdc7yp2Jdhnn30Wt956K+677z7ce++9uO222/Dcc881+qGtW7dG165dceDAAQBARkYGunTpgrFjx2LlypVQVRV5eXnIzMzE8OHDG/0cQhqKSX6QBkyzDu7YvQpesJsjIXbRLp6BsulVQJFhGvZHCG07Gx2Sx6t3FDHnHCkpKTh06BD27t0LzjneeOMNtG7d2qEHv/XWW5gxYwauXr2KZs2aYfny5ejcuTMyMjIQFxcHxhgWLlxII4iJywmtOkLsNhLq0Y3Qftrltv07hDiL9ksO5K1LrB8wh/0RQnNqOXQGu/pge/bsaattuiPqgyXOxlUF8jcvgxddgN+dz4AFhxkdEiG60HIPQ96+DMwcYt1ujr7XG8ThPthu3brhxIkTTg2KEHfGRAnSgAcBrkHZ9R64phodEiFOp57aA3nb22CBLWG6/c+UXJ3MroUmfvrpJyQmJuLWW29FYOBv8wMbOw+WEE8gNGsLqcdYKPv/A/WHTZC6jzI6JEKcRj2+Dcrej8FCo2Aa+jhYE+qOcza7EuyCBQv0joMQtyTED4ZgOQL18HoI4V0htIgyOiRCHMI5h3rkK+v3dFgMpLQ5YG64CpI3sCvBDhw4UO84CHFLjDFIAx6A/OXfoGSugOmOp2nvWOKxOOdQ9/8Has5WCOHdIA18iL6fdWRXH+zPP/+MiRMnonv37oiNjbV9EeILWEBziH0mghf9AvXQWqPDIaRRrNvNvWdNrh37QBr0B0quOrMrwT744IOYMGECVFXF2rVrMWLECNuyiYT4ArFDLwgdekPN2Qotj0asE89i3W5uKbTTeyF2ToM04EEw0bC9XnyGXQm2qKgI99xzD0RRRNeuXfHvf/8bW7Zs0Ts2QtyK1Od+sIDmUHa9D15ZanQ4hNjFuiPOG9AsRyAmjobY83/q3MSFOI9dCVaSrJ90WrZsiX379sFisdRY0pAQX8D8AqyrPJUXQdn7idHhEFIvXlECedNr0PJ/gtT7PkiJd1JydSG72ggefvhhFBYWYsGCBbjvvvtQUlKCl19+We/YCHE7Qtt4iJ2HQD32LdSI7hA79jY6JEJuipdesi7aX3oRUsoMiB16GR2Sz7FrJSd3Rys5eScjd8yo69lcqYK88SXg6mWY7vwrWFBLu6+15zwhjtIKz0PZvAi8qgymgbMhRHQzOiSvVVf+qbMG++KLL9Z546effrrxURFSC65pUE9mQsvZAsjl1j0f49MgdkoGE+zq1dD12Uzyg5QyE/LGl6DsXA5pxJ/BRKnea40sF/EdWsFPUL59EwCsi/aHxRgcke+q86dalmXIsoxjx45hxYoVuHjxIi5evIgVK1bgzJkzroqR+Bj1ZCa0rHWAnxmsWTjgZ4aWtQ7qyUy3ebbQPBxSz/HQLp6BemSDXdcaWS7iGzTLEcgZ/wIkP0i3P0nJ1WB11mCvb0mXlpaGQ4cOITg42Hb8/vvv1z864nO4KltreMFhYCYzAICZzODBYdBytoDH9NOtWbWhzxZiB0I4nw316DdgYTF1Xqt16GlYuYhvUE/tgbJ7JVhQK5iGPgEW2MLokHyeXe1SeXl5NdYgbtq0Kc6ePatXTMSXVZUBcrktCV3HTGZrs2pVmds827rK01SwgBAoO98Fryiu/drSS8aVi3g9NXszlF3vgYVGwnT7k5Rc3YRdo4hHjhyJtLQ03HfffQCATz75BLfffruugREf5RcAmMzgv0tG/FqfJfRcM7URz2b+gZAGPAg5/TXwq5ehBYVBqPY+27WBLYwrF/FanHOo338O9YdNENrEQxr8MJipidFhkWvsqsG+/vrr+OMf/4gTJ07g+PHjmDt3Ll577TW9YyM+iIkmCPFpQHGBNfngWhIqLoAQn6ZrM2pjny20jYd4faed8z/c9FrBL8CwchHvxDUV6nerrMm1fQ9IQx6l5OpmaJoOcTvuPor4ptepCuRvXoGWexgsNNL6XhpFTKDPtCyuVEHZsRya5TDE2FSIve+n7yGD1JV/7Eqwe/bswbPPPouzZ89CURRwzsEYw+nTp50ebGNQgvVO7joPttZrSn6FvH4BEBACaejjYOYQmgfrw/T6QMUrr0LZugRawU/WpQ+730GrMxmo0fNgr5s2bRoWLFiA3r17QxRFpwZHSG2YaALMIR7zbBbUCmK/yVB2Lof2QzqkvhOddm/ieWzTsoLDwJqGgsvl1tcApLjURt2TlxVC3vwG+JVfIPWZCDGOthJ1Z3Yl2ODgYIwfP17vWAjxeGKHXuB5P0I9sR2sbTzE9j2MDokYQI/pZrzoAuTNi8DLiyANfIi+tzyAXe0Uo0aNwiuvvIIzZ84gLy/P9kUIuZHY+36wkLZQd60EL7pgdDjECE6ebqb9ehry1y8DVWUwDX2CkquHsKsGu3LlSgDAkiVLbMfcqQ+WEHfCTP6QBs6GvPElyNuXwTTqKdrY2tc4cbqZdv4HyNuWWr+vhv4RQmiUHhETHdiVYGlZREIaRmjWFlLfyVAy34W69yOI/R+ggSg+5PqULy1rHfi1ZmLbtKykMXY3D9tWZwpsAdOQx8GCw3SOnDiT3VvaFxcX46effkJFRYXtWP/+/XUJihBvIHbsDV7wk7U/NiwGYqdko0MiLnT9/1vL2QJ+9bJ1FHHSGLu/D9Qf06Ec/C9Y80iYhj4OZg7WM1yiA7sS7Icffoj/+7//w4ULFxAbG4vDhw+jd+/e2LVrl97xEeLRxF4TwC//DGXvx2ChURBaUPOer2CCACkuFTymX4OmZXHOoR78L9TsDFqdycPZNcjp5ZdfxsGDB9GxY0ccOHAAmZmZiI2N1Ts2QjweE02QUh8Ck/yhbH8bvPKq0SERF2OiqdY50b/HVQXKrvesyTW6J63O5OHsSrAmkwlBQUHQNA0A0KdPH1rYgRA7scAWkFKmg5dehrLrfXjB4mlEB1yuhLJ1MbTTeyHGD4aUMpMWIvFwdjURBwYGorKyEr169cJjjz2GNm3aQFEUvWMjxGsI4V0hdh8F9chX0H7YBLEbbZZBfsMrSiB/+2/wSz9DuvUeCF1H0KA4L2BXDXb16tUAgEWLFqFVq1YoLCzE2rVrdQ2MEG8jdr8TQtvOUL7/AtqF40aHQ9wEL7kI+euXwS/nQur/AMRut1Ny9RJ2JdgvvvgC/v7+CAwMxLPPPotXX30VX331ld6xEeJVmCBASplh3T92xzvgpZeNDokYTLucC/mbf4KXFcI0+GGIMTQzw5vYlWBXrFhxw7H333/f2bEQ4vVYkyBIA2eDV5VD3roYXK40OiRiEO3CcSibXgVUFaZhcyFEdDc6JOJkdfbBrl+/Hl9++SVyc3Px0EMP2Y4XFxfTov+ENJLQqiOkAdOg7FwOZee7kAb9gbYa8zHqz4eg7FwO1iQY0tAnIDRra3RIRAd1JtioqCgMGDAA6enpGDBggO14cHAw0tLSdA+OEG8ldugFXvQL1CNfQf3+c0i3jTM6JOIi6vFtUPZ+AhbSxrqARNNQo0MiOqkzwSYmJiIxMRHjx49HYGCgq2IixCeIiaPBiy5A/TEdLLgNxE4D6r+IeCzOOdTD66Ee+QpCWAykwY+A+Tc1OiyiozrbpT755BOcPn3allxnz56NkJAQJCUl4ciRIw49ODo6Gl26dEFSUhKSkpJs82rnz5+PmJgYxMbGYs2aNQ49gxB3xhiDNGAaWIv2UPashnbhhNEhEZ1wTYW650Nrco1IhDT0CUquPqDOBPviiy+ibVtr38Bnn32GjIwMbN68GY888ggef/xxhx++adMmZGVlISsrCwkJCUhPT8eePXuQk5ODrVu3Yu7cuSgpKXH4OYS4Kyb5wTT4ETBzCJRtb4MXFxgdEnEyrlRB2b4M6smdEDslQxo0m3ZX8hF1JlhBEGA2W7da2rBhA2bMmIFevXrhoYceQmFhodODWbt2LaZNmwZJkhAeHo7k5GSkp6c7/TmEuBMW0AxS2iPgmgJ5y2LwBu4VShzHVRm8vAhclZ1736oyKJsXQcvNgtj9Doh9J4MJrhsgqle5iH3q7IPVNA2yLEOSJOzYsQOzZ8+2nVNV1eGHjx49GpqmYfTo0Xj++edhsVgwbtxvgz2ioqJgsVhuuG7x4sVYvHix7bUeyZ4QVxJCo2BKmQF561tQti+DNOQxl/4i9lVc06CezISWs8W6EbrJDCE+DWKnZIdHdvOyK5A3vwF+JQ9S7/sgxg92UtR2PFvHchH71ZlgH3jgAfTv3x8hISEIDQ1Fv379AADHjx9H8+bNHXpwZmYmIiIiUFJSgsmTJ2PhwoUAUGMFk9rWbJ0zZw7mzJlje52QkOBQLIS4AyEyEVKPe6AcWmvdQ7bvZFrRR2fqyUxoWeuA4DCwpqHgcrn1NQApLrXR9+VFF6zJtfwKpNSZEKN7Oitku+hVLtIwdSbYefPmISUlBefPn8fw4cNtP+yMMSxatMihB0dERAAAgoKCMGvWLLz77ruIjIzEuXPnbO+xWCzo06ePQ88hxJMIXYZDLCmAejITMDWBeNt4SrI64apsreFd2xAdgHVj9OAw6x6uMf0atdi+dulnKN/+G1ypgmnIYxDadnZ26HXSq1yk4epd7L937943HHN0q7qrV69CVVUEBwdDURT897//Rffu3ZGcnIwFCxbggQceQH5+PjIzM7F06VKHnkWIJ2GMQewzCVypgpq9GZD8ISXdZXRY3qmqDJDLb5iHykxm6wbpVWWAOaRBt9TysiFve9s6eG3EPAgt2jszYvvoUC7SOHbtpuNs+fn5GDt2LDRNg6qqGDBgAJ566imYzWZkZGQgLi4OjDEsXLgQQUFBRoRIiGGYIEDq/wAUpQrqka/ARD/afUcPfgGAyQwul9tqegDAr/VZwi+gQbdTzx6AkrkCzNwMpmFPgAW3dnbE9nFyuUjjMe4Fm1MmJCTQ/rTE63BVhrJ1CbS8bEi97oXYmVZPczbl+I7f+iqvJSUUF0BIGtOgvko1ZyuUff8Ba9bOujpTQDP9graDs8pF6ldX/jGkBksIqR8TTZAGPQzl2zeg7P8PIPnTak9OJnZKBgBr3+TVy9bRtkljbMfrc8PqTGlzwNyghuhouYhzUA2WEDfH5QooGf+CdvEspJQZEDv0Mjokr8NV2do36Rdg9wAgzjnUvR9DPbHdujpT6ky3W0CiMeUiDVNX/qEJUYS4OWZqYp0X2zwCSuYKaLmHjQ7J6zDRBGYOsT+5qgqUne9CPbEd4i393HZ1poaWizgXJVhCPADzb2obOCNvX0pJ1kBcrrT2jZ/dDzFhGMT+D9CiIOSmKMESn+ToEnJGLEHHmgTBNOyPYIEtIW99C+qJHS57NrHilaVQNv8LWt6PkG69B1JPmqdMakeDnIhPcXQJOaOXoGMBzWAaOR/KlsVQ9nwIXnYFYuJo+iXvAtalDxeBX/kFUt/JEGNTjA6JuDmqwRKfYltCzs8M1iwc8DNDy1pnXTnJBdc7A/MPhDRsLoTIJOuG7bs/AFcVlz3fF/HiAshfvwxenA9p4EOUXIldKMESn1HbEnK4voRcPc29jl7vTEzygzRwNsTYgVBP7YaydQm4XOmy5/sS7fI5yN+8DF5ZCtOQxyC272F0SMRDUIIlvuP6EnLVVrcBriVJudx6Xs/rnYwJAsQ+90O69W5oeT9CTl8IXl7s0hi8nZZ/EsqmhYCmwTT8TzddV5i2hCO1oT5Y4jscXULODZegY4xB7DYSCGgGZfcHkL/+B0xDHgcLaePyWLyNZjkCefsyMP9A6+Cy3/2bGt0fT9wffRcQn8FEE4T4NKC4wJoUgd+WkItPq3euoKPX60m8pR9MQx4DryiF/PXL0CxHDYvFG6in9kDe+hZY01CYbp9/0w8s7tAfT9wbJVjiU8ROyRCSxgBV5eBXzgNV5Q1aQs7R6/UktEuA6fY/A35NIG95E8qBz2jwUyOox76Fsus9sNBImG5/Eiww9Ib3uFN/PHFf1ERMfAoTBEhxqeAx/Rq1hJyj1+tNCI2C6c5noOz5EGr2Zmj5J2FKmQkWHGZ0aG6Pcw4160uoRzdCaBMHafAjYKYmN38zbQlH7EA1WOKTHF1Czp2XoGN+AZBSZkLqNxX8Sh6qNiyAenqv0WG5Na5pUPd+ZE2ukUmQ0h6tPbkCNfrja9yHtoQj1VCCJcQLMcYgdhoA0x1/AQtsCSVzBZRd79NUnpvgciWUncuhntgBMWYApIEP1buusDv3xxP3QU3EhHgxoVlbmEY9BfXAGqgntkP79TSklJkQWkQZHZrhOOfQzuyHenANeHkRxC7DIfYYa/eqWLQlHKkPbVdHiI9Qfz5kXfVJroAYmwrx1rvA/AONDssQ2uVzUPf9B1rBT2BBrSD1+h8IEd0bdS/aEs630YbrhBCI7XtAaBkN5dDn1trs2f0QE0dDiE0FE33jVwGvLIX6/TqoJ3YCkh+kHmMhdHasSZeJJhrQRG7KN36qCCEAYJ3XmTIDWtxAKPv+A2X/f8BO7LDW4NolGB2ebrimQju5E+r368CryiB07AOpx1iwgGZGh0a8GCVYQnyQEBYD0x1PQ/tpN9TvP4e8eRGEiETr9mteNKWHqwq0s/uh/rAJvOgXsNAomHrfCyEsxujQ7ELNz56NEiwhPur6SGOhfQ+oRzdCPfYtqr78AeIt/SHED4bQPNzoEBuNV5Vba6zHvgUvuwLWNBRS38kQYgZ4xDKGtAyjd6AES4iPY35mSLeNg9gp2do/ezIT6smdEFrHWhNtZCKYIBodpl14WSHUY1ugndgBLleANY+E1GMchPY9PKqf2bYMY3AYWNNQcLnc+hqAFJdqcHTEXp7zHUcI0RULbg3ToD+Al16Cenw7tJOZULYvBQtoDjFuIIROKWBN3G/UMecc/NJZaMe3Qz2zD9BUCG07Q+oyHKxtZ4/bjL62ZRj59WUYY/pRc7GHoARLCKmBBbaAdNtY8MQ7rfNEc7ZC+f4L4PAGiNE9rbXB1rFgfuZ676UXrirgBSehncuClpsFXnYFYAKE6J4QuwyDEOrB83xpGUavQQmWEHJTTPKz9tHG9Af/9RTUnK1Qz+yDenqPNZm16gjWrguEdglgLdrrXlPkShV4Xja0c99DsxwBryoDwCC07gSxywgIUUk3JCWP5IbbIpLGoQRLCKkTYwwsLAZCWAx4VRn4hRPQ8n60fmWtg5q1DsyvKVi7BAhtYsECW4IFtQICmje635NXlIAXnge/kgdeaAG/kget0AKoMiBIENolQIxKghCR6JbN1o64vgyjlrUO/FozsW0ZxqQx1DzsQSjBEuJFHJ3WUd/1zC8ALCoJQlQSOOdASQG0vGzrl+UItLP7q78brGkoWGALsMCWQGAL6wL6mgquqYCmAlwFVMX6pyKDlxRYk2pFyW+3ESSwkLYQo3uCRXSD0K4rmMm/Ef86noOWYfQOlGAJ8QKOTutozPWMMSC4NcTg1hDjB1v7RYvywEsvAaUXwUsugZdeBC+9CO3iGWvtsy5MAAtqZa0tNwsHa94OQrNwIKiVx4xidhZ7t0WkebLujRIsIV7A0WkdzpgWwkQJLDQKuMkAI845UFECKFWAIACiCWACIEiAIAKC6HGjfV2htmUYaZ6sZ6D/CUI8XG3TOnB9Wkc9NUdHr7cHYwzMHAwW1NLabNwkCMy/KZjJ35qYKbk2iO0DkZ8ZrFk44Ge29oefzDQ6NFINJVhCPN31aR2mmtNmmMlsrd1Ulel7PXEpV3wgIs5BCZYQT1dtWkd1dk/rcPR64lr0gchjUIIlxMNdn9aB4gJbkrRN64ivfys2R68nLkYfiDwGJVhCvIDYKRlC0higqhz8ynmgqrxB0zocvd4ZuCqDlxfdtImzrnOO3lvPa/VAH4g8h+GjiB955BEsW7YMiqIAAObPn4+1a9dCEAS8+OKLGD9+vMEREuL+7J3Wodf1jqhrRCwAl08/csa1eqN5sp7B0AS7c+dOXL161fY6PT0de/bsQU5ODvLz89G3b1+MGDECQUFBBkZJiOeobVqHq65vjLqmCAEwbPqRO+9oY+QHImI/wz6GVVZW4qmnnsKrr75qO7Z27VpMmzYNkiQhPDwcycnJSE9PNypEQojO6hoRq2ZvhnYsw5DpR54yUpeJJjBzCCVXN2VYgv3b3/6GGTNmoFWrVrZjFosFkZGRttdRUVGwWCxGhEcIcYW6RsRWloBXlBoz/YhG6hInMCTBHjlyBHv37sWDDz54w7nqE8455ze9fvHixUhISLB9FRYW6hYrIURHdY2I9Q8CaxJozPQjGqlLnMCQBLtr1y5kZ2ejQ4cOiI6OhqqqiI6ORmRkJM6dO2d7n8ViQURExA3Xz5kzB9nZ2bav5s2buzJ8QoiT1DUiVkwYCqHzMEOmH9FIXeIMjNdWTXQhSZKgKAoyMjKwYMECbNmyxTbI6ccff6x3kFNCQgKys7NdFC0hxJloFDHxZHXlH8On6VQ3bNgwZGRkIC4uDowxLFy4kEYQE+Ll6hsRa9T0IxqpSxzlFjVYR1ENlvgS2qKMEPfhMTVYQkjtqMmSEM9CP5WEeAjaoowQz0IJlhA3c7O1bz1l4QPSMO62zjFxLmoiJsRN1Dma9vrCB01Da1zDTGbrWrRVZS5f4pA0HjX3+wb6nyTETdTZBEwLH3gVau73DZRgCXED9TUBA/D4hQ+oOdSKmvt9BzURE+IO7GgCdsYWZY5M8anv2trOu6I51KOmLlFzv8+gBEuIO6jWBFx9gfnqTcCOLHyg54pG9Z3Xc9s3j+zLtOP/mngHN/0OJMS3NGTt28ZsUeZIn19919Z1Xu/mUE/sy6R1jn0HJVhC3ITYKRlC0higqhz8ynmgqrzBTcA3o+e+qFpVWd33Li/Sbds3T+7L1Ov/mrgXaiImxE3otvatI31+9V1beqnu82D6NYd6cF8mrXPsG6gGS4ibaUwTcJ303Bc1sEWd55k5WL/mUC+YuuT0/2viVijBEuLl9NwXVfALqPfeejWHUl8mcXfUREyID3Bkik9919Z3Xs/mUGdMXSJEL7RdHSE+xIh5sK7gUfNgiVeh7eoIIQCszaqNHfhT37WO3NtRRj6bkNpQHywhhBCiA0qwhBBCiA4owRJCCCE6oARLCCGE6IASLCGEEKIDSrCEEEKIDijBEkIIITqgBEsIIYTowCtWcgoODkZERIRT7lVYWIjmzZs75V6ehspOZfc1VHYqu6MsFguKi4tves4rEqwz+fKyi1R2KruvobJT2fVETcSEEEKIDijBEkIIITqgBPs7c+bMMToEw1DZfROV3TdR2fVHfbCEEEKIDqgGSwghhOiAEiwhhBCiA59KsLm5uRgyZAg6d+6Mrl274plnnrGdmz9/PmJiYhAbG4s1a9bUuCYlJQWxsbEYOHAg8vLyjAjdKYYNG4bExER0794d48ePt83d8oWyA8AjjzwCSZJsr32l3NHR0ejSpQuSkpKQlJRkm57gC+UvLS3F1KlTERsbi/j4eCxduhSA95c9Ly/P9v+dlJSENm3a4J577gHg/WUHgG+++cZW9v79++PYsWMADCg79yF5eXl8//79nHPOKysreWpqKl+3bh3ftGkTT0lJ4bIsc4vFwiMiInhxcTHnnPP777+fL126lHPO+eLFi/nUqVMNi99RV65csf197ty5/Pnnn/eZsu/YsYNPnTqVi6LIOec+U27OOW/fvj3Pzc2tccxXyj9r1iz+z3/+k3POuaZpPD8/32fKXt2QIUP4hx9+6DNlj4yM5NnZ2ZxzzpcuXcrHjx9vSNl9KsH+3qOPPsrfeOMNPnv2bP7uu+/ajt933318zZo1XNM0HhISwsvLyznnnJeWlvJmzZoZFa7TqKrKZ8+ezZ9//nmfKHtFRQXv378/LygosCVYXyj3dTdLsL5Q/uLiYt62bVsuy3KN475Q9urOnz/PQ0JC+NWrV32m7FFRUXzPnj2cc85ffvll/thjjxlSdp9qIq7u0qVL+OKLLzB06FBYLBZERkbazkVFRcFiseDSpUto2rQpmjRpAgBo2rQp/Pz8UFRUZFTYDrvrrrvQunVrHDt2DPPmzfOJsv/tb3/DjBkz0KpVK9sxXyh3daNHj0ZiYiKeeeYZKIriE+U/ffo0WrdujUcffRQ9evTAmDFjcPbsWZ8oe3Uffvgh7r77bgQEBPhM2VetWoU77rgDkZGRePfdd/Hcc88ZUnafTLCVlZUYP348/vSnP6Fz584AAMaY7TyvNnOp+vHfn/NEX375JS5cuIC+fftiyZIlALy77EeOHMHevXvx4IMP3nDOm8tdXWZmJr7//ntkZmbi6NGjWLhwIQDvL78sy8jKysKYMWNw6NAhjB49GtOnTwfg/WWvbvXq1Zg8ebLttbeXXVVVvPTSS9i6dStyc3Mxf/58TJ06FYDry+5zCVZVVUyaNAk9e/bE3LlzAQCRkZE4d+6c7T0WiwURERFo0aIFSktLUVFRAQAoKyuDLMsICQkxJHZnEUUR06dPxwcffOD1Zd+1axeys7PRoUMHREdHQ1VVREdHe325q7u+EUZQUBBmzZqFPXv2+ET5IyMjERoaipEjRwIAJk6ciEOHDvlE2a87evQoLl68iLS0NAC+8bvu+++/R3FxMbp16wYAmDx5MrZt22ZM2Z3S0OxBpk+fzh988EGuaZrtWHp6Ok9NTeWKovDz58/zyMhIW+f3xIkT+bJlyzjnnC9ZssRjO/6Liop4Xl6e7fULL7zA7733Xp8oe3XX+2B9pdylpaW8qKiIc865LMt82rRp/Nlnn/WZ8qemptoGNn7xxRe8f//+PlN2zjl/8skn+ZNPPml77Qtlz8vL4y1atOAWi4Vzzvm6dev4bbfdZkjZfSrBZmZmcgC8a9euPDExkScmJvJFixZxzq3fiLfccguPiYnhn376qe2ac+fO8eTkZN6pUyeekpJi+0/zNOfOneM9e/bkXbt25d26deMTJkzgFy5c4Jx7f9mru55gOfeNcp86dYonJibybt268YSEBD5r1ixeVlbGOfeN8v/444+8b9++vFu3bjwlJcU2stQXyq6qKo+IiOCHDx+ucdwXyr5ixQqekJDAu3fvzvv378+zsrI4564vOy2VSAghhOjA5/pgCSGEEFegBEsIIYTogBIsIYQQogNKsIQQQogOKMESQgghOqAES4jBDh48CMYYPv/883rfe/bsWXzwwQcOPe/s2bOIiYlp0DXPP/88FixYcNNzo0aNQkFBAQDrzj0Wi+WG4//6179suzcR4isowRJisFWrViE1NRWrVq2q973OSLDOtnHjRoSFhdV5nBIs8UWUYAkxkKIo+Oyzz7By5Urs2rULly9ftp3bsmULevfujcTERPTq1Qu//vor5s6di7179yIpKQlPPfUUtm3bhqFDh9quWbBgAZ5//nkAwNdff42+ffuiR48e6NOnDw4dOlRvPI899hh69eqFbt26YfLkyaisrLSdO378OFJTUxEbG4s///nPtuPVa63VXT/+yiuvIC8vDyNGjEBSUhK2b9+OIUOG2N6Xl5eH9u3bQ1XVBv3bEeLuKMESYqD09HR06dIF0dHRuOuuu/Dpp58CAC5evIgpU6Zg5cqVOHz4MLZu3Yrg4GC8/vrr6NOnD7KysvCPf/yjznv37dsXu3fvxqFDh/DWW29hzpw59cbz/PPPY//+/Th69ChCQ0Px/vvv287t3bsXGzZswA8//IDdu3djw4YNdpXxySefRLt27bBp0yZkZWVh4MCBKCgowKlTpwAA7733HqZMmQJRFO26HyGeghIsIQZatWoVJk2aBACYNGmSrZl4z5496Nu3r223p8DAQPj7+zfo3hcuXMDo0aPRtWtXTJ8+HUePHq33mnXr1tlqsF988UWNa+6++24EBwfDz88P9957L7Zv396geKqbNWsWli9fDs453nvvPcyYMaPR9yLEXUlGB0CIryopKcGGDRuwa9cuPPfccwCszaWnTp2ye7ssSZKgaZrtdWVlpa0m+Mgjj+Chhx7C/fffj5KSEjRv3rzOe509exbPP/88Dh48iFatWuHf//43Dh8+XOv7f7/FV0NMnToVt912G1JTU9GxY0d06NCh0fcixF1RDZYQg6xZswa33347zp07h7Nnz+Ls2bP405/+hNWrV6Nfv37Ys2cPjh07BgAoLS1FZWUlgoODUVJSYrtHdHQ0cnJyUF5ejvLycnz99de2c8XFxbat6pYtW1ZvPCUlJTCbzWjevDnKysqwevXqGue/+OILFBcXo6qqCv/5z3+Qmppqd1l/H3ezZs2QkpKChx56CLNmzbL7PoR4EkqwhBhk1apVmDBhQo1jEyZMwKpVq9CyZUusWrUKU6ZMQWJiItLS0lBSUoLu3bujefPm6NGjB/7yl78gIiIC06ZNQ/fu3TFu3Dh06dLFdq+///3vePDBB5GcnAxZluuNp1u3bhg0aBASEhJw1113oXfv3jXOp6amYty4cejWrRv69++PO++80+6yPvLIIxg7dix69uyJqqoqAMADDzyAyspKjBkzxu77EOJJaDcdQoghXnrpJRQXF+Oll14yOhRCdEF9sIQQlxs4cCCKi4uRkZFhdCiE6IZqsIQQQogOqA+WEEII0QElWEIIIUQHlGAJIYQQHVCCJYQQQnRACZYQQgjRASVYQgghRAf/H6C8feIT36h7AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from utils import plot_series_lowess\n", "\n", "plot_series_lowess(series, 'C1')\n", "\n", "decorate(xlabel='Actual ability',\n", " ylabel='Standard deviation of posterior')" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "The test is most precise for people with ability between `500` and `600`, less precise for people at the high end of the range, and even worse for people at the low end.\n", "\n", "When all the questions have difficulty `500`, a person with `ability=800` has a high probability of getting them right. So when they do, we don't learn very much about them.\n", "\n", "If the test includes questions with a range of difficulty, it provides more information about people at the high and low ends of the range.\n", "\n", "As an exercise at the end of the chapter, you'll have a chance to try out other strategies, including adaptive strategies that choose each question based on previous outcomes." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "## Discriminatory Power\n", "\n", "In the previous section we used the standard deviation of the posterior distribution to quantify the precision of the estimates. Another way to describe the performance of the test (as opposed to the performance of the test-takers) is to measure \"discriminatory power\", which is the ability of the test to distinguish correctly between test-takers with different ability.\n", "\n", "To measure discriminatory power, I'll simulate a person taking the test 100 times; after each simulation, I'll use the mean of the posterior distribution as their \"score\"." ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:11.372059Z", "iopub.status.busy": "2021-04-16T19:36:11.371637Z", "iopub.status.idle": "2021-04-16T19:36:11.374597Z", "shell.execute_reply": "2021-04-16T19:36:11.374249Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "def sample_posterior(actual_ability, iters):\n", " \"\"\"Simulate multiple tests and compute posterior means.\n", " \n", " actual_ability: number\n", " iters: number of simulated tests\n", " \n", " returns: array of scores\n", " \"\"\"\n", " scores = []\n", "\n", " for i in range(iters):\n", " belief, trace = simulate_test(actual_ability)\n", " score = belief.mean()\n", " scores.append(score)\n", " \n", " return np.array(scores)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Here are samples of scores for people with several levels of ability." ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:11.466656Z", "iopub.status.busy": "2021-04-16T19:36:11.457736Z", "iopub.status.idle": "2021-04-16T19:36:25.733528Z", "shell.execute_reply": "2021-04-16T19:36:25.733071Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "sample_500 = sample_posterior(500, iters=100)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:25.831461Z", "iopub.status.busy": "2021-04-16T19:36:25.740146Z", "iopub.status.idle": "2021-04-16T19:36:40.662218Z", "shell.execute_reply": "2021-04-16T19:36:40.661661Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "sample_600 = sample_posterior(600, iters=100)" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:40.901415Z", "iopub.status.busy": "2021-04-16T19:36:40.815282Z", "iopub.status.idle": "2021-04-16T19:36:55.401985Z", "shell.execute_reply": "2021-04-16T19:36:55.401400Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "sample_700 = sample_posterior(700, iters=100)" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:36:55.608897Z", "iopub.status.busy": "2021-04-16T19:36:55.579517Z", "iopub.status.idle": "2021-04-16T19:37:09.906444Z", "shell.execute_reply": "2021-04-16T19:37:09.905877Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "sample_800 = sample_posterior(800, iters=100)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Here's what the distributions of scores look like." ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:37:09.914937Z", "iopub.status.busy": "2021-04-16T19:37:09.914449Z", "iopub.status.idle": "2021-04-16T19:37:09.916439Z", "shell.execute_reply": "2021-04-16T19:37:09.916075Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "from empiricaldist import Cdf\n", "\n", "cdf_500 = Cdf.from_seq(sample_500)\n", "cdf_600 = Cdf.from_seq(sample_600)\n", "cdf_700 = Cdf.from_seq(sample_700)\n", "cdf_800 = Cdf.from_seq(sample_800)" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:37:09.950414Z", "iopub.status.busy": "2021-04-16T19:37:09.932705Z", "iopub.status.idle": "2021-04-16T19:37:10.124621Z", "shell.execute_reply": "2021-04-16T19:37:10.124994Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAFgCAYAAAAYQGiBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAAuJAAALiQE3ycutAABa4klEQVR4nO3dd3hUZd7G8e+Zkt5IgIQ0AoQASYDQexFFAQGVRVGUIhFFUXdxV11X176uuq+67gp21MXeFUXEgkov0g1FSkgjlJA2aVPO8/4RGAk1CJMzyfw+15ULZubkzJ2HkDunPppSSiGEEEKI88pkdAAhhBCiKZKCFUIIITxAClYIIYTwAClYIYQQwgOkYIUQQggPkIIVQgghPEAKVjQp2dnZaJpGSUkJADNmzODuu+9usPe//PLLefDBBwFYsmQJ8fHx523dx69v6NCh/Pvf/z5v68/JySEkJITS0tLzts6z8dBDD9GyZUtCQkIoKioyJIMQ55MUrDhn27dvZ8yYMTRv3pywsDA6duzIE088YXQsAF544QXDsgwaNIi8vLwzLvfDDz8QERFx3tZXX5qmsWHDBvfjxMREbDYb4eHh5+096isvL49HHnmENWvWYLPZiIqKOmGZ4/Oei6SkJD799NPzsi4hTkUKVpyzSy+9lK5du5KTk0NxcTEfffQRbdu2NTpWk+J0Oo2O4FHZ2dmEhITQunVro6M0GKUULpfL6BjCg6RgxTk5dOgQu3bt4qabbiIoKAiz2UxaWhpXXnmle5mnn36a9u3bExoaSrt27Xjuuefcrx3dpfvaa6/Rtm1bQkJCuPPOO9m3bx/Dhw8nLCyMIUOGUFhY6P4cTdN49tln6dChAxEREUyYMOGUuzWnTp3Kn/70pzrvNW/ePJKTk4mIiGDq1Kk4HA738h9++CHJycmEh4czffp0Ro8e7d7lezIfffRRneWPLcLjt0zfeust9zjExcXxyCOPUFRUxMiRIyktLSUkJISQkBCWLFnC66+/TkZGBg888AAxMTFMmDDhpFu6+fn5DB06lNDQUPr168fWrVvrjNOxW3z//ve/GTp0KAC9e/cGoH///oSEhPDYY4+dsHvd4XBwzz33kJiYSIsWLZgwYQIHDx6ss/4XXniB9PR0wsLCGDt27Gl3L69du5YBAwYQERFBamoq77zzDgCffvopw4cPd4/BsGHDTvjck+UF2LVrF2PGjKFFixa0bt2aRx99FF3XAdizZw8XXXQR4eHhREZGMmDAACorK7nyyivJycnhmmuuISQkhBkzZpzwfkop7r77bmJiYggLCyMlJYUvvvjC/fo777xD165dCQsLo3Xr1rz++uvuz3vqqado164dkZGRjBgxgt27d7s/LykpiX/+85/07duXoKAgsrKyOHDgANdeey2xsbHExsbypz/9iZqaGgAOHz7MFVdcQWRkJBEREfTo0YO9e/eecoyFl1FCnANd11XHjh3VhRdeqN577z2VnZ19wjIffvihysnJUbquq++//14FBASopUuXKqWU2rNnjwLUxIkTlc1mU5s3b1Z+fn6qX79+atOmTaqqqkoNGzZM3Xbbbe71AapHjx4qPz9fFRcXq+HDh6upU6fWWV9xcbFSSqkpU6aoP/7xj3VemzBhgiotLVX5+fkqLi5Ovfbaa0oppbZv364CAgLUV199pRwOh3rppZeUxWJRDzzwwEm/9h07dig/Pz/1+eefK4fDoZ5//nllNpvdyy9evFiFh4crpZSy2WzKYrGoH3/8USmlVHFxsVq9evUJyx312muvKbPZrB5++GFVU1OjKioqTlhuyJAhqlmzZmr58uWqpqZG/e1vf1Pt27dXDofDPU7r1693L//MM8+oIUOG1BnHY18/fuweeughlZ6ervbu3avKy8vVhAkT1PDhw+t8/tChQ1VhYaEqLi5W3bp1O+VYFRcXq6ioKPWf//xH2e129cMPP6jg4GD398HJxuB4x+etrKxUrVu3Vk8//bSqqalRe/fuVWlpaeqVV15RSil1zTXXqJtuuknZ7XZlt9vVsmXLVE1NjVJKqdatW6tPPvnklO/19ddfq/j4eJWfn6+UUmrv3r1q+/btSimlPv/8cxUZGam+++475XK51P79+9W6deuUUkq98cYbKjY21v29e8cdd6hOnTq5/01at26tUlJS1LZt25TT6VTV1dWqT58+6o477lAVFRXq0KFDaujQoeq+++5TSil1zz33qNGjR6uKigrldDrV+vXrVVFR0WnHSXgPKVhxzvbt26fuuOMOlZqaqkwmk+rUqZNatGjRKZe/7LLL1KOPPqqU+u2H+tatW92v9+rVS919993ux7Nnz1YDBgxwPwbUe++95368cuVK5efnp1wuV70K9tj3uuGGG9Stt96qlFLq4YcfVpdeemmdrKmpqacsjYcffliNHDmyznMdO3Y8ZcEGBgaqF154QZWWltb5nFMVbGRkpHK5XKdcbsiQIermm292P7bb7SosLEwtWbLEPU7nUrDJycnq3Xffdb+en5+vAHfpAOqrr75yv/7oo4+q0aNHnzhQSqk333xTdezYsc5z06dPV9OnTz/lGBzv+Lzvv/++ysjIqLPMSy+9pIYNG6aUUmry5Mlq7NixaseOHSes60wF+/3336vmzZurRYsWKbvdXue1ESNGqIceeuikn3fRRRepxx9/3P24urpahYaGqmXLlrnf95lnnnG/vnr16hP+nRctWqTatm2rlFLq/vvvV/369VMbNmw4ZVbhvWQXsThnMTExPPXUU/zyyy8cPHiQkSNHcsUVV3D48GGgdtdo9+7dadasGRERESxYsIBDhw6dsI6jgoKCTnhss9nqLH/ssbrWrVtjt9vr7L48U96jgoODKS8vB6CgoICEhIQ6yyYmJp5yPQUFBSccMzzVMcTg4GDmz5/PZ599RkJCAgMHDmTx4sWnzRkXF4fJdPr/ose+n9VqpVWrVuTn55/2c+orLy+PpKQk9+PY2Fj8/f3rnGh1qrE807oA2rZte04nbWVnZ7NlyxYiIiLcH3/+85/dhxP+9a9/ERcXx0UXXURSUhIPPvige/fxmVxwwQU89NBD/P3vf6d58+b84Q9/YM+ePQDs3buX9u3b1+vr9Pf3JzY2ts7Xeez3VHZ2NiUlJe5dwBEREYwfP579+/cDcOeddzJo0CCuuuoqYmJi+OMf/0hVVdVZjZMwjhSsOK8iIyN58MEHqaioYM+ePeTk5DBlyhSefPJJDh48SElJCaNGjUKd4yROxx6HysnJwc/PjxYtWpzTOmNjY8nNza3zXE5OzmmXP/542OmWv/DCC92/XFx55ZVcccUV6Lp+yhI9U7lC3XFwOBzs27ePuLg4oLbwKisr3a/v27evzudqmnbadcfHx5Odne1+XFhYSE1Nze+69Oj4dUHtMdKzWdfxeRMSEujRowclJSXuj7KyMn755RcAWrZsyZw5c9i7dy9ffPEFL7zwAp988glQv7G95ZZbWLlyJTk5Ofj7+3P77bcDtb/U7Ny5s15fp91up6CgoM7Xeex7JyQk0LJlyzpfQ2lpqfsXypCQEJ544gm2b9/OihUr+O6775gzZ049Rkt4AylYcU6Ki4u577772LZtGy6Xi8rKSp5++mkiIyPp2LEjNpsNpRQtW7bEZDKxYMECFi1adM7v+69//YuCggJKSkq4//77ufrqq+v1Q/N0rrrqKr777jsWLVqE0+lk7ty57Nix44zLf/nllzidTl5++eVTLr9//34++eQTysvLsVgshIWFYTabAYiOjqa8vLzeW+DHeu+991i1ahV2u52HH36YFi1a0LdvXwC6d+/OvHnzcDqdbNiwgXnz5tX53OjoaHbt2nXKdV933XU89thj5ObmYrPZuOOOO7jooouIjY0965yjRo3iwIEDzJkzB6fTyZIlS3j77beZPHlyvddxfN7Ro0ezf/9+5syZQ3V1NS6Xi+3bt/PDDz8A8P7775OTk4NSivDwcMxmMxaLpV5f+5o1a1i+fDl2u53AwECCg4Pdn3vTTTfx7LPP8uOPP6LrOgcOHGD9+vVA7Zg999xzZGVlUVNTw3333UdcXJz7JK3j9erVi8TERO677z7Ky8tRSrF3716++uorAL744gt27NiBruuEhYVhtVrdOYT3k4IV58TPz4/8/HxGjRpFeHg4iYmJLFu2jIULFxIcHExqair33nsvw4YNIyoqivfee4+xY8ee8/ted911XHDBBbRu3ZrQ0FCeffbZc15nhw4deP3117n55puJiopixYoVDBs2DH9//1MuP2/ePG6//XaioqJYtWoVI0aMOOmyuq7z7LPPkpCQQHh4OLNnz+bDDz/EZDLRoUMHMjMz6dSpExERESxdurTemadNm8bdd99NZGQk33zzDZ9++qn7B/B///tfVqxYQUREBHfffTdTpkyp87mPPPIIt99+O82aNePxxx8/Yd333HMPl1xyCf369SMpKQmHw8Gbb75Z72zHatasGV999RVvvvkmUVFR3HjjjTz//PMMHDiw3us4Pm9ISAjffvst3333HUlJSURFRTFx4kT3LuKff/7ZfdZxv379yMzMdH/v/e1vf+O5556jWbNm3HLLLSe8V1lZGbfccgtRUVHExMRQUFDg/h67/PLLefrpp5k5cybh4eH06tWLzZs3AzB58mRuu+02Ro8eTUxMDBs3bmT+/PmnLEWz2cz8+fPJz8+nU6dOhIeHc+mll7q3kHfu3MmIESMIDQ0lNTWVfv36cfPNN9d/4IWhNHWu++qEaGCaprF+/XoyMjI8/l4dOnTg73//O9dd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GKwQQgjh7aRghRBCCA+QghVCCCE8QApWCCGE8AApWCGEEMIDpGCF8DIlJSXuGVESExOJiopyP168eHG91vHpp5+yadMmDycVQpyOXKYjhBd7/fXXWbp0Ka+88spZfd7UqVO56KKL6twy0JNcLhdms7lB3kuIxkK2YIVoBKqqqpgxYwa9e/emc+fOPPfccwAcOHCAYcOGkZGRQVpaGnPmzGHx4sV8/vnn3HvvvWRkZLB8+fI669q+fTv9+vWjW7dupKWl8emnnwKQnZ3NyJEj6dKlC127duW7774D4JNPPqFr16507tyZiRMnUl5eDtSW+KxZs7jwwgu59tprT5lRCF8lW7BCeLGjW7CxsbHExcVx0003UV1dzYABA5g3bx5ff/01NpuNv//97wAUFxfTrFmz027B/vGPf6Rnz55MmjQJpRRlZWWEh4czYMAAZsyYwaRJk9B1nbKyMmpqasjIyGDVqlUkJiZy2223ERwczOOPP87UqVPJzc1l4cKFWK1W7r///pNmTE1NbehhE8IrWIwOIIQ4swULFlBVVcXzzz8PQFlZGdu3b6d3795cf/312O12LrnkEgYOHHjGdQ0YMICHH36Y3NxcRo4cSbdu3SgvL2f79u1MmjQJAJPJREREBJ9//jkDBw4kMTERgMzMTG688Ub3uq688kqsVutpM0rBCl8lBStEI6CU4q233iIjI+OE15YtW8bChQt58MEH6dChA7Nnzz7tuq666ir69u3LwoULufHGG7nqqquYMWPGKd/3eMdO7RUSElKvjEL4IjkGK0QjMHLkSJ599llcLhcAO3fupLy8nOzsbCIiIpg0aRIPP/wwq1evBiAsLMx9rPR4O3fuJCEhgRtvvJFZs2axevVqQkND6dChA/PmzQNA13VKSkro06cPS5cudU/z9eqrr3LBBRecVUYhfJUUrBCNwH333UdISIj7ZKMbbriBmpoaFi9eTLdu3cjIyOC2227jiSeeAODaa69lzpw59OrVixUrVtRZ1/vvv096ejrdunXjv//9L/fddx9QO1H5m2++SefOnenevTvr1q0jJiaG2bNnM3r0aDp37kxRURH33nvvWWUUwlfJSU5CCCGEB8gWrBBCCOEBUrBCCCGEB0jBCiGEEB4gBSuEEEJ4gBSsEEII4QFSsEIIIYQHSMEKIYQQHiAFK4QQQnjA/wOQbtQHd4kIVgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cdf_500.plot(label='ability=500', color='C1',\n", " linestyle='dashed')\n", "cdf_600.plot(label='ability=600', color='C3')\n", "cdf_700.plot(label='ability=700', color='C2',\n", " linestyle='dashed')\n", "cdf_800.plot(label='ability=800', color='C0')\n", "\n", "decorate(xlabel='Test score',\n", " ylabel='CDF',\n", " title='Sampling distribution of test scores')" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "On average, people with higher ability get higher scores, but anyone can have a bad day, or a good day, so there is some overlap between the distributions.\n", "\n", "For people with ability between `500` and `600`, where the precision of the test is highest, the discriminatory power of the test is also high.\n", "\n", "If people with abilities `500` and `600` take the test, it is almost certain that the person with higher ability will get a higher score." ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:37:10.128844Z", "iopub.status.busy": "2021-04-16T19:37:10.128345Z", "iopub.status.idle": "2021-04-16T19:37:10.130952Z", "shell.execute_reply": "2021-04-16T19:37:10.130569Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "0.98" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean(sample_600 > sample_500)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Between people with abilities `600` and `700`, it is less certain." ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:37:10.134774Z", "iopub.status.busy": "2021-04-16T19:37:10.134201Z", "iopub.status.idle": "2021-04-16T19:37:10.136839Z", "shell.execute_reply": "2021-04-16T19:37:10.137320Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "0.95" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean(sample_700 > sample_600)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "And between people with abilities `700` and `800`, it is not certain at all." ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:37:10.141908Z", "iopub.status.busy": "2021-04-16T19:37:10.141293Z", "iopub.status.idle": "2021-04-16T19:37:10.144428Z", "shell.execute_reply": "2021-04-16T19:37:10.143952Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "0.85" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean(sample_800 > sample_700)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "But remember that these results are based on a test where all questions are equally difficult.\n", "If you do the exercises at the end of the chapter, you'll see that the performance of the test is better if it includes questions with a range of difficulties, and even better if the test it is adaptive." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ " Go back and modify `choose`, which is the function that chooses the difficulty of the next question.\n", "\n", "1. Write a version of `choose` that returns a range of difficulties by using `i` as an index into a sequence of difficulties.\n", "\n", "2. Write a version of `choose` that is adaptive, so it choose the difficulty of the next question based `belief`, which is the posterior distribution of the test-taker's ability, based on the outcome of previous responses.\n", "\n", "For both new versions, run the simulations again to quantify the precision of the test and its discriminatory power.\n", "\n", "For the first version of `choose`, what is the ideal distribution of difficulties?\n", "\n", "For the second version, what is the adaptive strategy that maximizes the precision of the test over the range of abilities?" ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:37:10.149351Z", "iopub.status.busy": "2021-04-16T19:37:10.148492Z", "iopub.status.idle": "2021-04-16T19:37:10.150584Z", "shell.execute_reply": "2021-04-16T19:37:10.151025Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "# I don't know what the optimal distribution of questions\n", "# is, but my guess is that it would follow the distribution\n", "# of ability.\n", "\n", "# But as a simplification, I used a uniform distribution\n", "# from 200 to 800.\n", "\n", "# It works pretty well (and substantially better than the\n", "# test where all questions are equally difficult.)\n", "\n", "num_questions = 51\n", "difficulties = np.linspace(200, 800, num_questions)\n", "\n", "def choose(i, belief):\n", " \"\"\"Choose the difficulty of the next question.\n", " \n", " i: index from [0..num_questions-1]\n", " belief: Pmf representing current estimate of ability\n", " \n", " returns: difficulty\n", " \"\"\"\n", " return difficulties[i]" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:37:10.154839Z", "iopub.status.busy": "2021-04-16T19:37:10.154301Z", "iopub.status.idle": "2021-04-16T19:37:10.157011Z", "shell.execute_reply": "2021-04-16T19:37:10.156470Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "# I suspect that the optimal strategy is to choose\n", "# a question so that the test-taker has a 50% chance\n", "# of getting it right.\n", "\n", "# As rough approximation of that, I choose a question\n", "# with difficulty equal to the posterior mean of ability.\n", "\n", "# It works quite well (and substantially better than\n", "# the previous version).\n", "\n", "def choose(i, belief):\n", " \"\"\"Choose the difficulty of the next question.\n", " \n", " i: index from [0..num_questions-1]\n", " belief: Pmf representing current estimate of ability\n", " \n", " returns: difficulty\n", " \"\"\"\n", " return belief.mean()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove-print" ] }, "source": [ "*Think Bayes*, Second Edition\n", "\n", "Copyright 2020 Allen B. Downey\n", "\n", "License: [Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], "metadata": { "celltoolbar": "Tags", "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.11.11" } }, "nbformat": 4, "nbformat_minor": 4 }