{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import datetime as dt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from matplotlib import pyplot as plt\n",
    "from alphamind.api import *\n",
    "from PyFin.api import *\n",
    "\n",
    "plt.style.use('ggplot')\n",
    "engine = SqlEngine('postgres+psycopg2://postgres:A12345678!@10.63.6.220/alpha')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "u_name = 'zz500'\n",
    "benchmark = 905\n",
    "universe = Universe(u_name, [u_name])\n",
    "factor_coverage = engine.fetch_factor_coverage()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "flitered_coverage = factor_coverage[((factor_coverage.source == 'uqer'))\n",
    "                                    & (factor_coverage.universe == u_name) \n",
    "                                    & (factor_coverage.trade_date >= '2012-01-01')]\n",
    "coverage_report = flitered_coverage.groupby(['factor'])['coverage'].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# alpha_factors = coverage_report[coverage_report >= 0.99].index.tolist()\n",
    "\n",
    "# alpha_factors = {\n",
    "#     f: DIFF(f) / (ABS(f) + 1e-4) / (DIFF('closePrice') / (LAST('closePrice') + 1e-4))\n",
    "#         for f in alpha_factors if f != 'SIZE'\n",
    "# }\n",
    "\n",
    "alpha_factors = {\n",
    "    'eps': LAST('eps_q'),\n",
    "    'roe': LAST('roe_q'),\n",
    "    'bdto': LAST('BDTO'),\n",
    "    'cfinc1': LAST('CFinc1'),\n",
    "    'chv': LAST('CHV'),\n",
    "    'rvol': LAST('RVOL'),\n",
    "    'val': LAST('VAL'),\n",
    "    'grev': LAST('GREV'),\n",
    "    'droeafternonorecurring': LAST('DROEAfterNonRecurring')\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "alpha_factors.__len__()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "frequency = '2w'\n",
    "batch = 8\n",
    "start_date = '2012-01-01'\n",
    "end_date = '2017-11-05'\n",
    "method = 'risk_neutral'\n",
    "portfolio_risk_neutralize = ['SIZE']\n",
    "neutralize_risk = industry_styles + portfolio_risk_neutralize\n",
    "industry_lower = 1.\n",
    "industry_upper = 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-08 10:51:56,191 - ALPHA_MIND - INFO - Starting data package fetching ...\n",
      "2017-11-08 10:52:10,422 - ALPHA_MIND - INFO - Loading data is finished\n",
      "2017-11-08 10:52:10,892 - ALPHA_MIND - INFO - Data processing is finished\n"
     ]
    }
   ],
   "source": [
    "data_package = fetch_data_package(engine,\n",
    "                                  alpha_factors=alpha_factors,\n",
    "                                  start_date=start_date,\n",
    "                                  end_date=end_date,\n",
    "                                  frequency=frequency,\n",
    "                                  universe=universe,\n",
    "                                  benchmark=benchmark,\n",
    "                                  batch=batch,\n",
    "                                  neutralized_risk=neutralize_risk,\n",
    "                                  pre_process=[winsorize_normal],\n",
    "                                  post_process=[winsorize_normal],\n",
    "                                  warm_start=batch)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train_x = data_package['train']['x']\n",
    "train_y = data_package['train']['y']\n",
    "\n",
    "predict_x = data_package['predict']['x']\n",
    "predict_y = data_package['predict']['y']\n",
    "\n",
    "features = data_package['x_names']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def plot_model_importance(model, features):\n",
    "    features = np.array(features)\n",
    "    n_features = len(features)\n",
    "    features_importance = model.feature_importances_\n",
    "    order = features_importance.argsort().argsort()\n",
    "    features = features[order >= n_features - 10]\n",
    "    features_importance = features_importance[order >= n_features - 10]\n",
    "    n_features = len(features)\n",
    "    plt.figure(figsize=(12, 6))\n",
    "    plt.barh(range(n_features), features_importance, align='center')\n",
    "    plt.yticks(np.arange(n_features), features)\n",
    "    plt.xlabel('Feature importance')\n",
    "    plt.ylabel('Feature')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0. Train Score on a specific date\n",
    "------------------------------------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "ref_date = list(train_x.keys())[-2]\n",
    "sample_train_x = train_x[ref_date]\n",
    "sample_train_y = train_y[ref_date].flatten()\n",
    "\n",
    "sample_test_x = predict_x[ref_date]\n",
    "sample_test_y = predict_y[ref_date].flatten()\n",
    "\n",
    "n_estimators = 500\n",
    "max_depth = 3\n",
    "min_samples_split = 5\n",
    "min_samples_leaf = 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.030324457573076891"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = RandomForestRegressor(n_estimators=n_estimators,\n",
    "                              max_depth=max_depth,\n",
    "                              min_samples_split=min_samples_split,\n",
    "                              min_samples_leaf=min_samples_leaf,\n",
    "                              n_jobs=-1,\n",
    "                              max_features='log2')\n",
    "model.fit(sample_train_x, sample_train_y)\n",
    "model.score(sample_train_x, sample_train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.2479160163384273"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.score(sample_test_x, sample_test_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nfO1ocnKyHA6HUlJStGbNGtXV1am4uFj79+9Xz549/dqn6RrT1++++065ubn61a9+paSkJN/4+vp6\n3xpzj8ejjRs3qkuXLk12TM1FY3pbXl4ur9crSTp48KD279+v9u3bKzo6Wq1bt9bOnTtlWZZWrlzJ\nOXsOfZUkr9erdevWNQg8nLP+9fV0+vfvr88//1yVlZWqrKzU559/rv79+3O+/p/G9Nbj8ejxxx/X\noEGDdPnllzd47ciRI5Lk+64q56z/fa2srPQtqSovL9eOHTvUuXNnORwOJScna926dZKOX32wpZ2z\ngfjb6FT/VGrp5+v3ceNRnNGmTZu0ePFieb1eDR06VDfccINeeeUV9ejRQykpKaqtrdXs2bP11Vdf\nKSIiQuPGjfOtdV66dKk+/PBDOZ1OjRgxQgMGDDjtPlua8+3r66+/rjfeeKPBzM7vfvc7tWrVSg89\n9JDq6+vl9XrVt29f3Xbbbb5lGC3J+fZ23bp1WrJkiUJCQuR0OvVf//Vfvl84BQUFmjt3rmpra9W/\nf3/dfvvtLW4pZmN+Fmzbtk1/+ctflJOT49tfTU0N56zO3tfdu3fr8ccf13fffafQ0FBFRUVp1qxZ\nkqQPPvhAf//73yUdvyz10KFDJXG+nnC+vV25cqXmzZunzp07+/Z14nK+Dz/8sC+o/+hHP9Jdd92l\n8PDwYB1iUJxvX3fs2KH58+fL6XTK6/Vq2LBh+tnPfibp+D+ZfnhZ6u9/P7UlaMzPguLiYk2ZMkXz\n5s1r8DOU8/X/EXgAAAAAGKtl/SsNAAAAQItC4AEAAABgLAIPAAAAAGMReAAAAAAYi8ADAAAAwFgE\nHgAAbDZ//ny99tprwS4DAFokLksNAGi2srKyVFZW1uDeEk899VSj7sS+bds2PfPMM3r22WcDUeIF\nZ86cOYqNjdXNN98c7FIAoEm4gl0AAABnMmnSJPXr1y/YZfjU19crJCQk2GWcF6/XG+wSAKDJEXgA\nABeknTt36k9/+pP27duniy++WCNGjFBycrIk6cMPP9SyZctUWlqqyMhIXXfddbryyitVU1OjP/7x\nj/J4PBo+fLik4zNGf/3rXxvMevxwFigrK0tXXnmlVq1apaKiIr300ks6evSoFi5cqPz8fIWHh2vY\nsGG6+uqrT1nr92dVTuz7qquu0ltvvSWn06k777xTLpdLixcvVnl5uf7zP/9TN9xwgyRpyZIlKiws\nlNPp1GeffaaOHTvqN7/5jbp16yZJ2rdvn55//nnt3btXMTExuuWWW5SSkuL73LCwMJWUlGj79u26\n7bbbtGrVKknSP/7xDyUnJ2vy5Ml644039P777+vo0aOKjY3Vr371K6WmpkqSVqxYoffff1+9evXS\nhx9+qDZt2ujOO+/UgAEDJEmVlZX605/+pM8//1y1tbXq3bu3Jk6cKEnauHGj/va3v+nQoUPq3Lmz\nRo0apR/96EcBPQ8A4GwIPACAC87hw4eVm5ur0aNHq3///tq6datmzpypJ598UpGRkWrXrp0mTZqk\n9u3bKz8/X3/84x/Vo0cPJSQk6IEHHjivJW2rV6/W5MmTFRkZKYfDoenTp2vgwIEaN26cSktLNW3a\nNMXHx6t///5n3VdZWZnq6ur07LPPasWKFXruuefUr18/5ebmqqSkRJMnT1ZGRobat28vSfr00081\nduxYjRkzRsuXL9djjz2mp556SpI0ffp0DR06VL/73e/05ZdfasaMGcrNzVV8fLwkadWqVbr//vs1\nadIkeTwe7dix46Qlbe3bt9fDDz+sqKgorVu3Ts8884yefvppRUdHS5J2796twYMH64UXXlBeXp6e\nffZZPfvss3I4HHrmmWcUHh6umTNnKjw8XDt37pQk7dmzR/PmzdOkSZPUo0cPrVy5UjNmzNCTTz6p\n0NDQc+o9ADQGFy0AADRrjz32mEaMGKERI0ZoxowZkqSVK1dqwIABuvTSS+V0OtWvXz/16NFDmzZt\nkiRdeuml6tChgxwOh/r06aN+/frpyy+/bFQdV111ldxut8LCwlRQUKDy8nLddNNNcrlcat++vX7+\n859rzZo1fu0rJCREN9xwg1wulzIyMlRRUaGrr75arVu3VpcuXdS5c2d9/fXXvvEJCQlKS0uTy+XS\nNddco7q6Ou3atUu7du1STU2Nrr/+erlcLl1yySW69NJLfbM4kjRw4EAlJSXJ6XQqLCzslPVcfvnl\niomJkdPpVHp6ujp06KDdu3f7Xne73crMzJTT6dTgwYN15MgRHT16VEeOHNHmzZs1atQoRUREyOVy\nqU+fPpKk999/X5mZmerVq5ecTqeGDBkil8ulXbt2nU/7AeC8McMDAGjWsrOzT/oOT0lJidatW6eN\nGzf6ttXX1/uWtH322Wd67bXXVFRUJMuydOzYMXXt2rVRdbjdbt/jQ4cO6ciRIxoxYoRvm9frVe/e\nvf3aV9u2bX0XYjgRQtq1a+d7PSwsTDU1Nb7nsbGxvsdOp1OxsbE6cuSIr67vX9Th4osv1uHDh0/5\n3tP56KOP9Pbbb+vQoUOSpJqaGlVUVPhej4qK8j1u1aqVb0xlZaUiIiIUERFx0j5LSkr00Ucf6d13\n3/Vt83g8DWoDgKZA4AEAXHBiY2N1xRVX6O677z7ptbq6Os2cOVOjR49WSkqKXC6Xb2ZIkhwOx0nv\nadWqlY4dO+Z7XlZWdsbPd7vdiouL09NPP92Io/BfaWmp77HX61VpaalvuVlJSYm8Xq8v9JSUlKhj\nx46+8T883h8+P3TokJ577jn9/ve/V2JiopxOp7Kzs+XPRVxjY2NVWVmp7777ThdddNFJr91www2+\n7yIBQLCwpA0AcMG54oortHHjRm3evFler1e1tbXatm2bSktL5fF4VFdXp8jISIWEhOizzz7TF198\n4Xtvu3btVFFRoaqqKt+2bt266bPPPlNlZaXKysq0fPnyM35+z5491bp1a73xxhuqra2V1+vVN998\n02AZWCDt2bNHn3zyierr67V8+XKFhoaqV69e6tWrl8LDw7Vs2TJ5PB5t27ZNGzduVEZGxmn31a5d\nOx08eND3/NixY3I4HIqMjJR0/IIPhYWFftUVHR2t/v376/nnn1dlZaU8Ho+2b98uSfr5z3+uf/3r\nX9q1a5csy1JNTY02bdqk6urqRnQCAM4dMzwAgAuO2+3WxIkT9ec//1lPPfWUnE6nevbsqVGjRql1\n69YaOXKknnjiCdXV1emyyy7zXbVMkjp16qSMjAyNHj1aXq9Xs2bN0qBBg7RlyxZlZWXp4osv1pAh\nQ/T222+f9vOdTqcmTZqkP/3pT8rKypLH41F8fLx++ctf2nK8KSkpWrNmjebMmaMOHTrovvvuk8t1\n/Ff4xIkT9fzzz+vvf/+7YmJiNHr0aHXq1Om0+/rZz36mWbNmacSIEerTp48mTpyoa665Rg8++KCc\nTqcGDRqkH//4x37XNmbMGL344osaP368PB6PkpOT1adPH/Xo0UO//vWvtXDhQu3fv19hYWFKSkry\ne9kfAAQKNx4FAKAZW7JkiQ4cOKB777032KUAwAWJJW0AAAAAjEXgAQAAAGAslrQBAAAAMBYzPAAA\nAACMReABAAAAYCwCDwAAAABjEXgAAAAAGIvAAwAAAMBYBB4AAAAAxvpfpSHK6mUJ4pUAAAAASUVO\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x168e8e23c88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_model_importance(model, features)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Train and test accuracy trend （Random Forest）\n",
    "----------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dates = sorted(train_x.keys())\n",
    "accuray_table = pd.DataFrame(columns=['train', 'test'])\n",
    "model_df = pd.Series()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-08 10:52:12,947 - ALPHA_MIND - INFO - trade_date: 2012-02-20 00:00:00 training finished\n",
      "2017-11-08 10:52:13,621 - ALPHA_MIND - INFO - trade_date: 2012-03-05 00:00:00 training finished\n",
      "2017-11-08 10:52:14,300 - ALPHA_MIND - INFO - trade_date: 2012-03-19 00:00:00 training finished\n",
      "2017-11-08 10:52:14,967 - ALPHA_MIND - INFO - trade_date: 2012-04-05 00:00:00 training finished\n",
      "2017-11-08 10:52:15,625 - ALPHA_MIND - INFO - trade_date: 2012-04-16 00:00:00 training finished\n",
      "2017-11-08 10:52:16,288 - ALPHA_MIND - INFO - trade_date: 2012-05-02 00:00:00 training finished\n",
      "2017-11-08 10:52:16,945 - ALPHA_MIND - INFO - trade_date: 2012-05-14 00:00:00 training finished\n",
      "2017-11-08 10:52:17,614 - ALPHA_MIND - INFO - trade_date: 2012-05-28 00:00:00 training finished\n",
      "2017-11-08 10:52:18,281 - ALPHA_MIND - INFO - trade_date: 2012-06-11 00:00:00 training finished\n",
      "2017-11-08 10:52:18,941 - ALPHA_MIND - INFO - trade_date: 2012-06-25 00:00:00 training finished\n",
      "2017-11-08 10:52:19,721 - ALPHA_MIND - INFO - trade_date: 2012-07-09 00:00:00 training finished\n",
      "2017-11-08 10:52:20,498 - ALPHA_MIND - INFO - trade_date: 2012-07-23 00:00:00 training finished\n",
      "2017-11-08 10:52:21,155 - ALPHA_MIND - INFO - trade_date: 2012-08-06 00:00:00 training finished\n",
      "2017-11-08 10:52:21,838 - ALPHA_MIND - INFO - trade_date: 2012-08-20 00:00:00 training finished\n",
      "2017-11-08 10:52:22,525 - ALPHA_MIND - INFO - trade_date: 2012-09-03 00:00:00 training finished\n",
      "2017-11-08 10:52:23,186 - ALPHA_MIND - INFO - trade_date: 2012-09-17 00:00:00 training finished\n",
      "2017-11-08 10:52:23,887 - ALPHA_MIND - INFO - trade_date: 2012-10-08 00:00:00 training finished\n",
      "2017-11-08 10:52:24,552 - ALPHA_MIND - INFO - trade_date: 2012-10-15 00:00:00 training finished\n",
      "2017-11-08 10:52:25,235 - ALPHA_MIND - INFO - trade_date: 2012-10-29 00:00:00 training finished\n",
      "2017-11-08 10:52:25,919 - ALPHA_MIND - INFO - trade_date: 2012-11-12 00:00:00 training finished\n",
      "2017-11-08 10:52:26,588 - ALPHA_MIND - INFO - trade_date: 2012-11-26 00:00:00 training finished\n",
      "2017-11-08 10:52:27,252 - ALPHA_MIND - INFO - trade_date: 2012-12-10 00:00:00 training finished\n",
      "2017-11-08 10:52:27,948 - ALPHA_MIND - INFO - trade_date: 2012-12-24 00:00:00 training finished\n",
      "2017-11-08 10:52:28,658 - ALPHA_MIND - INFO - trade_date: 2013-01-07 00:00:00 training finished\n",
      "2017-11-08 10:52:29,320 - ALPHA_MIND - INFO - trade_date: 2013-01-21 00:00:00 training finished\n",
      "2017-11-08 10:52:29,999 - ALPHA_MIND - INFO - trade_date: 2013-02-04 00:00:00 training finished\n",
      "2017-11-08 10:52:30,657 - ALPHA_MIND - INFO - trade_date: 2013-02-18 00:00:00 training finished\n",
      "2017-11-08 10:52:31,316 - ALPHA_MIND - INFO - trade_date: 2013-03-04 00:00:00 training finished\n",
      "2017-11-08 10:52:31,976 - ALPHA_MIND - INFO - trade_date: 2013-03-18 00:00:00 training finished\n",
      "2017-11-08 10:52:32,635 - ALPHA_MIND - INFO - trade_date: 2013-04-01 00:00:00 training finished\n",
      "2017-11-08 10:52:33,332 - ALPHA_MIND - INFO - trade_date: 2013-04-15 00:00:00 training finished\n",
      "2017-11-08 10:52:33,993 - ALPHA_MIND - INFO - trade_date: 2013-05-02 00:00:00 training finished\n",
      "2017-11-08 10:52:34,650 - ALPHA_MIND - INFO - trade_date: 2013-05-13 00:00:00 training finished\n",
      "2017-11-08 10:52:35,318 - ALPHA_MIND - INFO - trade_date: 2013-05-27 00:00:00 training finished\n",
      "2017-11-08 10:52:35,983 - ALPHA_MIND - INFO - trade_date: 2013-06-13 00:00:00 training finished\n",
      "2017-11-08 10:52:36,670 - ALPHA_MIND - INFO - trade_date: 2013-06-24 00:00:00 training finished\n",
      "2017-11-08 10:52:37,495 - ALPHA_MIND - INFO - trade_date: 2013-07-08 00:00:00 training finished\n",
      "2017-11-08 10:52:38,156 - ALPHA_MIND - INFO - trade_date: 2013-07-22 00:00:00 training finished\n",
      "2017-11-08 10:52:38,825 - ALPHA_MIND - INFO - trade_date: 2013-08-05 00:00:00 training finished\n",
      "2017-11-08 10:52:39,494 - ALPHA_MIND - INFO - trade_date: 2013-08-19 00:00:00 training finished\n",
      "2017-11-08 10:52:40,163 - ALPHA_MIND - INFO - trade_date: 2013-09-02 00:00:00 training finished\n",
      "2017-11-08 10:52:40,859 - ALPHA_MIND - INFO - trade_date: 2013-09-16 00:00:00 training finished\n",
      "2017-11-08 10:52:41,560 - ALPHA_MIND - INFO - trade_date: 2013-09-30 00:00:00 training finished\n",
      "2017-11-08 10:52:42,242 - ALPHA_MIND - INFO - trade_date: 2013-10-14 00:00:00 training finished\n",
      "2017-11-08 10:52:42,920 - ALPHA_MIND - INFO - trade_date: 2013-10-28 00:00:00 training finished\n",
      "2017-11-08 10:52:43,796 - ALPHA_MIND - INFO - trade_date: 2013-11-11 00:00:00 training finished\n",
      "2017-11-08 10:52:44,567 - ALPHA_MIND - INFO - trade_date: 2013-11-25 00:00:00 training finished\n",
      "2017-11-08 10:52:45,232 - ALPHA_MIND - INFO - trade_date: 2013-12-09 00:00:00 training finished\n",
      "2017-11-08 10:52:45,902 - ALPHA_MIND - INFO - trade_date: 2013-12-23 00:00:00 training finished\n",
      "2017-11-08 10:52:46,574 - ALPHA_MIND - INFO - trade_date: 2014-01-06 00:00:00 training finished\n",
      "2017-11-08 10:52:47,254 - ALPHA_MIND - INFO - trade_date: 2014-01-20 00:00:00 training finished\n",
      "2017-11-08 10:52:47,917 - ALPHA_MIND - INFO - trade_date: 2014-02-07 00:00:00 training finished\n",
      "2017-11-08 10:52:48,581 - ALPHA_MIND - INFO - trade_date: 2014-02-17 00:00:00 training finished\n",
      "2017-11-08 10:52:49,244 - ALPHA_MIND - INFO - trade_date: 2014-03-03 00:00:00 training finished\n",
      "2017-11-08 10:52:49,909 - ALPHA_MIND - INFO - trade_date: 2014-03-17 00:00:00 training finished\n",
      "2017-11-08 10:52:50,572 - ALPHA_MIND - INFO - trade_date: 2014-03-31 00:00:00 training finished\n",
      "2017-11-08 10:52:51,244 - ALPHA_MIND - INFO - trade_date: 2014-04-14 00:00:00 training finished\n",
      "2017-11-08 10:52:51,909 - ALPHA_MIND - INFO - trade_date: 2014-04-28 00:00:00 training finished\n",
      "2017-11-08 10:52:52,570 - ALPHA_MIND - INFO - trade_date: 2014-05-12 00:00:00 training finished\n",
      "2017-11-08 10:52:53,244 - ALPHA_MIND - INFO - trade_date: 2014-05-26 00:00:00 training finished\n",
      "2017-11-08 10:52:53,911 - ALPHA_MIND - INFO - trade_date: 2014-06-09 00:00:00 training finished\n",
      "2017-11-08 10:52:54,603 - ALPHA_MIND - INFO - trade_date: 2014-06-23 00:00:00 training finished\n",
      "2017-11-08 10:52:55,282 - ALPHA_MIND - INFO - trade_date: 2014-07-07 00:00:00 training finished\n",
      "2017-11-08 10:52:56,000 - ALPHA_MIND - INFO - trade_date: 2014-07-21 00:00:00 training finished\n",
      "2017-11-08 10:52:56,903 - ALPHA_MIND - INFO - trade_date: 2014-08-04 00:00:00 training finished\n",
      "2017-11-08 10:52:57,621 - ALPHA_MIND - INFO - trade_date: 2014-08-18 00:00:00 training finished\n",
      "2017-11-08 10:52:58,314 - ALPHA_MIND - INFO - trade_date: 2014-09-01 00:00:00 training finished\n",
      "2017-11-08 10:52:59,100 - ALPHA_MIND - INFO - trade_date: 2014-09-15 00:00:00 training finished\n",
      "2017-11-08 10:52:59,774 - ALPHA_MIND - INFO - trade_date: 2014-09-29 00:00:00 training finished\n",
      "2017-11-08 10:53:00,434 - ALPHA_MIND - INFO - trade_date: 2014-10-13 00:00:00 training finished\n",
      "2017-11-08 10:53:01,102 - ALPHA_MIND - INFO - trade_date: 2014-10-27 00:00:00 training finished\n",
      "2017-11-08 10:53:01,775 - ALPHA_MIND - INFO - trade_date: 2014-11-10 00:00:00 training finished\n",
      "2017-11-08 10:53:02,475 - ALPHA_MIND - INFO - trade_date: 2014-11-24 00:00:00 training finished\n",
      "2017-11-08 10:53:03,141 - ALPHA_MIND - INFO - trade_date: 2014-12-08 00:00:00 training finished\n",
      "2017-11-08 10:53:03,809 - ALPHA_MIND - INFO - trade_date: 2014-12-22 00:00:00 training finished\n",
      "2017-11-08 10:53:04,494 - ALPHA_MIND - INFO - trade_date: 2015-01-05 00:00:00 training finished\n",
      "2017-11-08 10:53:05,160 - ALPHA_MIND - INFO - trade_date: 2015-01-19 00:00:00 training finished\n",
      "2017-11-08 10:53:05,850 - ALPHA_MIND - INFO - trade_date: 2015-02-02 00:00:00 training finished\n",
      "2017-11-08 10:53:06,528 - ALPHA_MIND - INFO - trade_date: 2015-02-16 00:00:00 training finished\n",
      "2017-11-08 10:53:07,189 - ALPHA_MIND - INFO - trade_date: 2015-03-02 00:00:00 training finished\n",
      "2017-11-08 10:53:07,858 - ALPHA_MIND - INFO - trade_date: 2015-03-16 00:00:00 training finished\n",
      "2017-11-08 10:53:08,546 - ALPHA_MIND - INFO - trade_date: 2015-03-30 00:00:00 training finished\n",
      "2017-11-08 10:53:09,212 - ALPHA_MIND - INFO - trade_date: 2015-04-13 00:00:00 training finished\n",
      "2017-11-08 10:53:09,895 - ALPHA_MIND - INFO - trade_date: 2015-04-27 00:00:00 training finished\n",
      "2017-11-08 10:53:10,573 - ALPHA_MIND - INFO - trade_date: 2015-05-11 00:00:00 training finished\n",
      "2017-11-08 10:53:11,236 - ALPHA_MIND - INFO - trade_date: 2015-05-25 00:00:00 training finished\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-08 10:53:11,897 - ALPHA_MIND - INFO - trade_date: 2015-06-08 00:00:00 training finished\n",
      "2017-11-08 10:53:12,561 - ALPHA_MIND - INFO - trade_date: 2015-06-23 00:00:00 training finished\n",
      "2017-11-08 10:53:13,224 - ALPHA_MIND - INFO - trade_date: 2015-07-06 00:00:00 training finished\n",
      "2017-11-08 10:53:13,884 - ALPHA_MIND - INFO - trade_date: 2015-07-20 00:00:00 training finished\n",
      "2017-11-08 10:53:14,546 - ALPHA_MIND - INFO - trade_date: 2015-08-03 00:00:00 training finished\n",
      "2017-11-08 10:53:15,206 - ALPHA_MIND - INFO - trade_date: 2015-08-17 00:00:00 training finished\n",
      "2017-11-08 10:53:15,867 - ALPHA_MIND - INFO - trade_date: 2015-08-31 00:00:00 training finished\n",
      "2017-11-08 10:53:16,536 - ALPHA_MIND - INFO - trade_date: 2015-09-14 00:00:00 training finished\n",
      "2017-11-08 10:53:17,199 - ALPHA_MIND - INFO - trade_date: 2015-09-28 00:00:00 training finished\n",
      "2017-11-08 10:53:17,862 - ALPHA_MIND - INFO - trade_date: 2015-10-12 00:00:00 training finished\n",
      "2017-11-08 10:53:18,523 - ALPHA_MIND - INFO - trade_date: 2015-10-26 00:00:00 training finished\n",
      "2017-11-08 10:53:19,191 - ALPHA_MIND - INFO - trade_date: 2015-11-09 00:00:00 training finished\n",
      "2017-11-08 10:53:19,864 - ALPHA_MIND - INFO - trade_date: 2015-11-23 00:00:00 training finished\n",
      "2017-11-08 10:53:20,531 - ALPHA_MIND - INFO - trade_date: 2015-12-07 00:00:00 training finished\n",
      "2017-11-08 10:53:21,192 - ALPHA_MIND - INFO - trade_date: 2015-12-21 00:00:00 training finished\n",
      "2017-11-08 10:53:21,854 - ALPHA_MIND - INFO - trade_date: 2016-01-04 00:00:00 training finished\n",
      "2017-11-08 10:53:22,519 - ALPHA_MIND - INFO - trade_date: 2016-01-18 00:00:00 training finished\n",
      "2017-11-08 10:53:23,181 - ALPHA_MIND - INFO - trade_date: 2016-02-01 00:00:00 training finished\n",
      "2017-11-08 10:53:23,838 - ALPHA_MIND - INFO - trade_date: 2016-02-15 00:00:00 training finished\n",
      "2017-11-08 10:53:24,504 - ALPHA_MIND - INFO - trade_date: 2016-02-29 00:00:00 training finished\n",
      "2017-11-08 10:53:25,167 - ALPHA_MIND - INFO - trade_date: 2016-03-14 00:00:00 training finished\n",
      "2017-11-08 10:53:25,830 - ALPHA_MIND - INFO - trade_date: 2016-03-28 00:00:00 training finished\n",
      "2017-11-08 10:53:26,491 - ALPHA_MIND - INFO - trade_date: 2016-04-11 00:00:00 training finished\n",
      "2017-11-08 10:53:27,152 - ALPHA_MIND - INFO - trade_date: 2016-04-25 00:00:00 training finished\n",
      "2017-11-08 10:53:27,811 - ALPHA_MIND - INFO - trade_date: 2016-05-09 00:00:00 training finished\n",
      "2017-11-08 10:53:28,478 - ALPHA_MIND - INFO - trade_date: 2016-05-23 00:00:00 training finished\n",
      "2017-11-08 10:53:29,141 - ALPHA_MIND - INFO - trade_date: 2016-06-06 00:00:00 training finished\n",
      "2017-11-08 10:53:29,805 - ALPHA_MIND - INFO - trade_date: 2016-06-20 00:00:00 training finished\n",
      "2017-11-08 10:53:30,547 - ALPHA_MIND - INFO - trade_date: 2016-07-04 00:00:00 training finished\n",
      "2017-11-08 10:53:31,207 - ALPHA_MIND - INFO - trade_date: 2016-07-18 00:00:00 training finished\n",
      "2017-11-08 10:53:31,868 - ALPHA_MIND - INFO - trade_date: 2016-08-01 00:00:00 training finished\n",
      "2017-11-08 10:53:32,532 - ALPHA_MIND - INFO - trade_date: 2016-08-15 00:00:00 training finished\n",
      "2017-11-08 10:53:33,193 - ALPHA_MIND - INFO - trade_date: 2016-08-29 00:00:00 training finished\n",
      "2017-11-08 10:53:33,853 - ALPHA_MIND - INFO - trade_date: 2016-09-12 00:00:00 training finished\n",
      "2017-11-08 10:53:34,516 - ALPHA_MIND - INFO - trade_date: 2016-09-26 00:00:00 training finished\n",
      "2017-11-08 10:53:35,176 - ALPHA_MIND - INFO - trade_date: 2016-10-10 00:00:00 training finished\n",
      "2017-11-08 10:53:35,841 - ALPHA_MIND - INFO - trade_date: 2016-10-24 00:00:00 training finished\n",
      "2017-11-08 10:53:36,509 - ALPHA_MIND - INFO - trade_date: 2016-11-07 00:00:00 training finished\n",
      "2017-11-08 10:53:37,174 - ALPHA_MIND - INFO - trade_date: 2016-11-21 00:00:00 training finished\n",
      "2017-11-08 10:53:37,835 - ALPHA_MIND - INFO - trade_date: 2016-12-05 00:00:00 training finished\n",
      "2017-11-08 10:53:38,495 - ALPHA_MIND - INFO - trade_date: 2016-12-19 00:00:00 training finished\n",
      "2017-11-08 10:53:39,161 - ALPHA_MIND - INFO - trade_date: 2017-01-03 00:00:00 training finished\n",
      "2017-11-08 10:53:39,823 - ALPHA_MIND - INFO - trade_date: 2017-01-16 00:00:00 training finished\n",
      "2017-11-08 10:53:40,485 - ALPHA_MIND - INFO - trade_date: 2017-02-03 00:00:00 training finished\n",
      "2017-11-08 10:53:41,145 - ALPHA_MIND - INFO - trade_date: 2017-02-13 00:00:00 training finished\n",
      "2017-11-08 10:53:41,807 - ALPHA_MIND - INFO - trade_date: 2017-02-27 00:00:00 training finished\n",
      "2017-11-08 10:53:42,467 - ALPHA_MIND - INFO - trade_date: 2017-03-13 00:00:00 training finished\n",
      "2017-11-08 10:53:43,130 - ALPHA_MIND - INFO - trade_date: 2017-03-27 00:00:00 training finished\n",
      "2017-11-08 10:53:43,787 - ALPHA_MIND - INFO - trade_date: 2017-04-10 00:00:00 training finished\n",
      "2017-11-08 10:53:44,443 - ALPHA_MIND - INFO - trade_date: 2017-04-24 00:00:00 training finished\n",
      "2017-11-08 10:53:45,105 - ALPHA_MIND - INFO - trade_date: 2017-05-08 00:00:00 training finished\n",
      "2017-11-08 10:53:45,765 - ALPHA_MIND - INFO - trade_date: 2017-05-22 00:00:00 training finished\n",
      "2017-11-08 10:53:46,424 - ALPHA_MIND - INFO - trade_date: 2017-06-05 00:00:00 training finished\n",
      "2017-11-08 10:53:47,082 - ALPHA_MIND - INFO - trade_date: 2017-06-19 00:00:00 training finished\n",
      "2017-11-08 10:53:47,740 - ALPHA_MIND - INFO - trade_date: 2017-07-03 00:00:00 training finished\n",
      "2017-11-08 10:53:48,401 - ALPHA_MIND - INFO - trade_date: 2017-07-17 00:00:00 training finished\n",
      "2017-11-08 10:53:49,059 - ALPHA_MIND - INFO - trade_date: 2017-07-31 00:00:00 training finished\n",
      "2017-11-08 10:53:49,720 - ALPHA_MIND - INFO - trade_date: 2017-08-14 00:00:00 training finished\n",
      "2017-11-08 10:53:50,376 - ALPHA_MIND - INFO - trade_date: 2017-08-28 00:00:00 training finished\n",
      "2017-11-08 10:53:51,039 - ALPHA_MIND - INFO - trade_date: 2017-09-11 00:00:00 training finished\n",
      "2017-11-08 10:53:51,697 - ALPHA_MIND - INFO - trade_date: 2017-09-25 00:00:00 training finished\n",
      "2017-11-08 10:53:52,355 - ALPHA_MIND - INFO - trade_date: 2017-10-09 00:00:00 training finished\n",
      "2017-11-08 10:53:53,012 - ALPHA_MIND - INFO - trade_date: 2017-10-23 00:00:00 training finished\n",
      "2017-11-08 10:53:53,671 - ALPHA_MIND - INFO - trade_date: 2017-11-06 00:00:00 training finished\n"
     ]
    }
   ],
   "source": [
    "for ref_date in dates:\n",
    "    sample_train_x = train_x[ref_date]\n",
    "    sample_train_y = train_y[ref_date].flatten()\n",
    "    \n",
    "    model = RandomForestRegressor(n_estimators=n_estimators,\n",
    "                                  max_depth=max_depth,\n",
    "                                  min_samples_split=min_samples_split,\n",
    "                                  min_samples_leaf=min_samples_leaf,\n",
    "                                  n_jobs=-1,\n",
    "                                  max_features='log2')\n",
    "    model.fit(sample_train_x, sample_train_y)\n",
    "    \n",
    "    accuray_table.loc[ref_date, 'train'] = mean_squared_error(model.predict(sample_train_x), sample_train_y)\n",
    "    model_df.loc[ref_date] = model\n",
    "    alpha_logger.info('trade_date: {0} training finished'.format(ref_date))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "portfolio_industry_neutralize = True\n",
    "\n",
    "settlement = data_package['settlement']\n",
    "industry_dummies = pd.get_dummies(settlement['industry'].values)\n",
    "risk_styles = settlement[portfolio_risk_neutralize].values\n",
    "total_risks = settlement[neutralize_risk].values\n",
    "final_res = np.zeros(len(dates))\n",
    "method = 'risk_neutral'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-08 10:53:54,063 - ALPHA_MIND - INFO - trade_date: 2012-02-20 00:00:00 predicting finished\n",
      "2017-11-08 10:53:54,272 - ALPHA_MIND - INFO - trade_date: 2012-03-05 00:00:00 predicting finished\n",
      "2017-11-08 10:53:54,483 - ALPHA_MIND - INFO - trade_date: 2012-03-19 00:00:00 predicting finished\n",
      "2017-11-08 10:53:54,701 - ALPHA_MIND - INFO - trade_date: 2012-04-05 00:00:00 predicting finished\n",
      "2017-11-08 10:53:54,905 - ALPHA_MIND - INFO - trade_date: 2012-04-16 00:00:00 predicting finished\n",
      "2017-11-08 10:53:55,104 - ALPHA_MIND - INFO - trade_date: 2012-05-02 00:00:00 predicting finished\n",
      "2017-11-08 10:53:55,307 - ALPHA_MIND - INFO - trade_date: 2012-05-14 00:00:00 predicting finished\n",
      "2017-11-08 10:53:55,513 - ALPHA_MIND - INFO - trade_date: 2012-05-28 00:00:00 predicting finished\n",
      "2017-11-08 10:53:55,710 - ALPHA_MIND - INFO - trade_date: 2012-06-11 00:00:00 predicting finished\n",
      "2017-11-08 10:53:55,909 - ALPHA_MIND - INFO - trade_date: 2012-06-25 00:00:00 predicting finished\n",
      "2017-11-08 10:53:56,114 - ALPHA_MIND - INFO - trade_date: 2012-07-09 00:00:00 predicting finished\n",
      "2017-11-08 10:53:56,319 - ALPHA_MIND - INFO - trade_date: 2012-07-23 00:00:00 predicting finished\n",
      "2017-11-08 10:53:56,516 - ALPHA_MIND - INFO - trade_date: 2012-08-06 00:00:00 predicting finished\n",
      "2017-11-08 10:53:56,725 - ALPHA_MIND - INFO - trade_date: 2012-08-20 00:00:00 predicting finished\n",
      "2017-11-08 10:53:56,930 - ALPHA_MIND - INFO - trade_date: 2012-09-03 00:00:00 predicting finished\n",
      "2017-11-08 10:53:57,131 - ALPHA_MIND - INFO - trade_date: 2012-09-17 00:00:00 predicting finished\n",
      "2017-11-08 10:53:57,332 - ALPHA_MIND - INFO - trade_date: 2012-10-08 00:00:00 predicting finished\n",
      "2017-11-08 10:53:57,533 - ALPHA_MIND - INFO - trade_date: 2012-10-15 00:00:00 predicting finished\n",
      "2017-11-08 10:53:57,737 - ALPHA_MIND - INFO - trade_date: 2012-10-29 00:00:00 predicting finished\n",
      "2017-11-08 10:53:57,940 - ALPHA_MIND - INFO - trade_date: 2012-11-12 00:00:00 predicting finished\n",
      "2017-11-08 10:53:58,147 - ALPHA_MIND - INFO - trade_date: 2012-11-26 00:00:00 predicting finished\n",
      "2017-11-08 10:53:58,352 - ALPHA_MIND - INFO - trade_date: 2012-12-10 00:00:00 predicting finished\n",
      "2017-11-08 10:53:58,556 - ALPHA_MIND - INFO - trade_date: 2012-12-24 00:00:00 predicting finished\n",
      "2017-11-08 10:53:58,763 - ALPHA_MIND - INFO - trade_date: 2013-01-07 00:00:00 predicting finished\n",
      "2017-11-08 10:53:58,965 - ALPHA_MIND - INFO - trade_date: 2013-01-21 00:00:00 predicting finished\n",
      "2017-11-08 10:53:59,171 - ALPHA_MIND - INFO - trade_date: 2013-02-04 00:00:00 predicting finished\n",
      "2017-11-08 10:53:59,374 - ALPHA_MIND - INFO - trade_date: 2013-02-18 00:00:00 predicting finished\n",
      "2017-11-08 10:53:59,581 - ALPHA_MIND - INFO - trade_date: 2013-03-04 00:00:00 predicting finished\n",
      "2017-11-08 10:53:59,787 - ALPHA_MIND - INFO - trade_date: 2013-03-18 00:00:00 predicting finished\n",
      "2017-11-08 10:53:59,987 - ALPHA_MIND - INFO - trade_date: 2013-04-01 00:00:00 predicting finished\n",
      "2017-11-08 10:54:00,191 - ALPHA_MIND - INFO - trade_date: 2013-04-15 00:00:00 predicting finished\n",
      "2017-11-08 10:54:00,397 - ALPHA_MIND - INFO - trade_date: 2013-05-02 00:00:00 predicting finished\n",
      "2017-11-08 10:54:00,596 - ALPHA_MIND - INFO - trade_date: 2013-05-13 00:00:00 predicting finished\n",
      "2017-11-08 10:54:00,798 - ALPHA_MIND - INFO - trade_date: 2013-05-27 00:00:00 predicting finished\n",
      "2017-11-08 10:54:00,999 - ALPHA_MIND - INFO - trade_date: 2013-06-13 00:00:00 predicting finished\n",
      "2017-11-08 10:54:01,206 - ALPHA_MIND - INFO - trade_date: 2013-06-24 00:00:00 predicting finished\n",
      "2017-11-08 10:54:01,405 - ALPHA_MIND - INFO - trade_date: 2013-07-08 00:00:00 predicting finished\n",
      "2017-11-08 10:54:01,608 - ALPHA_MIND - INFO - trade_date: 2013-07-22 00:00:00 predicting finished\n",
      "2017-11-08 10:54:01,817 - ALPHA_MIND - INFO - trade_date: 2013-08-05 00:00:00 predicting finished\n",
      "2017-11-08 10:54:02,019 - ALPHA_MIND - INFO - trade_date: 2013-08-19 00:00:00 predicting finished\n",
      "2017-11-08 10:54:02,227 - ALPHA_MIND - INFO - trade_date: 2013-09-02 00:00:00 predicting finished\n",
      "2017-11-08 10:54:02,430 - ALPHA_MIND - INFO - trade_date: 2013-09-16 00:00:00 predicting finished\n",
      "2017-11-08 10:54:02,635 - ALPHA_MIND - INFO - trade_date: 2013-09-30 00:00:00 predicting finished\n",
      "2017-11-08 10:54:02,839 - ALPHA_MIND - INFO - trade_date: 2013-10-14 00:00:00 predicting finished\n",
      "2017-11-08 10:54:03,042 - ALPHA_MIND - INFO - trade_date: 2013-10-28 00:00:00 predicting finished\n",
      "2017-11-08 10:54:03,250 - ALPHA_MIND - INFO - trade_date: 2013-11-11 00:00:00 predicting finished\n",
      "2017-11-08 10:54:03,457 - ALPHA_MIND - INFO - trade_date: 2013-11-25 00:00:00 predicting finished\n",
      "2017-11-08 10:54:03,670 - ALPHA_MIND - INFO - trade_date: 2013-12-09 00:00:00 predicting finished\n",
      "2017-11-08 10:54:03,877 - ALPHA_MIND - INFO - trade_date: 2013-12-23 00:00:00 predicting finished\n",
      "2017-11-08 10:54:04,076 - ALPHA_MIND - INFO - trade_date: 2014-01-06 00:00:00 predicting finished\n",
      "2017-11-08 10:54:04,281 - ALPHA_MIND - INFO - trade_date: 2014-01-20 00:00:00 predicting finished\n",
      "2017-11-08 10:54:04,491 - ALPHA_MIND - INFO - trade_date: 2014-02-07 00:00:00 predicting finished\n",
      "2017-11-08 10:54:04,694 - ALPHA_MIND - INFO - trade_date: 2014-02-17 00:00:00 predicting finished\n",
      "2017-11-08 10:54:04,908 - ALPHA_MIND - INFO - trade_date: 2014-03-03 00:00:00 predicting finished\n",
      "2017-11-08 10:54:05,115 - ALPHA_MIND - INFO - trade_date: 2014-03-17 00:00:00 predicting finished\n",
      "2017-11-08 10:54:05,315 - ALPHA_MIND - INFO - trade_date: 2014-03-31 00:00:00 predicting finished\n",
      "2017-11-08 10:54:05,535 - ALPHA_MIND - INFO - trade_date: 2014-04-14 00:00:00 predicting finished\n",
      "2017-11-08 10:54:05,743 - ALPHA_MIND - INFO - trade_date: 2014-04-28 00:00:00 predicting finished\n",
      "2017-11-08 10:54:05,942 - ALPHA_MIND - INFO - trade_date: 2014-05-12 00:00:00 predicting finished\n",
      "2017-11-08 10:54:06,149 - ALPHA_MIND - INFO - trade_date: 2014-05-26 00:00:00 predicting finished\n",
      "2017-11-08 10:54:06,355 - ALPHA_MIND - INFO - trade_date: 2014-06-09 00:00:00 predicting finished\n",
      "2017-11-08 10:54:06,562 - ALPHA_MIND - INFO - trade_date: 2014-06-23 00:00:00 predicting finished\n",
      "2017-11-08 10:54:06,768 - ALPHA_MIND - INFO - trade_date: 2014-07-07 00:00:00 predicting finished\n",
      "2017-11-08 10:54:06,969 - ALPHA_MIND - INFO - trade_date: 2014-07-21 00:00:00 predicting finished\n",
      "2017-11-08 10:54:07,174 - ALPHA_MIND - INFO - trade_date: 2014-08-04 00:00:00 predicting finished\n",
      "2017-11-08 10:54:07,374 - ALPHA_MIND - INFO - trade_date: 2014-08-18 00:00:00 predicting finished\n",
      "2017-11-08 10:54:07,575 - ALPHA_MIND - INFO - trade_date: 2014-09-01 00:00:00 predicting finished\n",
      "2017-11-08 10:54:07,782 - ALPHA_MIND - INFO - trade_date: 2014-09-15 00:00:00 predicting finished\n",
      "2017-11-08 10:54:07,993 - ALPHA_MIND - INFO - trade_date: 2014-09-29 00:00:00 predicting finished\n",
      "2017-11-08 10:54:08,194 - ALPHA_MIND - INFO - trade_date: 2014-10-13 00:00:00 predicting finished\n",
      "2017-11-08 10:54:08,392 - ALPHA_MIND - INFO - trade_date: 2014-10-27 00:00:00 predicting finished\n",
      "2017-11-08 10:54:08,598 - ALPHA_MIND - INFO - trade_date: 2014-11-10 00:00:00 predicting finished\n",
      "2017-11-08 10:54:08,803 - ALPHA_MIND - INFO - trade_date: 2014-11-24 00:00:00 predicting finished\n",
      "2017-11-08 10:54:09,011 - ALPHA_MIND - INFO - trade_date: 2014-12-08 00:00:00 predicting finished\n",
      "2017-11-08 10:54:09,211 - ALPHA_MIND - INFO - trade_date: 2014-12-22 00:00:00 predicting finished\n",
      "2017-11-08 10:54:09,419 - ALPHA_MIND - INFO - trade_date: 2015-01-05 00:00:00 predicting finished\n",
      "2017-11-08 10:54:09,621 - ALPHA_MIND - INFO - trade_date: 2015-01-19 00:00:00 predicting finished\n",
      "2017-11-08 10:54:09,830 - ALPHA_MIND - INFO - trade_date: 2015-02-02 00:00:00 predicting finished\n",
      "2017-11-08 10:54:10,037 - ALPHA_MIND - INFO - trade_date: 2015-02-16 00:00:00 predicting finished\n",
      "2017-11-08 10:54:10,246 - ALPHA_MIND - INFO - trade_date: 2015-03-02 00:00:00 predicting finished\n",
      "2017-11-08 10:54:10,449 - ALPHA_MIND - INFO - trade_date: 2015-03-16 00:00:00 predicting finished\n",
      "2017-11-08 10:54:10,657 - ALPHA_MIND - INFO - trade_date: 2015-03-30 00:00:00 predicting finished\n",
      "2017-11-08 10:54:10,853 - ALPHA_MIND - INFO - trade_date: 2015-04-13 00:00:00 predicting finished\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-08 10:54:11,062 - ALPHA_MIND - INFO - trade_date: 2015-04-27 00:00:00 predicting finished\n",
      "2017-11-08 10:54:11,268 - ALPHA_MIND - INFO - trade_date: 2015-05-11 00:00:00 predicting finished\n",
      "2017-11-08 10:54:11,467 - ALPHA_MIND - INFO - trade_date: 2015-05-25 00:00:00 predicting finished\n",
      "2017-11-08 10:54:11,672 - ALPHA_MIND - INFO - trade_date: 2015-06-08 00:00:00 predicting finished\n",
      "2017-11-08 10:54:11,877 - ALPHA_MIND - INFO - trade_date: 2015-06-23 00:00:00 predicting finished\n",
      "2017-11-08 10:54:12,080 - ALPHA_MIND - INFO - trade_date: 2015-07-06 00:00:00 predicting finished\n",
      "2017-11-08 10:54:12,289 - ALPHA_MIND - INFO - trade_date: 2015-07-20 00:00:00 predicting finished\n",
      "2017-11-08 10:54:12,494 - ALPHA_MIND - INFO - trade_date: 2015-08-03 00:00:00 predicting finished\n",
      "2017-11-08 10:54:12,696 - ALPHA_MIND - INFO - trade_date: 2015-08-17 00:00:00 predicting finished\n",
      "2017-11-08 10:54:12,906 - ALPHA_MIND - INFO - trade_date: 2015-08-31 00:00:00 predicting finished\n",
      "2017-11-08 10:54:13,108 - ALPHA_MIND - INFO - trade_date: 2015-09-14 00:00:00 predicting finished\n",
      "2017-11-08 10:54:13,314 - ALPHA_MIND - INFO - trade_date: 2015-09-28 00:00:00 predicting finished\n",
      "2017-11-08 10:54:13,518 - ALPHA_MIND - INFO - trade_date: 2015-10-12 00:00:00 predicting finished\n",
      "2017-11-08 10:54:13,723 - ALPHA_MIND - INFO - trade_date: 2015-10-26 00:00:00 predicting finished\n",
      "2017-11-08 10:54:13,924 - ALPHA_MIND - INFO - trade_date: 2015-11-09 00:00:00 predicting finished\n",
      "2017-11-08 10:54:14,127 - ALPHA_MIND - INFO - trade_date: 2015-11-23 00:00:00 predicting finished\n",
      "2017-11-08 10:54:14,333 - ALPHA_MIND - INFO - trade_date: 2015-12-07 00:00:00 predicting finished\n",
      "2017-11-08 10:54:14,549 - ALPHA_MIND - INFO - trade_date: 2015-12-21 00:00:00 predicting finished\n",
      "2017-11-08 10:54:14,753 - ALPHA_MIND - INFO - trade_date: 2016-01-04 00:00:00 predicting finished\n",
      "2017-11-08 10:54:14,956 - ALPHA_MIND - INFO - trade_date: 2016-01-18 00:00:00 predicting finished\n",
      "2017-11-08 10:54:15,160 - ALPHA_MIND - INFO - trade_date: 2016-02-01 00:00:00 predicting finished\n",
      "2017-11-08 10:54:15,366 - ALPHA_MIND - INFO - trade_date: 2016-02-15 00:00:00 predicting finished\n",
      "2017-11-08 10:54:15,580 - ALPHA_MIND - INFO - trade_date: 2016-02-29 00:00:00 predicting finished\n",
      "2017-11-08 10:54:15,787 - ALPHA_MIND - INFO - trade_date: 2016-03-14 00:00:00 predicting finished\n",
      "2017-11-08 10:54:15,996 - ALPHA_MIND - INFO - trade_date: 2016-03-28 00:00:00 predicting finished\n",
      "2017-11-08 10:54:16,207 - ALPHA_MIND - INFO - trade_date: 2016-04-11 00:00:00 predicting finished\n",
      "2017-11-08 10:54:16,420 - ALPHA_MIND - INFO - trade_date: 2016-04-25 00:00:00 predicting finished\n",
      "2017-11-08 10:54:16,627 - ALPHA_MIND - INFO - trade_date: 2016-05-09 00:00:00 predicting finished\n",
      "2017-11-08 10:54:16,838 - ALPHA_MIND - INFO - trade_date: 2016-05-23 00:00:00 predicting finished\n",
      "2017-11-08 10:54:17,044 - ALPHA_MIND - INFO - trade_date: 2016-06-06 00:00:00 predicting finished\n",
      "2017-11-08 10:54:17,249 - ALPHA_MIND - INFO - trade_date: 2016-06-20 00:00:00 predicting finished\n",
      "2017-11-08 10:54:17,463 - ALPHA_MIND - INFO - trade_date: 2016-07-04 00:00:00 predicting finished\n",
      "2017-11-08 10:54:17,675 - ALPHA_MIND - INFO - trade_date: 2016-07-18 00:00:00 predicting finished\n",
      "2017-11-08 10:54:17,883 - ALPHA_MIND - INFO - trade_date: 2016-08-01 00:00:00 predicting finished\n",
      "2017-11-08 10:54:18,083 - ALPHA_MIND - INFO - trade_date: 2016-08-15 00:00:00 predicting finished\n",
      "2017-11-08 10:54:18,289 - ALPHA_MIND - INFO - trade_date: 2016-08-29 00:00:00 predicting finished\n",
      "2017-11-08 10:54:18,495 - ALPHA_MIND - INFO - trade_date: 2016-09-12 00:00:00 predicting finished\n",
      "2017-11-08 10:54:18,700 - ALPHA_MIND - INFO - trade_date: 2016-09-26 00:00:00 predicting finished\n",
      "2017-11-08 10:54:18,900 - ALPHA_MIND - INFO - trade_date: 2016-10-10 00:00:00 predicting finished\n",
      "2017-11-08 10:54:19,109 - ALPHA_MIND - INFO - trade_date: 2016-10-24 00:00:00 predicting finished\n",
      "2017-11-08 10:54:19,309 - ALPHA_MIND - INFO - trade_date: 2016-11-07 00:00:00 predicting finished\n",
      "2017-11-08 10:54:19,516 - ALPHA_MIND - INFO - trade_date: 2016-11-21 00:00:00 predicting finished\n",
      "2017-11-08 10:54:19,721 - ALPHA_MIND - INFO - trade_date: 2016-12-05 00:00:00 predicting finished\n",
      "2017-11-08 10:54:19,928 - ALPHA_MIND - INFO - trade_date: 2016-12-19 00:00:00 predicting finished\n",
      "2017-11-08 10:54:20,137 - ALPHA_MIND - INFO - trade_date: 2017-01-03 00:00:00 predicting finished\n",
      "2017-11-08 10:54:20,346 - ALPHA_MIND - INFO - trade_date: 2017-01-16 00:00:00 predicting finished\n",
      "2017-11-08 10:54:20,547 - ALPHA_MIND - INFO - trade_date: 2017-02-03 00:00:00 predicting finished\n",
      "2017-11-08 10:54:20,752 - ALPHA_MIND - INFO - trade_date: 2017-02-13 00:00:00 predicting finished\n",
      "2017-11-08 10:54:20,951 - ALPHA_MIND - INFO - trade_date: 2017-02-27 00:00:00 predicting finished\n",
      "2017-11-08 10:54:21,158 - ALPHA_MIND - INFO - trade_date: 2017-03-13 00:00:00 predicting finished\n",
      "2017-11-08 10:54:21,366 - ALPHA_MIND - INFO - trade_date: 2017-03-27 00:00:00 predicting finished\n",
      "2017-11-08 10:54:21,569 - ALPHA_MIND - INFO - trade_date: 2017-04-10 00:00:00 predicting finished\n",
      "2017-11-08 10:54:21,768 - ALPHA_MIND - INFO - trade_date: 2017-04-24 00:00:00 predicting finished\n",
      "2017-11-08 10:54:21,971 - ALPHA_MIND - INFO - trade_date: 2017-05-08 00:00:00 predicting finished\n",
      "2017-11-08 10:54:22,179 - ALPHA_MIND - INFO - trade_date: 2017-05-22 00:00:00 predicting finished\n",
      "2017-11-08 10:54:22,381 - ALPHA_MIND - INFO - trade_date: 2017-06-05 00:00:00 predicting finished\n",
      "2017-11-08 10:54:22,585 - ALPHA_MIND - INFO - trade_date: 2017-06-19 00:00:00 predicting finished\n",
      "2017-11-08 10:54:22,795 - ALPHA_MIND - INFO - trade_date: 2017-07-03 00:00:00 predicting finished\n",
      "2017-11-08 10:54:23,001 - ALPHA_MIND - INFO - trade_date: 2017-07-17 00:00:00 predicting finished\n",
      "2017-11-08 10:54:23,208 - ALPHA_MIND - INFO - trade_date: 2017-07-31 00:00:00 predicting finished\n",
      "2017-11-08 10:54:23,417 - ALPHA_MIND - INFO - trade_date: 2017-08-14 00:00:00 predicting finished\n",
      "2017-11-08 10:54:23,633 - ALPHA_MIND - INFO - trade_date: 2017-08-28 00:00:00 predicting finished\n",
      "2017-11-08 10:54:23,834 - ALPHA_MIND - INFO - trade_date: 2017-09-11 00:00:00 predicting finished\n",
      "2017-11-08 10:54:24,036 - ALPHA_MIND - INFO - trade_date: 2017-09-25 00:00:00 predicting finished\n",
      "2017-11-08 10:54:24,238 - ALPHA_MIND - INFO - trade_date: 2017-10-09 00:00:00 predicting finished\n",
      "2017-11-08 10:54:24,444 - ALPHA_MIND - INFO - trade_date: 2017-10-23 00:00:00 predicting finished\n",
      "2017-11-08 10:54:24,649 - ALPHA_MIND - INFO - trade_date: 2017-11-06 00:00:00 predicting finished\n"
     ]
    }
   ],
   "source": [
    "for i, ref_date in enumerate(dates):\n",
    "    model = model_df[ref_date]\n",
    "    sample_test_x = predict_x[ref_date]\n",
    "    sample_test_y = predict_y[ref_date].flatten()\n",
    "    \n",
    "    cons = Constraints()\n",
    "    index = settlement.trade_date == ref_date\n",
    "    benchmark_w = settlement[index]['weight'].values\n",
    "    realized_r = settlement[index]['dx'].values\n",
    "    industry_names = settlement[index]['industry'].values\n",
    "    is_tradable = settlement[index]['isOpen'].values\n",
    "\n",
    "    cons.add_exposure(['total'], np.ones((len(is_tradable), 1)))\n",
    "    cons.set_constraints('total', benchmark_w.sum(), benchmark_w.sum())\n",
    "\n",
    "    if portfolio_industry_neutralize:\n",
    "        ind_exp = industry_dummies[index]\n",
    "\n",
    "        risk_tags = ind_exp.columns\n",
    "        cons.add_exposure(risk_tags, ind_exp.values)\n",
    "        benchmark_exp = benchmark_w @ ind_exp.values\n",
    "\n",
    "        for k, name in enumerate(risk_tags):\n",
    "            cons.set_constraints(name, benchmark_exp[k]*industry_lower, benchmark_exp[k]*industry_upper)\n",
    "\n",
    "    if portfolio_risk_neutralize:\n",
    "        risk_exp = risk_styles[index]\n",
    "\n",
    "        risk_tags = np.array(portfolio_risk_neutralize)\n",
    "        cons.add_exposure(risk_tags, risk_exp)\n",
    "\n",
    "        benchmark_exp = benchmark_w @ risk_exp\n",
    "        for k, name in enumerate(risk_tags):\n",
    "            cons.set_constraints(name, benchmark_exp[k], benchmark_exp[k])\n",
    "\n",
    "    risk_table = total_risks[index]\n",
    "\n",
    "    y = model.predict(sample_test_x)\n",
    "    accuray_table.loc[ref_date, 'test'] = accuray_table.loc[ref_date, 'test'] = mean_squared_error(y, sample_test_y)\n",
    "\n",
    "    is_tradable[:] = True\n",
    "    weights, analysis = er_portfolio_analysis(y,\n",
    "                                              industry_names,\n",
    "                                              realized_r,\n",
    "                                              constraints=cons,\n",
    "                                              detail_analysis=True,\n",
    "                                              benchmark=benchmark_w,\n",
    "                                              is_tradable=is_tradable,\n",
    "                                              method=method)\n",
    "    \n",
    "    final_res[i] = analysis['er']['total'] / benchmark_w.sum()\n",
    "    alpha_logger.info('trade_date: {0} predicting finished'.format(ref_date))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x1693e4150f0>"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n2QDJKeHxwDOvxPj9Z79XIiIiIiJn6YzBeNeuXWRmZpKRkQHA9OnT2bhx4wnB+L333mPBggUATJ06\nleXLl2OtPeNZXFu9D/v+Wuz7a+GDckgIYK75SnhFOg1/EBEREZHz6IzBuL6+nrS0tI7v09LS2Llz\n56du4/P5SEhI4OjRoyQnJ3/mc7v33hL+IucizIIbMTOuwAQSz3YfRERERES67YzB2Fp7ym0nnwnu\nzDYAa9asYc2aNQA88MADJN10B/2mzsKXNrDTBUvPiYmJIRgMRroM6UHqqfeop96kvnqPeuoNZwzG\naWlp1NXVdXxfV1fHgAEDTrtNWloa7e3tNDc3k5h46pnfgoICCgoKOr5vvmQ2zRaore3GLkhXBYNB\navW79xT11HvUU29SX71HPY1ugwcP7tR2Z1z5Licnh+rqag4ePEgoFGLt2rXk5eWdsM2UKVN46623\nAFi3bh1jx47VLBEiIiIi0quc8Yyxz+dj8eLFLF26FNd1mT17NsOGDWPlypXk5OSQl5fHnDlzWLZs\nGUuWLCExMZHbb7/9fNQuIiIiItJjjD3dAOHzZP/+/ZH60YI+9vEi9dR71FNvUl+9Rz2Nbj02lEJE\nREREpC9QMBYRERERQcFYRERERARQMBYRERERARSMRUREREQABWMREREREUDBWEREREQEUDAWERER\nEQEivMCHiIiIiEi00BnjPuzuu++OdAnSw9RT71FPvUl99R711BsUjEVEREREUDAWEREREQEUjPu0\ngoKCSJcgPUw99R711JvUV+9RT71BF9+JiIiIiKAzxiIiIiIigIKxiIiIiAigYCwiIiIiAigYe57r\nupEuQXpYc3MzoN56SUNDAwC65MM7KisrOX78eKTLkB5WWlpKTU1NpMuQcygm0gXIubF7925effVV\nMjIyuPTSS8nMzIx0SdINruvS2trKY489RmJiIrfddhuOo79re7uKigqeffZZ0tPT+eY3v4kxJtIl\nSTft3buXX/ziFyQnJ/O1r32N1NTUSJckPaC8vJwVK1ZQXFzMj370o0iXI+eQgrHHuK7Lk08+SVlZ\nGXPnzmXHjh2sWrWKb3zjG/Tr1y/S5UkXOY5DfHw87e3tHDp0iLVr1zJ9+nRc11VA7oWstTz99NNs\n27aN+fPnc9lll0W6JOkhL7/8MlOnTuXqq6/uuM1aqz96eqlQKMTy5cspLy9nwYIF+P1+iouLyc7O\n1uuvRykYe4zjOIwbN45FixYRCAS46KKLeOmll/D5fJEuTbqpqqqKpKQkZsyYwZo1a5g0aRLx8fF6\n0+2FjDG0trYyYsSIjlBcU1NDenq63mh7Kdd1OXjwIHFxcR2heOvWreTk5BAXF4fP59Ox2guFQiFy\nc3P56le/SmxsLEePHqW0tJT29na9r3qU77777rsv0kVI95SVlXHs2DGSkpIAGDp0KLGxsWzdupX7\n77+f+Ph4KisrSUtLIzk5OcLVSmd8sqcfv5kmJCSwadMmJk+ezIEDB6irqyMlJYVAIBDpcqUTTj5O\nc3Nz+dWvfkVTUxMvvPACZWVlbNq0iWAwyIABAyJcrXTGJ3tqjMHn8/Hiiy+SkZHBs88+S0lJCSUl\nJVRXVzNmzBiF4l7ik331+XxkZWV1hODy8nIOHTpEfn4+ruuqpx6kYNyLNTU18dOf/pTVq1cTCATI\nzs4mJiamI0g1NjYyceJEFi1aRGlpKRUVFVxwwQXExcVFunT5FKfrqd/vB2DXrl1UV1dz2WWXUVdX\nx8qVK9mzZw/Tpk0D0At0lPq049Tv92OtpaioiBtuuIGrrrqK3bt3U1VVRVZWloY+RbHP6mlLSwuF\nhYXMmzePRYsWkZiYyLp16xg4cCBpaWmRLl0+w6e9/lprO95X4+Pjee6555gzZ46OUY9SMO7FGhsb\nCYVCXHzxxR1XtQ8aNKgjIKWmpjJo0CAAYmNjWbt2LTNnzuwIWhJ9Pq2nEA6+mzdvpqioiHXr1jFs\n2DAGDx7M5MmTFYqj2Gf1dOTIkUyfPp0hQ4bg8/mIi4ujqKiImTNnEhOjkW7R6rN6mpCQwCuvvEJu\nbi7Dhw8nOTmZ0tJSRo0apU8CotxnvacaY3Bdl4SEBCorK4mNjWXIkCERrljOBQ1m62X+8Ic/UFxc\nTHNzM6mpqRQUFDBt2jT8fj87d+6kvr7+tI8rLy8nJSVFY6KiUGd72tjYyJEjR0hJSeGhhx7i61//\nOtXV1ezbty/CeyAnO5vjNDExsePr8vJyUlNTNc44CnW2p1lZWdxwww0UFhZy5MgR3nnnHSorKzuG\n0Eh06WxfrbU4jkNbWxsQPtn08e3iLTpj3AtYa2loaOChhx5i79691NXVsXHjRsaMGUNCQgIxMTH4\nfD7Ky8sJhUJkZWUB4fluS0pKeOSRR2hoaGDRokWkpKREeG8EutbT/v37M2HCBKZOnYrf78fn85Gf\nn08wGIz07ghdP07b2tooLS3l4YcfpqGhgYULF+o4jRJd7emIESNobW1lw4YN7Nixg5tuuklTZkaR\nrvT14zPGfr+f9evXc+zYMcaOHatP6zxIwTjKfTwdzKFDh6ioqODOO+9k0qRJlJSUUFRUxPTp0wEI\nBoNUVVVRV1dHdnY21lri4uI4cOAAo0aNYuHChTpjESW62tP29nYCgQCu62Ktxe/3d5y1kMjqznEa\nGxvLoUOHyM7O1nEaRbra01AohN/vZ9SoUUyYMIFZs2bpouco0tW+fhyKAaZMmcL48eMjuRtyDunz\nuijV3t7OihUrOiYU379/f8fHqz6fjxtvvJGysjKKi4s7HlNQUEBrayv3338/t956K/X19UyYMIH8\n/PxI7YZ8Qnd7umTJEurr63EcRx+1R4meOk5Hjx7NxRdfHKndkE/obk+//e1vd3z8rnHi0aO7fb3t\nttvU1z5C765RqLi4mLvvvpumpiYyMzNZuXIlMTExbN++nV27dgHhC7GuvfZaVq1a1fG4999/n8LC\nQrKysvjJT36iFZeiiHrqPeqp96in3qS+ytnQUIooVFtby9ChQ7nmmmvIzs5m9+7dxMTE8LnPfY6V\nK1dyxRVX4LouwWCQ4uJicnJyCAQC1NTUUFBQwNy5czUlW5RRT71HPfUe9dSb1Fc5GzpjHIWys7OZ\nNm0arusCMHr0aGpra5k1axau6/K73/0Ox3Goq6vDcRzS09MByM/PJzc3N5Kly6dQT71HPfUe9dSb\n1Fc5GwrGUahfv374/f6O8U9bt27tuHjjlltuoaqqigceeIBHH32U7OxsQFPGRDv11HvUU+9RT71J\nfZWzoRHkUezjv24PHz5MXl4eAPHx8Vx33XVUVlaSnp7eMeZJU8b0Duqp96in3qOeepP6Kp2hYBzF\njDGEQiGSkpLYu3cvTz31FImJiSxevJiLLroo0uVJF6in3qOeeo966k3qq3SGgnEUM8ZQUVFBUVER\nBw8eZPbs2cyZMyfSZUk3qKfeo556j3rqTeqrdIaxGkgT1erq6nj77beZN29ex+Ti0rupp96jnnqP\neupN6quciYKxiIiIiAialUJEREREBFAwFhEREREBFIxFRERERAAFYxERERERQMFYRERERARQMBYR\nERERARSMRUREREQA+F+bx4Il8wo1oQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x16903d02c18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "last_date = advanceDateByCalendar('china.sse', dates[-1], frequency)\n",
    "\n",
    "df = pd.Series(final_res, index=dates[1:] + [last_date])\n",
    "df.sort_index(inplace=True)\n",
    "df['2012-01-01':].cumsum().plot(figsize=(12, 6))\n",
    "plt.title('Prod factors model {1} ({0})'.format(method, model.__class__.__name__))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x168e6c2a5c0>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x168f8b71470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuray_table.plot(figsize=(12, 6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>train</th>\n",
       "      <th>test</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.007998</td>\n",
       "      <td>0.008397</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>median</th>\n",
       "      <td>0.004722</td>\n",
       "      <td>0.004502</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.010321</td>\n",
       "      <td>0.017790</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           train      test\n",
       "mean    0.007998  0.008397\n",
       "median  0.004722  0.004502\n",
       "std     0.010321  0.017790"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuray_table.aggregate([np.mean, np.median, np.std])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Train and test accuracy trend （Random Forest with Grid Search）\n",
    "----------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-06 10:08:40,211 - ALPHA_MIND - INFO - trade_date: 2012-02-02 00:00:00 training finished\n",
      "2017-11-06 10:09:04,935 - ALPHA_MIND - INFO - trade_date: 2012-02-16 00:00:00 training finished\n",
      "2017-11-06 10:09:31,816 - ALPHA_MIND - INFO - trade_date: 2012-03-01 00:00:00 training finished\n",
      "2017-11-06 10:09:55,331 - ALPHA_MIND - INFO - trade_date: 2012-03-15 00:00:00 training finished\n",
      "2017-11-06 10:10:18,799 - ALPHA_MIND - INFO - trade_date: 2012-03-29 00:00:00 training finished\n",
      "2017-11-06 10:10:42,696 - ALPHA_MIND - INFO - trade_date: 2012-04-12 00:00:00 training finished\n",
      "2017-11-06 10:11:06,401 - ALPHA_MIND - INFO - trade_date: 2012-04-26 00:00:00 training finished\n",
      "2017-11-06 10:11:30,040 - ALPHA_MIND - INFO - trade_date: 2012-05-10 00:00:00 training finished\n",
      "2017-11-06 10:11:53,367 - ALPHA_MIND - INFO - trade_date: 2012-05-24 00:00:00 training finished\n",
      "2017-11-06 10:12:16,953 - ALPHA_MIND - INFO - trade_date: 2012-06-07 00:00:00 training finished\n",
      "2017-11-06 10:12:40,426 - ALPHA_MIND - INFO - trade_date: 2012-06-21 00:00:00 training finished\n",
      "2017-11-06 10:13:03,864 - ALPHA_MIND - INFO - trade_date: 2012-07-05 00:00:00 training finished\n",
      "2017-11-06 10:13:27,342 - ALPHA_MIND - INFO - trade_date: 2012-07-19 00:00:00 training finished\n",
      "2017-11-06 10:13:50,773 - ALPHA_MIND - INFO - trade_date: 2012-08-02 00:00:00 training finished\n",
      "2017-11-06 10:14:14,262 - ALPHA_MIND - INFO - trade_date: 2012-08-16 00:00:00 training finished\n",
      "2017-11-06 10:14:37,593 - ALPHA_MIND - INFO - trade_date: 2012-08-30 00:00:00 training finished\n",
      "2017-11-06 10:15:01,031 - ALPHA_MIND - INFO - trade_date: 2012-09-13 00:00:00 training finished\n",
      "2017-11-06 10:15:24,377 - ALPHA_MIND - INFO - trade_date: 2012-09-27 00:00:00 training finished\n",
      "2017-11-06 10:15:47,851 - ALPHA_MIND - INFO - trade_date: 2012-10-11 00:00:00 training finished\n",
      "2017-11-06 10:16:11,273 - ALPHA_MIND - INFO - trade_date: 2012-10-25 00:00:00 training finished\n",
      "2017-11-06 10:16:35,920 - ALPHA_MIND - INFO - trade_date: 2012-11-08 00:00:00 training finished\n",
      "2017-11-06 10:16:59,517 - ALPHA_MIND - INFO - trade_date: 2012-11-22 00:00:00 training finished\n",
      "2017-11-06 10:17:22,887 - ALPHA_MIND - INFO - trade_date: 2012-12-06 00:00:00 training finished\n",
      "2017-11-06 10:17:46,284 - ALPHA_MIND - INFO - trade_date: 2012-12-20 00:00:00 training finished\n",
      "2017-11-06 10:18:09,466 - ALPHA_MIND - INFO - trade_date: 2013-01-04 00:00:00 training finished\n",
      "2017-11-06 10:18:32,704 - ALPHA_MIND - INFO - trade_date: 2013-01-17 00:00:00 training finished\n",
      "2017-11-06 10:18:55,861 - ALPHA_MIND - INFO - trade_date: 2013-01-31 00:00:00 training finished\n",
      "2017-11-06 10:19:19,232 - ALPHA_MIND - INFO - trade_date: 2013-02-18 00:00:00 training finished\n",
      "2017-11-06 10:19:41,815 - ALPHA_MIND - INFO - trade_date: 2013-02-28 00:00:00 training finished\n",
      "2017-11-06 10:20:04,876 - ALPHA_MIND - INFO - trade_date: 2013-03-14 00:00:00 training finished\n",
      "2017-11-06 10:20:28,029 - ALPHA_MIND - INFO - trade_date: 2013-03-28 00:00:00 training finished\n",
      "2017-11-06 10:20:51,186 - ALPHA_MIND - INFO - trade_date: 2013-04-11 00:00:00 training finished\n",
      "2017-11-06 10:21:14,034 - ALPHA_MIND - INFO - trade_date: 2013-04-25 00:00:00 training finished\n",
      "2017-11-06 10:21:37,257 - ALPHA_MIND - INFO - trade_date: 2013-05-09 00:00:00 training finished\n",
      "2017-11-06 10:22:00,512 - ALPHA_MIND - INFO - trade_date: 2013-05-23 00:00:00 training finished\n",
      "2017-11-06 10:22:24,603 - ALPHA_MIND - INFO - trade_date: 2013-06-06 00:00:00 training finished\n",
      "2017-11-06 10:22:47,575 - ALPHA_MIND - INFO - trade_date: 2013-06-20 00:00:00 training finished\n",
      "2017-11-06 10:23:10,795 - ALPHA_MIND - INFO - trade_date: 2013-07-04 00:00:00 training finished\n",
      "2017-11-06 10:23:34,381 - ALPHA_MIND - INFO - trade_date: 2013-07-18 00:00:00 training finished\n",
      "2017-11-06 10:23:57,716 - ALPHA_MIND - INFO - trade_date: 2013-08-01 00:00:00 training finished\n",
      "2017-11-06 10:24:21,116 - ALPHA_MIND - INFO - trade_date: 2013-08-15 00:00:00 training finished\n",
      "2017-11-06 10:24:44,539 - ALPHA_MIND - INFO - trade_date: 2013-08-29 00:00:00 training finished\n",
      "2017-11-06 10:25:10,367 - ALPHA_MIND - INFO - trade_date: 2013-09-12 00:00:00 training finished\n",
      "2017-11-06 10:25:41,278 - ALPHA_MIND - INFO - trade_date: 2013-09-26 00:00:00 training finished\n",
      "2017-11-06 10:26:11,891 - ALPHA_MIND - INFO - trade_date: 2013-10-10 00:00:00 training finished\n",
      "2017-11-06 10:26:42,703 - ALPHA_MIND - INFO - trade_date: 2013-10-24 00:00:00 training finished\n",
      "2017-11-06 10:27:06,331 - ALPHA_MIND - INFO - trade_date: 2013-11-07 00:00:00 training finished\n",
      "2017-11-06 10:27:29,997 - ALPHA_MIND - INFO - trade_date: 2013-11-21 00:00:00 training finished\n",
      "2017-11-06 10:27:53,808 - ALPHA_MIND - INFO - trade_date: 2013-12-05 00:00:00 training finished\n",
      "2017-11-06 10:28:16,630 - ALPHA_MIND - INFO - trade_date: 2013-12-19 00:00:00 training finished\n",
      "2017-11-06 10:28:38,789 - ALPHA_MIND - INFO - trade_date: 2014-01-02 00:00:00 training finished\n",
      "2017-11-06 10:29:00,748 - ALPHA_MIND - INFO - trade_date: 2014-01-16 00:00:00 training finished\n",
      "2017-11-06 10:29:23,300 - ALPHA_MIND - INFO - trade_date: 2014-01-30 00:00:00 training finished\n",
      "2017-11-06 10:29:49,817 - ALPHA_MIND - INFO - trade_date: 2014-02-13 00:00:00 training finished\n",
      "2017-11-06 10:30:19,726 - ALPHA_MIND - INFO - trade_date: 2014-02-27 00:00:00 training finished\n",
      "2017-11-06 10:30:49,616 - ALPHA_MIND - INFO - trade_date: 2014-03-13 00:00:00 training finished\n",
      "2017-11-06 10:31:14,891 - ALPHA_MIND - INFO - trade_date: 2014-03-27 00:00:00 training finished\n",
      "2017-11-06 10:31:38,682 - ALPHA_MIND - INFO - trade_date: 2014-04-10 00:00:00 training finished\n",
      "2017-11-06 10:32:02,073 - ALPHA_MIND - INFO - trade_date: 2014-04-24 00:00:00 training finished\n",
      "2017-11-06 10:32:25,227 - ALPHA_MIND - INFO - trade_date: 2014-05-08 00:00:00 training finished\n",
      "2017-11-06 10:32:48,561 - ALPHA_MIND - INFO - trade_date: 2014-05-22 00:00:00 training finished\n",
      "2017-11-06 10:33:11,987 - ALPHA_MIND - INFO - trade_date: 2014-06-05 00:00:00 training finished\n",
      "2017-11-06 10:33:35,468 - ALPHA_MIND - INFO - trade_date: 2014-06-19 00:00:00 training finished\n",
      "2017-11-06 10:33:58,824 - ALPHA_MIND - INFO - trade_date: 2014-07-03 00:00:00 training finished\n",
      "2017-11-06 10:34:23,515 - ALPHA_MIND - INFO - trade_date: 2014-07-17 00:00:00 training finished\n",
      "2017-11-06 10:34:46,172 - ALPHA_MIND - INFO - trade_date: 2014-07-31 00:00:00 training finished\n",
      "2017-11-06 10:35:08,798 - ALPHA_MIND - INFO - trade_date: 2014-08-14 00:00:00 training finished\n",
      "2017-11-06 10:35:31,636 - ALPHA_MIND - INFO - trade_date: 2014-08-28 00:00:00 training finished\n",
      "2017-11-06 10:35:54,362 - ALPHA_MIND - INFO - trade_date: 2014-09-11 00:00:00 training finished\n",
      "2017-11-06 10:36:17,109 - ALPHA_MIND - INFO - trade_date: 2014-09-25 00:00:00 training finished\n",
      "2017-11-06 10:36:40,362 - ALPHA_MIND - INFO - trade_date: 2014-10-09 00:00:00 training finished\n",
      "2017-11-06 10:37:03,197 - ALPHA_MIND - INFO - trade_date: 2014-10-23 00:00:00 training finished\n",
      "2017-11-06 10:37:25,875 - ALPHA_MIND - INFO - trade_date: 2014-11-06 00:00:00 training finished\n",
      "2017-11-06 10:37:48,298 - ALPHA_MIND - INFO - trade_date: 2014-11-20 00:00:00 training finished\n",
      "2017-11-06 10:38:11,030 - ALPHA_MIND - INFO - trade_date: 2014-12-04 00:00:00 training finished\n",
      "2017-11-06 10:38:33,816 - ALPHA_MIND - INFO - trade_date: 2014-12-18 00:00:00 training finished\n",
      "2017-11-06 10:38:56,766 - ALPHA_MIND - INFO - trade_date: 2015-01-05 00:00:00 training finished\n",
      "2017-11-06 10:39:19,599 - ALPHA_MIND - INFO - trade_date: 2015-01-15 00:00:00 training finished\n",
      "2017-11-06 10:39:42,824 - ALPHA_MIND - INFO - trade_date: 2015-01-29 00:00:00 training finished\n",
      "2017-11-06 10:40:06,737 - ALPHA_MIND - INFO - trade_date: 2015-02-12 00:00:00 training finished\n",
      "2017-11-06 10:40:29,373 - ALPHA_MIND - INFO - trade_date: 2015-02-26 00:00:00 training finished\n",
      "2017-11-06 10:40:52,732 - ALPHA_MIND - INFO - trade_date: 2015-03-12 00:00:00 training finished\n",
      "2017-11-06 10:41:17,280 - ALPHA_MIND - INFO - trade_date: 2015-03-26 00:00:00 training finished\n",
      "2017-11-06 10:41:41,654 - ALPHA_MIND - INFO - trade_date: 2015-04-09 00:00:00 training finished\n",
      "2017-11-06 10:42:04,911 - ALPHA_MIND - INFO - trade_date: 2015-04-23 00:00:00 training finished\n",
      "2017-11-06 10:42:28,410 - ALPHA_MIND - INFO - trade_date: 2015-05-07 00:00:00 training finished\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-06 10:42:50,836 - ALPHA_MIND - INFO - trade_date: 2015-05-21 00:00:00 training finished\n",
      "2017-11-06 10:43:13,939 - ALPHA_MIND - INFO - trade_date: 2015-06-04 00:00:00 training finished\n",
      "2017-11-06 10:43:36,140 - ALPHA_MIND - INFO - trade_date: 2015-06-18 00:00:00 training finished\n",
      "2017-11-06 10:43:59,002 - ALPHA_MIND - INFO - trade_date: 2015-07-02 00:00:00 training finished\n",
      "2017-11-06 10:44:22,195 - ALPHA_MIND - INFO - trade_date: 2015-07-16 00:00:00 training finished\n",
      "2017-11-06 10:44:45,718 - ALPHA_MIND - INFO - trade_date: 2015-07-30 00:00:00 training finished\n",
      "2017-11-06 10:45:08,965 - ALPHA_MIND - INFO - trade_date: 2015-08-13 00:00:00 training finished\n",
      "2017-11-06 10:45:32,243 - ALPHA_MIND - INFO - trade_date: 2015-08-27 00:00:00 training finished\n",
      "2017-11-06 10:45:55,605 - ALPHA_MIND - INFO - trade_date: 2015-09-10 00:00:00 training finished\n",
      "2017-11-06 10:46:18,813 - ALPHA_MIND - INFO - trade_date: 2015-09-24 00:00:00 training finished\n",
      "2017-11-06 10:46:41,951 - ALPHA_MIND - INFO - trade_date: 2015-10-08 00:00:00 training finished\n",
      "2017-11-06 10:47:04,474 - ALPHA_MIND - INFO - trade_date: 2015-10-22 00:00:00 training finished\n",
      "2017-11-06 10:47:26,776 - ALPHA_MIND - INFO - trade_date: 2015-11-05 00:00:00 training finished\n",
      "2017-11-06 10:47:49,037 - ALPHA_MIND - INFO - trade_date: 2015-11-19 00:00:00 training finished\n",
      "2017-11-06 10:48:12,070 - ALPHA_MIND - INFO - trade_date: 2015-12-03 00:00:00 training finished\n",
      "2017-11-06 10:48:35,058 - ALPHA_MIND - INFO - trade_date: 2015-12-17 00:00:00 training finished\n",
      "2017-11-06 10:48:58,415 - ALPHA_MIND - INFO - trade_date: 2015-12-31 00:00:00 training finished\n",
      "2017-11-06 10:49:21,635 - ALPHA_MIND - INFO - trade_date: 2016-01-14 00:00:00 training finished\n",
      "2017-11-06 10:49:44,993 - ALPHA_MIND - INFO - trade_date: 2016-01-28 00:00:00 training finished\n",
      "2017-11-06 10:50:08,729 - ALPHA_MIND - INFO - trade_date: 2016-02-15 00:00:00 training finished\n",
      "2017-11-06 10:50:31,961 - ALPHA_MIND - INFO - trade_date: 2016-02-25 00:00:00 training finished\n",
      "2017-11-06 10:50:55,328 - ALPHA_MIND - INFO - trade_date: 2016-03-10 00:00:00 training finished\n",
      "2017-11-06 10:51:18,389 - ALPHA_MIND - INFO - trade_date: 2016-03-24 00:00:00 training finished\n",
      "2017-11-06 10:51:41,572 - ALPHA_MIND - INFO - trade_date: 2016-04-07 00:00:00 training finished\n",
      "2017-11-06 10:52:04,950 - ALPHA_MIND - INFO - trade_date: 2016-04-21 00:00:00 training finished\n",
      "2017-11-06 10:52:28,793 - ALPHA_MIND - INFO - trade_date: 2016-05-05 00:00:00 training finished\n",
      "2017-11-06 10:52:52,118 - ALPHA_MIND - INFO - trade_date: 2016-05-19 00:00:00 training finished\n",
      "2017-11-06 10:53:15,412 - ALPHA_MIND - INFO - trade_date: 2016-06-02 00:00:00 training finished\n",
      "2017-11-06 10:53:38,836 - ALPHA_MIND - INFO - trade_date: 2016-06-16 00:00:00 training finished\n",
      "2017-11-06 10:54:02,118 - ALPHA_MIND - INFO - trade_date: 2016-06-30 00:00:00 training finished\n",
      "2017-11-06 10:54:25,488 - ALPHA_MIND - INFO - trade_date: 2016-07-14 00:00:00 training finished\n",
      "2017-11-06 10:54:48,448 - ALPHA_MIND - INFO - trade_date: 2016-07-28 00:00:00 training finished\n",
      "2017-11-06 10:55:12,228 - ALPHA_MIND - INFO - trade_date: 2016-08-11 00:00:00 training finished\n",
      "2017-11-06 10:55:35,815 - ALPHA_MIND - INFO - trade_date: 2016-08-25 00:00:00 training finished\n",
      "2017-11-06 10:55:58,528 - ALPHA_MIND - INFO - trade_date: 2016-09-08 00:00:00 training finished\n",
      "2017-11-06 10:56:21,221 - ALPHA_MIND - INFO - trade_date: 2016-09-22 00:00:00 training finished\n",
      "2017-11-06 10:56:44,440 - ALPHA_MIND - INFO - trade_date: 2016-10-10 00:00:00 training finished\n",
      "2017-11-06 10:57:08,536 - ALPHA_MIND - INFO - trade_date: 2016-10-20 00:00:00 training finished\n",
      "2017-11-06 10:57:31,706 - ALPHA_MIND - INFO - trade_date: 2016-11-03 00:00:00 training finished\n",
      "2017-11-06 10:57:54,710 - ALPHA_MIND - INFO - trade_date: 2016-11-17 00:00:00 training finished\n",
      "2017-11-06 10:58:18,994 - ALPHA_MIND - INFO - trade_date: 2016-12-01 00:00:00 training finished\n",
      "2017-11-06 10:58:41,952 - ALPHA_MIND - INFO - trade_date: 2016-12-15 00:00:00 training finished\n",
      "2017-11-06 10:59:05,184 - ALPHA_MIND - INFO - trade_date: 2016-12-29 00:00:00 training finished\n",
      "2017-11-06 10:59:28,383 - ALPHA_MIND - INFO - trade_date: 2017-01-12 00:00:00 training finished\n",
      "2017-11-06 10:59:50,824 - ALPHA_MIND - INFO - trade_date: 2017-01-26 00:00:00 training finished\n",
      "2017-11-06 11:00:14,202 - ALPHA_MIND - INFO - trade_date: 2017-02-09 00:00:00 training finished\n",
      "2017-11-06 11:00:36,824 - ALPHA_MIND - INFO - trade_date: 2017-02-23 00:00:00 training finished\n",
      "2017-11-06 11:00:59,196 - ALPHA_MIND - INFO - trade_date: 2017-03-09 00:00:00 training finished\n",
      "2017-11-06 11:01:21,716 - ALPHA_MIND - INFO - trade_date: 2017-03-23 00:00:00 training finished\n",
      "2017-11-06 11:01:44,803 - ALPHA_MIND - INFO - trade_date: 2017-04-06 00:00:00 training finished\n",
      "2017-11-06 11:02:07,652 - ALPHA_MIND - INFO - trade_date: 2017-04-20 00:00:00 training finished\n",
      "2017-11-06 11:02:30,472 - ALPHA_MIND - INFO - trade_date: 2017-05-04 00:00:00 training finished\n",
      "2017-11-06 11:02:52,436 - ALPHA_MIND - INFO - trade_date: 2017-05-18 00:00:00 training finished\n",
      "2017-11-06 11:03:14,620 - ALPHA_MIND - INFO - trade_date: 2017-06-01 00:00:00 training finished\n",
      "2017-11-06 11:03:36,749 - ALPHA_MIND - INFO - trade_date: 2017-06-15 00:00:00 training finished\n",
      "2017-11-06 11:03:59,128 - ALPHA_MIND - INFO - trade_date: 2017-06-29 00:00:00 training finished\n",
      "2017-11-06 11:04:21,878 - ALPHA_MIND - INFO - trade_date: 2017-07-13 00:00:00 training finished\n",
      "2017-11-06 11:04:44,613 - ALPHA_MIND - INFO - trade_date: 2017-07-27 00:00:00 training finished\n",
      "2017-11-06 11:05:08,064 - ALPHA_MIND - INFO - trade_date: 2017-08-10 00:00:00 training finished\n",
      "2017-11-06 11:05:31,123 - ALPHA_MIND - INFO - trade_date: 2017-08-24 00:00:00 training finished\n",
      "2017-11-06 11:05:53,834 - ALPHA_MIND - INFO - trade_date: 2017-09-07 00:00:00 training finished\n",
      "2017-11-06 11:06:16,141 - ALPHA_MIND - INFO - trade_date: 2017-09-21 00:00:00 training finished\n",
      "2017-11-06 11:06:39,455 - ALPHA_MIND - INFO - trade_date: 2017-10-09 00:00:00 training finished\n",
      "2017-11-06 11:07:02,949 - ALPHA_MIND - INFO - trade_date: 2017-10-19 00:00:00 training finished\n",
      "2017-11-06 11:07:26,434 - ALPHA_MIND - INFO - trade_date: 2017-11-02 00:00:00 training finished\n"
     ]
    }
   ],
   "source": [
    "for ref_date in dates:\n",
    "    sample_train_x = train_x[ref_date]\n",
    "    sample_train_y = train_y[ref_date].flatten()\n",
    "    \n",
    "    model = GridSearchCV(RandomForestRegressor(n_estimators=n_estimators,\n",
    "                                               max_depth=max_depth,\n",
    "                                               min_samples_split=min_samples_split,\n",
    "                                               min_samples_leaf=min_samples_leaf,\n",
    "                                               n_jobs=-1,\n",
    "                                               max_features='log2'),\n",
    "                         param_grid={'max_depth': [1, 3],\n",
    "                                    'min_samples_split': [5, 10],\n",
    "                                    'min_samples_leaf': [2, 5]},\n",
    "                         cv=4)\n",
    "    model.fit(sample_train_x, sample_train_y)\n",
    "    \n",
    "    accuray_table.loc[ref_date, 'train'] = mean_squared_error(model.predict(sample_train_x), sample_train_y)\n",
    "    model_df.loc[ref_date] = model\n",
    "    alpha_logger.info('trade_date: {0} training finished'.format(ref_date))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "portfolio_industry_neutralize = True\n",
    "\n",
    "settlement = data_package['settlement']\n",
    "industry_dummies = pd.get_dummies(settlement['industry'].values)\n",
    "risk_styles = settlement[portfolio_risk_neutralize].values\n",
    "total_risks = settlement[neutralize_risk].values\n",
    "final_res = np.zeros(len(dates))\n",
    "method = 'risk_neutral'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-06 11:07:26,872 - ALPHA_MIND - INFO - trade_date: 2012-02-02 00:00:00 predicting finished\n",
      "2017-11-06 11:07:27,091 - ALPHA_MIND - INFO - trade_date: 2012-02-16 00:00:00 predicting finished\n",
      "2017-11-06 11:07:27,310 - ALPHA_MIND - INFO - trade_date: 2012-03-01 00:00:00 predicting finished\n",
      "2017-11-06 11:07:27,546 - ALPHA_MIND - INFO - trade_date: 2012-03-15 00:00:00 predicting finished\n",
      "2017-11-06 11:07:27,776 - ALPHA_MIND - INFO - trade_date: 2012-03-29 00:00:00 predicting finished\n",
      "2017-11-06 11:07:28,005 - ALPHA_MIND - INFO - trade_date: 2012-04-12 00:00:00 predicting finished\n",
      "2017-11-06 11:07:28,226 - ALPHA_MIND - INFO - trade_date: 2012-04-26 00:00:00 predicting finished\n",
      "2017-11-06 11:07:28,453 - ALPHA_MIND - INFO - trade_date: 2012-05-10 00:00:00 predicting finished\n",
      "2017-11-06 11:07:28,670 - ALPHA_MIND - INFO - trade_date: 2012-05-24 00:00:00 predicting finished\n",
      "2017-11-06 11:07:28,887 - ALPHA_MIND - INFO - trade_date: 2012-06-07 00:00:00 predicting finished\n",
      "2017-11-06 11:07:29,103 - ALPHA_MIND - INFO - trade_date: 2012-06-21 00:00:00 predicting finished\n",
      "2017-11-06 11:07:29,330 - ALPHA_MIND - INFO - trade_date: 2012-07-05 00:00:00 predicting finished\n",
      "2017-11-06 11:07:29,536 - ALPHA_MIND - INFO - trade_date: 2012-07-19 00:00:00 predicting finished\n",
      "2017-11-06 11:07:29,756 - ALPHA_MIND - INFO - trade_date: 2012-08-02 00:00:00 predicting finished\n",
      "2017-11-06 11:07:29,980 - ALPHA_MIND - INFO - trade_date: 2012-08-16 00:00:00 predicting finished\n",
      "2017-11-06 11:07:30,189 - ALPHA_MIND - INFO - trade_date: 2012-08-30 00:00:00 predicting finished\n",
      "2017-11-06 11:07:30,398 - ALPHA_MIND - INFO - trade_date: 2012-09-13 00:00:00 predicting finished\n",
      "2017-11-06 11:07:30,624 - ALPHA_MIND - INFO - trade_date: 2012-09-27 00:00:00 predicting finished\n",
      "2017-11-06 11:07:30,838 - ALPHA_MIND - INFO - trade_date: 2012-10-11 00:00:00 predicting finished\n",
      "2017-11-06 11:07:31,059 - ALPHA_MIND - INFO - trade_date: 2012-10-25 00:00:00 predicting finished\n",
      "2017-11-06 11:07:31,279 - ALPHA_MIND - INFO - trade_date: 2012-11-08 00:00:00 predicting finished\n",
      "2017-11-06 11:07:31,497 - ALPHA_MIND - INFO - trade_date: 2012-11-22 00:00:00 predicting finished\n",
      "2017-11-06 11:07:31,715 - ALPHA_MIND - INFO - trade_date: 2012-12-06 00:00:00 predicting finished\n",
      "2017-11-06 11:07:31,928 - ALPHA_MIND - INFO - trade_date: 2012-12-20 00:00:00 predicting finished\n",
      "2017-11-06 11:07:32,135 - ALPHA_MIND - INFO - trade_date: 2013-01-04 00:00:00 predicting finished\n",
      "2017-11-06 11:07:32,354 - ALPHA_MIND - INFO - trade_date: 2013-01-17 00:00:00 predicting finished\n",
      "2017-11-06 11:07:32,568 - ALPHA_MIND - INFO - trade_date: 2013-01-31 00:00:00 predicting finished\n",
      "2017-11-06 11:07:32,776 - ALPHA_MIND - INFO - trade_date: 2013-02-18 00:00:00 predicting finished\n",
      "2017-11-06 11:07:33,003 - ALPHA_MIND - INFO - trade_date: 2013-02-28 00:00:00 predicting finished\n",
      "2017-11-06 11:07:33,223 - ALPHA_MIND - INFO - trade_date: 2013-03-14 00:00:00 predicting finished\n",
      "2017-11-06 11:07:33,452 - ALPHA_MIND - INFO - trade_date: 2013-03-28 00:00:00 predicting finished\n",
      "2017-11-06 11:07:33,676 - ALPHA_MIND - INFO - trade_date: 2013-04-11 00:00:00 predicting finished\n",
      "2017-11-06 11:07:33,895 - ALPHA_MIND - INFO - trade_date: 2013-04-25 00:00:00 predicting finished\n",
      "2017-11-06 11:07:34,111 - ALPHA_MIND - INFO - trade_date: 2013-05-09 00:00:00 predicting finished\n",
      "2017-11-06 11:07:34,328 - ALPHA_MIND - INFO - trade_date: 2013-05-23 00:00:00 predicting finished\n",
      "2017-11-06 11:07:34,558 - ALPHA_MIND - INFO - trade_date: 2013-06-06 00:00:00 predicting finished\n",
      "2017-11-06 11:07:34,785 - ALPHA_MIND - INFO - trade_date: 2013-06-20 00:00:00 predicting finished\n",
      "2017-11-06 11:07:35,012 - ALPHA_MIND - INFO - trade_date: 2013-07-04 00:00:00 predicting finished\n",
      "2017-11-06 11:07:35,232 - ALPHA_MIND - INFO - trade_date: 2013-07-18 00:00:00 predicting finished\n",
      "2017-11-06 11:07:35,443 - ALPHA_MIND - INFO - trade_date: 2013-08-01 00:00:00 predicting finished\n",
      "2017-11-06 11:07:35,657 - ALPHA_MIND - INFO - trade_date: 2013-08-15 00:00:00 predicting finished\n",
      "2017-11-06 11:07:35,865 - ALPHA_MIND - INFO - trade_date: 2013-08-29 00:00:00 predicting finished\n",
      "2017-11-06 11:07:36,103 - ALPHA_MIND - INFO - trade_date: 2013-09-12 00:00:00 predicting finished\n",
      "2017-11-06 11:07:36,329 - ALPHA_MIND - INFO - trade_date: 2013-09-26 00:00:00 predicting finished\n",
      "2017-11-06 11:07:36,552 - ALPHA_MIND - INFO - trade_date: 2013-10-10 00:00:00 predicting finished\n",
      "2017-11-06 11:07:36,781 - ALPHA_MIND - INFO - trade_date: 2013-10-24 00:00:00 predicting finished\n",
      "2017-11-06 11:07:37,005 - ALPHA_MIND - INFO - trade_date: 2013-11-07 00:00:00 predicting finished\n",
      "2017-11-06 11:07:37,231 - ALPHA_MIND - INFO - trade_date: 2013-11-21 00:00:00 predicting finished\n",
      "2017-11-06 11:07:37,475 - ALPHA_MIND - INFO - trade_date: 2013-12-05 00:00:00 predicting finished\n",
      "2017-11-06 11:07:37,710 - ALPHA_MIND - INFO - trade_date: 2013-12-19 00:00:00 predicting finished\n",
      "2017-11-06 11:07:37,944 - ALPHA_MIND - INFO - trade_date: 2014-01-02 00:00:00 predicting finished\n",
      "2017-11-06 11:07:38,158 - ALPHA_MIND - INFO - trade_date: 2014-01-16 00:00:00 predicting finished\n",
      "2017-11-06 11:07:38,373 - ALPHA_MIND - INFO - trade_date: 2014-01-30 00:00:00 predicting finished\n",
      "2017-11-06 11:07:38,589 - ALPHA_MIND - INFO - trade_date: 2014-02-13 00:00:00 predicting finished\n",
      "2017-11-06 11:07:38,807 - ALPHA_MIND - INFO - trade_date: 2014-02-27 00:00:00 predicting finished\n",
      "2017-11-06 11:07:39,038 - ALPHA_MIND - INFO - trade_date: 2014-03-13 00:00:00 predicting finished\n",
      "2017-11-06 11:07:39,260 - ALPHA_MIND - INFO - trade_date: 2014-03-27 00:00:00 predicting finished\n",
      "2017-11-06 11:07:39,490 - ALPHA_MIND - INFO - trade_date: 2014-04-10 00:00:00 predicting finished\n",
      "2017-11-06 11:07:39,714 - ALPHA_MIND - INFO - trade_date: 2014-04-24 00:00:00 predicting finished\n",
      "2017-11-06 11:07:39,949 - ALPHA_MIND - INFO - trade_date: 2014-05-08 00:00:00 predicting finished\n",
      "2017-11-06 11:07:40,187 - ALPHA_MIND - INFO - trade_date: 2014-05-22 00:00:00 predicting finished\n",
      "2017-11-06 11:07:40,418 - ALPHA_MIND - INFO - trade_date: 2014-06-05 00:00:00 predicting finished\n",
      "2017-11-06 11:07:40,632 - ALPHA_MIND - INFO - trade_date: 2014-06-19 00:00:00 predicting finished\n",
      "2017-11-06 11:07:40,855 - ALPHA_MIND - INFO - trade_date: 2014-07-03 00:00:00 predicting finished\n",
      "2017-11-06 11:07:41,068 - ALPHA_MIND - INFO - trade_date: 2014-07-17 00:00:00 predicting finished\n",
      "2017-11-06 11:07:41,289 - ALPHA_MIND - INFO - trade_date: 2014-07-31 00:00:00 predicting finished\n",
      "2017-11-06 11:07:41,512 - ALPHA_MIND - INFO - trade_date: 2014-08-14 00:00:00 predicting finished\n",
      "2017-11-06 11:07:41,730 - ALPHA_MIND - INFO - trade_date: 2014-08-28 00:00:00 predicting finished\n",
      "2017-11-06 11:07:41,946 - ALPHA_MIND - INFO - trade_date: 2014-09-11 00:00:00 predicting finished\n",
      "2017-11-06 11:07:42,165 - ALPHA_MIND - INFO - trade_date: 2014-09-25 00:00:00 predicting finished\n",
      "2017-11-06 11:07:42,392 - ALPHA_MIND - INFO - trade_date: 2014-10-09 00:00:00 predicting finished\n",
      "2017-11-06 11:07:42,640 - ALPHA_MIND - INFO - trade_date: 2014-10-23 00:00:00 predicting finished\n",
      "2017-11-06 11:07:42,858 - ALPHA_MIND - INFO - trade_date: 2014-11-06 00:00:00 predicting finished\n",
      "2017-11-06 11:07:43,092 - ALPHA_MIND - INFO - trade_date: 2014-11-20 00:00:00 predicting finished\n",
      "2017-11-06 11:07:43,312 - ALPHA_MIND - INFO - trade_date: 2014-12-04 00:00:00 predicting finished\n",
      "2017-11-06 11:07:43,535 - ALPHA_MIND - INFO - trade_date: 2014-12-18 00:00:00 predicting finished\n",
      "2017-11-06 11:07:43,778 - ALPHA_MIND - INFO - trade_date: 2015-01-05 00:00:00 predicting finished\n",
      "2017-11-06 11:07:43,996 - ALPHA_MIND - INFO - trade_date: 2015-01-15 00:00:00 predicting finished\n",
      "2017-11-06 11:07:44,223 - ALPHA_MIND - INFO - trade_date: 2015-01-29 00:00:00 predicting finished\n",
      "2017-11-06 11:07:44,444 - ALPHA_MIND - INFO - trade_date: 2015-02-12 00:00:00 predicting finished\n",
      "2017-11-06 11:07:44,652 - ALPHA_MIND - INFO - trade_date: 2015-02-26 00:00:00 predicting finished\n",
      "2017-11-06 11:07:44,879 - ALPHA_MIND - INFO - trade_date: 2015-03-12 00:00:00 predicting finished\n",
      "2017-11-06 11:07:45,098 - ALPHA_MIND - INFO - trade_date: 2015-03-26 00:00:00 predicting finished\n",
      "2017-11-06 11:07:45,329 - ALPHA_MIND - INFO - trade_date: 2015-04-09 00:00:00 predicting finished\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-06 11:07:45,546 - ALPHA_MIND - INFO - trade_date: 2015-04-23 00:00:00 predicting finished\n",
      "2017-11-06 11:07:45,760 - ALPHA_MIND - INFO - trade_date: 2015-05-07 00:00:00 predicting finished\n",
      "2017-11-06 11:07:45,968 - ALPHA_MIND - INFO - trade_date: 2015-05-21 00:00:00 predicting finished\n",
      "2017-11-06 11:07:46,178 - ALPHA_MIND - INFO - trade_date: 2015-06-04 00:00:00 predicting finished\n",
      "2017-11-06 11:07:46,412 - ALPHA_MIND - INFO - trade_date: 2015-06-18 00:00:00 predicting finished\n",
      "2017-11-06 11:07:46,642 - ALPHA_MIND - INFO - trade_date: 2015-07-02 00:00:00 predicting finished\n",
      "2017-11-06 11:07:46,870 - ALPHA_MIND - INFO - trade_date: 2015-07-16 00:00:00 predicting finished\n",
      "2017-11-06 11:07:47,101 - ALPHA_MIND - INFO - trade_date: 2015-07-30 00:00:00 predicting finished\n",
      "2017-11-06 11:07:47,333 - ALPHA_MIND - INFO - trade_date: 2015-08-13 00:00:00 predicting finished\n",
      "2017-11-06 11:07:47,548 - ALPHA_MIND - INFO - trade_date: 2015-08-27 00:00:00 predicting finished\n",
      "2017-11-06 11:07:47,767 - ALPHA_MIND - INFO - trade_date: 2015-09-10 00:00:00 predicting finished\n",
      "2017-11-06 11:07:47,989 - ALPHA_MIND - INFO - trade_date: 2015-09-24 00:00:00 predicting finished\n",
      "2017-11-06 11:07:48,227 - ALPHA_MIND - INFO - trade_date: 2015-10-08 00:00:00 predicting finished\n",
      "2017-11-06 11:07:48,465 - ALPHA_MIND - INFO - trade_date: 2015-10-22 00:00:00 predicting finished\n",
      "2017-11-06 11:07:48,691 - ALPHA_MIND - INFO - trade_date: 2015-11-05 00:00:00 predicting finished\n",
      "2017-11-06 11:07:48,906 - ALPHA_MIND - INFO - trade_date: 2015-11-19 00:00:00 predicting finished\n",
      "2017-11-06 11:07:49,141 - ALPHA_MIND - INFO - trade_date: 2015-12-03 00:00:00 predicting finished\n",
      "2017-11-06 11:07:49,368 - ALPHA_MIND - INFO - trade_date: 2015-12-17 00:00:00 predicting finished\n",
      "2017-11-06 11:07:49,580 - ALPHA_MIND - INFO - trade_date: 2015-12-31 00:00:00 predicting finished\n",
      "2017-11-06 11:07:49,795 - ALPHA_MIND - INFO - trade_date: 2016-01-14 00:00:00 predicting finished\n",
      "2017-11-06 11:07:50,014 - ALPHA_MIND - INFO - trade_date: 2016-01-28 00:00:00 predicting finished\n",
      "2017-11-06 11:07:50,230 - ALPHA_MIND - INFO - trade_date: 2016-02-15 00:00:00 predicting finished\n",
      "2017-11-06 11:07:50,452 - ALPHA_MIND - INFO - trade_date: 2016-02-25 00:00:00 predicting finished\n",
      "2017-11-06 11:07:50,682 - ALPHA_MIND - INFO - trade_date: 2016-03-10 00:00:00 predicting finished\n",
      "2017-11-06 11:07:50,914 - ALPHA_MIND - INFO - trade_date: 2016-03-24 00:00:00 predicting finished\n",
      "2017-11-06 11:07:51,140 - ALPHA_MIND - INFO - trade_date: 2016-04-07 00:00:00 predicting finished\n",
      "2017-11-06 11:07:51,359 - ALPHA_MIND - INFO - trade_date: 2016-04-21 00:00:00 predicting finished\n",
      "2017-11-06 11:07:51,571 - ALPHA_MIND - INFO - trade_date: 2016-05-05 00:00:00 predicting finished\n",
      "2017-11-06 11:07:51,782 - ALPHA_MIND - INFO - trade_date: 2016-05-19 00:00:00 predicting finished\n",
      "2017-11-06 11:07:52,006 - ALPHA_MIND - INFO - trade_date: 2016-06-02 00:00:00 predicting finished\n",
      "2017-11-06 11:07:52,224 - ALPHA_MIND - INFO - trade_date: 2016-06-16 00:00:00 predicting finished\n",
      "2017-11-06 11:07:52,436 - ALPHA_MIND - INFO - trade_date: 2016-06-30 00:00:00 predicting finished\n",
      "2017-11-06 11:07:52,646 - ALPHA_MIND - INFO - trade_date: 2016-07-14 00:00:00 predicting finished\n",
      "2017-11-06 11:07:52,864 - ALPHA_MIND - INFO - trade_date: 2016-07-28 00:00:00 predicting finished\n",
      "2017-11-06 11:07:53,091 - ALPHA_MIND - INFO - trade_date: 2016-08-11 00:00:00 predicting finished\n",
      "2017-11-06 11:07:53,310 - ALPHA_MIND - INFO - trade_date: 2016-08-25 00:00:00 predicting finished\n",
      "2017-11-06 11:07:53,521 - ALPHA_MIND - INFO - trade_date: 2016-09-08 00:00:00 predicting finished\n",
      "2017-11-06 11:07:53,736 - ALPHA_MIND - INFO - trade_date: 2016-09-22 00:00:00 predicting finished\n",
      "2017-11-06 11:07:53,941 - ALPHA_MIND - INFO - trade_date: 2016-10-10 00:00:00 predicting finished\n",
      "2017-11-06 11:07:54,167 - ALPHA_MIND - INFO - trade_date: 2016-10-20 00:00:00 predicting finished\n",
      "2017-11-06 11:07:54,376 - ALPHA_MIND - INFO - trade_date: 2016-11-03 00:00:00 predicting finished\n",
      "2017-11-06 11:07:54,586 - ALPHA_MIND - INFO - trade_date: 2016-11-17 00:00:00 predicting finished\n",
      "2017-11-06 11:07:54,809 - ALPHA_MIND - INFO - trade_date: 2016-12-01 00:00:00 predicting finished\n",
      "2017-11-06 11:07:55,023 - ALPHA_MIND - INFO - trade_date: 2016-12-15 00:00:00 predicting finished\n",
      "2017-11-06 11:07:55,249 - ALPHA_MIND - INFO - trade_date: 2016-12-29 00:00:00 predicting finished\n",
      "2017-11-06 11:07:55,472 - ALPHA_MIND - INFO - trade_date: 2017-01-12 00:00:00 predicting finished\n",
      "2017-11-06 11:07:55,689 - ALPHA_MIND - INFO - trade_date: 2017-01-26 00:00:00 predicting finished\n",
      "2017-11-06 11:07:55,905 - ALPHA_MIND - INFO - trade_date: 2017-02-09 00:00:00 predicting finished\n",
      "2017-11-06 11:07:56,122 - ALPHA_MIND - INFO - trade_date: 2017-02-23 00:00:00 predicting finished\n",
      "2017-11-06 11:07:56,334 - ALPHA_MIND - INFO - trade_date: 2017-03-09 00:00:00 predicting finished\n",
      "2017-11-06 11:07:56,555 - ALPHA_MIND - INFO - trade_date: 2017-03-23 00:00:00 predicting finished\n",
      "2017-11-06 11:07:56,772 - ALPHA_MIND - INFO - trade_date: 2017-04-06 00:00:00 predicting finished\n",
      "2017-11-06 11:07:56,995 - ALPHA_MIND - INFO - trade_date: 2017-04-20 00:00:00 predicting finished\n",
      "2017-11-06 11:07:57,224 - ALPHA_MIND - INFO - trade_date: 2017-05-04 00:00:00 predicting finished\n",
      "2017-11-06 11:07:57,455 - ALPHA_MIND - INFO - trade_date: 2017-05-18 00:00:00 predicting finished\n",
      "2017-11-06 11:07:57,678 - ALPHA_MIND - INFO - trade_date: 2017-06-01 00:00:00 predicting finished\n",
      "2017-11-06 11:07:57,917 - ALPHA_MIND - INFO - trade_date: 2017-06-15 00:00:00 predicting finished\n",
      "2017-11-06 11:07:58,139 - ALPHA_MIND - INFO - trade_date: 2017-06-29 00:00:00 predicting finished\n",
      "2017-11-06 11:07:58,381 - ALPHA_MIND - INFO - trade_date: 2017-07-13 00:00:00 predicting finished\n",
      "2017-11-06 11:07:58,611 - ALPHA_MIND - INFO - trade_date: 2017-07-27 00:00:00 predicting finished\n",
      "2017-11-06 11:07:58,842 - ALPHA_MIND - INFO - trade_date: 2017-08-10 00:00:00 predicting finished\n",
      "2017-11-06 11:07:59,075 - ALPHA_MIND - INFO - trade_date: 2017-08-24 00:00:00 predicting finished\n",
      "2017-11-06 11:07:59,307 - ALPHA_MIND - INFO - trade_date: 2017-09-07 00:00:00 predicting finished\n",
      "2017-11-06 11:07:59,532 - ALPHA_MIND - INFO - trade_date: 2017-09-21 00:00:00 predicting finished\n",
      "2017-11-06 11:07:59,767 - ALPHA_MIND - INFO - trade_date: 2017-10-09 00:00:00 predicting finished\n",
      "2017-11-06 11:08:00,006 - ALPHA_MIND - INFO - trade_date: 2017-10-19 00:00:00 predicting finished\n",
      "2017-11-06 11:08:00,225 - ALPHA_MIND - INFO - trade_date: 2017-11-02 00:00:00 predicting finished\n"
     ]
    }
   ],
   "source": [
    "for i, ref_date in enumerate(dates):\n",
    "    model = model_df[ref_date]\n",
    "    sample_test_x = predict_x[ref_date]\n",
    "    sample_test_y = predict_y[ref_date].flatten()\n",
    "    \n",
    "    cons = Constraints()\n",
    "    index = settlement.trade_date == ref_date\n",
    "    benchmark_w = settlement[index]['weight'].values\n",
    "    realized_r = settlement[index]['dx'].values\n",
    "    industry_names = settlement[index]['industry'].values\n",
    "    is_tradable = settlement[index]['isOpen'].values\n",
    "\n",
    "    cons.add_exposure(['total'], np.ones((len(is_tradable), 1)))\n",
    "    cons.set_constraints('total', benchmark_w.sum(), benchmark_w.sum())\n",
    "\n",
    "    if portfolio_industry_neutralize:\n",
    "        ind_exp = industry_dummies[index]\n",
    "\n",
    "        risk_tags = ind_exp.columns\n",
    "        cons.add_exposure(risk_tags, ind_exp.values)\n",
    "        benchmark_exp = benchmark_w @ ind_exp.values\n",
    "\n",
    "        for k, name in enumerate(risk_tags):\n",
    "            cons.set_constraints(name, benchmark_exp[k]*industry_lower, benchmark_exp[k]*industry_upper)\n",
    "\n",
    "    if portfolio_risk_neutralize:\n",
    "        risk_exp = risk_styles[index]\n",
    "\n",
    "        risk_tags = np.array(portfolio_risk_neutralize)\n",
    "        cons.add_exposure(risk_tags, risk_exp)\n",
    "\n",
    "        benchmark_exp = benchmark_w @ risk_exp\n",
    "        for k, name in enumerate(risk_tags):\n",
    "            cons.set_constraints(name, benchmark_exp[k], benchmark_exp[k])\n",
    "\n",
    "    risk_table = total_risks[index]\n",
    "\n",
    "    y = model.predict(sample_test_x)\n",
    "    accuray_table.loc[ref_date, 'test'] = accuray_table.loc[ref_date, 'test'] = mean_squared_error(y, sample_test_y)\n",
    "\n",
    "    is_tradable[:] = True\n",
    "    weights, analysis = er_portfolio_analysis(y,\n",
    "                                              industry_names,\n",
    "                                              realized_r,\n",
    "                                              constraints=cons,\n",
    "                                              detail_analysis=True,\n",
    "                                              benchmark=benchmark_w,\n",
    "                                              is_tradable=is_tradable,\n",
    "                                              method=method)\n",
    "    \n",
    "    final_res[i] = analysis['er']['total'] / benchmark_w.sum()\n",
    "    alpha_logger.info('trade_date: {0} predicting finished'.format(ref_date))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x1c595b44e10>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n1KiB0NBQDB48GM888wzmzp2LuLg47N69GzNnzjQNt6hbty6UUpg0aRKOHTuGZcuW4b333itRnaNG\njUJsbCz69euH7du34+jRo1iyZAm2bNlS4nN99NFHMWDAAAwcOBBvv/02tmzZghMnTmD9+vV4+umn\nr/uBY+jQoUhNTcXIkSPRs2dPBAYGFvsa9957L/7+++9b+vX+p59+ivnz52P//v04duwYZs6cCYPB\ngHr16pm1q1atGv73v//ByckJd911V6lNmVeSPgSAiIgITJs2DVu2bMG+ffswaNCg667u1q5dG5s3\nb8aJEyeQkpJywx9owsLCsG7dOqxduxZHjhzB2LFjsW3btmLr3bRpE+zt7dG5c+dbP2miisBSg5uJ\nKprCZqW4WmFTa11x9XRtbm5uhU7XNmXKFPHz8xMHBwfp1q2bzJ49+5ZuvtuzZ4+0a9dOHBwcJCgo\nSL7++uvrbrbJzc2VsWPHSlBQkNja2oq/v7+89NJLpu0rVqyQ+vXri52dXZHTtXl5ecmwYcMKna7t\naklJSfLQQw+ZprWqWbOmDB061GyatWsVdvPO+++/L0FBQWbrPvroI/H39zct67oun3zyiQQHB4uN\njY3Url37uunaUlJSpE+fPuLk5CReXl7y5ptvFjpd2w8//CDNmjUTe3t7qV69urRu3drsjvribr67\nYvPmzfLwww+Lj4+P2NjYSPXq1aVz587yzTffmG7ILOqzU9j6nTt3Stu2bcXOzk7q1KkjCxcuNJuu\n7dy5c/Lyyy9Ls2bNpFq1auLk5CR169aV119/XVJTU03Hyc/Pl48//ljCwsLE1tZWPD09pVOnTrJ4\n8WJTm6+++koCAgLEwcFBOnToICtWrDC7kfLaG9Kutm3bNunWrZs4OTmJi4uLtG7dWrZt2yYihffv\nxo0bTVOFXW327NnSoUMHcXV1FScnJ2nUqJG88cYbZtPGXXH//fcLAPnll1+K6xYRESkoKJA6derI\n/PnzTeuKOqdr10+bNk1atGhhmo4uPDxcli1bZmp/7ffC5cuXpVu3btKkSZPrvvcLgxLcNFeSPkxO\nTpb7779fXF1dJSAgQL755pvrjhMdHS0tWrQQBweH66Zru/Z9uHDhgvTp00dcXV3Fw8NDhg8fbvq3\n5IrC+nfAgAHy7LPPFnveRBWdEqnCs/MTEZFVmzt3Lj7//HPs3Lmz1Mb5k7mTJ0+iadOm2LVrF4KD\n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\nx3G4/PLLufrqq4/5946ODp566ikqKipISkrirrvuIjMz84wKsaWbcZ5+FNrbMbfeja/wkjPaX0RE\nRETkbJx2wl7Hcfjd737Hvffey+OPP85HH33Evn37jtlm7dq1JCQk8Otf/5q5c+fy4osvdrsA6zg4\nby3DeeKXkDQI338/qlAsIiIiIufcaYPxzp07yc7OJisri0AgQFFRERs2bDhmm40bNzJ79mwApk2b\nxtatW7HWnuCnHcs2H8F56kHsGy9ipl6K795HMEOG9+xIRERERETOwmmHUtTX15Oent71dXp6Ojt2\n7DjpNn6/n/j4eI4cOUJy8rELZqxZs4Y1a9YA8PDDD8NDP4OGOpL+878IfftqzRIRBQKBABkZGW6X\nIb1E/fQe9dRb1E/vUU/7t9MG4xNd+f1mgO3ONgDFxcUUFxd3fe04Dr67H6Zl1Gha6uq6VbD0rYyM\nDGpra90uQ3qJ+uk96qm3qJ/eo55Gp6FDh3Zru9MOpUhPT6fua6G1rq6O1NTUk27T2dlJS0sLiYnH\nTq92wie/7zHMqNHdKlREREREpC+dNhjn5eVRXV3NwYMHCYfDrFu3jilTphyzTUFBAe+99x4A69ev\n54ILLujWsAiTmHzabUREREREzoXTDqXw+/0sWrSIhx56CMdxuOyyyxgxYgTLli0jLy+PKVOmMGfO\nHJ566inuvPNOEhMTueuuu85F7SIiIiIivcbY7kwf0Uf279/v1lPLSWhslLeon96jnnqL+uk96ml0\n6rUxxiIiIiIiA4GCsYiIiIgICsYiIiIiIoCCsYiIiIgIoGAsIiIiIgIoGIuIiIiIAArGIiIiIiKA\ngrGIiIiICKBgLCIiIiICuLzynYiIiIhItNAVYznGPffc43YJ0ovUT+9RT71F/fQe9bR/UzAWERER\nEUHBWEREREQEUDCWbyguLna7BOlF6qf3qKfeon56j3rav+nmOxERERERdMVYRERERARQMBYRERER\nARSMRUREREQABeMByXEct0uQXtTS0gKor15y6NAhAHQLiDdUVlbS3t7udhnSi8rKyjhw4IDbZUgf\nCLhdgJw7u3btYuXKlWRlZXHppZeSnZ3tdknSQ47j0NbWxq9+9SsSExNZvHgxPp/+zu3vdu/ezfPP\nP09mZia33XYbxhi3S5KzsHfvXp5++mmSk5O56aabSEtLc7skOUsVFRW89NJLlJaW8uCDD7pdjvQB\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1c594cafda0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "last_date = advanceDateByCalendar('china.sse', dates[-1], frequency)\n",
    "\n",
    "df = pd.Series(final_res, index=dates[1:] + [last_date])\n",
    "df.sort_index(inplace=True)\n",
    "df['2012-01-01':].cumsum().plot(figsize=(12, 6))\n",
    "plt.title('Prod factors model {1} ({0})'.format(method, model.__class__.__name__))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1c6016d1ef0>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtMAAAFUCAYAAADmqbDMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt8lOWd///XPTOZnIFkBhIo4RTFAx4AU6VolUNsu22/\nlRV3bav2Z+nBrq4W/bnb6vLb9rFbFOthW0+71aVUrdtibfu1brW7ZilFQbqARasgEA5BJRBygJwn\nc899//6YzCSTzGQmB2e4h/fz8fABM3PPPdedW8iHK+/rcxm2bduIiIiIiMiwuTI9ABERERERp1Ix\nLSIiIiIyQiqmRURERERGSMW0iIiIiMgIqZgWERERERkhFdMiIiIiIiOkYlpEREREZIRUTIuIiIiI\njJCKaRERERGREVIxLSIiIiIyQiqmRURERERGyJPpAQzXkSNHMj0EScLv99PY2JjpYcgY0j3NLrqf\n2UX3M/vonmbelClTUj5WM9MiIiIiIiOkYlpEREREZIRUTIuIiIiIjJDjMtMiIiIi8uGybZvu7m4s\ny8IwjEwP50Nh2zYul4u8vLxRXaOKaRERERGJ0d3dTU5ODh5PdpeKpmnS3d1Nfn7+iM+hmIeIiIiI\nxLAsK+sLaQCPx4NlWaM6h4ppEREREYmRrdGOeEZ7rSqmRUREROSUcvLkSX7yk58M+3033HADJ0+e\nHPsBDUHFtIiIiIicUlpbW3n66acHPR8KhYZ83zPPPMP48eM/rGHFlf1hGBERERFxlHvuuYe6ujqu\nvPJKcnJyKCgooKysjHfeeYeNGzeyYsUKjhw5QiAQ4Ctf+QrXX389AJdccgkvv/wyHR0dXH/99Vx8\n8cVs376d8vJyfvzjH49qoWEiKqZFRMTRLNvm6T8d5y9mT6CsyJvp4YhkHevnT2K/d3BMz2lUzMT1\n+a8lfP3uu+9mz549vPLKK2zZsoUvfelLbNiwgWnTpgHw4IMPUlJSQldXF5/5zGf49Kc/TWlpacw5\nDh48yGOPPcb999/PTTfdxEsvvcTy5cvH9DpAxbSIiDhcS5fJr3c3M6koh0/PVjEtko3mzp0bLaQB\nfvzjH/Pyyy8DcOTIEQ4ePDiomK6oqOC8884D4IILLuC99977UMamYlpERBzNtGwAQr2/isjYGmoG\nOV0KCgqiv9+yZQuvvvoqL774Ivn5+VxzzTUEAoFB78nNzY3+3u12093d/aGMTQsQRUTE0UK9LWJD\ntoppkWxRWFhIe3t73Nfa2toYP348+fn51NbW8sYbb6R5dLE0My0iIo5m9hbR5uj2XRCRU0hpaSkf\n/ehHWbJkCXl5efj9/uhrixYt4plnnqG6uppZs2Yxf/78DI5UxbSIiDicpZiHSFZ67LHH4j6fm5vL\nT3/607iv/fGPfwTCxfiGDRuiz3/jG98Y+wH2UsxDREQczVTMQ0QySMW0iIg4WqSIDinmISIZoGJa\nREQcLdLNw1TMQ0QyQMW0iIg4WiQrrZiHiGSCimkREXG0UG8NrQWIIpIJKqZFRMTRojPTykyLSAak\n1Bpv586drFu3DsuyWLp0KcuWLYt5fdeuXTz11FPU1dWxcuVKFixYAMDbb7/NU089FT3uyJEjfPOb\n3+Tiiy/mscceY9euXdEdbW655RZmzJgxRpclIiKnC1MxD5Gsc/LkSX79619z4403Dvu9Tz75JNdf\nfz35+fljP7A4khbTlmWxdu1aVq1ahc/n46677qKqqoqpU6dGj/H7/dx88828+OKLMe8977zzuP/+\n+wFob2/n1ltv5cILL4y+fsMNN0QLbxERkZEIaQGiSNZpbW3l6aefHlEx/e///u8sX7781Cmma2tr\nKS8vp6ysDICFCxeybdu2mGJ60qRJABiGkfA8W7duZd68eTH7pIuIiIxWpIi2FPMQyRr33HMPdXV1\nXHnllVx++eX4/X5efPFFenp6+NSnPsWdd95JZ2cnN910E/X19ViWxTe/+U0aGxs5duwYf/VXf0VJ\nSQnPP//8hz7WpMV0c3MzPp8v+tjn87Fv375hf9DmzZv57Gc/G/Pcz372M55//nnOO+88rrvuOnJy\ncoZ9XhEROb1FFiCainmIfCj+ffsxDrZ0j+k5Z5bk8dWqsoSv33333ezZs4dXXnmFP/zhD/z2t7/l\nt7/9LbZtc+ONN7J161aampooLy/nmWeeAcKz2ePGjeOJJ57gF7/4BaWlpWM65kSSFtN2nL+chpqB\njqelpYXDhw/HRDy++MUvMmHCBEzT5Ec/+hEvvPAC11xzzaD31tTUUFNTA8CaNWti9maXU5PH49F9\nyjK6p9kl2+5n/lETALcnJ6uuK1XZdj/l1Linx44dw+MJl4kul2vYtV8yLpcrev543G43EP5avPrq\nq2zatIlPfvKTAHR0dFBXV8eCBQv453/+Z+69916uvPLKaHTYMAzcbveQ5+8vNzd3VF/vpJ/i8/lo\namqKPm5qaqKkpGRYH/L6669z8cUXx1xU5Bw5OTksXrx4UN46orq6murq6ujjxsbGYX22pJ/f79d9\nyjK6p9kl2+7nidY2ALq6A1l1XanKtvspp8Y9DQQC0YJ2xfyJH8pnmKaZ8LVQKBQ9JhQKccstt3DD\nDTcMOu7ll19mw4YNfO973+OKK67g9ttvx7ZtQqHQkOfvLxAY/HfHlClTUr6OpK3xKisrqa+vp6Gh\nAdM02bJlC1VVVSl/AIQjHpdeemnMcy0tLUB45nvbtm1UVFQM65wiIiLQ18XDVMpDJGsUFhbS3t4O\nwKJFi1i/fj0dHR0A1NfX09jYyNGjR8nPz2f58uV84xvf4M9//jMARUVF0femQ9KZabfbzYoVK1i9\nejWWZbF48WIqKipYv349lZWVVFVVUVtbywMPPEBHRwc7duzgueee46GHHgKgoaGBxsZGzj333Jjz\nPvzww7S2tgIwffp0vv71r38IlyciItku0l9am7aIZI/S0lI++tGPsmTJEhYvXsyyZcv43Oc+B0BB\nQQGPPPIIhw4d4nvf+x6GYZCTk8O9994LwHXXXcf111/PpEmT0rIA0bDjhaJPYUeOHMn0ECSJU+HH\nUzK2dE+zS7bdz1+908RTO49z7sR87v3E9EwPJ+2y7X7KqXFPOzs7o3uBZLt41zqmMQ8REZFTWaSL\nhzZtEZFMUDEtIiKO1rdpS4YHIiKnJRXTIiLiaJEi2tLMtIhkgIppERFxNG0nLjL2HLakblRGe60q\npkVExNEiWWl18xAZOy6XK+U+zU5mmiYu1+jK4dS2hhERETlFRYrokGppkTGTl5dHd3c3gUBgzHc/\nPFXYto3L5SIvL29U51ExLSIijhbJTCvmITJ2DMMgPz8/08NwBMU8RETE0SIxD0vFtIhkgIppERFx\ntMiMtLYTF5FMUDEtIiKOZmk7cRHJIBXTIiLiaKa6eYhIBqmYFhERR+vr5qFiWkTST8W0iIg4mtlv\nO/HTaaMJETk1qJgWERFH6x/vUNJDRNJNxbSIiDha/81aFPUQkXRTMS0iIo7Wf2ZaG7eISLqpmBYR\nEUfrX0BH2uSJiKSLimkREXG0/tEOUzEPEUkzFdMiIuJoZr/ZaPWaFpF0UzEtIiKO1r+ADinmISJp\npmJaREQcrX/MQ908RCTdVEyLiIijhSybHJcBqJuHiKSfimkREXE00wKvJ1xMKzMtIummYlpERBwt\nZNl43eFvZyHV0iKSZiqmRUTE0UK2Ta5bM9MikhkqpkVExNFMC3IjM9MqpkUkzVRMi4iIo4UsO5qZ\n1qYtIpJunlQO2rlzJ+vWrcOyLJYuXcqyZctiXt+1axdPPfUUdXV1rFy5kgULFkRfu/baa5k2bRoA\nfr+fb33rWwA0NDTwgx/8gPb2dmbOnMmtt96Kx5PScERERKJiYx4ZHoyInHaSVq+WZbF27VpWrVqF\nz+fjrrvuoqqqiqlTp0aP8fv93Hzzzbz44ouD3u/1ern//vsHPf/Tn/6Uz3zmM1x66aU88cQTbNiw\ngU984hOjvBwRETmdWLaNZdO3AFExDxFJs6Qxj9raWsrLyykrK8Pj8bBw4UK2bdsWc8ykSZOYPn06\nhmGk9KG2bfPOO+9EZ7AXLVo06JwiIiLJRGaicxXzEJEMSToz3dzcjM/niz72+Xzs27cv5Q8IBoN8\n+9vfxu12c9VVV3HxxRfT1tZGQUEBbrcbgNLSUpqbm0cwfBEROZ1FdjyMzExbinmISJolLabtOP/K\nT3UGGuDxxx+ntLSUY8eO8U//9E9MmzaNgoKClN9fU1NDTU0NAGvWrMHv96f8XskMj8ej+5RldE+z\nSzbdz7aACcD4onyglfyioqy5tlRl0/2UMN1TZ0laTPt8PpqamqKPm5qaKCkpSfkDSktLASgrK+Pc\nc8/l0KFDXHLJJXR2dhIKhXC73TQ3N0ePG6i6uprq6uro48bGxpQ/WzLD7/frPmUZ3dPskk3382R3\nuJi2gz0AnDjZSmNj6hM+2SCb7qeE6Z5m3pQpU1I+NmlmurKykvr6ehoaGjBNky1btlBVVZXSydvb\n2wkGgwC0trayZ88epk6dimEYzJkzh61btwKwcePGlM8pIiISYVqRmIc2bRGRzEg6M+12u1mxYgWr\nV6/GsiwWL15MRUUF69evp7KykqqqKmpra3nggQfo6Ohgx44dPPfcczz00EN88MEHPPHEE7hcLizL\nYtmyZdEuINdddx0/+MEP+PnPf87MmTNZsmTJh36xIiKSXSILEL0ebScuIplh2PFC0aewI0eOZHoI\nkoR+PJV9dE+zSzbdz/q2Hr7xmwPcOG8iP/nTcW76aBmfnp16FDEbZNP9lDDd08wb05iHiIjIqSpk\nxXbzUMxDRNJNxbSIiDhWJDMd6TMdctYPW0UkC6iYFhERx4pkpCMz06b6TItImqmYFhERx4rOTPd2\n87AU8xCRNFMxLSIijhUpniPdPLSduIikm4ppERFxrEjx7DbC/4UU8xCRNFMxLSIijhUpnj0uA7fL\nUDcPEUk7FdMiIuJYkcy022XgNgzFPEQk7VRMi4iIY0Vmot2GgcelBYgikn4qpkVExLEifaU9LnC5\nDLXGE5G0UzEtIiKOFSme3S4Dj2Fo0xYRSTsV0yIi4liRmIcWIIpIpqiYFhERxwrZfZlpt0ut8UQk\n/VRMi4iIY/V180DdPEQkI1RMi4iIY4X6Z6YV8xCRDFAxLSIijhXt5hGNeaiYFpH0UjEtIiKONXjT\nlgwPSEROOyqmRUTEsfq6eYQ7emjTFhFJNxXTIiLiWP0z0+FNW1RMi0h6qZgWERHHCtk2BuAyDDwG\n2rRFRNJOxbSIiDiWadm4XQZA76YtGR6QiJx2VEyLiIhjhSwbT+93MrdL24mLSPqpmBYREccybfpm\npg31mRaR9FMxLSIijhWybDxGJOYBpmIeIpJmKqZFRMSxQpaNq3dm2mMo5iEi6adiWkREHCtk23jC\ntXTvAkQV0yKSXiqmRUTEsUyrX2Za24mLSAZ4Ujlo586drFu3DsuyWLp0KcuWLYt5fdeuXTz11FPU\n1dWxcuVKFixYAMChQ4d48skn6erqwuVycfXVV7Nw4UIAHnvsMXbt2kVBQQEAt9xyCzNmzBjDSxMR\nkWwX7ubRtwBR24mLSLolLaYty2Lt2rWsWrUKn8/HXXfdRVVVFVOnTo0e4/f7ufnmm3nxxRdj3uv1\nevnbv/1bJk+eTHNzM9/+9re58MILKSwsBOCGG26IFt4iIiLD1b/PtLYTF5FMSFpM19bWUl5eTllZ\nGQALFy5k27ZtMcX0pEmTADB6V1RHTJkyJfr70tJSxo8fT2tra7SYFhERGQ3LtnH3y0xrO3ERSbek\nmenm5mZ8Pl/0sc/no7m5edgfVFtbi2ma0aIc4Gc/+xl33nknP/nJTwgGg8M+p4iInN5iMtPaTlxE\nMiDpzLQd5y+mgTPQybS0tPDII49wyy234HKF6/cvfvGLTJgwAdM0+dGPfsQLL7zANddcM+i9NTU1\n1NTUALBmzRr8fv+wPlvSz+Px6D5lGd3T7JJN99Plriff68bv91Nc1EHIas6aa0tVNt1PCdM9dZak\nxbTP56OpqSn6uKmpiZKSkpQ/oLOzkzVr1vD5z3+e2bNnR5+PnCMnJ4fFixcPyltHVFdXU11dHX3c\n2NiY8mdLZvj9ft2nLKN7ml2y6X52BXpwuQwaGxsJdHdhA8cajkdnq08H2XQ/JUz3NPP6R5WTSRrz\nqKyspL6+noaGBkzTZMuWLVRVVaV0ctM0eeCBB7j88sv52Mc+FvNaS0sLEJ753rZtGxUVFSkPWkRE\nBGL7TEd2QlTUQ0TSKenMtNvtZsWKFaxevRrLsli8eDEVFRWsX7+eyspKqqqqqK2t5YEHHqCjo4Md\nO3bw3HPP8dBDD7FlyxZ2795NW1sbGzduBPpa4D388MO0trYCMH36dL7+9a9/qBcqIiLZJzSgz3Tk\nOdyZG5OInF5S6jM9f/585s+fH/PctddeG/39GWecwb/9278Net/ll1/O5ZdfHvec3/nOd4YzThER\nkUFCtt2vmO6dmVZHDxFJI+2AKCIijmVaNm6jb9MWUMxDRNJLxbSIiDhWeAfE8O8jMQ/1mhaRdFIx\nLSIijtW/z7QnGvPI5IhE5HSjYlpERBwrZCvmISKZpWJaREQcKxzz0AJEEckcFdMiIuJYIcuOZqWV\nmRaRTFAxLSIijhWTme6NeaiWFpF0UjEtIiKOFd4BMTbmoZlpEUknFdMiIuJY4ZiHMtMikjkqpkVE\nxJFs2yZk92Wl3eFampBqaRFJIxXTIiLiSJGiWTEPEckkFdMiIuJIkTjH4E1bVEyLSPqomBYREUeK\nzEBH+0xr0xYRyQAV0yIi4kiRmEdvLR3NTms7cRFJJxXTIiLiSKGBM9PKTItIBqiYFhERRzIHZKYV\n8xCRTFAxLSIijjRwZtrjin1eRCQdVEyLiIgjmb0z0O5oZjoyM52pEYnI6UjFtIiIOJLVu9BwUMxD\nM9MikkYqpkVExJEGZaa1AFFEMkDFtIiIOFJkoWFkB8RIZlq1tIikk4ppERFxpL6Z6fDjSMxDM9Mi\nkk4qpkVExJEim7MM7DOtzLSIpJOKaRERcaRQtJtHZAFi7PMiIumgYlpERBwpNGABomEYuAwwtZ24\niKSRimkREXGkgZlpCEc+FPMQkXRSMS0iIo40MDMN4ciHYh4ikk6eVA7auXMn69atw7Isli5dyrJl\ny2Je37VrF0899RR1dXWsXLmSBQsWRF/buHEjv/rVrwC4+uqrWbRoEQAHDhzgscceo6enh3nz5vHl\nL38ZwzAQERFJxcA+0+HfawGiiKRX0plpy7JYu3Ytd999N//yL//C5s2bef/992OO8fv93HzzzVx2\n2WUxz7e3t/P8889zzz33cM899/D888/T3t4OwJNPPslNN93Eww8/zNGjR9m5c+cYXpaIiGS7gX2m\nIVxYKzMtIumUtJiura2lvLycsrIyPB4PCxcuZNu2bTHHTJo0ienTpw+aWd65cycXXHABRUVFFBUV\nccEFF7Bz505aWlro6upi9uzZGIbB5ZdfPuicIiIiQwnFy0wr5iEiaZa0mG5ubsbn80Uf+3w+mpub\nUzr5wPeWlpbS3Nw8qnOKiIgAhHprZsU8RCSTkmam7Tj/wh9NttkwjLjnTKSmpoaamhoA1qxZg9/v\nH/FnS3p4PB7dpyyje5pdsuV+5n0QBGCSz0dpoRcAr+cQnpzcrLi+VGXL/ZQ+uqfOkrSY9vl8NDU1\nRR83NTVRUlKS0slLS0vZtWtX9HFzczPnnntu3HOWlpbGPUd1dTXV1dXRx42NjSl9tmSO3+/Xfcoy\nuqfZJVvu58m2tvCvJ1qwutzhJ22Lzu7urLi+VGXL/ZQ+uqeZN2XKlJSPTRrzqKyspL6+noaGBkzT\nZMuWLVRVVaV08rlz5/Lmm2/S3t5Oe3s7b775JnPnzqWkpIT8/Hz27t2Lbdts2rQp5XOKiIhAvx0Q\n+30nCy9AVMxDRNIn6cy02+1mxYoVrF69GsuyWLx4MRUVFaxfv57Kykqqqqqora3lgQceoKOjgx07\ndvDcc8/x0EMPUVRUxPLly7nrrrsAuOaaaygqKgLgq1/9Ko8//jg9PT3MnTuXefPmfbhXKiIiWSXS\ntcPdL3rocYGlBYgikkaGPZwA8yngyJEjmR6CJKEfT2Uf3dPski33c/2fG/mPtxr51RfOii5CvPN3\nhyjyuvnukooMjy59suV+Sh/d08wb05iHiIjIqSgS5+jXzEPbiYtI2qmYFhERRwpZNh5XbIcpt2vk\nfaZDls2GAydVjIvIsKiYFhERRwrZsXlpALfBiHdAfLexix++Xs87DZ1jMDoROV2omBYREUcKWXbM\nhi0wuphHVzBchXdpP3IRGQYV0yIi4khmnGJ6NDGPQG8R3WMq5iEiqVMxLSIijhSybTwDNuR1GyPf\nTjzQuz95T0gz0yKSOhXTIiLiSKZF3JnpkaY0ojPTIc1Mi0jqVEyLiIgjhbt5DMhMG8aIN23pVjEt\nIiOgYlpERBwpZNu4BnTzcI1iO/FIzCOgmIeIDIOKaRERcaRIn+n+PK5RZKZ7Z6YDWoAoIsOgYlpE\nRBwpbmbaMBhpSqMvM62ZaRFJnYppERFxpHiZafco+kz3dfPQzLSIpE7FtIiIOJJp24N2QPSMJjOt\nmWkRGQEV0yIi4kiWZeMe8F3MZTDymEdkAaIy0yIyDCqmRUTEkeJlpkeznbha44nISKiYFhERRwrv\ngDg4M23DiHpNR2akFfMQkeFQMS0iIo5kWnacbh7hX0cyOx0pojUzLSLDoWJaREQcKV6f6UhxPZIt\nxbUAUURGQsW0iIg4Ushm0A6IkVZ5oRHEPLpNLUAUkeFTMS0iIo4Ut890b3E9kphHQDEPERkBFdMi\nIuJIcTPTrr7XhksLEEVkJFRMi4iII8XLTEdmqodbS4csO1qAa2ZaRIZDxbSIiDiSaTNoB8RIhnq4\nM9ORiIfH5ayZ6U2HWnnw9/szPQyR05qKaRERcSQrTswjugBxuMV0b8Sj2OvGtEaWuc6EN46089/v\nNmR6GCKnNRXTIiLiSGa8BYi939WGm9SItMUrznUDzol6BEI2HT0h7BF0LxGRsaFiWkREHClk29FN\nWiJG2s0jspX4uGgx7YyoR8C0sOlr6yci6adiWkREHMe2bUyLhDGP4Weme2MeTpuZ7v1HQNdIdqkR\nkTGhYlpERBwnUisPjHlEHg5305aBMY+AQ2amIzPSncFQhkcicvrypHLQzp07WbduHZZlsXTpUpYt\nWxbzejAY5NFHH+XAgQMUFxezcuVKJk2axKuvvspvfvOb6HGHDx/mvvvuY8aMGXz3u9+lpaUFr9cL\nwKpVqxg/fvwYXpqIiGSrSLE8sJtH3wLE4Z0vMhNd7O2dmXZIbCJS9HcFnVH8i2SjpMW0ZVmsXbuW\nVatW4fP5uOuuu6iqqmLq1KnRYzZs2EBhYSGPPPIImzdv5tlnn+X222/n4x//OB//+MeBcCH9/e9/\nnxkzZkTfd9ttt1FZWTn2VyUiIlktEuNwD/j5qnuEMY9oZjrPmTGPThXTIhmTNOZRW1tLeXk5ZWVl\neDweFi5cyLZt22KO2b59O4sWLQJgwYIFvP3224NWFr/22mtceumlYzdyERE5bUVmnhNtJ26NNObh\nddoCxEjMwxnjFclGSYvp5uZmfD5f9LHP56O5uTnhMW63m4KCAtra2mKOef311wcV048//jh/93d/\nx/PPP6+2PiIikrJQdGZ6bLYTd+oCxMiMumIeIpmTNOYRr8g1BmTUkh2zb98+vF4v06ZNiz532223\nUVpaSldXFw8++CCbNm3iiiuuGHSempoaampqAFizZg1+vz/ZkCXDPB6P7lOW0T3NLtlwP622AAAT\nxhXHXEuL3Q7UUVhUPKxr9NR1AzCtzAd8QG5B0Sn/NbJsO/qPAMObf8qPV1KXDX9GTydJi2mfz0dT\nU1P0cVNTEyUlJXGP8fl8hEIhOjs7KSoqir6+efPmQbPSpaWlAOTn53PZZZdRW1sbt5iurq6muro6\n+rixsTHFS5NM8fv9uk9ZRvc0u2TD/Tze3gNAZ0d7zLW0nQwX2S0nWxnOJTafbAcg1BX+tbHl5LDe\nnwmBfu3wjp9opbHRm8HRyFjKhj+jTjdlypSUj00a86isrKS+vp6GhgZM02TLli1UVVXFHHPRRRex\nceNGALZu3cqcOXOiM9OWZbF169aYYjoUCtHa2gqAaZrs2LGDioqKlActIiKnt4SZ6RH3mbbIcRnk\necLvd0LMo7tfMa2Yh0jmJJ2ZdrvdrFixgtWrV2NZFosXL6aiooL169dTWVlJVVUVS5Ys4dFHH+XW\nW2+lqKiIlStXRt+/e/dufD4fZWVl0eeCwSCrV68mFAphWRbnn39+zOyziIjIUMyErfHCvw6zliZg\nWuR6DLy9oWsnLEAM9GvfpwWIIpmTUp/p+fPnM3/+/Jjnrr322ujvvV4vd9xxR9z3zpkzh9WrV8c8\nl5eXx3333TfcsYqIiAB9CxAHb9oy8h0Qc90uvL37kwecMDMd0sy0yKlAOyCKiIjjJOoz3bdpy/D7\nTOd6+oppZ8xM941RM9MimaNiWkREHCfRduKRzPTwtxO3yfUYGIaB1204YgfE/jGPLm0nLpIxKqZF\nRMRxIjPTLmPgpi3hX4c7sRwIWeT2TnN73YajZqYn5OdoZlokg1RMi4iI4yTKTHtG2s2jd2YawOt2\nOSoz7StQMS2SSSqmRUTEcRJlpiMz1cOPeVjkefrPTJ/6xXQk5uEr9GoBokgGqZgWERHHSdRnOtIa\nb7gLEPvHPHLdLkfFPEoLvZqZFskgFdMiIuI4oQR9pg3DwGWAOdzMtGnjjcQ8PA5ZgNgv5hG0bIIO\n+AeASDZSMS0iIo4TisY8jEGvuQ0Da9Qxj1O/MO3uLfhLC8LbiCvqIZIZKqZFRMRxEmWmw88ZI9pO\nPNftrAWIAdPC4zIYlxfef01RD5HMUDEtIiKOE6l1PcbgmWmPa3iZadOyMS3IddwCRIs8j0Gh1w1A\n13CzLSIyJlRMi4iI45hJYh7DqYUjkY5IazynLEDsNsNboBd6NTMtkkkqpkVExHES9ZmG4cc8Itnj\n6KYtDlo0Oo2YAAAgAElEQVSAmOtx9c1Mq5gWyQgV0yIi4jh93TwGv+ZxMawFiJEWc7kOW4AYMC1y\nPQYFueFiWjPTIpmhYlpERBwnUuvGi3m4DGNYrfH6immnLUC0yfP0j3mEMjwikdOTimkREXEcc4iY\nh8dlDGsBYqRwznPHLkC0h9leL926zXAHkkjMQzPTIpmhYlpERBxnyD7TLmNY24kPjHlEstPBYbbX\nS7dAyCbX4yLP48JlKDMtkikqpkVExHGGyky7jeG1xgtEFiD22wEROOUXIYYz0y4MwyDf49LMtEiG\nqJgWERHHMS1wGeHtwwcKd/NI/VyRbblz+8U8+j9/qor0mQbIz1ExLZIpKqZFRMRxQpYdNy8NvZnp\nEcU8+hYgAqf8xi2RPtMABTkuurQAUSQjVEyLiIjjmLaNO86sNAw/5hHtMx3NTPfGPE7hYtq27Wif\naYD8HLdmpkUyRMW0iIg4TnhmOv5ro495RGamT93i1LRsLJtozCM8M33qjlckm6mYFhERxwlZ8Tt5\nQHg78eFs2hJZaBjJSjthAeLA2fQCZaZFMkbFtIiIOE5oqJjHMLcTD4QsvG4jWpw7YQFiZGx50ZiH\nZqZFMkXFtIiIOI5p2Qlnpj2u4WamrWhOGvriHqdyZrq7N8cSKfw1My2SOSqmRUTEcYbKTLsMg+HU\nwQHTxtvvZF4HLECMRFDy+sU8ukxrWPEWERkbKqZFRMRxzCEy08PfTtyKFqXgjAWI3QN2bczPccU8\nLyLpo2JaREQcx7IT95kedmZ6QMwjsgAxYNrY7a3YHe2jG+yHINA7a54XjXm4ART1EMkATyoH7dy5\nk3Xr1mFZFkuXLmXZsmUxrweDQR599FEOHDhAcXExK1euZNKkSTQ0NHD77bczZcoUAM4880y+/vWv\nA3DgwAEee+wxenp6mDdvHl/+8pfj7mQlIiIykGnZuIbqMz3MmEdu3JiHhfXovWC4cH9rzajGO9YG\nzUz3/qpiWiT9khbTlmWxdu1aVq1ahc/n46677qKqqoqpU6dGj9mwYQOFhYU88sgjbN68mWeffZbb\nb78dgPLycu6///5B533yySe56aabOPPMM7n33nvZuXMn8+bNG8NLExGRbDVUZnokMY/8fieLLEAM\ndAfgwF6wLez3D2JMnTmqMY+lwIBiuqA35qGOHiLplzTmUVtbS3l5OWVlZXg8HhYuXMi2bdtijtm+\nfTuLFi0CYMGCBbz99tvYQyyCaGlpoauri9mzZ2MYBpdffvmgc4qIiCRi2gzZGm9424nHzky7XQZu\nA3qOHwc7XJzaf/iv0Q14jAWiCxD7unmAZqZFMiFpMd3c3IzP54s+9vl8NDc3JzzG7XZTUFBAW1sb\nAA0NDfz93/893/nOd9i9e3fK5xQREUkkPDM9VtuJWzHFNIQXIfY0N4EnBy5aiP3HjdiB7lGNeSwN\n3LUxPzozHcrYmEROV0ljHvFmmAdmmxMdU1JSwuOPP05xcTEHDhzg/vvv58EHHxxy1nqgmpoaampq\nAFizZg1+vz/l90pmeDwe3acso3uaXbLhfhruD8jPdce9juLCdkL2iZSvMWgfYHxhfszxeTn7CTac\nJOfs8ym6+gZadmyhaPdO8qs/O2bXMBpubxcAHymfiMfjYWqZHziEO7fQ8fdWsuPP6OkkaTHt8/lo\namqKPm5qaqKkpCTuMT6fj1AoRGdnJ0VFRRiGQU5ODgCzZs2irKyM+vr6uOcsLS2N+/nV1dVUV1dH\nHzc2Ng7vCiXt/H6/7lOW0T3NLtlwPwM9PRS4PHGvoyfQRciyU77G7h4T2+yJOd5jWHR3dGKeeRYn\nJ06ByRW0vvQ8HXMXjNk1jEZzazsuA040N5EzcSLdbScBaGg5SWOjO8Ojk9HKhj+jThdpnpGKpDGP\nyspK6uvraWhowDRNtmzZQlVVVcwxF110ERs3bgRg69atzJkzB8MwaG1txbLCP4o6duwY9fX1lJWV\nUVJSQn5+Pnv37sW2bTZt2jTonCIiIokM1WfabRhYNilvYDKwzzRArtlDj8uDcfb5GIaBcfkn4eBe\n7MMHRj32sRAww2OO/KQ4X5lpkYxJOjPtdrtZsWIFq1evxrIsFi9eTEVFBevXr6eyspKqqiqWLFnC\no48+yq233kpRURErV64EYNeuXTz33HO43W5cLhdf+9rXKCoqAuCrX/0qjz/+OD09PcydO1edPERE\nJGVDZqZdfce43EO3XDUtG9Mips80gLenix5PLsycDYDxsSXYv3oa+9X/wrjub0Z/AaM0cAt0t8sg\n122omBbJgJT6TM+fP5/58+fHPHfttddGf+/1ernjjjsGvW/BggUsWBD/R2KVlZU8+OCDwxmriIgI\nEC6Ch5qZhnCv6Zwk5xnYYi4ip7udnsLxGDleAIzCIoyqS7G3bsRefiNGXv7oLmCUAiF70Jjzc1xq\njSeSAdoBUUREHGeoPtORIjuVXRAjOwnmevoKc7ujndyuNnoKimOONS7/JHR3YW97dYSjHjuBOB1I\nCnJcdKqbh0jaqZgWERHHCdkk3AExEv9IpT1edGba3e/b4b638YaC9OQWxh5ceQ5MmYa9KfM9p8OZ\n6djrz89xK+YhkgEqpkVExHGGykxHnk5lS/G+mEe/mek9b+MlRI/bG3NseCHip+DQPuz9745s4GOk\n27Rj/wFAeGZaMQ+R9FMxLSIijmPaiTPTw5qZjsQ8+hWm9p4/4y0soCfO+41Ll0LxeKxfPzOsPRPG\nWiCUKOahYlok3VRMi4iI44QsG0+CRh3Dykz3zkxHWuPZHW3w/iG848dHC+3+jLx8jM/8Nez5M+ze\nOcLRj178mIeLLlPFtEi6qZgWERHHGbrPdPjXUAozxwEzfIw3UpjufQdsm9wSHz1m/Pcbl38KfJOw\nfpW52emAObibh2amRTJDxbSIiDiOZSfOTPfFPJKfp3tAazx7z5/B68VbUkJPghMYOTkYn/sC1NXC\nG1tGMPrR644b83DTFQxlNH4icjpKqc+0iIjIqcKybSy7r5/0QJEZ6+COLVg5AbAB2wa3G+PsCzAm\nlkePDfQWzHnufsV05Tnkej2E7HCcJN4MuLFgEfbvfoX1f3+Ka+4CDHffFt52SxMc2ocx78Pbejww\nYNMWCMc8TAuClo03yWY1IjJ2VEyLiIijRBYWuhP1me4tss3f/gK77f2Y12yAmbMxLrkCo+oyAmb4\nee/RQ1iNH8D7hzCWXR8tRgMhiwKXm4EMlxvXX96A9fg92Fv+B+Pjn8C2Qti/fwn71z+FQBeu7z6C\n8ZHpY3LN/UV2bRy4BXq+p29LcW+iL46IjDkV0yIi4iiRNXYJM9OR7cQrKnHd+M9gABjhDVfe/CP2\nH/+A/fMnsdevpavySpi6lJz7v41tBcHjwTi/Cm9X+CQ9IZuCRNsozr0EZs7GfvHn2JMrsH7+ZDj6\nMessOLAH+9C+D6WYjtfOD8KZaYCuoMWEvDH/WBFJQMW0iIg4SmRmOllm2iqdiFHii3nNKL8aPnk1\n9pHD2Ntepae1BIC8r9+Jq2wyTJyMkZtL7v4TAAkXIUK477Tr6i9hPbgK675vwbgJGF//O4yLFmLd\n9kU4VAuXVo/6egeK184P+oppLUIUSS8V0yIi4iiRLh2JMtMuK7yldqi4JOE5jCnTMK66jp43GvDu\nbcF90cdiXo/EJBItQoye5+wLMJb+H7BtjKu+iFFQFH5heiV2XW1K1zNcgQGLJiPyo8W0thQXSScV\n0yIi4ihmssx0R2v4uOIJSc8Vb/MTIJqZ7klhG0XX57826DljxhnYG36LbQYxPIlyIiPT1xt7YMwj\nnO3WzLRIemmFgoiIOEpksjhRzMPd2gKAlUIxHd6We/B5+i9AHJHpZ4AZhCOHR/b+IXT3Rk8GLkDs\nn5kWkfRRMS0iIo6SLOYRKaZDReOSnitgxp+ZznX3LUAcCWPGGQDYdftH9P6hRAp8ZaZFTg0qpkVE\nxFH6Yh4JiumTzeHjCpIX0z2hwdtyQ9+OiEMtQBzSxMmQXxhehDjGBm40E5GvmWmRjFAxLSIijtLX\nzSP+6+6TTQBYRvJvcQHTHjTDC6kvQEzEMAyYccaHsggxsgX6wNZ4XreB29DMtEi6qZgWERFHiSQv\nEnbzONEYc9xQuk0L7xALEAMpnOTwiQCNncFBzxvTz4D3D2EHB782Gn0LEGPHbRgGBTkuutTNQySt\nVEyLiIijJIt5eFoaY44bSiBkx495RLt5JJ/lvWfT+zyx7dig540ZZ0DIhA8OJT3HcPRlpgePOz/H\npZlpkTRTMS0iIo4y1KYttm3jajkec9xQAqYVN+aR6gLEYMjiaFuQ2qbuwS9O712EOMa56e5ozGPw\nuPNz3CqmRdJMxbSIiDjKkH2m207gCYYL20jXj6EEQvag7DGkvgDxaHsQG2jqMjnRZca+6JsERcXh\nLcbHUMC0MOibPe8vHPNQMS2STiqmRUTEUSITzp54memmRtxWuJhMZe1gopnpHJeBQfI+0/VtPdHf\n72+OnZ02DAOmnzHmM9Phdn5G+PwDFCjmIZJ2KqZFRMRRIjPTrniZ6eYG3HbvduKpxjzixCUMwyDH\nbSSNedS39S0u3N8yOOphTD8TjtRh9wSSjiVV3aYdd8ygzLRIJqiYFhERRxkyM910HLcdLibNJDEP\n07IJ2YNbzEXkuo2kCxDr23oo8rqYUpwzaGYaehchWha8d3DI8wxHIBR/Nh1QNw+RDFAxLSIijmJG\nd0CM82Lzcdy5uUDymelIi7lEhanX7UphZrqHycVeZpXmcSBOMc30SoAx7TcdMONvNANQoAWIImmn\nYlpERBwlMlmcaGbaVerHZSTPTPftJBi/MPV6jKQLEI+0BZlc7KWyNI+GDpPWwIBZ4RI/FI8f050Q\nA0liHoGQnVLERUTGhoppERFxlNBQfaabG8A3CbdhJO3mEZl1Hrj5SYTX7RpyAWIwZNHYGWRycQ6V\npXkAg2anwzshnol9eP+QYxmO7gQ5bwjHPAC6TM1Oi6SLJ5WDdu7cybp167Asi6VLl7Js2bKY14PB\nII8++igHDhyguLiYlStXMmnSJN566y2effZZTNPE4/Fwww03cN555wHw3e9+l5aWFrxeLwCrVq1i\n/PjxY3x5IiKSbULRmEe8bh7HMWbOxu0yxiDmYQy5A+Kx9iCWDVOKvcwqCRfT+5u7mTu5MOY4Y/oZ\n2G+/gR3oxsjNG3JMqQiEbCbkJJiZ7i2yu4IWRV73qD9LRJJLWkxblsXatWtZtWoVPp+Pu+66i6qq\nKqZOnRo9ZsOGDRQWFvLII4+wefNmnn32WW6//XaKi4v51re+RWlpKYcPH2b16tX86Ec/ir7vtttu\no7Ky8sO5MhERyUqJ+kzb3V3Q0RaemW6HJAmNfpufDLEAcYgZ3kgnj8nFXopz3ZQVJV6EaNsWvHcA\nzjh36EGlIJyZzon7WmRmWrlpkfRJGvOora2lvLycsrIyPB4PCxcuZNu2bTHHbN++nUWLFgGwYMEC\n3n77bWzbZubMmZSWlgJQUVFBMBgkGAwO/AgREZGUJcxMN4d3PqR0Ih4jhZnpyLbcQ8Q8hlqAeKS3\nx/Tk4vBPWGeV5MUtpqOLEP93E/axI9jW6ArdSJ/pePKjxXQ4ux0M2Ww53MpbRztG9ZkikljSmenm\n5mZ8Pl/0sc/nY9++fQmPcbvdFBQU0NbWxrhx46LH/PGPf2TmzJnk5PT9a/rxxx/H5XJxySWXsHz5\n8rgN6EVERPozE2Wme4tpwzcR1wdjEPPwGPR0DjUz3UOh10WxN/z+M0rzeP29Ntp7QjERC2OCDz4y\nHfv3L2H//iXIy4epMzGmTofSiVDixyjxQ6kf/GVJvxd2h+whWuOFP7fuRIDtH3RQs/8EJ7pDjM9z\n89TVZ+j7rMiHIGkxbcdZwDHwD2OyY9577z2effZZ/uEf/iH63G233UZpaSldXV08+OCDbNq0iSuu\nuGLQeWpqaqipqQFgzZo1+P3+ZEOWDPN4PLpPWUb3NLs4/X7mFYRnf8sm+snP6StaOwNdtAGlZ5yN\nd1cdHm/ukNfpbQ5/7yqfWIq/tGDQ68UFTZitZsJzNAaOMq2kgIkTJwIwb6abZ948TlMolxn+CTHH\n2v/yNObhA5gH9xI8sBfz4F7Mba9hd7SFX4+Mae7FjP/mP+KaUJpw3D2hvUwoLoyOq//9nGJ0AHX8\n6/8ewwAWzizBV+jlN28fI5BTxNQJ+QnPK6cOp/8ZPd0kLaZ9Ph9NTU3Rx01NTZSUlMQ9xufzEQqF\n6OzspKioKHr8Aw88wC233EJ5eXn0PZH4R35+Ppdddhm1tbVxi+nq6mqqq6ujjxsbG4d5iZJufr9f\n9ynL6J5ml1P5frZ2mxxoCQxaxBdzTFs7ACeam+joN0NrHT4IbjfNlo1hW3R0dQ95nY0tJwHobD1J\no9U56HXb7KGrx0x4jsPNHZzly4++7nebAPzp0DGm55uD3zDeB3M/Fv6PcM7S7u6CliZoacSuq6Xn\nNz/j+O1fwvW1OzFmnzfoFJZtEzAt7GDftfW/n3khi0umFjFtfC6fOGMCk4pyqDsR4Ddvw+Y9H7C0\ncsKgc8qp51T+M3q6mDJlSsrHJs1MV1ZWUl9fT0NDA6ZpsmXLFqqqqmKOueiii9i4cSMAW7duZc6c\nORiGQUdHB2vWrOELX/gCZ599dvT4UChEa2srAKZpsmPHDioqKlIetIiIZKeHt9bznQ3vcay9J+Ex\nkcz0oJhHUwNM8GG43Cl284i0xhv+DojBkM3xjiCTx/VFF8fnefAXeNjfnPrW4UZePsbkqRjnzsX1\nF9fguvsB8OZhPbAK66VfDMpXB6KLJhPnvO++YirXz53IpKLw2CrGeyn0uth9vCvlcYlI6pLOTLvd\nblasWMHq1auxLIvFixdTUVHB+vXrqayspKqqiiVLlvDoo49y6623UlRUxMqVKwH43e9+x9GjR/nl\nL3/JL3/5SyDcAi83N5fVq1cTCoWwLIvzzz8/ZvZZREROP3+q72DbB+GFcpsOtfJX58X/Mbdp2bgM\ncA2MHDYdB184cuFJoc90NDM91ALEBC1BjnX0YNkwucgb83xlaYJFiCkyKmbi+v8ewn76MexfP4Nd\ntx/333y7b8yhoXPe8bgMg7P9+SqmRT4kKfWZnj9/PvPnz4957tprr43+3uv1cscddwx63/Lly1m+\nfHncc953333DGaeIiGSxkGWzdscxyotyGJfr5g+HWrlmji/ugrmQbcfvMd18PBqNcLtS2E68tzDN\nibsveXgBYtCysWx7UOFe39rXFq+/WaV5/O/77XQGQ9HFgMNl5BXA1+6EEj/2f/8a+0RTeBEjff8A\nSDSbnsjZE/PZcaSDtkCI4lz1nxYZS9oBUSSOre+18d+1JzI9DJHTxu/2neC9kz3cOH8SS2aN572T\nPRxsiR+XCIbsQREPOxSCE03RmelwzGPoz+w2bbxuY1ChHOHtnf0NxmmPV98bQ5lSHNvv+YzSPGzg\nUIKxp8owDIyLFoYf7N8TfT5ZzCORcyaGFx6+O4zZ6SOtiaM2ItInpZlpkdPNr3Y1caS1hysrx6uV\nlMiHrC0Q4mdvHef8sgIWTC2ircfiye3H+MOhVmaVxu4YGAzZvP5eGzNLcmNPcqIZLCvcao7w7ohm\nCjGPRFuJQzgzDeEdB3MHfLc80tpDYY5r0CxvZLz7m7s5d9LgDiHDMm0WeHKwD7wbLay7ozPTwyum\nz5zgxW3A7v1HqDrRjt16AtpOgkG4VV9uPsa0SozJ4Q3Z3jzawT/+z3t8/5PTOcufj73/Xaxn/xVO\ntsC0WRgVM6GiEmPKNPB6we0Bjzv8a0GR/t6U04qKaZEBLNum7kSAbtOmvi3IlHHe5G8SkRH7+Z8b\n6QhafPWiSRiGwbhcN/OnFLHpUCtfmjsxZha6Zv8JGjtNbrmkPPYkTQ0AGL5JAHhSinnY0YI5nsjM\ndHgRYmzRXN8eZHKxd1DRWJrvoSTPParcdIThyYHpldj73+03Zqt3bKkVq3ZnO9ZPHiZn5x+ZNe8W\ndreYWDv/Lf6xgHHRpRj/5/Psbgp3U3n7SCtn1vwUe8N/QokPY8487PcOYe9+E0Ih4n2FjeqrMK79\nyrCuVcTJVEyLDHCsPRjdZnhvU5eKaZEP0XsnA7y0t4UrKycwo6RvFvqKGePY9kE77zR0ckF5uLAL\nhix+8U4TZ/nzmTegdZ7db/dDAJfLSLh4MCK8k2DiGd5IwRrvPPVtPcz25Q16HsKLEA8Mo6PHUIxZ\nZ4U3ezGDGJ6cfh1Iks9M2x8cxnp8NTQ1YCz9HGfnjuO/OscTunMNORMmQPH48IHdXdDVGd6hccOL\n2Ds2s++y28EzmT2v/RH7Ty9iLP40xtVfCue5ATsYhCOHsY++D6YJITNcXG9/DXtLDfbVN2Dk6O9O\nOT2omBYZ4NCJvm+Cexu7WDRzfAZHI5Ld1r3RQJ7HxRcvjO3ccfHUIvI8Lv5wqDVaTNfsP0lTp8lt\nCyYPjhH0zkxHimmPYdBlJw5NB0Phn0AVehMvxvP2LvIb2B4v0hbvihnj4r2NWaV5vFHfRHeSGEkq\njMqzsV95Ad47CDNnJ+1AEmHv2Iy17oeQl4/r/12Ncea5nHu4lRdfPcJB3wzO8vfbvKUg/PU1/vJ6\n7E9chf3KCxxoCT+3t2AKxp334jprTuy4csKz5kbvVunRz51YjvXD78Jb2yGS+RbJclqAKDJAXUsA\nAzjTl8eextH/qFZE4jvW3sOOIx0sO6eUCXmxczu5HhcLpxWx5XAbPSErOit9zsR8LiyPk0VuboSi\ncRi54Sy122VEtx2P57m3G3m/tYflcxLvNBhpPxcYsAAx2havOP7M65xJBVg2vHGkPeG5UzYrvEdD\nJOrRnaSbh23bWL9+Buvf7oOPTMe16iGMM88F4JyJ4a/b7uODN6iJMAqLOfnJz9PsHcdkb4iWnCKa\nps5OfbznXAjjS7Fe35D6e0QcTsW0yACHTnQzudjLBWUFHDrRnXDTBhEZnVfrwltpL5oZf4b3ihnj\n6QxabP+gnf+uDc9Kf/58f9zFbXZzA/TmpSHcGs9K8Ed3b2MXz7/TxJJZ47hkanHC8UVjHgP+Djja\nFm6LNyVBMX1+WQEl+R42HmxNeO5UGSU+KPXDgXBHj0hhn3Bm+tA+7Jd+gbFwKa4774m21AMoyfdQ\nXpSTtN90JO/9F+dNBsJfr5TH63ZjXHIFvL0Du2301y/iBCqmRQY4dCLAjJJcZvvzMS3GLPsoIrFe\nq2tlti+PsqIhitI8NzX7T/LLd5o4N9GsNEC/DVsgcTePgGnxw9frKcn38JWLyoYcX3QB4oDM9JG2\ncMu4yQPa4kU/22VwxYxx7DjSTmsgNORnpMKYdfagmelEm7bYb/4vuFwYf70iHMUY4OyJ4c1b7CE6\nndQ2dWMAS2aNx+s22DOMYhrA+NiicH5626ZhvU/EqVRMi/TTbVocbQsyfUK4mAaG/Y1ERJJ7vzXA\nwZYAH0+QO4ZwUXrZjHHsONJBU5fJFy5IMCtt2+ENW0onxry3PRCivi22V/J/vBWOd9y6YDJFQ+Sl\nof/MdGzhWd8Wbos3bojNT66YMQ7Tgs11YzA7W3kWNB/HPtHULzOdIObx5jY44xyMwvgz7udMzOdk\nd4j63tn1eGqbu/nIOC/FuW4qS4cfdzOmzoSpM7G3bhzW+0ScSsW0SD+HTwSwgRkTcinN9zCxwMPe\nJhXTImPttbo2DODSaYljFkB0kd+cSfmcXzZ4Vtq2bezXXoFAd0zM48LyAjqCFn/zmwPc9+oH7G3s\n4p2GTl7Y3cynzpwwqBtIPJEFiIEBMY8jbUHK47TF629mSS7Tx+eOTdRj5lnh3+zfQ2CIjWbs5uPw\n/kGMCz6a8Fyp5Kb3N3dT2dsv+yx/Pvubu+NuXDPkmD+2CA7uDXf7EMly6uYh0k+kk8eMCeFFTLP9\n+ezVIkSRpOrbeli7o4GyohxmTMhlRkku08bnxs322rbNq4daOXdSPr6C+FGJiDNK87hh7kQunjp4\nIxC7vRXrmcfgjdfhrPMxPrY4+lp15QTmTynit3taeHlvC1sOt+F1G0wqyuHGeZMGfkxcudE+07GF\n5NG2Hs5I0BYvwjAMrpg5jqd3Hqe+rSfhYsWUTKsEjwf7wB66p89KmJe239oW/uwhiumK8V4KvS52\nH+9iaeWEQa+3dJk0d5nRYnq2P4//u9vm0IluzvTlDzo+EePiK7Cff4o/vfYGPy0M8k9LplGkbcwl\nS6mYFunn0IkAeR4Xk4rC3+Bn+/PYfLiNE10mE/L1x0Ukkd/ubWHHkXa8biPap90Als/xccPciTHH\n1p0I8H5rD585a+jMMoSL0mvm+AY9b+/6E9aPfwjtrRjXfBnjyqswXLFFZmm+hxvmTmT5nFJeqT3J\nq3WtfOWiSeTnpPZD2XgLEIMhm4aOIJcPEU+JuGLmOJ7ZeZw/HGrl8+f7kx6fSLgN3RnYB94lMPVT\nCTeasd/aDhPLoXxqwnO5DIOz/fkJFyFGFh+e0W9mGsJxt2EV0xNK4dwLqTkWYv+EAP+5p4XPXzDy\nr4HIqUzVgUg/dS3dTJ+QG/0R6lm93zz2NHUNuepf5HQWsmxeq2vjox8p4tuXf4Rj7UEOnQiw6VAr\nz7/TxJxJ+cyfUhQ9/tW6NlwGLEwS8ejPPtEEB/ZiH9yLfWAP7H0bJlfguu0fMabNGvK9BTlurjqn\nlKvOSdwGL554CxAbOoJDtsXrz1+Qw/llBWw8eJJrz/ONaovtyOYt3R8z4/autgPdsPtNjCs+lfRz\nzpmYz44jHbQFQoO2Q69tDi8+nFmaG70GX76HPY3dfPas4Y3ZWrCEne+G7/Fv9jTzuXNKKMjR7LRk\nH2WmRXrZth3u5NEb8YDw5gtuA0U9RIaw63gnLV0mH58+DpdhMLnYy8cqirl94WSmjffy8Ov1tHab\nQPjP2Wt1rVxQVjCot3Q8dkM9oe/eivV3X8b613vDG5j0BDA+e224h3KSQno04i1AjGSNE7XFG+iK\nmR9L8BUAACAASURBVOOobwuyt2l0f4cYlWeDGaSnvSP+4sPdb4IZxLjw4qTniuSm340zO13b1M2U\ncd6Yojccdxv+2pE9Uy+kI6eAq0MH6OixeGnviWGfQ8QJsrqYrm/r4bWxWEktp4WmLpP2Hovp/Yrp\nXI+LGSW5WoQoWeV/61r48Y5jBMeoh/qrh9rIdRt8dGpRzPNet4s7Lp1CW4/FY/97FNu2qW3u5mh7\nkMumJ49J2EcOY33/LjjZjPHXX8H17e/jeuTnuP/hQVxXXYfhzU16jtFwuww8rr4FiE2dQda90cCZ\nvjzOTJKZjlg4rRiv22DjwZMxz+9p7KJm/4khW9TF6F2E2N3eGbctnv3WNsjLh94NWoZypi88SRBv\nEeL+5u5oxCNitj+Po+1BTvT+gyhVO4734LYtrn7j58wvMXhhd3O0tZ9INsnamIdt2/zw9Xp2H+9i\nZkkeHxk3isUfclo41NK7+LAk9hv0bF8+Gw+2ErJs3K6R/5hWJNPaAiF+/EYDGw6EC7sZJXksmTV+\nVOc0LZst77VxydTiuPGDmSV5XHehn6f+dJz/OXCS90724HHBgoqhIx523X6sH/wjuD247rwX4yPT\nRjXOkfK6XfSEbGzb5pGtR+kJ2dy+cErKfxcU5Li5eGoRr9a1sWJ+GXsbu1j/diNvHu2Mnj+V/LVR\n6ocSP4HuAEUDvs62bYfz0nPmYXiGXtAJ4UmCWaV5g3LTAxcfRkRy03sbu7h4GHG3HR90cG5JDgVe\nD9f8/l+5e+43+K+9LVx17uAMvIiTZe3M9I4jHdG/KF7e15Lh0YgT1PV28ug/Mw3hH3F2mRYftPbE\ne5uII2w53Mrf/ucBNh48yZc+OpWp47z8556W1GdGE3izPpy9vWxG4iLrqrNLOa+sgCe3N7Dx4Enm\nlhcOyur2Z9fuxnrwH8Cbh+vvM1dIQzjq0ROyeHnfCf5U38GX508a9uTM4pnjaQuEWPnSQe6uOUzd\niQA3zpvImb48/n3HMdpS3NjFmHUW3cHQoK3EzQN7wrP3FySPeEScMzGf2gEt7wYuPow4ozQPl8Gw\n+k0f7whSdzJA1axSXN/5IWfPnMR5LbX8ensdgebmlM8j4gRZWUxbts1P3zxOeVEOH6soZsP+k/rR\nkgPUnQjwlV/X8tSfGjCt0X2DH4lDJwJMLPAM2shhtj/8jUVRD3Gi5i6Teze9z32vHsFX4OHBT83g\npoUz+OxZJexv7o6bmx2oqTPIE9uO0tw1+Mf8r9a1Uuh1MT9B32Y72IPr3Z3c1vgHXIEuTnSHuPSd\n32H958+x97+LHQphmyb2B3VYWzdi/WId1g++A8UTcP39GoxJU0b9NRgNr9tF3YkA695oYN7kQv7i\nzMHt5JKZO7mQiQUeuoIWX6uaxBNXVfKX5/q4+eJy2gIhnt7ZkNqJKs+mxzbItWLvQ2D7ZjAMjPMv\nSnlM50zMpydkc6Clr0AeuPgwItfjYmZJ7rBy09s/aAegakoRRmExrr+5i7+eXUSLu4BXfvQ01muv\nYAcTbxwj4iRZGfN4ra6Ngy0B7lg4mYmFObz+Xht/ONjKJ0fwl6D0CVk29256P9zSanYJ1ZUTUm4x\nlUxnMMR9r35AayDEr3Y1805DJ3de+pFoi7p0qGsJDIp4QHihUZHXxZ7GLqrj9GX9MNndndDcCCdb\nYOaZGHkJtlIWR/v9gZO88G4zqxZNxZ+k73J/Q0WPQpbNS3tb+NlbjQQtm/9n7kSuOqc0evziWeN5\n5s3jvLinhXMmDf3/1RPbj7H1vXYOnQjwz0unRc/RE7LY+l47l04vJqc3x2sHg1C3D3vvO9j73oG9\n70BPAL8nh1vO7+aX4+dy8Yl92L/Zg/3Cf4RzvqYJZm9h5fHAmXNwfeUOjPElKX8tPizh7bS7Kfa6\nuHVB+Yg6cnhcBo98dhb/f3t3Hl9VeSd+/HPO3bck997sKyRsCYvsAi4ojVq31vFXlXbqVK06bcdW\na52OHTtTFWut1Y5Wu40dtWPHVrS11bqgaBER2QqIAoEsZN/vkntz93vO+f1xQgBJWAKSEJ/363Vf\ngZB7OTffe875Ps/zfZ7HZJAwHhSvco+Vz03z8Ofdfs6bmMn0o8RBKp9KvDWMubcdTS0dXAowsfk9\nKJ+K5Dr2kp39kxB3dkUHyzjq/YdPPtxvitfG346j3G1LWz/5TtNgL74kScy6YCmVr9TyYuHZVP/v\nDzG9+AzS+ZcgLb34uI5dEMaacZdMp1WNZ3f0UJZl4ZwJGXor223h1b0BLpyUeUJLE40V2zoiFDhN\n5J/IJgAj8NS2bja3RSjLtPCbv3fz+w97uWhSFpdNdR9144Uj0TSNX2zspCOc5J5lJYQSCj/f2Mlt\nr+3jjrMKD1lS65OSUlRaQ4nDJlCBvi7rZO+BzVs0TYNkAqIRiPYPfI2gRfshEQOzBcliA4tVfyQT\naH1+PSHuC0B/CDQNNA0VeNNYRpYSZUGsGSmVhFQS4jEI9OqvvV9+EfK3foCUk3/YMXaEk2xq7WdR\niZM856n9XMTTKm/V99EbTeEyG3BZDDgtBvIcJso9xzZJ69Osqz/JrzZ3EU+rPLSunfuqSw9JuIbT\n2pfgu280keswUV2RydIJmYOlEzs6IzyxpYvmviSz8+3cvCD/sNIEq1HmgoosXqrx0xNJkq0OfOYC\nPrRAL8gGpMJStsg5bGjpZ1aenR1dUf5vSxvXZgbR2pvY3KsRS0/i7D1voW5vQwsFoLFO/wwDFJYi\nnVWt95hOmcHZFitnA7AALRxCq9kBe3aAxQYlE5FKJkJeEZJx7Nya9q+c8fUz80/oOjdcx8MXZ2Wz\nvjnELzZ28sglEwYbJUMqqyBh3I2lbhvqPc8iXXo10qQqlPoapH+49riOx20zMjXbyp93+/lMRSaZ\nViP1vjjTh9hlEvS66ddqg7SGkoeVwn1cIq2yoyvKBZOyDrnnSpLE1XMLuedvKm/+471csv1PaH95\nFu3VF5AWnKNvNjNtFpLjk7/mC8LJNHauWCfJ2w19dIRT3LW0aHCt4EumuPn5xk529cSO2vIf696o\nC/LzjZ1YjRI3z89jWfmpaSCsrg/yck2Ay6e6uXF+HjU9Mf5S4+fPu/28VOPn/ImZ/L/p3hHt8vXq\n3iDvNoW59owcZuXrQ8WTPFYeeLeNH77TxvfOLWJ+0Sd7cW0NJVG0w+ul95uS9vN8wET/HTdg6w+C\ncuRZ7cMWqVht4MoESSYmmXis6CI2OCYBMMlQzpdC2zhD6kVyZSJNmQ6eHHBngySh/d+vUB/4rr6u\nbtkkQgmFdU0h1uzrG6xlfL02wI8vmkDGKdhpLJJUeHVvgJdqAoQSCkYZPl5N9Y9nZHP1DLFRw3BU\nTePxDZ0AfGV2Dr/d3sPvtvdw3dwj79AXT6v8+N02DJKELMETW7p5emsPi0qcKBqsbw6T6zDxvXOL\nOHOInQP3u3iinZd2+3j157/ly7UvH/7/yEaeWPAdiiS46++/5QnrGfyR2Uzb8b/M89ewrurLZLr7\nmb7zbTSrFRxOvZdxynSYVIXkGn5ineTKQFpwNiw4+zh+Y6fe3AInM3LtnFV69EmCI2E1yvzzgnxW\nrGnlxV1+rj7S5i4GIwnZjHXWXNjwAdoTD6HZ9WvmkXY9HM6/nFnA7a818uvNXdw0Pw9fLH1YvfR+\nB2/ecrRk+sOuKElFY37h4aU/cwoczM6383R7jElf+lempX1ob/4Fbcs6tPVvgSTro3BVs/Xrn8mM\nZDKD2QwZbr3RJZ++FapiIvv4dNol08oPvzPQq6fqPYATpiBNqoRJlaScmfxhRy9Ts20sGEi+NFXh\nnIwkTxs0Xl2/h0pTLeQWIk2ZPiaGEI/HxpYwv9zUyewCB2lF5WcbOvl7e4RvLMz/RLdpremJ8ctN\nXZyRb+f6gZv8tBwb03KK6Awn+UuNnzfr+niroY9zJ2Rw09l2jjX13dsb48mtXcwrdHDl9AMbKuSZ\n0qzI6eTusJUfrWnmu+xkQbRZ/8eycqQJU+jwlvHnun7mFDpYfJSVAfbrCCd5rymMySBx2VT34EVt\nuJU8tHgUbeWTTN7ZiDrrRh6bfR3LrZ2UOQ1gd4DNieTQv+JwgNmq98ol4vojrvdUk+mGTDeSRb9R\ndfUnuf+dNpr7Elw/JweX2cDvdxi515LLjDw7V1Z6yLAaMEgSBllCkqD7phKaXl9Fy58201yWoClh\nIK1CWaaFr8zOoTDDzEPr2vnRO63c+5mSI/dwHSdV0/DH0vRGUvRGU9T64qyqDRJJqcwrdHDVdC/T\ncmzE0xr9SYVwQuHPu/383we9oHHkBGEUJNIqb9QFWVLqOqHexhO1qjbIjq4o31iYz0WTs+iOpHhx\nt5/KXNuwmwRpmsavNnXS0pfk7mUlzC5w0OCPs7o+yDuNIZKKxpdmZXNFpQeLUdZXekin9FIKRQEl\nhYKCuvl9cv74NPPzP8ubBQu5em4BVo9Xb7y5vZBK8qdtXXT1WLg3uQGTpHGjq5s6Q5yfzbme+8/y\nsOW9INUVmZive/IU/+ZOnS9/bPfGT8L8IidnlbpY+ZGPJaUuijOHTlaTioYGWMsmIn/2Mdj2Pupf\nV2LMN6EWlR33/1uWZeGLM7N55oOewR74j6/ksV+By4TLLLOqNkieU9+MRh6mkbalrR+LQWLGEL3c\nkiRxx9lF/OuqRn70ThsPfXYCuf90C9qXvgaNe9F2btMfrzyv3+f5WOeE04VUORuqZiNVngEm84Fr\nbTwGRhPkFSLZh67hH00vfOTjpT1+fnJR2SkfQTyVWvoSbGzt54pKzzGNso0HknaiU7lPsZZ/+2eQ\nJP0RCUNT/WCt3UtTL+bpgvO5t/EFZoQaIJmEWBSUNE9VXMarRWfx6w3340mG9RfLK9J7UIrKwGDQ\nW8SyrA9vOjMgM0tvCWdkHtNyQ8crqai0h5KUZFqO2lLd2R3l7rdbmJBlYUV1KSZZ4sVdfp7d0YPb\nZuTG+Xlk242YDTImWcJilPDYjIM9Upqqgqoe9/BpbzTFd15rxGqUeeizEw6bga+lUtDejD8U4S9t\n8LrfRFKDJfYY15VCTp5bvznbnYeWRkT6CceS3L7HAmg8XOLHpaUgFkXbuXVwA4KI0co9s26i0VnI\nHa0vszC4l3AowvNl1bxetJi0rL+fSxL1XEcdJosZ7C7IK9AnLuUV0oWN9c1h1jWHqPcnBo99QZGT\nO84uxGqUeWprN3/dE2DlNVMGY6HV7UL9n/8CXw/aRVfy+4kX8tfaEPG0yqISJ1fPyB72xgP6BeWP\nO31EUyoVHuvgoz2U5IF321BUjTvOPlDGklJU3qjrY+VHvQTjw8/ud6cjlIbbqCj0cM60fCaWFw7W\nUq9tDPHwe+0s9WrcamtCCvQekkTptalpUNJoA19RP9adLElIbi9k59HnLuAXfi9bg9ohvc4SsKjY\nwReme5mUbT/wWQgFIKiXtKT7wzzu87Im6mC5O8w13qh+bskHzjMG/3zQ3y16Dyc2B1htSLKMpioH\nbpbxmN6QychCko+/EZlUVH70ThtbOyJk24384PwSSo/S03asUorGi7t85DhMnH+UJee6+pN865V9\nTMu2cfeyEiRJXzXizjea6OxP8V8XTxjyhvtmXZDHN3ayfKaXL846NNFLBvtIN9Vh7WiEtia01kbo\nbNVjPpTiCey+5Cbu2muiwmPhljMLBktzWkMJbn2lkbNKXdx+1oFJgO2hJLe/1ohBhv6kygMXlB61\n5lo4On8szTf/2oBBkrjj7MLBUbr9QgmFh9a18UFnlO+dW3TI0oLZ2dn09vaO6P9VVI1/e6OJWp8+\n+fDZqycPu0vhqtog/7u9m/6kSr7TxIWTsvhMeSZZtgP3FU3TuPkv9UxwW7lr6fDbmrf2JfjuqiZy\nHCYeuLDssDIYLR6FSETvnEgnIZkk3dWBuvsD0jUfoYaCSGjYlGFWWcr0QH4RUl4hODPAZgerHWx2\npLIKpCNsuf5J2Nsb49/eaELVYFaenXs/U3LEUeUTieloagom+P7qZkIJhc9Pc3PDvLzRPqQRKyw8\n9snPp10yvW1v4yE3GC2dgqZ66mr2cXegiIp0gLuTm/TWqtmsn0DePDpd+Xx9t5XlVVkszwodmBxT\nu/PQulQgKRsxf2y2NCbzYJ0rmqon3oUlSBOnwITJ+tf8osGkuymY4KUaP0UZZmbm2Sl3WzHI0uCm\nBW/V97G2KUQkqeK2GTm71MU5EzKY4rUedoI1BRN8780msqxGHriglIyDdg2r9cV4+L12OsKHz4pe\nnGjhW+1vYOnrgXCfnjRlusGbi+TJAU+23oo/mNWGlFtAOqeQXVIWv/0wQHsoxYMXllBiUSDSDx0t\naHW70Gp3Q2PtgYlDQMhk5+Xic3i5+Bwk4OrGN7m89V19CEQ7kI2pSPxo5nV84J7MD7f9ksnhlgPH\n4M1FmrMIac4iKJ5ARLZwz5o2GgJxLp7s5m8NQaIplWXGXq7qfp+/GibwcuYsKqKdfKfuBfKDraQ0\nic3ZVbxRcCY7PFMAmBzv4qxUK4vpZYu5kP8xT2diys+/N/+Fx/KW0We083DzSjCZwGDUaz+zc5Fv\nuA1pkr4RQiih8Nc9fv5aEyCSUpmea2NxiYuFxQdqlTvDSf7wYS/vNIYwG2Q8NiMd4eQhvStFGWbu\nWlo85BJb8bRKTU+MlKKhaAMPFbx2I6WZFpxaAvWXP4Zd2w48yZUJ2XnQ5+cF5yyeLf8s1+x7g2ua\nVusxNhr1h2Hgzwbjge9JH+vBVhUI9LLDmMcjlcuJmGxc1LaBglgv3kQf2YkgOfEArvTAzH5JBoM8\nZMKmIPHzaVexJn/+geM5Dn1mF7s9FeT091AY68WmHGgMIct6Y9ftRfLmQvEEvea2pByyPEPeqFKK\nxo/fbWVzW4SrZ3h5sy5IUtX493OLh+xFOx5d/Ul+sq6d2oGd7q6e4eVLs7KHPA5V0/jPt1qo88V5\n7LKJ5DgOnIedYT1ZLXCZeeDC0gMT+1SFfT0R/u3tdio9Jv5zrgNDMoHWVAd1u9Fqd+mJ837ubP13\nUliiN0wOirszM4uIJMPMBUgGA+83h/nV5k5CCYUrq7xcM9PLfWtaqfPF+fnl5bhthzbC32sK8eC6\ndrLtRp64omLYHkrh+LT0JXhgbRvt4ST/NDuHKyr1z/G+QJwfrW3DF03z9YV5h02EPtHEq7kvwe2v\nNpLrNPGLy4+8o2RSUVnfHOaNuiA7u2MYZfjsZDdXzfCSZTXSHEzwzVf2DY62HMm2jgj3/q1lcBv6\noT5HKUXlveYwr+wJHLaLpITGVc4AX8yJIVltehldMoHW2QadrfrXrjY9KdcO7g2Q9W3XP/8l2hQL\nf9rl58oqz7AjAicqkVa57dVGkorKpVPd/HZbD19fmMdnJw8/Oj4ayXRK0djW0U9LX5K2kP7oCCfJ\nd5n4hyovZxY7j3iuN/cl+P6bzRhkiRm5dtY2hfjXswuPaYOmsWhcJ9MX/3wt91WXHlKb+0FnhPvf\nacNlllnxsX872D1vt7AvmOCJz1cQSyn4Yml8kSRd/git4SQt4TSt/WkCCY0cM1TaklTKYSpTPZQk\nAsgGeaBXXAYlhdayT08mD07GLTa25s/i4bLLUSSZpKTfhOxKgspIK90WNy0WD2ZUFmekqMp3srVP\n4u89SdIq5DlNlLstWI3y4GNtYwgN+PGFZeQ6TWiJuN7r1FQPTXXEmpvYE5VJIpOSjaRkIy1ZpbyY\nv4RyJcC/ax/iybDpN1J/D5q/B3zdEPDpPZbow2gBs4vdGWVsyp7OVs9UIiY7FiXJd+r/xPyO7Yde\njAwGKJuENKkKqXyK3vI3W8FswVNQQE1bD7/5sI9NAYkSQ4KvGJuwmU2ELXb6jXZqUjZW+4zcXC5x\nSYlZPzaDUW+0DJEIRZIK9/ythT29cc7It3PD3FwmuA/0Cm9sCfPohg40Dc4tdfJ+S5i+pEaOnKJa\nbeW8aD050V59pCIaAUVhi2caD+dVk6EliUkmFqhdfCv6d72BlkoiFZYiff5LQ66gEUkqvFYbZO2+\nEE19eoI30W2hKMPM+81hDLLEJVPcXFnlIdNqJJpS2BdI0OCP059UuHya57Al+I6HpqrQ1gTdHWjd\nHdDTgdbbhZTpRiso5XFtKm8HTVw93YPFZMAXTeGL6hsyJNIqKVUjrWikVI0Mi4E5BQ7mFTmpyrEh\nSxK/39HLCzt9FNngjvw+ZthVwsGgnmgriv51f4/3/u8NlLNIWR69V2igXlZJp3n8oyh/60gx2SXj\nNoPLqJFhhByTxlKvikNWB15LhUQMLRphY0DiF6E8QhxINN2GNEVmlctsAc6Mt0BwYLJcTyf0dh34\nBTkzYOIUpMnTkSZXQtlkFIORn6xrY0NLP19bkMfFU9x09Se592+tdPan+PaSAs4uy6AvnmZzWz8b\nWvqp88dZNjGDq2ZkY5U1CAX1a0BG1iF1m+83h3lsQwca8I2F+WzvjLC6vo/qiky+PseLITgwQqAq\naIrCy20KTzZqfGOmiwsrc5FMJr33va0Zrb6Gjfv8PGCehz0dZ2Kkg/JwK+XhVlaWXUDCYOKhLY+Q\nlTroumN3QEUl0uQqpPJpehJ9hElcQ92owwmFp7Z281ZDH26bkUAszc3z87h06tA3/FW1Qdw2w3Ft\n4iEcXTSl8LP3O3m/JcySUhcLipz8alMnDrOBO88tGqxdPtjJSLw2toaROXwXyyNp7Uvw591+3mro\nw2yQuaLSjarByo98/OaKikMaicN5ucbPb/7ezQUVmcwtdOA0G3CaDRhliXebQrxRFyQYVyh0mTmr\n1IXFKOlzBWTY2xvnvWZ9vs0XZgy/EczgpPFYBCIRtLWvo615lY9yKvlx1ZeJaAZcZpm7ziseXOXk\nZPrvLV28sifAis+UMDPPzg/e1u9lj106cdgVq05lMp1WNd5u6GPlh730RPVOEbfVQFGGmXyXmY+6\nonT2pyjOMHNllYdzJ2RiMhx6j27tS3DX6mYkSeK+6hLyHGa+v7qZxmCcn1w04bDRP21/x6Sij5qj\nDtxLVPXAfUVV9Q5M40GdQCaTXkN/CozrZHrZz97BLEusqC6lKMPMu40hHnm/nSKXhR8sKz5i/eOW\ntn5WrGnFIIHysXdtM8oUZ5opybSQ5zDR3JdgV0+MwMC6qlajTLnbQoXXSoXbyiSvleL9vYrdHWj7\n9kJvF6+EnTyplFOmBPlez5vIRgO7bEV8ZClgp9GLKx3j/O5tLGlYh0M50MqOGKxsypvFe3mz6bFk\nkTCYicsm4rIJp5rgP9pepszfpJe2pA4a1nK6oHQSUmk55Bcj5RfpXx1ONrWGefi9Duwmme+fVzxY\nkpBWNWp9MXZ1x2juSwy2QKMpPVnOMMJ8W4yF6U7OCNVjNRv1Mg2HC+xOpOxcmDAFyTJ0K/7gi8Cm\n1jBPbOmiO3J4r2V1RSa3nHnsS00l0irNfQkmeQ7vvYcDPYP1/jgLipxcNCmL2QWOI5bQ1Pni3Lem\nhUBc4fq5OVxRefw7c7WHkmxsDbOxtZ99gTjnT8zkqhneUa3FTSka965pYcfALmtOs4zXbsJjM2I1\n6qVARoOESZbo6k/yUXeMtKphHSgPag+nqK7I5Kb5eViN8glf2BVV4w8f9rK7J0Y4oRAaeKRVDYdZ\n5vKpbi6f6sFpMRBNKTyxRd+lb6LbwvVzc4kkFdpDKdrCCWp64rSHk1w+zc1XZucOXtS1aARaG9Fa\n90FzA1p9zWBPrWK08F9zrme9o5wbbW1cVmbTe/LDfYS6u7m/00ONlkFFspd9Jg+qJJOtRChRQmwz\nF+BOhfmnulc4t2srEoDRiOrOpi13Eq97zuA1QxmT5AjfcXeR7zKj9QX5Q7eZlaYpzPXXcMdHzxA0\nu1ibN5e1eXNot+cw27+H/9jxP/rr7d8WOznQ856RxeYp57HNWUYDGTTiIImMjMYKdwtVdkUfQTGa\nkIonQEHJcU3KOlI8t3VE+MXGTtw2Iz+6oFRMlhoFmqbx591+/nd7D6oG07Jt3Hlu0WEjBPuNdklA\nayjBsx/08l6zXkI5IcvCo5dOPKbnaprGf2/p4tW9wcP+TQLmFzm4dKqHM/IPr9FWVI1H3u9gbWOI\nG+flcvk0z2GvMZy3/l7PL3bHKYj2cGPPOn5VfCE+g51vB9ZyZrRJT9zMFr3H22w5sDqT26uvqJSd\nr4+imo58nd/eEeEHb7cMTt6H/SVejUzNtnLPsqHLPU5FTNOqxpp9faz8yEdXf4rJXivXzMimKteG\n46DOHkXVeK85zB93+mgMJnBbDUz2WimzQ6khQUYizCMtFjQk7puapthphHQKX1sH3+kswJ6O8eOd\nT+KIBkBR0FSFZlsOta5SYkYrMYOZuMFC3GDGqCpYlQRWJYlNSaBJEn0mJ31mJ0GTk36THZuaIktK\nkWlQcJsg2wzFVpV8CxjtA6U8mR5we0lmeOnRzPRE03T3p+iOpOjuT9EVSdETSRFPK6iqhqZqzLXF\nudXdg0VNQjpN8XXfOObf5WmXTK/f2cB/vtWCLEtUl2fywk4flTk27lpafNRJeKqm6WuuKhpeuxGP\nzYjHbiTXYTqkvng/TdPo6k+xqydGrS9GvT/BvkCc5EAm7rYaOKPAwZwCBzPz7Lyw08ere4MsLHZy\n+5LCI67BrCXi+jBUV/shy6sR7YdEAi2V0JPmZBJNVZEcTiSnCxwZ+gSMvEIomwSenCMmo42BOPet\naaUvoXDZVDf7Agl290SJp/X34LUbKcowU5xhpijDTLnbytRs2wndQD9+EUikVbZ1RLAYZVxmAxkW\nffm0k7VG9cE0TSOhaENuazycnkiK5z/ycfVM73Gt8TvWqZpGd3+KrIEE+kjiaZUdnRG2tkdoCMS5\ndIqbpRMP1Px+Ehd2TdOo9ydY+VEvG1v7sRllqidlsrElTG80zZVVXpbPzD6sBySlqDy9rYe/7gkw\n2WvlX88uHCyxiaYUPuiM8kFHBH8sTV8kQSgSJ5jUiGLkura3+Vzt64cdS8Js4zdVV9Noz2NeAoZl\nJQAAEl5JREFUrIWFkUYmJnqQgD3ucv4ncwF1UiZTzXFmmmPURiRqVQdRSf+8XN6xni/vfRmTdlCt\nuyeHNyrO578d83DKKiFVvz5Nt6dZ6k5zrr0fSzSsN5AjYb0XZsJkpIppkJ13yHmtqBotfQk09O25\nT9TR4qmo+kS3T8vkobFqZ1eU3b0xPj/Nc9h5cLDRTqb3q/XF+ONOP4tKnJw38fjWjfZFU4QTCv1J\nlf6kQjSlUpljO+oKUYqq8ZN1bbzf0n9IaYkvmuKDzih7emN4bEZKsyyUZVrIc5r4w4e9rPzIx6w8\nO9/NbMf+zsv0qQbuz7mAepOXG0Ob+Wz/bkgkDkwmTw58VQ46xyVJL6fKyUfKzoOcfPDm6GWU3lz6\n7Vnc+nozNqPMTy+egNkwMNersY7X9vj5dbyYr7e+zgW+HQMT2h1gdyA5XNgKi4lZbHpSmOXRy1Yl\nGZBQJf36aVDSkErpc1/SKUjpXwcnHIPeIDBb9OebTPjjGtuCGtv7YHvYQFiRqMgy8aXZecwrdBxy\n3dFURZ8D09WO1tGC1tHK3wMaa6R8mk0e2uzZqJJ+XctMhlmx/dcURw/dgGhnzjR+UHUdC7QerjF3\nsF7L5n3VS5t26AiLGRWLpKEAcU1G5aAlFdFwySpZUhqXlCKWhqBqJCiZUQ8qUzSoCgWxXvJjPkIm\nB91WN0HLoSUmBlUhO9lHbiJITiKILRlF1lTiBgurCxYwM1jPnR8+jVVNUfLKliN+9g52TMn09u3b\neeqpp1BVlc985jNcccUVh/x7KpXi8ccfp6GhAZfLxW233UZurr7qw4svvsjbb7+NLMtcf/31zJ49\n+5heczjt7e009yX4j9XNBOMKZxY7+c5ZhViOI3k6EYqq0RZKstcX44OOKNs7I4QO2gr2ikoP/zQ7\nZ0z15gQGdkDb0xunOMPMrHw7M/PszMi1H1J/fbKMlQu7cPJ80jFtDMRZ+ZGP9c1h8pwmbltScNTh\n1vXNIR7b0IkkwcWT3ezpjbGrO4qi6SNJ+U4TGRYDGVYDmRYDlTl2zpmQoU9s6mqH3m691jwnXy9P\nOULPrqrpw6DPbO8hlFAoy7IwxWtjaraVyhw7hRlm/cYTi+lDyXYHkl0fLt/c2s9rtQGm59o5d0LG\nMQ19f9LEOTq+fNrjmVL0DcW2tkc4b2IGDf7EYPmdzSgTO2j29P4lPKsrMvnagvxDGin6Wu9tbG6L\nMCvfjtdmxGUxHFg/3yxjTkQxhQIYQn5SfUGifWEi/VGisQSxlEpaNpCWDKiSTIOriD0Zpfxo+6+Y\nHGrWSxYGqEjcs+AW6uz53Kp8SE48gDfixxXxo/aHaEmZqXMUUpdRQoOzkLDJoY9YD/TiSpqKIx3H\nlYrgSkVxpaOYlRRGTcGopjFqChoSMaNlsNc3aHLS5tB7x7MSIWYH9rKk50Pm+Xbrq5sVlCB5c9D6\nAtDTBb6uQ+fC2Oz6yHdeIbi9pDK8tNlyaDNmMDXLSI5R0ZP6dFqf05JXBG4vL9UEeHKrnmTLEszI\ns7OkxMWcAgdOiwGbUT4kZ9I0jaSi6XHTwGUxDJlTqZpGf0KhK5KitS9JSzBOSzBGVzhFhqyQS5zc\ndJjcuJ/cVJhcKYFbTmGQJP34JBkysiA7Fyk7j7/1WXhsZ4xpHjPfPyuXydOmHPNn8KjJtKqq3Hrr\nrXz/+9/H6/Xyve99j1tvvZXi4gMzYVetWkVTUxM333wz7733Hps2beLb3/42ra2tPProo9x///0E\nAgFWrFjBo48+CnDU1xxOe3s7oC9xtr0jwoWTskY1cVU1jX2BBB90RCjIMB/zEm2nmqZpRFLqCdXp\nHqtP+4V9PDpVMQ3G0zhM8jEv69cRTvKTdW3U+xOUZVmYV+hgXqGTaTm2T6RXdf+k0OMZ+RiLxDk6\nvoh46iOgD6xt48OuKFW5NmYPjBqXZVlIKvrITnMwQXNfkqIMMxdUDL1Hg6Jq/O6DHrZ3ROhPKoQS\nKvGPL6B/BEYJDJKGQdMwofAFuY3LzN0HViyyWpFKK6BsEt2KkW+/1kgkeXCyr68dv38E3G6ACmsa\nj0HBKmtYJA2rpKIBEc1ISDUQVmXCikRKk0gjkdYG1vyXwCaDVdawyRoOSWGaU2NOFkxwGJAMMvSH\n0DpaoL0FrbMV/D36nJecPKTsfL3XPbcACkr0TocRTDbWNI2XagJYjTKLSpxkfgKdeCfLuqYQP32v\nnXKPlWdvWHLMzzvqO6qrqyM/P5+8PL01s2TJEjZv3nxI4rtlyxauuuoqABYtWsSTTz6Jpmls3ryZ\nJUuWYDKZyM3NJT8/n7q6OoCjvubRFLjMI9og5GSTJWlwybOxTJKkU5JIC8KJyDrOi2yBy8xPLppA\nJKWeko1qTAYJE2Nn1EkQBJ3FKPODZSVDbopiNeq72E72Hj558+MMssRX5uTylTkHvpdSBtbPTyok\n0xopVSWlaJgMEg6TAbtZxmEyYDVKQySbM4f9v/KAX3+ugrZQEl8shX9gkriiapxRlkO+OU2By/SJ\nr5YjnbHwk319SeLzlcdezz6azi7LwCRLPLiu/bied9Q7l9/vx+s9MCnL6/VSW1s77M8YDAbsdjvh\ncBi/38/kyZMHf87j8eD3+wdf50ivKQiCcCwMsnRKEmlBEMa+T2Kk2mSQcNuMw04APREui4FpOTbg\n0ERfjDaMnjNLXNy1tOi4nnPUT8ZQVSBDTdQb6meGqyA5ltfcb/Xq1axera9N+8ADD5CdPbZ2UhMO\nZzQaRZzGGRHT8UXEc3wR8Rx/RExH14XH+bs/ajLt9Xrx+XyDf/f5fLjd7iF/xuv1oigK0WgUp9N5\n2HP9fj8ej2fwdY70mvtVV1dTXV09+HfRUhv7RIt6/BExHV9EPMcXEc/xR8R09B3POtNHnUVTUVFB\nR0cH3d3dpNNp1q9fz/z58w/5mXnz5rFmzRoANmzYwPTp05Ekifnz57N+/XpSqRTd3d10dHQwadKk\nY3pNQRAEQRAEQRjrjtozbTAYuOGGG/jhD3+Iqqqcf/75lJSU8Nxzz1FRUcH8+fNZtmwZjz/+ON/8\n5jdxOp3cdtttAJSUlLB48WJuv/12ZFnmq1/9KvLA8lNDvaYgCIIgCIIgnE5Ou01b9i+NJ4xdYnhq\n/BExHV9EPMcXEc/xR8R09J3UMg9BEARBEARBEIYmkmlBEARBEARBGCGRTAuCIAiCIAjCCIlkWhAE\nQRAEQRBGSCTTgiAIgiAIgjBCIpkWBEEQBEEQhBESybQgCIIgCIIgjNBpt860IAiCIAiCIIwVomda\nOOnuvPPO0T4E4SQTMR1fRDzHFxHP8UfE9PQikmlBEARBEARBGCGRTAuCIAiCIAjCCIlkWjjpqqur\nR/sQhJNMxHR8EfEcX0Q8xx8R09OLmIAoCIIgCIIgCCMkeqYFQRAEQRAEYYREMi0IgiAIgiAIIySS\naWFEVFUd7UMQTrJoNAqI2I4XwWAQAFHJNz60tLSQTCZH+zCEk6impobOzs7RPgzhJDCO9gEIp5f6\n+npeffVV8vLyOPfcc8nPzx/tQxJOgKqqxONxfvazn+F0OrnllluQZdHGPp3t27ePZ555htzcXL72\nta8hSdJoH5JwApqamvjNb35DRkYGX/3qV/F4PKN9SMIJamho4Nlnn2XXrl3cd999o304wkkgkmnh\nmKiqylNPPcXevXu5+OKL2bNnD88//zw333wzFotltA9PGCFZlrHZbCiKQiAQYP369SxZsgRVVUVS\nfZrRNI3f/va3fPjhh3zuc59j6dKlo31Iwknwxz/+kUWLFnHppZcOfk/TNNFIOg2l02mefPJJGhoa\nuOqqqzCZTOzatYvy8nJxzT3NiWRaOCayLDNjxgyWL1+Ow+Fg2rRpvPDCCxgMhtE+NOEEtbW14XK5\nOOuss1i9ejVz5szBZrOJG/ZpRpIk4vE4EydOHEykOzs7yc3NFTfp05CqqnR3d2O1WgcT6R07dlBR\nUYHVasVgMIhz9DSTTqepqqriuuuuw2w2Ew6HqampQVEUcS89zRnuvvvuu0f7IISxae/evSQSCVwu\nFwDFxcWYzWZ27NjBihUrsNlstLS04PV6ycjIGOWjFY7FwTHdfyO22+1s27aNuXPn0tXVhc/nIysr\nC4fDMdqHKxzFx8/RqqoqVq5cSSQS4fe//z179+5l27ZtZGdn43a7R/lohaM5OJ6SJGEwGPjDH/5A\nXl4ezzzzDLt372b37t10dHRQWVkpEunTwMExNRgMlJWVDSbODQ0NBAIBFixYgKqqIp6nMZFMC4eJ\nRCI8/PDD/OlPf8LhcFBeXo7RaBxMvvr7+5k9ezbLly+npqaGffv2UVpaitVqHe1DF4YxVExNJhMA\ndXV1dHR0sHTpUnw+H8899xyNjY0sXrwYQFzgx6DhzlGTyYSmaaxbt45rr72WSy65hPr6etra2igr\nKxMlWWPUkeIZi8VYtWoVl112GcuXL8fpdLJhwwZycnLwer2jfejCMIa75mqaNngvtdls/O53v2PZ\nsmXi3DzNiWRaOEx/fz/pdJqFCxcOrghQUFAwmFR5PB4KCgoAMJvNrF+/nnPOOWcwORPGnuFiCnqy\nvH37dtatW8eGDRsoKSmhsLCQuXPnikR6jDpSPCdPnsySJUsoKirCYDBgtVpZt24d55xzDkajqOwb\ni44UT7vdziuvvEJVVRUTJkwgIyODmpoapkyZIkYbxrAj3UclSUJVVex2Oy0tLZjNZoqKikb5iIUT\nIQrpBADeeecddu3aRTQaxePxUF1dzeLFizGZTNTW1uL3+4d8XkNDA1lZWaLeaww61pj29/cTCoXI\nysriwQcf5KabbqKjo4PW1tZRfgfCwY7nHHU6nYN/bmhowOPxiLrpMeZY41lWVsa1117LqlWrCIVC\nvPvuu7S0tAyW9ghjx7HGVNM0ZFkmlUoBeqfU/u8LpyfRM/0ppmkawWCQBx98kKamJnw+H5s3b6ay\nshK73Y7RaMRgMNDQ0EA6naasrAzQ1yPevXs3jzzyCMFgkOXLl5OVlTXK70aAkcU0MzOTWbNmsWjR\nIkwmEwaDgQULFpCdnT3ab+dTb6TnaCqVoqamhp/+9KcEg0GuueYacY6OASON58SJE4nH42zatIk9\ne/Zw4403imVJx4iRxHR/z7TJZGLjxo0kEgmmT58uRgJPYyKZ/pTavwxPIBBg3759fPe732XOnDns\n3r2bdevWsWTJEgCys7Npa2vD5/NRXl6OpmlYrVa6urqYMmUK11xzjeghGSNGGlNFUXA4HKiqiqZp\nmEymwZ4SYfScyDlqNpsJBAKUl5eLc3SMGGk80+k0JpOJKVOmMGvWLM477zwx4XuMGGlM9yfSAPPm\nzWPmzJmj+TaEk0CM+33KKIrCs88+O7hgfHt7++Dwr8Fg4Prrr2fv3r3s2rVr8DnV1dXE43FWrFjB\nv/zLv+D3+5k1axYLFiwYrbchHOREY/rNb34Tv9+PLMuiFGAMOFnn6NSpU1m4cOFovQ1hwInG81vf\n+tZgeYCoeR8bTjSmt9xyi4jpOCPunJ8iu3bt4s477yQSiZCfn89zzz2H0Whk586d1NXVAfpktC98\n4Qs8//zzg8/bunUrq1atoqysjIceekjswDWGiJiOLyKe44uI5/gjYioMRZR5fIr09vZSXFzMlVde\nSXl5OfX19RiNRs444wyee+45LrjgAlRVJTs7m127dlFRUYHD4aCzs5Pq6mouvvhisfzdGCNiOr6I\neI4vIp7jj4ipMBTRM/0pUl5ezuLFi1FVFYCpU6fS29vLeeedh6qqvPbaa8iyjM/nQ5ZlcnNzAViw\nYAFVVVWjeejCMERMxxcRz/FFxHP8ETEVhiKS6U8Ri8WCyWQarO3asWPH4ESWb3zjG7S1tfHAAw/w\n6KOPUl5eDoilesY6EdPxRcRzfBHxHH9ETIWhiMr3T6H9Leq+vj7mz58PgM1m44tf/CItLS3k5uYO\n1nOJpXpODyKm44uI5/gi4jn+iJgKBxPJ9KeQJEmk02lcLhdNTU08/fTTOJ1ObrjhBqZNmzbahyeM\ngIjp+CLiOb6IeI4/IqbCwUQy/SkkSRL79u1j3bp1dHd3c/7557Ns2bLRPizhBIiYji8inuOLiOf4\nI2IqHEzSRDHPp5LP52Pt2rVcdtllg4vHC6c3EdPxRcRzfBHxHH9ETIX9RDItCIIgCIIgCCMkVvMQ\nBEEQBEEQhBESybQgCIIgCIIgjJBIpgVBEARBEARhhEQyLQiCIAiCIAgjJJJpQRAEQRAEQRghkUwL\ngiAIgiAIwgiJZFoQBEEQBEEQRkgk04IgCIIgCIIwQv8f/MTW83VxgQwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1c597ee5518>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuray_table.plot(figsize=(12, 6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>train</th>\n",
       "      <th>test</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.008238</td>\n",
       "      <td>0.008471</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>median</th>\n",
       "      <td>0.005091</td>\n",
       "      <td>0.004721</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.009384</td>\n",
       "      <td>0.018077</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           train      test\n",
       "mean    0.008238  0.008471\n",
       "median  0.005091  0.004721\n",
       "std     0.009384  0.018077"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuray_table.aggregate([np.mean, np.median, np.std])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "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.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
