{"id":17216912,"url":"https://github.com/lenguyenthedat/dextra-viki-2015","last_synced_at":"2025-03-25T13:44:22.612Z","repository":{"id":145641971,"uuid":"41282056","full_name":"lenguyenthedat/dextra-viki-2015","owner":"lenguyenthedat","description":"My solution for Dextra Data Science Challenge #43 (Rakuten/Viki) https://challenges.dextra.sg/challenge/43","archived":false,"fork":false,"pushed_at":"2017-09-14T14:07:23.000Z","size":343,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-30T12:46:47.851Z","etag":null,"topics":["collaborative-filtering","recommendation-engine","recommendation-system","viki"],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lenguyenthedat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-08-24T04:33:36.000Z","updated_at":"2018-03-06T15:22:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"4b16cc23-c3cc-4034-a504-f4db5bd8d1b6","html_url":"https://github.com/lenguyenthedat/dextra-viki-2015","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lenguyenthedat%2Fdextra-viki-2015","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lenguyenthedat%2Fdextra-viki-2015/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lenguyenthedat%2Fdextra-viki-2015/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lenguyenthedat%2Fdextra-viki-2015/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lenguyenthedat","download_url":"https://codeload.github.com/lenguyenthedat/dextra-viki-2015/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245474816,"owners_count":20621476,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collaborative-filtering","recommendation-engine","recommendation-system","viki"],"created_at":"2024-10-15T03:42:41.663Z","updated_at":"2025-03-25T13:44:22.565Z","avatar_url":"https://github.com/lenguyenthedat.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"viki-challenge\n==============\n![img](http://i.imgur.com/LWnqxzM.png)\n\nhttp://www.dextra.sg/rakuten-viki-global-tv-recommender-challenge/\n\nhttps://challenges.dextra.sg/challenge/43\n\n# Some preliminary analysis:\nhttps://public.tableau.com/profile/le.nguyen.the.dat#!/vizhome/Rakuten-VikiDataScienceChallenge2015/Rakuten-VikiDataScienceChallenge2015\n\n# Presentation deck:\nhttps://speakerdeck.com/lenguyenthedat/rakuten-viki-data-challenge-solution\n\n# Requirements:\nThis solution is 100% Python, below are a few libraries needed:\n\n- Pandas\n- Scikit-learn\n\n# Collaborative Filtering (Jaccard Index) plus feature similarity\n\n    $ python viki-videos-similarity.py # Pre-procesing `#videos x #videos` matrix\n    $ python viki-users-recommender.py # batch process\n\nThis is more practical since `#videos x #videos` matrix is much smaller.\nWeights can be set manually:\n\n    top_videos_limit = 50\n    sim_features = ['sim_country', 'sim_language', 'sim_adult',\n                    'sim_content_owner_id', 'sim_broadcast', 'sim_episode_count',\n                    'sim_genres', 'sim_cast',\n                    'jaccard_1_3', 'jaccard_2_3', 'jaccard_3_3',\n                    'jaccard_high', 'sim_cosine_mv_ratio']\n    weight_features = [3,3,5,\n                       0,0,0,\n                       5,5,\n                       0,0,15,\n                       15,45]\n    weight_scores = [1,3,15]\n\nNotes:\n------\nThe reason why HOT VIDEOS dominated CF is because viki's homepage currently dominated by:\n- Top banner\n- Popular show\n- Top Drama\n- Gender filter for male / female\n\nTODO:\n-----\n- utilize ratio instead of score\n- see if someone is into hot / fresh video or not\n- KNN: cosine similarity for user =\u003e top 10 similar user =\u003e recommend top videos user havent watched\n\nTried implementing with cosinesimilarity - Killed 9\n\nTried Sklearn KNN - took 5h ++\n\nPanns https://github.com/ryanrhymes/panns 2h++\n\nTrying Spotify's Annoy https://github.com/spotify/annoy : 20mins with 10 trees, 12mins with 100 trees.\n\n-\u003e however it's taking too long to find k-NN for each users (more than 10s each to get a good enough result)\n\nSubmission history:\n-------------------\n(Only those that worth documented or created when I am not too lazy):\n\nhttps://github.com/lenguyenthedat/dextra-viki-2015/blob/master/submission_history.txt\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flenguyenthedat%2Fdextra-viki-2015","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flenguyenthedat%2Fdextra-viki-2015","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flenguyenthedat%2Fdextra-viki-2015/lists"}