# Recommender System Challenge
## Description: 
You are required to complete a FIT5212-specific challenge in Kaggle 

https://www.kaggle.com/competitions/fit-5212-s-1-2025

The data was collected by crawling the Amazon website and contains product metadata and review information about 219,859 different products. 
The user-item interaction data is the main data for this challenge. This data is further split into training and test sets. 
- train.csv. The training dataset contains a set of user_item ratings between users and items. The users explicitly rated the items that they interacted with between 1 to 5. 

- test.csv. Each user is provided with a list of items in the test dataset, for each user, you will need to predict the ratings for all the items in their list. 

The train dataset contains the following information:

- ID: an arbitrary ID for a row (does not contain any information)
- user_id: the id assigned to each user
- product_id: the id assigned to each product
- product_name: the name of the product
- rating: the explicit rating of a specific product_id by a user_id ranging from 1 to 5
- votes: the number of votes for a particular rating
- helpful_votes: the number of people that found the rating helpful

**Example**: The row below shows that the user with ID "1813" gave a rating of "5" to the product with ID "154533". The product is titled "Beautiful Thing". This rating received 10 votes, and 8 out of those 10 people found the rating helpful.
![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F7299706%2F8111d15a68ab02577dff212ab192ab21%2FScreenshot%202024-04-25%20at%206.36.25pm.png?generation=1714037271534359&alt=media)

The test dataset contains the following information:

- ID: an arbitrary ID for a row (does not contain any information). Avoid making any changes to this column as it is the main identifier when we mark your submission.
- user_id: the id assigned to each user
- product_id: the id assigned to each product
- product_name: the name of the product

Your task is to develop a recommender system by training it on the provided train set. Once the system is trained, you will use it to generate predicted ratings for each user-item pair present in the test set.

## Submission:
For every user-item pair in the test set, you need to provide a predicted rating. The submission file should contain only two columns: ID and rating.
The file should contain a header and have the following format:

```
ID, rating
1,  5
2, 4
3, 5
etc.
```

## Requirements: 
- Participate in the challenge and make your submission. The maximum submission in Kaggle is 10 submissions per day. 
- This is an individual assignment. You have to finish it on your own.
- In addition to the challenge, you have to finish a report on this challenge and submit it to Moodle. 

## Submission: 
To Kaggle 
- Kaggle submission, you need to submit your predictions on the test dataset on Kaggle. 
To Moodle: 
- A csv file, “studentID.csv”. Please replace studentID with your own student ID. The content should be the same as the best prediction file you have submitted to Kaggle. This file should be submitted in Moodle. We will double-check the files you have submitted to Kaggle and Moodle. If the two files are not the same (i.e., the file submitted to Moodle cannot get the same score in Kaggle), your result is invalid, and you will fail the assignment.
- A jupyter notebook, “code_studentID.ipynb”. This notebook contains the code for Task 1. The notebook should be self-contained. If a third-party package is used, this package should be a well-known package and easy to install (e.g., install within a single command). This notebook should include both codes and outputs so that we can read and mark them. 
- A pdf file, “code_stduentID.pdf”. This pdf is generated by cleaning all the output in the Jupyter Notebook and exporting it as a pdf file. This pdf will be passed in Turnitin for plagiarism check. 
- A pdf report, “report_stduentID.pdf”. This pdf contains a more detailed analysis of the work. This file should show how you finished the task. Ideally, you should show what sort of algorithms you have considered, what kind of information you have used, and the reason for your choice of the corresponding algorithm to achieve the results you submitted to Kaggle. Comparison for different algorithms should be included in this pdf report. And detailed analysis of the results is encouraged. If you have used other algorithms/packages which are not covered in this unit, you should give a brief introduction to that algorithm/package. We expect the length of this report to be between 8 to 10 pages excluding references. This pdf will be passed in Turnitin for plagiarism check. 

## Marking: 
The Kaggle leaderboard only shows your scores on 50% of the test data. Your final score will be marked based on your CSV file submitted to Moodle for the whole test dataset. 

The methodology and report are set to 50% marks and the prediction score accounts for 50% marks. So please prepare a good report and clearly describe your method to achieve the marks. 
See the marking rubric on Moodle for more details.
