{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Probabilistic Matrix Factorization for Making Personalized Recommendations"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The model discussed in this analysis was developed by Ruslan Salakhutdinov and Andriy Mnih. All of the code and supporting text, when not referenced, is the original work of [Mack Sweeney](https://www.linkedin.com/in/macksweeney).\n",
    "\n",
    "## Motivation\n",
    "\n",
    "Say I download a handbook of a hundred jokes, and I'd like to know very quickly which ones will be my favorite. So maybe I read a few, I laugh, I read a few more, I stop laughing, and I indicate on a scale of -10 to 10 how funny I thought each joke was. Maybe I do this for 5 jokes out of the 100. Now I go to the back of the book, and there's a little program included for calculating my preferences for all the other jokes. I enter in my preference numbers and shazam! The program spits out a list of all 100 jokes, sorted in the order I'll like them. That certainly would be nice. Today we'll write a program that does exactly this.\n",
    "\n",
    "We'll start out by getting some intuition for how our model will work. Then we'll formalize our intuition. Afterwards, we'll examine the dataset we are going to use. Once we have some notion of what our data looks like, we'll define some baseline methods for predicting preferences for jokes. Following that, we'll look at Probabilistic Matrix Factorization (PMF), which is a more sophisticated Bayesian method for predicting preferences. Having detailed the PMF model, we'll use PyMC3 for MAP estimation and MCMC inference. Finally, we'll compare the results obtained with PMF to those obtained from our baseline methods and discuss the outcome.\n",
    "\n",
    "## Intuition\n",
    "\n",
    "Normally if we want recommendations for something, we try to find people who are similar to us and ask their opinions. If Bob, Alice, and Monty are all similar to me, and they all like knock-knock jokes, I'll probably like knock-knock jokes. Now this isn't always true. It depends on what we consider to be \"similar\". In order to get the best bang for our buck, we really want to look for people who have the most similar sense of humor. Humor being a complex beast, we'd probably like to break it down into something more understandable. We might try to characterize each joke in terms of various factors. Perhaps jokes can be dry, sarcastic, crude, sexual, political, etc. Now imagine we go through our handbook of jokes and assign each joke a rating in each of the categories. How dry is it? How sarcastic is it? How much does it use sexual innuendos? Perhaps we use numbers between 0 and 1 for each category. Intuitively, we might call this the joke's humor profile.\n",
    "\n",
    "Now let's suppose we go back to those 5 jokes we rated. At this point, we can get a richer picture of our own preferences by looking at the humor profiles of each of the jokes we liked and didn't like. Perhaps we take the averages across the 5 humor profiles and call this our ideal type of joke. In other words, we have computed some notion of our inherent _preferences_ for various types of jokes. Suppose Bob, Alice, and Monty all do the same. Now we can compare our preferences and determine how similar each of us really are. I might find that Bob is the most similar and the other two are still more similar than other people, but not as much as Bob. So I want recommendations from all three people, but when I make my final decision, I'm going to put more weight on Bob's recommendation than those I get from Alice and Monty.\n",
    "\n",
    "While the above procedure sounds fairly effective as is, it also reveals an unexpected additional source of information. If we rated a particular joke highly, and we know its humor profile, we can compare with the profiles of other jokes. If we find one with very close numbers, it is probable we'll also enjoy this joke. Both this approach and the one above are commonly known as _neighborhood approaches_. Techniques that leverage both of these approaches simultaneously are often called _collaborative filtering_ [[1]](http://www2.research.att.com/~volinsky/papers/ieeecomputer.pdf). The first approach we talked about uses user-user similarity, while the second uses item-item similarity. Ideally, we'd like to use both sources of information. The idea is we have a lot of items available to us, and we'd like to work together with others to filter the list of items down to those we'll each like best. My list should have the items I'll like best at the top and those I'll like least at the bottom. Everyone else wants the same. If I get together with a bunch of other people, we all read 5 jokes, and we have some efficient computational process to determine similarity, we can very quickly order the jokes to our liking.\n",
    "\n",
    "## Formalization\n",
    "\n",
    "Let's take some time to make the intuitive notions we've been discussing more concrete. We have a set of $M$ jokes, or _items_ ($M = 100$ in our example above). We also have $N$ people, whom we'll call _users_ of our recommender system. For each item, we'd like to find a $D$ dimensional factor composition (humor profile above) to describe the item. Ideally, we'd like to do this without actually going through and manually labeling all of the jokes. Manual labeling would be both slow and error-prone, as different people will likely label jokes differently. So we model each joke as a $D$ dimensional vector, which is its latent factor composition. Furthermore, we expect each user to have some preferences, but without our manual labeling and averaging procedure, we have to rely on the latent factor compositions to learn $D$ dimensional latent preference vectors for each user. The only thing we get to observe is the $N \\times M$ ratings matrix $R$ provided by the users. Entry $R_{ij}$ is the rating user $i$ gave to item $j$. Many of these entries may be missing, since most users will not have rated all 100 jokes. Our goal is to fill in the missing values with predicted ratings based on the latent variables $U$ and $V$. We denote the predicted ratings by $R_{ij}^*$. We also define an indicator matrix $I$, with entry $I_{ij} = 0$ if $R_{ij}$ is missing and $I_{ij} = 1$ otherwise.\n",
    "\n",
    "So we have an $N \\times D$ matrix of user preferences which we'll call $U$ and an $M \\times D$ factor composition matrix we'll call $V$. We also have a $N \\times M$ rating matrix we'll call $R$. We can think of each row $U_i$ as indications of how much each user prefers each of the $D$ latent factors. Each row $V_j$ can be thought of as how much each item can be described by each of the latent factors. In order to make a recommendation, we need a suitable prediction function which maps a user preference vector $U_i$ and an item latent factor vector $V_j$ to a predicted ranking. The choice of this prediction function is an important modeling decision, and a variety of prediction functions have been used. Perhaps the most common is the dot product of the two vectors, $U_i \\cdot V_j$ [[1]](http://www2.research.att.com/~volinsky/papers/ieeecomputer.pdf).\n",
    "\n",
    "To better understand CF techniques, let us explore a particular example. Imagine we are seeking to recommend jokes using a model which infers five latent factors, $V_j$, for $j = 1,2,3,4,5$. In reality, the latent factors are often unexplainable in a straightforward manner, and most models make no attempt to understand what information is being captured by each factor.  However, for the purposes of explanation, let us assume the five latent factors might end up capturing the humor profile we were discussing above. So our five latent factors are: dry, sarcastic, crude, sexual, and political. Then for a particular user $i$, imagine we infer a preference vector $U_i = <0.2, 0.1, 0.3, 0.1, 0.3>$. Also, for a particular item $j$, we infer these values for the latent factors: $V_j = <0.5, 0.5, 0.25, 0.8, 0.9>$. Using the dot product as the prediction function, we would calculate 0.575 as the ranking for that item, which is more or less a neutral preference given our -10 to 10 rating scale.\n",
    "\n",
    "$$ 0.2 \\times 0.5 + 0.1 \\times 0.5 + 0.3 \\times 0.25 + 0.1 \\times 0.8 + 0.3 \\times 0.9 = 0.575 $$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data\n",
    "\n",
    "The [v1 Jester dataset](http://eigentaste.berkeley.edu/dataset/) provides something very much like the handbook of jokes we have been discussing. The original version of this dataset was constructed in conjunction with the development of the [Eigentaste recommender system](http://eigentaste.berkeley.edu/about.html) [[2]](http://goldberg.berkeley.edu/pubs/eigentaste.pdf). At this point in time, v1 contains over 4.1 million continuous ratings in the range [-10, 10] of 100 jokes from 73,421 users. These ratings were collected between Apr. 1999 and May 2003. In order to reduce the training time of the model for illustrative purposes, 1,000 users who have rated all 100 jokes will be selected randomly. We will implement a model that is suitable for collaborative filtering on this data and evaluate it in terms of root mean squared error (RMSE) to validate the results.\n",
    "\n",
    "Let's begin by exploring our data. We want to get a general feel for what it looks like and a sense for what sort of patterns it might contain."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>...</th>\n",
       "      <th>91</th>\n",
       "      <th>92</th>\n",
       "      <th>93</th>\n",
       "      <th>94</th>\n",
       "      <th>95</th>\n",
       "      <th>96</th>\n",
       "      <th>97</th>\n",
       "      <th>98</th>\n",
       "      <th>99</th>\n",
       "      <th>100</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4.08</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>6.36</td>\n",
       "      <td>4.37</td>\n",
       "      <td>-2.38</td>\n",
       "      <td>-9.66</td>\n",
       "      <td>-0.73</td>\n",
       "      <td>-5.34</td>\n",
       "      <td>8.88</td>\n",
       "      <td>9.22</td>\n",
       "      <td>...</td>\n",
       "      <td>2.82</td>\n",
       "      <td>-4.95</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>7.86</td>\n",
       "      <td>-0.19</td>\n",
       "      <td>-2.14</td>\n",
       "      <td>3.06</td>\n",
       "      <td>0.34</td>\n",
       "      <td>-4.32</td>\n",
       "      <td>1.07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-6.17</td>\n",
       "      <td>-3.54</td>\n",
       "      <td>0.44</td>\n",
       "      <td>-8.50</td>\n",
       "      <td>-7.09</td>\n",
       "      <td>-4.32</td>\n",
       "      <td>-8.69</td>\n",
       "      <td>-0.87</td>\n",
       "      <td>-6.65</td>\n",
       "      <td>-1.80</td>\n",
       "      <td>...</td>\n",
       "      <td>-3.54</td>\n",
       "      <td>-6.89</td>\n",
       "      <td>-0.68</td>\n",
       "      <td>-2.96</td>\n",
       "      <td>-2.18</td>\n",
       "      <td>-3.35</td>\n",
       "      <td>0.05</td>\n",
       "      <td>-9.08</td>\n",
       "      <td>-5.05</td>\n",
       "      <td>-3.45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>6.84</td>\n",
       "      <td>3.16</td>\n",
       "      <td>9.17</td>\n",
       "      <td>-6.21</td>\n",
       "      <td>-8.16</td>\n",
       "      <td>-1.70</td>\n",
       "      <td>9.27</td>\n",
       "      <td>1.41</td>\n",
       "      <td>-5.19</td>\n",
       "      <td>-4.42</td>\n",
       "      <td>...</td>\n",
       "      <td>7.23</td>\n",
       "      <td>-1.12</td>\n",
       "      <td>-0.10</td>\n",
       "      <td>-5.68</td>\n",
       "      <td>-3.16</td>\n",
       "      <td>-3.35</td>\n",
       "      <td>2.14</td>\n",
       "      <td>-0.05</td>\n",
       "      <td>1.31</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-3.79</td>\n",
       "      <td>-3.54</td>\n",
       "      <td>-9.42</td>\n",
       "      <td>-6.89</td>\n",
       "      <td>-8.74</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>-5.29</td>\n",
       "      <td>-8.93</td>\n",
       "      <td>-7.86</td>\n",
       "      <td>-1.60</td>\n",
       "      <td>...</td>\n",
       "      <td>4.37</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>4.17</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>-3.40</td>\n",
       "      <td>-4.95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.31</td>\n",
       "      <td>1.80</td>\n",
       "      <td>2.57</td>\n",
       "      <td>-2.38</td>\n",
       "      <td>0.73</td>\n",
       "      <td>0.73</td>\n",
       "      <td>-0.97</td>\n",
       "      <td>5.00</td>\n",
       "      <td>-7.23</td>\n",
       "      <td>-1.36</td>\n",
       "      <td>...</td>\n",
       "      <td>1.46</td>\n",
       "      <td>1.70</td>\n",
       "      <td>0.29</td>\n",
       "      <td>-3.30</td>\n",
       "      <td>3.45</td>\n",
       "      <td>5.44</td>\n",
       "      <td>4.08</td>\n",
       "      <td>2.48</td>\n",
       "      <td>4.51</td>\n",
       "      <td>4.66</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 100 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      1     2     3     4     5     6     7     8     9    10  ...     91  \\\n",
       "0  4.08 -0.29  6.36  4.37 -2.38 -9.66 -0.73 -5.34  8.88  9.22  ...   2.82   \n",
       "1 -6.17 -3.54  0.44 -8.50 -7.09 -4.32 -8.69 -0.87 -6.65 -1.80  ...  -3.54   \n",
       "2  6.84  3.16  9.17 -6.21 -8.16 -1.70  9.27  1.41 -5.19 -4.42  ...   7.23   \n",
       "3 -3.79 -3.54 -9.42 -6.89 -8.74 -0.29 -5.29 -8.93 -7.86 -1.60  ...   4.37   \n",
       "4  1.31  1.80  2.57 -2.38  0.73  0.73 -0.97  5.00 -7.23 -1.36  ...   1.46   \n",
       "\n",
       "     92    93    94    95    96    97    98    99   100  \n",
       "0 -4.95 -0.29  7.86 -0.19 -2.14  3.06  0.34 -4.32  1.07  \n",
       "1 -6.89 -0.68 -2.96 -2.18 -3.35  0.05 -9.08 -5.05 -3.45  \n",
       "2 -1.12 -0.10 -5.68 -3.16 -3.35  2.14 -0.05  1.31  0.00  \n",
       "3 -0.29  4.17 -0.29 -0.29 -0.29 -0.29 -0.29 -3.40 -4.95  \n",
       "4  1.70  0.29 -3.30  3.45  5.44  4.08  2.48  4.51  4.66  \n",
       "\n",
       "[5 rows x 100 columns]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import os\n",
    "import shutil\n",
    "DATA_DIR = '../data/pmf'\n",
    "\n",
    "data = pd.read_csv(os.path.join(DATA_DIR, 'jester-dataset-v1-dense-first-1000.csv'))\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nkqrKUFKSJEmSJElSVRlKSpIkSZIkSaoqQ0lJkiRJkiRJVWUoKUmSJEmSJKmqDCUlSZIkSZIkVZWh\npCRJkiRJkqSqMpSUJEmSJEmSVFWGkpIkSZIkSZKqylBSkiRJkiRJUlUZSkqSJEmSJEmqKkNJSZIk\nSZIkSVVlKClJkiRJkiSpqgwlJUmSJEmSJFWVoaQkSZIkSZKkqjKUlCRJkiRJklRVhpKSJEmSJEmS\nqspQUpIkSZIkSVJVGUpKkiRJkiRJqipDSUmSJEmSJElVZSgpSZIkSZIkqaoMJSVJkiRJkiRVlaGk\nJEmSJEmSpKoylJQkSZIkSZJUVYaSkiRJkiRJkqrKUFKSJEmSJElSVRlKSpIkSZIkSaoqQ0lJkiRJ\nkiRJVWUoKUmSJEmSJKmqDCUlSZIkSZIkVZWhpCRJkiRJkqSqMpSUJEmSJEmSVFWGkpIkSZIkSZKq\nylBSkiRJkiRJUlUZSkqSJEmSJEmqKkNJSZIkSZIkSVVlKClJkiRJkiSpqgwlJUmSJEmSJFWVoaQk\nSZIkSZKkqjKUlCRJkiRJklRVyxVdgCRJC/Lii3DFFXDbbfDUU9C1KzQ1wa67wpe/DCuuWHSFkiRJ\nkqSl5UpJSVJNef99OPVUWGstOOUU6NkT9torh5FvvglHHZWfu/hiSKnoaiVJkiRJS8OVkpKkmvHy\ny7DvvnD33XDssXDccbDqqh8dM2MGfP/7cOSRcPvt8POfwworFFOvJEmSJGnpGEpKkmrCv/4F228P\nr70GEybAttsueNygQfCzn+WVkwceCFtuCX/+M3zsY9WtV5IkSZK09Ny+LUkq3EsvwU47wbx58OCD\n7QeS5fbaC+67L589ueOO8Morla9TkiRJktQxDCUlSYV66y0YORJmz85NbQYPXvzXbrhhXlX53HP5\nHm+/Xbk6JUmSJEkdx+3bkqTCpARf/zo0N8M998C66y75PTbYAG69FbbZBg47DK66CiI6vlZJkiTV\nnxkzZtDa2lrR9+jbty+DBg2q6HtInZGhpCSpMD//OVx5Jfzyl/DpTy/9fYYPz+dMjhoFm20GY8Z0\nXI2SJEmqTzNmzKCpaShz5lR2u03Pnr2YNq3ZYFJqw1BSklSIxx+Ho46Cr34VRo9e9vvttx889FDu\n2r3FFjmclCRJktrT2tpaCiSvAoZW6F2amTNnNK2trYaSUhuGkpKkqps7Fw4+OHfSPu+8jrvvGWfA\n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\nm5pff14PKyiOyfHA2gHMpPw2A3v47fHcYTQe25WTUtoWES8BXnG5ejYCQXHs138yPRqab6ltAAAC\nRUlEQVT4jyyJ1CqsR9WZNak6sx7V26xHK69palKbkv2UUtoCbBmgu1sGXBERo+rW8ZkJbAOeG6DH\nUAP18/VwHLAX+O+BS6RmkFLaFRErgRkUFw/oWFh8BuCi8hUTEQdTFID35M6icqWU1kfERopj/xl4\ne1HxE4Fv5symwc16VJ1Zk6oz61HVsx6ttmaqSW1Klqi2kOxI4EigLSIm125aV1vH4V8pir3v1S7P\nPha4Frg9pbQrR2Y1RkRMpTjgHwf+h2L9nhuB76WUtuXMpoa5Ebi7VgyuAL4ADAPuzhlKjRcRXwcW\nA68A44CrgV3Agpy51BgR8U6KIj9qm36/9vt+a0rpVeBm4MsRsQ54meL3/AbghxniqoKsR1XPmrRy\nrEcrynq0egZLTRrFBbdUhoiYD3yii5ump5SerI05ArgTOBnYQfEL4m9SSntLiqkSRMRxwB0Ui0oP\nBdZTfEp1kwV/64qIS4DLKabFrwY+l1J6Om8qNVpELAA+BPwu8EvgKeBvU0rrswZTQ0TEn1D8cd+5\nwPpuSulTtTFXARcBhwH/BsxJKa0rM6eqy3pU9axJq8d6tJqsR6tnsNSkNiUlSZIkSZIklcqrb0uS\nJEmSJEkqlU1JSZIkSZIkSaWyKSlJkiRJkiSpVDYlJUmSJEmSJJXKpqQkSZIkSZKkUtmUlCRJkiRJ\nklQqm5KSJEmSJEmSSmVTUpIkSZIkSVKpbEpKkiRJkiRJKpVNSUmSJEmSJEmlsikpSZIkSZIkqVQ2\nJSVJkiRJkiSV6n8B3LRhR7laFtgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1b60454d30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Extract the ratings from the DataFrame\n",
    "all_ratings = np.ndarray.flatten(data.values)\n",
    "ratings = pd.Series(all_ratings)\n",
    "\n",
    "# Plot histogram and density.\n",
    "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 7))\n",
    "ratings.plot(kind='density', ax=ax1, grid=False)\n",
    "ax1.set_ylim(0, 0.08)\n",
    "ax1.set_xlim(-11, 11)\n",
    "\n",
    "# Plot histogram\n",
    "ratings.plot(kind='hist', ax=ax2, bins=20, grid=False)\n",
    "ax2.set_xlim(-11, 11)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    100000.000000\n",
       "mean          0.996219\n",
       "std           5.265215\n",
       "min          -9.950000\n",
       "25%          -2.860000\n",
       "50%           1.650000\n",
       "75%           5.290000\n",
       "max           9.420000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ratings.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "This must be a decent batch of jokes. From our exploration above, we know most ratings are in the range -1 to 10, and positive ratings are more likely than negative ratings. Let's look at the means for each joke to see if we have any particularly good (or bad) humor here.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f1b53b11400>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nLTb73fGxjq87/o7LS/LF6caHfHy6a+9u45+fkDWzYY99bbrn93i68SOvSfKgtd3ak6S19nfpfi9v\nSvKkdKHgC5I8YJvjC1bWjC05Hsvv343LflCSk+lm4P7u1tp3r9t3/bXxsnQh4P3TvZZWj/fgJN+X\nbkbrH0/XWvfo+NhvHO/+2+kCwa9P8tR0183Lk9x3i/FCAYB9rIwhDACwGKrqL5L8Q2vtamYeZsqq\n6pYkL2itfd2s6wIA9MtEWwxW1Y9U1YfXPf56kmUCACy6qrp2PLbf2mX3SfJZ6bqgsk+MJ9L52CR/\nNeu6AAD9M40xBl+fbtbB1fGHPjiFMgEAFtldkvx+VZ1K1836cLqx/96eblZo5tx47MAHpZus55+T\n/OpsawQA9NE0gsEPttZunkI5AAB98e4kf57kP6YbJ+996cbh+/7W2rtnWTG27YZ0YzS+PsmX78GE\nNAAAOzbRMQar6kfSDb78j+kGwv6TdB9Yb5pYoQAAAADAFU06GHxgkjskOZ/kuiSPS3LnJJ/ZWnvf\nxAoGAAAAALY01VmJq+pQkhuTnGitPWOD9XdK8sAkb03XwhAAAAAA2L6lJHdL8pLW2i1bbTiNMQZv\n1Vq7UFVvTHL3TTZ5YJJfmWKVAAAAAGARPTzJc7faYKrBYFXdIV0o+OxNNnlrkpw6dSqHDx++ZMWJ\nEydy8uTJHZW3030mvf2ilDGPdZpGGfNYp2mUMY91mkYZ81inaZQxj3WaRhnzWKdplDGPdZpGGfNY\np2mUMY91mkYZ81inaZQxj3WaRhnzWKdplDGPdZpGGfNYp2mUMY91mkYZ81inaZQxj3WaRhnzWKdp\nlLFXdTp37lyOHz+ejHO2rUw0GKyqH083Q96NSe6S5PFJPpDk9Ca7rCTJ4cOHc+TIkUtWHDp06LJl\nV7LTfSa9/aKUMY91mkYZ81inaZQxj3WaRhnzWKdplDGPdZpGGfNYp2mUMY91mkYZ81inaZQxj3Wa\nRhnzWKdplDGPdZpGGfNYp2mUMY91mkYZ81inaZQxj3WaRhnzWKdplDGPdZpGGfNYp2mUMYE6XXGY\nvkm3GPykdE0W75Tk5iSvTPK5V+rfDAAAAABM1kSDwdbasUkeHwAAAADYnQOzrgAAAAAAMH3XPO5x\nj5t1HW71+Mc//rokj3rUox6V66677rL197znPXd8zJ3uM+ntF6WMeazTNMqYxzpNo4x5rNM0ypjH\n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\n6woA82d5eTmj0WjDdYPBIMPhcMo1AgAAAPaaYBC4xPLycq6//nBWVi5uuH5p6WDOnz8nHARg1za7\nAeXmEwDAdAkGgUuMRqNxKHgqyeF1a89lZeV4RqORL24A7MpWN6DcfAIA+mbWPfYEg8AmDic5MutK\nALBgNr8B5eYTANAv89BjTzAIAMAMuAEFAPTbPPTYEwwCAHvK+HEAALATs7thOvFgsKq+Ncl3J/nE\nJH+Z5Ntba3826XIBgOkzfhwAAOwfByZ58Kr6D0l+IsmPJPlX6YLBl1TVYJLlAgCzcWl3iDNrHqey\nsnJx04GVAQCA6ZtoMJjkRJJfbK09u7X2hiSPTnIxyTdMuFwAYKZWu0OsPtaPmQIAAMzaxLoSV9Xt\nkhxN8sTVZa21VlW/n+TzJlUukzHr6bMBAAAA2FuTHGNwkOSaJO9ct/ydSa6fYLlzZ78Pwj4P02cD\nAAAAsLf2wazE567w817ss/3td9pybveDsO/sHHYaPu5k+9vGi3pskruu2+PGrKz86BbTZ0/uudjN\nPrsLaTc63t6VsZs6TaOMSZ/3xsfbX6/vadRpemXs/+d7Gtf5Tuu0m+2n87udv/Pe6T579T641T47\nrdPutp9GGZN9vnd/A3R/n/dutp/03+/dXOfz+H6+0+3n9fW9CO/n8/j6dp1fzt+xSZThvGdXhvOe\nXBmbaK1N5JHkdkk+kOTL1y1/ZpLf2mSfI0naDTfc0O53v/u1AweuaUkueywtHWw33nhjW+/GG29s\nS0sHt73PXm4/jTKct/N23s7beTtv5+28nbfzdt7O23k7b+ftvJ23895o+wMHrmn3u9/92g033LC6\n7Ei7Qn43sRaDrbUPVNWZJPdN8jtJUlU1/vmnt9r35MmTOXLkyI7v7AyHw5w/f27b++x0+0tnWlw/\niPq5rKwcv6zl3KTrtHW9Nq7TTrffqk57dR67Oe+9e/727rwn/VxMo4xpnPc0nu9FeX1PuoxFeb4X\n5X1t0r/beT3vST/fXt+Te75383dsEc57Hj+v7eY6n8f380X5+70I7+fz+Pp2nc/Xdd7X93Pn7byn\nVaerKePs2bM5evTohse8zJWSw6t5JPmqdLMQPyLJpyf5xSS3JPm4TbY/kqSdOXPmspR2Hpw5c2ac\nuJ5pSVv36NbNou6b12vjOu10+0UxjfOexnMxj8/3IlxT8/r6nkfz+HzPY512Y1HOY9L27n3Q7/Zq\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1b53b11470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "joke_means = data.mean(axis=0)\n",
    "joke_means.plot(kind='bar', grid=False, figsize=(16, 6),\n",
    "                title=\"Mean Ratings for All 100 Jokes\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "While the majority of the jokes generally get positive feedback from users, there are definitely a few that stand out as poor humor. Let's take a look at the worst and best joke, just for fun."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The worst joke:\n",
      "---------------\n",
      "How many teddybears does it take to change a lightbulb?\n",
      "\n",
      "It takes only one teddybear, but it takes a whole lot of lightbulbs.\n",
      "\n",
      "\n",
      "The best joke:\n",
      "--------------\n",
      "*A radio conversation of a US naval \n",
      "ship with Canadian authorities ... *\n",
      "\n",
      "Americans: Please divert your course 15 degrees to the North to avoid a\n",
      "collision.\n",
      "\n",
      "Canadians: Recommend you divert YOUR course 15 degrees to the South to \n",
      "avoid a collision.\n",
      "\n",
      "Americans: This is the Captain of a US Navy ship.  I say again, divert \n",
      "YOUR course.\n",
      "\n",
      "Canadians: No.  I say again, you divert YOUR course.\n",
      "\n",
      "Americans: This is the aircraft carrier USS LINCOLN, the second largest ship in the United States' Atlantic Fleet. We are accompanied by three destroyers, three cruisers and numerous support vessels. I demand that you change your course 15 degrees north, that's ONE FIVE DEGREES NORTH, or counter-measures will be undertaken to ensure the safety of this ship.\n",
      "\n",
      "Canadians: *This is a lighthouse.  Your call*.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "import json\n",
    "# Worst and best joke?\n",
    "worst_joke_id = joke_means.argmin()\n",
    "best_joke_id = joke_means.argmax()\n",
    "\n",
    "# Let's see for ourselves. Load the jokes.\n",
    "with open(os.path.join(DATA_DIR, 'jokes.json')) as buff:\n",
    "    joke_dict = json.load(buff)\n",
    "\n",
    "print('The worst joke:\\n---------------\\n%s\\n' % joke_dict[worst_joke_id])\n",
    "print('The best joke:\\n--------------\\n%s' % joke_dict[best_joke_id])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Make sense to me. We now know there are definite popularity differences between the jokes. Some of them are simply funnier than others, and some are downright lousy. Looking at the joke means allowed us to discover these general trends. Perhaps there are similar trends across users. It might be the case that some users are simply more easily humored than others. Let's take a look."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABQYAAAIACAYAAADQXbE+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3X+cJFdd7//3Z7LZbAJxV5gVx+iIglmCQmAjSkQkitco\n5Bulb1ZZfl1E2AWvP1jAiwre7PoL0cSNCsKMGH4ECSZx/V7MRfwBKmoWN+xCWDFsRCEtpMEZcMKP\n7GYS5tw/qmtT01PVXd1dP86pej0fj3nsbE91n9Nd1adOfeqczzHnnAAAAAAAAAC0y0zdFQAAAAAA\nAABQPQKDAAAAAAAAQAsRGAQAAAAAAABaiMAgAAAAAAAA0EIEBgEAAAAAAIAWIjAIAAAAAAAAtBCB\nQQAAAAAAAKCFCAwCAAAAAAAALURgEAAAAAAAAGghAoMAAAAlMrO3mNkn6q5HFjN7kJm9ycx6ZrZm\nZr9dd51iZrbfzNYGHvukmV1bV50AAACahMAgAAAYycz+Rz9otGZm35WxzX/0//6uqus3jn5gaS3x\n8yUz+ycze+4UrzlnZlea2WNT/uwkraU87otXSXqepNdLeo6k66oo1MxmzOyu/j64NGMz1/8ZfCzP\n6/+omV1nZnf0y3jfkG03m9lrzezTZnaPmX3AzL4/Y9tHmdl7zOyLZvY5M3ubmc1mbPsTZvYvZnay\nX4+fyln3+Pu2M+PvN5vZv+d5LQAAgGE21V0BAAAQlJOSniXpluSDZvYUSedJOlVHpcbkJH1I0lWS\nTNKcpBdKequZbXbO/eEEr/l1kq6U9AlJHxn42wvl983Y75X0Aefcr1Zc7vdJ+lpFn9mzJf1Fwa//\nEkk7Jd0q6SEjtn2rpI6kg5I+Lun5kt5tZpc4504f62Z2nqS/l/Rfkn5e0rmSfk7St5nZdzjn7k9s\nu1fSGyTdKOlqSU+W9LtmdrZz7rdy1H9YADRXcBQAAGAUAoMAAGAc75a0y8x+xjmXHAX3LEkflJQ6\ncspDn3bOXR//x8zeKunfJe2TNElg0LL+4Jz7iqSvTPCaVfkaSR8t6sXM7AxJM865+0Zs+hxJRxUF\n5X69HzA7WVQ9JD3HOffpfp2OZ21kZt8h6cckvdw5d7D/2HWS/lnSb0r67sTmr5J0tqTHJV77Vkl/\npSiY+Kb+Y1sk/aqkP3PO/Vj/uX/Y/2x+ycwWnXN3F/VGyzbGPgUAAIHx+e41AADwi5N0vaSHSvpv\n8YNmdqakKyS9QykBMou81Mz+uT+l8jNm9kYz2zaw3eX9KZKfNrNTZvZxM3u1mc0MbPe3ZvYRM7vA\nzP7GzL5sZp8ys5+b+I05tyzpY5IeMVDWV5vZVf3yvmhmd5vZu5NThvujJY/0P5+39KeAfsXMntf/\n+7ocg2b2jf1tXmZmL+q/z1NmdsTMvj3l89tlZh/tf3YfMbMfGXzN/nbPNLMPmtkX+vX8iJn9TNZ7\nNrOnWJS/7+GSLkvUe77/9+1m9of9/XXSzD4cv6eM9/KzZvZxRaNGLxj2efcDZ89QdDzdKOkcST88\n7DnjigN3OVwh6X5Jf5B47r2KAsQX90cJxjqSbk6+tnPuvZLukPSjie2+V9Eoxd8fKOv1kh4s6ek5\n65Zbnv1vZlvN7Boz6/aPuX81s/9lZpbYZug+NbOf7n+Xv2xmnzezW83smUW/HwAAUA1GDAIAgHF8\nUtIHJO3WA1M/nybpqyS9U9LPpjxnUVEOu2sl/Y6kb5L005IeZ2ZP6o+ok6IRV19UNO3yS4qmmv6y\noumar0y8nlMUdPlzSYf65V4h6TfM7CPOubGnpPZHRH29oimiSd8s6XJFwatPSHqYpL2S/tbMHu2c\n+4yk2yX9735dFxRNNZUemG6dlidPiqbPPljSG/t/f6WkPzGzb44/EzN7ev/93aZo6upXKwpYfTr5\nmmb23xQFZv9K0v/qP3yBpO+S9LsZb/tfFI3au0bSfyj63CVpqR+4+7v++/89Rft9l6LA51bn3O8N\nvNYLJJ3Vf//3Svp8RpmxH5b0IEnvdM591sz+tv95vHPE88rwOEl3OOe+NPD4kcTfP21mX6dodOUH\nU17jiKQfSvz/8f1/jw5sd1RRvsnHK9pfhciz/83sbEnvVzR1/o2K9vl3SXqNoindLxt42Q371Mxe\npOg7fIOi42aLpMdK+k7Vs+8AAMCUCAwCAIBxvUPR1M+z+iOrniXp75xzn0kMPJIkmdl3S/oJSbud\nc3+cePxvFAUWd+mBgMLu/uvFFs3svyT9pJm9emAa45yk5zrn3tF/vWsl3dkvK09g8Ewze2j/969V\nFJR7mKTXDWz3Eefc+QPv6TpJJ/pl/Zpz7j/N7M8VBQYPx3XK4RskPdI594X+694h6f+XdKmiKdtS\nFLT5lKQnxdNszey9ioJ2n0y81tMk3e2cy1rEYwPn3JKkd5jZrymaWn263mb2s5J2SHq2c+6d/cfe\n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\nw887yiTPdpN+SZKv3ev1dPjwYX3+858fq+wsWZ9j3teM6yNJ5513XuIvoxvfZNm9Xk9zc3OZdRin\nPkWL3+P695ev7HGO3WHvMe05t912m77ma75maJ2ir/f9I7ZJN+ozH/b3tL9lbX/48GFdeullcm5t\n7DpMsm3e42qc42/U8TuN7O/Yemn1zVPvUX9PtjXDysyS7zh9oLzBz7Eqk5Q97P2vrp7Mve0krz/O\n9pOcQ9OOobTHRn1uw8qZdn+Xce7L+5z49yLPOVnf28XFRT360Y/O9dyyDTsu6jZOP2GwXUvux2Ht\nZ7fb1ac//WlJOv0ao/p2o+rV7Xb1kY98ZEN9hqU/mKZvmmyTy9h38We0adMmvelNb8rcbtR7HLVd\nsu5LS0uZ+2Gc4yKrPrfddptmZ2c1Pz+f+dqj+j15z8t5X3vUc4YZ57ycZpx2r+i6TyKtvuP0cdOe\nHx/nWX2kPOe35HGV1g6MU58yP79x+vTD/j7sc5SU+lmO+h4U1VYOq2eybSmjn5r3s8pqz+NjaFQf\nZfD58XOHGfZdT7YjedvzLL70I2Lj9+3O1DOf+Vx99KMflqSh3+VRJjnOB+XZt5mcc6X8SJqTtCbp\nOwcef62kwxnP2SnJmc24+fl5Nz8/78xmnCR3xhlnuhe96EXuhS98odu8eYuTznCbN28ZeGzGSTNu\n8+Yt7gUveMHEj40uh7LXl32mO/fch7hbbrnFnXVWm96372VvOv18v9/3me5BD9rWkM+8OWWfddY5\nbmbmDHfGGZvdWWed3Zr3PUk5Z511dmr7V0TZk+6Hpn/mlE3ZtGuUXU3ZefsoIbzv4f1Cfz5z9jdl\nt7vsl770pe7IkSP9fmV73neYZUdthh/v21wcS/uGb/iG03G0/s/OkfG7EgODZ0q6T9LlA4+/RdKf\nDgsMXnPNNck34SS5m2++2R09enTDY7E777zT3XLLLe6WW25xN9988+m/Dz6WfO349+Rj8Wsmy0or\n584779yw3bXXXptadrxtso7xY/H2WXWT5I4ePbrhvQ8+du211w59zazXHnzu4PuO/x+/n7TtpDPd\ngx/81e7OO+9MfY9p+ybt5+jRo+v+Pvge43ofPXp06Gsm90Pa+07bN6P2bbJOecvO+9jb3/721PeY\n9lkN7rvB7eJjNa2Oacd5ctu0+gxu9+Y3v3lo2WnHZNZ3JOu7nPx7XJes79NgfbLagcHtso6rYcff\n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\nFfp/rRHToOaDcIEAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1b4ae31f60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "user_means = data.mean(axis=1)\n",
    "_, ax = plt.subplots(figsize=(16, 6))\n",
    "user_means.plot(kind='bar', grid=False, ax=ax,\n",
    "                title=\"Mean Ratings for All 1000 Users\")\n",
    "ax.set_xticklabels('')  # 1000 labels is nonsensical"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see even more significant trends here. Some users rate nearly everything highly, and some (though not as many) rate nearly everything negatively. These observations will come in handy when considering models to use for predicting user preferences on unseen jokes."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Methods\n",
    "\n",
    "Having explored the data, we're now ready to dig in and start addressing the problem. We want to predict how much each user is going to like all of the jokes he or she has not yet read.\n",
    "\n",
    "\n",
    "### Baselines\n",
    "\n",
    "Every good analysis needs some kind of baseline methods to compare against. It's difficult to claim we've produced good results if we have no reference point for what defines \"good\". We'll define three very simple baseline methods and find the RMSE using these methods. Our goal will be to obtain lower RMSE scores with whatever model we produce.\n",
    "\n",
    "#### Uniform Random Baseline\n",
    "\n",
    "Our first baseline is about as dead stupid as you can get. Every place we see a missing value in $R$, we'll simply fill it with a number drawn uniformly at random in the range [-10, 10]. We expect this method to do the worst by far.\n",
    "\n",
    "$$R_{ij}^* \\sim Uniform$$\n",
    "\n",
    "#### Global Mean Baseline\n",
    "\n",
    "This method is only slightly better than the last. Wherever we have a missing value, we'll fill it in with the mean of all observed ratings.\n",
    "\n",
    "$$\\text{global_mean} = \\frac{1}{N \\times M} \\sum_{i=1}^N \\sum_{j=1}^M I_{ij}(R_{ij})$$\n",
    "\n",
    "$$R_{ij}^* = \\text{global_mean}$$\n",
    "\n",
    "#### Mean of Means Baseline\n",
    "\n",
    "Now we're going to start getting a bit smarter. We imagine some users might be easily amused, and inclined to rate all jokes more highly. Other users might be the opposite. Additionally, some jokes might simply be more witty than others, so all users might rate some jokes more highly than others in general. We can clearly see this in our graph of the joke means above. We'll attempt to capture these general trends through per-user and per-joke rating means. We'll also incorporate the global mean to smooth things out a bit. So if we see a missing value in cell $R_{ij}$, we'll average the global mean with the mean of $U_i$ and the mean of $V_j$ and use that value to fill it in.\n",
    "\n",
    "$$\\text{user_means} = \\frac{1}{M} \\sum_{j=1}^M I_{ij}(R_{ij})$$\n",
    "\n",
    "$$\\text{joke_means} = \\frac{1}{N} \\sum_{i=1}^N I_{ij}(R_{ij})$$\n",
    "\n",
    "$$R_{ij}^* = \\frac{1}{3} \\left(\\text{user_means}_i + \\text{ joke_means}_j + \\text{ global_mean} \\right)$$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from collections import OrderedDict\n",
    "\n",
    "# Create a base class with scaffolding for our 3 baselines.\n",
    "\n",
    "def split_title(title):\n",
    "    \"\"\"Change \"BaselineMethod\" to \"Baseline Method\".\"\"\"\n",
    "    words = []\n",
    "    tmp = [title[0]]\n",
    "    for c in title[1:]:\n",
    "        if c.isupper():\n",
    "            words.append(''.join(tmp))\n",
    "            tmp = [c]\n",
    "        else:\n",
    "            tmp.append(c)\n",
    "    words.append(''.join(tmp))\n",
    "    return ' '.join(words)\n",
    "\n",
    "\n",
    "class Baseline(object):\n",
    "    \"\"\"Calculate baseline predictions.\"\"\"\n",
    "\n",
    "    def __init__(self, train_data):\n",
    "        \"\"\"Simple heuristic-based transductive learning to fill in missing\n",
    "        values in data matrix.\"\"\"\n",
    "        self.predict(train_data.copy())\n",
    "\n",
    "    def predict(self, train_data):\n",
    "        raise NotImplementedError(\n",
    "            'baseline prediction not implemented for base class')\n",
    "\n",
    "    def rmse(self, test_data):\n",
    "        \"\"\"Calculate root mean squared error for predictions on test data.\"\"\"\n",
    "        return rmse(test_data, self.predicted)\n",
    "    \n",
    "    def __str__(self):\n",
    "        return split_title(self.__class__.__name__)\n",
    "        \n",
    "\n",
    "\n",
    "# Implement the 3 baselines.\n",
    "\n",
    "class UniformRandomBaseline(Baseline):\n",
    "    \"\"\"Fill missing values with uniform random values.\"\"\"\n",
    "\n",
    "    def predict(self, train_data):\n",
    "        nan_mask = np.isnan(train_data)\n",
    "        masked_train = np.ma.masked_array(train_data, nan_mask)\n",
    "        pmin, pmax = masked_train.min(), masked_train.max()\n",
    "        N = nan_mask.sum()\n",
    "        train_data[nan_mask] = np.random.uniform(pmin, pmax, N)\n",
    "        self.predicted = train_data\n",
    "\n",
    "\n",
    "class GlobalMeanBaseline(Baseline):\n",
    "    \"\"\"Fill in missing values using the global mean.\"\"\"\n",
    "\n",
    "    def predict(self, train_data):\n",
    "        nan_mask = np.isnan(train_data)\n",
    "        train_data[nan_mask] = train_data[~nan_mask].mean()\n",
    "        self.predicted = train_data\n",
    "\n",
    "\n",
    "class MeanOfMeansBaseline(Baseline):\n",
    "    \"\"\"Fill in missing values using mean of user/item/global means.\"\"\"\n",
    "\n",
    "    def predict(self, train_data):\n",
    "        nan_mask = np.isnan(train_data)\n",
    "        masked_train = np.ma.masked_array(train_data, nan_mask)\n",
    "        global_mean = masked_train.mean()\n",
    "        user_means = masked_train.mean(axis=1)\n",
    "        item_means = masked_train.mean(axis=0)\n",
    "        self.predicted = train_data.copy()\n",
    "        n, m = train_data.shape\n",
    "        for i in range(n):\n",
    "            for j in range(m):\n",
    "                if np.ma.isMA(item_means[j]):\n",
    "                    self.predicted[i,j] = np.mean(\n",
    "                        (global_mean, user_means[i]))\n",
    "                else:\n",
    "                    self.predicted[i,j] = np.mean(\n",
    "                        (global_mean, user_means[i], item_means[j]))\n",
    "                    \n",
    "                    \n",
    "baseline_methods = OrderedDict()\n",
    "baseline_methods['ur'] = UniformRandomBaseline\n",
    "baseline_methods['gm'] = GlobalMeanBaseline\n",
    "baseline_methods['mom'] = MeanOfMeansBaseline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Probabilistic Matrix Factorization\n",
    "\n",
    "[Probabilistic Matrix Factorization (PMF)](http://papers.nips.cc/paper/3208-probabilistic-matrix-factorization.pdf) [3] is a probabilistic approach to the collaborative filtering problem that takes a Bayesian perspective. The ratings $R$ are modeled as draws from a Gaussian distribution.  The mean for $R_{ij}$ is $U_i V_j^T$. The precision $\\alpha$ is a fixed parameter that reflects the uncertainty of the estimations; the normal distribution is commonly reparameterized in terms of precision, which is the inverse of the variance. Complexity is controlled by placing zero-mean spherical Gaussian priors on $U$ and $V$. In other words, each row of $U$ is drawn from a multivariate Gaussian with mean $\\mu = 0$ and precision which is some multiple of the identity matrix $I$. Those multiples are $\\alpha_U$ for $U$ and $\\alpha_V$ for $V$. So our model is defined by:\n",
    "\n",
    "$\\newcommand\\given[1][]{\\:#1\\vert\\:}$\n",
    "\n",
    "\\begin{equation}\n",
    "P(R \\given U, V, \\alpha^2) = \n",
    "    \\prod_{i=1}^N \\prod_{j=1}^M\n",
    "        \\left[ \\mathcal{N}(R_{ij} \\given U_i V_j^T, \\alpha^{-1}) \\right]^{I_{ij}}\n",
    "\\end{equation}\n",
    "\n",
    "\\begin{equation}\n",
    "P(U \\given \\alpha_U^2) =\n",
    "    \\prod_{i=1}^N \\mathcal{N}(U_i \\given 0, \\alpha_U^{-1} \\boldsymbol{I})\n",
    "\\end{equation}\n",
    "\n",
    "\\begin{equation}\n",
    "P(V \\given \\alpha_U^2) =\n",
    "    \\prod_{j=1}^M \\mathcal{N}(V_j \\given 0, \\alpha_V^{-1} \\boldsymbol{I})\n",
    "\\end{equation}\n",
    "\n",
    "Given small precision parameters, the priors on $U$ and $V$ ensure our latent variables do not grow too far from 0. This prevents overly strong user preferences and item factor compositions from being learned. This is commonly known as complexity control, where the complexity of the model here is measured by the magnitude of the latent variables. Controlling complexity like this helps prevent overfitting, which allows the model to generalize better for unseen data. We must also choose an appropriate $\\alpha$ value for the normal distribution for $R$. So the challenge becomes choosing appropriate values for $\\alpha_U$, $\\alpha_V$, and $\\alpha$. This challenge can be tackled with the soft weight-sharing methods discussed by [Nowland and Hinton, 1992](http://www.cs.toronto.edu/~fritz/absps/sunspots.pdf) [4]. However, for the purposes of this analysis, we will stick to using point estimates obtained from our data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "import logging\n",
    "import pymc3 as pm\n",
    "import theano\n",
    "import scipy as sp\n",
    "\n",
    "\n",
    "# Enable on-the-fly graph computations, but ignore \n",
    "# absence of intermediate test values.\n",
    "theano.config.compute_test_value = 'ignore'\n",
    "\n",
    "# Set up logging.\n",
    "logger = logging.getLogger()\n",
    "logger.setLevel(logging.INFO)\n",
    "\n",
    "\n",
    "class PMF(object):\n",
    "    \"\"\"Probabilistic Matrix Factorization model using pymc3.\"\"\"\n",
    "\n",
    "    def __init__(self, train, dim, alpha=2, std=0.01, bounds=(-10, 10)):\n",
    "        \"\"\"Build the Probabilistic Matrix Factorization model using pymc3.\n",
    "\n",
    "        :param np.ndarray train: The training data to use for learning the model.\n",
    "        :param int dim: Dimensionality of the model; number of latent factors.\n",
    "        :param int alpha: Fixed precision for the likelihood function.\n",
    "        :param float std: Amount of noise to use for model initialization.\n",
    "        :param (tuple of int) bounds: (lower, upper) bound of ratings.\n",
    "            These bounds will simply be used to cap the estimates produced for R.\n",
    "\n",
    "        \"\"\"\n",
    "        self.dim = dim\n",
    "        self.alpha = alpha\n",
    "        self.std = np.sqrt(1.0 / alpha)\n",
    "        self.bounds = bounds\n",
    "        self.data = train.copy()\n",
    "        n, m = self.data.shape\n",
    "\n",
    "        # Perform mean value imputation\n",
    "        nan_mask = np.isnan(self.data)\n",
    "        self.data[nan_mask] = self.data[~nan_mask].mean()\n",
    "\n",
    "        # Low precision reflects uncertainty; prevents overfitting.\n",
    "        # Set to the mean variance across users and items.\n",
    "        self.alpha_u = 1 / self.data.var(axis=1).mean()\n",
    "        self.alpha_v = 1 / self.data.var(axis=0).mean()\n",
    "\n",
    "        # Specify the model.\n",
    "        logging.info('building the PMF model')\n",
    "        with pm.Model() as pmf:\n",
    "            U = pm.MvNormal(\n",
    "                'U', mu=0, tau=self.alpha_u * np.eye(dim),\n",
    "                shape=(n, dim), testval=np.random.randn(n, dim) * std)\n",
    "            V = pm.MvNormal(\n",
    "                'V', mu=0, tau=self.alpha_v * np.eye(dim),\n",
    "                shape=(m, dim), testval=np.random.randn(m, dim) * std)\n",
    "            R = pm.Normal(\n",
    "                'R', mu=theano.tensor.dot(U, V.T), tau=self.alpha * np.ones((n, m)),\n",
    "                observed=self.data)\n",
    "\n",
    "        logging.info('done building the PMF model') \n",
    "        self.model = pmf\n",
    "        \n",
    "    def __str__(self):\n",
    "        return self.name\n",
    "   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll also need functions for calculating the MAP and performing sampling on our PMF model. When the observation noise variance $\\alpha$ and the prior variances $\\alpha_U$ and $\\alpha_V$ are all kept fixed, maximizing the log posterior is equivalent to minimizing the sum-of-squared-errors objective function with quadratic regularization terms.\n",
    "\n",
    "$$ E = \\frac{1}{2} \\sum_{i=1}^N \\sum_{j=1}^M I_{ij} (R_{ij} - U_i V_j^T)^2 + \\frac{\\lambda_U}{2} \\sum_{i=1}^N \\|U\\|_{Fro}^2 + \\frac{\\lambda_V}{2} \\sum_{j=1}^M \\|V\\|_{Fro}^2, $$\n",
    "\n",
    "where $\\lambda_U = \\alpha_U / \\alpha$, $\\lambda_V = \\alpha_V / \\alpha$, and $\\|\\cdot\\|_{Fro}^2$ denotes the Frobenius norm [3]. Minimizing this objective function gives a local minimum, which is essentially a maximum a posteriori (MAP) estimate. While it is possible to use a fast Stochastic Gradient Descent procedure to find this MAP, we'll be finding it using the utilities built into `pymc3`. In particular, we'll use `find_MAP` with Powell optimization (`scipy.optimize.fmin_powell`). Having found this MAP estimate, we can use it as our starting point for MCMC sampling.\n",
    "\n",
    "Since it is a reasonably complex model, we expect the MAP estimation to take some time. So let's save it after we've found it. Note that we define a function for finding the MAP below, assuming it will receive a namespace with some variables in it. Then we attach that function to the PMF class, where it will have such a namespace after initialization. The PMF class is defined in pieces this way so I can say a few things between each piece to make it clearer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "try:\n",
    "    import ujson as json\n",
    "except ImportError:\n",
    "    import json\n",
    "\n",
    "\n",
    "# First define functions to save our MAP estimate after it is found.\n",
    "# We adapt these from `pymc3`'s `backends` module, where the original\n",
    "# code is used to save the traces from MCMC samples.\n",
    "def save_np_vars(vars, savedir):\n",
    "    \"\"\"Save a dictionary of numpy variables to `savedir`. We assume\n",
    "    the directory does not exist; an OSError will be raised if it does.\n",
    "    \"\"\"\n",
    "    logging.info('writing numpy vars to directory: %s' % savedir)\n",
    "    if not os.path.isdir(savedir):\n",
    "        os.mkdir(savedir)\n",
    "    shapes = {}\n",
    "    for varname in vars:\n",
    "        data = vars[varname]\n",
    "        var_file = os.path.join(savedir, varname + '.txt')\n",
    "        np.savetxt(var_file, data.reshape(-1, data.size))\n",
    "        shapes[varname] = data.shape\n",
    "\n",
    "        ## Store shape information for reloading.\n",
    "        shape_file = os.path.join(savedir, 'shapes.json')\n",
    "        with open(shape_file, 'w') as sfh:\n",
    "            json.dump(shapes, sfh)\n",
    "            \n",
    "            \n",
    "def load_np_vars(savedir):\n",
    "    \"\"\"Load numpy variables saved with `save_np_vars`.\"\"\"\n",
    "    shape_file = os.path.join(savedir, 'shapes.json')\n",
    "    with open(shape_file, 'r') as sfh:\n",
    "        shapes = json.load(sfh)\n",
    "\n",
    "    vars = {}\n",
    "    for varname, shape in shapes.items():\n",
    "        var_file = os.path.join(savedir, varname + '.txt')\n",
    "        vars[varname] = np.loadtxt(var_file).reshape(shape)\n",
    "        \n",
    "    return vars\n",
    "\n",
    "\n",
    "# Now define the MAP estimation infrastructure.\n",
    "def _map_dir(self):\n",
    "    basename = 'pmf-map-d%d' % self.dim\n",
    "    return os.path.join(DATA_DIR, basename)\n",
    "\n",
    "def _find_map(self):\n",
    "    \"\"\"Find mode of posterior using Powell optimization.\"\"\"\n",
    "    tstart = time.time()\n",
    "    with self.model:\n",
    "        logging.info('finding PMF MAP using Powell optimization...')\n",
    "        self._map = pm.find_MAP(fmin=sp.optimize.fmin_powell, disp=True)\n",
    "\n",
    "    elapsed = int(time.time() - tstart)\n",
    "    logging.info('found PMF MAP in %d seconds' % elapsed)\n",
    "    \n",
    "    # This is going to take a good deal of time to find, so let's save it.\n",
    "    save_np_vars(self._map, self.map_dir)\n",
    "    \n",
    "def _load_map(self):\n",
    "    self._map = load_np_vars(self.map_dir)\n",
    "\n",
    "def _map(self):\n",
    "    try:\n",
    "        return self._map\n",
    "    except:\n",
    "        if os.path.isdir(self.map_dir):\n",
    "            self.load_map()\n",
    "        else:\n",
    "            self.find_map()\n",
    "        return self._map\n",
    "\n",
    "    \n",
    "# Update our class with the new MAP infrastructure.\n",
    "PMF.find_map = _find_map\n",
    "PMF.load_map = _load_map\n",
    "PMF.map_dir = property(_map_dir)\n",
    "PMF.map = property(_map)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So now our PMF class has a `map` `property` which will either be found using Powell optimization or loaded from a previous optimization. Once we have the MAP, we can use it as a starting point for our MCMC sampler. We'll need a sampling function in order to draw MCMC samples to approximate the posterior distribution of the PMF model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Draw MCMC samples.\n",
    "def _trace_dir(self):\n",
    "    basename = 'pmf-mcmc-d%d' % self.dim\n",
    "    return os.path.join(DATA_DIR, basename)\n",
    "\n",
    "def _draw_samples(self, nsamples=1000, cores=2):\n",
    "    # First make sure the trace_dir does not already exist.\n",
    "    if os.path.isdir(self.trace_dir):\n",
    "        shutil.rmtree(self.trace_dir)\n",
    "\n",
    "    with self.model:\n",
    "        logging.info('drawing %d samples using %d jobs' % (nsamples, cores))\n",
    "        backend = pm.backends.Text(self.trace_dir)\n",
    "        logging.info('backing up trace to directory: %s' % self.trace_dir)\n",
    "        self.trace = pm.sample(draws=nsamples, init='advi',\n",
    "                               n_init=150000, cores=cores, trace=backend)\n",
    "        \n",
    "def _load_trace(self):\n",
    "    with self.model:\n",
    "        self.trace = pm.backends.text.load(self.trace_dir)\n",
    "\n",
    "        \n",
    "# Update our class with the sampling infrastructure.\n",
    "PMF.trace_dir = property(_trace_dir)\n",
    "PMF.draw_samples = _draw_samples\n",
    "PMF.load_trace = _load_trace"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We could define some kind of default trace property like we did for the MAP, but that would mean using possibly nonsensical values for `nsamples` and `cores`. Better to leave it as a non-optional call to `draw_samples`. Finally, we'll need a function to make predictions using our inferred values for $U$ and $V$. For user $i$ and joke $j$, a prediction is generated by drawing from $\\mathcal{N}(U_i V_j^T, \\alpha)$. To generate predictions from the sampler, we generate an $R$ matrix for each $U$ and $V$ sampled, then we combine these by averaging over the $K$ samples.\n",
    "\n",
    "\\begin{equation}\n",
    "P(R_{ij}^* \\given R, \\alpha, \\alpha_U, \\alpha_V) \\approx\n",
    "    \\frac{1}{K} \\sum_{k=1}^K \\mathcal{N}(U_i V_j^T, \\alpha)\n",
    "\\end{equation}\n",
    "\n",
    "We'll want to inspect the individual $R$ matrices before averaging them for diagnostic purposes. So we'll write code for the averaging piece during evaluation. The function below simply draws an $R$ matrix given a $U$ and $V$ and the fixed $\\alpha$ stored in the PMF object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def _predict(self, U, V):\n",
    "    \"\"\"Estimate R from the given values of U and V.\"\"\"\n",
    "    R = np.dot(U, V.T)\n",
    "    n, m = R.shape\n",
    "    sample_R = np.array([\n",
    "        [np.random.normal(R[i,j], self.std) for j in range(m)]\n",
    "        for i in range(n)\n",
    "    ])\n",
    "\n",
    "    # bound ratings\n",
    "    low, high = self.bounds\n",
    "    sample_R[sample_R < low] = low\n",
    "    sample_R[sample_R > high] = high\n",
    "    return sample_R\n",
    "\n",
    "\n",
    "PMF.predict = _predict"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "One final thing to note: the dot products in this model are often constrained using a logistic function $g(x) = 1/(1 + exp(-x))$, that bounds the predictions to the range [0, 1]. To facilitate this bounding, the ratings are also mapped to the range [0, 1] using $t(x) = (x + min) / range$. The authors of PMF also introduced a constrained version which performs better on users with less ratings [3]. Both models are generally improvements upon the basic model presented here. However, in the interest of time and space, these will not be implemented here."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluation\n",
    "\n",
    "### Metrics\n",
    "\n",
    "In order to understand how effective our models are, we'll need to be able to evaluate them. We'll be evaluating in terms of root mean squared error (RMSE), which looks like this:\n",
    "\n",
    "\\begin{equation}\n",
    "RMSE = \\sqrt{ \\frac{ \\sum_{i=1}^N \\sum_{j=1}^M I_{ij} (R_{ij} - R_{ij}^*)^2 }\n",
    "                   { \\sum_{i=1}^N \\sum_{j=1}^M I_{ij} } }\n",
    "\\end{equation}\n",
    "\n",
    "In this case, the RMSE can be thought of as the standard deviation of our predictions from the actual user preferences."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define our evaluation function.\n",
    "def rmse(test_data, predicted):\n",
    "    \"\"\"Calculate root mean squared error.\n",
    "    Ignoring missing values in the test data.\n",
    "    \"\"\"\n",
    "    I = ~np.isnan(test_data)   # indicator for missing values\n",
    "    N = I.sum()                # number of non-missing values\n",
    "    sqerror = abs(test_data - predicted) ** 2  # squared error array\n",
    "    mse = sqerror[I].sum() / N                 # mean squared error\n",
    "    return np.sqrt(mse)                        # RMSE"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Training Data vs. Test Data\n",
    "\n",
    "The next thing we need to do is split our data into a training set and a test set. Matrix factorization techniques use [transductive learning](http://en.wikipedia.org/wiki/Transduction_%28machine_learning%29) rather than inductive learning. So we produce a test set by taking a random sample of the cells in the full $N \\times M$ data matrix. The values selected as test samples are replaced with `nan` values in a copy of the original data matrix to produce the training set. Since we'll be producing random splits, let's also write out the train/test sets generated. This will allow us to replicate our results. We'd like to be able to idenfity which split is which, so we'll take a hash of the indices selected for testing and use that to save the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "import hashlib\n",
    "\n",
    "\n",
    "# Define a function for splitting train/test data.\n",
    "def split_train_test(data, percent_test=10):\n",
    "    \"\"\"Split the data into train/test sets.\n",
    "    :param int percent_test: Percentage of data to use for testing. Default 10.\n",
    "    \"\"\"\n",
    "    n, m = data.shape             # # users, # jokes\n",
    "    N = n * m                     # # cells in matrix\n",
    "    test_size = N / percent_test  # use 10% of data as test set\n",
    "    train_size = N - test_size    # and remainder for training\n",
    "\n",
    "    # Prepare train/test ndarrays.\n",
    "    train = data.copy().values\n",
    "    test = np.ones(data.shape) * np.nan\n",
    "\n",
    "    # Draw random sample of training data to use for testing.\n",
    "    tosample = np.where(~np.isnan(train))       # ignore nan values in data\n",
    "    idx_pairs = zip(tosample[0], tosample[1])   # tuples of row/col index pairs\n",
    "    indices = np.arange(len(idx_pairs))         # indices of index pairs\n",
    "    sample = np.random.choice(indices, replace=False, size=test_size)\n",
    "\n",
    "    # Transfer random sample from train set to test set.\n",
    "    for idx in sample:\n",
    "        idx_pair = idx_pairs[idx]\n",
    "        test[idx_pair] = train[idx_pair]  # transfer to test set\n",
    "        train[idx_pair] = np.nan          # remove from train set\n",
    "\n",
    "    # Verify everything worked properly\n",
    "    assert(np.isnan(train).sum() == test_size)\n",
    "    assert(np.isnan(test).sum() == train_size)\n",
    "    \n",
    "    # Finally, hash the indices and save the train/test sets.\n",
    "    index_string = ''.join(map(str, np.sort(sample)))\n",
    "    name = hashlib.sha1(index_string).hexdigest()\n",
    "    savedir = os.path.join(DATA_DIR, name)\n",
    "    save_np_vars({'train': train, 'test': test}, savedir)\n",
    "    \n",
    "    # Return train set, test set, and unique hash of indices.\n",
    "    return train, test, name\n",
    "\n",
    "\n",
    "def load_train_test(name):\n",
    "    \"\"\"Load the train/test sets.\"\"\"\n",
    "    savedir = os.path.join(DATA_DIR, name)\n",
    "    vars = load_np_vars(savedir)\n",
    "    return vars['train'], vars['test']\n",
    "\n",
    "# train, test, name = split_train_test(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In order to facilitate reproducibility, I've produced a train/test split using the code above which we'll now use for all the evaluations below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "train, test = load_train_test('6bb8d06c69c0666e6da14c094d4320d115f1ffc8')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Uniform Random Baseline RMSE:\t7.77545\n",
      "Global Mean Baseline RMSE:\t5.25004\n",
      "Mean Of Means Baseline RMSE:\t4.79832\n"
     ]
    }
   ],
   "source": [
    "# Let's see the results:\n",
    "baselines = {}\n",
    "for name in baseline_methods:\n",
    "    Method = baseline_methods[name]\n",
    "    method = Method(train)\n",
    "    baselines[name] = method.rmse(test)\n",
    "    print('%s RMSE:\\t%.5f' % (method, baselines[name]))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As expected: the uniform random baseline is the worst by far, the global mean baseline is next best, and the mean of means method is our best baseline. Now let's see how PMF stacks up."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:building the PMF model\n",
      "INFO:root:done building the PMF model\n"
     ]
    }
   ],
   "source": [
    "# We use a fixed precision for the likelihood.\n",
    "# This reflects uncertainty in the dot product.\n",
    "# We choose 2 in the footsteps Salakhutdinov\n",
    "# Mnihof.\n",
    "ALPHA = 2\n",
    "\n",
    "# The dimensionality D; the number of latent factors.\n",
    "# We can adjust this higher to try to capture more subtle\n",
    "# characteristics of each joke. However, the higher it is,\n",
    "# the more expensive our inference procedures will be.\n",
    "# Specifically, we have D(N + M) latent variables. For our\n",
    "# Jester dataset, this means we have D(1100), so for 5\n",
    "# dimensions, we are sampling 5500 latent variables.\n",
    "DIM = 5\n",
    "\n",
    "\n",
    "pmf = PMF(train, DIM, ALPHA, std=0.05)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Predictions Using MAP"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:finding PMF MAP using Powell optimization...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimization terminated successfully.\n",
      "         Current function value: 1545253.531949\n",
      "         Iterations: 20\n",
      "         Function evaluations: 993692\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:found PMF MAP in 1243 seconds\n",
      "INFO:root:writing numpy vars to directory: ../data/pmf/pmf-map-d5\n"
     ]
    }
   ],
   "source": [
    "# Find MAP for PMF.\n",
    "pmf.find_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Excellent. The first thing we want to do is make sure the MAP estimate we obtained is reasonable. We can do this by computing RMSE on the predicted ratings obtained from the MAP values of $U$ and $V$. First we define a function for generating the predicted ratings $R$ from $U$ and $V$. We ensure the actual rating bounds are enforced by setting all values below -10 to -10 and all values above 10 to 10. Finally, we compute RMSE for both the training set and the test set. We expect the test RMSE to be higher. The difference between the two gives some idea of how much we have overfit. Some difference is always expected, but a very low RMSE on the training set with a high RMSE on the test set is a definite sign of overfitting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def eval_map(pmf_model, train, test):\n",
    "    U = pmf_model.map['U']\n",
    "    V = pmf_model.map['V']\n",
    "    \n",
    "    # Make predictions and calculate RMSE on train & test sets.\n",
    "    predictions = pmf_model.predict(U, V)\n",
    "    train_rmse = rmse(train, predictions)\n",
    "    test_rmse = rmse(test, predictions)\n",
    "    overfit = test_rmse - train_rmse\n",
    "    \n",
    "    # Print report.\n",
    "    print('PMF MAP training RMSE: %.5f' % train_rmse)\n",
    "    print('PMF MAP testing RMSE:  %.5f' % test_rmse)\n",
    "    print('Train/test difference: %.5f' % overfit)\n",
    "    \n",
    "    return test_rmse\n",
    "    \n",
    "\n",
    "# Add eval function to PMF class.\n",
    "PMF.eval_map = eval_map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PMF MAP training RMSE: 3.98510\n",
      "PMF MAP testing RMSE:  4.23455\n",
      "Train/test difference: 0.24945\n",
      "PMF MAP Improvement:   0.56377\n"
     ]
    }
   ],
   "source": [
    "# Evaluate PMF MAP estimates.\n",
    "pmf_map_rmse = pmf.eval_map(train, test)\n",
    "pmf_improvement = baselines['mom'] - pmf_map_rmse\n",
    "print('PMF MAP Improvement:   %.5f' % pmf_improvement)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So we see a pretty nice improvement here when compared to our best baseline, which was the mean of means method. We also have a fairly small difference in the RMSE values between the train and the test sets. This indicates that the point estimates for $\\alpha_U$ and $\\alpha_V$ that we calculated from our data are doing a good job of controlling model complexity. Now let's see if we can improve our estimates by approximating our posterior distribution with MCMC sampling. We'll draw 1000 samples and back them up using the `pymc3.backend.Text` backend."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Predictions using MCMC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# Draw MCMC samples.\n",
    "pmf.draw_samples(300)\n",
    "\n",
    "# uncomment to load previous trace rather than drawing new samples.\n",
    "# pmf.load_trace()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Diagnostics and Posterior Predictive Check\n",
    "\n",
    "The next step is to check how many samples we should discard as burn-in. Normally, we'd do this using a traceplot to get some idea of where the sampled variables start to converge. In this case, we have high-dimensional samples, so we need to find a way to approximate them. One way was proposed by [Salakhutdinov and Mnih, p.886](https://www.cs.toronto.edu/~amnih/papers/bpmf.pdf). We can calculate the Frobenius norms of $U$ and $V$ at each step and monitor those for convergence. This essentially gives us some idea when the average magnitude of the latent variables is stabilizing. The equations for the Frobenius norms of $U$ and $V$ are shown below. We will use `numpy`'s `linalg` package to calculate these.\n",
    "\n",
    "$$ \\|U\\|_{Fro}^2 = \\sqrt{\\sum_{i=1}^N \\sum_{d=1}^D |U_{id}|^2}, \\hspace{40pt} \\|V\\|_{Fro}^2 = \\sqrt{\\sum_{j=1}^M \\sum_{d=1}^D |V_{jd}|^2} $$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def _norms(pmf_model, monitor=('U', 'V'), ord='fro'):\n",
    "    \"\"\"Return norms of latent variables at each step in the\n",
    "    sample trace. These can be used to monitor convergence\n",
    "    of the sampler.\n",
    "    \"\"\"\n",
    "    monitor = ('U', 'V')\n",
    "    norms = {var: [] for var in monitor}\n",
    "    for sample in pmf_model.trace:\n",
    "        for var in monitor:\n",
    "            norms[var].append(np.linalg.norm(sample[var], ord))\n",
    "    return norms\n",
    "\n",
    "\n",
    "def _traceplot(pmf_model):\n",
    "    \"\"\"Plot Frobenius norms of U and V as a function of sample #.\"\"\"\n",
    "    trace_norms = pmf_model.norms()\n",
    "    u_series = pd.Series(trace_norms['U'])\n",
    "    v_series = pd.Series(trace_norms['V'])\n",
    "    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 7))\n",
    "    u_series.plot(kind='line', ax=ax1, grid=False,\n",
    "                  title=\"$\\|U\\|_{Fro}^2$ at Each Sample\")\n",
    "    v_series.plot(kind='line', ax=ax2, grid=False,\n",
    "                  title=\"$\\|V\\|_{Fro}^2$ at Each Sample\")\n",
    "    ax1.set_xlabel(\"Sample Number\")\n",
    "    ax2.set_xlabel(\"Sample Number\")\n",
    "    \n",
    "    \n",
    "PMF.norms = _norms\n",
    "PMF.traceplot = _traceplot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nJElSI1n4kiRJkiRJUiNZ+JIkSZIkSVIjWfiSJEmSJElSI1n4kiRJkiRJUiNZ+JIkSZJMveM1AAAP\n00lEQVQkSVIjWfiSJEmSJElSI1n4kiRJkiRJUiNZ+JIkSZIkSVIjWfiSJEmSJElSI1n4kiRJkiRJ\nUiNZ+JIkSZIkSVIjWfiSJEmSJElSI1n4kiRJkiRJUiNZ+JIkSZIkSVIjWfiSJEmSJElSI1n4kiRJ\nkiRJUiNZ+JIkSZIkSVIjWfiSJEmSJElSI1n4kiRJkiRJUiNZ+JIkSZIkSVIjWfiSJEmSJElSI1n4\nkiRJkiRJUiNZ+JIkSZIkSVIjWfiSJEmSJElSI1n4kiRJkiRJUiNZ+JIkSZIkSVIjWfiSJEmSJElS\nI1n4kiRJkiRJUiNZ+JIkSZIkSVIjWfiSJEmSJElSI1n4kiRJkiRJUiNZ+JIkSZIkSVIjWfiSJEmS\nJElSI1n4kiRJkiRJUiNZ+JIkSZIkSVIjTbjwlWTPJJcluTPJiiQHDdNnhySXJvljkmVJfpRky5bt\n05OcneT+JEuTXJhk09U9GK2eCy64oNdDaDTj213Gt/uMcXcZXzVFkkV1jtjezur12KYy/8Z0l/Ht\nLuPbfca4u4xvb03mjq/1gR8DRwOlfWOS5wA/AH4JvAJ4AXAy8FhLtzOAA4GD6z5bABdNYizqIH8Z\nu8v4dpfx7T5j3F3GVw2yC7B5S3s1Vc74jV4Oaqrzb0x3Gd/uMr7dZ4y7y/j21lMm+gOllFnALIAk\nGabLfwDfKaUc37Ju0dCLJBsBRwBvLaVcXa/7e2BhkpeWUq6f6JgkSZLUH0opf2hdTvI64LellB/0\naEiSJGkK6+gcX3Uh7EDgN0lmJVmcZF6S17d025mq4DZnaEUp5VfA7cBunRyPJEmSeifJ2sAhwHm9\nHoskSZqaOj25/abABsBxwEyqW9svAS5OsmfdZ3Pg8VLKQ20/u7jeJkmSpGZ4I/BU4Iu9HogkSZqa\nJvxVxzEMFdK+VUr5TP36p0leDrybau6vyVgHYOHChas5PI1myZIlLFiwoNfDaCzj213Gt/uMcXcZ\n3+5oyR3W6eU4prAjgCtKKfeM0mcdgCOPPJINN9xwpQ377bcf+++/fxeHN3X4N6a7jG93Gd/uM8bd\nZXxX36xZs5g9e/ZK65YuXTr0ctQ8L6WsMj/9uCVZAbyhlHJZvbw28DDwkVLKx1r6fQLYvZSyZ5J9\n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\nJUmSxsM8D/M8SRa+pCkhydOAbwLnU02guRR4CfCvwLfqbrcAayf5J6orgntQzVvQKbsn+QBwKdXc\nDG+iuiI2nK9STZJ6aZITgd8DW1PNX/HJUkr7VbQh7Vf3PgT8glWvVP4f8J4k86j+Dn4CeHyMfY20\nrt004LwkpwAzqCZOPQuglLKsvjJ5eqpHV/8QeCrVxK5LSilfnsD7SJIkmeeZ50kag4UvaWpYBswD\n3kc1d8LawB3AZ6meKkMp5adJ3g98EPgYMJfqNvIvdWgMpwK7UCUIS4BjSynfb9neehXv0SSvoHrS\n0EXAhsCdVLfuPzTKe6x09a6U8psk5wP/2NbvX6iSw7lUt6L/M9WV0BH3Ncq6dnOA39T7nkb1hKCT\nWsb04ST3UsV2G+CPVFc+PzbB95EkSQLzPPM8SaNKKf7eSequJIuA00spn+n1WCRJktQ55nmS+p1P\ndZQkSZIkSVIjWfiStCZ4a6kkSVIzmedJ6mt+1VGSJEmSJEmN5B1fkiRJkiRJaiQLX5IkSZIkSWok\nC1+SJEmSJElqJAtfkiRJkiRJaiQLX5IkSZIkSWokC1+SJEmSJElqJAtfkiRJkiRJaiQLX5IkSZIk\nSWqk/weZKxn4jEWvIAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1b3028a7f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pmf.traceplot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It appears we get convergence of $U$ and $V$ after about 200 samples. When testing for convergence, we also want to see convergence of the particular statistics we are looking for, since different characteristics of the posterior may converge at different rates. Let's also do a traceplot of the RSME. We'll compute RMSE for both the train and the test set, even though the convergence is indicated by RMSE on the training set alone. In addition, let's compute a running RMSE on the train/test sets to see how aggregate performance improves or decreases as we continue to sample."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def _running_rmse(pmf_model, test_data, train_data, burn_in=0, plot=True):\n",
    "    \"\"\"Calculate RMSE for each step of the trace to monitor convergence.\n",
    "    \"\"\"\n",
    "    burn_in = burn_in if len(pmf_model.trace) >= burn_in else 0\n",
    "    results = {'per-step-train': [], 'running-train': [],\n",
    "               'per-step-test': [], 'running-test': []}\n",
    "    R = np.zeros(test_data.shape)\n",
    "    for cnt, sample in enumerate(pmf_model.trace[burn_in:]):\n",
    "        sample_R = pmf_model.predict(sample['U'], sample['V'])\n",
    "        R += sample_R\n",
    "        running_R = R / (cnt + 1)\n",
    "        results['per-step-train'].append(rmse(train_data, sample_R))\n",
    "        results['running-train'].append(rmse(train_data, running_R))\n",
    "        results['per-step-test'].append(rmse(test_data, sample_R))\n",
    "        results['running-test'].append(rmse(test_data, running_R))\n",
    "    \n",
    "    results = pd.DataFrame(results)\n",
    "\n",
    "    if plot:\n",
    "        results.plot(\n",
    "            kind='line', grid=False, figsize=(15, 7),\n",
    "            title='Per-step and Running RMSE From Posterior Predictive')\n",
    "        \n",
    "    # Return the final predictions, and the RMSE calculations\n",
    "    return running_R, results\n",
    "\n",
    "\n",
    "PMF.running_rmse = _running_rmse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\na3D2LxERkbTjnDvU6zJIbJxzPbwug4iIiIh4J+pgmJldBqAJgBOifN1KALUBlAXwkHNuRNDTdcCZ\nWYKt9S8XERERERERERFJiKiCYWZ2MDi1dBvnXG6U73U6gGoATgbwlJktcs69F+U2gstSCxzsdhk4\npbuIiIiIiIiIiGSmSgAOA/C1c25DUStGmxnWDMzumm5m5l9WFkALM7sFQEVXyCBkzrnl/v/+aWZ1\nADwEIBAMWwNg/5CX7O9fXph2AEZFWX4RERERERERESm9uoGTNBYq2mDYdwCOCVn2JoC5AAYWFggL\noyyA4GnNfwbQGsDzQcvO9i8vzDIAePvtt9GoUaMI31ZEUq1v37545plnvC6GiBRD56pIyaBzVaRk\n0Lkqknpz585F9+7dAX+8qChRBcOcczsAzAleZmY7AGxwzs31//0EgIOCZorsCWAFgHn+l5wJ4Haw\nu2XAcwAmmFk/AGMAXA5moV1fRHGyAaBRo0Zo2rRpNB9DRFKoRo0aOkdFSgCdqyIlg85VkZJB56qI\np4odSivW2SSDhWaDHQDgkKC/ywB4Euy3mQdgMYA7nXOv/bsB5342s64AHvc/FgK4wDm3W+BNRERE\nREREREQkHnEHw5xzrUL+vibk7xcBvBjBdj4C8FG85RERERERERERESlMGa8LICIiIiIiIiIikioK\nholIUl1++eVeF0FEIqBzVaRk0LkqUjLoXBVJbxb5BJDpxcyaApg2bdo0DUwoIiIiIiIiIpLBpk+f\njmbNmgFAM+fc9KLWVWaYiIiIiIiIiIhkDAXDREREREREREQkYygYJiIiIiIiIiIiGUPBMBERERER\nERERyRgKhomIiIiIiIiISMZQMExERERERERERDKGgmEiIiIiIiIiIpIxFAwTEREREREREZGMoWCY\niIiIiIiIiIhkDAXDREREREREREQkYygYJiIiIiIiIiIiGUPBMBERERERERERyRgKhomIiIiIiIiI\nSMZQMExERERERERERDKGgmEiIiIiIiIiIpIxFAwTEREREREREZGMoWCYiIiIiIiIiIhkDAXDRERE\nREREREQkYygYJiIiIiIiIiIiGUPBMBERERERERERyRgKhomIiIiIiIiISMZQMExERERERERERDKG\ngmEiIiIiIiIiIpIxFAwTEREREREREZGMoWCYiIiIiIiIiIhkDAXDREREREREREQkYygYJiIiIiIi\nIiIiGUPBMBERERERERERyRgKhomIiIiIiIiISMZQMExERERERERERDKGgmEiIiIiIiIiIpIxFAwT\nEREREREREZGMoWCYiIiIiIiIiIhkDAXDREREREREREQkYygYJiIiIiIiIiIiGUPBMBERERERERER\nyRgKhomIiIiIiIiISMZQMExERERERERERDKGgmEiIiIiIiIiIpIxFAwTEREREREREZGMoWCYiIiI\niIiIiIhkDAXDREREREREREQkYygYJiIiIiIiIiIiGUPBMBERERERERERyRgKhomIiIiIiIiISMZQ\nMExEREREMsaIEcDNN3tdChEREfGSgmEiIiIikhHy8oAHHgBeeQWYN8/r0oiIiIhXFAwTERERkYzw\n2WfAqlVA1arAq696XRoRERHxioJhIiIiIpIRXnoJOPVUoFcv4M03gZ07vS6RiIiIeEHBMBEREREp\n9ebOBcaNYyDsxhuBLVuA997zulQiIiLiBQXDRERE0tzq1cCllwLff+91SURKrqFDgf32A7p0AQ4/\nHGjXjmOHiUhqvPYacNxxwOLFXpdERETBMBERSaI//wRq1wYuvhj45RevS1My/forcMIJwPvvAw89\n5HVpSr68PCA/3+tSSKpt2waMHAlcfz1QsSKX3XQTz6/p070tm0gmWLkS6NePGZpnnAHMmeN1iaQ0\n+uknYPlyr0shJYWCYSIikhQ+Hyue1aoBM2cCp5zCsXo+/JABCSneyJFAixbAoYcCzz4LTJ6sCkQ8\nfD6gVSuga1evSyKp9tZbwI4d7B4Z0KEDcPDBwMsve1cukUzRpw9QvTowezZQqxZw5pnA7797XSop\nLXJyeIyddhqzf30+r0skJYGCYSIikhQvvwz8/DMrofPmcRa3ihWZJdagAYM7W7d6Xcr0lJsL9O4N\nXH010L07MGECcPPNzLJ74w2vS1dyvfUW8MMPzLKbNcvr0qSXDRuAhx8G1q/3uiSJ5xwHzu/UCTjk\nkILl5coBN9wAjB7N8cNEJDnGjgU+/hh4+mngyCP5m3bYYUDLlsCUKV6XTkq6BQvY4PryyxwTcto0\n/s6LFCeuYJiZDTAzn5k9XcQ6F5rZN2a2zsy2mNlPZtY2ZJ2r/NvJ9//rMzPN7yMiUkKtXAkMGMBu\nSKefDpQpA3TsCIwfz5uU008H7ryTFdM77gBWrPC6xOnjn384ltHQoazAv/46g4gVKgBXXcVssexs\nr0tZ8mzbxmOyc2egbl1g4ECvS5ReHn2U3XCbNAEmTvS6NIk1cSIzKnv12vO5a69lRsFbb6W+XCKZ\nYOdO4JZbgDZtgMsu47JatYDvvgMaN+by0nbNkdT53/+Apk2Z+fvLL8CLLwLnnQfcey+wa5fXpZN0\nF3MwzMyaA7gBwMxiVm0B4BsA5wBoCmA8gM/N7LiQ9bYAqBP0qBtr2URExDvOAT17AnvtFT7g0LQp\nK57LlnG9YcM4mPXll3P8nkw2cybQvDm7kXz3HfePWcHz118PbNzIFnaJzpNPAps3MzPhjjuAd98F\nlizxulTpYfVq4NVXWWE98kh2JX3kkdIzttpLLwGNGjELJdSBBzJj7OWXee1KtY0bWXnbtCn17y2S\nCk88Afz1F8/D4N+zGjWAr78GTj4ZaN8e+Oor78ooJc+2bcAVV7CR8KKL2NB6/PF8buBA3mN6PUHK\nr7/yXkNSa+HCyNeNKRhmZtUAvA3gOgCbi1rXOdfXOfdf59w059xi59y9ABYC6Ljnqm69c26d/1EK\nE/VFRCgri9kIpdEHHwBffMEb3xo1Cl/voIMYoFi5kl0mf/sNOOkkthJv35668qaL995jmv/eewNT\np3I8lVBHHgmcdRZn5JLILV3KINiddzIrrEcPZiYMHux1ydLDU08BlSoxO+y774AHHmCXybPPZqCs\nJFu1Cvjkkz0Dy8FuvpmZY5Mnp7ZsAPf1rbeyQWDQIP42iJQWc+fyuB4wgL9foapWBT7/nL/755/P\nc1WkONOmsWH100/ZuPrmmxyfNqBxY+Caa9io41UX+I0bgQsuYEPvl196U4ZMlJ0N3H135OvHmhn2\nEoDPnXPjon2hmRmA6gA2hjxVzcyWmdkKM/vUzI6OsWylyrp1rFh60VopIsmRk8OuSNWr899rrgGe\nf55jGW3b5nXp4rNxIyt2Xbow2yIS1aoxI2X+fOCjj9iSdtVVmTP4aX4+f7gvu4z7bPJkDphfmBtu\nYJeS+fNTV8aS7s47gX33Be66i39XqcKBdocPL/nBnngFssL69gVq1gTKlgUefBD4/nuO9Xfcccze\nKKleew2oXBm48srC12nZkuMYpnog/VWr2A369tuBbt3YradBA2bLapIRKekCWeKHHlp05bRSJWY7\nX3ghxxQdPTp1ZUymLl2AffYBTjyRAZH77+cwBz/+CKxdq7pdLJxj4+kpp7Cxdfp0jqsazsMPs4vu\noEGpLWNAv35s3GjVihlsK1d6U45Mc999Ue5r51xUDwCXgV0jy/v/Hg/g6She3x/APwD2DVp2MoDu\nAI4FcAaWmnc/AAAgAElEQVSAz8CMswOL2E5TAG7atGmuNLvqKucA5x55xOuSiEiiPPusc2XKOPfk\nk85dd51zzZo5V6ECz3XAuSOOcO7ii5174gnnvvrKubVrvS5x5Hr0cK5GDef+/jv2bXz6KffDo48m\nrlzpatMm5845h8fD4MHO+XzFvyYry7latZy7/fbkl680GD+ex9Pbb+++fNMm5/bay7k77/SkWGmj\nd2/natbk/gi1bp1z7dtz/w0Y4NyuXakvXzxycpzbf3/nevYsft0hQ5wrXz6119tevZzbZx/ntm7l\n3wsXOnfppdzfjRrxWhjJNUHSy6ZN/O6WLPG6JN566y0ey19/Hdn6eXnOXX21c2bOvf56csuWbD/9\nxM9+/fW8L2rRwrkDDyy4zwOcq1bNuSZNnOvSxbm77nLujTec++svr0uevtatc65DB+67fv14fS/O\n3Xc7V7myc6tWJb98wcaOZTmHD3fun3+cO/RQ5045peT9hpY0Eybw+tG79zQHwAFo6oqLTRW3wm4r\nAwcDWAPgP0HLIg6GAegKYBuAlsWsVw7sSvlwEeuU+mDY33/zxuyEE/hNvfSS1yUSkXht3sxAxnXX\n7b581y7nfv/duREjnLvtNufOOMO56tULbpoOOIDXgvbtneve3bk+fZx77DHnXnnFuY8+cm7iROf+\n/JMVudxcTz6a++47lvW11+Lf1sMPc1uffRb/ttKNz8cbsy+/dK5BAwYivvoqum3068fjKDs7OWX0\n0oQJzv3nP879/HP828rLc+6445w7+eTwQYUBA1gh2bgx/vcqif7+27lKlXi+FSY/37lBg5wrV443\n88uXp6588XrnHV5HZs8uft0NG5yrWNG5gQOTXy7nnFu5ko0gTzyx53NTpzrXujXLfuqpzv3wQ2rK\nJLFbsMC5p592rmVLnisA7+F79oyvcaik2rjRuf32c+6SS6J7XX4+9xnAhsOSqn175xo35ucJtmOH\nc7NmOffJJ2wAu/FGnuuHHcZKfNmyznXqxPuD0NfGY/t2BmVKqnHjeB+8777OjRkT+esKu+dOpi1b\nnDvkEOfati247/jlF14P1IiZPFu38jw64wznfv01ecGwCwDkA9gFINf/8AUtsyJeexmA7QDaR/he\n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\nOWfbtm0aOHCgrr32Wq1bt04FBQUaOXKk++OHM2fO1JQpU7Rt2zYNGjRICQkJ2rp1q9566y2NGzdO\nkydPrtVxp06dqvXr16t///5q2bKlvv32W+Xn56tly5bq3r27JOe8XgkJCcrPz1dMTIzi4uJ05ZVX\nKi0tTQsXLtT111+vjIwMjR49Wueff76++eYbrVq1SqmpqXr99de9jldSUqLBgwerb9++WrNmjQoL\nCzV69OgqJ8+Pi4tT+/btVVhYqDZt2iglJUWdO3cOul2nTp3UunVr3X333dqxY4fi4+P12muvqays\nrFb3VahU/mAsAAAAAADAWcwYo6VLl6pBgwa6//779d5772nixIlauHChu8+9996r119/XREREZo+\nfbruuecevfPOO7r22mt1ww03VNpfdQ0ePFgXXHCBfv/73+uOO+7Qc889p5/+9KdatWqVezRWdHS0\ne0TaL3/5S+Xm5mrNmjWSpN69e2vdunXq2rWrnn76aU2cOFEvvPCCLrjgAt11112V6nrttdcUGRmp\n++67T++//77uvvtuPffcc9WqdfHixWrevLkmTZqk3Nxcvfnmm0HPOSoqSu+88446d+6sWbNmaebM\nmerUqZN+//vf+92/7z5cXwLgr9/pHFlmTucEZXXJGJMpqaioqCjgkD8AAAAAAOCtuLhYWVlZOldf\nT+fl5Wn69OnavXt3lR91PJs99NBDmjVrlvbu3avExMRQl1Pvqnrcum6XlGWtLQ62L0aGAQAAAAAA\nIGycUhhmjLnPGFNhjJkTpE9zY0yBMeYLY0x5oL7GmGHGmE3GmMPGmE+MMf1PpTYAAAAAAADAV63D\nMGPMTyTdJumTKro2kLRL0gxJGwPsq7uklyQtkHSppLclvWWMubi29QEAAAAAAAC+ahWGGWPiJS2R\n9AtJQb+D01q7w1o7yVq7RFKgrxeYKOk9a+0ca+0X1tqHJRVLuqM29QEAAAAAgPA0depUlZeXn9Pz\nhUnSjBkzVF5eHhbzhdW12o4Me0bSH621f66jOq6UtNKnbcWJdgAAAAAAAKBORNZ0A2PMCDk/ynhZ\nHdbRXNJ3Pm3fnWgHAAAAAAAA6kSNwjBjzAWS5krqY609Vj8lAQAAAAAAAPWjpiPDsiSlSio2xpgT\nbRGSehpj7pDUwFpra1HHt5Ka+bQ1O9Ee1KRJk5SUlOTVlpOTo5ycnFqUAQAAAAAAgDNZYWGhCgsL\n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\nYZiIiIiIiIiIiHQZCsNERERERERERKTLUBgmIiIiIiIiIiJdhsIwERERERERERHpMhSGiYiIiIiI\niIhIl6EwTEREREREREREugyFYSIiIiIiIiIi0mUoDBMRERERERERkS5DYZiIiIiIiIiIiHQZCsNE\nRERERERERKTLUBgmIiIiIiIiIiJdhsIwERERERERERHpMhSGiYiIiIiIiIhIl6EwTERERERERERE\nugyFYSIiIiIiIiIi0mUoDBMRERERERERkS5DYZiIiIiIiIiIiHQZCsNERERERERERKTLUBgmIiIi\nIiIiIiJdhsIwERERERERERHpMhSGiYiIiIiIiIhIl6EwTEREREREREREugyFYSIiIiIiIiIi0mUo\nDBMRERERERERkS5DYZiIiIiIiIiIiHQZCsNERERERERERKTLUBgmIiIiIiIiIiJdhsIwERERERER\nERHpMhSGiYiIiIiIiIhIl6EwTEREREREREREuoxTCsMMw3jAMAynYRjPNbPeLMMwEgzDqDAMI9Ew\njBsaWOcHhmHsNQyj3DCM7YZhXHIqtYmIiIiIiIiIiHg66TDMMIwJwK3A9mbW6wd8CnwDjAH+Crxm\nGMYFbutMBf4L/BMYCywBPjEMY/jJ1iciIiIiIiIiIuLppMIwwzACgbeAm4GCZla/HThsmuZ9pmnu\nN03zBeAD4C63dX4J/M80zedq13kI2ALceTL1iYiIiIiIiIiINORkW4a9ACwzTfPbFqw7GfjaY9mX\nwBS3+SktWEdEREREREREROSU2Fq7gWEY11FzKuP4Fm7SC8j2WJYNBBuG4WOaZmUT6/RqbX0iIiIi\nIiIiIiKNaVUYZhhGNPAX4HzTNKtPT0kiIiIiIiIiIiKnR2tbhsUDPYEthmEYtcuswAzDMO4EfEzT\nND22yQIiPJZFAEW1rcKaWieruYLuuusuQkJC6i1bsGABCxYsaG5TERERERERERE5yyxevJjFixfX\nW1ZYWNji7Y0Ts6smVjaMACDGY/EiYC/whGmaexvY5gngEtM0x7gt+y8QaprmpbXz7wB+pmle7rbO\nGmC7aZp3NFJLHJCQkJBAXFxci++DiIiIiIiIiIh0Llu2bCE+Ph4g3jTNLU2t26qWYaZplgJ73JcZ\nhlEKHKsLwgzDeAzobZrmDbWrvAz83DCMJ4HXgfOAa4BL3a7mr8AKwzDuBj4DFlDTCu2W1tQnIiIi\nIiIiIiLSlJP9N0l3nk3LIoE+rgtNMxm4DDgf2AbcBdxkmubXbuusA34I3Fq7zlXA5aZp1gveRERE\nRERERERETkWr/03Sk2masz3mf9rAOquoaenV1PV8CHx4qvWIiIiIiIiIiIg0pi1ahomIiIiIiIiI\niJwVFIaJiIiIiIiIiMhZbfnB5S1eV2HYKXKaTv6z/T9sztjc3qWIiIiIdChO08nXh79mwYcLeHHT\ni+1djoiIiHRSb+94mwe/fbDF659yn2Fd2bGyY9zwyQ18duAzABaMXMBj5z1Gv9B+7VuYiIiINKjK\nUYWBgZfVq71LodJeSX5FPr0Ce7V3KW3uaNlRFm1bxCsJr3Aw7yBRQVG8s+sduvl147qR17V3eSIi\nItKJvLntTX665KfMiZ3DMpa1aBuFYSdpXdo65n8wn7LqMpYtWEZ2STa//+73DP3HUH416Vf8dvpv\nCfUNbe8y5SQlFySzN3cvM2JmEOAd0KbXnV2SzZeHvqS8uhxfm69r8LH51J+3Hp8P8gki0DuwTesQ\nkbNHfnk+7+5+l4m9JxIXGdfe5ZyV9uTu4aVNL/HvHf/Gx+rDHRPu4PbxtxMRGHHGa3E4Hby14y3+\n8N0fSCtKY0LUBK4dcS0/GP4DYkJjzng9bcU0TVanrublhJf5YM8HAFw74lreuPwNpvaZysJPFnLD\nJzcQFRTFjJgZ7VyteEovSueRFY/Qw78HE6ImMD5qPH1D+mIYRnuXJiIi0qh/bfkXtyy7hZvjbubW\nqFtbHIYZpmme5tJOD8Mw4oCEhIQE4uLO3I6BaZo8t+45HvjmASb1nsQ717xDdHA0ACVVJTy79lme\nWvsUfjY/Hpr5ELeNvw1vq/cZq09OTVphGv/3/f/xr63/wu6042fz46JBF3Hl0CuZGzuXML+wk7re\n1MJUPt77MR/u/ZDVqasxMTEwMGnZ+89iWJjVbxbXjbiOq4ZdRXf/7idVx6motFeSWphKWlEaJVUl\nlFeXU2GvaHpwVOBt8ebGcTcyKXrSGa/5ZOWW5rImbQ27cnZhNaz42HzwtnrjY60dNzLfK7AXMSEx\n2nGQNpNdks3z65/nxU0vUlxVjNWwcv859/PQzIfwsfm0d3kdXpWjio/2fsRLm19iVcoqwgPCuWnc\nTRRVFvHGtjdwOB38aNSPuGvKXYwMH3na6zFNky8OfsH9X9/PzpydXDP8GuYMnsPSxKV8fuBzKuwV\nTOo9yRWM9Qnpc9pragsFFQX8e/u/eXnzy+w9upfB3Qbzs/ifccPYG+jh38O1XpWjiovfupitWVtZ\ne+NahvUc1o5Vi7vNGZuZt3geDtOBl8WLI8VHAOjp35MJvSe4wrEJURPaJUA+26xPX4+XxYu4yDj9\nJhCRZmUUZ/Dk6icpqCxgQOgABnYbyICwAQwIG0BEQESH/RzJK8/j1YRXeSXhFfoE9+GeKfcwd8hc\nLMaZ643rlc2vcNtnt3H7+Nv5x6X/YNvWbcTHxwPEm6a5paltFYa1Ql55Hgs/WciyxGXcN/U+/jz7\nzw2eZpFZnMlD3z3E69teZ0DYAJ48/0muHHplq1/EFfYKdmbvJLs0mzERY4gOjm63N0KVo4o3tr7B\n+3veZ27sXG6Ku6lTtVTKLM7k8dWP80rCKwR5B3H/OfdzyeBL+N+B//Hxvo9Zl74Om8XGrH6zuGro\nVVw+9HKigqKavM4Dxw7w4d4P+WjvR2zK2IS31ZsLBlzAVcOuYt6QeXT3647daXcFR5WOyhPCpEp7\nzbL0onQ+2PsB3yZ9i8WwcOHAC1kwcgGXD7mcIJ+gNnkMSqpKSClIIbkgmZTCFFIKUkgpPD6fVZLV\n4HYGBn5efvVatbkPmcWZJBUkMSNmRs3jOuiSDvWBbpomB/MOsiZtDatTV7M6dTX7j+0HoLtfTehY\n5aii0lFJlaOq2evrHdSb6THTmd53OjNiZjC85/Az9oVQaa9k6f6lLNq+iHVp6xjcfTAje45kVMQo\nRoWPYlTEKMIDws9ILXJqkguSeXrN07y+7XW8LF7cPv527px4J4u2LeLRVY8S2z2WRVcsYnzU+PYu\ntUNKKUjh1YRXeW3ra+SU5jAjZga3j7+dq4Zd5TpAlVeexz8T/snfN/6dI8VHuGDABdw95W4uGnjR\nafmM2pyxmfu+uo/vkr9jRswMnjr/qXoHCYori/k08VPe2/Me/zvwPyodlUztM5Vrh1/LNcOvoXdw\n7zav6VSYpsnGIxt5JeEV3tn1DtXOaq4ceiW3jb+NWf1mNfq5V1BRwLTXp1FaXcq6m9Z1ylNEzzYf\n7PmAn3z8E0ZFjGLJdUvoFdiLzOJMNmVsYnPGZjZlbGLTkU0cKz8GQJ/gPq5gbHL0ZM7pe44O/NYy\nTZPHvn+M33/3ewCigqKYGzuXeUPmMbv/bHxtvu1coYh0JMWVxTy99mmeXfcsfjY/YrvHcjj/MNml\n2a51/Gx+rmBsYNjxkGxgt4HEdo89o8FTnYN5B/nr+r/y+rbXcTgdLBi1gMRjiaxNW0ts91jumXIP\nPxnzk9P+mffCxhe483938suJv+QvF/8FwzDYsmWLwrC2tiF9A/M/mE9xVTFvXvEmc2LnNLvNzuyd\n3Pf1fXxx8AvO6XMOz174bKOtYyrtlezM2cnmjM0kZCSwOXMzu3J2YXfaXeuEB4QzPmo88ZHxjI8a\nz/io8c0GMqfK7rTz9o63+ePKP5JckMyUPlPYkL6BYJ9g7phwB7+Y+Iuz+ghhbmkuT655khc3vYiP\nzYffTPkNv5z0yxMCpoziDJbsW8JH+z5iRfIK7E47k6Mnc9XQq7hy2JUM6jYI0zTZmbOTj/Z+xId7\nP2RXzi78vfy5ZNAlXD3sai4dfCkhviGnVG92STYf7PmAxbsWsyZtDb42Xy4bfBnXjbyOywZfhp+X\nX5PbV9orOZh3kH1H99UMx2rGh/MPk1ee51rPZrHRJ7gPMaExxITE0C+0HzEhMcSExtA3pC8hPiGu\nsMtmsTW54+hwOliyfwlPrnmSjUc2MjJ8JPdNvY/rRl7XLn32VDuq2Za1rSb4SqsJv3JKczAwGBUx\niml9pjGt7zTO6XsOfUP61tvWNE3sTrsrGKu0V9YLypLyk/g+9XtWpawiITMBu9NOmG8Y0/pOc4Vj\ncZFxbXq/TdNkS+YW3tj2Bv/d+V/yK/KZ1HsSFw+6mKSCJHZm72RP7h4qHZVAzefIqPDj4dio8FGM\nCB+Bv5d/m9XUkaUUpBDmF0awT3B7l9KgPbl7eHLNk7y9421CfUP59eRf8/MJP6/XKnVH9g5+uuSn\nbM/azn3n3MfDMx8+5VZiOaU57M3dy7jIcR32sWmOw+ngy0Nf8tLml/j8wOcEegfyk9E/4bbxtzEi\nfESj21U7qnl/z/s8t+45EjITGNZjGHdNvosfj/5xs5+pLXEo7xC/+/Z3vLv7XYb3HM4T5z3BnNg5\nTX5uFlUWsXT/Ut7b/R5fHvqSKkcV0/pO49rh1zK7/2wGdhvYLjvVVY4qVqWs4rPEz/j0wKcczDtI\nTEgMt8bfyo3jbmxxsJVamMrk1yYTFRTFyoUr27w7AmkZ9+Bm/oj5vHH5G42+5k3TJKUwhU1HNtWE\nYxmbSMhIoLiqmGCfYC4edDHzYudxyeBL6ObX7Qzfk47B4XRw5+d38nLCyzwy8xFmxMxg6f6lLE1c\nyuH8w/h7+XPhwAuZFzuPy2Iv67AHp0zTpMJeQVFlkWsorio+Pl1ZXO+yCnsFEYERRAdH0ye4T804\npA9hvmEd6uBnW3A4HVgt1vYu4wRl1WVkFmeSWZJJZnEmGcUZZJYcH2cWZ+Jl9eKywZdxxdAriI+M\nPyuem/zyfJ5Y/QQbMza69kf6h/anf1h/+of2JyooqkM+Hy1hd9p5bctrPLLiEQorC/n1pF/zwLQH\nXPuKpVWlJBUkcSjvEIfzD9cMBTXjpPwk1+/6MN8wpsdMZ1bMLGb1m8XoiNGn7TExTZM1aWt4bt1z\nfLLvE3r49+DnE37O7RNud32erU1by7PrnuXjvR/TM6And064kzsm3HFazmr6y/q/cNeXd3H35Lt5\n5sJnXK9phWFtyDRN/rrhr9z31X2MjxrPO9e8c8IOcnOWH1rOvV/dy47sHcwfMZ8/zvojJVUlNcFX\nZgKbM2qCr2pnNTaLjZHhI4mPjHeFXhGBEWzL2uYKyTYd2URuWS4AkYGRxEfFMz5yvCsga4twymk6\neX/3+zy84mH2H9vPlUOv5I+z/sioiFGkFKTwl/V/4Z9b/ondaWfh2IXcM+UeBncffNK3l12SzXfJ\n35FVkoXFsLgGq2E9Pm2x1ltutVjpG9KX4T2Ht3rnLa88j2fWPsPfNvwNi2Hh15N/zd1T7m5RP295\n5Xl8mvgpH+/7mC8OfkGFvYKR4SOpsFdwMO8gIT4hzB0yl6uGXsVFgy46bSFDamEq7+1+j3d2vUNC\nZgKB3oFcMfQKrhtxHfFR8fVCr/3H9rtCL6fpBGo+PIf2GMrQHkMZGDawJvCqDb9Ox5eLaZp8n/o9\nT655ks8PfE6f4D7cPeVubo67uc1aGZqmSWFlYb0fBO7j9KJ0EjITKKsuw9fmy6Tek2qCrz7nMKXP\nlDbt56+0qpQNRzbwfcr3rEpdxbq0dZTby/H38mdy9GSm951OfGQ8Q3sMpX9Yf2yW1nXhmFOaw1s7\n3mLRtkXszNlJZGAk14++noVjF55w6pHdaedQ3iF25uxkZ/bOmnHOTg7lHXKdshseEI6flx9+Nr96\nY1+bb/1ltdMRAREMCBvg+kHSkXdm0wrTeGfXOyzetZitWVvxsngxq98s5sbOZe6QuR3iT082HdnE\n46sf5+N9H9M7qDf3Tr2Xm+NubvRxrXZU89Sap/jjyj8yuPtgFl2+iAm9J7TqNh1OB8sPLee1ra+x\ndP9S7E47BgYjwkcwJXpKzdBnCkO6D2n1j+a88jx2ZO9gR/YOtmdtZ3fubvy8/EmgysAAACAASURB\nVOgT3KdmCKk/DvUNbfFtmKZJWXUZeeV55Ffkk1+ez/r09byS8ApJBUmM7TWWO8bfwYJRC1r12VLX\n39Vz659jyb4ldPfvzh3j7+COCXec1Pdqbmkuj656lJc3v0zPgJ78adafuGHsDa1+rxdUFLB0/1Le\n3f0uyw8tdz1PMaExxHaPZXC3wcR2j3VNx4TGtPo2mpJdks3nBz7n0wOf8tWhryiuKqZ3UG8uG3wZ\nVw67kgsGXHBS3xdbM7cyY9EMZvWbxcfzP27TmptjmiYmZrscTW+tvPI8Dhw7wMG8gzVD/kHCfMO4\nZ8o9p9S/XKW9kpuX3cxbO97i4ZkP8/DMh1v9PneaTrZnbWdZ4jKW7l9KQmYCVsPKtL7TmDdkHnNj\n557Sb8OzSVl1GT/88Id8mvgpr8x5hZvibnJdZpome4/uZen+pSxLXMa6tHUATI6ezLwh85g3ZB7D\negxr93Bi/9H9/HPLP3lz+5scLTva6HpWw0qwT7Br8LH5kF2STUZxBg7T4VrP38uf6ODo+iFZcB8i\nAiNO6B+3rt9cz/kz+bnQlC2ZW/j1F79mffp6xkWOY2r0VKb2qRnOdKvdkqoS3t7xNh/u/ZC0ojQy\nizMprCyst46vzZfIwEgigyKJCooiMjCS/Ip8Pkv8jPyKfKKDo5kXO48rhl7BzH4zO1zLzgp7BX/f\n8HceW/0Y1Y5qLhp0ERnFGSTlJ9VrMeVl8aJvSF/Xb9H+of3pF9rP1XKqh3+Pdn9feTJNk2WJy7j/\n6/vZf3Q/14+5nkfPfbRV+YLTdJJZnMn+Y/tZnbqaFckrWJe+jgp7BSE+IcyImcHMmJnM6jeLsb3G\nnvI+nd1p58M9H/LsumfZlLGJYT2GcfeUu/nRqB81egDlYN5Bnlv3HG9sewMDgxvH3chdk+9iYLeB\np1RLnWfWPsO9X93L/efcz+PnPV7veVYY1kbyy/O5cemNfLLvE+6Zcg+Pn/f4SbfocDgd/Hv7v/n9\nd78nozgDqPkyGRE+gvGR42sCrajxjI4Y3ezRXtM0SS9Krxembc7Y7Gq+3j+0PxcOvJALB17I7P6z\nW7WDb5omS/cv5Q/f/YGdOTu5dPCl/GnWn4iPij9h3fzyfF7a/BJ/2/A3ckpzuHLYldw79V4mR09u\n9nbyyvNYkbyC75K+49vkb9mTuweo+eI0TROn6cRpOnGYDld405Q+wX0YET6CET1rh/ARDO85/IQd\nocKKQp5f/zzPr38eu9POLyb+gnun3nvSaXVpVSlfHvqSJfuX4GP14aphVzG7/+wz/qVy4NgB187+\n3qN7XcsthoV+of1qQq/uQ13h15AeQ+jp37PdviB2Zu/k6bVPs3jXYoK8g7hjwh38ctIvmzxK6jSd\nZJdkk1qYSmphKimFKaQWpnKk+Igr7MoqyaLCXlFvu0DvwHo/COIj45nWdxpxkXFn9HmqdlSzJXML\nq1JW8X3q96xOXU1+RT4A3lZvBncb7Hp+3Af313CVo4rPD3zOG9ve4PMDn2MxLFw+5HIWjl3IhQMv\nbPWPxrLqMvbk7mFn9k7Si9Ipt5e7+oIrt5e75j3HZdVlZJVkuY5KQU2/Mu7hWP/Q/q75PsF9zngr\nwNzSXN7f8z6Ldy1mdepqfKw+zImdw7UjriWnNIel+5eyInkF1c5qRkeMdp3GMj5q/EnvIBdVFpFT\nmoPVsGKz2LBZbHhZvVzTNosNL4sXFsOCYRiYpsmK5BU8tvoxvj78NYO7DeaBaQ/w49E/bvFrc2f2\nThYuWci2rG3cN/U+Hpn1SLOtxFIKUnh96+u8vu110ovSGRU+ilvibmF6zHS2Zm5lXfo61qWvY3fO\nbkxMuvl1Y3L0ZFdANrH3RFfrWYfTwYG8A2zP2l4TfGVvZ3v2dtKL0gHwsfq4PpurHFWkFaWRVph2\nwk5TgFeAqzVBn+A+9ArsRUlVSb3AK78iv2a+PJ9qZ3W9++Rj9WH+yPncPv52JvWedMqfbYfyDvHX\nDX/l9a2vU+WoYlC3QfQK7OUaIgIi6s33CuxFD/8eWC1WSqtK+cv6v/DkmicxDIMHznmAX03+VZsc\nGCmoKGBH9g4OHDtA4rFEEvMSXUFJ3fvRy+LFgLABrnAsKiiKngE96enfs964sXqcppOtmVv57MBn\nfJr4KZsyNmFgMCl6EnMGz+Gy2MsYEzGmTb4/vjj4BXP+O4db42/lhUtfaPPvJNM0ySnNYVfOLnbn\n7mZXzi7XYBgGlwy6hHlD5nHJoEtOuk/QtnC07CgH8w4eD73yj0/XfU8ARAREMKjbIBKPJVJQUcCN\n427kwekPtvogbW5pLle+eyWbMzbzxuVvsGDUgja5H0eKjvBp4qcsS1zG14e/ptJRydAeQ5kXO4+5\nQ+YyJXpKkztldqedsuoySqtKKasuo6y6jHL78f5J3fsqbWi53WlnVMQopvaZyuBug8/Yb5yjZUeZ\nu3guO7J38P4P3ufSwZc2uX5OaQ6fJX7GssRlfHnoS8qqyxgQNoDZ/WYzs99MZsTMaPVzerIq7ZV8\ntPcjXt3yKiuSV9Ddrzs/GfMT4iPjCfIJqhd6BXnXzPvafBt8bB1OB1klWaQVpZFelE5aYe246Pg4\nozijRb/r61gNK4O7D+aKIVdw1bCrGB81/oz+ds0qyeLBbx5k0bZFDO85nBvG3MD27O2sTVtLUkES\nADEhMa5gbGqfqYyOGH1aQrxdObt4adNL/GfHfyitLuWCARcwrMcwIoMiiQysDb1qpxs7wFTtqGZ1\n6mo+2fcJn+z/hNTCVEJ8Qrh08KVcMfQKLh50cbu2Dnf/c5mM4gxujb+Vh2Y+VK/VcVl1GSkFKSQV\nJJFckExSfhJJBUmuefczXQK9A13B2IDQAcenwwYQExrT4D63aZqUVpdSUFFAfnk+BRUFNdMVNdPV\njmpGhI9gXK9xrT5QtunIJn7z1W9YlbKK8/qfx9MXPM24yHEn/4C5qbRXsvHIRlamrGRF8grWpq2l\n3F5OsE8w0/tOZ2bMTCZFTyLUN5QArwD8vfzx9/InwDug0ddrYUUhr215jb9t/Buphamc1/887ply\nDxcNuqjFv5VzS3N5afNL/GPjPzhWfoyrhl3Fb6b85pT6kn78+8d58NsH+d303/HouY+e8FpXGEbN\nG2Vv7l525exiZ85OMooz6OHfg/CA8BOGiIAIAr0D6z2Qm45s4toPrqWgooA3r3iTeUPmtUndpVWl\nfHbgM2JCYhgdMbpNTsGA483XN2dsZmXySpYfXk7isUQshoWJvSdy4YCacGxi74kN7pSapsnyQ8v5\n/Xe/Z3PGZmb3n82j5z7K1D5Tm73tCnsF/9n+H55Z9wyJxxKZ3nc69069l8tiL3O9UYoqi/g+5Xu+\nS/6Ob5O+ZVvWNkxM15f/7P6zmdVvFpFBkY3eP/dwzGk6qXZUczj/MLtzd7M7Z3fNOHc3SflJro7p\nY0JiaoKxHsPxsfnw4qYXKbeXc8f4O7jvnPvO6lM8G1J3qubBvIPEdo9lULdBHbp/itTCVP6y/i+8\nmvAqDtPBwjELmTdkHpklmaQUpJBalFozru24373PrgCvAGJCY+gd1Nv15V8XetWNewX26rB925mm\nyZHiI8dPWXUb6jouBogOjmZoj6FEBkbyv4P/42jZUeIj4/np2J9y3cjr2uXPFKBmhzmrJMvVXLvu\nh0jdfHpRuut96NmvnJ/Nbdqt9Znr31O9g4gJrWkOX9ckviVH94oqi/h478cs3rWYrw9/DcAFAy9g\nwcgFXDH0ihN+4BVVFvHlwS9ZlriMzw58Rl55Hr0CezFn8BzmDpnL+QPOrxcYlFWXuX54JRckH/8h\nVpBEUn5SvZ3W5tSFYxX2Csb2Gstvp/2Wq4ddfVJH7zxbib1x+RtM7D2x3jpVjiqW7FvCa1tf46tD\nXxHgHcAPR/6Qm+NubnTnorCikA1HNrAurSYcW5++nsLKQiyGhZHhI/G2erMrZ5crgI4KimJMxBhG\nR4x2jYf0GNLgjyy7016z0+S2s5RWmFYzLkojpzSHQO9AwnzD6ObXjTC/MMJ8w06Yr5uOCoo6Le/1\ngooC3t7xNgfzDpJVmkVWSc2QXZJ9wvNtMSz09O9JtbOa4spifj7h5/xuxu/qdSB/ujicDtKL0kk8\nlsiBvAOu8YFjB8gqyaK4qviEbfxsfieEZIZh8NWhr8gsySTYJ5iLBl7EnNg5XDLoEnoG9Dwttb+2\n5TVuWXYLT53/FPeec+9JX09BRQG7c9wCr9yacV0LFx+rD8N6DmNk+EhG9qxpzb0scZmrNdOMmBmu\nULytjlx7qjuYuSVzS82QtYWEjAQySzJd60QGRjK4+2AGhQ1iULdBNdPdBjEwbKArhC6tKuXFTS/y\n1NqnKKwo5KZxN/Hg9Adb9IcLu3N2M3fxXEqrS1ly3ZIWHcA8GaVVpXx1+CuW7V/Gpwc+Jac0hx7+\nPRgZPtJ1UMVz8Ay5m2IxLK7vjbrvEdM0OZx/GBOTHv49asKJ2hY846PGt9lvbndJ+Ulc/PbF5Jfn\n89kPP2t1C90KewXfJn3L5wc+Z0XyCnbn7gagX2g/ZsbMrBn6zaR/aP82DYHqWoEt2raIY+XHmNVv\nFrfG3cqVw648rb8b7U47+eX59frKresft6H58upyNmZsZOn+peSV5xEdHO0KxqbHTD9tLccq7BU8\nv+55Hlv9GD5WH/507p+4Nf7WereXUZzBurR1rE1by9r0tSRkJFDtrCbAK4CJvSdyTp9zmBw9mYm9\nJ57052ddWPnS5pf4PvV7IgIiuCXuFm6Jv+WUA1PTNNmevZ1P9n3Ckv1L2Ja1DW+rN7P7z+aKIVcw\nrOcwnKbTtQ9mYjY6bxgGI8NHnnRLe9M0+d/B//HA1w+4/lzm/2b/H7HdY1t9XYUVhSQXJB8/tdDj\n9EL3z5neQb2JCY2hylHlCr0KKgrqdVPkzs/mh8WwUFpdCtR8Xo+LHMe4XrVD5LgG36tJ+Uk8+O2D\nvLPrHUaGj+Sp85/i4kEXn9Zgt8pRxaYjm1iRvIKVKStZk7aGsuqyBtf1sni5gjFXSOYV4PqNt2DU\nAu6efDdjeo056XrKq8v59/Z/8+y6ZzmQd4Bz+pzDZYMvY0qfKUyImtDiM0z+tPJPPLziYR6Z+QgP\nzXyowcewS4VhGzZuILBfYE3olb3T9eOn7vQfqGkp1SekD3nleeSU5nC07OgJRyV8bb6ucKy7X3e+\nTfqWcZHjePeadzvEKTQnI6Ugha8Of8XyQ8v5+vDX5FfkE+QdxOz+s7lw4IVcMOACBnUbxKqUVfz+\nu9+zOnU1U/tM5dFzH2V2/9mtvj2n6WTp/qU8vfZp1qatZViPYVw86GLWpa9j05FNOEwH0cHRzO4/\nm3P7ncu5/c49LX8hXxeEuodke3L3kFWS5TqKerr7WpPWySvP46VNL/HXDX+tdwpwXR9lfYP7Hp8O\n6UtMSEyrTqs62xRVFpF4LJG9uXtdfbulFKQwM2YmC8cuZFTEqPYusVlVjipSC1NJyk8ipTCF0qrS\nE47ol1eXU+E48Yh/QUUBKYUpFFUWua7P38vfFY71C+lH/7D+rvmUghQW71rMp4mfUumoZHrf6SwY\nuYBrhl/T4h+gdqedtWlrWbZ/GUsTl5J4LBFfmy/T+k6juLKYpIIkckpzXOt7WbxcgZ170/xegb1w\nmk7sTjt2p51qZ7Vr2u60U+2oPz+kxxAuGHBBm7yWd+XsYuEnC9matZV7p97LI7MeISk/iX9t/Zfr\ntJepfaZy87ib+cGIH7Q6PHKaTvYd3ecKxxymg9HhoxnTqyb4OhOhT0dSYa8gpzTHFZDVhWTl9nJu\njruZAWED2rtElwp7BUfLjpJbmktuWe6J49rpCnsFM2NmMid2DtP6TjtjLTr/8O0f+PP3f+adq99h\n/sj5Ld6uLuR9dcurrgDcaliJ7R5bE3q5DQPCBjS445xelO5qzfTN4W+odFQyvOdw5sXWnL42sffE\nkwqp64IZ9+BrS+YWVzjX078n8VE1XWKMiRjDkB5DGBg2sFWnnJdUlfDCxhd4eu3TFFcVc/O4m/nt\n9N+6/uXc0xcHv2D+B/OJCYlh2YJlp+U3WEOcppONR2oCjeSC5HqtEpoa/Lz88Pfyb/BASmOvzYKK\nAjakb3AFFOvT11NSVYLNYiMuMq5NT2/bkrmFS9++lEDvQL748RcM6jbolK4PalpR1PU9ujJlJduz\ntmNi0juoNzP7zXQFZLHdY1v9vVEXrLyS8AorU1bS3a87C8cu5Ja4WxjSY8gp13462Z12vk/5no/3\nfczH+z4mvSid7n7dmTtkLlcOrTlduy3CTtM0+WjvR9z71b2kFaVx54Q7eWjmQy1qOVphryAhI8H1\n2lubttb1u6F/aH8m9p7IpN6TmNh7IuMixzXZWji5IJlXNr/Cv7b+i9yyXGb1m8Xt42/niqFXnLaz\nGpILklmybwlL9i9hVcqqeq23W6pvSF/Xa3RGzAwGdRvU7Ot045GN3P/1/axIXsHMmJk8ef6Tp+0f\n6B1OBxnFGfWCspTCFHxtvoT6hhLmG0aob2jNtF/YCct8bD6YpklSQRJbM7eyNat2yNzqOqgR4hPC\n2F5jXeHYjuwd/H3j3+nu151Hz32UhWMXtks/Z1WOKg4cO0BpdWm9Frh18w0tiw6O5rbxt7XpfrPT\ndLJs/zJe2vwSa9PWuv4pfVTEqHpddAwMG1jvtWOaJg+veJhHVz3Kn8/9M7+b8btGb6NLhWG222zY\ne9Wkt70Ce7mO+I0Mr/kHtYZOlXM4HRwrP0ZOaU6DQ3ZpNqPDR/OHmX/ocOdQnyyH08GWzC0sP7Sc\n5YeXszZtLXannfCAcHJKc4iLjOPP5/65zVLqNalreHrt0yRkJnBOn3NcAVhLPhRPl7ojF9JxVdgr\nyCzOJCoo6pQ7BJezm2maFFQUkFyQ7BrqWmLVTZdUlbjWj4uMY8HIBcwfMb9FrSOas//ofpYlLmNV\nyiq6+3d3BXB1oVdH7bTV7rTz9JqneWTlIwR5B3Gs/Bjd/bpzw5gbuCnuJob3HN7eJYqcwDRNbvjk\nBt7d/S5fX/8102OmN7n+gWMHeG3La7yx7Q1yy3KZ1ncaC8csZGLvicR2jz3p74+SqhK+OvQVSxOX\n8mnipxwtO0p4QDhzBs+hf1h/qhxV9f48pcpRRZXzxGWl1aXsztnt6scnOjiauMg44nrF1Ywj44gK\nimqz3yTFlcX8Y+M/eGbdM5RUlXBL3C38dtpv64U9/9j4D371xa+4ZNAlLL56cZv9E3VH53A62JWz\nq15AcTj/MAADwgZw9bCrmT9iPnGRca16PpYfWs7V713N0B5D+eyHn522zvDzy/NZnbqalSkrWZmy\nki2ZW3CaToK8g1x/BhPsE0yIT0i9Uxo9T29cn76eN7e/Wa8V2FXDrjorf2uZpsnmjM2uYGzf0X0E\neAVwyeBLuHLolUyJnkJMaEyruzzYmrmVu768i5UpK7ls8GU8c+EzDO0x9JTqTC5IZuORjWw8spEN\nRzaQkJlAhb3CtfNfF45N7D2RId2HsPzQctefwAT5BHHDmBu4bfxtZ/y7O788n9yy3JpuHTAwDMM1\nXdfVg/t8tbOazRmbXSHutqxtOE0nkYGRrhB3RsyMen3jHcw7yIPfPMj7e95nZPhInjjvCS4dfOlZ\nu6+WXZLtCsbqQrKDeQcJ9A7kvqn3cfeUuzt0/7rtweF0sCd3j+vsg3Xp69h3dB8APfx7uLromBw9\nma8OfcUTa57gifOe4P5p9zd5vV0qDLv/zfu5ZMYljAgf0eWOSp+K4spiVqasZFXKKqZET+GKoVec\ntR8+ItL1mKZJfkU+SflJhPiGtMkR+c5kd85uXtr8EjNiZnD5kMvPyh0e6VqqHFVc/NbFbMvaxtqb\n1p6wE1ppr+STfZ/w6pZX+TbpW8J8w7hhzA3cEn/LadlRdDgdrE9fz7LEZa5gzNvqjY/NB2+rd73B\nx1p/ma/Nl6E9hhIXGXdS/cqcrOLKYv6+8e88s/YZyqrLuDX+Vn4z9Tc8ufpJXtz8IndPvpunLniq\nQwb5Z1JWSRbr0tax/NByPtz7IblluQwMG8i1I65l/oj5jI4Y3eRv4v9s/w83Lr2RCwZcwHs/eO+M\ndsdQVFnE2rS17MzeefwfHauKKKworPcPj3VD3elcZ1MrsNbam7vXFYxtztgM1JzONrTHUIb3HM7w\nnsMZ1mMYw3sOZ2C3gSe0EM0uyeZ33/6O17e+ztAeQ3n+oue5aNBFp6XWakc1u3N3syF9Q01IlrHR\n1T+n1bDiMB2M6zWOOybcwYKRC87a8KSwopA1aWtYmbySVamr2JyxGbvTTk//nsyImUGwTzD/2fEf\negX24tFzH+X60dd3ys+losoiDIwuc/ChLeSV57HxyEbXWQgbjmxwnSny7IXPcveUu5u9ji4Vhp3u\nf5MUERERkdOvoKKAaa9Po7S6lPU3rSciMILEY4n8M+GfLNq+iKNlR5kRM4Nb427l6uFXd+g+MdtT\nUWURf9vwN55d9ywFFQXYLDZevPRFbom/pb1L63DsTjsrklfw7q53+WjfR+SV5zGk+xBXMDYifIRr\nXdM0eWL1Ezz47YPcOPZGXp7z8hn/c5jWsjvtFFcWE+gd2OFrbQsZxRnsyN7B3ty97Mndw56je9iT\nu4eCigKgpouD2O6xrpDMNE2eX/88XlYv/jjrj/ws/mdn/HEqriwmITOB7VnbXX2MdbYGCiVVJaxP\nX8/K5JoWjskFydw58U5+MfEXp6UvP+k8nKaTvbl7KbeXMz5qfIu26VJh2KbNmxkff+I/HYqIiIjI\n2SW1MJXJr00mPCCcML8wViSvoJtfNxaOWcjNcTczrOew9i7xrFFYUcg/t/yTib0nMiNmRnuX0+FV\nO6r5Jukb3t39Lh/v/ZjCykKG9xzO/BHzuWb4Nbyw8QVe3PwiD814iEdmPdLpAovOyjRNskuz2ZO7\np15Itjd3L8fKj3HH+Dt4eNbDdPPr1t6likgb6FJh2H9XrWLB9Kb7lhARERGRs8O2rG3MfnM2oyNG\n87P4n532f7gT8VRpr+Srw1/x7u53WbJvCcVVxVgMCy9d9hK3xt/a3uVJG7E77aftHylFpH20Jgw7\n69/9G4qKWNDeRYiIiIhImxjbayzH7jumljfSbnxsPsyJncOc2DlU2Cv48uCX9Arsddr+5U7ah4Iw\nka7trP8E2Fhc3N4liIiIiEgbUhAmHYWvzZfLh17e3mWIiEgba91/znZAW0tKqHQ627sMERERERER\nERE5C5z1YViF08n6oqL2LkNERERERERERM4CZ30YFmK18nV+fnuXISIiIiIiIiIiZ4GzPgybEBys\nMExERERERERERFrkrA/DJgUHs7GoiEK7vb1LERERERERERGRDu6sD8MmBgXhBFYWFLR3KSIiIiIi\nIiIi0sGd9WFYtK8v/X19daqkiIiIiIiIiIg066wPwwDOCwtTGCYiIiIiIiIiIs3qFGHY+WFh7C0r\n40hlZXuXIiIiIiIiIiIiHVinCMNmh4YC8I1ah4mIiIiIiIiISBM6RRjW09ubsYGBCsNERERERERE\nRKRJnSIMAzgvNJSv8/MxTbO9SxERERERERERkQ6q04Rh54eFkVFVxb6ysvYuRUREREREREREOqhO\nE4ZNDw3FyzD0r5IiIiIiIiIiItKoThOGBVitTA0OVr9hIiIiIiIiIiLSqE4ThkHNqZLfFRRgdzrb\nuxQREREREREREemAOlUYdl5YGEUOB5uLi9u7FBERERERERER6YA6VRg2ISiIIKtV/YaJiIiIiIiI\niEiDOlUYZrNYODc0VGGYiIiIiIiIiIg0qFOFYVDTb9i6oiJKHY72LkVERERERERERDqYTheGnRcW\nRpVpsrqwsL1LERERERERERGRDqbThWHD/P2J9PbWqZIiIiIiIiIiInKCTheGGYbB+WFhCsNERERE\nREREROQEnS4Mg5p+w7aVlHC0qqq9SxERERERERERkQ6kU4Zh54WFAfBtQUE7VyIiIiIiIiIiIh1J\npwzDevv4MNTfX6dKioiIiIiIiIhIPZ0yDAPUb5iIiIiIiIiIiJygU4dhSRUVHC4vb+9SRERERERE\nRESkg+i0Ydis0FAswDdqHSYiIiIiIiIiIrU6bRgWYrMxIShIp0qKiIiIiIiIiIhLpw3DoOZUyW/y\n83GaZnuXIiIiIiIiIiIiHUCnD8OO2e1sLylp71JERERERERERKQD6NRh2JSQEPwsFp0qKSIiIiIi\nIiIiQCcPw3wsFqaHhKgTfRERERERERERATp5GAY1p0quKiyk0uls71JERERERERERKSddYkwrNzp\nZF1hYXuXIiIiIiIiIiIi7azTh2FjAgPpbrOp3zAREREREREREen8YZjFMDgvLIxvCgrauxQRERER\nEREREWlnrQrDDMO4zTCM7YZhFNYOaw3DuLiZbX5uGMYewzDKDMPYaxjG9R6X32AYhtMwDEft2GkY\nRtnJ3JnGXNq9OxuKivgyL68tr1ZERERERERERM4yrW0ZlgbcD8QB8cC3wBLDMIY1tLJhGLcD/wc8\nBAwHHgFeMAzjMo9VC4FebkNMK+tq0vUREVzSrRsL9uzhcHl5W161iIiIiIiIiIicRVoVhpmm+Zlp\nml+YpnnINM2Dpmn+HigBJjeyyY+BV0zT/MA0zWTTNN8FXqUmUPO4ajPXNM2c2iG31fekCRbD4K1h\nw+hms3HVrl2UORxtefUiIiIiIiIiInKWOOk+wwzDsBiGcR3gD6xrZDUfoMJjWQUw0TAMq9uyQMMw\nkg3DSDUM4xPDMIafbF2NCfPy4qORIzlQXs6t+/djmmZb34SIiIiIiIiIiHRwrQ7DDMMYaRhGMVAJ\nvAhcaZrmvkZW/xK42TCMuNptxwM3AV5Aj9p19gM3AvOAH9XWtNYwjKjW1tac0YGB/GvIEN7OyeHv\nR4609dWLiIiIiIiIiEgHZzuJbfYBY4AQ4Brg34ZhzGgkEHsUiADWGYZhu9gUOQAAFcpJREFUAbKA\nRcB9gBPANM31wPq6DQzDWAfsBX4GPHwS9TXpuogINhUXc8+hQ4wNDGRGaGhb34SIiIiIiIiIiHRQ\nxqmeLmgYxlfAQdM0b29iHSs1oVgmNSHXE6ZpNppCGYbxHlBtmuaPmlgnDkiYMWMGISEh9S5bsGAB\nCxYsaLRmu9PJBTt2sKe0lC3jx9Pbx6fRdUVEREREREREpONYvHgxixcvrressLCQVatWAcSbprml\nqe3bIgz7BkgxTfPGFq6/AkgzTfP6Ri63ALuBz0zT/E0T1xMHJCQkJBAXF9fqunOqqohPSCDax4cV\nY8fiYznp7tNERERERERERKQdbdmyhfj4eGhBGNaqBMgwjMcMw5huGEZMbd9hjwMzgbdqL3/cMIw3\n3dYfbBjGjwzDGGQYxkTDMN4BRgC/c1vnD4ZhXGAYRn/DMMYBbwN9gddaU1trhXt78+GIEWwpLuZX\nBw6czpsSEREREREREZEOorV9hoUDbwKRQCGwA7jQNM1vay/vBfRxW98K3APEAtXAd8BU0zRT3dYJ\nA16t3TYfSACmNNEpf5uZGBzMC4MHc0tiIhOCg7kpMvJ036SIiIiIiIiIiLSjVoVhpmne3MzlP/WY\n3wc0eQ6jaZp3A3e3po62dHNUFJuKi7kjMZHRAQFMCA5ur1JEREREREREROQ0U0dZwN8GD2ZcYCBX\n7d5NTlVVe5cjIiIiIiIiIiKnicIwwMdi4YMRI6hyOpm/Zw92p7O9SxIRERERERERkdNAYVitaF9f\n3hsxgu8LCnjg8OH2LkdERERERERERE4DhWFuZoaG8szAgTybns7LR47gNM32LklERERERERERNqQ\nwjAPv4qO5sZevbj9wAFGbNrEosxMqnTapIiIiIiIiIhIp6AwzINhGPxr6FDWjBtHrJ8fP92/n4Eb\nNvB8Wholdnt7lyciIiIiIiIiIqdAYVgjpoaEsGTUKHZNmMB5oaHcd/gwfdev56GkJHL1j5MiIiIi\nIiIiImclhWHNGBEQwKJhwzg0aRI39OrFs2lpxKxfzy8OHCC5vLy9yxMRERERERERkVZQGNZCfX19\neX7QIFKnTOGBvn1ZnJ3NoA0b+PGePewsKWnv8kREREREREREpAUUhrVSdy8vHurXj5QpU3h+0CC+\nLyxk9ObNzNq6lTcyMylWv2IiIiIiIiIiIh2WwrCTFGC18ovoaA5OmsTbw4ZhMwxu2r+fXmvXcv3e\nvXyTn4/TNNu7TBERERERERERcWNr7wLOdl4WCz+MiOCHERGkVlTwVnY2b2Zl8VZ2Nn18fLg+IoIb\nevUi1t+/vUsVEREREREREeny1DKsDfX19eXBmBj2TZzIunHjuLRbN144coQhGzcyZcsWXj5yhPzq\n6vYuU0RERERERESky1IYdhoYhsHkkBBeHjKErKlTeXf4cLrZbPz8wAEi167l2t27eTUjg92lpTqV\nUkRERERERETkDNJpkqeZr9XKteHhXBseTmZlJW9nZ/Nubi63JybiBMJsNqYGB3NOSAjnhIQwISgI\nP6u1vcsWEREREREREemUFIadQZE+Pvymb19+07cvJXY7G4qLWVNYyOrCQh5PTaXY4cDLMIgPCuIc\nt4As3Nu7vUsXEREREREREekUFIa1k0CbjfPCwjgvLAwAh2mys6SENUVFrCks5L3cXJ5NTwdgoK8v\n44KCGBMQwNjAQMYGBtLbxwfDMNrzLoiIiIiIiIiInHUUhnUQVsNgbFAQY4OC+Hnv3gCkVVSwprCQ\nDcXFbC8p4bn0dPLtdgC622yuYGxM7Xiovz9eFnUDJyIiIiIiIiLSGIVhHVgfX1+u8/XluogIAEzT\nJK2ykm0lJWwrKWF7SQkfHz3qakHmbRiMDAhgTG1ANiYggNGBgXTz8mrPuyEiIiIiIiIi0mEoDDuL\nGIZBX19f+vr6Mq9HD9fyQrudHbUBWV1I9t/sbCpr/6ky2sfHFYyNCQxkdEAAsf7+WHWapYiIiIiI\niIh0MQrDOoEQm43poaFMDw11LbM7nRwoL2d7SQnbS0vZXlLCv7OyOFJVBYCvxcLIgABGBwQQ7eND\nNy8vutlshNlsruluXl6E2Ww69VJEREREREREOg2FYZ2UzWJhWEAAwwICuM5t+dGqKnaUlrLDLST7\nMi+PPLudcqezwesKtFpd4Vg3m43ePj5E+/i4xnVDTy8vLGptJiIiIiIiIiIdmMKwLqaHtzezvb2Z\nXfsvlu4qHA7y7Xby7Hbyq6vJs9vJqx3n104fra4mqaKC7wsLOVJZSXXtqZgAXoZxPCjz9ibax4dI\nHx/CbDZCbDZCPYYQqxWbWp2JiIiIiIiIyBmkMExcfK1WIq1WIn18WrS+0zTJra4mvbKywSGhpISs\nqipKHI5GryPQaiXEaj0ekNUOwVYrwW7TjS0LsdnwUaAmIiIiIiIiIi2kMExOmsUwiPD2JsLbm/ig\noEbXszudFDkcFNjt9YZCj/m6ZVlVVey32ylyOCiqXVbp1gLNk6/F4mppVq/lmUdLtGCbDS/DwGoY\n2GoHK9SM3ZfVjr0MA1+LxTX41Y7Vmk1ERERERETk7KUwTE47m8VCN4uFbl5eJ30dlU4nRR4BWaHD\nUTNuIGA7Wl3NwfJyCt1COHsTgVprWAE/q/WEoMxmGFioCQkbGhvNXN7c2Ntiwccw8LFYjg9NzNcF\nel6GgZfFcny6gXn3ENDqNl1Xt4iIiIiIiEhnoTBMzgo+Fgs9vb3peZLbm6ZJudOJ3TRxmCb22qHe\nNNRbVuV0UmmalDscVDidrqG8gem66zZNEyc1p5DWjU2ot8ysvS3PdaudTte8w+M6HKZJpWlS6XRS\n6XRS5TZdWVtnW4V9nixQLySzUhPQGVAz1E5TN++2zKhd18cwasK8ZgI879rpxgI87ybCPM+WfY0N\nRgP1WzzqtjQy7bltveuB+kGiQkQREREREZEOSWGYdAmGYeBvtbZ3GaeVoy7AcwvHqp1Oqk3z+FA7\nb/dYVhcG1gWBDrdQ0HO5vTbgM6kJ9FzTjcw7qAn6KhsI8KqcTkocDo7Z7fWCvsbqrrus8V7oOpbG\nTsdtLrDzDPjcgzzDI4BrKJisW27heEDnPl0XaNZNW2vDOyv1WyRa3ac9rtPitq3V47o8w1P3dWwe\ny2wNrNfUY6OgUURERERETpXCMJFOwmoY+Fmt+HXy0A9qWsvVBXr2VgzVTqcrqHN6BHdOj5DP2ch0\nXUu/hqYdjYSH7tN1LRA9L2+29tqWh67bbSB49KzZvZWho3aZo4lpZwPrNrTM4XZb7aGuFZ572Oh+\nGrJ7i766Vn+u5W7hpK22lWFz4Zt7eOgZDroHje5BofuyxgLGutqaC5Trpuvue2vCxsZiw4aWt/ZU\n7obC2ZaGtS2db+x2Grpez/dFU+9pGrj+hqbdXzcteUysDdTipP570nOZ53NSV4Nr2mN5c61UPR8b\nERERETmRwjAROetYDANvw8C7vQvp4sy6VoQcD8k8WxQ6GljH7rHM7rFeS4NC93XcAxD3oKFeKOEW\nSLQ0hKyqPX3ZYZonhIuNBY3up0a7B4qNjRsLhWhgWV0NTT3e7gGLSEtO8W4oQHN/DdYbe1ze0Gva\ns3uAurH7afcNBs+erUDd6mso4PZc1tB7h0aWNxX+eraSrRe0NxC8N7ROQ+9pz9PuPQNO9+fMNe0W\naLrfh3rhfAMBvPs0NHwAp7EDQw1p7uBHS0JuWrBOQ/Oej4Xna9J92vN5au7101xLZ6vHY1n32NU9\nJq5pj+UNPT71xg08r00dxHF/rXkua2obheIiIo1TGCYiIifFqNtpbe9CpB7TLZxr8PJGtmsoNGxs\n7IATWl411qKtoVaMuM+fxPYN7dS3tK+/ut3Chq6/oWn3cLW5cLMuNG3NTmxdS7K6585zR7u5x6vR\n1nAtuG+eYbHnzrx7XQ0uh0aDo4ZCIhOaDLVPaA3bQH1Nhd2mR21NPZ7u2zup+efrxp5fh8fj5fS4\nXc/rauq90dhl7o9rU485jdTnGcA3F14B9d4TLQlPGotUmnsPt6QWOb08g8UzebsNLm8gDGxsuqWt\nhhsLqFvy2XSy96uxVryedTfXktf9+6Cp22srjR3c8DyI4L6sJeH2qd7PtvqsaPB1VDdu5ABDY9t7\nblN3uefnZVOPU0PfqQ19n9Z97p+s1r6vTljWwPrN/SZxX8f9+jxfI40tb83rq6W/BbLS0mgp7cOI\niIh0IoZbqwYR6ZrcA9yGdjTaq7WQ2UwY2FiI1lQ46LmD2dipyZ7BqWer3sZaNLsfAPDcsasbNxYu\neNbXaO00vGPXWCDseXlDO4aey870M97Ybr37Dn9Dj4X7dEMha0u6rmjugI77+GTvV3OtBD1f5411\nsdHQafMtraO1z2lDr8Xmgpq615P7ZS19fpp6PZ+J12ND962xy06YbuJ16v68NrTM8zHybJ1cN27q\ns8RTc5/ZrX1f1Ztv4nL37w73Ghtrid3QZ3pjy5s6gNLQfEtbxlYWFDTxSNWnMExEREREpBPpqKF4\nvVYhHaw2ERE5+23x8iK+hetaTmslIiIiIiIiIiIiHYjCMBERERERERER6TIUhomIiIiIiIiISJeh\nMExERERERERERLoMhWEiIiIiIiIiItJlKAwTEREREREREZEuQ2GYiIiIiIiIiIh0GQrDRERERERE\nRESky1AYJiIiIiIiIiIiXYbCMBERERERERER+f/27j9Uz7qM4/j7s2nZKJNYuqSiIjXFmG5mzUiL\nWWZRIhT+qiTyZ44kI3WkJoo1DH+00rD6Y2m6WkLJMFuaCalT0dUCN6Plb+ZWVsyaOode/XHfpx6P\nO5tnW+d5Hu/3Cw7s/t7Xc3adP649O5/7vr9PZxiGSZIkSZIkqTMMwyRJkiRJktQZhmGSJEmSJEnq\nDMMwSZIkSZIkdYZhmCRJkiRJkjrDMEySJEmSJEmdYRgmSZIkSZKkzjAMkyRJkiRJUmcYhkmSJEmS\nJKkzDMMkSZIkSZLUGYZhkiRJkiRJ6gzDMEmSJEmSJHWGYZgkSZIkSZI6Y1xhWJJTkixPsq79ujPJ\nR7fwmtOSrEjydJKVST67iZpPt+eeab//4eP9QSQNpoULF/a7BUkvg7MqDQdnVRoOzqo02MZ7Z9hj\nwFnADGAmcCtwQ5K9N1Wc5FTgIuA8YB/gfOCKJB/vqTkIuA74AbAfcAPwiyT7jLM3SQPI/whIw8FZ\nlYaDsyoNB2dVGmzjCsOq6saq+lVV/aWqVlXVOcC/gfeN8ZLPAFdV1fVV9XBV/RT4Pk2gNuJLwE1V\ndWlV/amqzgOWAXPG/+NIkiRJkiRJY9vqPcOSTEpyNDAFWDpG2auBZ0etPQscmGRyezwLuGVUzZJ2\nXZIkSZIkSdpuxh2GJdk3yb+ADcCVwJFV9cAY5UuAE5LMaF97APAFYEdgalszDVg76nVr23VJkiRJ\nkiRpu9lhK17zADAdeD3wKeDqJAePEYhdCOwGLE0yCVgDLADOBF7Yqo7/ZyeAlStXbuO3kfT/tG7d\nOpYtW9bvNiRtgbMqDQdnVRoOzqo08XryoZ22VJuq2qa/LMnNwKqqOnUzNZNpQrEngJOBeVW1S3vu\nEeCSqprfU38+cERV7b+Z73kscO02NS9JkiRJkqRXkuOq6rrNFWzNnWGjTaLZG2xMVfU8sBqg3Wds\ncc/ppcBsYH7P2ocZex+yEUuA44CHeem+ZJIkSZIkSeqOnYC30eRFmzWuO8OSfAO4CXgUeB1NGPVV\n4CNVdWuSbwK7V9Xxbf0ewIHA3cAbgDNogq+ZVfVoWzMLuA2YC9wIHAOcDcyoqhUvuzlJkiRJkiRp\nC8Z7Z9iuwI+ANwHrgD/SBmHt+WnAW3rqJwNfAfYENgK/BQ4aCcIAqmpp+8jjRe3Xn2kekTQIkyRJ\nkiRJ0na1zXuGSZIkSZIkScNiUr8bkCRJkiRJkiaKYZgkSZIkSZI6YyjDsCSnJXkoyTNJ7krynn73\nJHVZkrlJ7knyVJK1SX6eZM9N1F2QZHWSp5PcnOSd/ehXEiQ5O8kLSS4dte6cSn2WZPck1yR5sp3F\n5UlmjKpxVqU+SjIpyYVJHmzncFWSczZR56xKA2jowrAkRwGXAF8H9geWA0uSTO1rY1K3fQD4DvBe\n4FBgR+DXSV4zUpDkLGAOcBLNp8yup5ndV018u1K3tReRTqJ5D+1dd06lPkuyC3AHsAE4DNib5gOp\n/tlT46xK/Xc2cDLwReBdwJnAmUnmjBQ4q9LgGroN9JPcBdxdVae3xwEeA+ZX1cV9bU4SAG04/Vfg\n4Kq6vV1bDXyrqi5rj3cG1gLHV9WivjUrdUyS1wL3AacC5wK/r6oz2nPOqdRnSeYBs6rqkM3UOKtS\nnyVZDKypqhN71q4Hnq6qz7XHzqo0oIbqzrAkOwIzgd+MrFWT5t0CzOpXX5JeYheggH8AJHk7MI0X\nz+5TwN04u9JEuwJYXFW39i46p9LA+ARwb5JF7dYDy5KcMHLSWZUGxp3A7CR7ACSZDrwf+GV77KxK\nA2yHfjcwTlOByTRpeq+1wF4T346k0dq7NS8Hbq+qFe3yNJpwbFOzO20C25M6LcnRwH7AAZs47ZxK\ng+EdNHduXgJcRPNo1fwkG6rqGpxVaVDMA3YGHkjyPM2NJl+rqp+0551VaYANWxgmafBdCexDc2VM\n0oBI8maaoPrQqtrY734kjWkScE9VndseL0+yL3AKcE3/2pI0ylHAscDRwAqai03fTrK6Da4lDbCh\nekwSeBJ4Htht1PpuwJqJb0dSryTfBT4GfLCqnug5tQYIzq7UTzOBNwLLkmxMshE4BDg9yXM0V6qd\nU6n/ngBWjlpbCby1/bPvqdJguBiYV1U/q6r7q+pa4DJgbnveWZUG2FCFYe2V7PuA2SNr7SNZs2me\n2ZbUJ20QdgTwoap6tPdcVT1E86bfO7s703z6pLMrTYxbgHfTXLme3n7dC/wYmF5VD+KcSoPgDl66\n/cdewCPge6o0QKbQ3KjR6wXa37GdVWmwDeNjkpcCC5LcB9wDfJnmH6IF/WxK6rIkVwLHAJ8E1icZ\nuQK2rqqebf98OXBOklXAw8CFwOPADRPcrtRJVbWe5jGO/0qyHvh7VY3cheKcSv13GXBHkrnAIppf\nnE8ATuypcVal/ltMM4ePA/cDM2h+N/1hT42zKg2ooQvDqmpRkqnABTS3mP4BOKyq/tbfzqROO4Vm\ng9DbRq1/HrgaoKouTjIFuIrm0yZ/BxxeVc9NYJ+SXqxedOCcSn1XVfcmOZJmc+5zgYeA03s25XZW\npcEwhybcugLYFVgNfK9dA5xVaZClqrZcJUmSJEmSJL0CDNWeYZIkSZIkSdK2MAyTJEmSJElSZxiG\nSZIkSZIkqTMMwyRJkiRJktQZhmGSJEmSJEnqDMMwSZIkSZIkdYZhmCRJkiRJkjrDMEySJEmSJEmd\nYRgmSZIkSZKkzjAMkyRJkiRJUmcYhkmSJEmSJKkzDMMkSZIkSZLUGf8Ba4K8nveBRQoAAAAASUVO\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1b323daa90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "predicted, results = pmf.running_rmse(test, train, burn_in=200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Posterior predictive train RMSE: 3.92308\n",
      "Posterior predictive test RMSE:  4.18124\n",
      "Train/test difference:           0.25816\n",
      "Improvement from MAP:            0.05331\n",
      "Improvement from Mean of Means:  0.61708\n"
     ]
    }
   ],
   "source": [
    "# And our final RMSE?\n",
    "final_test_rmse = results['running-test'].values[-1]\n",
    "final_train_rmse = results['running-train'].values[-1]\n",
    "print('Posterior predictive train RMSE: %.5f' % final_train_rmse)\n",
    "print('Posterior predictive test RMSE:  %.5f' % final_test_rmse)\n",
    "print('Train/test difference:           %.5f' % (final_test_rmse - final_train_rmse))\n",
    "print('Improvement from MAP:            %.5f' % (pmf_map_rmse - final_test_rmse))\n",
    "print('Improvement from Mean of Means:  %.5f' % (baselines['mom'] - final_test_rmse))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have some interesting results here. As expected, our MCMC sampler provides lower error on the training set. However, it seems it does so at the cost of overfitting the data. This results in a decrease in test RMSE as compared to the MAP, even though it is still much better than our best baseline. So why might this be the case? Recall that we used point estimates for our precision paremeters $\\alpha_U$ and $\\alpha_V$ and we chose a fixed precision $\\alpha$. It is quite likely that by doing this, we constrained our posterior in a way that biased it towards the training data. In reality, the variance in the user ratings and the joke ratings is unlikely to be equal to the means of sample variances we used. Also, the most reasonable observation precision $\\alpha$ is likely different as well."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Summary of Results\n",
    "\n",
    "Let's summarize our results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7f1b306efdd8>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nHKfpT865g4UXmYiIiIiIlGRFvgwvMzMrBQwCXjheVeAzM/vBzJLMrH3hRyciIiIiIiVJsUqWgGuA\nCsCcXOr8CNwGXAv0A7YDK83sosIPT0RERERESooiX4aXxTBgmXNuZ04VnHPfAt9mKvrQzBoCccBN\nxxsgLi6OChUqhJTFxsYSGxt7YhGLiIiIiEixlZiYSGJiYkjZgQMH8tTWnHOFEVO+mVk9YBPQ1zm3\nNJ9tHwc6OOc65FInBkhJSUkhJibm5IIVEREREZHT1po1a2jZsiVAS+fcmpzqFadleMOAXcBbJ9D2\nIvzL80RERERERApEsViGZ2YGDAFmO+eOZbk2CajtnLspcH4XsBn4CogAbgW6AFeeyphFREREROTM\nViySJeAKoC7wose1moFrGUoDU4FaQCrwBdDVOfdeYQcpIiIiIiIlR7FIlpxz/yL0xbSZrw3Ncj4F\nmHIq4hIRERERkZKrOD2zJCIiIiIiUmwoWRIREREREfGgZElERERERMSDkiUREREREREPSpZERERE\nREQ8KFkSERERERHxoGRJRERERETEg5IlERERERERD0qWREREREREPChZEhERERER8aBkSURERERE\nxIOSJREREREREQ9KlkRERERERDwoWRIREREREfGgZElERERERMSDkiUREREREREPSpZEREREREQ8\nKFkSERERERHxoGRJRERERETEg5IlERERERERD0qWREREREREPChZEhERERER8aBkSURERERExIOS\nJREREREREQ9KlkRERERERDwoWRIREREREfGgZElERERERMSDkiUREREREREPSpZEREREREQ8KFkS\nERERERHxoGRJRERERETEg5IlERERERERD0qWREREREREPChZEhERERER8aBkSURERERExIOSJRER\nEREREQ9KlkRERERERDwoWRIREREREfFQ5MmSmW02s2Mex1O5tOlsZilmlmZm35rZTacyZhERERER\nOfMVebIEtAJqZDquBBww36uymdUHlgLvABcCfwP+YWZXnoJYRURERESkhAgv6gCcc3syn5tZL+A7\n59x/cmhyO7DJOXdv4PwbM+sIxAH/KrxIRURERESkJCkOM0tBZlYKGAS8kEu1tsC/s5QtB9oVVlwi\nIiIiIlLyFKtkCbgGqADMyaVODWBXlrJdQHkzK1NYgYmIiIiISMlS5MvwshgGLHPO7SysAeLi4qhQ\noUJIWWxsLLGxsYU1pIiIiIiIFJHExEQSExNDyg4cOJCntuacK4yY8s3M6gGbgL7OuaW51EsGUpxz\n92QqGwJMd85VzKVdDJCSkpJCTExMwQUuIiIiIiKnlTVr1tCyZUuAls65NTnVK07L8IbhX0731nHq\nrQa6ZinrFigXEREREREpEMUiWTIzA4YAs51zx7Jcm2RmmZ9hmgFEm9ljZtbYzIYD1wHTTlnAIiIi\nIiJyxisWyRJwBVAXeNHjWs3ANQCcc1uAqwJtPsO/ZfjNzrmsO+SJiIiIiIicsGKxwYNz7l9AWA7X\nhnqUvQe0LOy4RERERESk5CouM0siIiIiIiLFipIlERERERERD0qWREREREREPChZEhERERER8aBk\nSURERERExIOSJREREREREQ9KlkRERERERDwoWRIREREREfGgZElERERERMSDkiUREREREREPSpZE\nREREREQ8KFkSERERERHxoGRJRERERETEg5IlERERERERD0qWREREREREPChZEhERERER8aBkSURE\nRERExIOSJREREREREQ9KlkRERERERDwoWRIREREREfGgZElERERERMRDeFEHICIiIiIFZ9u2bfz8\n889FHYZIkapSpQr16tU76X6ULImIiIicIbZt20bTpk1JTU0t6lBEilRUVBTr168/6YRJyZKIiIjI\nGeLnn38mNTWVuXPn0rRp06IOR6RIrF+/nsGDB/Pzzz8rWRIRERGRUE2bNiUmJqaowxA57WmDBxER\nEREREQ9KlkRERERERDwoWRIREREREfGgZElERERERMSDkiUREREREREPSpZEREREREQ8KFkSERER\nkWJvzpw5+Hy+4BEZGUnjxo2588472b17d7BecnJysE5CQoJnXx06dMDn89GiRYuQ8vr164eMkXGE\nhYVx5MiRHGPbunVrsO6kSZM86wwaNAifz0f58uVz7KdNmzb4fD5mzpx5Up+BFBy9Z0lERERETgtm\nxoQJE6hfvz5paWm8//77PPfccyxbtowvv/ySiIiIYN3IyEgSEhIYOHBgSB9bt25l9erVREZGevZ/\n8cUXM2rUKJxzIddKly593PgiIyNJTExkzJgxIeWpqam88cYbnmNm2LhxI5988gkNGjQgPj6e2267\n7aQ/Azl5SpZERERE5LTRvXv34At3hw0bRqVKlZg+fTqvv/46119/fbBez549eeONN9i7dy+VKlUK\n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\n5513mDt3LuHh4TRp0oQFCxbQt2/fPN13cWYnmuOYWT387za6CSgDzAHGOed+L7DoCpCZxQApKSkp\n2uBBREREzkgZD62XpO8711xzDevWrfN8JklKprz8O8i0wUNL51z2PdMD8vvMUpBzbptz7hHgCuBb\n4H6gfO6tREREREROTFpaWsj5hg0beOutt+jSpUsRRSRnunxvHQ5gZmWAa/Evx2sHvAlc5ZzbW4Cx\niYiIiIgERUdHM2TIEKKjo9myZQszZswgIiKC0aNHF3VocobK79bhbYChwA3AFuBFYICSJBEREREp\nbD169OCVV15h586dlClThvbt2zNp0iQaNmxY1KHJGSq/M0sfAtuAvwMZr3vumPXBL+fcGycfmoiI\niIjI/7zwwgtFHYKUMCeyDK8e/i2+c+IA71f9ioiIiIiInCbylSw55467IYSZRZ14OCIiIiIiIsXD\nCe+Gl5WZlTGze4BNBdWniIiIiIhIUclXshRIiP5qZp+Y2Soz6xsoHwZsBuKA6YUQp4iIiIiIyCmV\n32eWHgFuA/4FdAAWmNmLQFvgHmCBcy69YEMUERERERE59fKbLPUHbnTOvWFm5wNfBPq40DnnCjw6\nERERERGRIpLfZ5bqENgy3Dn3JfAbMF2JkoiIiIiInGnymyyFAUcynf8O/FJw4YiIiIiISGbp6enc\ne++91KtXj7CwMPr161fUIZUY+V2GZ8BsM/stcB4BzDCzw5krOef0NygiIiIiUgBeeOEFnnjiCe65\n5x4uvvhi6tWrV9QhlRj5TZbmZDmfW1CBiIiIiIhIditWrKBOnTo88cQTRR1KiZPfl9IOLaxARERE\nREQku927d3P22WcXdRglUoG9lFZEREREpLCMHz8en8/Hhg0bGDx4MGeffTbVqlVj7NixAGzfvp2+\nfftSoUIFatasybRp07L1ceTIEcaNG0ejRo2IiIigXr163HfffRw5ciSk3osvvkjXrl2pXr06ERER\nNG/enBkzZmTrr379+vTu3ZsPPviASy65hMjISBo2bMjLL7+cp3tKTU1l5MiR1KtXj4iICJo0acLU\nqVOD17du3YrP52PlypV8+eWX+Hw+wsLCeO+993LsMyOm5ORkWrduTVRUFC1atCA5ORmARYsW0aJF\nCyIjI2nVqhWfffZZtj6++eYbrrvuOipXrkxkZCStW7dmyZIlIXX27dvHqFGjaNGiBeXKlaNChQr0\n7NmTL774IqRecnIyPp+PBQsWMHHiROrWrUtkZCRXXHEF3333XUjdjRs3cu2111KzZk0iIyOpW7cu\nsbGxHDp0KE+fZ2HI7zI8EREREZFTzswAuP7662nWrBmPPfYYb775JhMnTqRSpUrMnDmTrl278vjj\njxMfH8/o0aNp06YNHTt2BMA5R69evVi1ahW33XYbTZo0Ye3atUyfPp0NGzawaNGi4FgzZszg/PPP\np0+fPoSHh7NkyRKGDx+Oc47bb789JKYNGzbQv39/br75ZoYMGcI///lPhg4dSqtWrWjatGmu99Sr\nVy+Sk5O55ZZbuPDCC1m+fDmjR4/mhx9+YOrUqVStWpW5c+fy6KOPcvjwYSZPnoxzLtd+M2IaNGgQ\nt912G3/84x+ZMmUKvXv35rnnnuPBBx/k//7v/3DOMWnSJK6//nq++eabYPuvvvqKjh07UqdOHR54\n4AHKli3L/Pnz6du3L4sWLaJPnz4AbNq0iTfeeIP+/fvToEEDdu3axcyZM+ncuTPr1q2jRo0aIXFN\nnjyZsLAwRo8ezYEDB3jssccYPHgwq1evBuDo0aN069aNo0ePMmLECGrUqMGOHTtYunQp+/fvp1y5\ncnn5NSl4zrkScQAxgEtJSXEiIiIiZ6KUlBSXn+87h3//3aUcPFiox+Hffy+Qexs/frwzM3f77bcH\ny9LT013dunVdWFiYmzJlSrB8//79Lioqyg0dOjRY9vLLL7vw8HC3atWqkH5nzpzpfD6fW716dbAs\nLS0t2/jdu3d35557bkhZ/fr1nc/ncx988EGw7KeffnIRERFu9OjRud7P4sWLnZm5v/71ryHl/fv3\nd2FhYW7Tpk3Bss6dO7sLLrgg1/6yxvTRRx8Fy5KSkpyZubJly7rvv/8+WD5r1izn8/lccnJysKxr\n167uoosuckePHg3pt0OHDq5x48bB8yNHjmQbe+vWrS4iIsI9+uijwbKVK1c6M3PNmzd3v2f6Xfj7\n3//ufD6f++qrr5xzzn322WfOzNyiRYvydJ+5ycu/g4w6QIzLJYfQzJKIiIhICfV1aiotU1IKdYyU\nli2JKaBZATPj5ptvDp77fD5atWrF66+/zrBhw4LlFSpUoHHjxmzatClY9uqrr9K0aVPOO+889uzZ\nEyzv0qULzjlWrFhB27ZtAShTpkzw+sGDBzl69CiXXnopSUlJHDp0KGSWo1mzZrRv3z54XqVKlWxj\ne1m2bBnh4eHceeedIeUjR47k1VdfZdmyZQwfPjyvH02IZs2a0aZNm+D5JZdcAkDXrl2pXbt2SLlz\njk2bNnHppZeyb98+VqxYwYQJEzhw4EBIn926dePhhx/mxx9/pGbNmpQqVSp47dixY+zfv5+oqCga\nN27MmjVrssU0bNgwwsLCguedOnUKjt2sWTMqVKgAwNtvv0337t2JjIw8oXsvaEqWREREREqoJlFR\npLRsWehjFKSs22ZXqFCBiIgIKlWqlK187969wfMNGzbw9ddfU7Vq1Wx9mhm7d+8Onn/wwQeMGzeO\nDz/8kNTU1JB6Bw4cCEmWvLbxrlixIvv27cv1PrZu3UqtWrUoW7ZsSHnGErutW7fm2j43WWMqX748\nAHXq1Akpz0hQMmLduHEjzjn+8pe/8NBDD2XrN+NzqlmzJs45nnzySZ577jk2b95Menp6sE6VKlWy\nta1bt27IecWKFUPGrl+/PiNHjmTatGnMnTuXTp060bt3bwYPHhyMvygoWRIREREpoaLCwgps1udU\nyTw7kVsZkPEoBuCf/bjggguYPn16SHmGjC/zmzZt4oorrqBp06ZMnz6dunXrUrp0ad58802efPJJ\njh07lu+xT7WcYjperBn3NmrUKP7whz941j333HMBmDhxImPHjuWWW27h0UcfpVKlSvh8Pu66665s\nn1FexgaYMmUKQ4YM4fXXXycpKYkRI0YwefJkPvzwQ2rVqpXD3RYuJUsiIiIicsZr2LAhX3zxBV26\ndMm13pIlSzhy5AhLliwJWbL2zjvvFGg855xzDu+88w6HDx8OmV1av3598PqpFh0dDUCpUqW4/PLL\nc627cOFCLr/8cmbNmhVSvn//fs/Zu7xq3rw5zZs3Z8yYMXz44Ye0b9+eGTNm8Mgjj5xwnydDW4eL\niIiIyBlvwIABfP/99zz//PPZrqWlpQWX22XMgGSeHTlw4ACzZ88u0Hh69uzJ77//ztNPPx1SPn36\ndHw+Hz169CjQ8fKiatWqdO7cmZkzZ7Jz585s13/++efgz2FhYdlmzxYsWMCOHTtOaOxDhw4Fl/Jl\naN68OT6fj99+++2E+iwImlkSERERkTPeH//4R+bPn8/tt9/OihUr6NChA+np6axfv54FCxaQlJRE\nTEwM3bp1o1SpUlx99dXcdtttHDp0iH/84x9Ur17dM4E4Ub169aJLly48+OCDbN68Obh1+JIlS4iL\ni6NBgwYFNlZ+PPPMM3Tq1IkLLriAW2+9lejoaHbt2sXq1avZsWMHn376KQBXX301EyZMYNiwYbRv\n3561a9cSHx9Pw4YNT2jcd999lzvuuIP+/ftz3nnn8fvvv/PSSy8RHh7OtddeW5C3mC9KlkRERETk\ntJbxDqbcys2M119/nenTp/PSSy+xePFioqKiiI6OJi4ujvPOOw+A8847j4ULF/LQQw8xevRoatSo\nwfDhw6lcuXLITnwZfeZl7JyuL1myhLFjxzJv3jxmz55N/fr1eeKJJ4iLi8t3f8eLKa/lTZs25ZNP\nPuHhhx9mzpw57Nmzh2rVqnHxxRczbty4YL0xY8aQmppKQkIC8+fPp2XLlrz11lvcf//92cbJy2d0\n4YUX0r17d5YuXcqOHTuIioriwgsv5O233w7Z2e9Us6J8+OxUMrMYICUlJYWYmJiiDkdERESkwK1Z\ns4aWLVui7ztSkuXl30FGHaClcy77XucBemZJRERERETEg5IlERERERERD0qWREREREREPChZEhER\nERER8aBkSURERERExIOSJREREREREQ9KlkRERERERDwoWRIREREREfGgZElERERERMSDkiURERER\nEREPRZ4smdk4MzuW5ViXS/3LPOqnm1m1Uxm3iIiIiIic2Yo8WQr4EqgO1AgcHY9T3wGNMtWv6Zzb\nXagRioiIiMgZZfbs2fh8PrZt2xZSPmXKFBo2bEh4eDgxMTFFFN3pxefz8cgjjxR1GAUuvKgDCPjd\nOfdTPtv85Jw7WCjRiIiIiMgZz8wws5CypKQk7rvvPm688UYefvhhqlSpUkTRSXFQXJKlRma2A0gD\nVgMPOOe251LfgM/MLAL/rNR459yqUxCniIiIiJwhbrzxRmJjYyldunSwbMWKFYSFhfHCCy8QFhZW\nhNFJcVAcluF9CAwB/gD8GWgAvGdmZXOo/yNwG3At0A/YDqw0s4sKP1QREREROVOYWUiiBLBr1y4i\nIyMLNFFKS0srsL7yIjU19ZSOdyYr8mTJObfcObfQOfelc+5fQE+gIjAgh/rfOueed8596pz70Dl3\nM7AKiMvLeHFxcfTu3TvkSExMLLD7EREREZGCN2TIEBo0aJCtfPz48fh8oV9pfT4fI0aM4PXXX+eC\nCy4gIiKC888/n+XLl4fUy/rMks/nY86cORw+fBifz0dYWBgvvfQSAOnp6UyYMIFzzz2XiIgIGjRo\nwIMPPsiRI0dC+qxfvz69e/cmKSmJ1q1bExkZyaxZs0LievXVV2nevDlRUVG0b9+eL7/8EoCZM2fS\nqFEjIiMj6dKlS7Znqbxk3P/69esZOHAglSpVolOnTgCsXbuWoUOH0rBhQyIjI6lZsyY333wze/fu\n9ezju+++Y8iQIVSsWJGzzz6bYcOGZUv0jhw5QlxcHNWqVaN8+fL07duXHTt2eMb26aef0qNHDypU\nqEC5cv/f3p2HyVWWeR//3tVhSZsACVtYEnYwviJOgrLJNgR4hXFEL2QIMIKggCBoXFh0VNAZiCwG\ncUBBHCNioo5LEMVRFpFFwDEtoNABgSTAK2tIIiQsoft+/6jqprr69JZ0dzXd38911ZU6z3nqPPc5\n/XSnfn1OnR7LtGnTuPvuuzv0+e53v0upVOKOO+7g9NNPZ5NNNmHcuHGcfPLJvPbaayxfvpwPfvCD\njB8/nvHjx3PmmWf2eExqzZ07t9P7/xkzehUdhsxleO0yc3lEPARs34eX/QHYqzcdZ82a5Qf1JEmS\n3mCKPl/UXfttt93GT3/6U0455RTGjh3LpZdeyuGHH85jjz3GuHHjCl97zTXXcMUVV/C///u/fPvb\n3yYz2XPPPQE44YQTuPrqqzniiCP49Kc/zd13383555/PggUL+MlPftKhngULFnDUUUdx0kknceKJ\nJ7LTTju1r7/11lv5+c9/zqmnngrAeeedxz/90z9xxhln8I1vfINTTz2VpUuX8pWvfIXjjz+eG2+8\nscfjAvCBD3yAHXfckfPPP5/MBOCGG25g4cKFHH/88UyYMIH777+fK664ggceeIA777yz0zaOOOII\ntt12W2bOnElTUxNXXXUVm266Keeff3573xNOOIE5c+Zw9NFHs8cee3DzzTdz6KGHdvoaPPDAA+yz\nzz6sv/76nHXWWYwaNYorrriC/fbbj1tvvZV3vOMdHfqfdtppbLbZZnzpS1/irrvu4lvf+hYbbLAB\nv//979lqq604//zzuf7667nooovYeeedOeaYY7o9LtWmT5/O9OnTO7Q1NTUxderUnl+cmUPqAYwB\nngc+1ofX/Ab4cQ99pgA5f/78lCRJGo7mz5+fw/X9znHHHZfbbLNNp/ZzzjknS6VSh7aIyHXXXTcX\nLlzY3nbfffdlRORll13W3jZ79uwslUq5ePHiDuOMHTu2w/buvffejIg86aSTOrR/5jOfyVKplLfc\nckt729Zbb52lUilvuOGGTrVGRI4ePTofe+yx9rYrr7wyIyI333zzXLFiRXv7Zz/72U61FTnnnHMy\nIu9+35kAAB4KSURBVPKYY47ptO7ll1/u1PaDH/wgS6VS3n777Z228ZGPfKRD3/e///258cYbty+3\nHYfTTjutQ7+jjz46S6VSnnvuue1thx12WK677rq5aNGi9rYnn3wy11tvvdxvv/3a22bPnp0RkYcc\nckiHbe65555ZKpXy1FNPbW9raWnJiRMn5v7779/l8cjs3fdBWx9gSnaTIep+ZikiLgSuAxYDWwDn\nAquAuZX15wFbZOaxleWPAwuB+4F1gY8A+wMHDnrxkiRJb2AtK1tYuWBgP9/S+OZGGhoH/0YJBx54\nIFtvvXX78s4778x6663Ho48+2udtXX/99UREp0u3PvWpT3HRRRfxy1/+kn333be9fZtttmHatGmF\n25o2bRoTJ05sX95tt90AOPzww2lsbOzU/uijjzJp0qRu64sITjrppE7t66yzTvvzV155hRdffJHd\ndtuNzKSpqYm99tqr223svffezJs3jxdffJExY8a0H4fTTjutQ79PfOITzJkzp325tbWVG264gfe9\n731stdVW7e0TJkzgqKOO4qqrrmrfZtvYxx9/fIdt7rbbbtx1110d2kulErvuuitNTU3dHo/+VPew\nBGwJzAE2BJ4Fbgd2z8wllfWbAROr+q8NXAxsDqwE7gMOyMxbB61iSZKkYWDlgpXMnzp/QMeYOn8q\nY6eMHdAxilQHkjbjxo1j6dKlfd7W4sWLKZVKbL99x0+JbLrppmywwQYsXry4Q3vRZ6u6qmv99dcH\nYMstt+zUnpm9rrdozKVLl3LOOefwwx/+kGeeef1PkkYEy5cv79S/NpS1Xa64dOlSxowZ034ctttu\nuw79qi8zBHj22WdZuXIlO+64Y6cxJk+eTGtrK48//jiTJ0/ucuy241J0vFbna7i66h6WMnN6D+s/\nVLN8IXDhgBYlSZI0AjS+uZGp83vxuY01HKM/FH0uCco3XijS1d3ssvJ5nv6sodbo0aO7XNdVXWta\nb9GYH/jAB7jrrrs444wz2GWXXRgzZgytra0cfPDBtLa29nsNa6Ivx2Uw6mlT97AkSZKk+mhobKjL\nWZ/VMW7cOJYtW9apfdGiRQM+9lZbbUVrayt//etfO5xFeeaZZ1i2bFmHS82GimXLlnHzzTfz5S9/\n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\nSQX+P//CllSdt16vAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f1b31b7cd30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "size = 100  # RMSE doesn't really change after 100th sample anyway.\n",
    "all_results = pd.DataFrame({\n",
    "    'uniform random': np.repeat(baselines['ur'], size),\n",
    "    'global means': np.repeat(baselines['gm'], size),\n",
    "    'mean of means': np.repeat(baselines['mom'], size),\n",
    "    'PMF MAP': np.repeat(pmf_map_rmse, size),\n",
    "    'PMF MCMC': results['running-test'][:size],\n",
    "})\n",
    "fig, ax = plt.subplots(figsize=(10, 5))\n",
    "all_results.plot(kind='line', grid=False, ax=ax,\n",
    "                 title='RMSE for all methods')\n",
    "ax.set_xlabel(\"Number of Samples\")\n",
    "ax.set_ylabel(\"RMSE\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Summary\n",
    "\n",
    "We set out to predict user preferences for unseen jokes. First we discussed the intuitive notion behind the user-user and item-item neighborhood approaches to collaborative filtering. Then we formalized our intuitions. With a firm understanding of our problem context, we moved on to exploring our subset of the Jester data. After discovering some general patterns, we defined three baseline methods: uniform random, global mean, and mean of means. With the goal of besting our baseline methods, we implemented the basic version of Probabilistic Matrix Factorization (PMF) using `pymc3`.\n",
    "\n",
    "Our results demonstrate that the mean of means method is our best baseline on our prediction task. As expected, we are able to obtain a significant decrease in RMSE using the PMF MAP estimate obtained via Powell optimization. We illustrated one way to monitor convergence of an MCMC sampler with a high-dimensionality sampling space using the Frobenius norms of the sampled variables. The traceplots using this method seem to indicate that our sampler converged to the posterior. Results using this posterior showed that attempting to improve the MAP estimation using MCMC sampling actually overfit the training data and increased test RMSE. This was likely caused by the constraining of the posterior via fixed precision parameters $\\alpha$, $\\alpha_U$, and $\\alpha_V$.\n",
    "\n",
    "As a followup to this analysis, it would be interesting to also implement the logistic and constrained versions of PMF. We expect both models to outperform the basic PMF model. We could also implement the [fully Bayesian version of PMF](https://www.cs.toronto.edu/~amnih/papers/bpmf.pdf) (BPMF), which places hyperpriors on the model parameters to automatically learn ideal mean and precision parameters for $U$ and $V$. This would likely resolve the issue we faced in this analysis. We would expect BPMF to improve upon the MAP estimation produced here by learning more suitable hyperparameters and parameters. For a basic (but working!) implementation of BPMF in `pymc3`, see [this gist](https://gist.github.com/macks22/00a17b1d374dfc267a9a).\n",
    "\n",
    "If you made it this far, then congratulations! You now have some idea of how to build a basic recommender system. These same ideas and methods can be used on many different recommendation tasks. Items can be movies, products, advertisements, courses, or even other people. Any time you can build yourself a user-item matrix with user preferences in the cells, you can use these types of collaborative filtering algorithms to predict the missing values. If you want to learn more about recommender systems, the first reference is a good place to start."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## References\n",
    "\n",
    "1.  Y. Koren, R. Bell, and C. Volinsky, “Matrix Factorization Techniques for Recommender Systems,” Computer, vol. 42, no. 8, pp. 30–37, Aug. 2009.\n",
    "2.  K. Goldberg, T. Roeder, D. Gupta, and C. Perkins, “Eigentaste: A constant time collaborative filtering algorithm,” Information Retrieval, vol. 4, no. 2, pp. 133–151, 2001.\n",
    "3.  A. Mnih and R. Salakhutdinov, “Probabilistic matrix factorization,” in Advances in neural information processing systems, 2007, pp. 1257–1264.\n",
    "4.  S. J. Nowlan and G. E. Hinton, “Simplifying Neural Networks by Soft Weight-sharing,” Neural Comput., vol. 4, no. 4, pp. 473–493, Jul. 1992.\n",
    "5.  R. Salakhutdinov and A. Mnih, “Bayesian Probabilistic Matrix Factorization Using Markov Chain Monte Carlo,” in Proceedings of the 25th International Conference on Machine Learning, New York, NY, USA, 2008, pp. 880–887.\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
