From edad40920865497a114c5ec1a8dc6de2d0022d8d Mon Sep 17 00:00:00 2001 From: Tyler Burch Date: Fri, 27 Sep 2019 15:06:30 -0500 Subject: [PATCH] Add express solution --- .../notebooks/express.ipynb | 193 ++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 riddler538_2019_Sept27/notebooks/express.ipynb diff --git a/riddler538_2019_Sept27/notebooks/express.ipynb b/riddler538_2019_Sept27/notebooks/express.ipynb new file mode 100644 index 0000000..c2758f1 --- /dev/null +++ b/riddler538_2019_Sept27/notebooks/express.ipynb @@ -0,0 +1,193 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Riddler Express**\n", + "\n", + "_If a baseball team is truly .500, meaning it has a 50 percent chance of winning each game, what’s the probability that it has won two of its last four games and four of its last eight games?_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To do this, we'll simulate many instances of 8 games with 50/50 odds to win any of them. The aggregate probability that a team will accomplish 2-4 and 4-8 is eqivalent to the fractional probability of (times where this does happen / total attempts) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, define some functions. \n", + "The first, simulate_games, simulates instances of 8 games and returns a boolean array of length 8 that indicates wins and losses\n", + "The second, simulate_instances calls the first for indicated number of instances and returns another boolean array where the passing condition (both 2-4 and 4-8) is true, and otherwise is false." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def simulate_games():\n", + " # create numpy array of size 8 with values 0 and 1 to represent the last 8 games\n", + " return np.random.randint(2, size=8) \n", + "\n", + "def simulate_instances(nInstances):\n", + " trues = np.zeros(nInstances)\n", + " for i in range(0,nInstances):\n", + " game_results = simulate_games()\n", + " # Check for 2 wins in last four and 4 wins in last 8\n", + " if game_results[:4].sum() == 2 and game_results.sum() == 4:\n", + " trues[i] = 1\n", + " return(trues)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll choose the number of simulations we want to run, then call simulate_instances for that many iterations.\n", + "\n", + "The cumulative sum along this array is the number of successful attempts (dentoed truth in code)\n", + "We'll also do an analogous cumulative sum of a ones array to indicate how many instances have occured so far.\n", + "\n", + "Dividing those two gives us our answer at each point, the last element being the most accurate, as it represents the most simulated attempts" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "instances = 100000000 # number of trials\n", + "truth_representation_arr = simulate_instances(instances) # array of number of wins\n", + "truth_cumsum = truth_representation_arr.cumsum() \n", + "total_cumsum = np.ones(instances).cumsum()\n", + "fractional_results = truth_cumsum / total_cumsum" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Output final answer \n", + "\n", + "Being a binary counting variable, I'll use the Agresti–Coull interval (https://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval) to estimate the confidence interval" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Solution: 0.1406 ± 0.0001\n" + ] + } + ], + "source": [ + "p = fractional_results[-1]\n", + "n = instances\n", + "z = 1.96 # 95% CI\n", + "CI = z * np.sqrt( (p * (1 - p)) / n)\n", + "\n", + "solution = str(round(p,4)) + \" ± \" + str(round(CI,4))\n", + "print(\"Solution: \" + solution)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll make a plot of how accurate our solution gets over simulation iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# generate fig\n", + "fig = plt.figure(figsize=(12,6))\n", + "ax = plt.gca()\n", + "ax.set_xscale('log')\n", + "\n", + "# plot probability evolution\n", + "plt.plot(total_cumsum, fractional_results,color=\"cornflowerblue\")\n", + "\n", + "# plot solution line\n", + "ax.axhline(fractional_results[-1],linestyle=\":\",color=\"firebrick\",alpha=0.7)\n", + "\n", + "# Make plot better looking\n", + "sns.despine()\n", + "ax.tick_params(axis='both', which='major', labelsize=12)\n", + "\n", + "# annotate\n", + "plt.xlabel(\"Simulations\",fontsize=15)\n", + "plt.ylabel(\"Fraction of both 2-4 and 4-8\",fontsize=15)\n", + "plt.annotate(solution,\n", + " xy=(instances,fractional_results[-1]+.01), xycoords=\"data\", \n", + " ha=\"right\", va=\"bottom\", color=\"firebrick\",alpha=0.7, fontsize=16)\n", + "plt.annotate(s=\"Tyler James Burch\", xy=(.05,.03), xycoords='figure fraction',\n", + " textcoords='figure fraction', color='grey',alpha=0.7, fontsize=14)\n", + "\n", + "\n", + "plt.savefig(\"plots/express_solution.png\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "puzzle3.7", + "language": "python", + "name": "puzzle3.7" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}