{"id":30405947,"url":"https://github.com/bryanthelai/game-recommender-system","last_synced_at":"2026-02-26T00:38:53.068Z","repository":{"id":278387811,"uuid":"934556496","full_name":"BryanTheLai/Game-Recommender-System","owner":"BryanTheLai","description":"Game Recommender System is an AI-powered project developed as an assignment for TARUMT. It leverages machine learning techniques in Jupyter Notebook and Python to suggest video games tailored to user preferences.","archived":false,"fork":false,"pushed_at":"2025-04-27T15:22:11.000Z","size":59647,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-21T19:23:51.262Z","etag":null,"topics":["ai","artificial-intelligence","data-science","game","game-recommendation-system","jupyter-notebook","machine-learning","ml","python","recomendation-system","recommender-system"],"latest_commit_sha":null,"homepage":"https://steam-games.streamlit.app/","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/BryanTheLai.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,"zenodo":null}},"created_at":"2025-02-18T03:06:27.000Z","updated_at":"2025-08-08T02:28:33.000Z","dependencies_parsed_at":"2025-04-23T05:29:50.521Z","dependency_job_id":null,"html_url":"https://github.com/BryanTheLai/Game-Recommender-System","commit_stats":null,"previous_names":["bryanthelai/game-recommender-system"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BryanTheLai/Game-Recommender-System","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BryanTheLai%2FGame-Recommender-System","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BryanTheLai%2FGame-Recommender-System/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BryanTheLai%2FGame-Recommender-System/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BryanTheLai%2FGame-Recommender-System/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BryanTheLai","download_url":"https://codeload.github.com/BryanTheLai/Game-Recommender-System/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BryanTheLai%2FGame-Recommender-System/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29845911,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T22:37:40.667Z","status":"ssl_error","status_checked_at":"2026-02-25T22:37:25.960Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["ai","artificial-intelligence","data-science","game","game-recommendation-system","jupyter-notebook","machine-learning","ml","python","recomendation-system","recommender-system"],"created_at":"2025-08-21T18:20:08.601Z","updated_at":"2026-02-26T00:38:53.062Z","avatar_url":"https://github.com/BryanTheLai.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Steps to run\n\n1. Create and activate a virtual environment  \n    ```bash\n    python -m venv venv\n    venv\\Scripts\\activate\n    ```\n2. Install project dependencies  \n    ```bash\n    pip install -r requirements.txt\n    ```\n3. Launch the Streamlit app  \n    ```bash\n    streamlit run app.py\n    ```  \n\n# Game Recommender System\nPut the csv files in data/raw: [Steam Dataset from Kaggle](https://www.kaggle.com/datasets/antonkozyriev/game-recommendations-on-steam)\n\nThe Steam Store dataset contains over 41 million cleaned and preprocessed user recommendations (reviews).\n**Steam Store** is a leading online platform for purchasing and downloading gaming-related content. \nContains detailed information about games and add-ons.\n\n## Models\nTop N Game Recommendations and using three models \n1. Collaborative Filtering\n2. Content-Based\t\t\t \n3. Matrix Factorization\n\n\n    ## Project Structure ([Cookie Cuter Template](https://github.com/drivendataorg/cookiecutter-data-science))\n\n    ```\n    ├── data/\n    │   └── raw/         # Original data\n    ├── models/\n    │   └── *.pkl       # Trained models (e.g., pickled)\n    ├── notebooks/\n    │   └── [NN]-*.ipynb # Jupyter notebooks (e.g., 01-data-exploration.ipynb)\n    └── requirements.txt # Project dependencies\n    ```\n\n    ## Data Exploration\n   - Original dataset\n    ```\n    games.csv:\n    app_id\t\t\t-Int\t\t- product id of game \n    title\t\t\t-String\t\t- the name of game\n    date_release\t\t-Date\t\t- the date that the game release\n    win\t\t\t-Boolean\t- the game supported on Windows \n    mac\t\t\t-Boolean\t- the game supported on MacOS\n    Linux\t\t\t-Boolean\t- the game supported on Linux\n    rating\t\t\t-String\t\t- the rating given by users\n    positive ratio\t\t-int (%)\t- the percentage rating by users\n    user_review\t\t-int\t\t- total users that review the game\n    price_final\t\t-float\t\t- Price in US dollars $ calculated after the discount\n    price_original\t\t-float\t\t- original price before discount(if any)\n    discount\t\t-int(%)\t\t- discount on that game(if any)\n    steam_deck\t\t-Boolean\t- the game supported on steam deck\n\n\n\n    users.csv:\n    user_id\t\t\t-Int\t\t-user id\n    products\t\t-Int\t\t-no. of game purchased by the user\n    reviews\t\t\t-Int\t\t-no. of reviews \n\n\n    recommendations.csv:\n    app_id\t\t\t-Int \t\t- product id of the game\n    helpful\t\t\t-Int\t\t- no. of users found that a recommendation helpful\n    funny\t\t\t-Int\t\t- no. of users found that a recommendation funny\n    date\t\t\t-Date\t\t- date of publishing\n    is_recommended\t\t-Boolean\t- whether the user recommend the product\n    hours\t\t\t-time\t\t- hours playing on that game\n    user_id\t\t\t-Int\t\t- user id\n    review_id\t\t-Int\t\t- review id (auto-generated)\n\n\n    games_metadata.json:\n    app_id\t\t\t-Int \t\t- product id of the game\n    description\t\t-String\t\t- brief description about the game \n    tags\t\t\t-String\t\t- categories/style of the game\n    ```\n\n\n| Concept                 | Definition in Recommender Context                                                                            | Relation to Code / Formula                                                                        |\n| :---------------------- | :----------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------ |\n| **Interaction**         | The specific user action defining a positive relationship (e.g., wrote a review, `is_recommended=True`, played \u003e X hours). | The entries forming the user-item matrix.                                                         |\n| **K**                   | The **number** of top recommendations generated and evaluated (e.g., K=20).                                     | Parameter `K` in evaluation functions.                                                            |\n| **Relevant Items**      | The items the user *actually interacted with* (as per Interaction definition) in the **test set**.                | `actual_items` (Set of item IDs for a user from the test split).                                  |\n| **Recommended Items @K**| The **top K** items suggested by the model for a user, based on training data.                              | `recommended_ids[:K]` (List of item IDs output by `recommend_for_user`).                            |\n| **True Positives (TP) @K** | Items **correctly recommended**: present in both the Top K Recommended list AND the Relevant Items list.        | `hits = len(set(recommended_ids[:K]) \u0026 actual_items)`                                            |\n| **Precision@K**         | **Accuracy of recommendations:** What *fraction* of the K recommended items were actually relevant (TPs)?         | `hits / K` \u003cbr\u003e (How relevant is the list shown?)                                                |\n| **Recall@K**            | **Coverage of recommendations:** What *fraction* of all the user's Relevant Items were captured in the top K list? | `hits / len(actual_items)` \u003cbr\u003e (How much of the user's interest did we find?)                  |\n\n\n**Example:**\n\nLet's say we evaluate for **User A** with **K=5**.\n\n1.  **Relevant Items (from Test Set):** User A actually interacted with `{Game_A, Game_B, Game_C, Game_D}` in the test data. So, `len(actual_items) = 4`.\n2.  **Recommended Items @K=5:** Your model recommends the following top 5 games: `{Game_A, Game_X, Game_C, Game_Y, Game_Z}`.\n3.  **Calculating Hits (True Positives):** We compare the two lists:\n    *   `Game_A` is in both lists (TP).\n    *   `Game_C` is in both lists (TP).\n    *   `Game_X`, `Game_Y`, `Game_Z` were recommended but are *not* in the relevant list (False Positives, FP).\n    *   `Game_B`, `Game_D` are relevant but were *not* recommended in the top 5 (False Negatives, FN).\n    *   The number of **True Positives (hits)** is **2**.\n4.  **Calculating Metrics:**\n    *   **Precision@5** = Hits / K = 2 / 5 = **0.40** (40% of the recommendations were correct).\n    *   **Recall@5** = Hits / Total Relevant Items = 2 / 4 = **0.50** (50% of the relevant items were captured in the top 5 recommendations).\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryanthelai%2Fgame-recommender-system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbryanthelai%2Fgame-recommender-system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryanthelai%2Fgame-recommender-system/lists"}