Probabilisticprogramminginquantitativefinancebythomaswieckileaddatascientistatquantopian...

86
Probabilistic Programming in Quantitative Finance Probabilistic Programming in Quantitative Finance Thomas Wiecki Thomas Wiecki @twiecki @twiecki bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/ 1 of 86 03/17/2015 08:47 PM

Transcript of Probabilisticprogramminginquantitativefinancebythomaswieckileaddatascientistatquantopian...

  • Probabilistic Programming in Quantitative FinanceProbabilistic Programming in Quantitative FinanceThomas WieckiThomas Wiecki

    @twiecki@twiecki

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    1 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    2 of 86 03/17/2015 08:47 PM

  • About meAbout meLead Data Scientist at : Building acrowd sourced hedge fund.PhD from Brown University -- research on computational neuroscience and machinelearning using Bayesian modeling.

    Quantopian Inc (https://www.quantopian.com)

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    3 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    4 of 86 03/17/2015 08:47 PM

  • The problem we're gonna solveThe problem we're gonna solveTwo real-money strategies:

    In [76]: plot_strats()

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    5 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    6 of 86 03/17/2015 08:47 PM

  • Types of risk

    Systematic and Unsystematic RiskVola

    tilityTail

    riskBet

    aDra

    wdown

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    7 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    8 of 86 03/17/2015 08:47 PM

  • Sharpe RatioSharpe RatioSharpe = mean returnsvolatility

    In [24]: print "Sharpe ratio strategy etrade =", data_0.mean() / data_0.std() * np.sqrt(252)print "Sharpe ratio strategy IB =", data_1.mean() / data_1.std() * np.sqrt(252)Sharpe ratio strategy etrade = 0.627893606355Sharpe ratio strategy IB = 1.43720181575

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    9 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    10 of 86 03/17/2015 08:47 PM

  • Types of risk

    Systematic and Unsystematic Risk

    Model misspecication

    Estimation Uncertainty

    Programming errors

    Data issuesMo

    del R

    isk

    Volatility

    Tail risk

    Beta

    Drawdo

    wn

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    11 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    12 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    13 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    14 of 86 03/17/2015 08:47 PM

  • Short primer on random variablesShort primer on random variablesRepresents our beliefs about an unknown state.Probability distribution assigns a probability to each possible state.Not a single number (e.g. most likely state).

    "When I bet on horses, I never lose. Why? I bet on all the horses." Tom Haverford

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    15 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    16 of 86 03/17/2015 08:47 PM

  • You already know what a variable is...You already know what a variable is...In [8]: coin = 0 # 0 for tails

    coin = 1 # 1 for heads

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    17 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    18 of 86 03/17/2015 08:47 PM

  • A random variable assigns all possible values a certainA random variable assigns all possible values a certainprobabilityprobabilityIn [ ]: coin = {0: 50%,

    1: 50%}

    Alternatively:Alternatively:coin ~ Bernoulli(p=0.5)

    coin is a random variableBernoulli is a probability distribution~ reads as "is distributed as"

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    19 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    20 of 86 03/17/2015 08:47 PM

  • This was discrete (binary), what about the continuousThis was discrete (binary), what about the continuouscase?case?returns ~ Normal( , ) 2

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    21 of 86 03/17/2015 08:47 PM

  • In [77]: from scipy import statssns.distplot(data_0, kde=False, fit=stats.norm)plt.xlabel('returns')

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    22 of 86 03/17/2015 08:47 PM

  • How to estimate How to estimate and and ??Naive: point estimateSet mu = mean(data) and sigma = std(data)Maximum Likelihood EstimateCorrect answer as

    n

    Bayesian analysisBayesian analysisMost of the time ...Uncertainty about and Turn and into random variablesHow to estimate?

    n

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    23 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    24 of 86 03/17/2015 08:47 PM

  • Bayes Formula!Bayes Formula!BayesPrior

    Data

    Posterior

    Use prior knowledge and data to update our beliefs.

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    25 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    26 of 86 03/17/2015 08:47 PM

  • In [78]: interactive(gen_plot, n=(0, 600), bayes=True)Out[78]:

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    27 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    28 of 86 03/17/2015 08:47 PM

  • Probabilistic ProgrammingProbabilistic ProgrammingModel unknown causes (e.g. ) of a phenomenon as random variables.Write a programmatic story of how unknown causes result in observable data.Use Bayes formula to invert generative model to infer unknown causes.

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    29 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    30 of 86 03/17/2015 08:47 PM

  • Approximating the posterior with MCMC samplingApproximating the posterior with MCMC samplingIn [81]: plot_want_get()

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    31 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    32 of 86 03/17/2015 08:47 PM

  • PyMC3PyMC3Probabilistic Programming framework written in Python.Allows for construction of probabilistic models using intuitive syntax.Features advanced MCMC samplers.Fast: Just-in-time compiled by Theano.Extensible: easily incorporates custom MCMC algorithms and unusual probabilitydistributions.Authors: John Salvatier, Chris Fonnesbeck, Thomas WieckiUpcoming beta release!

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    33 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    34 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    35 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    36 of 86 03/17/2015 08:47 PM

  • Model returns distribution: Specifying ourModel returns distribution: Specifying ourpriorspriors

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    37 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    38 of 86 03/17/2015 08:47 PM

  • In [82]: x = np.linspace(-.3, .3, 500)plt.plot(x, T.exp(pm.Normal.dist(mu=0, sd=.1).logp(x)).eval())plt.title(u'Prior: mu ~ Normal(0, $.1^2$)'); plt.xlabel('mu'); plt.ylabel('Probability Density'); plt.xlim((-.3, .3));

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    39 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    40 of 86 03/17/2015 08:47 PM

  • In [83]: x = np.linspace(-.1, .5, 500)plt.plot(x, T.exp(pm.HalfNormal.dist(sd=.1).logp(x)).eval())plt.title(u'Prior: sigma ~ HalfNormal($.1^2$)'); plt.xlabel('sigma'); plt.ylabel('Probability Density');

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    41 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    42 of 86 03/17/2015 08:47 PM

  • Bayesian Sharpe ratioBayesian Sharpe ratio Normal(0, ).12 Prior HalfNormal( ).12 Priorreturns Normal(, )2 Observed!Sharpe =

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    43 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    44 of 86 03/17/2015 08:47 PM

  • Graphical model of returnsGraphical model of returns

    Bayes

    PosteriorsPriors

    Data

    ~ ~

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    45 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    46 of 86 03/17/2015 08:47 PM

  • This is what the data looks likeThis is what the data looks likeIn [9]: print data_0.head()

    2013-12-31 21:00:00 0.0021432014-01-02 21:00:00 -0.0285322014-01-03 21:00:00 -0.0015772014-01-06 21:00:00 -0.0005312014-01-07 21:00:00 0.011310Name: 0, dtype: float64

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    47 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    48 of 86 03/17/2015 08:47 PM

  • In [14]: import pymc as pmwith pm.Model() as model: # Priors on Random Variables mean_return = pm.Normal('mean return', mu=0, sd=.1) volatility = pm.HalfNormal('volatility', sd=.1) # Model returns as Normal obs = pm.Normal('returns', mu=mean_return, sd=volatility, observed=data_0) sharpe = pm.Deterministic('sharpe ratio', mean_return / volatility * np.sqrt(252))

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    49 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    50 of 86 03/17/2015 08:47 PM

  • In [15]: with model: # Instantiate MCMC sampler step = pm.NUTS() # Draw 500 samples from the posterior trace = pm.sample(500, step) [-----------------100%-----------------] 500 of 500 complete in 0.4 sec

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    51 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    52 of 86 03/17/2015 08:47 PM

  • Analyzing the posteriorAnalyzing the posteriorIn [84]: sns.distplot(results_normal[0][0]['mean returns'], hist=False, label='etrade')

    sns.distplot(results_normal[1][0]['mean returns'], hist=False, label='IB')plt.title('Posterior of the mean'); plt.xlabel('mean returns')

    Out[84]:

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    53 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    54 of 86 03/17/2015 08:47 PM

  • In [85]: sns.distplot(results_normal[0][0]['volatility'], hist=False, label='etrade')sns.distplot(results_normal[1][0]['volatility'], hist=False, label='IB')plt.title('Posterior of the volatility')plt.xlabel('volatility')

    Out[85]:

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    55 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    56 of 86 03/17/2015 08:47 PM

  • In [86]: sns.distplot(results_normal[0][0]['sharpe'], hist=False, label='etrade')sns.distplot(results_normal[1][0]['sharpe'], hist=False, label='IB')plt.title('Bayesian Sharpe ratio'); plt.xlabel('Sharpe ratio');

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    57 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    58 of 86 03/17/2015 08:47 PM

  • In [28]: print 'P(Sharpe ratio IB > 0) = %.2f%%' % \ (np.mean(results_normal[1][0]['sharpe'] > 0) * 100)P(Sharpe ratio IB > 0) = 96.48%

    In [29]: print 'P(Sharpe ratio IB > Sharpe ratio etrade) = %.2f%%' % \ (np.mean(results_normal[1][0]['sharpe'] > results_normal[0][0]['sharpe']) * 100)P(Sharpe ratio IB > Sharpe ratio etrade) = 80.06%

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    59 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    60 of 86 03/17/2015 08:47 PM

  • Value at Risk with uncertaintyValue at Risk with uncertainty

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    61 of 86 03/17/2015 08:47 PM

  • In [88]: ppc_etrade = post_pred(var_cov_var_normal, results_normal[0][0], 1e6, .05, samples=800)ppc_ib = post_pred(var_cov_var_normal, results_normal[1][0], 1e6, .05, samples=800)

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    62 of 86 03/17/2015 08:47 PM

  • Interim summaryInterim summaryBayesian stats allows us to reformulate common risk metrics, use priors andquantify uncertainty.IB strategy seems better in almost every regard. Is it though?

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    63 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    64 of 86 03/17/2015 08:47 PM

  • So far, only added confidenceSo far, only added confidenceIn [89]: sns.distplot(results_normal[0][0]['sharpe'], hist=False, label='etrade')

    sns.distplot(results_normal[1][0]['sharpe'], hist=False, label='IB')plt.title('Bayesian Sharpe ratio'); plt.xlabel('Sharpe ratio');plt.axvline(data_0.mean() / data_0.std() * np.sqrt(252), color='b');plt.axvline(data_1.mean() / data_1.std() * np.sqrt(252), color='g');

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    65 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    66 of 86 03/17/2015 08:47 PM

  • Is this a good model?Is this a good model?In [93]: sns.distplot(data_1, label='data IB', kde=False, norm_hist=True, color='.5')

    for p in ppc_dist_normal: plt.plot(x, p, c='r', alpha=.1)plt.plot(x, p, c='r', alpha=.5, label='Normal model')plt.xlabel('Daily returns')plt.legend();

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    67 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    68 of 86 03/17/2015 08:47 PM

  • Can it be improved? Yes!Can it be improved? Yes!Identical model as before, but instead, use a heavy-tailed T distribution:returns T(,, )2

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    69 of 86 03/17/2015 08:47 PM

  • In [94]: sns.distplot(data_1, label='data IB', kde=False, norm_hist=True, color='.5')for p in ppc_dist_t: plt.plot(x, p, c='y', alpha=.1)

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    70 of 86 03/17/2015 08:47 PM

  • Lets compare posteriors of the normal and TLets compare posteriors of the normal and Tmodelmodel

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    71 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    72 of 86 03/17/2015 08:47 PM

  • Mean returnsMean returnsIn [96]: sns.distplot(results_normal[1][0]['mean returns'], hist=False, color='r', label='nor

    mal model')sns.distplot(results_t[1][0]['mean returns'], hist=False, color='y', label='T model')plt.xlabel('Posterior of the mean returns'); plt.ylabel('Probability Density');

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    73 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    74 of 86 03/17/2015 08:47 PM

  • Bayesian T-Sharpe ratioBayesian T-Sharpe ratioIn [97]: sns.distplot(results_normal[1][0]['sharpe'], hist=False, color='r', label='normal mo

    del')sns.distplot(results_t[1][0]['sharpe'], hist=False, color='y', label='T model')plt.xlabel('Bayesian Sharpe ratio'); plt.ylabel('Probability Density');

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    75 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    76 of 86 03/17/2015 08:47 PM

  • But why? T distribution is more robust!But why? T distribution is more robust!In [98]: sim_data = list(np.random.randn(75)*.01)

    sim_data.append(-.2)sns.distplot(sim_data, label='data', kde=False, norm_hist=True, color='.5'); sns.distplot(sim_data, label='Normal', fit=stats.norm, kde=False, hist=False, fit_kws={'color': 'r', 'label': 'Normal'}); sns.distplot(sim_data, fit=stats.t, kde=False, hist=False, fit_kws={'color': 'y', 'label': 'T'})plt.xlabel('Daily returns'); plt.legend();

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    77 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    78 of 86 03/17/2015 08:47 PM

  • Estimating tail risk using VaREstimating tail risk using VaRIn [99]: ppc_normal = post_pred(var_cov_var_normal, trace_normal, 1e6, .05, samples=800)

    ppc_t = post_pred(var_cov_var_t, trace_t, 1e6, .05, samples=800)sns.distplot(ppc_normal, label='Normal', norm_hist=True, hist=False, color='r')sns.distplot(ppc_t, label='T', norm_hist=True, hist=False, color='y')plt.legend(loc=0); plt.xlabel('5% daily Value at Risk (VaR) with \$1MM capital (in \$)'); plt.ylabel('Probability density'); plt.xticks(rotation=15);

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    79 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    80 of 86 03/17/2015 08:47 PM

  • Comparing the Bayesian T-Sharpe ratiosComparing the Bayesian T-Sharpe ratiosIn [101]: sns.distplot(results_t[0][0]['sharpe'], hist=False, label='etrade')

    sns.distplot(results_t[1][0]['sharpe'], hist=False, label='IB')plt.xlabel('Bayesian Sharpe ratio'); plt.ylabel('Probability Density');

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    81 of 86 03/17/2015 08:47 PM

  • In [42]: print 'P(Sharpe ratio IB > Sharpe ratio etrade) = %.2f%%' % \ (np.mean(results_t[1][0]['sharpe'] > results_t[0][0]['sharpe']) * 100)

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    82 of 86 03/17/2015 08:47 PM

  • ConclusionsConclusionsBayesian statistics allows us to quantify uncertainty -- measure orthogonal sourcesof risk.Rich statistical framework to compare different models against each other.Blackbox inference algorithms allow estimation of complex models.PyMC3 puts advanced samplers at your fingertips.

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    83 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    84 of 86 03/17/2015 08:47 PM

  • Further readingFurther reading -- Develop trading algorithms like this in

    your browser.

    -- IPythonNotebook book on Bayesian stats using PyMC2.

    -- Great book by Kruschke.

    Twitter:

    Quantopian (https://www.quantopian.com)

    My blog for Bayesian linear regression (financial alpha and beta)(https://twiecki.github.io)Probilistic Programming for Hackers (http://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/)

    Doing Bayesian Data Analysis (http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/)PyMC3 repository (https://github.com/pymc-devs/pymc3)

    @twiecki (https://twitter.com/twiecki)

    bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    85 of 86 03/17/2015 08:47 PM

  • bayesian_risk_perf_v3 slides http://twiecki.github.io/bayesian_risk_perf_v3.slides.html?print-pdf#/

    86 of 86 03/17/2015 08:47 PM