{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Lab assignment 1\n", "## RecSys Hello World!\n", "Code some very basic recommending algorithm from scratch and evaluate usefulness of such recommendations.\n", "\n", "- Start with a MovieLens dataset (choose which one you prefer, ML-Latest-small already available from labs folder, others for download from https://grouplens.org/datasets/movielens/)\n", " - if you select larger datasets (ML-latest), apply some pre-processing to limit its size (e.g. only movies from last few years)\n", "- Expand the dataset with a new user (you) and your preference on some of the movies (at least 5-10)\n", "- Implement some variant of user-based or item-based KNN \n", " - **Describe in comments, what exactly you did: what similarity metric, what aggregation, any pre-processing, any specialties?**\n", "- Use the system to recommend to you. \n", " - **Self-evaluate the recommendations. Did you like the recommendations? If not, why not?**\n", " \n", "### Assignment completion \n", "\n", "- Option 1: Finalize during the labs, let the teacher check your code and give you the credits.\n", "- Option 2: Upload your solution to the SIS study roaster (Labs #1). Your solution should be evaluated top-down (i.e., output of all cells visible). Do not forget to provide comments / assesments wherever asked to do so. **Deadline: sunday before the next labs**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Pre-processing\n", "### Load dataset\n", "- using Pandas to load the MovieLens-latest dataset. \n", "- make some basic stats to simplify you finding relevant movies" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
titlegenresRatingCountyear
movieId
122912Avengers: Infinity War - Part I (2018)Action|Adventure|Sci-Fi13.02018.0
187593Deadpool 2 (2018)Action|Comedy|Sci-Fi12.02018.0
122918Guardians of the Galaxy 2 (2017)Action|Adventure|Sci-Fi27.02017.0
168252Logan (2017)Action|Sci-Fi25.02017.0
122916Thor: Ragnarok (2017)Action|Adventure|Sci-Fi20.02017.0
176371Blade Runner 2049 (2017)Sci-Fi18.02017.0
122926Untitled Spider-Man Reboot (2017)Action|Adventure|Fantasy16.02017.0
168250Get Out (2017)Horror15.02017.0
143355Wonder Woman (2017)Action|Adventure|Fantasy13.02017.0
174055Dunkirk (2017)Action|Drama|Thriller|War13.02017.0
177765Coco (2017)Adventure|Animation|Children13.02017.0
179819Star Wars: The Last Jedi (2017)Action|Adventure|Fantasy|Sci-Fi12.02017.0
122906Black Panther (2017)Action|Adventure|Sci-Fi11.02017.0
122904Deadpool (2016)Action|Adventure|Comedy|Sci-Fi54.02016.0
152081Zootopia (2016)Action|Adventure|Animation|Children|Comedy32.02016.0
166528Rogue One: A Star Wars Story (2016)Action|Adventure|Fantasy|Sci-Fi27.02016.0
164179Arrival (2016)Sci-Fi26.02016.0
122920Captain America: Civil War (2016)Action|Sci-Fi|Thriller22.02016.0
122922Doctor Strange (2016)Action|Adventure|Sci-Fi22.02016.0
136864Batman v Superman: Dawn of Justice (2016)Action|Adventure|Fantasy|Sci-Fi16.02016.0
\n", "
" ], "text/plain": [ " title \\\n", "movieId \n", "122912 Avengers: Infinity War - Part I (2018) \n", "187593 Deadpool 2 (2018) \n", "122918 Guardians of the Galaxy 2 (2017) \n", "168252 Logan (2017) \n", "122916 Thor: Ragnarok (2017) \n", "176371 Blade Runner 2049 (2017) \n", "122926 Untitled Spider-Man Reboot (2017) \n", "168250 Get Out (2017) \n", "143355 Wonder Woman (2017) \n", "174055 Dunkirk (2017) \n", "177765 Coco (2017) \n", "179819 Star Wars: The Last Jedi (2017) \n", "122906 Black Panther (2017) \n", "122904 Deadpool (2016) \n", "152081 Zootopia (2016) \n", "166528 Rogue One: A Star Wars Story (2016) \n", "164179 Arrival (2016) \n", "122920 Captain America: Civil War (2016) \n", "122922 Doctor Strange (2016) \n", "136864 Batman v Superman: Dawn of Justice (2016) \n", "\n", " genres RatingCount year \n", "movieId \n", "122912 Action|Adventure|Sci-Fi 13.0 2018.0 \n", "187593 Action|Comedy|Sci-Fi 12.0 2018.0 \n", "122918 Action|Adventure|Sci-Fi 27.0 2017.0 \n", "168252 Action|Sci-Fi 25.0 2017.0 \n", "122916 Action|Adventure|Sci-Fi 20.0 2017.0 \n", "176371 Sci-Fi 18.0 2017.0 \n", "122926 Action|Adventure|Fantasy 16.0 2017.0 \n", "168250 Horror 15.0 2017.0 \n", "143355 Action|Adventure|Fantasy 13.0 2017.0 \n", "174055 Action|Drama|Thriller|War 13.0 2017.0 \n", "177765 Adventure|Animation|Children 13.0 2017.0 \n", "179819 Action|Adventure|Fantasy|Sci-Fi 12.0 2017.0 \n", "122906 Action|Adventure|Sci-Fi 11.0 2017.0 \n", "122904 Action|Adventure|Comedy|Sci-Fi 54.0 2016.0 \n", "152081 Action|Adventure|Animation|Children|Comedy 32.0 2016.0 \n", "166528 Action|Adventure|Fantasy|Sci-Fi 27.0 2016.0 \n", "164179 Sci-Fi 26.0 2016.0 \n", "122920 Action|Sci-Fi|Thriller 22.0 2016.0 \n", "122922 Action|Adventure|Sci-Fi 22.0 2016.0 \n", "136864 Action|Adventure|Fantasy|Sci-Fi 16.0 2016.0 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#moviesDF: information about movies (pandas DataFrame)\n", "#df: ratings in UID - OID - rating - timestamp format (pandas DataFrame)\n", "\n", "moviesDF = pd.read_csv(\"movies.csv\", sep=\",\")\n", "moviesDF.movieId = moviesDF.movieId.astype(int)\n", "moviesDF.set_index(\"movieId\", inplace=True)\n", "\n", "df = pd.read_csv(\"ratings.csv\", sep=\",\")\n", "df.columns=[\"UID\",\"OID\",\"rating\",\"timestamp\"]\n", "\n", "ratingCounts = df.groupby(\"OID\")[\"UID\"].count()\n", "moviesDF[\"RatingCount\"] = ratingCounts\n", "moviesDF[\"year\"] = moviesDF.title.str.extract(r'\\(([0-9]+)\\)')\n", "moviesDF[\"year\"] = moviesDF.year.astype(\"float\")\n", "moviesDF.fillna(0, inplace=True)\n", "\n", "#use this or similar conditions to find movies you can rate. \n", "moviesDF.loc[moviesDF.RatingCount >= 10].sort_values([\"year\",\"RatingCount\"], ascending=False).head(20)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "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", "
titlegenresRatingCountyear
movieId
122904Deadpool (2016)Action|Adventure|Comedy|Sci-Fi54.02016.0
187593Deadpool 2 (2018)Action|Comedy|Sci-Fi12.02018.0
\n", "
" ], "text/plain": [ " title genres RatingCount \\\n", "movieId \n", "122904 Deadpool (2016) Action|Adventure|Comedy|Sci-Fi 54.0 \n", "187593 Deadpool 2 (2018) Action|Comedy|Sci-Fi 12.0 \n", "\n", " year \n", "movieId \n", "122904 2016.0 \n", "187593 2018.0 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#you can also try to search for particular movie\n", "moviesDF.loc[moviesDF.title.str.contains(\"Deadpool\")]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# update this with your real ratings (note that OID = movieId from the moviesDF)\n", "myRatings = {\n", " \"UID\":[611,611],\n", " \"OID\":[174055,152081],\n", " \"rating\":[4.0,5.0],\n", " \"timestamp\":[0,0]\n", " }" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
UIDOIDratingtimestampmovieTitle
0114.0964982703Toy Story (1995)
1134.0964981247Grumpier Old Men (1995)
2164.0964982224Heat (1995)
31475.0964983815Seven (a.k.a. Se7en) (1995)
41505.0964982931Usual Suspects, The (1995)
..................
1008336101682505.01494273047Get Out (2017)
1008346101682525.01493846352Logan (2017)
1008356101708753.01493846415The Fate of the Furious (2017)
1008366111740554.00Dunkirk (2017)
1008376111520815.00Zootopia (2016)
\n", "

100838 rows × 5 columns

\n", "
" ], "text/plain": [ " UID OID rating timestamp movieTitle\n", "0 1 1 4.0 964982703 Toy Story (1995)\n", "1 1 3 4.0 964981247 Grumpier Old Men (1995)\n", "2 1 6 4.0 964982224 Heat (1995)\n", "3 1 47 5.0 964983815 Seven (a.k.a. Se7en) (1995)\n", "4 1 50 5.0 964982931 Usual Suspects, The (1995)\n", "... ... ... ... ... ...\n", "100833 610 168250 5.0 1494273047 Get Out (2017)\n", "100834 610 168252 5.0 1493846352 Logan (2017)\n", "100835 610 170875 3.0 1493846415 The Fate of the Furious (2017)\n", "100836 611 174055 4.0 0 Dunkirk (2017)\n", "100837 611 152081 5.0 0 Zootopia (2016)\n", "\n", "[100838 rows x 5 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#append your ratings to the dataFrame df. \n", "df = pd.concat([df,pd.DataFrame(myRatings)], ignore_index=True)\n", "\n", "#add movieTitles to the df (for clarity)\n", "movieTitles = moviesDF.title.loc[df.OID]\n", "df[\"movieTitle\"] = movieTitles.values\n", "#display the ratings dataframe. Note the new values in the last rows\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Auxiliary methods\n", "depending on which variant of KNN you chose, the functions below might be useful for you\n", "- jaccard similarity is probably the simplest reasonable measure of similarity between users or items\n", " - Check https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.stats.pearsonr.html for Pearsons correlation\n", " - Check https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.cosine_similarity.html for Cosine sim\n", "- if you use scikit-learn for similarity, its output is a numpy array, which is considers continuous zero-based indexes\n", " - Note that in many datasets (MovieLens included), there are gaps in user and item IDs. Therefore, you may need to transform UIDs/OIDs to their continuous zero-based variants" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "# Calculate jaccard similarity between two **sets** of IDs (users or items)\n", "def jaccard_sim(a,b):\n", " return len(a.intersection(b))/len(a.union(b))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# for each user, get a set of all rated items\n", "def get_itemsets(df):\n", " itemsets = df.groupby(\"UID\").agg({\n", " \"OID\": lambda x: set(x)\n", " })\n", " return itemsets\n", "\n", "#for each item, get a set of all users who rated this item\n", "def get_usersets(df):\n", " usersets = df.groupby(\"OID\").agg({\n", " \"UID\": lambda x: set(x)\n", " })\n", " return usersets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Your code goes here" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "#return list of OIDs (with the size = top_k) ordered from the most relevant item\n", "def predict(currUser, dataTrain, top_k):\n", " #dummy code - implement\n", " return [1,3,10,91529]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Display recommendations given to yourself:" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "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", " \n", "
titlegenresRatingCountyear
movieId
1Toy Story (1995)Adventure|Animation|Children|Comedy|Fantasy215.01995.0
3Grumpier Old Men (1995)Comedy|Romance52.01995.0
10GoldenEye (1995)Action|Adventure|Thriller132.01995.0
91529Dark Knight Rises, The (2012)Action|Adventure|Crime|IMAX76.02012.0
\n", "
" ], "text/plain": [ " title \\\n", "movieId \n", "1 Toy Story (1995) \n", "3 Grumpier Old Men (1995) \n", "10 GoldenEye (1995) \n", "91529 Dark Knight Rises, The (2012) \n", "\n", " genres RatingCount year \n", "movieId \n", "1 Adventure|Animation|Children|Comedy|Fantasy 215.0 1995.0 \n", "3 Comedy|Romance 52.0 1995.0 \n", "10 Action|Adventure|Thriller 132.0 1995.0 \n", "91529 Action|Adventure|Crime|IMAX 76.0 2012.0 " ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "recommended_oids = predict(611, df, 20)\n", "moviesDF.loc[recommended_oids]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- were the recommendations relevant?\n", "- were they surprising?\n", "- how many movies you know from before?\n", "- how many would you consider to watch?\n", "- did you like the recommendations overall?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### \n", "### \n", "### \n", "\n", "\n", "\n", "\n", "\n", "# Additional content\n", "### Basic analysis of MovieLens dataset" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "from matplotlib import pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "df[\"rating_int\"] = df.rating.astype(int)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 1370., 2811., 1791., 7551., 5550., 20047., 13136., 26819.,\n", " 8551., 13212.]),\n", " array([0.5 , 0.95, 1.4 , 1.85, 2.3 , 2.75, 3.2 , 3.65, 4.1 , 4.55, 5. ]),\n", " )" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(df.rating,10)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "df[\"timestamp_float\"] = df.timestamp.astype(np.float32)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([2.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,\n", " 8.5060e+03, 2.4076e+04, 2.4330e+04, 1.4418e+04, 2.9506e+04]),\n", " array([0.0000000e+00, 1.5377994e+08, 3.0755987e+08, 4.6133978e+08,\n", " 6.1511974e+08, 7.6889965e+08, 9.2267955e+08, 1.0764595e+09,\n", " 1.2302395e+09, 1.3840193e+09, 1.5377993e+09], dtype=float32),\n", " )" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(df.timestamp_float,10)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 108., 185., 309., 694., 962., 1840., 2211., 2275., 798.,\n", " 342.]),\n", " array([0.5 , 0.95, 1.4 , 1.85, 2.3 , 2.75, 3.2 , 3.65, 4.1 , 4.55, 5. ]),\n", " )" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(df.groupby(df.OID)[\"rating\"].agg(\"mean\"))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 1., 0., 7., 23., 39., 148., 186., 154., 45., 8.]),\n", " array([1.275 , 1.6475, 2.02 , 2.3925, 2.765 , 3.1375, 3.51 , 3.8825,\n", " 4.255 , 4.6275, 5. ]),\n", " )" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(df.groupby(df.UID)[\"rating\"].agg(\"mean\"))" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype('float64')" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "moviesDF.year.dtype" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([3.000e+00, 2.400e+01, 1.020e+02, 2.260e+02, 3.040e+02, 4.810e+02,\n", " 7.710e+02, 1.721e+03, 3.330e+03, 2.765e+03]),\n", " array([1902. , 1913.6, 1925.2, 1936.8, 1948.4, 1960. , 1971.6, 1983.2,\n", " 1994.8, 2006.4, 2018. ]),\n", " )" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist(moviesDF.loc[moviesDF.year > 1900].year)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "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.8.5" } }, "nbformat": 4, "nbformat_minor": 1 }