{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('ggplot')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import re\n",
    "from itertools import chain\n",
    "from collections import Counter\n",
    "\n",
    "import numpy as np\n",
    "import scipy.stats\n",
    "from sklearn.metrics import confusion_matrix, accuracy_score, classification_report\n",
    "from sklearn.grid_search import RandomizedSearchCV\n",
    "from sklearn_crfsuite.metrics import flat_classification_report, sequence_accuracy_score\n",
    "from sklearn_crfsuite import scorers\n",
    "from sklearn_crfsuite import CRF\n",
    "\n",
    "from formasaurus.annotation import get_annotation_folds\n",
    "from formasaurus.storage import Storage\n",
    "from formasaurus import formtype_model, fieldtype_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "storage = Storage('../formasaurus/data/')\n",
    "index = storage.get_index()\n",
    "field_schema = storage.get_field_schema()\n",
    "form_schema = storage.get_form_schema()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Many field types have only a few examples in annotation data, so here we're considering only some of the field types and use more coarse grained classes. Simplification rules are defined in config.json file.\n",
    "\n",
    "For easier debugging long class names are used by default."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1192, 1244)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_ann_iter = storage.iter_annotations(\n",
    "    index=index, \n",
    "    simplify_form_types=True,\n",
    "    simplify_field_types=True\n",
    ")\n",
    "\n",
    "annotations_all = list(a for a in _ann_iter if True)\n",
    "annotations_complete = [a for a in annotations_all if a.fields_annotated]\n",
    "len(annotations_complete), len(annotations_all)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The model is two-stage:\n",
    "\n",
    "1. First, we train Formasaurus form type detector.\n",
    "2. Second, we use form type detector results to improve quality of field type detection.\n",
    "\n",
    "We have form types available directly in training data, but in reality form type detecor will make mistakes. It is better for field type detector to account for this and not rely on form types blindly. So it should be trained on input where form type detection quality is roughly the same it'll be in real life. \n",
    "\n",
    "To get 'realistic' form type labels we split data into 10 folds, and then for each fold we predict its labels using form type detector trained on the rest 9 folds."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 12.6 s, sys: 61.5 ms, total: 12.7 s\n",
      "Wall time: 12.7 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "form_types_realistic = formtype_model.get_realistic_form_labels(annotations_complete, n_folds=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'login'"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "form_types_realistic[100]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Check quality - it should be around 0.9:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8901006711409396"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "form_types_correct = np.asarray([a.type_full for a in annotations_complete])\n",
    "accuracy_score(form_types_correct, form_types_realistic)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Prepare training/testing data for field type detection. We use 1/4 (25%) of data for testing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "894 298\n",
      "CPU times: user 1.72 s, sys: 18.3 ms, total: 1.74 s\n",
      "Wall time: 1.75 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "def get_annotation_train_test_indices(annotations, n_folds=4):\n",
    "    \"\"\"\n",
    "    Split annotations into train and test parts, return train and test indices.\n",
    "    The size of test part is approximately ``len(annotations)/n_folds``.\n",
    "    it is guaranteed forms from the same website can't be both\n",
    "    in train and test parts.\n",
    "    \"\"\"\n",
    "    for idx_train, idx_test in get_annotation_folds(annotations, n_folds):\n",
    "        break\n",
    "    return idx_train, idx_test\n",
    "\n",
    "def select_by_index(arr, index):\n",
    "    \"\"\"\n",
    "    Like numpy indexing, but for lists. This is for cases\n",
    "    conversion to numpy array is problematic.\n",
    "\n",
    "    >>> select_by_index(['a', 'b', 'c', 'd'], [0, 3])\n",
    "    ['a', 'd']\n",
    "    \"\"\"\n",
    "    return [arr[i] for i in index]\n",
    "\n",
    "idx_train, idx_test = get_annotation_train_test_indices(annotations_complete, 4)\n",
    "\n",
    "annotations_train = select_by_index(annotations_complete, idx_train)\n",
    "annotations_test = select_by_index(annotations_complete, idx_test)\n",
    "\n",
    "# form_types_train = form_types_realistic[idx_train]\n",
    "form_types_train = form_types_correct[idx_train]\n",
    "form_types_test = form_types_realistic[idx_test]\n",
    "\n",
    "X_train, y_train = fieldtype_model.get_Xy(annotations_train, form_types_train, full_type_names=True)\n",
    "X_test, y_test = fieldtype_model.get_Xy(annotations_test, form_types_test, full_type_names=True)\n",
    "X, y = X_train + X_test, y_train + y_test\n",
    "print(len(X_train), len(X_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "#[(idx, yseq) for idx, yseq in enumerate(y_train) if 'GENDER' in yseq]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# X_train[10]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Find regularization parameters for field type detector using randomized search. \n",
    "We're optimizing for weighted average of F1 metric. Only training data is used; 5-fold cross-validation is performed at each iteration.\n",
    "\n",
    "Note that this may take quite a lot of CPU time and RAM."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 5 folds for each of 50 candidates, totalling 250 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Done  34 tasks      | elapsed:   56.0s\n",
      "[Parallel(n_jobs=-1)]: Done 184 tasks      | elapsed:  4.1min\n",
      "[Parallel(n_jobs=-1)]: Done 250 out of 250 | elapsed:  5.5min finished\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 52.1 s, sys: 2.03 s, total: 54.1 s\n",
      "Wall time: 5min 35s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "params_space = {\n",
    "    'c1': scipy.stats.expon(scale=0.5),\n",
    "    'c2': scipy.stats.expon(scale=0.05),\n",
    "#     'max_iterations': [25, 30, 35, 100]\n",
    "#     'min_freq': [None, 2],\n",
    "}\n",
    "\n",
    "crf = CRF(all_possible_transitions=True, max_iterations=100)\n",
    "rs = RandomizedSearchCV(crf, params_space, \n",
    "    cv=get_annotation_folds(annotations_train, 5), \n",
    "    verbose=1, \n",
    "    n_jobs=-1, \n",
    "    n_iter=50,\n",
    "    iid=False, \n",
    "    scoring=scorers.sequence_accuracy #fieldtype_model.scorer\n",
    ")\n",
    "rs.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best params: {'c1': 0.12763081501711115, 'c2': 0.022130453058798433}\n",
      "best score: 0.7607055426526896\n",
      "model size: 0.59M\n"
     ]
    }
   ],
   "source": [
    "crf = rs.best_estimator_\n",
    "print('best params:', rs.best_params_)\n",
    "print('best score:', rs.best_score_)\n",
    "print(\"model size: {:0.2f}M\".format(crf.size_ / 1000000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "({'c1': 0.12763081501711115, 'c2': 0.022130453058798433}, 0.81810490693739424)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rs.best_params_, crf.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dark blue => 0.733, dark red => 0.761\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nSCUGKiIiIiIiIpUYqIiIiIiIiFRioCIiIiIiIlKJgYqIiIiIiEglBioiIiIiIiKVGKiIiIiIiIhU\nYqAiIiIiIiJSiYGKiIiIiIhIJQYqIiIiIiIilRioiIiIiIiIVGKgIiIiIiIiUomBioiIiIiISCUG\nKiIiIiIiIpUYqIiIiIiIiFRioCIiIiIiIlKpUgYqk8mEqKgoZ5dBRERERES3gaioKJhMJlXzKiIi\ndq6nQklISHB2CUROZzQakZqa6uwyiCoErg9EubguEOUKCgoq0/yV8ggVERERERFReWCgIiIiIiIi\nUomBioiIiIiISCUGKiIiIiIiIpUYqIiIiIiIiFRioCIiIiIiIlKJgYqIiIiIiEglBioiIiIiIiKV\nGKiIiIiIiIhUYqAiIiIiIiJSiYGKiIiIiIhIJQYqIiIiIiIilRioiIiIiIiIVGKgIiIiIiIiUomB\nioiIiIiISCUGKiIiIiIiIpUYqIiIiIiIiFRioCIiIiIiIlKJgYqIiIiIiEglBioiIiIiIiKVGKiI\niIiIiIhUYqAiIiIiIiJSqVIGKpPJhKioKGeXQUREREREt4GoqCiYTCZV8yoiInaup0JJSEhwdglE\nTmc0GpGamursMogqBK4PRLm4LhDlCgoKKtP8lfIIFRERERERUXlgoCIiIiIiIlKJgYqIiIiIiEgl\nBioiIiIiIiKVGKiIiIiIiIhUYqAiIiIiIiJSiYGKiIiIiIhIJQYqIiIiIiIilRioiIiIiIiIVGKg\nIiIiIiIiUomBioiIiIiISCUGKiIiIiIiIpUYqIiIiIiIiFRioCIiIiIiIlKJgYqIiIiIiEglBioi\nIiIiIiKVGKiIiIiIiIhUYqAiIiIiIiJSiYGKiIiIiIhIJQYqIiIiIiIilRioiIiIiIiIVGKgIiIi\nIiIiUomBioiIiIiISCUGKiIiIiIiIpUYqIiIiIiIiFRioCIiIiIiIlKJgYqIiIiIiEglBioiIiIi\nIiKVGKiIiIiIiIhUYqAiIiIiIiJSiYGKiIiIiIhIJQYqIiIiIiIilXTOLoCIiIjoTnDt2jWkpaVB\no9HAaDTC3d3d2SURkR1UykBlMplgMpkwePBgZ5dCREREd6grV67gu5+jcO7aaaRrbkDrmwO9UQex\nCDKTzdCmucLN7IE2DTuiW+fu0Okq5W4Z0W0hKioKYWFhCAsLK/W8ioiIA2qqMBISEpxdApHTGY1G\n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\nNkZvb2+p24CyYB5Gn507d8bt93TG2h3rY+xbp8TUBTNjbFPDq163b+ee2LKyO/Y+uDmOn3RsfPAd\n76/qC1CYBRjS0tIyovUCFYwCDppwkHkYvXK5XKxa/UQ89uzK2LRrc+yt7Y985CMTmRg3WB/Txh8e\npx0/P+ad8paora0tdbtFZxZgyEgDVV2B+igr2Ww2stlsdHS4TwQAMKSmpiYWzJsfC+bNL3UrQJnp\n7OyMtra2aGtrG/ZaZ6hgFPBXSDjIPMAQswBDRnqGykUpAAAAEhKoAAAAEhKoAAAAEhKoAAAAEhKo\nAAAAEhKoAAAAEhKoAAAAEhKoAAAAEhKoAAAAEhKoAAAAEhKoAAAAEhKoAAAAEhKoAAAAEqrKQJXN\nZqOzs7PUbQAAABWgs7MzstlsorWZfD6fL3A/ZaW7u7vULUDJNTY2Rm9vb6nbgLJgHmCIWYAhLS0t\nI1pflWeoAAAA0iBQAQAAJCRQAQAAJCRQAQAAJCRQAQAAJCRQAQAAJCRQAQAAJCRQAQAAJCRQAQAA\nJCRQAQAAJCRQAQAAJCRQAQAAJCRQAQAAJCRQAQAAJCRQAQAAJCRQAQAAJCRQAQAAJFSVgSqbzUZn\nZ2ep2wAAACpAZ2dnZLPZRGsz+Xw+X+B+ykp3d3epW4CSa2xsjN7e3lK3AWXBPMAQswBDWlpaRrS+\nKs9QAQAApEGgAgAASEigAgAASEigAgAASEigAgAASEigAgAASEigAgAASEigAgAASEigAgAASEig\nAgAASEigAgAASEigAgAASEigAgAASEigAgAASEigAgAASEigAgAASEigAgAASEigAgAASEigAgAA\nSEigAgAASEigAgAASEigAgAASKgqA1U2m43Ozs5StwEAAFSAzs7OyGazidZm8vl8vsD9lJXu7u5S\ntwAl19jYGL29vaVuA8qCeYAhZgGGtLS0jGh9VZ6hAgAASINABQAAkJBABQAAkJBABQAAkJBABQAA\nkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBA\nBQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAA\nkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkJBABQAAkFBV\nBqpsNhudnZ2lbgMAAKgAnZ2dkc1mE63N5PP5fIH7KSvd3d2lbgFKrrGxMXp7e0vdBpQF8wBDzAIM\naWlpGdH6qjxDBQAAkAaBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGB\nCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAA\nICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGB\nCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAA\nICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGB\nCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAIKGKCVT79u2LK664IlatWlXqVgAAACKi\nggLV3XffHWeccUap2wAAADigLs1iN954Y6xatSqampri2muvPfD86tWr45Zbbol8Ph/t7e1x8cUX\nH7JuzZo1MXPmzNi/f3+a7QIAALyuVANVe3t7XHjhhXHDDTcceC6Xy8XSpUvjC1/4QkyePDmuuOKK\nOPXUU6O1tTUefPDB2LBhQ+zZsyfGjx8fL730UowZMybmzZuXZtsAAACvKdVAdfzxx8fmzZsPeW79\n+vUxY8aMmDp1akREnHXWWbFixYpobW2NhQsXxsKFCw+89mc/+1k0Njb+xv2z2Wxks9kDjzs6OqKl\npaXAXwVUptebHRhtzAMMMQswpLOz88C/29raoq2t7Q2vLflnqHp6emLKlCkHHjc3N0dPT89rvvac\nc8553bNTbW1t0dHRceB/v/6NqXbl8rWm0Ucha4xkryRrh7Pmjb72jbyuXP7/kYZy+VrNQmHXmIfh\nK6evs9i9lMssJF3v2FB85fK1moXCrSn0LPx6hhhOmIoog0BFYQz3P3yxpNFHIWuMZK8ka4ez5o2+\ntlz+25eLcvl+mIXCrjEPw1dO34ti91Ius5B0vWND8ZXL98MsFG5NOc1CyQNVc3NzbNmy5cDjnp6e\naG5uLmFHlWm0/KAodI1y/iWynH5QVJJy+X6YhcKuMQ/DV07fC79EFm6NWUimXL4fZqFwa8ppFlIP\nVPl8PvL5/IHHs2fPjo0bN8bmzZtjYGAgli9fHgsWLChIrXIZHiiBsUrWAAAFLklEQVQ1swAHmQcY\nYhZgyEhnIZP/9XRTZNdff32sXbs2ent7o6mpKTo6OqK9vT2eeOKJA5dNX7Ro0asumw4AAFCOUg1U\nAAAA1aTkn6ECAACoVAIVAABAQgIVAABAQgIVAABAQnWlbiBtXV1dsWzZsujr64u5c+fGokWLSt0S\nlMyKFSti1apVsWfPnli0aFGcfPLJpW4JSuKVV16J73//+7F79+748z//81K3AyWxb9++WLJkSdTX\n18ecOXPirW99a6lbgpIZznFh1J2ham1tjcWLF8enP/3pePLJJ0vdDpTUqaeeGh/72Mdi8eLF8fOf\n/7zU7UDJTJs2LT7+8Y+Xug0oqUcffTTOOOOMuOyyy+Lxxx8vdTtQUsM5LlTsGaobb7wxVq1aFU1N\nTXHttdceeH716tUH7mnV3t7+mve0evzxx+O+++6Lc889N82WoWhGMg8REXfeeWdccMEFabULRTPS\nWYBqMtx56OnpiaOPPjoiImpqRt3f3KlyxTw+VOy0tLe3x5VXXnnIc7lcLpYuXRpXXnllXHfddbF8\n+fLo6uqKiIgHH3wwbr311ti2bVssWLAgrrjiinjggQdK0DkUXtJ56Onpidtuuy3mzZsXxxxzTAk6\nh8IaybEBqs1w52HKlCmxdevWiIhwm1KqzXDnYTgqNlAdf/zxMWHChEOeW79+fcyYMSOmTp0adXV1\ncdZZZ8WKFSsiImLhwoXx4Q9/OF5++eW4+eab46abboq2trZStA4Fl3QeHn300Xj66afjkUceifvv\nv78UrUNBJZ2F+vr6+Na3vhUvvvhi3HXXXaVoHQpuuPNw2mmnxSOPPBJLliyJ+fPnl6JlKJrhzkNf\nX98bPi5U7Fv+XktPT09MmTLlwOPm5uZYv379Ia+ZM2dOzJkzJ+3WIHVvZB4uvPDCuPDCC9NuDVL1\nRmZh4sSJsXjx4rRbg9S93jyMHTs2PvGJT5SqNUjd683DcI4LFXuGCgAAoNSqKlA1NzfHli1bDjzu\n6emJ5ubmEnYEpWMeYIhZgIPMAxxUqHmo6ECVz+cP+dDk7NmzY+PGjbF58+YYGBiI5cuXx4IFC0rY\nIaTHPMAQswAHmQc4qFjzkMlX6GVcrr/++li7dm309vZGU1NTdHR0RHt7ezzxxBMHLn24aNEil8Zl\nVDAPMMQswEHmAQ4q5jxUbKACAAAotYp+yx8AAEApCVQAAAAJCVQAAAAJCVQAAAAJCVQAAAAJCVQA\nAAAJCVQAAAAJCVQAAAAJ1ZW6AQAohoceeijuueee6OrqioaGhjjmmGPiPe95T0yYMCG+/e1vx4YN\nG6Kvry/uuOOOUrcKQAUTqACoOj/+8Y/j7rvvjssuuyzmzp0bdXV1sXr16li5cmUsWrQozjzzzDj/\n/PPja1/7WqlbBaDCCVQAVJXdu3dHZ2dnfPKTn4xTTz31wPPz5s2LefPmRUTEjBkzYuPGjaVqEYAq\n4jNUAFSV5557Lvr7+w8JUwBQLAIVAFWlr68vJk2aFDU1DnEAFJ+jDQBVZeLEibFz587I5XKlbgWA\nUUCgAqCqHHfccVFfXx8rVqwodSsAjAICFQBVZfz48dHR0RFLly6NFStWxP79+2NwcDBWr14dt912\nW0RE9Pf3x8DAwKv+DQDDlcnn8/lSNwEAhfb/34dq1qxZcckll8TkyZPj8ssvP+S1U6dOjRtuuKFE\nnQJQyQQqAACAhLzlDwAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAAICGBCgAA\nIKH/B40nxFA8T5ohAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10e41b358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "_x = [s.parameters['c1'] for s in rs.grid_scores_]\n",
    "_y = [s.parameters['c2'] for s in rs.grid_scores_]\n",
    "_c = [s.mean_validation_score for s in rs.grid_scores_]\n",
    "_s = [200000*s.cv_validation_scores.std()**2 for s in rs.grid_scores_]\n",
    "\n",
    "fig = plt.figure()\n",
    "fig.set_size_inches(14, 14)\n",
    "ax = plt.gca()\n",
    "ax.set_yscale('log')\n",
    "ax.set_xscale('log')\n",
    "ax.set_xlabel('C1')\n",
    "ax.set_ylabel('C2')\n",
    "ax.set_title(\"Randomized Hyperparameter Search Results (min={:0.3}, max={:0.3})\".format(\n",
    "    min(_c), max(_c)\n",
    "))\n",
    "\n",
    "ax.scatter(_x, _y, c=_c, s=_s, alpha=0.9, edgecolors=[0,0,0])\n",
    "\n",
    "print(\"Dark blue => {:0.3}, dark red => {:0.3}\".format(min(_c), max(_c)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.81810490693739424"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# %%time\n",
    "crf = rs.best_estimator_\n",
    "# crf = CRF(c1=0.358, c2=0.161, verbose=False, max_iterations=200)\n",
    "# crf = CRF(c1=0.217, c2=0.05, verbose=False, max_iterations=30)\n",
    "# crf = CRF(c1=0.643, c2=0.198, verbose=False, max_iterations=200)\n",
    "# crf = CRF(c1=0.358, c2=0.161, verbose=False, max_iterations=200)\n",
    "crf.fit(X_train, y_train)\n",
    "crf.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#crf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                              precision    recall  f1-score   support\n",
      "\n",
      "                search query      0.900     0.964     0.931        84\n",
      "                       email      0.921     0.952     0.936       147\n",
      "                    password      1.000     0.988     0.994        83\n",
      "            product quantity      1.000     0.643     0.783        14\n",
      "               submit button      1.000     0.987     0.993        77\n",
      "                    username      0.717     0.884     0.792        43\n",
      "       password confirmation      1.000     1.000     1.000        27\n",
      " receive emails confirmation      0.625     0.192     0.294        26\n",
      "                  first name      0.947     0.783     0.857        23\n",
      "                   last name      1.000     0.857     0.923        21\n",
      "           organization name      1.000     0.667     0.800         3\n",
      "                     address      0.750     0.450     0.563        20\n",
      "                        city      0.875     0.583     0.700        12\n",
      "                       state      1.000     0.750     0.857         4\n",
      "                 postal code      1.000     0.667     0.800        21\n",
      "                     country      1.000     0.750     0.857        12\n",
      "                       phone      0.941     0.941     0.941        17\n",
      "                         fax      1.000     1.000     1.000         1\n",
      "            TOS confirmation      0.769     0.769     0.769        13\n",
      "                comment text      0.872     1.000     0.932        34\n",
      "                     captcha      0.833     0.714     0.769        21\n",
      "        remember me checkbox      0.968     1.000     0.984        30\n",
      "           username or email      1.000     0.500     0.667         8\n",
      "                       other      0.449     0.871     0.592       116\n",
      "             other read-only      1.000     0.333     0.500         9\n",
      "                style select      1.000     1.000     1.000         3\n",
      "          email confirmation      1.000     0.778     0.875         9\n",
      "                   time zone      0.000     0.000     0.000         4\n",
      "                         DST      0.000     0.000     0.000         2\n",
      "                      gender      1.000     0.704     0.826        27\n",
      "               about me text      0.000     0.000     0.000         1\n",
      "          reset/clear button      1.000     1.000     1.000         3\n",
      "search category / refinement      0.946     0.914     0.930       116\n",
      "                   full name      0.633     0.731     0.679        26\n",
      "           security question      0.000     0.000     0.000         0\n",
      " answer to security question      0.000     0.000     0.000         0\n",
      "    comment title or subject      0.658     0.431     0.521        58\n",
      "                   full date      1.000     0.556     0.714         9\n",
      "              sorting option      1.000     0.750     0.857         4\n",
      "                        year      0.900     0.900     0.900        10\n",
      "                         url      0.667     0.333     0.444         6\n",
      "               cancel button      1.000     1.000     1.000         1\n",
      "                 middle name      0.000     0.000     0.000         2\n",
      "                         day      1.000     0.857     0.923         7\n",
      "                       month      1.000     0.857     0.923         7\n",
      "                    honeypot      0.000     0.000     0.000        11\n",
      "                      OpenID      1.000     1.000     1.000         1\n",
      "                other number      0.000     0.000     0.000         9\n",
      "\n",
      "                 avg / total      0.836     0.818     0.810      1182\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/kmike/envs/py3-splash/lib/python3.4/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "/Users/kmike/envs/py3-splash/lib/python3.4/site-packages/sklearn/metrics/classification.py:1076: UndefinedMetricWarning: Recall and F-score are ill-defined and being set to 0.0 in labels with no true samples.\n",
      "  'recall', 'true', average, warn_for)\n"
     ]
    }
   ],
   "source": [
    "y_pred = crf.predict(X_test)\n",
    "print(flat_classification_report(\n",
    "    y_test, y_pred, digits=3, labels=crf.classes_, target_names=crf.classes_\n",
    "))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# import pandas as pd\n",
    "# pd.options.display.max_rows = 50\n",
    "# pd.options.display.max_columns = 50\n",
    "# labels_short = [field_schema.types[name] for name in labels]\n",
    "\n",
    "# pd.DataFrame(confusion_matrix(y_true_flat, y_pred_flat, labels), index=labels_short, columns=labels_short)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top likely transitions:\n",
      "security question              -> answer to security question    4.970772\n",
      "first name                     -> last name                      4.608590\n",
      "month                          -> day                            4.525933\n",
      "password                       -> password confirmation          4.516606\n",
      "username                       -> password                       3.314564\n",
      "comment title or subject       -> comment text                   3.253280\n",
      "month                          -> year                           3.073022\n",
      "sorting option                 -> sorting option                 3.026889\n",
      "comment title or subject       -> comment title or subject       2.949091\n",
      "email                          -> email confirmation             2.749066\n",
      "other number                   -> other number                   2.732831\n",
      "phone                          -> fax                            2.579593\n",
      "postal code                    -> city                           2.517252\n",
      "address                        -> address                        2.440293\n",
      "day                            -> month                          2.427446\n",
      "last name                      -> first name                     2.401364\n",
      "full name                      -> phone                          2.365352\n",
      "city                           -> state                          2.357266\n",
      "phone                          -> phone                          2.331425\n",
      "password                       -> remember me checkbox           2.301212\n",
      "time zone                      -> DST                            2.187891\n",
      "last name                      -> organization name              1.982628\n",
      "username                       -> email                          1.972116\n",
      "other                          -> other                          1.955632\n",
      "year                           -> month                          1.878611\n",
      "full name                      -> email                          1.846992\n",
      "other                          -> product quantity               1.763074\n",
      "search category / refinement   -> search category / refinement   1.699602\n",
      "email                          -> phone                          1.690795\n",
      "gender                         -> gender                         1.673723\n",
      "username                       -> full name                      1.646752\n",
      "username or email              -> password                       1.631020\n",
      "email                          -> password                       1.630164\n",
      "full name                      -> year                           1.538741\n",
      "address                        -> other                          1.471955\n",
      "email                          -> comment text                   1.469469\n",
      "state                          -> postal code                    1.382607\n",
      "search query                   -> submit button                  1.300024\n",
      "TOS confirmation               -> TOS confirmation               1.273765\n",
      "DST                            -> receive emails confirmation    1.256696\n",
      "comment text                   -> captcha                        1.216428\n",
      "other read-only                -> full date                      1.196033\n",
      "city                           -> other                          1.181466\n",
      "country                        -> comment title or subject       1.181126\n",
      "phone                          -> city                           1.156636\n",
      "other                          -> organization name              1.139118\n",
      "search query                   -> search category / refinement   1.121842\n",
      "comment title or subject       -> full name                      1.115648\n",
      "first name                     -> middle name                    1.096866\n",
      "address                        -> city                           1.086294\n",
      "email                          -> submit button                  1.071472\n",
      "full name                      -> receive emails confirmation    1.070736\n",
      "captcha                        -> submit button                  1.045420\n",
      "submit button                  -> other number                   1.035321\n",
      "email                          -> username                       1.026152\n",
      "day                            -> year                           1.018252\n",
      "password confirmation          -> security question              0.986216\n",
      "full name                      -> about me text                  0.974656\n",
      "postal code                    -> other                          0.967932\n",
      "reset/clear button             -> cancel button                  0.950674\n",
      "comment text                   -> honeypot                       0.944859\n",
      "url                            -> comment text                   0.925595\n",
      "email                          -> url                            0.916171\n",
      "password                       -> submit button                  0.910496\n",
      "organization name              -> full name                      0.903427\n",
      "password confirmation          -> full name                      0.895567\n",
      "url                            -> other                          0.890422\n",
      "organization name              -> email                          0.845182\n",
      "postal code                    -> country                        0.827151\n",
      "other                          -> gender                         0.818193\n",
      "full name                      -> country                        0.803133\n",
      "comment text                   -> submit button                  0.799921\n",
      "state                          -> city                           0.799562\n",
      "country                        -> postal code                    0.796824\n",
      "email                          -> comment title or subject       0.794227\n",
      "remember me checkbox           -> reset/clear button             0.778353\n",
      "other                          -> full date                      0.767856\n",
      "phone                          -> email                          0.766691\n",
      "submit button                  -> honeypot                       0.766249\n",
      "other                          -> phone                          0.739892\n",
      "address                        -> TOS confirmation               0.708569\n",
      "captcha                        -> receive emails confirmation    0.686417\n",
      "receive emails confirmation    -> about me text                  0.679384\n",
      "url                            -> about me text                  0.677763\n",
      "other                          -> url                            0.651275\n",
      "city                           -> submit button                  0.649595\n",
      "year                           -> receive emails confirmation    0.647641\n",
      "email                          -> security question              0.632234\n",
      "phone                          -> comment text                   0.629580\n",
      "password confirmation          -> email                          0.625597\n",
      "TOS confirmation               -> cancel button                  0.623967\n",
      "about me text                  -> comment text                   0.617602\n",
      "address                        -> country                        0.598019\n",
      "gender                         -> about me text                  0.596117\n",
      "other                          -> captcha                        0.593939\n",
      "other                          -> first name                     0.575724\n",
      "email                          -> captcha                        0.560085\n",
      "comment text                   -> receive emails confirmation    0.540805\n",
      "organization name              -> url                            0.537153\n",
      "receive emails confirmation    -> receive emails confirmation    0.521217\n",
      "\n",
      "Top unlikely transitions:\n",
      "password                       -> other                          -0.741624\n",
      "other                          -> comment title or subject       -0.842461\n",
      "other                          -> city                           -0.849363\n",
      "password confirmation          -> other                          -0.903192\n",
      "comment text                   -> comment text                   -0.948209\n",
      "remember me checkbox           -> remember me checkbox           -1.702658\n",
      "password                       -> password                       -2.136753\n",
      "submit button                  -> submit button                  -2.253558\n",
      "TOS confirmation               -> other                          -2.564202\n",
      "email                          -> email                          -3.766672\n"
     ]
    }
   ],
   "source": [
    "from collections import Counter\n",
    "\n",
    "def print_transitions(trans_features):\n",
    "    for (label_from, label_to), weight in trans_features:\n",
    "        print(\"%-30s -> %-30s %0.6f\" % (label_from, label_to, weight))\n",
    "\n",
    "print(\"Top likely transitions:\")\n",
    "print_transitions(Counter(crf.transition_features_).most_common(100))\n",
    "\n",
    "print(\"\\nTop unlikely transitions:\")\n",
    "print_transitions(Counter(crf.transition_features_).most_common()[-10:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5.503887 search category / refinement   form-type:search\n",
      "5.191162 search query                   form-type:search\n",
      "3.687156 product quantity               form-type:order/add to cart\n",
      "3.480852 remember me checkbox           form-type:login\n",
      "2.859949 sorting option                 form-type:search\n",
      "2.809606 comment text                   form-type:contact/comment\n",
      "2.278853 full name                      form-type:contact/comment\n",
      "2.264468 comment title or subject       form-type:contact/comment\n",
      "1.915475 TOS confirmation               form-type:other\n",
      "1.909192 email                          form-type:join mailing list\n",
      "1.700867 other number                   form-type:search\n",
      "1.698757 honeypot                       form-type:contact/comment\n",
      "1.599296 username                       form-type:password/login recovery\n",
      "1.507415 other                          form-type:other\n",
      "1.486112 receive emails confirmation    form-type:registration\n",
      "1.412938 about me text                  form-type:registration\n",
      "1.342868 style select                   form-type:other\n",
      "1.330604 other                          form-type:order/add to cart\n",
      "1.165471 username                       form-type:registration\n",
      "1.131049 gender                         form-type:registration\n",
      "1.020059 username or email              form-type:login\n",
      "1.014424 full date                      form-type:search\n",
      "0.963375 captcha                        form-type:contact/comment\n",
      "0.959851 city                           form-type:search\n",
      "0.957146 security question              form-type:registration\n",
      "0.908648 url                            form-type:other\n",
      "0.857250 other                          form-type:contact/comment\n",
      "0.832481 username or email              form-type:password/login recovery\n",
      "0.784852 password                       form-type:login\n",
      "0.759310 username                       form-type:login\n",
      "0.734724 country                        form-type:registration\n",
      "0.731456 postal code                    form-type:other\n",
      "0.688396 other                          form-type:join mailing list\n",
      "0.658216 submit button                  form-type:order/add to cart\n",
      "0.625014 phone                          form-type:registration\n",
      "0.621839 first name                     form-type:join mailing list\n",
      "0.621792 password confirmation          form-type:registration\n",
      "0.570176 captcha                        form-type:registration\n",
      "0.536687 OpenID                         form-type:login\n",
      "0.521455 TOS confirmation               form-type:registration\n",
      "0.462538 year                           form-type:registration\n",
      "0.454401 submit button                  form-type:search\n",
      "0.437056 address                        form-type:search\n",
      "0.424974 last name                      form-type:password/login recovery\n",
      "0.309187 submit button                  form-type:join mailing list\n",
      "0.273553 first name                     form-type:contact/comment\n",
      "0.270707 cancel button                  form-type:registration\n",
      "0.150232 day                            form-type:registration\n",
      "0.118781 state                          form-type:other\n",
      "0.111662 url                            form-type:order/add to cart\n",
      "0.096062 other number                   form-type:other\n",
      "0.081026 answer to security question    form-type:registration\n",
      "0.058490 organization name              form-type:contact/comment\n",
      "0.051186 fax                            form-type:registration\n",
      "0.007438 state                          form-type:search\n",
      "0.005471 address                        form-type:contact/comment\n",
      "0.000362 reset/clear button             form-type:login\n",
      "-0.005651 address                        form-type:registration\n",
      "-0.026037 other                          form-type:registration\n",
      "-0.045462 first name                     form-type:registration\n",
      "-0.049368 state                          form-type:registration\n",
      "-0.050954 other number                   form-type:registration\n",
      "-0.059982 about me text                  form-type:contact/comment\n",
      "-0.075396 full date                      form-type:registration\n",
      "-0.089012 first name                     form-type:other\n",
      "-0.090177 username                       form-type:join mailing list\n",
      "-0.097054 email                          form-type:order/add to cart\n",
      "-0.108410 captcha                        form-type:search\n",
      "-0.179691 submit button                  form-type:password/login recovery\n",
      "-0.188628 TOS confirmation               form-type:contact/comment\n",
      "-0.223358 full name                      form-type:registration\n",
      "-0.255577 remember me checkbox           form-type:registration\n",
      "-0.337300 email                          form-type:registration\n",
      "-1.227122 submit button                  form-type:registration\n",
      "-1.377278 comment text                   form-type:registration\n",
      "-2.064874 username                       form-type:contact/comment\n",
      "-2.335361 other                          form-type:search\n"
     ]
    }
   ],
   "source": [
    "def _filtered_state_features(state_features, query, k=1):\n",
    "    return Counter({\n",
    "        (attr, label): weight\n",
    "        for ((attr, label), weight) in state_features.items()\n",
    "        if (query in attr or query in label) and k*weight >= 0\n",
    "    })\n",
    "\n",
    "\n",
    "def print_state_features(state_features):\n",
    "    for (attr, label), weight in state_features:\n",
    "        print(\"%0.6f %-30s %s\" % (weight, label, attr))    \n",
    "        \n",
    "\n",
    "def print_top_positive(crf, N, query=''):\n",
    "    print(\"\\nTop positive:\")\n",
    "    cnt = _filtered_state_features(crf.state_features_, query, 1)\n",
    "    print_state_features(cnt.most_common(N))\n",
    "    \n",
    "\n",
    "def print_top_negative(crf, N, query=''):\n",
    "    print(\"\\nTop negative:\")\n",
    "    cnt = _filtered_state_features(crf.state_features_, query, -1)\n",
    "    print_state_features(cnt.most_common()[-N:])\n",
    "    \n",
    "\n",
    "def print_top(crf, N, query=''):\n",
    "    cnt = _filtered_state_features(crf.state_features_, query, 0)\n",
    "    print_state_features(cnt.most_common(N))\n",
    "    \n",
    "\n",
    "print_top(crf, 150, 'form-type')\n",
    "\n",
    "# print(\"\\nTop negative:\")\n",
    "# print_top_negative(info, 30, 'input-type')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "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.4.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
