{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#Rugby Analytics and FinTech - Tutorial\n", "* Peadar Coyle \n", "* Alternate title - Probabilistic Programming applied to Sports Analytics and FinTech\n", "* Alternate title - Why use PyMC and PyMC3?\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "* pip install patsy pandas\n", "* pip install pymc - PyMC2\n", "* pip install git+https://github.com/pymc-devs/pymc3 - PyMC3\n", "* Also need Scipy, NumPy, Seaborn - basically the PyData Stack\n", "* Anaconda is excellent to get up and running\n", "* Stop me and ask questions as we go along" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "# Newsflash\n", "* PyMC3 is Beta\n", "* Big shout out to John Salvatier, Thomas Wiecki and Chris Fonnesbeck - great work people :) \n", "* You are attending the first tutorial in the world on PyMC3 since it went Beta!\n", "* Welcome to the cutting-edge of Probabilistic Programming with the PyData stack :) \n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "* The next slide is just some code. Run it as a test for if you've installed the correct things.\n", "* The code is taken from Thomas Wiecki's tutorials on applying PyMC3 to Quantitative finance" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "%matplotlib inline\n", "#Most of this code is from @twiecki - used with attribution\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import itertools\n", "import scipy as sp\n", "import pymc3 as pm3\n", "import theano.tensor as T\n", "from scipy import stats\n", "from IPython.core.pylabtools import figsize\n", "\n", "figsize(12, 12)\n", "sns.set_style('darkgrid')\n", "import scipy\n", "data_0 = pd.read_csv('data0.csv', index_col=0, parse_dates=True, header=None)[1]\n", "data_1 = pd.read_csv('data1.csv', index_col=0, parse_dates=True, header=None)[1]\n", "def var_cov_var_t(P, c, nu=1, mu=0, sigma=1, **kwargs):\n", " \"\"\"\n", " Variance-Covariance calculation of daily Value-at-Risk\n", " using confidence level c, with mean of returns mu\n", " and standard deviation of returns sigma, on a portfolio\n", " of value P.\n", " \"\"\"\n", " alpha = stats.t.ppf(1-c, nu, mu, sigma)\n", " return P - P*(alpha + 1)\n", "\n", "def var_cov_var_normal(P, c, mu=0, sigma=1, **kwargs):\n", " \"\"\"\n", " Variance-Covariance calculation of daily Value-at-Risk\n", " using confidence level c, with mean of returns mu\n", " and standard deviation of returns sigma, on a portfolio\n", " of value P.\n", " \"\"\"\n", " alpha = stats.norm.ppf(1-c, mu, sigma)\n", " return P - P*(alpha + 1)\n", "\n", "def sample_normal(mu=0, sigma=1, **kwargs):\n", " samples = stats.norm.rvs(mu, sigma, kwargs.get('size', 100))\n", " return samples\n", "\n", "def sample_t(nu=1, mu=0, sigma=1, **kwargs):\n", " samples = stats.t.rvs(nu, mu, sigma, kwargs.get('size', 100))\n", " return samples\n", "\n", "def eval_normal(mu=0, sigma=1, **kwargs):\n", " pdf = stats.norm(mu, sigma).pdf(kwargs.get('x', np.linspace(-0.05, 0.05, 500)))\n", " return pdf\n", "\n", "def eval_t(nu=1, mu=0, sigma=1, **kwargs):\n", " samples = stats.t(nu, mu, sigma).pdf(kwargs.get('x', np.linspace(-0.05, 0.05, 500)))\n", " return samples\n", "\n", "def logp_normal(mu=0, sigma=1, **kwargs):\n", " logp = np.sum(stats.norm(mu, sigma).logpdf(kwargs['data']))\n", " return logp\n", "\n", "def logp_t(nu=1, mu=0, sigma=1, **kwargs):\n", " logp = np.sum(stats.t(nu, mu, sigma).logpdf(kwargs['data']))\n", " return logp\n", "\n", "# generate posterior predictive\n", "def post_pred(func, trace, *args, **kwargs):\n", " samples = kwargs.pop('samples', 50)\n", " ppc = []\n", " for i, idx in enumerate(np.linspace(0, len(trace), samples)):\n", " t = trace[int(i)]\n", " try:\n", " kwargs['nu'] = t['nu_minus_one']+1\n", " except KeyError:\n", " pass\n", " mu = t['mean returns']\n", " sigma = t['volatility']\n", " ppc.append(func(*args, mu=mu, sigma=sigma, **kwargs))\n", "\n", " return ppc\n", "\n", "def plot_strats(sharpe=False):\n", " figsize(12, 6)\n", " f, (ax1, ax2) = plt.subplots(1, 2)\n", " if sharpe:\n", " label = 'etrade\\nn=%i\\nSharpe=%.2f' % (len(data_0), (data_0.mean() / data_0.std() * np.sqrt(252)))\n", " else:\n", " label = 'etrade\\nn=%i\\n' % (len(data_0))\n", " sns.distplot(data_0, kde=False, ax=ax1, label=label, color='b')\n", " ax1.set_xlabel('daily returns'); ax1.legend(loc=0)\n", " if sharpe:\n", " label = 'IB\\nn=%i\\nSharpe=%.2f' % (len(data_1), (data_1.mean() / data_1.std() * np.sqrt(252)))\n", " else:\n", " label = 'IB\\nn=%i\\n' % (len(data_1))\n", " sns.distplot(data_1, kde=False, ax=ax2, label=label, color='g')\n", " ax2.set_xlabel('daily returns'); ax2.legend(loc=0);\n" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " [-----------------100%-----------------] 5000 of 5000 complete in 11.8 sec" ] } ], "source": [ "def model_returns_normal(data):\n", " with pm3.Model() as model:\n", " mu = pm3.Normal('mean returns', mu=0, sd=.01, testval=data.mean())\n", " sigma, log_sigma = model.TransformedVar('volatility', \n", " pm3.HalfCauchy.dist(beta=1, testval=data.std()), \n", " pm3.transforms.logtransform)\n", " #sigma = pm.HalfCauchy('volatility', beta=.1, testval=data.std())\n", " returns = pm3.Normal('returns', mu=mu, sd=sigma, observed=data)\n", " ann_vol = pm3.Deterministic('annual volatility', returns.distribution.variance**.5 * np.sqrt(252))\n", " sharpe = pm3.Deterministic('sharpe', \n", " returns.distribution.mean / returns.distribution.variance**.5 * np.sqrt(252))\n", " start = pm3.find_MAP(fmin=scipy.optimize.fmin_powell)\n", " step = pm3.NUTS(scaling=start)\n", " trace_normal = pm3.sample(5000, step, start=start)\n", " return trace_normal\n", "\n", "def model_returns_t(data):\n", " with pm3.Model() as model:\n", " mu = pm3.Normal('mean returns', mu=0, sd=.01, testval=data.mean())\n", " sigma, log_sigma = model.TransformedVar('volatility', \n", " pm3.HalfCauchy.dist(beta=1, testval=data.std()), \n", " pm3.transforms.logtransform)\n", " nu, log_nu = model.TransformedVar('nu_minus_one',\n", " pm3.Exponential.dist(1./10., testval=3.),\n", " pm3.transforms.logtransform)\n", "\n", " returns = pm3.T('returns', nu=nu+2, mu=mu, sd=sigma, observed=data)\n", " ann_vol = pm3.Deterministic('annual volatility', returns.distribution.variance**.5 * np.sqrt(252))\n", " sharpe = pm3.Deterministic('sharpe', \n", " returns.distribution.mean / returns.distribution.variance**.5 * np.sqrt(252))\n", "\n", " start = pm3.find_MAP(fmin=scipy.optimize.fmin_powell)\n", " step = pm3.NUTS(scaling=start)\n", " trace = pm3.sample(5000, step, start=start)\n", "\n", " return trace\n", "\n", "def model_returns_t_stoch_vol(data):\n", " from pymc3.distributions.timeseries import GaussianRandomWalk\n", "\n", " with pm3.Model() as model:\n", " mu = pm3.Normal('mean returns', mu=0, sd=.01, testval=data.mean())\n", " step_size, log_step_size = model.TransformedVar('step size', \n", " pm3.Exponential.dist(1./.02, testval=.06), \n", " pm3.transforms.logtransform)\n", " \n", " vol = GaussianRandomWalk('volatility', step_size**-2, shape=len(data))\n", " \n", " nu, log_nu = model.TransformedVar('nu_minus_one',\n", " pm3.Exponential.dist(1./10., testval=3.),\n", " pm3.transforms.logtransform)\n", "\n", " returns = pm3.T('returns', nu=nu+2, mu=mu, lam=pm.exp(-2*vol), observed=data)\n", " #ann_vol = pm.Deterministic('annual volatility', returns.distribution.variance**.5 * np.sqrt(252))\n", " #sharpe = pm.Deterministic('sharpe', \n", " # returns.distribution.mean / ann_vol)\n", "\n", " start = pm3.find_MAP(vars=[vol], fmin=sp.optimize.fmin_l_bfgs_b)\n", " #start = pm.find_MAP(fmin=scipy.optimize.fmin_powell, start=start)\n", " step = pm3.NUTS(scaling=start)\n", " trace = pm3.sample(5000, step, start=start)\n", "\n", " return trace\n", "\n", "results_normal = {0: model_returns_normal(data_0),\n", " 1: model_returns_normal(data_1)}\n", "results_t = {0: model_returns_t(data_0),\n", " 1: model_returns_t(data_1)}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "##Who am I?\n", "* I'm a Data Analytics Professional based in Luxembourg\n", "* I currently work for Vodafone\n", "* My intellectual background is in Physics, Philosophy and Mathematics - including some Financial Mathematics\n", "* I worked at Amazon in Supply Chain Analytics\n", "* I interned at http://import.io - where I got introduced to Data Science\n", "* I've made open source contributions to Pandas and Probabilistic Programming and Bayesian Methods for Hackers. \n", "* All opinions are my own!\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "
\n", "\n", "
\n", " \n", " | \n", "\n", "peadarcoyle@gmail.com \n", " |
\n", " \n", "\n", "\n", " | \n", "http://github.com/springcoil \n", "\n", " |
\n", "\n", " \n", " | \n", "https://www.linkedin.com/in/peadarcoyle \n", "\n", " |
\n", "\n", "\n", " | \n", "@springcoil \n", "\n", " |
\n", " | home_team | \n", "away_team | \n", "home_score | \n", "away_score | \n", "
---|---|---|---|---|
10 | \n", "Scotland | \n", "France | \n", "17 | \n", "19 | \n", "
11 | \n", "England | \n", "Wales | \n", "29 | \n", "18 | \n", "
12 | \n", "Italy | \n", "England | \n", "11 | \n", "52 | \n", "
13 | \n", "Wales | \n", "Scotland | \n", "51 | \n", "3 | \n", "
14 | \n", "France | \n", "Ireland | \n", "20 | \n", "22 | \n", "
\n", " | team | \n", "i | \n", "
---|---|---|
0 | \n", "Wales | \n", "0 | \n", "
1 | \n", "France | \n", "1 | \n", "
2 | \n", "Ireland | \n", "2 | \n", "
3 | \n", "Scotland | \n", "3 | \n", "
4 | \n", "Italy | \n", "4 | \n", "
\n", " | home_team | \n", "away_team | \n", "home_score | \n", "away_score | \n", "i_home | \n", "i_away | \n", "
---|---|---|---|---|---|---|
0 | \n", "Wales | \n", "Italy | \n", "23 | \n", "15 | \n", "0 | \n", "4 | \n", "
1 | \n", "France | \n", "England | \n", "26 | \n", "24 | \n", "1 | \n", "5 | \n", "
2 | \n", "Ireland | \n", "Scotland | \n", "28 | \n", "6 | \n", "2 | \n", "3 | \n", "
3 | \n", "Ireland | \n", "Wales | \n", "26 | \n", "3 | \n", "2 | \n", "0 | \n", "
4 | \n", "Scotland | \n", "England | \n", "0 | \n", "20 | \n", "3 | \n", "5 | \n", "
The league is made up by a total of T= 6 teams, playing each other once \n", "in a season. We indicate the number of points scored by the home and the away team in the g-th game of the season (15 games) as $y_{g1}$ and $y_{g2}$ respectively.
\n", "The vector of observed counts $\\mathbb{y} = (y_{g1}, y_{g2})$ is modelled as independent Poisson:\n", "$y_{gi}| \\theta_{gj} \\tilde\\;\\; Poisson(\\theta_{gj})$\n", "where the theta parameters represent the scoring intensity in the g-th game for the team playing at home (j=1) and away (j=2), respectively.
\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "We model these parameters according to a formulation that has been used widely in the statistical literature, assuming a log-linear random effect model:\n", "$$log \\theta_{g1} = home + att_{h(g)} + def_{a(g)} $$\n", "$$log \\theta_{g2} = att_{a(g)} + def_{h(g)}$$\n", "the parameter home represents the advantage for the team hosting the game\n", "and we assume that this effect is constant for all the teams and\n", "throughout the season. \n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "* Key assumption home effect is an advantage in Sports\n", "* We know these things empirically from our 'domain specific' knowledge\n", "* Bayesian Models allow you to incorporate *beliefs* or *knowledge* into your model!\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "In addition, the scoring intensity is \n", "determined jointly by the attack\n", "and defense ability of the two teams involved, represented by the parameters att and def, respectively.\n", "In line with the Bayesian approach, we have to specify some suitable prior distributions for all the \n", "random parameters in our model. The variable $home$ \n", "is modelled as a fixed effect, assuming a standard \n", "flat prior distribution. We use the notation of describing the Normal distribution in terms of mean \n", "and the precision. \n", "$home \\tilde\\; Normal(0,0.0001)$
\n", "Conversely, for each t = 1, ..., T, the team-specific effects are modelled as exchangeable from a common distribution:\n", "$att_t \\tilde\\; Normal(\\mu_{att}, \\tau_{att})$\n", "and $def_t \\tilde\\; Normal(\\mu_{def}, \\tau_{def})$
\n", "Note that they're breaking out team strength into attacking and defending strength. \n", "A negative defense parameter will sap the mojo from the opposing team's attacking parameter.
\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "I made two tweaks to the model. It didn't make sense to me to have a $\\mu_{att}$ when we're enforcing the sum-to-zero constraint by subtracting the mean anyway. So I eliminated $\\mu_{att}$ and $\\mu_{def}$
\n", "Also because of the sum-to-zero constraint, \n", "it seemed to me that we needed an intercept term in the log-linear model, capturing the average goals scored per game by the away team.\n", "This we model with the following hyperprior.\n", "$$intercept \\tilde\\; Normal(0, 0.001)$$
\n", "\n", "* The hyper-priors on the attack and defense parameters are also flat\n", "* $\\mu_att \\tilde\\; Normal(0,0.001)$\n", "* $\\mu_def \\tilde\\; Normal(0,0.001)$\n", "* $\\tau_att \\tilde\\; \\Gamma(0.1,0.1)$\n", "* $\\tau_def \\tilde\\; \\Gamma(0.1,0.1)$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "###Digression: Why the flat priors were picked (our hyperpriors are flat)\n", "* There are lots of different ways of picking priors - see the literature\n", "* I learned from this that it didn't make any difference to the results picking a uniform prior versus a flat prior\n", "\n", "Often it simply doesn't matter much what prior you use. \n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "\n", "###Definition: A prior distribution is non-informative if the prior is “flat” relative to the likelihood function.\n", "\n", "\n", "* We are trying to have a reasonable model and let inference happen from the data set.\n", "* ##Key takeaway - Often in Bayesian modelling it doesn't matter what your priors are. Let the data generate the story :) " ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "#hyperpriors - which apply to all teams\n", "home = pymc.Normal('home', 0, .0001, value=0)\n", "tau_att = pymc.Gamma('tau_att', .1, .1, value=10)\n", "tau_def = pymc.Gamma('tau_def', .1, .1, value=10)\n", "intercept = pymc.Normal('intercept', 0, .0001, value=0)\n", "\n", "#team-specific parameters\n", "atts_star = pymc.Normal(\"atts_star\", \n", " mu=0, \n", " tau=tau_att, \n", " size=num_teams, \n", " value=att_starting_points.values)\n", "defs_star = pymc.Normal(\"defs_star\", \n", " mu=0, \n", " tau=tau_def, \n", " size=num_teams, \n", " value=def_starting_points.values) \n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "# trick to code the sum to zero constraint\n", "@pymc.deterministic\n", "def atts(atts_star=atts_star):\n", " atts = atts_star.copy()\n", " atts = atts - np.mean(atts_star)\n", " return atts\n", "\n", "@pymc.deterministic\n", "def defs(defs_star=defs_star):\n", " defs = defs_star.copy()\n", " defs = defs - np.mean(defs_star)\n", " return defs\n", "\n", "@pymc.deterministic\n", "def home_theta(home_team=home_team, \n", " away_team=away_team, \n", " home=home, \n", " atts=atts, \n", " defs=defs, \n", " intercept=intercept): \n", " return np.exp(intercept + \n", " home + \n", " atts[home_team] + \n", " defs[away_team])\n", " \n", "@pymc.deterministic\n", "def away_theta(home_team=home_team, \n", " away_team=away_team, \n", " home=home, \n", " atts=atts, \n", " defs=defs, \n", " intercept=intercept): \n", " return np.exp(intercept + \n", " atts[away_team] + \n", " defs[home_team]) \n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Let us run the model!\n", "* We specify the priors as Gamma distributions\n", "\n" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " [-----------------100%-----------------] 200000 of 200000 complete in 74.3 sec" ] } ], "source": [ "#likelihood of observed data\n", "home_points = pymc.Poisson('home_points', \n", " mu=home_theta, \n", " value=observed_home_goals, \n", " observed=True)\n", "away_points = pymc.Poisson('away_points', \n", " mu=away_theta, \n", " value=observed_away_goals, \n", " observed=True)\n", "\n", "#We need to approximate the Posterior by running a sampling algorithm \n", "mcmc = pymc.MCMC([home, intercept, tau_att, tau_def, \n", " home_theta, away_theta, \n", " atts_star, defs_star, atts, defs, \n", " home_points, away_points])\n", "map_ = pymc.MAP( mcmc )\n", "map_.fit()\n", "\n", "mcmc.sample(200000, 40000, 20)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#Diagnostics\n", "Let's see if/how the model converged. \n", "The home parameter looks good, and indicates that home field advantage amounts to goals per game at the intercept.\n", "We can see that it converges just like the model for the Premier League in the other tutorial.\n", "I wonder and this is left as a question if all field sports have models of this form that converge." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Plotting home\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "\n", " | avg_att | \n", "avg_def | \n", "points | \n", "team | \n", "position | \n", "QR | \n", "
---|---|---|---|---|---|---|
1 | \n", "0.096729 | \n", "0.150764 | \n", "6 | \n", "France | \n", "4 | \n", "NaN | \n", "
2 | \n", "0.179363 | \n", "-0.560665 | \n", "8 | \n", "Ireland | \n", "1 | \n", "winners | \n", "
3 | \n", "-0.549843 | \n", "0.289372 | \n", "2 | \n", "Scotland | \n", "5 | \n", "NaN | \n", "
4 | \n", "-0.251418 | \n", "0.515101 | \n", "0 | \n", "Italy | \n", "6 | \n", "wooden_spoon | \n", "
5 | \n", "0.399824 | \n", "-0.255811 | \n", "8 | \n", "England | \n", "2 | \n", "triple_crown | \n", "
\n", " | Rank | \n", "Team | \n", "Games | \n", "Wins | \n", "Draws | \n", "Losses | \n", "Points_For | \n", "Points_Against | \n", "Points | \n", "
---|---|---|---|---|---|---|---|---|---|
0 | \n", "1 | \n", "Ireland | \n", "5 | \n", "4 | \n", "0 | \n", "1 | \n", "119 | \n", "56 | \n", "8 | \n", "
1 | \n", "2 | \n", "England | \n", "5 | \n", "4 | \n", "0 | \n", "1 | \n", "157 | \n", "100 | \n", "8 | \n", "
2 | \n", "3 | \n", "Wales | \n", "5 | \n", "4 | \n", "0 | \n", "1 | \n", "146 | \n", "93 | \n", "8 | \n", "
3 | \n", "4 | \n", "France | \n", "5 | \n", "2 | \n", "0 | \n", "3 | \n", "103 | \n", "101 | \n", "4 | \n", "
4 | \n", "5 | \n", "Italy | \n", "5 | \n", "1 | \n", "0 | \n", "4 | \n", "62 | \n", "182 | \n", "2 | \n", "
5 | \n", "6 | \n", "Scotland | \n", "5 | \n", "0 | \n", "0 | \n", "5 | \n", "73 | \n", "128 | \n", "0 | \n", "