{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Oregon Curriculum Network](http://4dsolutions.net/ocn/)\n", "\n", "[School of Tomorrow (Home)](School_of_Tomorrow.ipynb)\n", "\n", "[PyCampNextLevel Outline](PyCampNextLevel.ipynb)\n", "\n", "![animated](anim.gif)\n", "\n", "![casino math](https://wikieducator.org/images/9/9a/Casino_math.jpg)\n", "\n", "# Casino Math\n", "\n", "Welcome to this Casino Math worksheet. At the School of Tomorrow (an allusion to a certain movie and book), we follow [a Silicon Forest proposal](https://wikieducator.org/Digital_Math) from my Oregon Curriculum Network, to look at maths in four dimensions: [Casino](https://wikieducator.org/Casino_Math), Supermarket, Neolithic and Futuristic (also known as Martian).\n", "\n", "In Casino Math we work with randomness, permutations, combintatorics, statistics, predictive models, ways of managing risk. \n", "\n", "In some subcultures (\"cults\") the Chief Risk Officer (CRO) has high hopes of joining the C-suite (CEO, CFO...).\n", "\n", "
\n", "The chief risk officer or chief risk management officer of a firm or corporation is the executive accountable for enabling the efficient and effective governance of significant risks, and related opportunities, to a business and its various segments. Risks are commonly categorized as strategic, reputational, operational, financial, or compliance-related. CROs are accountable to the Executive Committee and The Board for enabling the business to balance risk and reward. In more complex organizations, they are generally responsible for coordinating the organization's Enterprise Risk Management approach. \n", "\n", "\n", "Every culture has ways of anticipating chaos (noise and uncertainty, disruption -- see VUCA) and coping with risks, however formalized with job titles and legal frameworks." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Workbench Tools\n", "\n", "Every craft has its workbench tools, which may be heavy (hard to move) or as light as a feather. In Casino Math, with may think in terms of games of chance, expectations of winnings, possible outcomes and so on. We inherit from the culture of statisticians, which includes actuarial sciences and their somewhat morbid concerns (causes of death, likelihood of death by cause). \n", "\n", "Games have always included their life and death themes, amidst which we move our avatars, which have their lifetimes and levels.\n", "\n", "As of 2020, the Python toolkit has acheived widespread acceptance in many walks of life. At the School of Tomorrow, we assume these tools as a part of our Calculator of Tomorrow. The handheld calculator is still a useful tool, however our mission here (a form of prostelytizing), our bias, is towards using Jupyter Notebooks as a front end.\n", "\n", "\n", "\n", "On the backend, you will attach to (import) various tools, and not necessarily investigate their internals at every turn, given the work at hand.\n", "\n", "We're starting over with the basics in some sense, and yet availing ourselves of state of the art tools in another. Lets combine assumed naivte with state of the art sophistication." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Integration\n", "\n", "Integration is a way of accumulating, as the MIT lecture linked below well explains. The integration-differentiation trip is a round trip. The first accumulates sums whereas the second dissects an accumulation into successive growth rates (change rates), so-called \"slopes\". The slope of something is a measure of steepness or rate of change.\n", "\n", "* [Big Picture of Calculus](https://youtu.be/UcWsDwg1XwM)\n", "* [Big Picture Derivatives](https://youtu.be/T_I-CUOc_bk)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![math dream](https://media.giphy.com/media/26gR0YFZxWbnUPtMA/giphy.gif)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The salient feature of our high school level approach is we assume people of any age, with lots of experience, have reason to go through high school again, not because they've \"forgotten everything\" but because the content changes, or should. We have stopped picturing the high school curriculum as static, with \"future shock\" always postponed. The future is shocking mostly if you've had some expectation of a static condition, a status quo. That's an unrealistic expectation in many subcultures.\n", "\n", "### Connecting Calculus with Statistics\n", "The high school calculus I went through was quite divorced from statistics. The statisticians refer to probability density functions, and associated cumulative density functions, where the latter is the integral of the former, but the high school delta calc teachers rarely did much in the other direction, to connect their textbooks with the ones used in statistics.\n", "\n", "![derivative](https://media.giphy.com/media/3o7WIxxI7tLStjR2p2/giphy.gif)\n", "\n", "The fracturing of disciplines into too many subdisciplines is what led Buckminster Fuller (critical to our School of Tomorrow curriculum) to sound the alarm in *Operating Manual for Spaceship Earth* wherein he circled \"overspecialization\" as a leading cause of species and/or cultural extinction." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def integrate(f, dx=1e-08):\n", " \n", " def sumup(a, b):\n", " accum = 0\n", " summing = True\n", "\n", " while summing:\n", " accum += dx * f(a) # slice of area\n", " a += dx # increment a by dx\n", " if a >= b: # are we there yet?\n", " summing = False # stop summing\n", " \n", " return accum\n", " \n", " return sumup # return the callable function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looking for [Symbolic Integration](http://www.learningaboutelectronics.com/Articles/How-to-find-the-integral-of-a-function-in-Python.php)?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What's important to our approach above is \"to integrate\" (the verb) is applied to a function, and returns a function. Ditto for differentiation. \n", "\n", "Both the integrate and differentiate functions eat functions and return functions. Notice the keyword ```def``` inside an outer ```def```: that's a function being defined and then returned as the end product. What the returned function will \"eat\" (in terms of x) is left for later.\n", "\n", "The internal ```sumup``` function has a single responsibibility, to accumulate ```dx * f(a)``` rectangles per the standard textbook intro. Trek across a curve accumulating all the areas. That's purposely rather simple-minded.\n", "\n", "![Riemann Sum](https://media.giphy.com/media/prqer53bXBopG/giphy.gif)\n", "\n", "[Riemann_Sum on Wikipedia](https://media.giphy.com/media/prqer53bXBopG/giphy.gif)\n", "\n", "Clearly dx is not *infinitely* small so this is still digital more than continuous mathematics. That's not unusual as \"the continuous\" is associated with the \"theoretical limit\" which we only approximate with our assumed values for delta x. \n", "\n", "We'll be allowing it to be larger that 0.00000001 in examples below." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'1.000000e-08'" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"{:e}\".format(0.00000001)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def differentiate(f, dx=1e-8):\n", " def differ(x):\n", " return ((f(x+dx) - f(x))/dx)\n", " return differ" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, the default dx is a token \"very small\" value. The returned function will have taken whatever value \"to heart\" i.e. the time to set it is when asking to differentiate. \n", "\n", "The differ function is a \"wiggler\" in that it slightly wiggles x to get a corresponding wiggle in y, which it then ratios. A good mnenomic for \"slope\" is: wiggle in y divided by wiggle in x, with y considered the \"dependent\" variable thanks to the function connecting them. We usually say \"delta\" in place of \"wiggle\" which also means \"change\".\n", "\n", "![slope at a point](https://media.giphy.com/media/rDaWuLJZxAp6o/giphy.gif)\n", "\n", "The reason we call ordinary calculus \"delta calc\" is because it's about studying rates of change, and how those rates affect accumulation. A sloping upward line adds larger area slices." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def line_maker(slope, intercept):\n", " m, b = slope, intercept\n", " def line(x):\n", " y = m * x + b\n", " return y\n", " return line" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, the focus is on functions that make functions, which we call factory functions. ```line_maker``` is designed to spit out any linear function, with any slope and y-intercept we desire. Such lines become the focus of \"linear regression\" problems later, wherein we're looking for a \"best fit\" predictor, some function that does the best job of predicting y, given x, and assuming some quasi-linear relationship.\n", "\n", "We do not expect linear functions to precisely predict outcomes, but to do so within some interval of confidance. Computing that interval, based on actual sample data, is the topic of another worksheet." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "domain = np.arange(0,5,.01)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "pretty_steep = line_maker(4, 2)\n", "output = [pretty_steep(x) for x in domain]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[2.0, 2.04, 2.08, 2.12, 2.16, 2.2, 2.24, 2.2800000000000002, 2.32, 2.36]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output[:10] # first 10 points" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "