probabilistic programming in quantitative finance by thomas wiecki, lead data scientist at...

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

Upload: quantopian

Post on 15-Jul-2015

854 views

Category:

Economy & Finance


1 download

TRANSCRIPT

Page 1: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

Probabilistic Programming in Quantitative FinanceProbabilistic Programming in Quantitative Finance

Thomas 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

Page 2: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 3: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 4: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 5: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 6: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 7: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

Types of risk

Systematic and Unsystematic Risk

Volat

ility

Tail r

isk

Beta

Drawdo

wn

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

Page 8: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 9: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 10: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 11: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

Types of risk

Systematic and Unsystematic Risk

Model misspecification

Estimation Uncertainty

Programming errors

Data issuesM

od

el R

isk

Volat

ility

Tail r

isk

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

Page 12: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 13: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 14: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 15: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 16: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 17: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 18: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 19: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

A random variable assigns all possible values a certainA random variable assigns all possible values a certainprobabilityprobability

In [ ]: 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

Page 20: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 21: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 22: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 23: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 24: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 25: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 26: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 27: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 28: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 29: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 30: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 31: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 32: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 33: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 34: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 35: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 36: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 37: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 38: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 39: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 40: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 41: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 42: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 43: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

Bayesian Sharpe ratioBayesian Sharpe ratioμ ∼ Normal(0, ).12 ← Prior

σ ∼ HalfNormal( ).12 ← Prior

returns ∼ 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

Page 44: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 45: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 46: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 47: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 48: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 49: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

In [14]: import pymc as pm

with 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

Page 50: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 51: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 52: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 53: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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]: <matplotlib.text.Text at 0x7fde80cb5850>

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

Page 54: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 55: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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]: <matplotlib.text.Text at 0x7fde80e58310>

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

Page 56: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 57: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 58: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 59: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 60: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 61: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 62: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 63: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 64: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 65: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 66: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 67: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 68: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 69: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 70: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 71: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 72: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 73: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 74: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 75: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 76: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 77: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 78: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 79: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 80: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 81: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 82: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 83: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 84: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 85: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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

Page 86: Probabilistic Programming in Quantitative Finance by Thomas Wiecki, Lead Data Scientist at Quantopian

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