{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Linear regression homework with Yelp votes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "This assignment uses a small subset of the data from Kaggle's [Yelp Business Rating Prediction](https://www.kaggle.com/c/yelp-recsys-2013) competition.\n", "\n", "**Description of the data:**\n", "\n", "- `yelp.json` is the original format of the file. `yelp.csv` contains the same data, in a more convenient format. Both of the files are in this repo, so there is no need to download the data from the Kaggle website.\n", "- Each observation in this dataset is a review of a particular business by a particular user.\n", "- The \"stars\" column is the number of stars (1 through 5) assigned by the reviewer to the business. (Higher stars is better.) In other words, it is the rating of the business by the person who wrote the review.\n", "- The \"cool\" column is the number of \"cool\" votes this review received from other Yelp users. All reviews start with 0 \"cool\" votes, and there is no limit to how many \"cool\" votes a review can receive. In other words, it is a rating of the review itself, not a rating of the business.\n", "- The \"useful\" and \"funny\" columns are similar to the \"cool\" column." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 1\n", "\n", "Read `yelp.csv` into a DataFrame." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
business_iddatereview_idstarstexttypeuser_idcoolusefulfunny
09yKzy9PApeiPPOUJEtnvkg2011-01-26fWKvX83p0-ka4JS3dc6E5A5My wife took me here on my birthday for breakf...reviewrLtl8ZkDX5vH5nAx9C3q5Q250
\n", "
" ], "text/plain": [ " business_id date review_id stars \\\n", "0 9yKzy9PApeiPPOUJEtnvkg 2011-01-26 fWKvX83p0-ka4JS3dc6E5A 5 \n", "\n", " text type \\\n", "0 My wife took me here on my birthday for breakf... review \n", "\n", " user_id cool useful funny \n", "0 rLtl8ZkDX5vH5nAx9C3q5Q 2 5 0 " ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# access yelp.csv using a relative path\n", "import pandas as pd\n", "yelp = pd.read_csv('../data/yelp.csv')\n", "yelp.head(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 1 (Bonus)\n", "\n", "Ignore the `yelp.csv` file, and construct this DataFrame yourself from `yelp.json`. This involves reading the data into Python, decoding the JSON, converting it to a DataFrame, and adding individual columns for each of the vote types." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# read the data from yelp.json into a list of rows\n", "# each row is decoded into a dictionary using using json.loads()\n", "import json\n", "with open('../data/yelp.json', 'rU') as f:\n", " data = [json.loads(row) for row in f]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{u'business_id': u'9yKzy9PApeiPPOUJEtnvkg',\n", " u'date': u'2011-01-26',\n", " u'review_id': u'fWKvX83p0-ka4JS3dc6E5A',\n", " u'stars': 5,\n", " u'text': u'My wife took me here on my birthday for breakfast and it was excellent. The weather was perfect which made sitting outside overlooking their grounds an absolute pleasure. Our waitress was excellent and our food arrived quickly on the semi-busy Saturday morning. It looked like the place fills up pretty quickly so the earlier you get here the better.\\n\\nDo yourself a favor and get their Bloody Mary. It was phenomenal and simply the best I\\'ve ever had. I\\'m pretty sure they only use ingredients from their garden and blend them fresh when you order it. It was amazing.\\n\\nWhile EVERYTHING on the menu looks excellent, I had the white truffle scrambled eggs vegetable skillet and it was tasty and delicious. It came with 2 pieces of their griddled bread with was amazing and it absolutely made the meal complete. It was the best \"toast\" I\\'ve ever had.\\n\\nAnyway, I can\\'t wait to go back!',\n", " u'type': u'review',\n", " u'user_id': u'rLtl8ZkDX5vH5nAx9C3q5Q',\n", " u'votes': {u'cool': 2, u'funny': 0, u'useful': 5}}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# show the first review\n", "data[0]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
business_iddatereview_idstarstexttypeuser_idvotes
09yKzy9PApeiPPOUJEtnvkg2011-01-26fWKvX83p0-ka4JS3dc6E5A5My wife took me here on my birthday for breakf...reviewrLtl8ZkDX5vH5nAx9C3q5Q{u'funny': 0, u'useful': 5, u'cool': 2}
\n", "
" ], "text/plain": [ " business_id date review_id stars \\\n", "0 9yKzy9PApeiPPOUJEtnvkg 2011-01-26 fWKvX83p0-ka4JS3dc6E5A 5 \n", "\n", " text type \\\n", "0 My wife took me here on my birthday for breakf... review \n", "\n", " user_id votes \n", "0 rLtl8ZkDX5vH5nAx9C3q5Q {u'funny': 0, u'useful': 5, u'cool': 2} " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# convert the list of dictionaries to a DataFrame\n", "yelp = pd.DataFrame(data)\n", "yelp.head(1)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# add DataFrame columns for cool, useful, and funny\n", "yelp['cool'] = [row['votes']['cool'] for row in data]\n", "yelp['useful'] = [row['votes']['useful'] for row in data]\n", "yelp['funny'] = [row['votes']['funny'] for row in data]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
business_iddatereview_idstarstexttypeuser_idcoolusefulfunny
09yKzy9PApeiPPOUJEtnvkg2011-01-26fWKvX83p0-ka4JS3dc6E5A5My wife took me here on my birthday for breakf...reviewrLtl8ZkDX5vH5nAx9C3q5Q250
\n", "
" ], "text/plain": [ " business_id date review_id stars \\\n", "0 9yKzy9PApeiPPOUJEtnvkg 2011-01-26 fWKvX83p0-ka4JS3dc6E5A 5 \n", "\n", " text type \\\n", "0 My wife took me here on my birthday for breakf... review \n", "\n", " user_id cool useful funny \n", "0 rLtl8ZkDX5vH5nAx9C3q5Q 2 5 0 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# drop the votes column\n", "yelp.drop('votes', axis=1, inplace=True)\n", "yelp.head(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 2\n", "\n", "Explore the relationship between each of the vote types (cool/useful/funny) and the number of stars." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
coolusefulfunny
stars
10.5767691.6048061.056075
20.7195251.5631070.875944
30.7885011.3066390.694730
40.9546231.3959160.670448
50.9442611.3817800.608631
\n", "
" ], "text/plain": [ " cool useful funny\n", "stars \n", "1 0.576769 1.604806 1.056075\n", "2 0.719525 1.563107 0.875944\n", "3 0.788501 1.306639 0.694730\n", "4 0.954623 1.395916 0.670448\n", "5 0.944261 1.381780 0.608631" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# treat stars as a categorical variable and look for differences between groups\n", "yelp.groupby('stars').mean()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# correlation matrix\n", "%matplotlib inline\n", "import seaborn as sns\n", "sns.heatmap(yelp.corr())" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nQIuIiIiIiEgjMA2DztYo7U2hmt+TT8meiIiIiIjIMsUiQfo6YgQsA8+tzaRPyZ6IiIiIiMgKmKZB\nd1uU1qYQnld7cyKV7ImIiIiIiKxCUzRIT3sUy6SmhnYq2RMREREREVmlgGXR0x6jORrErZFhnUr2\nRERERERE1khLLER3ewTDqH4vn5I9ERERERGRNRQKWPR1xIiFg7hVTPiU7ImIiIiIiJRBW3OIrpYI\nVCnfU7InIiIiIiJSJuGQRV9nlHDQxHMru2Knkj0REREREZEyMgyDjpYIHa3his7jU7InIiIiIiJS\nAZFQkL7OGMGAUZG5fEr2REREREREKsQ0DLpao7Q3hfDKvEWDkj0REREREZEKi0X8Xr6AZZRtaKeS\nPRERERERkSowTYPutigt0WBZFm9RsiciIiIiIlJFzbEQ3e1RzDXeiF3JnoiIiIiISJUFAxa9HTFi\nkbXbiF3JnoiIiIiISI1oawrR3RbBwFt1L5+SPRERERERkRoSKvTyRUIW7irm8inZExERERERqTHF\njdg7WyOwwg4+JXsiIiIiIiI1KhIK0NcZJRQwYZn5m5I9ERERERGRGmYYht/DB2eX8zwleyIiIiIi\nInXgO59997IGdCrZExERERERaUBK9kRERERERBqQkj0REREREZEGpGRPRERERESkASnZExERERER\naUBK9kRERERERBqQkj0REREREZEGpGRPRERERESkASnZExERERERaUBK9kRERERERBqQkj0RERER\nEZEGpGRPRERERESkASnZExERERERaUBK9kRERERERBqQkj0REREREZEGpGRPRERERESkASnZExER\nERERaUCBcr64bdsm8KfANiANfNRxnNfKWaaIiIiIiIiUv2fvPUDIcZx7gU8Cny1zeSIiIiIiIkL5\nk723Ad8FcBznGeDOMpcnIiIiIiIilD/ZawWm59zOF4Z2ioiIiIiISBkZnueV7cVt2/4s8LTjON8o\n3D7lOM7GshUoIiIiIiIiQPl79p4EfgLAtu17gINlLk9EREREREQo82qcwLeAd9q2/WTh9kfKXJ6I\niIiIiIhQ5mGcIiIiIiIiUh1aLEVERERERKQBKdkTERERERFpQEr2REREREREGpCSPRERERERkQZU\n7tU4a0ZhM/c/BbYBaeCjjuO8Vt1arYxt20Hgi8C1QBj4HeBl4MuAC7wE/BvHcepu9R3btnuBF4C3\n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\nBusgDgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# multiple scatter plots\n", "sns.pairplot(yelp, x_vars=['cool', 'useful', 'funny'], y_vars='stars', size=6, aspect=0.7, kind='reg')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 3\n", "\n", "Define cool/useful/funny as the features, and stars as the response." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "feature_cols = ['cool', 'useful', 'funny']\n", "X = yelp[feature_cols]\n", "y = yelp.stars" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 4\n", "\n", "Fit a linear regression model and interpret the coefficients. Do the coefficients make intuitive sense to you? Explore the Yelp website to see if you detect similar trends." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[('cool', 0.27435946858859317),\n", " ('useful', -0.14745239099400748),\n", " ('funny', -0.13567449053705449)]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.linear_model import LinearRegression\n", "linreg = LinearRegression()\n", "linreg.fit(X, y)\n", "zip(feature_cols, linreg.coef_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 5\n", "\n", "Evaluate the model by splitting it into training and testing sets and computing the RMSE. Does the RMSE make intuitive sense to you?" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.cross_validation import train_test_split\n", "from sklearn import metrics\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# define a function that accepts a list of features and returns testing RMSE\n", "def train_test_rmse(feature_cols):\n", " X = yelp[feature_cols]\n", " y = yelp.stars\n", " X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)\n", " linreg = LinearRegression()\n", " linreg.fit(X_train, y_train)\n", " y_pred = linreg.predict(X_test)\n", " return np.sqrt(metrics.mean_squared_error(y_test, y_pred))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1.1842905282165919" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# calculate RMSE with all three features\n", "train_test_rmse(['cool', 'useful', 'funny'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 6\n", "\n", "Try removing some of the features and see if the RMSE improves." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.19623908761\n", "1.19426732565\n", "1.20982720239\n" ] } ], "source": [ "print train_test_rmse(['cool', 'useful'])\n", "print train_test_rmse(['cool', 'funny'])\n", "print train_test_rmse(['useful', 'funny'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 7 (Bonus)\n", "\n", "Think of some new features you could create from the existing data that might be predictive of the response. Figure out how to create those features in Pandas, add them to your model, and see if the RMSE improves." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# new feature: review length (number of characters)\n", "yelp['length'] = yelp.text.apply(len)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# new features: whether or not the review contains 'love' or 'hate'\n", "yelp['love'] = yelp.text.str.contains('love', case=False).astype(int)\n", "yelp['hate'] = yelp.text.str.contains('hate', case=False).astype(int)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1.1584039830984094" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# add new features to the model and calculate RMSE\n", "train_test_rmse(['cool', 'useful', 'funny', 'length', 'love', 'hate'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 8 (Bonus)\n", "\n", "Compare your best RMSE on the testing set with the RMSE for the \"null model\", which is the model that ignores all features and simply predicts the mean response value in the testing set." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# split the data (outside of the function)\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create a NumPy array with the same shape as y_test\n", "y_null = np.zeros_like(y_test, dtype=float)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# fill the array with the mean of y_test\n", "y_null.fill(y_test.mean())" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.21232761249\n" ] } ], "source": [ "# calculate null RMSE\n", "print np.sqrt(metrics.mean_squared_error(y_test, y_null))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 9 (Bonus)\n", "\n", "Instead of treating this as a regression problem, treat it as a classification problem and see what testing accuracy you can achieve with KNN." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# import and instantiate KNN\n", "from sklearn.neighbors import KNeighborsClassifier\n", "knn = KNeighborsClassifier(n_neighbors=50)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.3524\n" ] } ], "source": [ "# classification models will automatically treat the response value (1/2/3/4/5) as unordered categories\n", "knn.fit(X_train, y_train)\n", "y_pred_class = knn.predict(X_test)\n", "print metrics.accuracy_score(y_test, y_pred_class)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 10 (Bonus)\n", "\n", "Figure out how to use linear regression for classification, and compare its classification accuracy with KNN's accuracy." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# use linear regression to make continuous predictions\n", "linreg = LinearRegression()\n", "linreg.fit(X_train, y_train)\n", "y_pred = linreg.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# round its predictions to the nearest integer\n", "y_pred_class = y_pred.round()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.3456\n" ] } ], "source": [ "# calculate classification accuracy of the rounded predictions\n", "print metrics.accuracy_score(y_test, y_pred_class)" ] } ], "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.6" } }, "nbformat": 4, "nbformat_minor": 0 }