probabilistic programming in quantitative finance by thomas wiecki, lead data scientist at...
TRANSCRIPT
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
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 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
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 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
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 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
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 ← 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
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 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
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]: <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
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]: <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
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