ml-finance-python
python scripts for finance machine learning
git clone https://9o.is/git/ml-finance-python.git
notebook.ipynb
(118732B)
1 {
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {},
6 "source": [
7 "# Measuring Monotonic Relationships\n",
8 "By Evgenia \"Jenny\" Nitishinskaya and Delaney Granizo-Mackenzie with example algorithms by David Edwards\n",
9 "\n",
10 "Reference: DeFusco, Richard A. \"Tests Concerning Correlation: The Spearman Rank Correlation Coefficient.\" Quantitative Investment Analysis. Hoboken, NJ: Wiley, 2007\n",
11 "\n",
12 "\n",
13 "Part of the Quantopian Lecture Series:\n",
14 "\n",
15 "* [www.quantopian.com/lectures](https://www.quantopian.com/lectures)\n",
16 "* [github.com/quantopian/research_public](https://github.com/quantopian/research_public)\n",
17 "\n",
18 "\n",
19 "---\n",
20 "\n",
21 "The Spearman Rank Correlation Coefficient allows us to determine whether or not two data series move together; that is, when one increases (decreases) the other also increases (decreases). This is more general than a linear relationship; for instance, $y = e^x$ is a monotonic function, but not a linear one. Therefore, in computing it we compare not the raw data but the ranks of the data.\n",
22 "\n",
23 "This is useful when your data sets may be in different units, and therefore not linearly related (for example, the price of a square plot of land and its side length, since the price is more likely to be linear in the area). It's also suitable for data sets which not satisfy the assumptions that other tests require, such as the observations being normally distributed as would be necessary for a t-test."
24 ]
25 },
26 {
27 "cell_type": "code",
28 "execution_count": 1,
29 "metadata": {
30 "collapsed": true
31 },
32 "outputs": [],
33 "source": [
34 "import numpy as np\n",
35 "import scipy.stats as stats\n",
36 "import matplotlib.pyplot as plt\n",
37 "import math"
38 ]
39 },
40 {
41 "cell_type": "code",
42 "execution_count": 2,
43 "metadata": {
44 "collapsed": false
45 },
46 "outputs": [
47 {
48 "name": "stdout",
49 "output_type": "stream",
50 "text": [
51 "Raw data: [10, 9, 5, 7, 5]\n",
52 "Ranking: [5.0, 4.0, 1.5, 3.0, 1.5]\n"
53 ]
54 }
55 ],
56 "source": [
57 "# Example of ranking data\n",
58 "l = [10, 9, 5, 7, 5]\n",
59 "print 'Raw data: ', l\n",
60 "print 'Ranking: ', list(stats.rankdata(l, method='average'))"
61 ]
62 },
63 {
64 "cell_type": "markdown",
65 "metadata": {},
66 "source": [
67 "## Spearman Rank Correlation\n",
68 "\n",
69 "### Intuition\n",
70 "\n",
71 "The intution is now that instead of looking at the relationship between the two variables, we look at the relationship between the ranks. This is robust to outliers and the scale of the data.\n",
72 "\n",
73 "### Definition\n",
74 "\n",
75 "The argument `method='average'` indicates that when we have a tie, we average the ranks that the numbers would occupy. For example, the two 5's above, which would take up ranks 1 and 2, each get assigned a rank of $1.5$.\n",
76 "\n",
77 "To compute the Spearman rank correlation for two data sets $X$ and $Y$, each of size $n$, we use the formula\n",
78 "$$r_S = 1 - \\frac{6 \\sum_{i=1}^n d_i^2}{n(n^2 - 1)}$$\n",
79 "\n",
80 "where $d_i$ is the difference between the ranks of the $i$th pair of observations, $X_i - Y_i$.\n",
81 "\n",
82 "The result will always be between $-1$ and $1$. A positive value indicates a positive relationship between the variables, while a negative value indicates an inverse relationship. A value of 0 implies the absense of any monotonic relationship. This does not mean that there is no relationship; for instance, if $Y$ is equal to $X$ with a delay of 2, they are related simply and precisely, but their $r_S$ can be close to zero:"
83 ]
84 },
85 {
86 "cell_type": "markdown",
87 "metadata": {},
88 "source": [
89 "##Experiment\n",
90 "\n",
91 "Let's see what happens if we draw $X$ from a poisson distribution (non-normal), and then set $Y = e^X + \\epsilon$ where $\\epsilon$ is drawn from another poisson distribution. We'll take the spearman rank and the correlation coefficient on this data and then run the entire experiment many times. Because $e^X$ produces many values that are far away from the rest, we can this of this as modeling 'outliers' in our data. Spearman rank compresses the outliers and does better at measuring correlation. Normal correlation is confused by the outliers and on average will measure less of a relationship than is actually there."
92 ]
93 },
94 {
95 "cell_type": "code",
96 "execution_count": 3,
97 "metadata": {
98 "collapsed": false
99 },
100 "outputs": [
101 {
102 "name": "stdout",
103 "output_type": "stream",
104 "text": [
105 "Spearman Rank Coefficient: 0.877239879988\n",
106 "Correlation coefficient: 0.773013362941\n"
107 ]
108 }
109 ],
110 "source": [
111 "## Let's see an example of this\n",
112 "n = 100\n",
113 "\n",
114 "def compare_correlation_and_spearman_rank(n, noise):\n",
115 " X = np.random.poisson(size=n)\n",
116 " Y = np.exp(X) + noise * np.random.normal(size=n)\n",
117 "\n",
118 " Xrank = stats.rankdata(X, method='average')\n",
119 " # n-2 is the second to last element\n",
120 " Yrank = stats.rankdata(Y, method='average')\n",
121 "\n",
122 " diffs = Xrank - Yrank # order doesn't matter since we'll be squaring these values\n",
123 " r_s = 1 - 6*sum(diffs*diffs)/(n*(n**2 - 1))\n",
124 " c_c = np.corrcoef(X, Y)[0,1]\n",
125 " \n",
126 " return r_s, c_c\n",
127 "\n",
128 "experiments = 1000\n",
129 "spearman_dist = np.ndarray(experiments)\n",
130 "correlation_dist = np.ndarray(experiments)\n",
131 "for i in range(experiments):\n",
132 " r_s, c_c = compare_correlation_and_spearman_rank(n, 1.0)\n",
133 " spearman_dist[i] = r_s\n",
134 " correlation_dist[i] = c_c\n",
135 " \n",
136 "print 'Spearman Rank Coefficient: ' + str(np.mean(spearman_dist))\n",
137 "# Compare to the regular correlation coefficient\n",
138 "print 'Correlation coefficient: ' + str(np.mean(correlation_dist))"
139 ]
140 },
141 {
142 "cell_type": "markdown",
143 "metadata": {},
144 "source": [
145 "Let's take a look at the distribution of measured correlation coefficients and compare the spearman with the regular metric."
146 ]
147 },
148 {
149 "cell_type": "code",
150 "execution_count": 4,
151 "metadata": {
152 "collapsed": false
153 },
154 "outputs": [
155 {
156 "data": {
157 "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0cAAAHxCAYAAACmtsfCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt4lPWd///XZCbHOTBhkiCiuMUj6rJQKCLaUilKVaBE\n1lZWK4ItrXvVAx7R2kuLVatdK1q7rNlti3qxtXJIwAJlxbS6WwQlK1q7WIuVH2LMgRnuzCmTw8z8\n/uBLJMwkkwm5ZybJ83FdXjr3Zz73/Z75zMS8ct+fz22Jx+NxAQAAAMAwl5ftAgAAAAAgFxCOAAAA\nAECEIwAAAACQRDgCAAAAAEmEIwAAAACQRDgCAAAAAEmSzcydP/vss9q0aZPy8vJ01lln6dFHH1U4\nHNayZctUX1+vMWPGaOXKlXK5XGaWAQAAAAApmXbm6ODBg3rppZdUXV2tl19+WdFoVJs3b1ZVVZWm\nT5+ubdu2adq0aaqqqjKrBAAAAADoM9PCkcPhkM1mU2trqzo7OxWJRFRRUaHa2lpVVlZKkiorK7V9\n+3azSgAAAACAPjPtsjq3260lS5boy1/+soqKinTxxRfroosuktfrVVlZmSSprKxMXq/XrBIAAAAA\noM9MC0cHDhzQc889p9raWjmdTt16663auHFjt+dYLBZZLJaU+6qrqzOrTAAAAABDxOTJk0+ov2nh\n6L333tOkSZNUWloqSbr00ku1Z88elZWVqbm5WeXl5WpqatLIkSP7tL8TfaE4MXV1dYxBDmAccgPj\nkH2MQW5gHHID45B9jEFuGIgTKqbNORo3bpzeeecdRSIRxeNxvfHGGzrjjDN0ySWXqLq6WpJUU1Oj\nWbNmmVUCAAAAAPSZaWeOzjnnHH3ta1/TggULlJeXp3PPPVdf//rXFQqFdNttt2n9+vVdS3kDAAAA\nQLaZep+jb3/72/r2t7/dbZvb7dbq1avNPCwAAACGkFgspvb29myX0atIJJLtEoaVgoIC5eUN/EVw\npl1WBwAAAAyE9vZ2tbW1ZbuMHp133nnZLmFYaWtrMy0sm3rmCAAAABgIhYWFKioqynYZGOI4cwQA\nAAAAIhwBAAAAgCQuqwMAAMAgE41GZRjGgO7T7XbLarUO6D4x+BCOAAAAMKgYhqHnNu2W3eEakP2F\ngn4tmjdFHo+n1+etWrVKmzdvVl5envLy8rRixQpNmDBhQGrIpvHjx+vss89WNBrVaaedpscee0x2\nu71f+5o0aZLefvvtAa4wcwhHAAAAGHTsDpecrtKMHe/tt9/Wa6+9purqauXn58swDFOXF+/s7JTN\nlplf1YuKilRTUyNJWr58uX7zm99oyZIlGTl2riEcAQAAACkcOnRIbrdb+fn5ko5chnfUzJkzdfnl\nl+v1119XUVGRnnjiCY0dO1Y+n08PPvig6uvrJUn33XefPv/5z+vdd9/VI488ora2NhUWFurRRx/V\n5z73OW3YsEH/9V//pdbWVsViMV111VV65ZVXFIlEtH//fi1ZskRtbW367W9/q4KCAlVVVWnEiBF6\n6aWX9NJLL6mjo0OnnXaaHn/8cRUVFWn58uVyOBx67733dOjQId11112aPXt2r69z4sSJev/99yWp\n1zpra2sViUT08ccfa9asWbrrrru67cfn8+mf//mfddNNN2nGjBkDORSmYkEGAAAAIIWLLrpIDQ0N\nmj17tn74wx/qrbfe6tbucrn08ssv69prr9UjjzwiSXr44Ye1aNEirVu3Tk8//bTuv/9+SdK4ceO0\nZs0aVVdX65ZbbtGTTz7ZtZ+9e/fqZz/7mV544QXF43Ht27dPzzzzjNatW6cnn3xSDodD1dXVmjhx\nYtfZnssuu0zr1q3Txo0bNW7cOK1bt65rf4cOHdKLL76oZ599Vk888USvrzEajeqPf/yjzjzzzJR1\nvv/++1q5cqVefvllbd26VY2NjV1tXq9X3/3ud3XrrbcOqmAkceYIAAAASKmkpEQbNmzQ7t27tWvX\nLi1btkx33HGHKisrJUlXXnll178fffRRSdKOHTv04Ycfdu0jFAqptbVVgUBA99xzjw4cOCDpSCg5\navr06XK5jsylslgsuuCCC1RSUqKSkhK5XC5dcsklkqSzzjpLf/nLXyRJH3zwgVauXKlAIKBwOKwv\nfvGLXf1nzZolSTr99NN16NChpK+tra1N8+fPV2Njo8aMGaOFCxdKUq91XnjhhXI4HF37/uSTTzRq\n1Ch1dHTohhtu0AMPPKApU6b0783OIsIRAAAA0Ad5eXmaOnWqpk6dqrPOOkvV1dVd4ehYFotFkhSP\nx/XSSy+poKCgW/sPf/hDXXjhhfr5z3+uTz75RN/85je72kpKSro999i+Foul67HFYukKK8uXL9eq\nVat09tlnq7q6Wm+++WZXn6OXAR6tJ5nCwkLV1NQoEonoxhtv1KuvvqpLL71UTz31VI91HluX1Wrt\nqiU/P1/nn3++/vu//3tQhiMuqwMAAMCgEwr6FfAfHpB/QkF/yuN99NFH2r9/f9fj//u//9Mpp5zS\n9XjLli1d/540aZKkI5fivfDCC13POTqXJxgMqqKiQpK0YcOGHo/ZU5g5XjgcVnl5uTo6OrRp06Y+\n9UmmqKhI999/v5588knF4/E+13m8Rx55RH/729/07//+7/2uJVs4cwQAAIBBxe12a9G8gT0rcewC\nC8mEw2E99NBDCgQCslqt+ru/+zutWLGiq93v92vevHkqLCzUT3/6U0nS/fffrxUrVmjevHmKRqP6\nwhe+oAcffFDf+ta3dM8992jVqlWaMWNG15kmi8XS9d89PU7Wduutt+rqq6/WyJEj9Q//8A8KhUI9\n9knm2O3jx4/X2LFjtXXr1j7Xefy+LBaLnnjiCd10001yOBxdl+kNBpZ4XyNpFtXV1Wny5MnZLmNY\nYwxyA+OQGxiH7GMMcgPjkBuGwzhEIhFJR85s5KKZM2dqw4YNKQMWBkZPn4eB+C5wWR0AAABwAno6\ni4LBh8vqAAAAgBPw6quvZrsEDBDOHAEAAACACEcAAAAAIIlwBAAAAACSmHMEAACAQSYajcowjAHd\np9vtltVqHdB9YvAhHAEAAGBQMQxDa3atl93lGJD9hfxBXXvBAnk8nl6fN378eJ199tmKRqM67bTT\n9Nhjj8lutw9IDUd985vf1D333KPzzz+/3/uoqanRL37xC0mSzWbT3LlztWTJkoEqscvy5ct1ySWX\naPbs2T0+p7q6WhdddFHXzWTvv/9+LV68WKeffvqA1zMQCEcAAAAYdOwuh5xuV0aPWVRUpJqaGklH\ngsFvfvMbU0JHOkuDx2Ix5eV9NlPmtdde0/PPP69f/vKXKi8vV3t7uzZu3Njn/UWj0W5n0I5/fHyd\nqWrdsGGDzjzzzK5w9KMf/ajPtWQD4QgAAPTZsZczGYYhr9fb575ctoShZOLEiXr//fclSQcOHNCK\nFSvk8/lUXFyshx56SOPGjdOBAwd05513qrW1VTNnztTzzz+vt99+W7t27dKvfvUr/du//ZskacWK\nFfr7v/97VVZWdjvGgw8+qD/96U9qa2vT7NmzdfPNN0s6ctPZK664Qjt27NC3vvUtXXHFFV19qqqq\ndM8996i8vFySVFBQoKuvvlqStHfvXj3wwAOKRCIaO3asHnnkEblcLn3zm9/U+PHjVVdXpzlz5qi2\ntrbr8dy5czVlyhQ99thjCoVCKi0t1Y9//OOu/R/1zDPP6A9/+IPa2to0adIkrVixQr/73e/03nvv\n6c4771RxcbFefPFFfetb3+o6M/bb3/5Wzz77rCRpxowZuvPOOyVJkyZN0vXXX68//OEPKioq0r/+\n67+mPKs3UAhHAACgz469nKnxcIP2723sU7++XrYEDAbRaFR//OMfNW3aNEnSD37wA61YsUKnnXaa\n3nnnHf3whz/Uc889p4cfflg33HCDrrjiCr344os97q+nMzDLli3TiBEjFI1GdcMNN+iDDz7QWWed\nJUkqLS3Vhg0bEvrs27dP5513XtLj3H333XrggQc0ZcoUPf3003rmmWd03333SZI6Ozu1fv16SVJt\nbW3X487OTl133XVatWqVSktLtWXLFj355JN65JFHJEnxeFzSkcsBv/e973Ud5/e//72++tWvas2a\nNVq+fHm3miwWixobG/XEE09ow4YNcrlcWrJkibZv365Zs2aptbVVkyZN0rJly/STn/xEL730km66\n6abeB2WAEI4AAEBajl7OFAwHM35ZE5BNbW1tmj9/vhobGzVmzBgtXLhQoVBIe/bs0a233tr1vI6O\nDknSnj17tGrVKknSnDlz9Nhjj6V1vC1btmjt2rXq7OxUc3Oz9u3b1xWOjj1b1BeBQEDBYFBTpkyR\nJFVWVnar+fj9HX38t7/9TX/961+1ePFiSUeC4dFL5KTPLgHcuXOnfvGLX6i1tVUtLS0688wzdckl\nl0j6LEAdFY/H9ac//UlTp05VaWmpJGnu3LnavXu3Zs2apfz8fH35y1+WJJ133nnasWNHWq/1RBCO\nAAAAgD4oLCxUTU2NIpGIbrzxRr366qu68MIL5XQ6u+Yi9YXValUsFut6HIlEEp7z8ccf61e/+pXW\nr18vp9Ope++9V+3t7V3txcXFSfd9xhln6L333us6q9WT4wPL8fs7+jgej+vMM8/s9cxXW1ubVqxY\noQ0bNmjUqFF65pln1NbW1tWe7KzY8dvi8XjXNpvts4iSl5enaDTa62sZSNznCAAAAINOyB9UwPAP\nyD8hfzCtYxcVFen+++/Xk08+KbvdrlNOOUW/+93vJB35Jf/oXKSJEyd2bd+8eXNX/zFjxmjfvn1q\nb2+X3+/Xzp07E19fKKTi4mI5HA4dOnRIr7/+ep9qW7p0qR5//HEdOnRIktTe3q61a9fK6XTK5XJp\n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\n7K2//5dI5zgRkRuB7jkSERERERFBxZGIiIiIiAhwg1xWJyIicr0xGAL+ALYMe4fGCn6/H9ML4/n9\nfhlmLkUAABBRSURBVAKBALZI65iBQAC/z9cr44ncKKLRaKc/lOr1NGOzZ9Di7HiZa9u26OACrLb+\n+yOy0WgEt9t91e15eXnY+vj8VByJiIj0Q6FgkE8vuHHlhjttrODIzCazYz+GpMb711kfgSYPNkcG\nX/iteLxXcPvre2U8kRtF0OfnP6HjDLAPave8196ExWrD7b/QIcZrbyLov8Jg7zAG5Ob31VRTzuf1\n8Ma79QwaMrTDNq+nmaUlExg0aFAnkb1HxZGIiEg/1VVjhV4Zz5FJxBHB7rDiyHSSEQrjyHT22ngi\nN4qsnGyyc13tnotawlisNrJzXB32b9t2Pch2DbimCry03XN09OhRZs2axYwZM3j55ZfTNQ0RERER\nEREgTcVRJBLhqaee4ve//z2HDh3i0KFDVFZWpmMqIiIiIiIiQJqKo4qKCoYPH86tt95KRkYGc+bM\n4b333kvHVERERERERIA03XN06dIlbrrpptjjgoICKioquo0LuH1Yo4nVc97mFvwtfloamxOep6/F\niy3DTpYzsdjrMc7b7KEl+//3u5bnmoq4dIwZT9xX85COeaZjzGvtHDvLQ7rmeq39bfoqrqscJDOe\np9mDt6GeUCATiwm32xaJRnBbXYQDV7+/xv2FG1tG4vcBXC3O7w/Q5G7EkeHosM3na8Hb1AxEO92G\nxUbYH0hpHBYbwRYfNkfrxwevz0s0EEg4ri/mmu6/TV/O1erIIBoIJBzXn84x3XHdxXoaGwl7g306\n1yu+IB5Hxy53Pm8LNpuDFmdDyrb11nG72ub1JP7+lAoWY0yfd988fPgwf/nLX3j66acBOHjwIBUV\nFWzcuLHT/U+cONGX0xMRERERkX7om9/8ZlLxafnmqKCggIsXL8Ye19bWUlBQcNX9kz1JERERERGR\n7qTlnqPx48dTVVVFTU0NwWCQd955h+nTp6djKiIiIiIiIkCavjmy2+1s3LiR5cuXE41GWbRoEUVF\nRemYioiIiIiICJCme45ERERERESuNWn7EVgREREREZFriYojERERERERVByJiIiIiIgAaWrI0Obo\n0aNs3rw51pRh5cqV7bYfP36cn/70pxQWFgLw4IMPsnr1agCmTZtGTk4ONpsNu93Om2++2efzv150\n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\n",
158 "text/plain": [
159 "<matplotlib.figure.Figure at 0x7fac95a95fd0>"
160 ]
161 },
162 "metadata": {},
163 "output_type": "display_data"
164 }
165 ],
166 "source": [
167 "plt.hist(spearman_dist, bins=50, alpha=0.5)\n",
168 "plt.hist(correlation_dist, bins=50, alpha=0.5)\n",
169 "plt.legend(['Spearman Rank', 'Regular Correlation'])\n",
170 "plt.xlabel('Correlation Coefficient')\n",
171 "plt.ylabel('Frequency');"
172 ]
173 },
174 {
175 "cell_type": "markdown",
176 "metadata": {},
177 "source": [
178 "Now let's see how the Spearman rank and Regular coefficients cope when we add more noise to the situation."
179 ]
180 },
181 {
182 "cell_type": "code",
183 "execution_count": 5,
184 "metadata": {
185 "collapsed": false
186 },
187 "outputs": [
188 {
189 "data": {
190 "text/plain": [
191 "<matplotlib.text.Text at 0x7fac94f1f690>"
192 ]
193 },
194 "execution_count": 5,
195 "metadata": {},
196 "output_type": "execute_result"
197 },
198 {
199 "data": {
200 "image/png": "iVBORw0KGgoAAAANSUhEUgAAA00AAAHxCAYAAACxlFcLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtY1HXe//HXcBwVlcxArzyUKKm5pUG129pvNk2jEE9Z\nt1nWmGWwt+1um6a5mqap1Vq6nSBb11m5KzJFFDXKqMUs7cDmkpW76wm1BCMzFRlQ4PfHxCgJMwhz\n+MI8H9c1V/M98h4/UvPqc/iaqqurqwUAAAAAqFOQvwsAAAAAACMjNAEAAACAC4QmAAAAAHCB0AQA\nAAAALhCaAAAAAMAFQhMAAAAAuBDizZs/+uijysvL04UXXqjs7Ow6z3niiSe0efNmmc1mPfnkk+rb\nt68kadCgQWrTpo2Cg4MVEhKiVatWebNUAAAAAKiTV0PTrbfeqvHjx2vatGl1Hs/Ly1NhYaHeeecd\n/etf/9KcOXO0cuVK5/H09HRFRkZ6s0QAAAAAcMmrw/Pi4+PVrl27eo/n5uZq1KhRkqQrr7xSx44d\nU0lJifM4z90FAAAA4G9+ndN0+PBhderUybndqVMnFRcXS5JMJpMmTJig0aNH1+p9AgAAAABf8urw\nvIaorzfptddeU3R0tI4cOaIJEyaoR48eio+Pr/c++fn53ioRAAAAQAsRFxd33tf4NTRFRUWpqKjI\nuV1UVKTo6GhJcv6zQ4cOGjJkiAoKClyGJqlxfwDwrPz8fNrBAGgH/6MNjIF28D/awBhoB2OgHfyv\nsR0tfh2eN3jwYGVlZUmStm/frnbt2qljx44qKyvTiRMnJEknT57Uli1bFBsb689SAQAAAAQor/Y0\n/fGPf9Qnn3yio0ePymKx6MEHH9Tp06clSWPHjpXFYlFeXp6GDBmiVq1aaeHChZKkkpISTZ48WZJU\nWVmppKQkDRw40JulAgAAAECdvBqann32WbfnPPbYY+fs69q1q9auXeuNkgAAANBCVVVVqaKiwt9l\nuGS32/1dQsAICwtTUJBnBtb5dXgeAAAA4CkVFRUqLy/3dxn1uvzyy/1dQsAoLy/3aID2++p5AAAA\ngKeEh4fLbDb7uwy0MPQ0AQAAAIALhCYAAAAAcIHQBAAAAAAuMKcJAAAA8KDU1FRt2LBBQUFBCgoK\n0ty5c3XFFVf4u6wm69Onjy677DJVVlaqe/fueuqpp9SmTZtG3WvAgAH6/PPPPVyh9xCaAAAAAA/5\n/PPPlZeXpzVr1ig0NFRHjx716jLop0+fVkiIb77Sm81mZWVlSZKmT5+uN954Q/fee69Pfra/EZoA\nAAAQuDZskNatk9q1k2bPliIimnS7kpISRUZGKjQ0VJIUGRnpPDZo0CDdfPPN2rx5s8xms5555hl1\n69ZNR44c0Zw5c/Ttt99KkmbMmKGrrrpKBQUFWrBggcrLyxUeHq6FCxfq0ksvVWZmpt555x2VlZWp\nqqpKo0eP1qZNm2S327Vv3z7de++9Ki8v1/r16xUWFqalS5eqffv2WrlypVauXKlTp06pe/fuevrp\np2U2mzV9+nRFRERox44dKikp0dSpU3XTTTe5/Jz9+/fXzp07Jcllne+9957sdrsOHDigG2+8UVOn\nTq11nyNHjui3v/2tUlJSZLFYmvRn703MaQIAAEBg2rBBGj9eWrpUWrRIGjFCqqxs0i1//etfq6io\nSDfddJMef/xxffrpp7WOt2vXTtnZ2brzzju1YMECSdL8+fN1zz33aNWqVXruuec0c+ZMSVKPHj30\n6quvas2aNfrd736nxYsXO+/z9ddf6/nnn1d6erqqq6u1a9cuvfDCC1q1apUWL16siIgIrVmzRv37\n93f2Dg0dOlSrVq3S2rVr1aNHD61atcp5v5KSEmVkZOjll1/WM8884/IzVlZW6sMPP1SvXr3c1rlz\n504tWbJE2dnZeuutt1RcXOw89v333ys5OVm///3vDR2YJHqaAAAAEKjWrZN++OHM9pYt0sGDUvfu\njb5l69atlZmZqc8++0wff/yxHnroIT388MMaNWqUJCkxMdH5z4ULF0qSPvroI+3evdt5j9LSUpWV\nlen48eOaNm2a9u/fL8kRVmpcd911ateunSTJZDLp2muvVevWrdW6dWu1a9dON9xwgyQpNjZW//73\nvyVJ//nPf7RkyRIdP35cJ0+e1PXXX++8/sYbb5QkxcTEqKSkpM7PVl5erpEjR6q4uFgXX3yx7rjj\nDklyWeevfvUrRfzUexcTE6NvvvlG0dHROnXqlKxWq2bPnq34+PjG/WH7EKEJAAAAgemn0OEUGSm1\nb9/k2wYFBemaa67RNddco9jYWK1Zs8YZms5mMpkkSdXV1Vq5cqXCwsJqHX/88cf1q1/9Si+++KK+\n+eYbjR8/3nmsdevWtc49+1qTyeTcNplMzhAzffp0paam6rLLLtOaNWv0ySefOK+pGU5YU09dwsPD\nlZWVJbvdrokTJyo3N1dDhgzRX/7yl3rrPLuu4OBgZy2hoaHq16+fPvjgg2YRmhieBwAAgMD02GPS\noEFSWJgUFSX96U+O4NQEe/fu1b59+5zbX331lbp06eLc3rhxo/OfAwYMkOQY0peenu48p2au0IkT\nJxQVFSVJyszMrPdn1hdyfu7kyZO66KKLdOrUKa1bt65hH6gOZrNZM2fO1OLFi1VdXd3gOn9uwYIF\n2rNnj1555ZVG1+Ir9DQBAAAgMLVtK73zjmNIXvv2TQ5MkiOYzJs3T8ePH1dwcLAuueQSzZ0713n8\n2LFjGj58uMLDw/Xss89KkmbOnKm5c+dq+PDhqqys1NVXX605c+bovvvu07Rp05SamiqLxeLsmTKZ\nTM739W3Xdez3v/+9brvtNnXo0EFXXnmlSktL672mLmfv79Onj7p166a33nqrwXX+/F4mk0nPPPOM\nUlJSFBER4RzuZ0Sm6oZGU4PLz89XXFycv8sIeLSDMdAO/kcbGAPt4H+0gTEESjvY7XZJjp4QIxo0\naJAyMzNrragH76jv70JjfxcYngcAAAD4QH29LjA+hucBAAAAPpCbm+vvEtBI9DQBAAAAgAuEJgAA\nAABwgdAEAAAAAC4QmgAAAADABUITAAAA4EF9+vTRyJEjlZSUpMmTJ9d6HpKnjB8/Xjt27GjSPbKy\nspSUlKSkpCSNGjVKf/vb3zxUXW3Tp0/X22+/7fKcNWvW6PDhw87tmTNnavfu3V6ppzEITQAAAIAH\nmc1mZWVlKTs7WxEREXrjjTe88nPOZwnzqqqqWtt5eXlasWKF/va3vyk7O1tvvPGG2rZt2+D7VVZW\nutz+eZ3uas3MzKwVmp544gnFxMQ0uB5vY8lxAAAABKwNGz7TunXfql27U5o9+yZFRER49P79+/fX\nzp07JUn79+/X3LlzdeTIEbVq1Urz5s1Tjx49tH//fk2ZMkVlZWUaNGiQVqxYoc8//1wff/yxli9f\nrrS0NEnS3Llz9Ytf/EKjRo2q9TPmzJmjL774QuXl5brpppv04IMPSnI8TPeWW27RRx99pPvuu0+3\n3HKL85qlS5dq2rRpuuiiiyRJYWFhuu222yRJX3/9tWbPni273a5u3bppwYIFateuncaPH68+ffoo\nPz9fw4YN03vvvefcTkpKUnx8vJ566imVlpbqggsu0JNPPum8f40XXnhB//jHP1ReXq4BAwZo7ty5\nysnJ0Y4dOzRlyhS1atVKGRkZuu+++zRt2jT169dP69ev18svvyxJslgsmjJliiRpwIABuvvuu/WP\nf/xDZrNZL730ki688EKPtl8NepoAAAAQkDZs+Ezjxwdp6dLhWrRopEaMeNNlj8n5qqys1Icffqhe\nvXpJkmbNmqVZs2YpMzNTjzzyiB5//HFJ0vz582W1WpWdna3OnTvXe7/6emweeughrV69WmvXrtUn\nn3yi//znP85jF1xwgTIzM2sFJknatWuXLr/88jp/ziOPPKJHHnlE69atU2xsrF544QXnsdOnT2v1\n6tWaMGFCre277rpLTzzxhJ577jllZmbq1ltv1eLFi53XVVdXS3IMK1y1apWys7Nlt9v1/vvvKyEh\nQf369dMzzzyjNWvWKDw83Pl5i4uL9cwzz2jFihXKysrSF198oXfffVeSVFZWpgEDBmjt2rWKj4/X\nypUr6/2zayp6mgAAABCQ1q37Vj/8MPynrWBt2TJABw8eVPfu3Zt03/Lyco0cOVLFxcW6+OKLdccd\nd6i0tFTbt2/X73//e+d5p06dkiRt375dqampkqRhw4bpqaeeOq+ft3HjRr355ps6ffq0vvvuO+3a\ntUuxsbGSdE5Ycuf48eM6ceKE4uPjJUmjRo2qVfPP71ezvWfPHv33v/91hqnKykpFRUU5z6sJe9u2\nbdOyZctUVlamH3/8Ub169dINN9wg6UywqlFdXa0vvvhC11xzjS644AJJUlJSkj777DPdeOONCg0N\n1W9+8xtJ0uWXX66PPvrovD7r+SA0AQAAICC1a3dKUqWkYElSZOR3at/+kibfNzw8XFlZWbLb7Zo4\ncaJyc3P1q1/9Sm3btlVWVlaD7xMcHFxrLpLdbj/nnAMHDmj58uVavXq12rZtq0cffVQVFRXO461a\ntarz3j179tSOHTv0y1/+0mUNPw8yP79fzXZ1dbV69eqljIyMeu9VXl6uuXPnKjMzU9HR0XrhhRdU\nXl7uPF5XL9rP91VXVzv3hYSciTJBQUEe7SX8OYbnAQAAICA99thNGjRohcLCtisqapP+9CcpMjLS\nY/c3m82aOXOmFi9erDZt2qhLly7KycmR5PjyXzPXqX///s79GzZscF5/8cUXa9euXaqoqNCxY8e0\nbdu2c35GaWmpWrVqpYiICJWUlGjz5s0Nqm3SpEl6+umnVVJSIkmqqKjQm2++qbZt26pdu3b67LPP\nJElr167VNddc47yurt4gSbr00kt15MgRbd++XZKjF23Xrl21zq0JSJGRkSotLXV+Zklq06aNTpw4\nUet8k8mkK664Qp9++ql++OEHVVZWauPGjbr66qsb9Bk9iZ4mAAAABKS2bSP0zjt36+DBg2rf/hKP\nBaaze0f69Omjbt266a233tKiRYs0Z84cpaam6vTp00pMTFTv3r01Y8YMTZ06VS+//LIGDhzoXMWu\nc+fOuvnmm5WUlKQuXbrUOQepd+/e6tu3rxISEtS5c2fFxcU1qEaLxaLvv/9eEyZMcPbe3HrrrZKk\np556SrNnz1ZZWZm6deumhQsX1vnZzt4OCwvTc889pyeeeELHjx9XZWWl7rnnHvXs2dN5brt27XTb\nbbdp2LBh6tixo6644grnsdGjR2v27NnOhSBqXHTRRXr44Yd19913S5J+85vfaNCgQefUcj4rCTaG\nqfrncbGZys/Pb/BfEngP7WAMtIP/0QbGQDv4H21gDIHSDjXD18xms58rOT92u91Z84YNG7Rx40a9\n+OKLfq6qeavv70JjfxfoaQIAAAD8aMeOHZo3b56qq6vVvn17LViwwN8l4WcITQAAAIAfxcfHa+3a\ntf4uAy6wEAQAAAAAuEBPEwAAAFqMs5ewRuAqLy93PiTXE+hpAgAAQIsQFhbm0S/Knvbll1/6u4SA\nER4errCwMI/dj54mAAAAtAhBQUGGXznP6PWhbvQ0AQAAAIALhCYAAAAAcIHQBAAAAAAuEJoAAAAA\nwAVCEwAAAAC4QGgCAAAAABcITQAAAADgAqEJAAAAAFwgNAEAAACAC4QmAAAAAHCB0AQAAAAALhCa\nAAAAAMAFr4amRx99VNddd52SkpLqPeeJJ57Q0KFDNXz4cH311VfO/Zs3b1ZCQoKGDh2qpUuXerNM\nAAAAAKiXV0PTrbfeqr/+9a/1Hs/Ly1NhYaHeeecdzZs3T3PmzJEkVVZWat68efrrX/+qDRs2aMOG\nDdq9e7c3S0VT2e1SWpo6rlrleA8AAAC0ECHevHl8fLwOHjxY7/Hc3FyNGjVKknTllVfq2LFj+u67\n73Tw4EF169ZNXbp0kSQlJiYqNzdXMTEx3iwXjWW3SwkJUl6eukvS1q1STo5kNvu7MgAAAKDJ/Dqn\n6fDhw+rUqZNzu1OnTiouLtbhw4fVuXNn5/7o6GgVFxf7o0Q0hM0m5eWd2c7Lc+wDAAAAWgCv9jQ1\n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\nQA0NDbp48eJAlDssRdMD2G/RokUaP358r9uZB7HRVx9gv1tuuUVz5syRJI0ZM0Yul0vnz5+PGMN8\nsF80fYD9EhMTJUnt7e0KhUKaMGFCxHbmQmz01Yf+GrKh6fPPP9ekSZMkSZMmTdLnn3/e4ziHw6GC\nggLl5OTo9ddfj2WJw1ZdXZ2mTJkSXnY6naqrq4sYc/78eSUnJ4eXk5OTde7cuZjVONxF0wOHw6F/\n/etf8vl8Wr16tc6cORPrMkc85sHgwFyIrWAwqI8//ljz58+PWM98iK3e+sB8sF9nZ6eWL1+ue+65\nRykpKZo1a1bEduZCbPTVh/7OBds+bnsjFBQU9Ji8N27cGLHscDjkcDh6PMauXbs0efJk1dfXq6Cg\nQLfffrsWLVpkS70jRW9/11e7+gpftPuhb9H8Xc6dO1eHDh1SYmKiKisr9eijj+qdd96JQXXojnkw\n8JgLsXP58mVt2LBBmzdv1pgxY67ZznyIDas+MB/sN2rUKO3bt0+NjY0qLCzU8ePHlZKSEjGGuWC/\nvvrQ37kwqK80bdu2TW+99dY1vzwej26++WZduHBBUldiT0pK6vEYkydPliQlJSUpPT1d1dXVMat/\nuHI6naqtrQ0vnzt3Tk6nM2LM5MmTI35q0tMYXL9oejB27NjwpWm326329nZdunQppnWOdMyDwYG5\nEBvt7e3asGGDfD6f7r///mu2Mx9io68+MB9iZ9y4cXK73frPf/4TsZ65EFu99aG/c2FQhyYraWlp\nevPNNyVJe/fu7fE/DC0tLWpqapIkNTc36+jRo7rjjjtiWudwNG/ePAUCAQWDQbW1tam8vFwejydi\njMfj0d69eyVJJ0+e1Pjx48O3U+Kbi6YHFy9eDP8k68oPC77p/bzoH+bB4MBcsJ8xRps3b5bL5VJ+\nfn6PY5gP9oumD8wHe9XX14ff6Nza2qpjx45p7ty5EWOYC/aLpg/9nQuD+vY8K2vWrNHGjRv1xhtv\n6NZbb9Vvf/tbSV3PehQVFam4uFgXL17UunXrJEmhUEher1epqakDWfawEBcXp6KiIhUWFqqzs1O5\nublyuVzavXu3JCkvL09ut1uVlZVKT09XYmKiXn755QGueniJpgfvvPOOdu3apdGjRysxMVGvvfba\nAFc9/DzxxBP64IMPdOnSJbndbq1fv14dHR2SmAex1FcfmAv2q6qq0v79+zV79mz5/X5J0uOPPx6+\nIs58iI1o+sB8sNeFCxf0zDPPqLOzM/xMzeLFi/k3UoxF04f+zgWH4dVyAAAAANCrIXt7HgAAAADE\nAqEJAAAAACwQmgAAAADAAqEJAAAAACwQmgAAAADAAqEJAAAAACwQmgAAUfvyyy81f/58vfjiiwNd\nSlhjY6O2bt16Xfu2t7dr9erV8vl8+uUvf3nN9rS0NHm9XnX/OkdaWprOnDnT57H9fr/a2tquqy4A\nwOBCaAIARO3AgQNKTU3V3/72N7W3tw90OZK6glxJScl17Xvq1CnV1tZq//79euaZZ3oc09zcrH37\n9vX72Hv37tVNN910XXUBAAYXQhMAIGpvvPGGCgsLdeedd6qioiK8/ve//70ef/xxrVmzRhkZGXrs\nscf04YcfauXKlUpPT9evfvWr8NhAIKCf/OQn8vl8ysnJ0ZEjRyRJwWBQd999d3hc9+VgMKiUlBT9\n5je/UXZ2tjIzM1VVVSVJeu6559TY2Ci/36+HHnqox7qLi4vl9Xrl9Xq1adMmNTc367PPPtNTTz2l\nYDAov9+v8vLyHvddt26d/vCHP6ijo+Oabb2diyR997vfVUtLizo7O/Xzn/9cDzzwgJYvXx5RY2Vl\npR566CHl5OQoLy9P//73v/vsAQBgABgAAKLw8ccfm/T0dGOMMW+//bZZtWpVeNvvfvc7k5GRYRob\nG00oFDI+n888/PDDpq2tzTQ3N5vFixebQCBgjDEmNzfXlJWVGWOMOXPmjElJSTH19fWmpqbGpKSk\nhI/ZfbmmpsbMnj3bHDp0yBhjzP79+01eXp4xxphgMBix39UOHTpkli1bZpqamowxxjz99NNmy5Yt\nxhhjjh8/bnJycnrd97777jOffPKJ2bBhg9m+fXt43f/+9z/LczHGmNmzZ5vm5mbz0UcfmQceeCB8\nzIaGBmOMMYFAwDz44IOmsbHRGGPMJ598Yr7//e/3WgsAYOBwpQkAEJWysjL5fD5JksfjUXV1tc6f\nPy9JcjgcWrJkicaOHatRo0Zp9uzZSk1NVXx8vBITEzVz5kydPXtWTU1NOn36tH74wx9Kklwul+bM\nmaOTJ0/2+ed/+9vfltvtliQtWLBANTU1khTxvFFP3n//fWVlZWnMmDGSpB/96Ec6duxYVPteObeN\nGzdq69atam5uDq/v7Vyuvlp02223qaOjQ5s2bdK+ffvCf+aRI0d09uxZ/fjHP5bf79dTTz2lUCik\n+vr6PmsCAMRW3EAXAAAY/Nra2nTgwAF961vf0p49eyRJHR0d2rNnj9auXStJio+PD48fPXp0xPM8\no0aNUigUCi8bY+RwOMLLDodDcXFxESHmq6++iqjh6uP1dLtcTxwOR8RxowlKV5s5c6bcbrf+8pe/\nXLPt6nO52rhx43TgwAF98MEHOnbsmF599VW9+eabkqQlS5bolVde6Xc9AIDY4koTAKBPFRUVcrlc\nqqys1MGDB3Xw4EGVlJSE//EfbRAZO3as5syZE97v008/1enTp7VgwQJNmjRJ7e3tOnv2rKSul05E\ne8zW1taIUNbd4sWLVV5ersuXL8sYo7KyMqWmpkZ17O7Wr1+vnTt36vLly32eS3f19fVqaWlRamqq\nnnzySY0bN07BYFCpqak6cuRIxJv4qqur+10XAMB+XGkCAPRpz5498nq9EevuuusuGWN04sQJORwO\ny6st3b366qt69tlnVVpaqri4OG3ZskUTJ06UJG3evFkFBQVKSkqS2+2+5mpUd1eWJ0yYEH7Jw3e+\n8x3t2rUrYty9996r//73v8rLy5MkzZs3T4888kj4GNHW7XQ6tXz5cpWWlkZ1LleOW1tbq6KiIoVC\nIYVCIbndbi1YsEAOh0NbtmzR5s2b1draqvb2di1cuFDz58+Pqh4AQOw4zPXcpwAAAAAAIwS35wEA\nAACABUITAAAAAFggNAEAAACABUITAAAAAFggNAEAAACABUITAAAAAFggNAEAAACAhf8DjFB4LMKD\nMfwAAAAASUVORK5CYII=\n",
201 "text/plain": [
202 "<matplotlib.figure.Figure at 0x7fac95069610>"
203 ]
204 },
205 "metadata": {},
206 "output_type": "display_data"
207 }
208 ],
209 "source": [
210 "n = 100\n",
211 "noises = np.linspace(0, 3, 30)\n",
212 "experiments = 100\n",
213 "spearman = np.ndarray(len(noises))\n",
214 "correlation = np.ndarray(len(noises))\n",
215 "\n",
216 "for i in range(len(noises)):\n",
217 " # Run many experiments for each noise setting\n",
218 " rank_coef = 0.0\n",
219 " corr_coef = 0.0\n",
220 " noise = noises[i]\n",
221 " for j in range(experiments):\n",
222 " r_s, c_c = compare_correlation_and_spearman_rank(n, noise)\n",
223 " rank_coef += r_s\n",
224 " corr_coef += c_c\n",
225 " spearman[i] = rank_coef/experiments\n",
226 " correlation[i] = corr_coef/experiments\n",
227 " \n",
228 "plt.scatter(noises, spearman, color='r')\n",
229 "plt.scatter(noises, correlation)\n",
230 "plt.legend(['Spearman Rank', 'Regular Correlation'])\n",
231 "plt.xlabel('Amount of Noise')\n",
232 "plt.ylabel('Average Correlation Coefficient')"
233 ]
234 },
235 {
236 "cell_type": "markdown",
237 "metadata": {},
238 "source": [
239 "We can see that the Spearman rank correlation copes with the non-linear relationship much better at most levels of noise. Interestingly, at very high levels, it seems to do worse than regular correlation."
240 ]
241 },
242 {
243 "cell_type": "markdown",
244 "metadata": {},
245 "source": [
246 "##Delay in correlation\n",
247 "\n",
248 "Of you might have the case that one process affects another, but after a time lag. Now let's see what happens if we add the delay."
249 ]
250 },
251 {
252 "cell_type": "code",
253 "execution_count": 6,
254 "metadata": {
255 "collapsed": false
256 },
257 "outputs": [
258 {
259 "name": "stdout",
260 "output_type": "stream",
261 "text": [
262 "-0.00584158415842\n"
263 ]
264 }
265 ],
266 "source": [
267 "n = 100\n",
268 "\n",
269 "X = np.random.rand(n)\n",
270 "Xrank = stats.rankdata(X, method='average')\n",
271 "# n-2 is the second to last element\n",
272 "Yrank = stats.rankdata([1,1] + list(X[:(n-2)]), method='average')\n",
273 "\n",
274 "diffs = Xrank - Yrank # order doesn't matter since we'll be squaring these values\n",
275 "r_s = 1 - 6*sum(diffs*diffs)/(n*(n**2 - 1))\n",
276 "print r_s"
277 ]
278 },
279 {
280 "cell_type": "markdown",
281 "metadata": {},
282 "source": [
283 "Sure enough, the relationship is not detected. It is important when using both regular and spearman correlation to check for lagged relationships by offsetting your data and testing for different offset values."
284 ]
285 },
286 {
287 "cell_type": "markdown",
288 "metadata": {},
289 "source": [
290 "##Built-In Function\n",
291 "\n",
292 "We can also use the `spearmanr` function in the `scipy.stats` library:"
293 ]
294 },
295 {
296 "cell_type": "code",
297 "execution_count": 7,
298 "metadata": {
299 "collapsed": false
300 },
301 "outputs": [
302 {
303 "name": "stdout",
304 "output_type": "stream",
305 "text": [
306 "Spearman Rank Coefficient: 0.236363636364\n",
307 "p-value: 0.510885317515\n"
308 ]
309 }
310 ],
311 "source": [
312 "# Generate two random data sets\n",
313 "np.random.seed(161)\n",
314 "X = np.random.rand(10)\n",
315 "Y = np.random.rand(10)\n",
316 "\n",
317 "r_s = stats.spearmanr(X, Y)\n",
318 "print 'Spearman Rank Coefficient: ', r_s[0]\n",
319 "print 'p-value: ', r_s[1]"
320 ]
321 },
322 {
323 "cell_type": "markdown",
324 "metadata": {},
325 "source": [
326 "We now have ourselves an $r_S$, but how do we interpret it? It's positive, so we know that the variables are not anticorrelated. It's not very large, so we know they aren't perfectly positively correlated, but it's hard to say from a glance just how significant the correlation is. Luckily, `spearmanr` also computes the p-value for this coefficient and sample size for us. We can see that the p-value here is above 0.05; therefore, we cannot claim that $X$ and $Y$ are correlated.\n",
327 "\n",
328 "##Real World Example: Mutual Fund Expense Ratio\n",
329 "\n",
330 "Now that we've seen how Spearman rank correlation works, we'll quickly go through the process again with some real data. For instance, we may wonder whether the expense ratio of a mutual fund is indicative of its three-year Sharpe ratio. That is, does spending more money on administration, management, etc. lower the risk or increase the returns? Quantopian does not currently support mutual funds, so we will pull the data from Yahoo Finance. Our p-value cutoff will be the usual default of 0.05.\n",
331 "\n",
332 "### Data Source\n",
333 "\n",
334 "Thanks to [Matthew Madurski](https://github.com/dursk) for the data. To obtain the same data:\n",
335 "\n",
336 "1. Download the csv from this link. https://gist.github.com/dursk/82eee65b7d1056b469ab\n",
337 "2. Upload it to the 'data' folder in your research account."
338 ]
339 },
340 {
341 "cell_type": "code",
342 "execution_count": 8,
343 "metadata": {
344 "collapsed": false
345 },
346 "outputs": [
347 {
348 "name": "stdout",
349 "output_type": "stream",
350 "text": [
351 "Spearman Rank Coefficient: -0.237573932355\n",
352 "p-value: 0.0167465097116\n"
353 ]
354 },
355 {
356 "data": {
357 "image/png": "iVBORw0KGgoAAAANSUhEUgAAA08AAAHxCAYAAAC1YYc2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt8VPWd//H3QEImgBARE6jIWuKleMMloAJ2p00kG40J\nAUEjynYC5ZJV+InWemGxqFS81bJCSYyyRGNhFm9BCgbSWAdtKdpRzKMiuyJKy5YEooSLMCSE+f1B\nMhKSMCeXmXNm5vV8PHw8nJkzM5/k64nznu/3+zk2n8/nEwAAAADgjLqZXQAAAAAAhAPCEwAAAAAY\nQHgCAAAAAAMITwAAAABgAOEJAAAAAAwgPAEAAACAAaaFpz179mjKlCnKzMzUTTfdpJdffrnV4xYu\nXKj09HRlZ2dr27ZtIa4SAAAAAE6KMe2NY2L00EMPaejQofr22281YcIEjRkzRsnJyf5j3G63du3a\npY0bN+qTTz7RggULtHr1arNKBgAAABDFTJt5OvfcczV06FBJUq9evZScnKy9e/c2O6aiokLjx4+X\nJA0bNkwHDx5UTU1NyGsFAAAAAEvsedq9e7c+++wzXXnllc3u37t3rwYMGOC/PWDAAFVVVYW6PAAA\nAAAwb9lek2+//VZz5szRvHnz1KtXrxaP+3y+ZrdtNtsZX8/j8XRpfQAAAAAiT0pKSrufY2p4qq+v\n15w5c5Sdna3rr7++xeOJiYnNZpqqqqqUlJQU8HU78otA1/F4PIyBBTAO1sA4mI8xsAbGwRoYB/Mx\nBtbQ0QkX05bt+Xw+zZs3T8nJyXI6na0ek5aWptLSUknS1q1b1adPH/Xv3z+EVQIAAADASabNPHk8\nHr311lu65JJLlJOTI0maO3eu9uzZI0nKzc2Vw+GQ2+3W2LFjFR8fr0WLFplVLgAAAIAoZ1p4GjFi\nhLZv3x7wuIcffjgE1QAAAADAmVmi2x4AAAAAWB3hCQAAAAAMIDwBAAAAgAGEJwAAAAAwgPAEAAAA\nAAYQngAAAADAAMITAAAAABhAeAIAAAAAAwhPAAAAAGAA4QkAAAAADCA8AQAAAIABhCcAAAAAMIDw\nBAAAAAAGEJ4AAAAAwADCEwAAAAAYQHgCAAAAAAMITwAAAABgAOEJAAAAAAwgPAEAAACAAYQnAAAA\nADCA8AQAAAAABhCeAAAAAMAAwhMAAAAAGEB4AgAAAAADCE8AAAAAYADhCQAAAAAMIDwBAAAAgAGE\nJwAAAAAwgPAEAAAAAAYQngAAAADAAMITAAAAABhAeAIAAAAAAwhPAAAAAGAA4QkAAAAADCA8AQAA\nAIABhCcAAAAAMIDwBAAAAAAGEJ4AAAAAwADCEwAAAAAYQHgCAAAAAAMITwAAAABggKnh6cEHH9To\n0aOVlZXV6uNbtmxRSkqKcnJylJOTo2XLloW4QgAAAAA4KcbMN7/55ps1ZcoU3X///W0eM3LkSBUW\nFoawKgAAAABoydSZpxEjRqhPnz5mlgAAAAAAhlh6z5PNZtPHH3+s7OxsTZ8+XTt27DC7JAAAAABR\nyubz+XxmFrB7927l5+dr7dq1LR47fPiwunfvrvj4eLndbj3++OPasGHDGV/P4/EEq1QAAAAAESIl\nJaXdzzF1z1MgvXv39v+7w+HQI488otraWiUkJJzxeR35RaDreDwexsACGAdrYBzMxxhYA+NgDYyD\n+RgDa+johIull+3V1NSoaWKssrJSkgIGJwAAAAAIBlNnnu655x598MEHqq2tlcPh0OzZs3X8+HFJ\nUm5urjZs2KBVq1b5l+49++yzZpYLAAAAIIqZGp4ChaHbb79dt99+e4iqAQAAAIC2WXrZHgAAAABY\nBeEJAAAAAAwgPAEAAACAAYQnAAAAADDA0td5AgAAwef1elVcXCFJcjrTZLfbTa4IAKyJ8AQAQBTz\ner3KyFgpt3uKJMnlKlFZ2eQOByiCGIBIxrI9IMx5vV4VFq5TYeE6eb1es8sBEGaKiysag1OspFi5\n3Xf4w097NQWx/Px05eenKyNjJX+XAEQUwhMQxvigAsBKujKIAYAVEZ6AMMYHFQCd5XSmyeEokVQn\nqU4OxytyOtPMLgsALInwBABAFLPb7Sorm6yCgnIVFJR3ar8TQQxApKNhBMJeNG9OdjrT5HKVyO2+\nQ5IaP6hMNrkqAOHGbrdr1qzMLnmdsrLJKi4ulyQ5nR0PYgBgRYQnhLWu7hIVbvigAsBquiqImSma\nv5QDcGaEJ4S15nt+1Ljnpzzs/8fdHpHwQQUArCLav5QDcGbseQIAAGhEIx4AZ0J4QlhjczIAAABC\nhfCEsNaVXaIAAOBLOQBnwp4nhD32/AAAugqNeACcCeEJAADgFHwpB6AtLNsDAAAAAAMITwAAAABg\nAOEJAAAAAAwgPAEAAACAAYQnAAAAADCA8AQAAAAABhCeAAAAAMAAwhMAAAAAGEB4AgAAAAADCE8A\nAAAAYADhCQAAAAAMIDwBAAAAgAGEJwAAAAAwgPAEAAAAAAYQngAAAADAAMITAAAAABhAeAIAAAAA\nAwhPAAAAAGAA4QkAAAAADIgxuwAAAGA9Xq9XxcUVkiSnM012u93kigDAfIQnAIgQnf2wy4dlNPF6\nvcrIWCm3e4okyeUqUVnZZP6bABD1WLYHABGg6cNufn668vPTlZGxUl6vN2TPR2QpLq5oDE6xkmLl\ndt/hD9YAEM1MDU8PPvigRo8eraysrDaPWbhwodLT05Wdna1t27aFsDoACB+d/bDLh2UAAAIzNTzd\nfPPNevHFF9t83O12a9euXdq4caMee+wxLViwIHTFAQDCmtfrVWHhOr322hZm0drJ6UyTw1EiqU5S\nnRyOV+R0ppldFgCYztTwNGLECPXp06fNxysqKjR+/HhJ0rBhw3Tw4EHV1NSEqjwACBud/bAbaR+W\nT12G+MQT01mG2E52u11lZZNVUFCugoJy9jsBQCNLN4zYu3evBgwY4L89YMAAVVVVqX///iZWBQDW\n0/Rht7i4XJLkdLbvw25nn281zZchqnEZYrlmzco0t7AwYrfb+X0BwGksHZ4kyefzNbtts9lMqgQA\nrK2zH3b5sAwAwJlZOjwlJiaqqqrKf7uqqkpJSUkBn+fxeIJZFgxgDKyBcbAGxiH0rrzybA0fvkwf\nfZQvSRo+vEBXXjmSsTAZv39rYBzMxxiEL0uHp7S0NL3yyivKzMzU1q1b1adPH0NL9lJSUkJQHdri\n8XgYAwtgHKyBcTDPH/84XMXF5dq1a5d+8YuZYb0MMRKE8lzgmmVt42+S+RgDa+hogDU1PN1zzz36\n4IMPVFtbK4fDodmzZ+v48eOSpNzcXDkcDrndbo0dO1bx8fFatGiRmeUCAMJI0zJEj8fDh+cowgV+\nAQSTqeHp2WefDXjMww8/HIJKAABAJKBZCIBgsvSyPQAA0BLL0gDAHKZe5wkAALTPqdewys9P5xpW\np4m0a5YBsBbCEwAAYaT5srTYxmVpFWaXZRlc4BdAMLFsDwAARBSuWRY9WMKKUGPmCQCAMMKyNOAk\nlrDCDIQnAADCCMvSgJNYwgozsGwPANBuLJUxF8vSAMAczDwBANqFpTIArIAlrDADM08AIgazIaHB\nRUgBWEHTEtbi4nJJktPJElYEH+EJQERomg05+aFecrlK2AuCiMUXBcBJLGFFqLFsD0BEYONw6LBU\nxlwsmwQA8zDzBABoF5bKmItlk8B3mIVFqBGeAEQEpzNNLleJ3O47JKlxNmSyyVVZS1d+yGCpDACz\nsVwbZmDZHoCIwLVvzoylXpGDZZPASSzXhhmYeQIQMZgNaRtLvSIHyyYBwDyEJwAAwgxfFAAs14Y5\nWLYHAFGApV4AIg3LtWEGZp4AIAqw1AtAJGIWFqFGeAKAKMGHDAAAOofwBABAlONaOQBgDOEJAIAo\nxrVyAMA4GkYAABDFuFYOABhHeAIAAAAAAwhPAABEMdrYA4Bx7HkCACCK0cYeAIwjPAEAEOVoYw8A\nxhCeAACwmHBoHR4ONQJAVyM8AQBgIeHQOjwcagSAYKBhBAAAFhIOrcPDoUYACAbCEwAAAAAYQHgC\nAMBCwqF1eDjUiMjg9XpVWLhOhYXr5PV6zS4HYM8TAABWEg6tw8OhRoQ/9tbBighPACyLbl6IVuHQ\nOjwcakR4a763To1768r57w6mIjwBsCS+cQQAAFbDnicAlkQ3L0Qz9nkA7K2DNTHzBABogSWT5mHW\nFTiJvXWwImaeAFgS3ziap+nDe35+uvLz05WRsZLZjxBi1hX4TtPeulmzMglOsARmngBYUjR/42j2\nrA+btAEAaB3hCYBlRWM3L5ZswelMk8tVIrf7DklqnHWdbHJVAACJZXsAYClWWLLFkklzNc26FhSU\nq6CgnPAMABbCzBMAoJloXjJpFdE46woA4cDUmadNmzYpIyND6enpKioqavH4li1blJKSopycHOXk\n5GjZsmUmVAkAxnW2xbRVZn3YpB0daIkOAO1j2sxTQ0ODHnvsMa1YsUJJSUmaOHGi0tLSlJyc3Oy4\nkSNHqrCw0KQqAcC41vYrPf74D9r1Gsz6IFTYXwcA7WfazFNlZaUGDx6sQYMGKTY2VpmZmaqooBUr\ngPDV2n6ltWu3tvt1mPVBKFhhfx0AhBvTwlN1dbUGDhzov52UlKTq6upmx9hsNn388cfKzs7W9OnT\ntWPHjlCXCQAALIJlhgDMZtqyPZvNFvCYSy+9VO+++67i4+Pldrt15513asOGDQGf5/F4uqJEdAJj\nYA2MQ2hdeeXZGj58mT76KF+SNHx4gbKyRjIOFsAYtNTaf69XXhnc/14789rHjh3T7Nkf6qOP/l2S\n9MILy7RkyUjFxcV1VXlRg/PBfIxB+DItPCUlJWnPnj3+21VVVUpKSmp2TO/evf3/7nA49Mgjj6i2\ntlYJCQlnfO2UlJSuLRbt4vF4GAMLYBzM8cc/Dj9lv9JMffrpp4yDyTgX2nb6f6/BXCba2XEoLFzX\nGJxOXrz5o4/yVVnJxZvbi/PBfIyBNXQ0wJoWni6//HLt2rVLu3fvVmJiotavX69nn3222TE1NTU6\n55xzZLPZVFlZKUkBgxMAmIkW0wgn/PcKAO1jWniKiYnR/PnzNW3aNJ04cUITJ05UcnKyXC6XJCk3\nN1cbNmzQqlWr1L17d8XHx7cIVwAAIDo4nWlyuUrkdt8hSY1t/CebXBWAaGPqRXIdDoccDkez+3Jz\nc/3/fvvtt+v2228PdVkAAMBiaOMPwApMDU8AAOO8Xq+/lbTTmRaRHxyj4WdEx7HMEIDZCE8AEAbM\nuqBpKMMMF221FoIsALRk2nWeAADGmXFB06Ywk5+frvz8dGVkrAzqtXW4aKt1hHrsASBcEJ4AAK0i\nzEQvxh4AWkd4AoAw4HSmyeEokVQnqa6x01ia2WV1qWD9jMeOHVNh4ToVFq5j9iTKeL1exh5Al2LP\nEwCEATM6jYW6NXQwfkav16vZsz9svLgq+6iMioS24OyhAxAMhCcACBOh7jRmRmDr6p+xuLiiMTjF\nSlLj8rNyOrYFEAltwZsvPWTsAXQNwhMAoE20hrYGMzrfMfYA0BJ7ngAAEcvpTNPw4csUznvF6HzX\nMdGwTxBA6DHzBACIWHa7XUuWjFRlJcvPok0kLD0EYD2EJwBARIuLiyNoRCmWHgLoaizbAwDAorxe\nr+rr63TRRYt16vKz3NwxtOAGABMw8wQAgEWc2hgiN3eMcnLeaFyy59WFFy7QnDlXa8qUCafcTwtu\nAAglZp5gWbW1tbrttid0221PqLa21uxyACCoTm8McfXVL8jtnqSTe53O0o4dCxQbGyuX64+n7IGK\nbdwDVWFu8VGCi+5GL8YeTZh5giXV1tbqggt+owMHfi5Jevvtp/TVV3cqISGhw6+Xn18oSSoomNXh\n1wHMaBnd1SLhZ4hEpzeG+Pzz/yfpbUnjzCwLjcLtorvRcp6H4ucMt7FHcDHzBMs49VudmTObgtPJ\nb1YPHLjPH37aqymIuVz3yuW6Vxdc8BtmstAh4doy+tRzq7a2Nix/hmh14YVbdHqrbVpwm6N5uLX2\njF+4/q1qr1D9nOE09gg+whMs4fQ/gH/4Q3WLY06caOjQa+fnF3ZZEEN0C8f/gZ5+bo0c+VTY/QzR\norVQ9OGHP1dBQbkKCsr933Q3teA+/X6gSTj+reqIaPk5YS0s24MlnL5cZd++hZKelTS38YiXdc01\nF5lUXXhpWsKwa9cuXXbZZXyoinKnn1s7dlxtbkFoU1vXJWqt1TYtuEPP6UyTy1Uit/sOSWqc8Zts\nclUIBcYep2LmCRZllzREUnnjP7eoZ89eHXqlgoJZ6tv3KTV9m9u379MqKJjVZZVayamzDE88Mb1L\nljCwSfY7kbFcKrVF2+vw+xkiV1MomjUrky8+LCacZvwi429VYKH6OcNp7BF8zDzBEk7/VueHP3xJ\n0gm9997JjdKd+ZYnISFBX311p/Lzn5UkFRR0vPGE1Z0+y3ByCUN5h7+hZpNsc23NDFhZy29MX1Np\n6XS5XOHzMwBWES4zfuH4t6ojQvlzhsvYI/gIT7CEln8AT35Y76o/iAkJCVq16oHOFxplujqMRYJw\n+x9oe5aCAe0RLd3cwlW0nOfR8nPCOghPsIzW/gDyB7F9WJeN1vDhAl2NWWkA0Yo9T0AEOXVd9gMP\nvNjpDzPRsm4eQPvQ5QxAtGLmCYgwTbMMHo+n098CR8u6eQAAACMITwDOiCVfAE7HEmEA0YrwhKjA\nxmYgPHCuhgdmpQFEK8ITIh4bm4HwwLkaXpiVBhCNaBiBiMfGZiA8cK4CAKyOmScAQNCxHA8AEAmY\neULEo902YK6m5Xj5+enKz09XRsZKeb3eFsdxrgIArI6ZJ0Q8NjYD5mq+HE+Ny/HKW+yX4VwFAFgd\n4QlRgY3NQHjgXAVOYqkrYE0s2wMABBXL8YD2MbrUFUDoEZ4AAEHVtByvoKBcBQXltB8HAqDzJGBd\nLNsDAAQdy/EAAJGAmScAAAALYakrYF2GZp4+//xzbdmyRTabTddee62Sk5ODXRcAAEBUovMkYF0B\nZ55KS0s1depUbd++Xdu2bZPT6dSaNWtCURsAAEBUalrqOmtWJsEJsJCAM0/Lly/XG2+8oXPPPVeS\ntG/fPk2dOlXjxo0LenEAAAAAYBUBw5PNZvMHJ0k699xzZbPZgloUAEhc5wRoC+cGAJgjYHg6//zz\n9dxzz+nWW2+VJK1evVrnn39+0AsDEN2arnNysl2v5HKV0OIaEOcGAJgp4J6nRx55RDt37lR2dray\ns7O1c+dOPfroo13y5ps2bVJGRobS09NVVFTU6jELFy5Uenq6srOztW3bti55XwDWx3VOgNZxbgCA\neQLOPPXv31+LFy/u8jduaGjQY489phUrVigpKUkTJ05UWlpas05+brdbu3bt0saNG/XJJ59owYIF\nWr16dZfXAgAAAACBtDnz5PF4JEnvvvuu3G53i386q7KyUoMHD9agQYMUGxurzMxMVVQ0/+asoqJC\n48ePlyQNGzZMBw8eVE1NTaffG4D1cZ0ToHWcGwBgnjZnnt58802lpKRo+fLlrT7ucDg69cbV1dUa\nOHCg/3ZSUpIqKyubHbN3714NGDDAf3vAgAGqqqpS//79O/XeAKyP65wArePcAADztBmeFi5cKEkq\nKSkJyhsb7djn8/na/bymWTOYhzGwhkgYh5EjT36B8umnn5pcScdFwjiEu0gcg3A8NyJxHMJRJI3D\nsWPHtHbtVklSVtZViouLM7kiYyJpDKJNwD1Pt912m1atWhXwvvZKSkrSnj17/LerqqqUlJTU7JjE\nxERVVVWd8ZjWpKSkdKo2dI7H42EMLIBxsAbGwXyMgTUwDtYQSePwXefJ6ZKkzZvDo/NkJI1BOOto\ngA3Ybe/o0aPNbjc0NOjAgQMderNTXX755dq1a5d2796turo6rV+/Xmlpzddsp6WlqbS0VJK0detW\n9enThyV7AAAAoPMkTNHmzNMLL7yg5cuX69ChQ7r22mv993u9XmVlZXX+jWNiNH/+fE2bNk0nTpzQ\nxIkTlZycLJfLJUnKzc2Vw+GQ2+3W2LFjFR8fr0WLFnX6fQEAAACgI9oMT7m5ubrhhhv06KOP6he/\n+IV/71Hv3r2VkJDQJW/ucDhaNJ7Izc1tdvvhhx/ukvcCAABA5HA60+RylcjtvkOSGjtPTja5KkS6\nNsPTWWedpbPOOqvNi9cCAAAAZqHzJMwQsGHEP/7xDz3zzDP67LPPdOzYMUknO96dfk0mAAAAIJTs\ndrtmzco0uwxEkYANIx566CGNGjVKkvTMM89oxIgRysnJCXphAAAAAGAlAcPT/v37NWnSJMXExGj4\n8OF64okn5Ha7Q1EbAAAAAFhGwPAUGxsrSerZs6f+7//+T/X19dq/f3/QCwMAAAAAKwm452nkyJHa\nv3+/brvtNt18882KjY1VRkZGKGoDAAAAAMsIGJ7uv/9+SVJOTo5Gjhypw4cP65JLLgl6YQAAAABg\nJQGX7Z3qvPPO06FDh3TrrbcGqx4AAAAAsKQ2w9O2bds0YcIEDRs2TLm5ufrb3/6me++9V/fdd59u\nu+22UNYIAAAAAKZrc9neo48+qkmTJunqq69WeXm5Jk6cqOzsbG3YsEE9evQIZY0AAAAAYLo2w9PR\no0f9M0zJyclauXKlHnroIXXr1q6VfgAAAAAQEdpMQjabrdntfv36EZwAAAAARK02Z57+93//V9de\ne63/9qFDh/y3bTabNm/eHPzqAAAAAMAi2gxPGzduDGUdAAAAAGBpbYanQYMGhbIOAAAAALA0NjEB\nAAAAgAGEJwAAAAAwgPAEAAAAAAYEDE8nTpzQq6++qqefflqStHv3bn300UdBLwwAAAAArCRgeFq0\naJE2b96siooKSVLPnj31y1/+MuiFAQAAAICVBAxPW7Zs0TPPPCO73S7p5MVy6+rqgl4YAAAAAFhJ\nwPAUFxenbt2+O+zEiRNBLQgAAAAArKjN6zw1ufjii7VmzRqdOHFCu3fvVlFRkVJSUkJRGwAAAABY\nRsCZpwcffFAffPCB9u3bp0mTJqmhoUH33XdfKGoDAAAAAMsIOPPUu3dvGkQAAAAAiHoBw1N9fb1W\nr16tP//5z7LZbLrmmmt06623KiYm4FMBAAAAIGIETECPPvqo/vGPfygnJ0c+n09r1qzR//zP/+jR\nRx8NRX0AAAAAYAkBw9MHH3yg9evXq3v37pKkG2+8UZmZmUEvDAAAAACsJGDDiLPPPrvZdZ3q6+vV\nr1+/oBYFAAAAAFYTcObpwgsvVG5urm688Ub5fD6VlZXpiiuu0G9/+1tJ0u233x70IgEAAADAbAHD\n0/HjxzV06FB99dVXkqQf/OAHOn78uP76178GuzYAAAAAsIwzhqcTJ04oIyNDP/rRj0JUDgAAAABY\n0xn3PHXr1k2LFy8OVS0AAAAAYFkBG0YMHTpUn3zySShqAQAAAADLCrjn6a9//atuu+02/dM//ZN6\n9uwpSbLZbHrttdeCXhwAAAAAWEXA8PQf//EfoagDAAAAACwtYHi65pprQlEHAAAAAFhawPB08OBB\nvfDCC9q+fbu8Xq+kk8v2Xn755aAXBwAAAABWEbBhxEMPPaRu3brpyy+/1C233KLu3bvriiuuCEVt\nAAAAAGAZAcPTrl27NHfuXMXHxysrK0tFRUX6y1/+EoraAAAAAMAyAi7b69GjhyQpNjZW+/fvV0JC\ngvbv39+pN62trdXcuXP1j3/8Q+edd54WL16sPn36tDguNTVVvXr1Uvfu3RUTE0OHPwAAAACmCRie\nvv/972v//v3KyspSbm6uevfurcsuu6xTb1pUVKTRo0dr+vTpKioqUlFRkX72s5+1emxJSYkSEhI6\n9X4AAMAYr9er4uIKSZLTmSa73W5yRQBgHQHD0zPPPCNJysvL0xVXXKGDBw/qX/7lXzr1pu+8845e\neeUVSdL48eM1ZcqUNsOTz+fr1HsBAABjvF6vMjJWyu2eIklyuUpUVjaZAAUAjQLueWpSV1enyy67\nTKNGjVJ9fX2n3vTrr79W//79JUn9+/fX119/3epxNptNeXl5mjBhglavXt2p9wQAAGdWXFzRGJxi\nJcXK7b7DPwsFADAw87Rx40YtXLhQe/fu9d9ns9n02WefnfF5eXl5qqmpaXH/3Xff3ey2zWaTzWZr\n9TVWrVqlxMREffPNN8rLy9OQIUM0YsSIQCXL4/EEPAbBxRhYA+NgDYyD+RgDY3bt2tXqfV31+2Mc\nrIFxMB9jEL4ChqennnpKixcv1rBhw9S9e3fDL7xixYo2HzvnnHO0b98+nXvuudq7d6/69evX6nGJ\niYmSpH79+mns2LGqrKw0FJ5SUlIM14mu5/F4GAMLYBysgXEwH2Ng3GWXXabNm0vkdt8hSXI4XtEv\nfjG1S5btMQ7WwDiYjzGwho4G2IDL9hISEjR8+PB2BadAUlNT9eabb0qSSktLdf3117c45ujRozp8\n+LAk6ciRI3r//fd18cUXd1kNAACgObvdrrKyySooKFdBQTn7nQDgNG3OPB09elQ+n09jx47Vb3/7\nW2VmZiouLs7/eHx8fIffdMaMGbr77rv1+uuv+1uVS1J1dbXmz5+voqIi1dTU6K677pIkNTQ0KCsr\nS9ddd12H3xMAAARmt9s1a1am2WUAgCW1GZ7++Z//udntxx57zP/vRvY8nUlCQoKKi4tb3J+UlKSi\noiJJ0vnnn681a9Z0+D0AAAAAoCu1GZ62b98eyjoAAAAAwNIMtyo/ePCgfv/73xOqAAAAAESlNsPT\nvffe61+aV1tbq5tuukm//vWvlZeXxzWXAAAAAESdNsPTtm3bNHToUEnSmjVrdOGFF2rdunV68803\n9corr4SsQAAAAACwgjbD06md9Twej9LS0iRJAwYMULduhlf7AQAAAEBEaDMF2Ww2VVdXy+v16oMP\nPtDVV1/tf8zr9YakOAAAAACwija77c2YMUM5OTmKiYlRSkqKLrroIknSxx9/rPPOOy9kBQIAAACA\nFbQZnm644QalpKSopqbGv/dJkr73ve81u+YTAAAAAESDNsOTJCUmJioxMbHZfUlJSUEtCAAAAACs\niM4PAADZd6tUAAAeL0lEQVQAAGDAGWeeAACA9Xi9XhUXV0iSnM402e12kysCgOhAeAIAIIx4vV5l\nZKyU2z1FkuRylaisbDIBCgBCgGV7AACEkeLiisbgFCspVm73Hf5ZKABAcDHzBAAAgLDEElaEGjNP\nAACEEaczTQ5HiaQ6SXVyOF6R05lmdllAyDUtYc3PT1d+froyMlbK6/WaXRYiHOEJAIAwYrfbVVY2\nWQUF5SooKGe/E6IWS1hhBpbtAQAQZux2u2bNyjS7DACIOsw8AQAAIOywhBVmYOYJAIAowyZ7RIKm\nJazFxeWSJKeTJawIPsITAABRhOtEIZKwhBWhxrI9AACiCJvsAaDjmHkCAOAULGkDALSFmScAABpF\nw3Vj2GQPAB3HzBMAAI2aL2lT45K28ojaU8Eme+A7zDSjvQhPAABEGTbZAzRPQcewbA8AgEYsaQOi\nB81T0BHMPAEA0IglbQCAMyE8AQBwCpa0AdHB6UyTy1Uit/sOSWqcaZ5sclWwOsITAAAAog4zzegI\nwhMAAACiEjPNaC8aRgAAAACAAYQnAAAAADCA8AQAAAAABhCeAAAAAMAAwhMAAAAAGEB4AgAAAAAD\nCE8AAAAAYADhCQAAAAAM4CK5AICg83q9Ki6ukCQ5nWmy2+0mVwQAQPsRngAAQeX1epWRsVJu9xRJ\nkstVorKyyQQoAEDYYdkeACCoiosrGoNTrKRYud13+GehAAAIJ6aEp7fffluZmZkaOnSoPv300zaP\n27RpkzIyMpSenq6ioqIQVggAAAAAzZkSni6++GItXbpUI0aMaPOYhoYGPfbYY3rxxRe1bt06rVu3\nTl988UUIqwQAdAWnM00OR4mkOkl1cjhekdOZZnZZAAC0myl7npKTkwMeU1lZqcGDB2vQoEGSpMzM\nTFVUVBh6LgDAOux2u8rKJqu4uFyS5HSy3wkAEJ4s2zCiurpaAwcO9N9OSkpSZWWliRUBADrKbrdr\n1qxMs8sAAKBTghae8vLyVFNT0+L+uXPnKjU1NeDzbTZbh9/b4/F0+LnoGoyBNTAO1sA4mM9qY3Ds\n2DGtXbtVx48fl+RTTEyssrKuUlxcnNmlBZXVxiFaMQ7mYwzCV9DC04oVKzr1/KSkJO3Zs8d/u6qq\nSklJSYaem5KS0qn3Rud4PB7GwAIYB2tgHMxntTH4rnX79MZ7XpJ0qzZvftVwC/fa2lrl5xdKkgoK\nZikhIaHFe1jtulpWG4doxTiYjzGwho4GWNNblft8vlbvv/zyy7Vr1y7t3r1bdXV1Wr9+vdLS2GAM\nAAhvp7dul/5N0ibDLdxra2t1wQW/kct1r1yue3XBBb9RbW2t//GmcJafn678/HRlZKyU1+sN1o8D\nAFHFlPBUXl4uh8OhTz75RDNnztRPf/pTSSf3Oc2YMUOSFBMTo/nz52vatGnKzMzUjTfeSLMIAEDU\ny88v1IEDP1dT+Dpw4D7/LJTEdbUAIJhMaRgxduxYjR07tsX9SUlJza7n5HA45HA4QlkaAABB5XSm\nyeUqkdt9R+M9L0u6pbGF+2QzSwMkWXPZJ2AVlu22BwBAJDq1dXt9fb2kcxQb+57hFu4FBbP09ttP\n6cCB+yRJffs+rYKCO/2Pnx7OCGVoj+/25E2RJLlcJYb34pmBoIdQIzwBABBinWndnpCQoO3bp+mm\nm+6VJP3ud/OaNYzgulrRpavDQ/Nln2pc9lluyUsNhFvQQ2QgPAEAEEa8Xq9yc9fL43lWkpSb2/ID\n4+nhjG/nI1O0h4dwCnqIHKZ32wMAAMYZaQjh9XpVWLhOhYXrVFtbS/e9CBWM5iBOZ5ocjhJJdZLq\nGpd90u0YaEJ4AgAggpzeqvzqq1+Q2z1JdN+DEU3LPgsKylVQUG7pmSyCHsxAeAIAIIzk5o5R375P\nqekDY9++Tys3d4z/8dNnIz7//P9JesecYhFUwQoPTcs+Z83KtGxwksIr6CFysOcJAIAw4nL9UQcO\nzJF0siHEgQOz5XK9d8Z9HhdeuEU7dtwgie57kcSs5iBW2kPXmeYrQEcQngAACDt2SU0fGOuaPdJa\nq/LS0p/L5aL7XiQKdXiwWpMKKwU5RAfCEwAAYSTQdZzamo3g23l0BSt1uLNakEN0IDwBABBGjCzV\nIiwhGlgpyCF6EJ4AAAgzhCOYJdDMZ+h5JW1s/PcfmlgHogXd9gAAAGCIlTrcnew8+ZykdEnp6tt3\nSbPOk0AwMPMEAAAAw6wy83my8+TP1bRs78CB++RysWwPwcXMEwAAAAAYQHgCAABA2AnWRYKBM2HZ\nHgAAAMKOkc6TXAcKXY3wBAAAgLB0pv1XXAcKwcCyPQAAAESc5teBim28DlSF2WUhzBGeAAAAAMAA\nwhMAAAAiDg0lEAzseQIAAEDEMdJQAmgvwhMAAAAiklUu6IvIwbI9AAAAADCA8AQAAAAABhCeAAAA\nAMAAwhMAAAAAGEDDCABA0Hm9Xv/FKZ3ONDpeAQDCEuEJABBUXq9XGRkr5XZPkSS5XCUqK4v8lsEE\nRgCIPCzbAwAEVXFxRWNwipUUK7f7Dn+oiFRNgTE/P135+enKyFgpr9drdlkAgE4iPAEA0MWiMTAC\nQDQgPAEAgsrpTJPDUSKpTlKdHI5X5HSmmV1WWPN6vSosXKfCwnXMaAFACLHnCQAQVHa7XWVlk1Vc\nXC5Jcjojf7+T05kml6tEbvcdktQYGCd3yWtH6x4yALACwhMAIOjsdrtmzco0u4xOaU8DiGAGxuZL\nAtW4JLDc0O+XJhYA0DmEJwAAAujIbI/VAiMzVgDQeex5AgAgACs1gOjoHjIr/Qwwjv1tgLUw8wQA\nQBjp3JJAr6SNjf/+w2CUhy7EbCFgPcw8AQAQgNU6BjYtCZw1K9PwB+nc3DHq2/c5SemS0tW37xLl\n5o4Jap3oHGYLA2NmDqHGzBMAwHKs1tjAKh0DO/N7cbn+qAMHfq6mRhMHDtwnl8tYownAipiZgxmY\neQIAWErTB6L8/HTl56crI2OlJb5R7shsT1fyer1KTy/x/17S00ss8XtB8FhtxtNqmJmDGQhPAABL\n4QNR6154oUzvvedU0+/lvfd+ohdeKDP8fD6Ih5+mGc+CgnIVFJQzqwJYgCnL9t5++20tXbpUO3fu\n1GuvvabLLrus1eNSU1PVq1cvde/eXTExMXrttddCXCkAANbwpz9tl5TZ4r7Zs4093ypLD9E+Vmt5\nbyXBvBg10BZTwtPFF1+spUuX6uGHHw54bElJiRISEkJQFQDACvhA1LrRoy+Ry/WSpH9rvOdljR59\nSbtegw/iiCR8IQAzmBKekpOTDR/r8/mCWAkAwGr4QNS66dNv0KuvvqT33lsvSfrhDxs0ffoNJlcF\nmIsvBBBqlu62Z7PZlJeXp27duik3N1e33HKL2SUBAEKAD0Qt2e12bdz4k1O67f2EUAkAIRa08JSX\nl6eampoW98+dO1epqamGXmPVqlVKTEzUN998o7y8PA0ZMkQjRozo6lIBAAgLhEoAMJfNZ+K6uClT\npuiBBx5os2HEqZYuXaqePXtq6tSpZzzO4/F0VXkAAAA4zbFjx7R27VZJUlbWVYqLizO5IqBjUlJS\n2v0c05fttZXdjh49qoaGBvXu3VtHjhzR+++/r7vuusvQa3bkF4Gu4/F4GAMLYBysgXEwH2NgDYyD\nNXR2HL67MO10SdLmzVyYtr04F6yhoxMuplznqby8XA6HQ5988olmzpypn/70p5Kk6upqzZgxQ5JU\nU1Oj22+/XePGjdMtt9yiH//4x7ruuuvMKBcAAADiOmyAKTNPY8eO1dixY1vcn5SUpKKiIknS+eef\nrzVr1oS6NAAAAABolSkzTwAAAAg/TmeaHI4SSXWS6hqvw5ZmdllAyJi+5wkAAADhgeuwIdoRngAA\nAGAYLfMRzVi2BwAAAAAGEJ4AAAAAwADCEwAAAAAYQHgCAAAAAAMITwAAAABgAOEJAAAAAAwgPAEA\nAACAAYQnAAAAADCAi+QCABBmvF6viosrJElOZ5rsdrvJFQFAdCA8AQAQRrxerzIyVsrtniJJcrlK\nVFY2mQAFACHAsj0AAMJIcXFFY3CKlRQrt/sO/ywUACC4mHkCAABAWGIJK0KNmScAAMKI05kmh6NE\nUp2kOjkcr8jpTDO7LCDkmpaw5uenKz8/XRkZK+X1es0uCxGO8AQAQBix2+0qK5usgoJyFRSUs98J\nUYslrDADy/YAAAgzdrtds2Zlml0GAEQdZp4AAAAQdljCCjMw8wQAAICw07SEtbi4XJLkdLKEFcFH\neAIAAEBYYgkrQo3wBACIaMeOHVNh4TpJtDIGAHQO4QkAELG8Xq9mz/5QH33075Ikl6uE7nQAgA6j\nYQQAIGIVF1c0BidaGQMAOo/wBAAAAAAGEJ4AABHL6UzT8OHLRCtjAEBXYM8TACBi2e12LVkyUpWV\ntDIGAHQe4QkAENHi4uJoZQwA6BKEJwAALM7r9fobXdBuHQDMQ3gCAMDCvF6vMjJWyu2eIol26wBg\nJhpGAABgYcXFFY3BiXbrAGA2whMAAAAAGEB4AgDAwpzONDkcJaLdOgCYjz1PAABYmN1uV1nZZBUX\n024dnXfs2DEVFq6TRPMRoCMITwAAWJzdbqfdOjrN6/Vq9uwP9dFH/y6J5iNAR7BsDwAAIAoUF1c0\nBieajwAdRXgCAAAAAAMITwAAAFHA6UzT8OHLRPMRoOPY8wQAABAF7Ha7liwZqcpKmo8AHUV4AgAA\niBJxcXE0HwE6gWV7AAAAAGCAKeHpySef1A033KDs7GzdddddOnToUKvHbdq0SRkZGUpPT1dRUVGI\nqwQAAACA75gSnq677jqtW7dOb731li644AI9//zzLY5paGjQY489phdffFHr1q3TunXr9MUXX5hQ\nLQAAAACYFJ7GjBmjbt1OvvWwYcNUVVXV4pjKykoNHjxYgwYNUmxsrDIzM1VRwbUIAAAAAJjD9D1P\nr7/+uhwOR4v7q6urNXDgQP/tpKQkVVdXh7I0AAAAAPALWre9vLw81dTUtLh/7ty5Sk1NlSQVFBQo\nNjZWWVlZLY6z2Wwdfm+Px9Ph56JrMAbWwDhYA+NgPsbAGhgHa2AczMcYhK+ghacVK1ac8fE33nhD\nbrdbL730UquPJyUlac+ePf7bVVVVSkpKMvTeKSkpxgtFl/N4PIyBBTAO1sA4mI8xsAbGwRoYB/Mx\nBtbQ0QBryrK9TZs2afny5Vq2bJni4uJaPebyyy/Xrl27tHv3btXV1Wn9+vVKS+Mq2AAAAADMYUp4\nWrhwoY4cOaKpU6cqJydHCxYskHRyn9OMGTMkSTExMZo/f76mTZumzMxM3XjjjUpOTjajXAAAAAAI\n3rK9M9m4cWOr9yclJTW7npPD4Wi1mQQAAAAAhJrp3fYAAAAAIBwQngAAAADAAMITAAAAABhAeAIA\nAAAAAwhPAAAAAGAA4QkAAAAADCA8AQAAAIABhCcAAAAAMIDwBAAAAAAGEJ4AAAAAwADCEwAAAAAY\nQHgCAAAAAAMITwAAAABgAOEJAAAAAAwgPAEAAACAAYQnAAAAADCA8AQAAAAABhCeAAAAAMAAwhMA\nAAAAGEB4AgAAAAADCE8AAAAAYADhCQAAAAAMIDwBAAAAgAGEJwAAAAAwgPAEAAAAAAYQngAAAADA\nAMITAAAAABhAeAIAAAAAAwhPAAAAAGAA4QkAAAAADCA8AQAAAIABhCcAAAAAMIDwBAAAAAAGEJ4A\nAAAAwADCEwAAAAAYQHgCAAAAAAMITwAAAABgAOEJAAAAAAwgPAEAAACAAYQnAAAAADCA8AQAAAAA\nBsSY8aZPPvmk3n33XcXGxmrw4MFatGiRzjrrrBbHpaamqlevXurevbtiYmL02muvmVAtAAAAAJg0\n83Tddddp3bp1euutt3TBBRfo+eefb/PYkpISlZaWEpwAAAAAmMqU8DRmzBh163byrYcNG6aqqqo2\nj/X5fKEqCwAAAADaZPqep9dff10Oh6PVx2w2m/Ly8jRhwgStXr06xJUBAAAAwHdsviBN7eTl5amm\npqbF/XPnzlVqaqokqaCgQNu2bdOSJUtafY29e/cqMTFR33zzjfLy8jR//nyNGDHijO/r8Xg6XzwA\nAACAiJaSktLu5wQtPAXyxhtvaPXq1XrppZcUFxcX8PilS5eqZ8+emjp1agiqAwAAAIDmTFm2t2nT\nJi1fvlzLli1rMzgdPXpUhw8fliQdOXJE77//vi6++OJQlgkAAAAAfqbMPKWnp6u+vl59+/aVJF11\n1VVasGCBqqurNX/+fBUVFenvf/+77rrrLklSQ0ODsrKyNHPmzFCXCgAAAACSTFy2BwAAAADhxPRu\newAAAAAQDghPAAAAAGAA4QkAAAAADAj78FRbW6u8vDz967/+q6ZOnaqDBw+2elxqaqqysrKUk5Oj\niRMnhrjKyLRp0yZlZGQoPT1dRUVFrR6zcOFCpaenKzs7W9u2bQtxhdEh0Dhs2bJFKSkpysnJUU5O\njpYtW2ZClZHtwQcf1OjRo5WVldXmMZwLwRVoDDgPQmPPnj2aMmWKMjMzddNNN+nll19u9TjOh+Ax\nMgacD8F37NgxTZo0SePGjdONN96oX/3qV60ex7kQXEbGod3ngy/MPfnkk76ioiKfz+fzPf/8876n\nn3661eN+/OMf+/bv3x/K0iLa8ePHfddff73v73//u6+urs6XnZ3t27FjR7Nj3n33Xd9Pf/pTn8/n\n823dutU3adIkM0qNaEbG4c9//rNv5syZJlUYHT788EPfp59+6rvppptafZxzIfgCjQHnQWjs3bvX\nt23bNp/P5/MdPnzYl56ezv8bQszIGHA+hMaRI0d8Pp/PV19f75s0aZLvww8/bPY450JoBBqH9p4P\nYT/z9M4772j8+PGSpPHjx+v3v/99m8f6aCzYZSorKzV48GANGjRIsbGxyszMVEVFRbNjKioq/GMz\nbNgwHTx4UDU1NWaUG7GMjAOCb8SIEerTp0+bj3MuBF+gMUBonHvuuRo6dKgkqVevXkpOTtbevXub\nHcP5EFxGxgChER8fL0mqr69XQ0ODEhISmj3OuRAagcahvcI+PH399dfq37+/JKl///76+uuvWz3O\nZrMpLy9PEyZM0OrVq0NZYkSqrq7WwIED/beTkpJUXV3d7Ji9e/dqwIAB/tsDBgxQVVVVyGqMBkbG\nwWaz6eOPP1Z2dramT5+uHTt2hLrMqMe5YD7Og9DbvXu3PvvsM1155ZXN7ud8CJ22xoDzITROnDih\ncePGafTo0brmmmt04YUXNnuccyE0Ao1De8+HmGAW21Xy8vJaTeJ33313s9s2m002m63V11i1apUS\nExP1zTffKC8vT0OGDNGIESOCUm80aOv3fLrTZ/uMPg/GGPl9XnrppXr33XcVHx8vt9utO++8Uxs2\nbAhBdTgV54K5OA9C69tvv9WcOXM0b9489erVq8XjnA/Bd6Yx4HwIjW7dumnNmjU6dOiQpk2bpi1b\ntuiaa65pdgznQvAFGof2ng9hMfO0YsUKrV27tsU/aWlpOuecc7Rv3z5JJxN8v379Wn2NxMRESVK/\nfv00duxYVVZWhqz+SJSUlKQ9e/b4b1dVVSkpKanZMYmJic2+QWntGHSOkXHo3bu3f8ra4XCovr5e\ntbW1Ia0z2nEumI/zIHTq6+s1Z84cZWdn6/rrr2/xOOdD8AUaA86H0DrrrLPkcDj017/+tdn9nAuh\n1dY4tPd8CIvwdCapqal68803JUmlpaWt/pE4evSoDh8+LEk6cuSI3n//fV188cUhrTPSXH755dq1\na5d2796turo6rV+/Xmlpac2OSUtLU2lpqSRp69at6tOnj3+JJbqGkXGoqanxf7PV9KVBZ9f7on04\nF8zHeRAaPp9P8+bNU3JyspxOZ6vHcD4El5Ex4HwIvm+++cbfAdrr9epPf/qTLr300mbHcC4En5Fx\naO/5EBbL9s5kxowZuvvuu/X666/rvPPO0+LFiyWd3Asyf/58FRUVqaamRnfddZckqaGhQVlZWbru\nuuvMLDvsxcTEaP78+Zo2bZpOnDihiRMnKjk5WS6XS5KUm5srh8Mht9utsWPHKj4+XosWLTK56shj\nZBw2bNigVatWqXv37oqPj9ezzz5rctWR55577tEHH3yg2tpaORwOzZ49W8ePH5fEuRAqgcaA8yA0\nPB6P3nrrLV1yySXKycmRJM2dO9c/Q875EHxGxoDzIfj27dunBx54QCdOnPDvuRk1ahSfk0LMyDi0\n93yw+WhBBwAAAAABhf2yPQAAAAAIBcITAAAAABhAeAIAAAAAAwhPAAAAAGAA4QkAAAAADCA8AQAA\nAIABYX+dJwCANaSmpiouLk5xcXH++5YtW6bvfe97JlbVfm+88YYef/xxDRo0SMePH9cFF1yghQsX\nBryI6Pbt2/Xll1/qhhtu8N+Xk5Oj1atXq0ePHsEuGwAQAsw8AQC6zJIlS1RaWur/J9yCkyTZbDaN\nGTNGpaWl+t3vfqcePXqosLAw4PO2bdumt99+u9l9paWlBCcAiCDMPAEAukxr113/4osvNG3aNK1c\nuVLf+973tHTpUu3cuVPPPvuslixZoh07dqi2tlZ79+7VRRddpMcff1y9e/dWXV2dfv3rX+svf/mL\n6urqdMkll2jBggXq2bOnHnjgAcXFxemrr75SVVWVrrrqKj355JOSpP/+7//WSy+9pB49eujEiRNa\nvHixhgwZop07d2rRokXav3+/6uvr9ZOf/EQTJkxo9Wc49ecYMWKE/vCHP0iSjh8/rpkzZ6q2tlbH\njh3TFVdcoUcffVSHDx/WkiVLdPjwYeXk5GjkyJGaN2+efvCDH+jjjz9WfHy8Kisr9ctf/lJHjx5V\nz549NW/ePF1xxRVBGgkAQDAQngAAXWbOnDn+ZXsxMTF67bXXlJycrLlz52ru3LmaPXu2fve73+n1\n11/3P8fj8eitt95Sv3799NBDD+k3v/mN7r//fr344ovq06ePXn31VUnS008/reeff15z586VJO3Y\nsUMrVqyQzWbT+PHjtXnzZo0aNUpPP/20ysrK1L9/f9XX16uhoUHHjx/Xz372Mz3zzDMaMmSIDh8+\nrIkTJ+qqq67SkCFD2vx56urqtGnTJl166aX+n+lXv/qVEhIS5PP59MADD+j1119Xbm6u5syZoz/8\n4Q967rnnWn2dOXPm6IknntC1116rzZs3a86cOSovL1dMDP8rBoBwwV9sAECXWbJkiS688MIW948b\nN06bN2/WXXfdpZUrV6pXr16STi6RS01NVb9+/SRJEydO1MKFCyVJ77zzjr799ltt2LBB0skAMnTo\nUP/zrr/+ev+SuEsvvVR/+9vfNGrUKF177bW6//779eMf/1gOh0Pnn3++duzYoZ07d+qee+7x11Rf\nX6+dO3e2Gp42b96snJwc7d69W4MHD/YHooaGBi1fvlzvvfeeGhoadPDgQcXHx0tqfdatyZdffqke\nPXro2muvlSSNGjVKsbGx+vLLL3XRRRe14zcMADAT4QkAEHR1dXX6/PPP1adPH+3bt6/ZY6eGjtMD\nyIIFC3TNNde0+pqn7iXq3r27jh8/LklaunSpKisr9ec//1k/+clPtGDBAg0cOFBnn322SktLDdU7\natQoPffcc/r22281bdo0vfnmm7r11lu1du1affTRR1q5cqV69uyp559/Xl999ZWh1wQAhD8aRgAA\nukxbsy9PPfWUrrjiCv3Xf/2XFixYoOrqav/x7777rr755htJJzvdNc3OpKamasWKFTp27Jgk6fDh\nw/riiy/O+P4NDQ3629/+piuvvFIzZszQmDFjtH37dg0ZMkR2u11r1qzxH/vFF1/o8OHDZ3y9Xr16\n6ZFHHtF//ud/6tChQzp8+LDOPvts9ezZU4cOHdLatWv9x5511lltvt73v/991dfXa8uWLZJOzmwd\nP35c3//+98/4/gAAa2HmCQDQZU7d8yRJCxcuVFVVlf7yl7/4W3bfeeeduueee/Tyyy/LZrNpxIgR\nuueee1RdXa2LLrpIDz74oCRpxowZWrJkiSZOnCibzSabzabZs2crOTm5zfdvaGjQgw8+qIMHD6pb\nt24aOHCgfvazn6l79+4qLCzU448/ruXLl+vEiRPq37+/fv3rX7d4jab3anLJJZfoRz/6kZ5//nnN\nmjVLFRUVuuGGG3TOOedo5MiR8nq9kk7OVi1fvlzjxo3T1VdfrXnz5vlfp0ePHnruuef0y1/+UkeO\nHFHPnj313HPPsd8JAMKMzXemRdoAAATRkiVLdOTIEd1///1mlwIAQEAs2wMAmOb0WR4AAKyMmScA\nAAAAMICZJwAAAAAwgPAEAAAAAAYQngAAAADAAMITAAAAABhAeAIAAAAAA/4/hGoTND3m3VcAAAAA\nSUVORK5CYII=\n",
358 "text/plain": [
359 "<matplotlib.figure.Figure at 0x7fac95a95790>"
360 ]
361 },
362 "metadata": {},
363 "output_type": "display_data"
364 }
365 ],
366 "source": [
367 "mutual_fund_data = local_csv('mutual_fund_data.csv')\n",
368 "expense = mutual_fund_data['Annual Expense Ratio'].values\n",
369 "sharpe = mutual_fund_data['Three Year Sharpe Ratio'].values\n",
370 "\n",
371 "plt.scatter(expense, sharpe)\n",
372 "plt.xlabel('Expense Ratio')\n",
373 "plt.ylabel('Sharpe Ratio')\n",
374 "\n",
375 "r_S = stats.spearmanr(expense, sharpe)\n",
376 "print 'Spearman Rank Coefficient: ', r_S[0]\n",
377 "print 'p-value: ', r_S[1]"
378 ]
379 },
380 {
381 "cell_type": "markdown",
382 "metadata": {},
383 "source": [
384 "Our p-value is below the cutoff, which means we accept the hypothesis that the two are correlated. The negative coefficient indicates that there is a negative correlation, and that more expensive mutual funds have worse sharpe ratios. However, there is some weird clustering in the data, it seems there are expensive groups with low sharpe ratios, and a main group whose sharpe ratio is unrelated to the expense. Further analysis would be required to understand what's going on here."
385 ]
386 },
387 {
388 "cell_type": "markdown",
389 "metadata": {},
390 "source": [
391 "## Real World Use Case: Evaluating a Ranking Model\n",
392 "\n",
393 "### NOTE: [Factor Analysis](https://www.quantopian.com/lectures/factor-analysis) now covers this topic in much greater detail\n",
394 "\n",
395 "Let's say that we have some way of ranking securities and that we'd like to test how well our ranking performs in practice. In this case our model just takes the mean daily return for the last month and ranks the stocks by that metric. \n",
396 "\n",
397 "We hypothesize that this will be predictive of the mean returns over the next month. To test this we score the stocks based on a lookback window, then take the spearman rank correlation of the score and the mean returns over the walk forward month."
398 ]
399 },
400 {
401 "cell_type": "code",
402 "execution_count": 9,
403 "metadata": {
404 "collapsed": false
405 },
406 "outputs": [
407 {
408 "name": "stdout",
409 "output_type": "stream",
410 "text": [
411 "Our Scores\n",
412 "\n",
413 "Equity(24757 [A]) -0.000624\n",
414 "Equity(2 [AA]) -0.003646\n",
415 "Equity(47842 [AAC]) 0.002745\n",
416 "Equity(45971 [AAL]) 0.005677\n",
417 "Equity(45415 [AAMC]) -0.020459\n",
418 "Equity(21 [AAME]) 0.002207\n",
419 "Equity(523 [AAN]) 0.003765\n",
420 "Equity(45503 [AAOI]) 0.004758\n",
421 "Equity(9681 [AAON]) 0.004228\n",
422 "Equity(23175 [AAP]) 0.003887\n",
423 "Equity(24 [AAPL]) -0.001870\n",
424 "Equity(40707 [AAT]) 0.001433\n",
425 "Equity(27922 [AAU]) -0.000576\n",
426 "Equity(27884 [AAV]) 0.003966\n",
427 "Equity(47422 [AAVL]) 0.017364\n",
428 "Equity(28378 [AAWW]) 0.004993\n",
429 "Equity(66 [AB]) -0.000934\n",
430 "Equity(39927 [ABAC]) -0.005923\n",
431 "Equity(31 [ABAX]) 0.000679\n",
432 "Equity(22574 [ABB]) -0.002108\n",
433 "Equity(43694 [ABBV]) -0.002467\n",
434 "Equity(22954 [ABC]) -0.000335\n",
435 "Equity(11232 [ABCB]) 0.002142\n",
436 "Equity(39052 [ABCD]) -0.000333\n",
437 "Equity(23176 [ABCO]) 0.008131\n",
438 "Equity(47935 [ABCW]) 0.002776\n",
439 "Equity(46877 [ABDC]) -0.000825\n",
440 "Equity(45840 [ABEV]) 0.000035\n",
441 "Equity(24761 [ABG]) 0.000830\n",
442 "Equity(45676 [ABGB]) -0.003712\n",
443 "dtype: float64\n",
444 "\n",
445 "\n",
446 "The Walk Forward Returns\n",
447 "\n",
448 "Equity(24757 [A]) -0.003616\n",
449 "Equity(2 [AA]) -0.000464\n",
450 "Equity(47842 [AAC]) -0.008585\n",
451 "Equity(45971 [AAL]) -0.004467\n",
452 "Equity(45415 [AAMC]) -0.030225\n",
453 "Equity(21 [AAME]) -0.000321\n",
454 "Equity(523 [AAN]) 0.001977\n",
455 "Equity(45503 [AAOI]) -0.009537\n",
456 "Equity(9681 [AAON]) -0.000094\n",
457 "Equity(23175 [AAP]) 0.000246\n",
458 "Equity(24 [AAPL]) 0.003940\n",
459 "Equity(40707 [AAT]) 0.005084\n",
460 "Equity(27922 [AAU]) 0.012719\n",
461 "Equity(27884 [AAV]) -0.005286\n",
462 "Equity(47422 [AAVL]) -0.018883\n",
463 "Equity(28378 [AAWW]) -0.003406\n",
464 "Equity(66 [AB]) -0.003890\n",
465 "Equity(39927 [ABAC]) -0.007934\n",
466 "Equity(31 [ABAX]) 0.003403\n",
467 "Equity(22574 [ABB]) -0.004947\n",
468 "Equity(43694 [ABBV]) -0.004363\n",
469 "Equity(22954 [ABC]) 0.002655\n",
470 "Equity(11232 [ABCB]) -0.001951\n",
471 "Equity(39052 [ABCD]) 0.019828\n",
472 "Equity(23176 [ABCO]) -0.001423\n",
473 "Equity(47935 [ABCW]) -0.002212\n",
474 "Equity(46877 [ABDC]) 0.001030\n",
475 "Equity(45840 [ABEV]) 0.005386\n",
476 "Equity(24761 [ABG]) -0.001088\n",
477 "Equity(45676 [ABGB]) 0.013701\n",
478 "dtype: float64\n",
479 "\n",
480 "\n",
481 "Correlation Coefficient: -0.159955506118\n",
482 "p-value: 0.398478813425\n"
483 ]
484 },
485 {
486 "data": {
487 "image/png": "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\nTV566aUMHTo006ZN64r6AAAAupUOdxfs1atX+vfv3/7P+vXr86//+q9dURsAAEC30+FMVl1dXV55\n5ZUMHz48w4cPz1VXXeWWQQAAgF3YbcjaunVrZs2alZNOOqmr6gEAAOjWdnu74EEHHZRrr722q2oB\nAADo9jpck3X88cfnueee64paANgLLS0tmT27IbNnN6SlpaXc5QDAAa/DNVkvv/xyxowZk6FDh+bQ\nQw9NklRUVOTv//7vO704AHavpaUlo0f/IE1NlyRJ5s+/KwsXXpSqqqoyVwYAB64OQ9aYMWMyZsyY\nHc5VVFR0WkEA7Ll58xr/ELAqkyRNTRdn3rxFueKKuvIWBgAHsA5D1ic/+cmuqAMAAKBH6HBN1gsv\nvJCpU6dm2LBhGTZsWK655pq88MILXVEbAB2or69NTc1dSVqTtKam5vupr68td1m8RdbVAfQsHYas\n6667Lu9+97tz//3357777svxxx+f6667ritqA6ADVVVVWbjwotx++6Lcfvsi67G6oe3r6q68clSu\nvHJURo/+gaAF0M11eLvgs88+m9tuu639eMqUKTut0QKgfKqqqqzB6sasqwPoeTqcySqVSlm/fn37\n8fr161MqlTq1KAAAgO6qw5msSZMmZdy4cTnjjDNSKpXS1NSUa665pitqA4Aer76+NvPn35WmpouT\n5A/r6i4qc1UA7IsOQ9b555+fE088MUuWLElFRUU+9alP5YQTTuiK2gCgx9u+rm7evEVJkvp66+oA\nurtdhqzvfOc7ufTSS5Nsey7WJZdc0mVFAcCBxLo6gJ5ll2uy7r///vafP/vZz3ZJMQBA57FVPEDX\n6HDji86wcePGTJw4MWeffXYuvfTSbNq06U3HLV68OKNHj86oUaMyZ86c9vMPPvhg6urqMmjQoPzy\nl7/sqrIBoNuyVTxA19llyNq6dWs2b96cV199tf3nN/6zL+bMmZMRI0bkoYceyvDhw3cIUNu1tbVl\nxowZmTt3bhoaGtLQ0JBnnnkmSfKnf/qnue2223LqqafuUx0AcKDYcav4yj9sFd9Y7rIAeqRdrsn6\n1a9+lVNOOaX9+I0/V1RUZMWKFXv9po8++mi+//3vJ0nGjRuXSy65JH/zN3+zw5jly5dnwIAB6d+/\nf5Kkrq4ujY2NGThwYAYOHLjX7w0AANCZdhmynn766U570w0bNqRv375Jkr59+2bDhg07jWlubs5x\n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\nVWNTU1NuuOGGbN26NePHj8/ll1+eJJkyZUp+97vf5aCDDsqAAQMyffr0HH300eX8SOyFfe2DUaNG\nZcuWLXn729+eJDn55JMzffr0cn0c9tK+9sGiRYsyc+bMvPjiizniiCMyaNCgzJ07t5wfibfgzb7X\n+fPnJ0kmTJiQJPnyl7+cf/mXf0nv3r0za9asfPCDH9zltXRf+9ILV199dZYuXZqNGzfm6KOPzpQp\nU3LBBReU7bOw9/a2D/7t3/4tF198cd7//ve33zZ29dVX52Mf+1jZPgt7b2/74D//8z/z+c9/Plu3\nbs3WrVszduzYXHbZZbt9rx4VsgAAAMqtR90uCAAAUG5CFgAAQIGELAAAgAIJWQAAAAUSsgAAAAok\nZAEAABSoV7kLAIC98eCDD2bOnDkplUp57bXXcuKJJ+ZrX/taucsCAM/JAqD7Wbt2bcaOHZsFCxak\nuro6SbJixYoMGjRon1+7ra0tBx988D6/DgAHLjNZAHQ769evT69evfL2t7+9/dz2gPWzn/0sN998\nc1555ZUkyd/+7d/mIx/5SJYvX56vfOUr2bx5cw499NBce+21+dCHPpRVq1blggsuyCc/+cksWbIk\n/+N//I98/OMfz8yZM7N69eq0tLTk3HPPzeWXX56tW7fmy1/+cpYsWZK3ve1tOfTQQ/N//s//Kcuf\nAQD7LyELgG5n0KBBOemkk3LGGWfktNNOy9ChQzN27Ngkyac//encdtttOfnkk7N169a8/PLLaW1t\nzZQpU3LjjTdm+PDhefzxxzNlypQsWrQoSfLf//3fOemkk/K5z30uSTJx4sT8z//5P3PqqaemtbU1\nEydOzIc+9KEceeSRWbp0aR588MEkyUsvvVSePwAA9mtCFgDdTkVFRf7hH/4hv/71r7N06dI0Njbm\n29/+dj772c9m4MCBOfnkk5MkBx10UPr06ZP//M//zNve9rYMHz48SXL66aensrIyv/vd79K7d+8c\ncsgh+cQnPpEkefXVV7N06dK8+OKL7e/36quv5re//W3OP//8vP766/nCF76Q4cOH5+Mf/3jXf3gA\n9ntCFgDd1gknnJATTjghf/mXf5m6urq9fp3evXu3/7x169ZUVFTknnvuedO1Wf/8z/+cpUuX5rHH\nHsstt9ySe++9N3379t3r9wag57GFOwDdTnNzc372s5+1H69ZsyYvvPBC3vve9+aZZ57Jk08+mWTb\nJhabNm3Ke97znmzZsiVLlixJkjz++ON5/fXX8573vGen1z788MNz6qmn5o477mg/t3r16qxfvz4v\nvPBCNm/enD//8z/PNddckyOOOCKrVq3q5E8LQHdjJguAbqetrS233XZbnn/++VRVVWXr1q2ZOnVq\nPvjBD+ab3/xmbrzxxrz66qs56KCD8rnPfS6nn356vvGNb+QrX/lKXn311Rx66KH5xje+kV69tv3P\nYEVFxQ6vf8stt2TWrFk577zzkmwLXjfccEM2b96c//W//lfa2trS1taWmpqaDBkypMs/PwD7N1u4\nAwAAFMjtggAAAAUSsgAAAAokZAEAABRIyAIAACiQkAUAAFAgIQsAAKBAQhYAAECB/v9JJVmuksnd\nlQAAAABJRU5ErkJggg==\n",
488 "text/plain": [
489 "<matplotlib.figure.Figure at 0x7fac94f0c110>"
490 ]
491 },
492 "metadata": {},
493 "output_type": "display_data"
494 }
495 ],
496 "source": [
497 "symbol_list = ['A', 'AA', 'AAC', 'AAL', 'AAMC', 'AAME', 'AAN', 'AAOI', 'AAON', 'AAP', 'AAPL', 'AAT', 'AAU', 'AAV', 'AAVL', 'AAWW', 'AB', 'ABAC', 'ABAX', 'ABB', 'ABBV', 'ABC', 'ABCB', 'ABCD', 'ABCO', 'ABCW', 'ABDC', 'ABEV', 'ABG', 'ABGB']\n",
498 "\n",
499 "# Get the returns over the lookback window\n",
500 "start = '2014-12-01'\n",
501 "end = '2015-01-01'\n",
502 "historical_returns = get_pricing(symbol_list, fields='price', start_date=start, end_date=end).pct_change()[1:]\n",
503 "\n",
504 "# Compute our stock score\n",
505 "scores = np.mean(historical_returns)\n",
506 "print 'Our Scores\\n'\n",
507 "print scores\n",
508 "print '\\n'\n",
509 "\n",
510 "start = '2015-01-01'\n",
511 "end = '2015-02-01'\n",
512 "walk_forward_returns = get_pricing(symbol_list, fields='price', start_date=start, end_date=end).pct_change()[1:]\n",
513 "walk_forward_returns = np.mean(walk_forward_returns)\n",
514 "print 'The Walk Forward Returns\\n'\n",
515 "print walk_forward_returns\n",
516 "print '\\n'\n",
517 "\n",
518 "plt.scatter(scores, walk_forward_returns)\n",
519 "plt.xlabel('Scores')\n",
520 "plt.ylabel('Walk Forward Returns')\n",
521 "\n",
522 "r_s = stats.spearmanr(scores, walk_forward_returns)\n",
523 "print 'Correlation Coefficient: ' + str(r_s[0])\n",
524 "print 'p-value: ' + str(r_s[1])"
525 ]
526 },
527 {
528 "cell_type": "markdown",
529 "metadata": {},
530 "source": [
531 "The p-value indicates that our hypothesis is false and we accept the null hypothesis that our ranking was no better than random. This is a really good check of any ranking system one devises for constructing a long-short equity portfolio."
532 ]
533 },
534 {
535 "cell_type": "markdown",
536 "metadata": {},
537 "source": [
538 "*This presentation is for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation for any security; nor does it constitute an offer to provide investment advisory or other services by Quantopian, Inc. (\"Quantopian\"). Nothing contained herein constitutes investment advice or offers any opinion with respect to the suitability of any security, and any views expressed herein should not be taken as advice to buy, sell, or hold any security or as an endorsement of any security or company. In preparing the information contained herein, Quantopian, Inc. has not taken into account the investment needs, objectives, and financial circumstances of any particular investor. Any views expressed and data illustrated herein were prepared based upon information, believed to be reliable, available to Quantopian, Inc. at the time of publication. Quantopian makes no guarantees as to their accuracy or completeness. All information is subject to change and may quickly become unreliable for various reasons, including changes in market conditions or economic circumstances.*"
539 ]
540 }
541 ],
542 "metadata": {
543 "kernelspec": {
544 "display_name": "Python 2",
545 "language": "python",
546 "name": "python2"
547 },
548 "language_info": {
549 "codemirror_mode": {
550 "name": "ipython",
551 "version": 2
552 },
553 "file_extension": ".py",
554 "mimetype": "text/x-python",
555 "name": "python",
556 "nbconvert_exporter": "python",
557 "pygments_lexer": "ipython2",
558 "version": "2.7.12"
559 }
560 },
561 "nbformat": 4,
562 "nbformat_minor": 0
563 }