{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Learning-to-rank using the WARP loss\n", "\n", "LightFM is probably the only recommender package implementing the WARP (Weighted Approximate-Rank Pairwise) loss for implicit feedback learning-to-rank. Generally, it perfoms better than the more popular BPR (Bayesian Personalised Ranking) loss --- often by a large margin.\n", "\n", "It was originally applied to image annotations in the Weston et al. [WSABIE paper](http://www.thespermwhale.com/jaseweston/papers/wsabie-ijcai.pdf), but has been extended to apply to recommendation settings in the [2013 k-order statistic loss paper](http://www.ee.columbia.edu/~ronw/pubs/recsys2013-kaos.pdf) in the form of the k-OS WARP loss, also implemented in LightFM.\n", "\n", "Like the BPR model, WARP deals with (user, positive item, negative item) triplets. Unlike BPR, the negative items in the triplet are not chosen by random sampling: they are chosen from among those negatie items which would violate the desired item ranking given the state of the model. This approximates a form of active learning where the model selects those triplets that it cannot currently rank correctly.\n", "\n", "This procedure yields roughly the following algorithm:\n", "\n", "1. For a given (user, positive item pair), sample a negative item at random from all the remaining items. Compute predictions for both items; if the negative item's prediction exceeds that of the positive item plus a margin, perform a gradient update to rank the positive item higher and the negative item lower. If there is no rank violation, continue sampling negative items until a violation is found.\n", "2. If you found a violating negative example at the first try, make a large gradient update: this indicates that a lot of negative items are ranked higher than positives items given the current state of the model, and the model must be updated by a large amount. If it took a lot of sampling to find a violating example, perform a small update: the model is likely close to the optimum and should be updated at a low rate.\n", "\n", "While this is fairly hand-wavy, it should give the correct intuition. For more details, read the paper itself or a more in-depth blog post [here](https://building-babylon.net/2016/03/18/warp-loss-for-implicit-feedback-recommendation/). A similar approach for BPR is described in Rendle's 2014 [WSDM 2014 paper](http://webia.lip6.fr/~gallinar/gallinari/uploads/Teaching/WSDM2014-rendle.pdf).\n", "\n", "Having covered the theory, the rest of this example looks at the practical implications of using WARP in LightFM.\n", "\n", "## Preliminaries\n", "Let's first get the data. We'll use the MovieLens 100K dataset." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import time\n", "\n", "import numpy as np\n", "\n", "%matplotlib inline\n", "\n", "import matplotlib\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from lightfm import LightFM\n", "from lightfm.datasets import fetch_movielens\n", "from lightfm.evaluation import auc_score\n", "\n", "movielens = fetch_movielens()\n", "\n", "train, test = movielens['train'], movielens['test']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Accuracy\n", "The first interesting experiment is to compare the accuracy between the WARP and BPR losses. Let's fit two models with equivalent hyperparameters and compare their accuracy across epochs. Whilst we're fitting them, let's also measure how much time each epoch takes." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "alpha = 1e-05\n", "epochs = 70\n", "num_components = 32\n", "\n", "warp_model = LightFM(no_components=num_components,\n", " loss='warp',\n", " learning_schedule='adagrad',\n", " max_sampled=100,\n", " user_alpha=alpha,\n", " item_alpha=alpha)\n", "\n", "bpr_model = LightFM(no_components=num_components,\n", " loss='bpr',\n", " learning_schedule='adagrad',\n", " user_alpha=alpha,\n", " item_alpha=alpha)\n", "\n", "warp_duration = []\n", "bpr_duration = []\n", "warp_auc = []\n", "bpr_auc = []\n", "\n", "for epoch in range(epochs):\n", " start = time.time()\n", " warp_model.fit_partial(train, epochs=1)\n", " warp_duration.append(time.time() - start)\n", " warp_auc.append(auc_score(warp_model, test, train_interactions=train).mean())\n", " \n", "for epoch in range(epochs):\n", " start = time.time()\n", " bpr_model.fit_partial(train, epochs=1)\n", " bpr_duration.append(time.time() - start)\n", " bpr_auc.append(auc_score(bpr_model, test, train_interactions=train).mean())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plotting the results immediately reveals that WARP produces superior results: a smarter way of selecting negative examples leads to higher quality rankings. Test accuracy decreases after the first 10 epochs, suggesting WARP starts overfitting and would benefit from regularization or early stopping." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAFkCAYAAAB1rtL+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3XmcVNWd///Xpxd6Y1MaUEBZ3ACRII1RWtwwbiiuo4AL\nJviLS1wxxkwyM8E120QZcEI0MRMgNG1IglvUwVFwA8QfjUYQMC4QZBFoxKb3rc73j1tVVPUCXdVV\nXXTV+/l43EdV3Xvq1KlD0fWuc8+915xziIiIiEQjLdENEBERkc5LQUJERESipiAhIiIiUVOQEBER\nkagpSIiIiEjUFCREREQkagoSIiIiEjUFCREREYmagoSIiIhETUFCREREoqYgISIiIlFTkBAREZGo\nKUiIiIhI1BQkREREJGoZiW5ANMysF3ABsBmoSWxrREREOpVsYBCwxDm3p72VdcoggRciihLdCBER\nkU7sOmBheyvprEFiM8CCBQsYNmxYgpuSeNOnT2fmzJmJbkbCqR/2U1941A8e9cN+6gvYsGED119/\nPfi/S9urswaJGoBhw4YxevToRLcl4Xr06KF+QP0QSn3hUT941A/7qS/CxGRqgCZbioiISNQUJERE\nRCRqChIiIiISNQWJJDBlypREN+GQoH7YT33hUT941A/7qS9iz5xziW5DxMxsNFBSUlKiSTMiIiIR\nWLNmDQUFBQAFzrk17a2vsx61ISKSFLZs2UJpaWmimyFJJj8/n6OPPrpDXktBQkQkQbZs2cKwYcOo\nqqpKdFMkyeTm5rJhw4YOCRMKEiIiCVJaWkpVVZVOricxFTjhVGlpqYKEiEgq0Mn1pDNTkOiEGhrg\n669h717vdt8+KC/fv1RU7L+tqYHaWu82dKmv9+ppbPSW0Puhi8+3/37ovFyz5rdpad7S9H7T1wjc\nOgcZGS0v6enekpbW/H5ge2jZjAzIzISsLMjObn7b0pKT423PyoIuXcKXwLrA9qws7zUC71dERDwK\nEoeAxkbYvh3++U/YtQt2725+W1q6PzyUl7deV3o6dOvmLXl53pdl0y/Qnj29L93QL+wDLYEv8LSQ\ng4VDQ4Vz+xefL3xxbn89TQNA4L03NHhLINzU1zcPMaH3m4aSwFJV5YWmQHBqer+62rsf7YFKZvvD\nRU7O/r4N3M/Jgdxc6Np1/9KtW8v3W3qclRVdu0REEklBooPU1cGnn8KGDfDZZ/D557Bpk7ds3ux9\neQakpUHv3t7Sp493O2wYHHaYt/TsGX6/e/f94SErS7+aD8Q5r69DR2fq6ryltnb//cDj1paaGi+Y\nhC41NV6Y+fLL8FGhwP3GxgO3LTNz/79jaMhoOloSOmrS2ohLXl54SAksubn7n5+ers+KiLSfgkSM\n1dd7YeHDD73bDRtg/XovPDQ0eGW6d4fBg71l4sT99wcNgr594fDDw3/9S+wERhW6dPH+HTqKc14A\nCQSL0KARetv0fmXl/mBTUdE89IQGokDACXzODibQF5mZ3m1gRCU31wsiofcD21q6bW1pWk9mZnz7\nWEQSQ0GiHSoqvMDw/vv7l3XrvD/wAP37eyMJ558Pw4d794cN80YY9EswtZjtHy3Iz4/vazU0eAEk\nNLQElspKL+zW1e2/DSyBEZXKSu82sHz5pTfiUlXV/LYmgmsHZmY2DxehoaStwSSwhD5uOi9GQVyk\n4yhIRGjTJnj+eW95+21vuDozE048EUaNghtvhJNPhpEjoUePRLdWUlFGhvfZ64jPn8+3f/5J6BII\nG6GhJHC/snJ/mdDte/fCtm3hu4pC6wzd/XcwoRNvY7m0NNISel8BxrNo0SImT57Ms88+y2WXXRa2\nbeTIkaxbt45ly5Zx1llnhW07+uijGThwIG+//XbYep/PR//+/dm5cyevvPIKF1xwQbPXfPDBB3nw\nwQeDjzMyMujfvz+XXnopDz30ED2a/IcYNGgQW7ZsCT7u3bs3J5xwAvfeey+XX355m9/r/fffz69+\n9SsmTZpEcXFxs+1vvvkm55xzDn/5y1+48sorm22/4447mDNnDj6fr9l7njdvHvPnz+fDDz+ksrKS\nI488knPOOYfbb789cGbKQ4KCxEH4fFBSsj88rFvnDQOfey7Mng1jx3qjDZooJ6koLW3/iEG81dc3\nDySB+6FHJjU9Sqmlo5YC68vLvcnMoeurq5vX11aB+SmhASOwa6il3UJlZfHrr0Q644wzAHjnnXfC\ngkR5eTnr168nMzOT5cuXhwWJrVu3snXrVq6//vpm9S1dupSdO3cyePBgioqKWgwSAGbGk08+SV5e\nHpWVlbz++us88cQTvP/++7z11lvNyp588sncd999OOfYvn07Tz31FFdeeSVPPvkkN998c5ve6zPP\nPMPgwYN58cUXqaysJC8vr8V2tcbMmm2vqanhiiuuYMmSJZx11ln827/9G4cffjibN29m0aJFzJ8/\nny1bttCvX782tTHeFCRasX49/PGPUFQEX3zhzVu4+GJ44AFvV0W3boluoUhqyczsuJGWUD6ft+sn\ndLSltUDT2rrAc3fsCK/n66879r10lCOPPJJBgwbxzjvvhK1fuXIlzjn+5V/+pdm2d955BzPj9NNP\nb1bfggULKCgo4MYbb+THP/4x1dXV5LSSXq+66ioOP/xwAL773e9iZixatIjVq1czZsyYsLL9+/cP\nu4jXDTfcwLHHHsvMmTPbFCSWLVvGtm3bWLZsGeeddx6LFy/mhhtuaFYu0mta3Xfffbz66qvMmjWL\nO++8M2zbjBkzmDlzZkT1xZuCRIhdu6C42AsQJSXeURGTJsHkyXD66fsPWRSR1JGWtn/XxmGHxbbu\nNWvgEBqhjqlx48axaNEiamtryfIP2S5fvpwRI0YwYcIE7rjjjrDyrQWJmpoann32WWbMmMHVV1/N\nPffcw/PPP8/kyZPb1I4zzjiDRYsW8dlnnzULEk317duXYcOG8eGHH7ap7qKiIoYPH86ZZ57Jt771\nLYqKiloMEpHYvn07v/3tbzn//PObhQjwRjDuvffedr1GrGmPHt5ch0sugX794Ac/gKOOgsWLvV8P\nv/kNnHWWQoSISCTGjRtHfX09q1atCq5bvnw5hYWFjB07lrKyMtatWxfctmLFCoYNG0bPnj3D6nn+\n+eeprKxk0qRJ9O3bl7PPPpuioqI2t2PTpk0AHNaGFNjQ0MAXX3xBr169Dlq2rq6OxYsXc+211wLe\n5cmXLl3Krl272ty2lrz88ss0Nja2uIvnUJXSQWLHDrj+ejjzTG+S1+zZ3rpnn4UrrtC8BxGRaI0b\nNw7nXHAXRmNjI6tWrWLcuHEMGTKEvn37BrdVVFSwdu1axo0b16yeoqIiCgsL6d+/PwCTJ0/m1Vdf\nZc+ePS2+7p49e9izZw9btmzhD3/4A3PmzKFPnz6ceeaZzcrW19cHy3/44YfccMMN7Nq1i2uuueag\n7+/FF1+krKyMSZMmAXD55ZeTkZHBM88807YOasWGDRsAOOmkk9pVD8Cf/gT/+Ee7qzmolPydXV8P\nTzzhzXfIyoLf/x6+/W3NuBaRQ1tVFWzcGN/XGDrUmwzaXsOHD+fwww8PhoUPPviAqqoqCgsLASgs\nLGT58uXceuutrFixgsbGxmZB4quvvmLJkiXMmjUruO6qq67i9ttvZ9GiRdx2221h5Z1znHDCCWHr\nRo4cydy5c8nOzm7WxiVLltC7d+/g44yMDKZOncrPf/7zg76/hQsXMmbMGIYMGQJA165dufjiiykq\nKuKuu+466PNbs2/fPgC6xWAi3uOPwze+Accf3+6qDijlgsQbb8Add3gnirrtNnj44djv9xQRiYeN\nG+M/p6KkBGJ1/bDCwsLgoZzLly+nT58+DB48OLjt17/+dXCbmTULEs888wwNDQ2MGjWKzz77DPDC\nwqmnnkpRUVGzIGFmLF68mG7durF7925mz57Npk2bWgwRAKeddhqPPvoo4F12e9iwYXRvw5nqysrK\nePnll7nzzjuD7Qq8p8WLF/Ppp59y7LHHtqWLmgm8fvmBroXQRqtWxe7f8kBSJkhUV8N3v+sdhTF2\nLKxe7Z3vQUSksxg61Puij/drxMq4ceN46aWXWLt2LStWrAiORoD3pXv//fezfft2li9fTr9+/Rg4\ncGDY8xcuXBgsGypwuOTmzZsZNGhQ2LYzzjgjeNTGJZdcwkknncR1111HSQsdl5+fzznnnBPx+wpM\nIn3sscf41a9+1axtRUVFzJgxAyAYYqqrq1usq6qqKizoDB06FOcca9euZeTIkRG3LRFSIkj4fHDD\nDfDyy/CHP8DUqdqNISKdT25ux/zCjJXACMPbb7/N8uXLmT59enBbQUEBWVlZvPHGG6xatYpLLrkk\n7LmbN29mxYoV3HXXXc3mN/h8Pq6//noWLlzIj3/841ZfPy8vjxkzZjBt2jQWLVrUprkPbbFw4UJO\nOumkYFgI9eSTT4YFiUA4+vjjj1us6+OPPw4LUBdddBEZGRksWLCA6667LibtjTvnXKdbgNGAKykp\ncW1x773OpaU599xzbSouItIhSkpKXCR/yzqburo6l5OT4woLC11aWppbuXJl2PbCwsLgtv/+7/8O\n2/bwww+7tLQ098UXX7RY9/nnn++GDx8efPzAAw+4tLQ0t2fPnrBy9fX17qijjnInn3xy2PpBgwa5\niRMnRvyevvjiC5eWluYeffTRFrcvXLjQpaWluffeey+47uSTT3ZDhgxxX3/9dVjZ1atXu/T0dPf9\n738/bP1tt93m0tLS3BNPPNGsfp/P5x577DG3bdu2Vtt4sM9VYDsw2sXgOznpf5fPnu1NOJk9G5qc\nqVVEROIoMzOTMWPGsHLlSrKyspqd1rmwsJCVK1cCNJsfUVRUxKhRoxgwYECLdV966aVs2LCBDz74\n4IBtyMjI4O677+aDDz7g1Vdfbce72d8ugIkTJ7a4fcKECaSnp4cdovr444+zbds2Ro0axYMPPsjv\nfvc7pk+fzllnnUX//v3513/917A6HnvsMc477zzuvvtuxo8fz+OPP87cuXN58MEHOemkk/jhD394\nwLNldrSkDhLPPgv33AP33Qe3357o1oiIpJ4zzjgDM2PMmDFkNrkE7Omnn46Z0b1797D5AO+//z7/\n+Mc/uPTSS1utd+LEiZgZCxYsOGgbbr75Znr27Bl2NEZLp6Zui4ULF3L00Ue3enhmjx49GDduHH/6\n05+C1884++yzefvttxk5ciRPPPEEd9xxB3/961+5/vrreffdd8lvciW/nJwcXnnlFZ5++ml8Ph+P\nPPIIt956K/PmzWPs2LGsWbOGI488MuK2x4u5CE/deSgws9FASUlJCaNb2WG4ciWMHw+XXuqdrVJz\nIkTkULNmzRoKCgo40N8ykUgd7HMV2A4UOOfWtPf1kvLr9ZNPYOJEGDMG5s1TiBAREYmXpPuK3b0b\nLroI8vO9q3W2cviwiIiIxEDSHf55663epYHffde7YqeIiIjET1KNSNTVwSuveJMr/SdPExERkThK\nqiCxapV3Bstzz010S0RERFJDUgWJpUu962Z84xuJbomIiEhqSKog8frrcM45kJ6e6JaIiIikhqQJ\nEpWV3gTL8eMT3RIREZHUkTRBYvlyqK9XkBAREelISRMkli6FI46I7SVwRURE5MCSJki8/ro3GnEI\nXcdEREQk6SVFkNi7F9as0WGfIiIiHS0pgsRbb4HPp/kRIiKHinnz5pGWlha29O3bl/Hjx/O///u/\nzcqHlktPT6d///5ccMEFvPnmm2HlBg0aFFa2a9eunHrqqfzxj3+MuI1lZWVkZWWRnp7Oxx9/3GKZ\ns88+O+zKpKH27NlDWloaDz30ULNtn3/+ObfccgvHHHMMOTk5wauCzp49m5qamojbeihLilNkL13q\nncly0KBEt0RERALMjIcffphBgwbhnGPnzp3MnTuXCRMm8Le//Y0JEyaElT///POZOnUqzjk2bdrE\nnDlzGD9+PC+99BIXXnhhsM6TTz6Z++67D+ccO3bs4Omnn+bGG2+krq6Om266qc3t+/Of/0x6ejr5\n+fkUFRW1GAiiudT4yy+/zNVXX012djZTp05lxIgR1NXV8c4773D//fezfv16nnzyyYjrPVQlRZAI\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.arange(epochs)\n", "plt.plot(x, np.array(warp_auc))\n", "plt.plot(x, np.array(bpr_auc))\n", "plt.legend(['WARP AUC', 'BPR AUC'], loc='upper right')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fitting speed\n", "\n", "What about model fitting speed?" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.arange(epochs)\n", "plt.plot(x, np.array(warp_duration))\n", "plt.plot(x, np.array(bpr_duration))\n", "plt.legend(['WARP duration', 'BPR duration'], loc='upper right')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "WARP is slower than BPR for all epochs. Interestingly, however, it gets slower with additional epochs; every subsequent epoch takes more time. This is because of WARP's adaptive samling of negatives: the closer the model fits the training data, the more times it needs to sample in order to find rank-violating examples, leading to longer fitting times.\n", "\n", "For this reason, LightFM exposes the `max_sampled` hyperparameter that limits the number of attemps WARP will carry out to find a negative. Setting it to a low value and repeating the run shows that the run time actually decreases with every epoch: this is because no updates happen when a violating example cannot be found in the specified number of attempts." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nsLCQnj17Mnz4cG677Ta61bnWuk+fPqxatWrn83322YfDDjuM66+/ngsvvLDJ7/XHP/4xv/nNb7jk\nkksoKSnZZfvLL7/Maaedxl/+8hdGjhy5y/Zrr72WSZMmUZ14OVfsPU+dOpVp06bx9ttvs2nTJvbf\nf39OO+00xo4dG5+ZcregIJHnKivh6adhxgx47rnwYXjKKXDffTByZPiLS0SCwsKaU3Ynn5z+caqr\nQ+/H/PlwzjktV7/dxUknnQTA3LlzawWJiooK3nnnHdq2bcu8efNqBYnVq1ezevVqxowZs8vx5syZ\nw5o1a+jbty/Tp0+vN0gAmBmTJ0+mc+fObNq0iRdffJH777+fhQsX8sorr+xSduDAgdx44424Ox9/\n/DEPPvggI0eOZPLkyXz3u99t0nt9/PHH6du3L08//TSbNm2ic+fO9dYrGTPbZfvmzZsZMWIEs2fP\n5pRTTuHmm2+me/furFy5kpkzZzJt2jRWrVrFAQcc0KQ6tjYFiTy0bVsY7zBjBsyaFQazffWrcNdd\ncPHF6nkQaW0FBeF0R64G9f33358+ffowd+7cWusXLFiAu/ONb3xjl21z587FzDjxxBN3Od5jjz1G\ncXEx3/72t7npppuoqqqiY5IBKhdddBHdYwN0rrrqKsyMmTNn8uabbzJ48OBaZXv27FnrJl6XX345\nBx98MPfcc0+TgsRLL73ERx99xEsvvcRZZ53FE088weWXX75LuVTvaXXjjTfy/PPPc++99/KDH/yg\n1rbx48dzzz33pHS81qa7f+aRlSvh5pvDpYfnnQeLFsHPfgbLl8Nrr8F11ylEiEjLGDp0KAsXLmTL\nli07182bN4+jjjqKc845hwULFtQqnyxIbN68mSeffJJRo0bxzW9+k8rKSmbNmtXkesR7R95///1G\ny/bo0YP+/fuzYsWKJh17+vTpHHHEEZx88smceeaZTJ8+vcn1Subjjz/moYce4uyzz94lREDowbj+\n+ut3m94IUJDIedu3h0GTX/869OsHDzwA3/hGuOZ/yZIQLFry0j8REQhBYtu2bbz++us7182bN48h\nQ4ZwwgknUF5ezpIlS3Zumz9/Pv3792fPPfesdZxZs2axadMmLrnkEnr06MGpp56a0hd2PBTstdde\njZbdvn07H374IXvvvXejZbdu3coTTzzBZZddBoTbk8+ZM4fPmjmC9tlnn2XHjh31nuLZXSlI5KiP\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "warp_model = LightFM(no_components=num_components,\n", " max_sampled=3,\n", " loss='warp',\n", " learning_schedule='adagrad',\n", " user_alpha=alpha,\n", " item_alpha=alpha)\n", "\n", "warp_duration = []\n", "warp_auc = []\n", "\n", "for epoch in range(epochs):\n", " start = time.time()\n", " warp_model.fit_partial(train, epochs=1)\n", " warp_duration.append(time.time() - start)\n", " warp_auc.append(auc_score(warp_model, test, train_interactions=train).mean())\n", "\n", "x = np.arange(epochs)\n", "plt.plot(x, np.array(warp_duration))\n", "plt.legend(['WARP duration'], loc='upper right')\n", "plt.title('Duration')\n", "plt.show()\n", "\n", "x = np.arange(epochs)\n", "plt.plot(x, np.array(warp_auc))\n", "plt.legend(['WARP AUC'], loc='upper right')\n", "plt.title('AUC')\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 }