{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Baseline model variants"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Populating the interactive namespace from numpy and matplotlib\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/sergiusz/anaconda3/envs/whitelist/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n",
      "/home/sergiusz/anaconda3/envs/whitelist/lib/python3.6/site-packages/sklearn/grid_search.py:42: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. This module will be removed in 0.20.\n",
      "  DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "%matplotlib inline\n",
    "%pylab inline\n",
    "pylab.rcParams['figure.figsize'] = (12, 7)\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.pipeline import make_pipeline\n",
    "from sklearn.grid_search import GridSearchCV\n",
    "from sklearn.metrics import r2_score\n",
    "from sklearn.metrics import mean_squared_error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "\n",
    "df = pd.read_feather('../data/basemodel_cumsum.feather')\n",
    "\n",
    "model = LinearRegression(fit_intercept = True)\n",
    "x = df[['popularity']]\n",
    "y = df[['log_all_streams_cumsum']]\n",
    "\n",
    "def PolynomialRegression(degree=2, **kwargs):\n",
    "    return make_pipeline(PolynomialFeatures(degree), LinearRegression(**kwargs))\n",
    "\n",
    "param_grid = {'polynomialfeatures__degree': np.arange(3), 'linearregression__normalize': [True, False]}\n",
    "\n",
    "grid = GridSearchCV(PolynomialRegression(), param_grid, cv = 5, error_score=mean_squared_error)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Baseline model (2018-05-21 22:12)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best model: Pipeline(memory=None,\n",
      "     steps=[('polynomialfeatures', PolynomialFeatures(degree=2, include_bias=True, interaction_only=False)), ('linearregression', LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=True))])\n",
      "RMSE: 5.691645826227121\n",
      "Rsq: 0.5953026658448666\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEICAYAAABWJCMKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXm8HFWZ97+/3ERI2AIkLLkkhG1wWCSRK7wOMw6SCBFjiAgvS0ZwBswwyCvMYCCZjBCYyRDNKDCDIAER4lxZBMQAkSiggzKiBJMIYVFkzQ1LWCJgAmR53j+qOunbt6qX29XVVd3P9/Ppz+06dbrqqbrnnOec5zznOTIzHMdxnPZjQLMFcBzHcZqDKwDHcZw2xRWA4zhOm+IKwHEcp01xBeA4jtOmuAJwHMdpU1wBpIyk5ZIOjzl3uKQVCd3nZ5JOT+JaTr6RNFqSSRoYHv9I0qn9uM4oSe9I6kheSqdWJH1e0i/quYYrgBgkPSdpbVjgX5Z0vaSt672ume1vZj9LQMR+I2mWpHXhsxU+q5spU7tTUt5ekfSdJMpbFGb2STO7oUqZxhf97gUz29rMNjRCrlYnyQ5eUrgCKM+nzWxrYAwwFpjRZHmS5OawMhc+Q6MyFXqNldLKoQAva5UplLcPAx8B/qU0g7/L8tRaNtsdL0hVYGYvA4sIFAEAkraQ9B+SXgh7bN+SNDg8N0zSXZJWS3pD0s8Llba4VyVpcDiyeFPS4wSVnqJ7mKS9i46vl/Rv4fftw3usCn9/l6Tdknje8L5flPR74Pdl0v5C0sOS/hj+/Yuia/xM0mxJDwJrgD3DIeszkt6W9KykKUnI22qYWQ/wI+AAiH2X20n6tqSXJPVI+reCaUZSR1g2X5P0DPCp4uuXmgclfUHSE+H/5XFJH5b0XWAUcGc4KjkvwpQ0QtKCsIw/LekLRdecJekWSfPD6y6X1BX1vGHd+Y+StB9K+qei+9wWlvVnJX2p5D63SvpvSW8Bn5d0iKTFkt4K6+Y3wrx9euAl9THydxHylq17knZQMIJbGZ6/Q9JW4f90hDaPukcU1+koGSVNl/SHov/NZ6Jk6i+uAKog/Od+Eni6KPmrwJ8RKIW9gU7ggvDcucAKYDiwM/DPQFTMjQuBvcLPUUAtdtkBwHeA3Qkq6lrgihp+X4nJwKHAflFpknYA7gb+E9gR+AZwt6Qdi/J/DpgKbAOsCvN+0sy2Af4CWJqgvC2DpJHA0cCSouTid/k8cAOwnqDsjQWOBAqN+heAiWF6F3BcmXsdD8wCTgG2BSYBr5vZ54AXCEclZva1iJ/fSFDOR4T3+HdJ44rOTwJuAoYCC4gvn98DTpCkUKbtw+e5SUHH6U5gGUEdGwecI+moot8fA9wa3qcbuBy43My2Jahbt8Q9fwnV/q5S3fsuMATYH9gJuNTM/kTQhqwsGnWvrEKmPwB/BWwHXAT8t6Rdq3yeypiZfyI+wHPAO8DbBI33fcDQ8JyAPwF7FeX/KPBs+P1i4IfA3jHXHR9+fwaYUHRuKrCi6NiKrwFcD/xbjLxjgDeLjn8GnB6TdxbwPrC66PPTkvseUfKbXmkEDdKvS/L8Evh80f0vLjq3VXifzwKDm/3/zdqnqLytJmjgryy8p4h3uTPwXvF7BE4q/A+B+4Ezis4dGf7/BpaWDYKR7dllZBpfdDy6cB1gJLAB2Kbo/CXA9UVl7N6ic/sBa2PuIwJl87Hw+AvA/eH3Q4EXSvLPAL5TdJ8HSs4/QNBYDitJP7y4fpU+Y9zvqvjfbap7wK7ARmD7iHxR97+eojodlack/1LgmPD754Ff1FPufARQnskW9FYPBz4IDAvThxNo+EcUmHlWA/eE6QBzCUYLPw5NHtNjrj8CeLHo+PlqBZM0RNLVkp4Ph74PAENVvYfGLWY2tOjz8ZLzL0b8pjhtRIS8zxP00vrkt6AHdAJwBvCSpLslfbBKWduFyeH/YnczO9PM1hadK373uwODCN5jofxdTdDbhNrK1UiCXmatjADeMLO3S+5T/P9/uej7GmBLRdjoLWjNbiJQYgAnE/TkIXjWEYXnDJ/1nwmUYIHSsnoawej8ydA0ObHKZ6rqdxXq3kiC9/Jmlfcsi6RTJC0tevYD2NwO1Y0rgCows/8h0NQFO+VrBMO+/Ysa0O0smMDDzN42s3PNbE/g08A/lQyNC7xEUGAKjCo5v4ZA0RTYpej7ucC+wKEWDFk/Fqar5geMJspkVZy2kqByFjMK6Im7hpktMrNPEPSSngSuSUDOdqH4Xb5IMAIYVlT+tjWz/cPzlcpVMS8SmDsq3bOUlcAOkrYpuU9PTP5K3AgcJ2l3gl7/bUXyPVvSWdnGzI6Ok9PMfm9mJxEoxK8Ct4Y2+D9RVJ/CBnt4Fb8rpVzde5HgvUQ5VUS9z14yUVTHw3dxDXAWsKMFjhqPkVwddwVQA5cBn5A0xsw2EvxjLpW0E4CkzoJdUtJESXuHNs23CIbKUa5ztwAzwkml3YD/V3J+KXCygkm9CcBfF53bhkAJrQ7t8Rcm96hVsRD4M0knSxoo6QSCYf5dUZkl7SxpUlih3iMwd7g7YT8ws5eAHwNfl7StpAGS9pJUKB+3AF+StFtoT48bgQJcC3xZ0sEK2DtseABeAfaMkeFF4H+BSyRtKelDBD3o7qj8VTzTEoJ5omuBRWZWcEv+NfCWpPMVOE10SDpA0kfiriXpbyQND+tp4TobgN8RjEI+JWkQgZfVFlX8rpTYuhf+b34EXBnW60GSCgriFWBHSdsVXWspcHQ4cbwLcE7Rua0IlMaqUL6/JXQMSApXAFViZquA+cBXwqTzCcw8D4XDwHsJegUA+4TH7xDYxa+0aN//iwiGzc8SVOjvlpw/m2AEsRqYAtxRdO4yYDDBaOQhAhNULZyg3usA3ikos2ows9cJJhrPBV4HzgMmmtlrMT8ZEOZdCbxBoMzOrFFmZzOnAB8AHgfeJJgELUwOXkNg218G/Aa4Pe4iZvZ9YDbBROzbBGVsh/D0JcC/hOaHL0f8/CSCeYGVwA+AC83sJ3U8043A+FCWgnwbCOrAGIJ68hqBktgu6gIhE4Dlkt4hmNg90czeNbM/EpS5awlGKn8imMQu+7uI61eqe58D1hGMcl8lbNTN7MnwGZ8J3+kIgjq/jGAu4sfAzUXP/jjwdYI25BXgQODBMs9dMwonExzHcZw2w0cAjuM4bYorAMdxnDbFFYDjOE6b4grAcRynTcl04KRhw4bZ6NGjmy2G06I88sgjr5nZ8Mo5k8XLtdNIainXmVYAo0ePZvHixc0Ww2lRJFW98jpJvFw7jaSWcu0mIMdxnDbFFYDjOE6b4grAcRynTXEF4DiO06a4AnAcx2lTXAE4juO0KZl2A+0vdyzpYe6ip1i5ei0jhg5m2lH7MnlsZ+UfOo7jtBEtpwDuWNLDjNsfZe26IIx3z+q1zLj9UQBXAo7jOEW0nAlo7qKnNjX+Bdau28DcRU81SSLHcZw66e6G0aNhwIDgb3e/9t3pQ8uNAFauXltTuuM4Tqbp7mb96V9g4LthG/b888ExwJQpdV265UYAI4YOrindcRwny6yZdv7mxj9k4LtrWTPt/Lqv3XIKYNpR+zJ4UEevtMGDOph21L4xv3Acx8kuW760sqb0Wmg5BTB5bCeXHHsgnUMHI6Bz6GAuOfZAnwB2HCeXrNx2WE3ptdBycwAQKAFv8B3HaQWunXA6593+DYasf29T2pqBW3DthNOZVee1W24E4DiO00qMmf5FLpj4JVZsO5yNiBXbDueCiV9izPQv1n3tlhwBOI7jtAqTx3bCBWdzwqETEl/c6grAcRwn4zTKrO0mIMdxnDYlEQUg6TpJr0p6LOb84ZL+KGlp+Lkgifs6juM4/ScpE9D1wBXA/DJ5fm5mExO6n+M4jlMniYwAzOwB4I0kruU4juOkQ5pzAB+VtEzSjyTtH5dJ0lRJiyUtXrVqVYriOY7jZIAzz4SBA0EK/p55ZsNulZYC+A2wu5kdBPwXcEdcRjObZ2ZdZtY1fPjwlMRzHMfJAGeeCVddBRvCiMYbNgTHDVICqSgAM3vLzN4Jvy8EBkmqfx2z4zhOKzFvXm3pdZKKApC0iySF3w8J7/t6Gvd2HMfJA3cs6cE2bIg+GZdeJ4l4AUm6ETgcGCZpBXAhMAjAzL4FHAf8g6T1wFrgRDOzJO7tOI7TaBq9zWxhJ8OJGsBA29g3Q0dH37QESEQBmNlJFc5fQeAm6jiOkyvS2Ga2sJNh90ETOGXpQlSaYerURO5TioeCcBzHKUOlbWaTGBmsXL2WSct/yrhnHqbYNLJBAxh4xt/DlVfW8wixuAJwHMcpQ9x2soWRQLmRQbWmo1OffZDz7rmiT8jnrx37T8y68t+TfqRNeCwgx6mSqJAnkmZJ6ikKc3J0M2V0kiduO9kOqezIoGA66lm9FmOzgrhjSU+fa5338/m9Gn+AIevf47yflwuuUD+uAByneq4HJkSkX2pmY8LPwpRlchpM3DazG2L8WAojhkqmo2KGvBy9vWNcelK4AnCcKvGQJ+1J3DaznTEjg8KIIc50FJk+alT0zePSE8LnABynfs6SdAqwGDjXzN4szSBpKjAVYFSDK7WTPHHx+IvnACAYGUw7al8gUAQ9EY19pElp9uzA02fNms1pQ4YE6Q3ERwCOUx9XAXsBY4CXgK9HZfIQJ61H3MigoCjiTEcFBbGJM8+EU0/t3fjvvnuw+nfKlIY+g48AHKcOzOyVwndJ1wB3NVEcJ2XK7dRVSC/rBXTmmdhVV/Xy+zdARx/d8MYfXAE4Tl1I2tXMXgoPPwNEborktCeVtnLcePW8PmYYAeu/dTX7bPuphqw6LqZtFECjl3InRV7kbEdiQp4cLmkMQcftOeDvmyagkzu0MTrGT4dt7OU6CsmtOi6mLRRAGku5kyAvcrYrMSFPvp26IE7TSaqjtiEm9s8GbR4XFFxHfVP4flKLP24zyYucjtPO1LLA644lPRw25372mH43h825v0+eHx4ykdLVBAZ0H9R7uUmcS2m9tIUCqMkft4nkRU7HaWeq7ahFKYp/vHkpo4uUQcdVV/K9gz/Feg3AgPUawPwxR3PhUb03gIlbjVwvbWECqskft8GUGzpmSU7HcaKptqMWpSgKvf3CqOGSYw/kiX+5hH1/dSYbzBAwYIBg4+ZxQaTraEK0xQigan/cBlNp6JgVOR3HiSeuQ1aaXmnkvnbdBmYtWM5tj/RsCithBI3y9kMGRa4tSJq2GAFU5Y+bAuWGjsXuYs2W03GceKYdtW/ZFcAF4kb0xaxeu65P2rqNxpAPDGTJBUcmI3AZ2kIBQGV/3DSoZuiYBTkdx4mn2o5alKKolrTm/XKvAPLkN98fG3+ens9x2oVqOmrFiqJn9VoEvTx+Bg/qYMtBA3hzTd9RQFrzfonMAUTFSS85L0n/KelpSb+V9OEk7luLO1YWqNXGn7fncxynN5PHdvLg9CN4bs6nuPSEMX3iBl346f2bOu+X1AjgeoI9f+N2L/gksE/4OZQggNah9d60kk09a9Rq48/b8zmOE0+5UUOzRvlJbQr/gKTRZbIcA8w3MwMekjS0JIZKv8ij33wtNv40ns9NTI7TXJo575eWG2gn8GLR8YowrS6qdcfKK41+PjcxOU57k5YCUERa5H5qkqZKWixp8apVq8petNX95hv9fB56wnGyR6XwEUmSlhfQCmBk0fFuQORml2Y2D5gH0NXVFb3pZkjpLHthk+ZCA5Z3U0aj1wXk0YTmOK1M2gEh01IACwi2zbuJYPL3j/Xa/wsUXkqrRtFspH3QQ084ToqMHw/33bf5eNw4uPfeXlnSdvxIyg30RuCXwL6SVkg6TdIZks4IsywEngGeBq4Bzoy5VL9wU0b/aHUTmuM0mqrNNaWNPwTH48f3Skp7VJ6UF1BUnPTi8wZ8MYl7ReGmjP7hoSccp//UZK4pbfxj0tMeled+JTC4KaMePPSE4/SPRphrqo0zlBQtEQ3UTRnpkKZ3guNknUZYHiaP7eSSYw/ss2LYo4GWwU0Zjce3q3Sc3lRleYiy/RczblyfpDRH5S2hACDdl9aOq2c9LIXj9Kaiuaaaxr/ECyhtWkYBpEW79oR9ot1xelPR8lCu8beyS5xSwxVAjbRrT7hZE+3tONpy8kPenShcAdRI3A4/lXb+yTtpeydA+462nOZQrrNRqSMSeT7mPgb85Zz7M9GZcQVQIx3Spv07S9ObRRq95GZMtLfraMupnqTK/h1Leph26zLWbQjqds/qtUy7ddmm8+U6IlEdlV9cfDkTBw1i4Lrem70Y8PNRB2WmM+MKoEaiGv9y6Y0mzV5y2sNdn3dwypFk2b/ozuWbGv8C6zYYF925nCEfGFi2I1LaUZm0/KdcfM8VDFy/ufEvXPnnow7ilJNm97lGs2iJdQBp0hlj845LbzStHAaj1cN9O/WRZNmP2paxkF6pI1J6/rwH5jNk/Xu90gT0bDt8U+Nfeo1m4QqgRrK26KyVe8lZe9dOtkir7FfqiJSeH/HWa9H5I9Kb3ZlxBVAjaa/Uq0Qr95Kz9q6dbJFk2R86eFBseqWOSOn5ldsOi7zWS9sNj71Gs/A5gH6QJdevZnjnpEmW3rWTLZIs+7Mm7c+07y9j3cbN8wCDBohZk/av6ABR+HvuLcvYYMbXPnYKc+65orcZaMgQVk77Cp0dgzPl0uwKIOd4GIz0kHQdMBF41cwOKDn3ZWAuMNzMom0ATqIkWfaraeTLXbdw7hcXX845D8xny/XvsV4D6LCNrN21kyFzv8pHpkzhwZolayyyjKxIi6Krq8sWL17cbDGcFkXSI2bWVUP+jwHvAPOLFYCkkcC1wAeBgyspAC/XLUp3N+tP/wID3908B7F+y8EMvPYamDIlNTFqKdc+B+A4VWJmDwBvRJy6FDiPmH2unTZh5sxejT8QHM+c2SSBKuMKwHHqQNIkoMfMllXIN1XSYkmLV61alZJ0Tqq88EJt6RnAFYDj9BNJQ4CZwAWV8prZPDPrMrOu4cOHV8ru5JFRo2pLzwC5ngROM1BYloKSpSFLlp43w+wF7AEsUxAKZDfgN5IOMbOXmyqZky7d3fDOO33ThwyB2bP7pmeEpDaFnyDpKUlPS5oecf7zklZJWhp+Tq/3noVl4D2r12JsXgbeiF2q0rxXFmTJ0vNmGTN71Mx2MrPRZjYaWAF82Bv/NqO7G6ZOhddf752+444wb16qE8C1UrcCkNQBfBP4JLAfcJKk/SKy3mxmY8LPtfXeN80QCFkKt5CGLFl63iwh6Ubgl8C+klZIOq3ZMjkZYOZMWLOmb/rWW2e68YdkTECHAE+b2TMAkm4CjgEeT+DasaQZAiFL4RbSkCVLz5slzOykCudHpySKkyVyOPlbIAkTUCfwYtHxijCtlM9K+q2kW0O/6Uiq9ZZIMwRClsItpCFLlp7XcTLN+PHxu3uNGsUdS3o4bM797DH9bg6bc3/mzKhJKICoQPilb+ROYLSZfQi4F7gh7mLVekukGSgsS0HJ0pAlS8/rOJml3J6/Q4bw8Be+nPm5tCQUwAqguEe/G7CyOIOZvW5mhcAY1wAH13vTNAOFZSkoWRqyZOl5HSezlNvzd948zunYL/NzaXWHgpA0EPgdMA7oAR4GTjaz5UV5djWzl8LvnwHON7P/U+navmTeaSS1hoJICi/XLUK5XQDN2GP63ZFLwwU8O+dTjZKqpnJd9ySwma2XdBawCOgArjOz5ZIuBhab2QLgS+GKyfUES+k/X+99HcdxGknUWhjYHDDuGaLt3wVGDB0cuVd4lubSElkIZmYLgYUlaRcUfZ8BzEjiXnnDF1TVh78/Jy2Ky9rQIYN45931m8JD96xey7TvLwMFW0XOvzGI72NEKIFx44B8hGr3UBANxBdU1Ye/PyctSsvam2vW9dobAGDdRtvU+P/VC8sQMY3/vfcCfefShg4exJaDBvCPNy/NjEeQK4AG4guq6qNd31/WXQdbkaiyFkeh8Y8kbPwLTB7byYPTj+DSE8bw3vqNvLlmXaY6M64AGkjcwqme1Wu9cldBOy5I81FPc2h0mcpqZ8YVQAMpN9njlbsy7bggLasNRatTTZkaNEAM6ig37RtPVjszrgAaSNSCqlK8csfTjgvSstpQtDpRZW1Qhxg6eNCmtTBzjz+IX9x7CRCz8084+RtFVjszuQ4HnXVK9xmNW3HhlTuadtzvOA+ug61IVWVt/Hj49S96/a5Qp1895C/ZucT+X0xWPYJcATSY4s2kD5tzf64rdzNcMittxt1qZLWhaEWiyvOD04+I/0HEyl8RKIHDj5zJJUt6YstqVjszrgBSJM+VuzA5WZC9MH8BNL0QtxJZbShajaTLc8GUW+63WezMuAJIkf5U7qwshCo3OZm1Qp13sthQtBo1l+fx4yteM4+mXFcAKVNL5c5SrzupycmsKDSnvampPJeJ+mnAz0cdBOTHlFuMK4AME9dLmbVgeeqNaBKTk1lSaE57U1N5rtD4n3LS7NyYcktxN9AME9dLWb12XeoLhZJwyXQfdycrJOVifMpJs3MdLt0VQIaptnedRiOaxB4B7uPuZIWo8vzZgzuZu+ipTav0H559BYweXfY6BaWRx8YfcmoCahc7cpTXUBxpNKL1Tk66j7uTJYrLc6l58uAHF3LAoitg3XuRvy2Yf/LuCJG7EUA7xUqJ6qVsP2RQZN48NKLtuLLXyQel5snzHpjP4IjG3+ht+4d8j2BzNwJoN3fE0l53aU8F8tOIuo+7k1VKG/ERb70Wmc8Qe55/Z++8Oeh8xZE7BRBlQoB8a+FayHsj6j7uThYpNk9etOhKFBO45aXthvc6zkvnK45cKYA7lvRsWnpdSp61cK14I1qedpkjcpKjMN82/a7/4pSlC6Pj/Q8ZwsppX6GzY3DFspWXMpiIApA0AbicYE/ga81sTsn5LYD5wMHA68AJZvZcrfeZu+ip2E2W86yF24lGVwxfa+D0h0LZmDj7nvjNXubN4yNTpvBghWvlqQzWPQksqQP4JvBJYD/gJEn7lWQ7DXjTzPYGLgW+2p97xZl5jOy9WKcvaUzg+1oDp79MHtvJQNsYn2HKlE1fy+3alqcymIQX0CHA02b2jJm9D9wEHFOS5xjghvD7rcA4STXvrBBn5ulsI/NPnkmjYvhaAyeOilttdpbpRHZs9l6r1JHJUxlMwgTUCbxYdLwCODQuj5mtl/RHYEcgeqo9hmK/+Je/Nx2AARJbD9+Kw+/Zor/yOynxyDOvR6a/DBx+z46J3OONF1bz3vpAyexy8mZLZDvNETl9iTLLnHPzUi66czkXfnp/Jk88BFaujL/A1KmbvlbyRMzTepckRgBRPflSU301eYKM0lRJiyUtXrVqVa9zxX7xAFsM7GDP4VsxbGtv/PPAFgOjd0eLS+8PI3cYzICSwWXePTWc+onb9P3NNeuYcfujWLnG/x/+Aa68ctNhub2+71jSk6v1LkmMAFYAI4uOdwNK32YhzwpJA4HtgDeiLmZm84B5AF1dXX2UxCYPmOmPJiC6kyZxaxiSjqPSqIlmSdcBE4FXzeyAMO1fCUycG4FXgc+bWZnWxEmD0jIQ5z4OVF5pX9T4Q/yKdoAZtz/KJcceyCXHHtg2XkAPA/tI2gPoAU4ETi7JswA4FfglcBxwv5nF7ZDotCjl1jAk2Wg30E32euAKAo+2AnPN7CsAkr4EXACc0YibO9URZe6Jcx/vD+VCtBRMQQ9OPyKTDX4pdSuA0KZ/FrCIwA30OjNbLuliYLGZLQC+DXxX0tMEPf8T672vk0+iGue8uM2Z2QOSRpekvVV0uBXJtTNOP4ky9xiUVQKvbLMju7wdMUc1YkSfpEKZPOfmpZHXyuJkbxyJxAIys4Vm9mdmtpeZzQ7TLggbf8zsXTM73sz2NrNDzOyZJO7r1EZFL4gmkSe3uSgkzZb0IjCFYAQQlSd2bstJlnLu4kMH942lNXhQBw/9z7K+jf2IEdATXUcmj+2M9T7M4mRvHLkLBuf0jywH0cuT21wUZjbTzEYC3cBZMXnmmVmXmXUNHz48KouTEOXcxZdeeCSXnTAmOqx5Tw+Ybf7ENP4F8jTZG4crgIyTVK89y73suAqbp55UyPeAzzZbiHanUsM8eWwnD04/gmcPXM2D3/o7Jh88Moj7390NVF/nktgjo9nkKhZQ2jQ7nkeStvEs97KjJtXy0pOStI+Z/T48nAQ82Ux5nCoDJnZ3B779a9YEx88/D1On8vBzbzLj3b2rrnN5j8vlI4AYsmAySbLXnuVedl56UpJuJPBk21fSCkmnAXMkPSbpt8CRwNlNFdIBNvfyLz1hDAD/ePPS3r35mTM3N/4F1qxh5H/8a2ZHyo3ARwAxJLXvQD2jiCR77VnvZeehJ2VmJ0Ukfzt1QZyqiBtBf/SME9n5+ecjf7PT6ugJ+iyMlBuBK4AYkmh86zXhJLmkPO/7CDjtQ1Km16hO3NXzp7PTC8tif/Pq0OgJ+iyMlBuBK4AYkmh86x1FJN1rz0Mv22lvGj3v9VcvLIsP9zxkCC9++SsMfrcjsyPlpHEFEEO5xrfaHkq9owjvtTvtRn87TVF1srQTd9GiK2N/D/DwP3+Vczr2Y+26tXRIbDCjs8XrXNsqgEqNeFzjC1TdQ0liFNHfXnuzPZgcpz/0p9MUN2r47MGd3PZID2vXbeCiRVfG7/RFsEjslHf3Zu264D4bzDZ1+Fq53rSlAqh2mBnV+B425/6qeyjNmnhtVGgFVypOo+lPpylu1PDTJ1dtCso2ZVmZnb6AX+/14UScPvJGW7qB1uNeWUsPpVnujY1Y9JUFt1in9enP6tpydbLgDlp2p69x4zjxuItrunar0JYjgHps87X2UJox8dqIRV9JucU6Tjn6M+9Vtk52dwc+/3F0dMC99zJizv252cQlSdpSAfRnmFkwf0SFlq3HrNMIs0ojdiTK8kpip7WotdMUZ2q9bMPjMPX8vgu+igl3+sr6OplG0ZYmoFqHmcXmD9gcWhbqM+s0yqzSiCBVWV5J3HJ0dwexaQYM6BWjxokmytQ6f8un+ciF58Q3/h0dvXb6ystq9KRpyxFArcPMuPjinUMH8+D0I/otR6PMKo1wH23XHlKDLxw8AAAQrUlEQVTqxMSoAWDKlObJlXF6jRq6u4Oe/4aYnb4kWL++/DXahLZUAFDbP7tR5o9GmlWSLsy+JiElYmLUMHOmK4BqiXqHxYwalZ4sGadtFUAtNMKm3sjrNop27CGlzgsv1Jbu9KXcuxoyBGbP7velW80Vui3nAMoRFQu8URs/tMKGEk7CxPVOvddaPXHvqqMD5s3r90iqFV2hXQEUEfcPBhoyQZTliaesbh/Z8syeHfRSi6mz19p2xL3DG26oy4yW5U2V+ktdJiBJOwA3A6OB54D/a2ZvRuTbADwaHr5gZpPquW+jKPcPfnD6EQ1pmLNoVsnLJu0tSaGBmjkzMGWMGhU0aG7/L0/B37/wzk49FRYuTPQdtqIrdL0jgOnAfWa2D3BfeBzFWjMbE34y2fhDa/6D+0Mr9nRyxZQp8NxzsHFj8Ncb//IUPKeefz7Yy/f554Pe/uzZib7DVnSFrlcBHAPcEH6/AZhc5/WaSiv+g/uDK0InV5TznEqQVpyzq1cB7GxmLwGEf3eKybelpMWSHpJUVklImhrmXbxqVfTuPI2iFf/B/cEVoZMburuDHn8UCXtOZXnOrr9UnAOQdC+wS8SpWtTrKDNbKWlP4H5Jj5rZH6Iymtk8YB5AV1eXReVpFP31dS/nGpZHtzFf9OXkgoLpJ44GeE5lcc6uHioqADMbH3dO0iuSdjWzlyTtCrwac42V4d9nJP0MGAtEKoBmU+s/uNyEKVS/d0CW8EVfTubp7g4meuNW+7rnVFXUuxBsAXAqMCf8+8PSDJK2B9aY2XuShgGHAV+r876ZodKEaV4jaLZaT8dpIQo9/7jGH+ry928n6lUAc4BbJJ0GvAAcDyCpCzjDzE4H/hy4WtJGgjmHOWb2eJ33zQz9mTD1yVTHqYNKoR523z3xxj+PptxqqEsBmNnrwLiI9MXA6eH3/wUOrOc+WaZSOIc0Qj20auF0nEj6Geqhv/WkldfF+ErgOinnOZSGV1ErLk93nF6UhsfeYYfofGVCPdRTT1p5XYwrgDop5xqWhttYKxdOx4lc5PX22zBoUO98FUI9pLUNbN7waKAJUG7CtNGTqa1cOB0n0t7//vuw446w9dZVh3pIcxvYPNEyCqBd7eCtXDidOiiNjZPXeEJx9v433oDXXqv6MrXUk9K25OMfHM5tj/S05LqYljABtbMdvFHzDB4NNMdEmU2mTs3P1pLFNv8BMU1UjYu8qq0nUW3JbY/08NmDO1tqBXCBlhgBNGprxTzQiEVbrez1UA+SrgMmAq+a2QFh2lzg08D7BIsb/9bMVjdPSvK7q1h3N5x9Nrz++ua0KF//fizyKq4nPavX0iH1mgMoPh/Vlvz0yVV1bf+aVVpCAbS7HTzpeYZ2VqgVuB64AphflPYTYIaZrZf0VWAGcH4TZNtMHncVK90LuZSOjiCyZx3mrELZnXbrMtZtCKLM9Kxey7Rbl206325tSUuYgDx4WbK0WyWoFjN7AHijJO3HZlbYYfwhYLfUBSslb7uKFcI6lFvctXFjIqGdL7pz+abGv8C6DcZFdy4H2q8taQkF0EpRPLNge2+3SpAgfwf8qNlC5GZXse5uGDYM/uZvyod1gMSU15tr1pVNb6W2pBpaQgG0SpjWrExmt1slSAJJM4H1QORMa6phzqdMCRZE7b47SMHfLMXGKW74i+39caSovFqlLamWlpgDgNYIXpYV27tHA60NSacSTA6PM7PIEOaphzmfMiU7DX4xlWz9pey4I1x+eWLPMnTwIFav7TsKGDp488KyVmhLqqVlFEArkCXbeztVgnqQNIFg0vevzazKVq2NqRTIrUBHR92buEcxa9L+TPv+MtZt3KyDBw0Qsybtn+h98kJLmIBaBbe9ZxtJNwK/BPaVtCKMgnsFsA3wE0lLJX2rqUJmHKvGE6lCWId6mDy2k7nHH9TLxDP3+IPatrPjI4AM4TtxZRszOyki+dupC5JjXtluOLusjtw3CgPe324oW3zzioaar3x0uxkfAWSIdpuActqPS/7yc6wZuEWvNAPeGLwNZ088lyOm35bNuYsWxUcAGcN7J04rs/iwo5kOnPfAfEa89Rortx3G1z52Cgv2/zgAavO1JmnjCsBxnNSYdtS+zPjT+5sa/FJ8vitd3ATkOE5qFMycxW6XBXy+K33qUgCSjpe0XNLGcB/guHwTJD0l6WlJ0+u5p+M4+Wby2E6WXngkl50wxue7mky9JqDHgGOBq+MySOoAvgl8AlgBPCxpQSttDO84Tu34fFfzqXdT+CcAJJXLdgjwtJk9E+a9CTgGyKwCaNfNZRzHaS/SmATuBF4sOl4BHJrCffuFx8J3HKddqDgHIOleSY9FfI6p8h5Rw4PYWCipBs2KwDdZdxynXag4AjCz8XXeYwUwsuh4N2BlmfulGzSrhCzF43Ecx2kkaZiAHgb2kbQH0AOcCJycwn37RdKbrPt8guM4WaVeN9DPSFoBfBS4W9KiMH2EpIUA4W5JZwGLgCeAW8xseX1iN44kY+HfsaSHad9f1iu+/7TvL/MN1h3HyQT1egH9APhBRPpK4Oii44XAwnrulRZJxsKftWB5r7CzAOs2GrMWLPdRgOOE+Ci5eXgoiAiS8k+O2niiXLrjtBvudddcXAHkEO8xOa1CVnbBa1dcATSQ7YcMityEevshfeOgVIv3mJxWwr3umosHg2sgF356fwZ19F4GMahDXPjp/m8/5+sUnFbCd8FrLq4AGsjksZ3MPa5k+7nj6tt+zntMTiuRpNedUztuAmowSQe8SnqdguM0kyS97pzacQWQM3zfYKfV8KigzcMVQM7wHpPjOEnhCiCHlPaY7ljSw2Fz7neF4DhOTbgCyDnuFuo4Tn9xL6Cc426hjuP0Fx8B5Bx3C3Wi8NXiTjX4CCDn+EIap5SCWbA4Cu2M2x/1KLROH1wB5BxfSOOU0g5mwYLjwx7T7+awOfe7cusnbgLKOe4W6pTS6mZBd3xIDlcALYAvpHGKafXV4h5BNDncBOQ4VSLpOkmvSnqsKO14ScslbZTU1Uz5CrS6WbDVRzhp4grAcarnemBCSdpjwLHAA6lLE8PksZ1ccuyBvYIQXnLsgZnvHVdr13fHh+RwE5DjVImZPSBpdEnaEwCSon7SNPJmFqzFru/xsJKj3k3hqxr+SnpO0qOSlkpaXM89HcdpPWrxXMrrCCeL1DsCKAx/r64i78fN7LU67+c4uUTSVGAqwKhRo5osTfao1a6ftxFOVqlrBGBmT5hZ6zgXO06DMLN5ZtZlZl3Dhw9vtjiZw+36zSGtSWADfizpkbAnFIukqZIWS1q8atWqlMRzHKeZtLrnUlapaAKSdC+wS8SpmWb2wyrvc5iZrZS0E/ATSU+aWaTXhJnNA+YBdHV1WZXXd5yGI+lG4HBgmKQVwIXAG8B/AcOBuyUtNbOjmidlPvEFjc2hogIws/H13sTMVoZ/X5X0A+AQMuQ25zjVYGYnxZz6QaqCtChu10+fhpuAJG0laZvCd+BIgsljx3Ecp4nU6wb6mXAo/FGC4e+iMH2EpIVhtp2BX0haBvwauNvM7qnnvo7jOE791OUGamY/IGL4G5p8jg6/PwMcVM99HMdxnOTxUBCO4zhtiisAx3GcNsUVgOM4TpviweAyhu/l6jhOWrgCyBC+05HjOGniJqAM0Q57uTqOkx1cAWQI3+nIcZw0cQWQITwiouM4aeIKIEN4RETHcdLEJ4EzhEdEdBwnTdpOAWTdzdIjIjpOb7JeZ/NMWykAd7N0nHzhdbaxtNUcgLtZOk6+8DrbWNpKAbibpePkC6+zjaWtFIC7WTpOvvA621jaSgG4m6Xj5Auvs42lrSaB3c3ScfKF19nG0lYKANzN0nHyhtfZxlHvnsBzJT0p6beSfiBpaEy+CZKekvS0pOn13NNxHMdJhnrnAH4CHGBmHwJ+B8wozSCpA/gm8ElgP+AkSfvVeV/HcRynTupSAGb2YzNbHx4+BOwWke0Q4Gkze8bM3gduAo6p576O4zhO/STpBfR3wI8i0juBF4uOV4RpjuM4ThOpOAks6V5gl4hTM83sh2GemcB6oDvqEhFpVuZ+U4GpAKNGjaoknuM4jtNPKioAMxtf7rykU4GJwDgzi2rYVwAji453A1aWud88YB5AV1dXrKJwHMdx6kPRbXaVP5YmAN8A/trMVsXkGUgwQTwO6AEeBk42s+VVXH8V8HyV4gwDXqsyb1pkUSZwuQrsbmbDU7wfUFO5zur/KQqXNXn6K2fV5bpeBfA0sAXwepj0kJmdIWkEcK2ZHR3mOxq4DOgArjOz2f2+abwsi82sK+nr1kMWZQKXKy/k6X24rMmThpx1LQQzs71j0lcCRxcdLwQW1nMvx3EcJ1naKhaQ4ziOs5lWUgDzmi1ABFmUCVyuvJCn9+GyJk/D5axrDsBxHMfJL600AnAcx3FqwBWA4zhOm5JLBSDpOkmvSnqsKK2qyKQpy/SvoTxLJf04dI9NlSi5is59WZJJGtZsmSTNktQTvquloetwW5Ll6LmSRkr6qaQnJC2XdHaYvoOkn0j6ffh3+2bLWkBSh6Qlku4Kj/eQ9KtQ1pslfaDZMgJIGirp1rAde0LSRxv9XnOpAIDrgQklaRUjkzZBprlm9iEzGwPcBVyQskwQLReSRgKfAF5IWyBiZAIuNbMx4act3YZzED13PXCumf058H+AL4byTQfuM7N9gPvC46xwNvBE0fFXCcraPsCbwGlNkaovlwP3mNkHgYMIZG7oe82lAjCzB4A3StKqiUyatkxvFR1uRZkYSI0iSq6QS4HzyJZMTsaj55rZS2b2m/D72wSNVCeBjDeE2W4AJjdHwt5I2g34FHBteCzgCODWMEsmZJW0LfAx4NsAZva+ma2mwe81lwqgCuIik6aOpNmSXgSm0JwRQB8kTQJ6zGxZs2Up4azQZHZdlkwIKZOb6LmSRgNjgV8BO5vZSxAoCWCn5knWi8sIOjobw+MdgdVFncWsvN89gVXAd0Jz1bWStqLB77XlFECFyKSpY2YzzWwkgTxnNVseSUOAmWREGRVxFbAXMAZ4Cfh6c8VpGjVFz20WkrYGbgPOKRnpZgZJE4FXzeyR4uSIrFl4vwOBDwNXmdlY4E+kYEZrKQVQFJl0Skxk0mbyPeCzzRaCoJHdA1gm6TkCU9lvJEWF/E4NM3vFzDaY2UbgGgJTSDtSU/TcZiBpEEHj321mt4fJr0jaNTy/K/Bqs+Qr4jBgUljObyIw/VwGDA2DVEJ23u8KYIWZ/So8vpVAITT0vbaMAggjk54PTDKzNc2WB0DSPkWHk4AnmyVLATN71Mx2MrPRZjaaoOB92MxebqZchUIe8hmgj9dSm/AwsE/oqfIB4ERgQZNl2kRoQ/828ISZfaPo1ALg1PD7qcAP05atFDObYWa7heX8ROB+M5sC/BQ4LsyWFVlfBl6UtG+YNA54nEa/VzPL3Qe4kcBMsI6gATsNeJrAdro0/HwrAzLdRtCQ/Ra4E+jMwrsqOf8cMKzZMgHfBR4N39UCYNdml7NmfQgCKf4O+APBxktNl6lItr8kMJn8tqiuHU1gW78P+H34d4dmy1oi9+HAXeH3PYFfh23G94Etmi1fKNcYYHH4bu8Atm/0e/VQEI7jOG1Ky5iAHMdxnNpwBeA4jtOmuAJwHMdpU1wBOI7jtCmuABzHcdoUVwCO4zhtiisAx3GcNuX/A94i5wGepz/oAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def fitAndEvaluate(x,y,grid):\n",
    "    grid.fit(x,y)\n",
    "    model = grid.best_estimator_\n",
    "    print(f'Best model: {model}')\n",
    "    y_pred = model.predict(x)\n",
    "\n",
    "    plt.subplot(1,2,1)\n",
    "    plt.scatter(y_pred, y_pred - y)\n",
    "    plt.hlines(y = 0, xmin = min(y_pred), xmax = max(y_pred))\n",
    "    plt.title('Residual Errors')\n",
    "    \n",
    "    plt.subplot(1,2,2)\n",
    "    plt.scatter(x,y)\n",
    "    lim = plt.axis()\n",
    "    plt.scatter(x,y_pred, c = 'red')\n",
    "    plt.title('Prediction versus actual')\n",
    "\n",
    "    rmse = np.sqrt(np.sum((y_pred - y)**2))[0]\n",
    "    print(f'RMSE: {rmse}')\n",
    "    print(f'Rsq: {r2_score(y,y_pred)}')\n",
    "    \n",
    "\n",
    "fitAndEvaluate(x,y,grid)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Baseline with outlier removed (2018-05-22 22:15)\n",
    "* Evaluate outlier at 0 popularity. It seems to skew the results. It looks like linear would be a good fit here actually"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>track_id</th>\n",
       "      <th>popularity</th>\n",
       "      <th>all_streams_cumsum</th>\n",
       "      <th>log_all_streams_cumsum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0A488iaPeDAUP5q7Jm3paF</td>\n",
       "      <td>0</td>\n",
       "      <td>791514</td>\n",
       "      <td>13.581703</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>1ekNZULmcBHp3WRNKft7ou</td>\n",
       "      <td>8</td>\n",
       "      <td>68719</td>\n",
       "      <td>11.137781</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0DPXH5sPDVwjsqfgvmi1yt</td>\n",
       "      <td>26</td>\n",
       "      <td>139665</td>\n",
       "      <td>11.847002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>1cinSNWNJeGVxMgUSNCHRT</td>\n",
       "      <td>27</td>\n",
       "      <td>137729</td>\n",
       "      <td>11.833043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>00mc2RHScEYMEFlc7FRGaK</td>\n",
       "      <td>28</td>\n",
       "      <td>93919</td>\n",
       "      <td>11.450188</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  track_id  popularity  all_streams_cumsum  \\\n",
       "6   0A488iaPeDAUP5q7Jm3paF           0              791514   \n",
       "41  1ekNZULmcBHp3WRNKft7ou           8               68719   \n",
       "11  0DPXH5sPDVwjsqfgvmi1yt          26              139665   \n",
       "37  1cinSNWNJeGVxMgUSNCHRT          27              137729   \n",
       "1   00mc2RHScEYMEFlc7FRGaK          28               93919   \n",
       "\n",
       "    log_all_streams_cumsum  \n",
       "6                13.581703  \n",
       "41               11.137781  \n",
       "11               11.847002  \n",
       "37               11.833043  \n",
       "1                11.450188  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values('popularity').head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Popularity 0 outlier\n",
    "There is an outlier that has massive impact on the curve with 0 popularity, ,this could be some corner case but also some data error. Look into this explicitly.\n",
    "* 0A488iaPeDAUP5q7Jm3paF\n",
    "\n",
    "**UPDATE this was caused by an erratic jump to 0 and back**\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df = pd.read_feather('../data/basemodel_cumsum_outlier_removed.feather')\n",
    "\n",
    "x = df[['popularity']]\n",
    "y = df[['log_all_streams_cumsum']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best model: Pipeline(memory=None,\n",
      "     steps=[('polynomialfeatures', PolynomialFeatures(degree=1, include_bias=True, interaction_only=False)), ('linearregression', LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=True))])\n",
      "RMSE: 5.600131028898199\n",
      "Rsq: 0.608212130063924\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEICAYAAABWJCMKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJztnXu4HFWVt99fTiIkoBww4ZLASQAZGMCB6BHHYS5BUBAxBMUPYkZwvORDxk9xBAmTGQloJA7eJ4MSFUOcI4Io4SoRCAzoDEowiRAuA0IScoIkQI4oOWIu6/ujqpNOp6pPdXd1V1fXep+nn9O1a1fVrtN777XX2muvLTPDcRzHKR7Dsi6A4ziOkw0uABzHcQqKCwDHcZyC4gLAcRynoLgAcBzHKSguABzHcQqKC4AWI2mFpEkx5yZJWpPSc+6R9OE07uXkG0kTJJmk4eHxTySdXcd9eiT9QVJX+qV0akXSByT9rJF7uACIQdJKSYNhhf+tpPmSdm/0vmZ2hJndk0IR60bSLEmbwncrfQayLFPRqahvz0n6bhr1LQoze4eZXZ2wTCeUXbfazHY3sy3NKFenk+YALy1cAFTnXWa2O3A0MBG4KOPypMm1YWMufbqjMpVGjUOlVUMBXteGplTf3gC8CfiXygz+v6xOrXWz6HhFSoCZ/RZYRCAIAJC0i6QvSlodjti+KWlkeG60pFskDUh6UdJ9pUZbPqqSNDLULDZIeoSg0VP2DJP0urLj+ZI+F37fM3zG+vD6WyTtn8b7hs/9R0lPAE9USfsrSQ9I+l3496/K7nGPpNmSfg5sBA4KVdanJP1e0tOSpqVR3k7DzPqBnwBHQuz/cg9J35H0rKR+SZ8rmWYkdYV183lJTwHvLL9/pXlQ0kckPRr+Lo9IeoOk7wE9wM2hVvLpCFPSWEk3hXX8SUkfKbvnLEnXSVoQ3neFpN6o9w3bzhcr0m6U9E9lz/lRWNeflvTxiudcL+k/Jb0EfEDSMZKWSHopbJtfDvPuNAKvaI+R10WUt2rbk7SXAg1ubXh+oaTdwt90rLZr3WPL23RUGSXNkPSbst/mtKgy1YsLgASEP+47gCfLkr8A/BmBUHgdMA74THjuU8AaYAywD/DPQFTMjYuBg8PPiUAtdtlhwHeB8QQNdRCYW8P1QzEFeDNweFSapL2AW4GvA68FvgzcKum1ZfnfD0wHXg2sD/O+w8xeDfwVsCzF8nYMkg4ATgaWliWX/y9XAVcDmwnq3kTg7UCpU/8IcEqY3gucXuVZ7wVmAWcBrwEmAy+Y2fuB1YRaiZn9W8Tl1xDU87HhMz4v6fiy85OBHwDdwE3E18/vA2dIUlimPcP3+YGCgdPNwHKCNnY8cJ6kE8uuPxW4PnxOH/A14Gtm9hqCtnVd3PtXkPS6odre94BRwBHA3sBXzOxlgj5kbZnWvTZBmX4D/A2wB3AJ8J+S9kv4PkNjZv6J+AArgT8AvyfovO8CusNzAl4GDi7L/xbg6fD7pcCNwOti7ntC+P0p4KSyc9OBNWXHVn4PYD7wuZjyHg1sKDu+B/hwTN5ZwJ+AgbLP3RXPfWvFNTukEXRIv6zI8z/AB8qef2nZud3C57wHGJn179tun7L6NkDQwV9R+j9F/C/3AV4p/z8CU0u/IbAYOKfs3NvD3294Zd0g0Gw/UaVMJ5QdTyjdBzgA2AK8uuz8ZcD8sjp2Z9m5w4HBmOeIQNj8bXj8EWBx+P3NwOqK/BcB3y17zr0V5+8l6CxHV6RPKm9fle8Yd12C325b2wP2A7YCe0bki3r+fMradFSeivzLgFPD7x8AftZIvXMNoDpTLBitTgIOA0aH6WMIJPyDCsw8A8DtYTrA5QTawk9Dk8eMmPuPBZ4pO16VtGCSRkm6UtKqUPW9F+hWcg+N68ysu+xzXMX5ZyKuKU8bG1HeVQSjtJ3yWzACOgM4B3hW0q2SDktY1qIwJfwtxpvZuWY2WHau/H8/HhhB8H8s1b8rCUabUFu9OoBglFkrY4EXzez3Fc8p//1/W/Z9I7CrImz0FvRmPyAQYgDvIxjJQ/CuY0vvGb7rPxMIwRKVdfVDBNr5Y6Fp8pSE75TouiHa3gEE/5cNCZ9ZFUlnSVpW9u5Hsr0fahgXAAkws/8ikNQlO+XzBGrfEWUd6B4WTOBhZr83s0+Z2UHAu4B/qlCNSzxLUGFK9FSc30ggaErsW/b9U8ChwJstUFn/NkxXzS8YTZTJqjxtLUHjLKcH6I+7h5ktMrO3EYySHgO+lUI5i0L5//IZAg1gdFn9e42ZHRGeH6pelfMMgbljqGdWshbYS9KrK57TH5N/KK4BTpc0nmDU/6Oy8j1dMVh5tZmdHFdOM3vCzKYSCMQvANeHNviXKWtPYYc9JsF1lVRre88Q/F+inCqi/p87lImyNh7+L74FfAx4rQWOGg+TXht3AVADXwXeJuloM9tK8MN8RdLeAJLGleySkk6R9LrQpvkSgaoc5Tp3HXBROKm0P/D/Ks4vA96nYFLvJODvys69mkAIDYT2+IvTe9VE3Ab8maT3SRou6QwCNf+WqMyS9pE0OWxQrxCYO9ydsA7M7Fngp8CXJL1G0jBJB0sq1Y/rgI9L2j+0p8dpoADfBs6X9EYFvC7seACeAw6KKcMzwH8Dl0naVdJfEIyg+6LyJ3inpQTzRN8GFplZyS35l8BLki5U4DTRJelISW+Ku5ekv5c0JmynpftsAf6XQAt5p6QRBF5WuyS4rpLYthf+Nj8Brgjb9QhJJQHxHPBaSXuU3WsZcHI4cbwvcF7Zud0IhMb6sHz/QOgYkBYuABJiZuuBBcC/hkkXEph57g/VwDsJRgUAh4THfyCwi19h0b7/lxCozU8TNOjvVZz/BIEGMQBMAxaWnfsqMJJAG7mfwARVC2dox3UAfygJsySY2QsEE42fAl4APg2cYmbPx1wyLMy7FniRQJidW2OZne2cBbwKeATYQDAJWpoc/BaBbX858Cvgx3E3MbMfArMJJmJ/T1DH9gpPXwb8S2h+OD/i8qkE8wJrgRuAi83sjgbe6RrghLAspfJtIWgDRxO0k+cJhMQeUTcIOQlYIekPBBO7Z5rZH83sdwR17tsEmsrLBJPYVa+LuP9Qbe/9wCYCLXcdYaduZo+F7/hU+D8dS9DmlxPMRfwUuLbs3R8BvkTQhzwHvB74eZX3rhmFkwmO4zhOwXANwHEcp6C4AHAcxykoLgAcx3EKigsAx3GcgtLWgZNGjx5tEyZMyLoYTofy4IMPPm9mY4bOmS5er51mUku9bmsBMGHCBJYsWZJ1MZwORVLilddp4vXaaSa11Gs3ATmO4xQUFwCO4zgFxQWA4zhOQXEB4DiOU1BcADiO4xQUFwCO4zgFpa3dQJ2AhUv7uXzR46wdGGRs90guOPFQpkwcN/SFjuN0BM3qA1wAtDkLl/Zz0Y8fYnBTEJa8f2CQi378EIALAccpAM3sA9wE1OZcvujxbT98icFNW7h80eMZlchxnFbSzD7ABUCbs3ZgsKZ0x3E6i2b2AS4A2pyx3SNrSnccp7NoZh/gAqDNueDEQxk5omuHtJEjurjgxENjrnAcp5NoZh/gk8BtTmmSx72AHKeYNLMPcAGQA6ZMHOcdvuMUmGb1AW4CchzHKSguABzHcQqKCwDHcZyC4gLAcRynoLgAcBzHKSipeAFJugo4BVhnZkdGnJ8E3Ag8HSb92MwuTePZjuM4eSergI9puYHOB+YCC6rkuc/MTknpeY7jOE2h1Z1xlgEfUzEBmdm9wItp3MtxHCcrSp1x/8AgxvbOeOHS/qY9M8uAj62cA3iLpOWSfiLpiBY+13EcJxFDdcYLl/Zz7JzFHDjjVo6dszgVwZBlwMdWrQT+FTDezP4g6WRgIXBIVEZJ04HpAD09PS0qnuM4TvXOuBZTTS1mpLHdI+mPeG4rAj62RAMws5fM7A/h99uAEZJGx+SdZ2a9ZtY7ZsyYVhTPcRIh6SpJ6yQ9XJY2S1K/pGXh5+Qsy+g0RrXIm0lNNbWakbIM+NgSASBpX0kKvx8TPveFVjzbcVJkPnBSRPpXzOzo8HNbi8vkpEi1zjipqaZWm/6UieO47N2vZ1z3SASM6x7JZe9+/Y4aQ18fTJgAw4YFf/v6an21SNJyA70GmASMlrQGuBgYAWBm3wROBz4qaTMwCJxpZpbGsx2nVZjZvZImZF0Op3lUi7x5+aLHE5lq6rHpVw321tcH06fDxo3B8apVwTHAtGlDvFF1UhEAZjZ1iPNzCdxEHacT+Ziks4AlwKfMbENlBp/byg9xnfEFJx66wxwARJtqUrfpz5y5vfMvsXFjkN6gAPCVwE7dNMMjIod8AzgYOBp4FvhSVCaf28o/iUw11GbTT9SGVq+OLlBceg34fgBOXWS5eKWdMLPnSt8lfQu4JcPiOE0mSVz+pBu4xLWhJate5O7H1m+79o59xzLq2QjBkIIm6QLAqYtqE11FEgCS9jOzZ8PD04CHq+V3ikESQRHXhvruX01pgrR/YJDPvPl9zLl9LsP/WGZWGjUKZs9uuJwuAJxEVPo1R9k4oTWLV7IixtlhkqSjAQNWAv83swI6TaMZ4SHi2kqld8z1h/4du79qOLN+8f3A7NPTE3T+Ddr/wQWAk4AoVVXsXFGhNYtXsiLG2eE7LS+I01LqMXcmERhxA6lLFl3BtOW302Vb2aJh9B11ErNOPJdZ134+5TfzSeDc0soJ2ChV1QBV5GvV4hXHaSW1+vVHLQQ779plHH3JT3dop1GTxZcuuoKzlt3GcNuKgOG2lbOW3cYX75mX9msBLgBySasDVlVTVYfyiHCcvFOrX3+UwAAYGNy0QzudMnEc73njOLqCNbJ0SUz79e07DawEnPbArXWXvxpuAsohrZ6AjVNVx3WP5Ocz3pr68xynnajVr7/aPFh5O124tJ8fPdjPFjMmr7ibT9+7gGFbt0ZeN2zrzgIlDVwDyCGtjh6YZawSx8maWuv/UPNgpXZaGshNXnE3c26fy/4vrd9p9L+Nrq64Mw3hAiCHVAtY1QySLIDxRWFOp5J0AViJKIFRTqmdlgTBp+9dwKjNr1QvRCn0Q8q4CSiHJF2SnibV/Jp9UZjT6STx6y/PC3DJzSvYsHHTDufK2+nY7pFMv/ZLjHtpffzNurqCzv+KK+or+BC4AMghSVcatgpfFOY4O1ISGNXcQRc8eDUHLbst3uwzfjysXNnUcroAyCm1jEiaTZY7GjlOO1OtnR58Q5WQzimt9B0KnwNwGqbVcxKO0xFsqeLZM29eKit9h8IFgNMw7iXkOHUQ59nT1dWSzh9cADgpUKuXhOM4xHr2/Oa0aS3zqPM5ACcV2mlOwnFyQcmzZ968wBzU1cVvTpvGKYdNZTCcP2u2R51rAI7jOAlJfb3LFVfA5s1gBps3c9Ybz64p7lCjuAbgOI6TgFasd2m1R51rAAXHV/A6TjJqjQpaD632qEtFAEi6StI6SZG7ISng65KelPRrSW9I47lOY7Q6qqjj5Jm6RucnnADS9s8JJ1R9Rqs96tLSAOYDJ1U5/w7gkPAznWAjbSdjWjGicZxOoebR+QknwF137Zh2111VhUCrPepSmQMws3slTaiS5VRggZkZcL+k7oq9VJ0MiNvWMS49TZqxxZ7jNJOaY3BVdv5DpYe00qOuVZPA44Bnyo7XhGk7CQBJ0wm0BHpS2PXeiadLYovtvLFjaYOKZuHB45w8UlMMriFMPe1CqwRAVI8StaUsZjYPmAfQ29sbmcdJh6jOv1p6WnjwOCdLhtI+q51PNDqPMv20Ka0SAGuAA8qO9wfWtujZbU9W5pBxVXb6aiYePM5JQjPaxcKl/Vxw/XI2bQkGOf0Dg1xw/XKAbdE7k2qnseWr0vkbsO6Yv2afht4iPVrlBnoTcFboDfSXwO/c/h+QpSdOVjF8PHicMxTNaheX3LxiW+dfYtMW45KbVwDJHSPiNn6feOlPo00bBJ3/fT1H8e7TLmnoHdIkLTfQa4D/AQ6VtEbShySdI+mcMMttwFPAk8C3gHPTeG4nkKUnTlYxfDx4nDMUzWoXlRu0VKYn1U6jyjd5xd3c/KW/r/r8s6bObitNNy0voKlDnDfgH9N4VqeRtTkkixg+7bahjdN+ZNUukm4AX1mO0r6+cVs7lkb/UffKEg8FkTFJK1yn4cHjnGo0q110jxzBwODOWkD3yBFAclfPyvLF7etbMgfd13MUZ02d3XaaroeCyJhONod0WpiJaiveJZ0vySSNzqJsnUaz2sWsyUcwYtiOTokjholZk48AkptFy8s3ecXd8fv6Svz1ZXdx9tTZbRkm3TWAjOlUc0iH+vrPB+YCC8oTJR0AvA1YnUGZOpJmtYsk902inZbO/+Jz/86/3j43dl9f9fTw8xlvbajMzUTWZJ/vRujt7bUlS5ZkXQynDo6dszjWxbRdGoSkB82st8ZrJgC3mNmRZWnXA58FbgR6zez5avfwet1BTJgAq1ZFnxs1qmVbO5ZTS712E5DTFLKe3G4VkiYD/Wa2POuyOC2mry++84dMOv9acQHgNIUi+PpLGgXMBD6TIO90SUskLVm/PsZe7OSHvr7YLR0BGD++7Tt/cAFQSFoxOdvJk9tlHAwcCCyXtJJghfuvJO1bmdHM5plZr5n1jhkzpsXFdFJn5kzYuDH63KhRMHt2a8tTJz4JXDBaNTlb7yRenqKEmtlDwN6l41AIDDkH4OSYJHF+cmD6KeECoGC0MhBbrb7+7e45FK54nwSMlrQGuNjMvpNtqZyWkaTzz4npp4QLgILRzpOz7R4lNMGK9wktKoqTBUN1/jky/ZRwAVAw2nnlcTsLJ6fgDBXff/z4oPMPR/95MWW6ACgYNe9qVCONVPx2Fk5OgUli+lm5ctvXdjdlluNeQAWjmRFAGw3hWxDPISdvDNX5H3/8Dod52mvbNYAC0qxAbI3a8Ds1LIaTT0ra7M+I3tIQCDr/O+/cISlPpkwXAE5qpFHxPUqo02yizJSw48DjuMPGcNInz+JnK5dVv1lF5w/5MmW6AHCqUotNP08V3ykmUfb5C65fDgabtm7fJvLtn3g/x65eHj/yh51MPyWaPc+WJj4H4MRSq03fbfhOuxNlpty0xbZ1/iX+Jqbz35YrwvRTonyeDaBL2mYKbbeQ6K4BOLHUatN3G77T7kRpqJUsuGZm9QwJIiiX6ny7ewO5AHBiqcem7zZ8p53pkthSpQNfcM3M2NF/rbT7wkZIb1P4kyQ9LulJSTMizn9A0npJy8LPh9N4rtNc4mz3w6S2U2UdJwnVOn+IN/1AYP5RjN0/ijx4AzUsACR1Af8BvAM4HJgq6fCIrNea2dHh59uNPtdpPlE2fQgaUS3+/Y7TLoyLGdRMfeI+7r/yg7HXGfDLg9/Agb2fTBxBNw8h0dPQAI4BnjSzp8zsT8APgFNTuK+TMaXJrC7tPCZq14UtjlNOZejz4w4bs9Og5vTH/4vP3vZ19h1YV9X0c8bpl9a0wDEPThFpCIBxwDNlx2vCtEreI+nXkq4P91CNxDfOaC+mTBzH1hi1OS1VttM2j3fagygvth892M973jhuh5Xwl/7i+wz/Y3xdNuC+nqN2SEsyAGrmqvu0SGMSuKq3VMjNwDVm9oqkc4CrgciNYc1sHjAPgr1TUyif0yDN9O/PU9wUJ1/ETcLe/dj67ftSn3suPFt9wHFfz1GcNXXnKJ9JBkDt7hSRhgawBigf0e8PrC3PYGYvmNkr4eG3gDem8FynRTRTlc1T3BQnXww5CXvuufCNb8TfYPx4MOOij3458nQ72fLrJQ0B8ABwiKQDJb0KOBO4qTyDpP3KDicDj6bwXKdFNFOVzYOnhJNPhpyEnTcv/uKy2P55sOXXS8MmIDPbLOljwCKgC7jKzFZIuhRYYmY3AR+XNBnYDLwIfKDR5zqtpVmqrIePcJpFXEiG4w4bw7FzFvOzLVviJ33nzWPh4ZO4fM5i1g4MssfIEew6YhgDGzd11ALHVBaCmdltwG0VaZ8p+34RcFEaz3I6izzFTXHyRdTK9OMOG8M/nfkWPvvKy/EXdnWx8PBJO9TLgcFNjBzRxVfOOLojOv4SvhI4Q/Kya1AS6n0XDx/hNJNKzXVg193Z45WXq6/0nT49F6t408AFQEZ0kvdLo+/S7p4STucQ1/kboK4umD4drriCtTNujby+0+amXABkRCeNMLJ8l07SopyM2bx529eizE15OOiM6CTvl6zepdEtKB0njno8f/K4oNEFQEbkIU5IUrIKGudrCJxaUXf3TqtULUwvp1bX57wORlwAZEQn+RZnFTSuk7Qop0n09cGECTBsWPB37tydOnt1d8OGDTtdOmXiOH4+4608PeedXHDioVy+6PHY0X1eByM+B5ARneT9Uirzp65bvlO43WbOBRTFTuskpzQn1D8wyJRH7uHzP/l3Rm0OgxCsWhVM8s6bB9Om1XTPoZwc8joYcQ0gQ8pHGD+f8dZcdv4lWhE0rpJO0qKcxik3wwCc/19Xb+/8S2zcCDOH2PGrgiSj+7yadF0DcFKj1SPyVmtRkq4CTgHWmdmRYdpnCcKfbwXWAR8ws7Xxd3HSotID7OVXNm/rqBdcM5NxL8VEE169uqbnxA1g+gcGWbi0nykTx+V2QaMLACc1smgELV5DMB+YCywoS7vczP4VQNLHgc8A57SqQEUlyixTYshtHXt6anpW3MAG2MkUlDeTrgsAJzXy2giSYmb3SppQkfZS2eFu7BwK3WkCUWaZElU7/7Igb0mJGtiUKJ/jyuOCRhcATqrksRE0iqTZwFnA74DjYvJMB6YD9NQ4AnV2pp55JQNU4wQwbB/YnHftstTK0i74JLDjNIiZzTSzA4A+4GMxeeaZWa+Z9Y4ZM6a1BexA4uaV5tz1zdhrBDV3/iWmTBwXu59wu0/0VsMFgNNW5HE1ZRnfB96TdSGKQJQH2Ow7v8EZS26JN/8cf/xOSbXUt070OnMTkNM25DFAnqRDzOyJ8HAy8FiW5SkKUfNNU5feXr3zv/POHZJqrW+dOMflAsBpG9o9QJ6ka4BJwGhJa4CLgZMlHUrgBroK9wBqGaX5pgdmz+WAL3wWbY2eFAZ26vyhvvrWaXNcLgCctqHdV1Oa2dSI5O+0vCDONh6YPZcjLzmfkZteic/UtXOYEmj/+tYKXAA4bYOHduhsmhG6+4AvfrZ65w9B+IcIvL75JLDTRnTiJJsT0JRomX197DOwLvKUQTDy/+hH4YorIvN4fUtJA5B0EvA1gk3hv21mcyrO70KwevKNwAvAGWa2Mo1nO8lp981TOnGSzQlodH6nsu5+dcsjvOnzF8ZO+j7XvTf7bnhuyHt1jxrBLsOH8bvBztrsPSkNCwBJXcB/AG8D1gAPSLrJzB4py/YhYIOZvU7SmcAXgDMafbaTnHo9bJIKjbSES6dNsjkBjdjbo+ru2G9+NgjsFsHgiF145vx/Zd8E99qwsTM3e09KGhrAMcCTZvYUgKQfEATHKhcApwKzwu/XA3MlySwmfGQCJk2aVO+lhWTp6gFe2byzl8TZfV1M7OmOuAKe/8MrPLX+5W1RPp8F3vcNcdCY3Ri9+y4152s199xzT2bPdnakEXt7lPaw3++iA70Z8PDFX+RNMyPX47W9p1mrSWMOYBzwTNnxmjAtMo+ZbSZYMv/aqJtJmi5piaQl69fHRPNzaiaq86+WDvDMi4M7hXjeasYzLw7Wlc8pLo3Y26O0hLWvGR2ZV+PHx3b+cfeqlt7ppKEBRJnhKkf2SfIEiWbzgHkAvb29sRqCj+5q49g5iyNHYN0jR7Bpl+GRppsDZ9wa+SMJuGfOO7cdJ83nFJdG5neitId/+9uz+MKiuTt6ACUI9OaePzuShgawBjig7Hh/oDIe+rY8koYDewAvpvBsJyFRI7ARw8TLf9oc65mRdJOLLDfDyHnoiEJR7wZIUXX3jqNP4OGLvwjjx4MU/E0Q6M09f3YkDQHwAHCIpAMlvQo4E7ipIs9NwNnh99OBxY3Y/53aidrkevddh7NpS/QWjpC8sWTVqPK6EbdTG1MmjmPBrk9y/5Uf5KkvvIv7r/wgC3Z9MjD1rFwJW7cGfxMEeqt1s/dOp2ETkJltlvQxYBGBG+hVZrZC0qXAEjO7iWC15PckPUkw8j+z0ec6tVPpYXPgjFsj85XsoUnV9lrU+0a8hSqv3finzT6hVwT6+njT5y/c5vWz78A69v38hTBhz7qie7qn2XbUzgPx3t5eW7JkSdbFSJV28sWPmxcY1z2Sn894a+rPq3TBg0BTSDICi7o2DgFPJ5h7kPSgmfUOmTFlOrFeN5UJE4IN3SsZPz4Y+TeJdmqrtVBLvfaVwC2k2SaLWu3hrTbdJNlcu5Zr4yjqhF7H0dcX3/lDzXv71kJRzIsuAFpIIx3gUNRSYUuC4pPXLmOX4cPYc9SIlthDG3HBS+qmV+QJvY6iry+I4RPX+UPNe/vWQjPbajvhweBaSDN9kJMucKk0pQwM1r4Ssl7VuBEXvLhru0eOYLcYN1Ynx8ycGbvSF6hrb99aKMp6AdcAWkgz3SWTVthGRzaNqMaNmJzirp01+Yi6XAudNqavr/rIP6HLZyNk6drcSlwAtJBm2tyTVthGRzaNCJBGXPDcfa8glEw/cZQmfpvY+UNx1gu4CahFlMwmg5u20CWxxYxxKZosLjjx0EgPm8oK2+hKyHoEiAeKcxJTzfTTZLNPOUWJTOsCoAVU2t23mG3rnNOqUEkrbFJBEUetAiSP+/w6GVLNs6fJZp9KijDgcAHQAloVgTCqwkaNvi979+vrHtnUKkA8+qJTEz098T7/Lez8i4ILgBaQlUdB3Oj7sne/vu6FXrWqxmm+e14X5jg1MHt2MAdQbgZqoekHilXPXAC0gKwiEKYx+o5rDEmvT+vd3ZRUEEqj/JkzA3NQT0/Q+Scc/TfaeRetnrkXUAvIyqOg0dF3Gqsh03r3oizMKRyl1b7DhgV/+/qCzr7GIG+QTn0tWj1zDaAFZOVRUMvoO2rklIYGkda7F2VhTqEouXyWzD2rVm13Aa3D3p9GfS1aPXMB0CKy8ChIOmEbp/bGxd6ptTGk8e6+kUcHEuXyuXFjkF6HAEij8y5aPXMTUAeTdPFU3MgpahstwAZWAAAPL0lEQVQ3gD1GjmhOgatQlIU5hSLO5bPOIG/1rN6tDKB43GFjClXPXAPocJKMvuNGSHGBwhUnGZpIURbmFIo4l886g7xFabwAG/+0mYVL+yNdpCs13x892M973jiOux9bX4h65gLAiVV74xjYuKmJpYkn64U5kq4CTgHWmdmRYdrlwLuAPwG/Af7BzAYyK2SeSNnls1Q3Zt20goHB7XV0w8ZNXHD98h3yQLzme/dj65uyH0Y74iYgJ9a8sueoaFNPp9pDEzAfOKki7Q7gSDP7C+B/gYtaXajcUOnxA8Hq3hr39a3GlInjIjXUTVuMS25esUNa0SZ8o3ANwIk1rwANhY2oh3ZehGNm90qaUJH207LD+wn2vHYqifP4mTcv9V29NsRoqJXpRZvwjcIFgANUN6+0qkOuZRFOmwqKDwLXRp2QNB2YDtDTxI1M2paUPX7SoNG4WJ2ACwCnKq20u9e7qU07rNaUNBPYDPRFnTezecA8CPYEbmHRsqdafP8mbOvYPXLEDnMA5enluGNBgwJA0l4EI54JwErg/5jZhoh8W4CHwsPVZja5kec6nUkam9pk0XglnU0wOXy8mRWrc2cIbWyo+P5N0IZmTT6CC364nE1bt/8UI4aJWZOP2Clv1o4FWdOoBjADuMvM5kiaER5fGJFv0MyObvBZToeT1CbbTpN3kk4iqPN/Z2ZV9jDsTKK0sU9eu4zzrl3GuO6R3PH1CxnV4vj+PrJPTqMC4FRgUvj9auAeogWA4wxJqza1qRdJ1xDU99GS1gAXE3j97ALcocD95H4zO6epBWkjorQxAyavuJtP37uAkS+tj7+4ifH9iz6yT0qjAmAfM3sWwMyelbR3TL5dJS0hsJHOMbOFcTcs/GRZB5F0orY8X/eoEewyfBi/G9xU96Y2zZogNrOpEcnfafjGOSZK65q84m7m3D6XUZtfib/Q4/u3BUMKAEl3AvtGnJpZw3N6zGytpIOAxZIeMrPfRGUs9GRZB5F0orYy34aNmxg5oouvnHF0bKddTcVvxwniTiZKG/v0vQuqd/4tju/vxDOkADCzE+LOSXpO0n7h6H8/YF3MPdaGf5+SdA8wkWDVpNOhJJ2orXdCN07Fb7cJ4k4nShsb+9Lz8ReMH19TfH+nuTS6Evgm4Ozw+9nAjZUZJO0paZfw+2jgWOCRBp/rtDlJJ2rTntBtpwniIlAecBDg1BV3szUuWNT48TXF93eaT6NzAHOA6yR9CFgNvBdAUi9wjpl9GPhz4EpJWwkEzhwzcwHQAVSztSedqE17QtdXd7aebdpYXx+bv3YFw23rzpnc7NOWNKQBmNkLZna8mR0S/n0xTF8Sdv6Y2X+b2evN7Kjwb6EnzTqFoXZfShq+Oe0wzx42OkNmzmT4HyM0ra6upnr8OPXjweCcuhhq67ykexEkzZeUtO/nJKAU5C1ute/Wrd75tykeCsKpiyS29qS+2Gn7bLsPeAupDPIWhbtzty2uATh1Uc/uS04HEhXkrRy3/bc1LgCcunBbuwNUD+aWQnx/p7m4CcipC4+34gDx2zqWXD6dtsYFgFM3bmt34rZ1fOAj53PenMU+OGhzXAA4jlM/JfPOzJmBOainhwc+cj5n/fF1DG4KHAI8HEf74nMAbcbCpf0cO2cxB864lWPnLN7mV+84bcu0aYG5Z+tWWLmS87oOr+oi7LQPrgG0ER7IzOkEPBxHfnANoI0YanFVp+JaT2fhLsL5wQVAG1HEkdNQISWc/OEuwvnBBUAbUcSRU1G1nk7Gw3HkB58DaCOSbonYSRRR6ykC7iKcD1wAtBHtuLiqWdsrlvDwzY6THS4A2ox2GjktXNrPBT9czqatwc6c/QODXPDD5UB6XklF1Hocp13wOQAnllk3rdjW+ZfYtNWYddOK1J7h9mLHyQ7XAJxYBgY31ZReL+2k9bQDzTa7OU4JFwCO00b4YkCnlbgJyIllz1Ejakp3GsfdYn1hYCtpSABIeq+kFZK2hhvBx+U7SdLjkp6UNKORZzqt4+J3HcGILu2QNqJLXPyuIzIqUedTdLdYXxjYWhrVAB4G3g3cG5dBUhfwH8A7gMOBqZIOb/C5TguYMnEcl59+1A4TtJeffpSbIppIERcDluMaUGtpaA7AzB4FkFQt2zHAk2b2VJj3B8CpwCONPNtpDbVO0HbyBKakq4BTgHVmdmSY9l5gFvDnwDFmtqSRZxTdLbboGlCracUcwDjgmbLjNWFaJJKmS1oiacn69eubXjgnPQqgvs8HTqpIG1ILroVOdIutxaZfdA2o1QypAUi6E9g34tRMM7sxwTOi1AOLSAtOmM0D5gH09vbG5nPaj2rqe547sBJmdq+kCRVpSbTgmugkt9havZqKrgG1miEFgJmd0OAz1gAHlB3vD6xt8J5OG+LqezySpgPTAXp6ejIuTeuodVDQjuFQOplWrAN4ADhE0oFAP3Am8L4WPNdpMR7XJ56iarb1DAo6SQNqdxp1Az1N0hrgLcCtkhaF6WMl3QZgZpuBjwGLgEeB68wsvVgCTtvgceCdStym3940JADM7AYz29/MdjGzfczsxDB9rZmdXJbvNjP7MzM72MxmN1popz3pxAlMpzF8UNDeeCgIJ1U6WX2XdA0wCRgdar4XAy8C/w6MIdCCl5UGQo7b9NsdFwCOkxAzmxpz6oaWFiRndPKgIO94LCDHcZyCkjsNoJNXmnYa/ls5TnuTKwHgoXLzg/9WjtP+5MoE5IGi8oP/Vo7T/uRKAPhK0/zgv5XjtD+5EgC+qCQ/+G/lOO1PrgSALyrJD/5bOU77k6tJYF9Ukh/8t3Kc9idXAgB8UUme8N/KcdqbXJmAHMdxnPRwAeA4jlNQcmcCchync/DV4tniAsBxnEzw1eLZ4yYgx3EywVeLZ48LAMdxMsFXi2ePCwDHcTLBV4tnjwsAx3EywVeLZ0+jm8K/V9IKSVsl9VbJt1LSQ5KWSVrSyDMdx+kMfA/p7GnUC+hh4N3AlQnyHmdmzzf4PMdxOghfLZ4tDQkAM3sUQFI6pXEcx3FaRqvWARjwU0kGXGlm8+IySpoOTAfo6elpUfGcevBFPI6Tb4YUAJLuBPaNODXTzG5M+JxjzWytpL2BOyQ9Zmb3RmUMhcM8gN7eXkt4f6fF+CIex8k/QwoAMzuh0YeY2drw7zpJNwDHAJECwMkH1RbxuABwnHzQdDdQSbtJenXpO/B2gsljJ8f4Ih7HyT+NuoGeJmkN8BbgVkmLwvSxkm4Ls+0D/EzScuCXwK1mdnsjz3WyxxfxOE7+adQL6Abghoj0tcDJ4fengKMaeY7Tflxw4qE7zAGAL+JxnLzhK4GduijiIh5JV0laJ+nhsrS9JN0h6Ynw755ZltFxasHDQTt1U8BFPPOBucCCsrQZwF1mNkfSjPD4wgzK5jg14xqA4yQkdF1+sSL5VODq8PvVwJSGH9TXBxMmwLBhwd++voZv6ThRuAbgOI2xj5k9C2Bmz4ZrXXYi8QLHvj6YPh02bgyOV60KjgGmTUux2I7jGkBHsHBpP8fOWcyBM27l2DmLWbi0P+siORWY2Twz6zWz3jFjxsRnnDlze+dfYuPGIN1xUsY1gJzjK3Iz5zlJ+4Wj//2AdQ3dbfXq2tIdpwFcA8g5vq1e5twEnB1+PxtIGh4lmjjzkMfFcpqAC4Cc4ytyW4eka4D/AQ6VtEbSh4A5wNskPQG8LTyun9mzYdSoHdNGjQrSHSdl3ASUc8Z2j6Q/orP3FbnpY2ZTY04dn9pDShO9M2cGZp+enqDz9wlgpwm4BpBzfFu9DmTaNFi5ErZuDf565+80CdcAck5potfj8juOUysuADqAAq7IdRwnBdwE5DiOU1BcADiO4xQUFwCO4zgFxQWA4zhOQXEB4DiOU1BcADiO4xQUmVnWZYhF0npg1RDZRgPPt6A4WdCp79Yu7zXezKqE5mwOCet1VrTLb9MonfAe9b5D4nrd1gIgCZKWmFlv1uVoBp36bp36Xp1Ap/w2nfAerXgHNwE5juMUFBcAjuM4BaUTBMC8rAvQRDr13Tr1vTqBTvltOuE9mv4OuZ8DcBzHceqjEzQAx3Ecpw5cADiO4xSUXAkASVdJWifp4bK0vSTdIemJ8O+eWZaxHmLe63JJj0n6taQbJHVnWcZ6iXq3snPnSzJJo7MoW9GRdICkuyU9KmmFpE+E6blrU5K6JC2VdEt4fKCkX4TvcK2kV2VdxmpI6pZ0fdjmH5X0llb8DrkSAMB84KSKtBnAXWZ2CHBXeJw35rPze90BHGlmfwH8L3BRqwuVEvPZ+d2QdADBHrqrW10gZxubgU+Z2Z8Dfwn8o6TDyWeb+gTwaNnxF4CvhO+wAfhQJqVKzteA283sMOAogndp/u9gZrn6ABOAh8uOHwf2C7/vBzyedRnTeK+Kc6cBfVmXMc13A64PK/pKYHTWZfSPAdxIIJRz1aaA/cMO8q3ALYAIVtAOD8+/BViUdTmrlP81wNOETjll6U3/HfKmAUSxj5k9CxD+3Tvj8jSDDwI/yboQaSFpMtBvZsuzLosTIGkCMBH4BflrU18FPg1sDY9fCwyY2ebweA3QzlvmHQSsB74bmrG+LWk3WvA7dIIA6GgkzSRQ1fuyLksaSBoFzAQ+k3VZnABJuwM/As4zs5eyLk8tSDoFWGdmD5YnR2RtZ3/34cAbgG+Y2UTgZVpkdusEAfCcpP0Awr/rMi5Pakg6GzgFmGahHtgBHAwcCCyXtJJAff+VpH0zLVVBkTSCoPPvM7Mfh8l5alPHApPDuvQDAjPQV4FuSaU9z/cH1mZTvESsAdaY2S/C4+sJBELTf4dOEAA3AWeH388msGPmHkknARcCk81sY9blSQsze8jM9jazCWY2gaDyv8HMfptx0QqHJAHfAR41sy+XncpNmzKzi8xs/7AunQksNrNpwN3A6WG2dn+H3wLPSDo0TDoeeIQW/A65Wgks6RpgEkGY1OeAi4GFwHVAD4FHyXvN7MWsylgPMe91EbAL8EKY7X4zOyeTAjZA1LuZ2XfKzq8Ees0s76F7c4ekvwbuAx5iu/38nwnmAXLXpiRNAs43s1MkHUSgEewFLAX+3sxeybJ81ZB0NPBt4FXAU8A/EAzQm/o75EoAOI7jOOnRCSYgx3Ecpw5cADiO4xQUFwCO4zgFxQWA4zhOQXEB4DiOU1BcADiO4xQUFwCO4zgF5f8DK5YFe7irEx4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fitAndEvaluate(x,y,grid)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Baseline with outlier removed and using days after release (19th July)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df = pd.read_feather('../data/basemodel_cumsum_outlier_removed_days_after_release.feather')\n",
    "\n",
    "x = df[['popularity']]\n",
    "y = df[['log_all_streams_cumsum']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best model: Pipeline(memory=None,\n",
      "     steps=[('polynomialfeatures', PolynomialFeatures(degree=2, include_bias=True, interaction_only=False)), ('linearregression', LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False))])\n",
      "RMSE: 5.79525484445616\n",
      "Rsq: 0.5770137357378432\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fitAndEvaluate(x,y,grid)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "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.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "384px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  },
  "widgets": {
   "state": {},
   "version": "1.1.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
