Notes: Again thank you all for joining this course. I hope that you would enjoy the assignments. We used to put exams instead but I think hands-on should be more of the focus of this course. Any feedbacks will be highly appreciated. 
 
### Wish.com Product Rating Prediction


![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F4409738%2Fa89e55ba3a0204c78be0eb154c79a6a0%2FA21ADFF0-AB9D-44E7-ABE0-F2E91CB19E1D.jpeg?generation=1601161987220890&alt=media)


So in this assignment, you will be working with a tabular dataset. The dataset is not clean, and you will need some preprocessing depending on the models of your choice. The dataset is the wish.com product dataset. We collected the data combined with some available data. Some nosies are added to the dataset. The goal is to predict the product ratings given the other features known for a product on Wish.com. Ratings are in categories from 1 to 5. For one product, the higher the rating is, the more the customers like the product. In this way, when you have a new product to be put on wish.com, you can estimate how likely people will like your product, without actually listing out there. Also, by doing this, it helps us to understand under what certain conditions that a product will be highly rated, as a way to understand the customer base of the wish.com. 

You are encouraged to use the Google Colab environment for this assignment to run your experiments through Jupiter Notebook. 

### For the first-time Kaggle Users:

If you are first-time user of Kaggle, basically it is a platform for data science project competitions. In this case, we have a training set (with labels), and a testing set (without labels). You can play around with the training set to build models, and generate the predictions following the format of our sample submission csv file. Then you can submit your csv file through the Kaggle website. You will be able to see how well your sample submission performs on the leader board. There are two leaderboards: public and private. Public leaderboard is the one you will be able to see, which shows the performance of your submission with 50% of the testing data. Private leaderboard, with the rest 50% percent of the testing data, will be only shown after the deadline of this competition. 

### Tasks:

✔️ Meme competition:
Include/find a MEME that you liked related to data science/data mining/machine learning

✔️ Problem Formulation:
Define the problem. What is the input? What is the output? What data mining function is required? What could be the challenges?  What is the impact? What is an ideal solution?

✔️ Understand the template:
Put detailed comment on each line of the code to show your understanding of the template (you can find it at the Data tab). Then describe: What is the experimental protocol used and how was it carried out? What preprocessing steps are used in the template? What is the model being used? 

✔️ Model Tuning and Documentation:
Now based on the template, try to improve the model's performance on the public leaderboard by following the data science life-cycle for tuning. You can try different features, different hyperparameters/configurations of the model, and even a different model. For each trial, document the reason why you want to make the certain change and the expected outcome, before running the code. Record the observed performance and your thought on it. Recall that we have a DS life-cycle and we should know what to do when underfit/overfit. The final result is not important, but the process is. Documentation of your thought process is very important, since most people forgot why they test certain model/hyperparameter after they got the result (it takes time). It also helps a lot when you got stuck. You can organize the notebook by listing 

- thoughts and observations for trial 0, plan for trial 1
- code for trial 1
- thoughts and observations for trial 1, plan for trial 2
- code for trial 2
...

You have to tune at least 10 times. All the tried solutions should be different (e.g. different feature sets/different preprocessing). The tried solutions should cover at least one additional preprocessing techniques and at least one model that with additional features to the notebook. You can find the hyperparameters of a model from online API (e.g. [this is](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html) for the logistic regression model used in the template).

✔️ Answer the questions below (**briefly**):

🌈 Why Data Mining is a misnomer? What is another preferred name?
🌈 What is the general knowledge discovery process? What is the difference between a data engineer and data scientist/AI engineer?
🌈 In data mining, what is the difference between prediction and categorization?
🌈 In a linear model, which regularization method encourages sparsity?
🌈 Why we need GD for optimization, rather than simply use linear algebra to solve a simple linear model?
🌈 In terms of bias and variance, defines what is overfitting and under fitting?
🌈 Why data science/machine learning is a bad idea in the context of information security? 

### Deliverable:

🔥 A python notebook containing the documentation of how you reach the final design as well as the answers to the questions. 

### Marking:

👍 2 for technical soundness of the final script (whether you did things right e.g. not using ID as a feature)
👍 4 for clarity, organization and soundness of the documentation (how & why you adjust your design to improve the performance) (example deduction: decision tree with observed high bias -> trim more, linear model with observed high bias in testing set -> more regularizations)
👍 2 for the clarity of your own code (all the code should have comments)
👍 2 your answers to the questions (deductions based on errors)

Note: Emoji allowed and encouraged so it will be more fun for us to grade it.

### Tutorial:

A simple walkthrough example is [here](https://www.kaggle.com/c/cisc873-dm-f20-a0/data) (see the notebook ipynb file). 


If you are very new to coding for dataset, you can follow the tutorials below:

🥳 [10-minutes pandas tutorial](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
🥳 [Scikit-learn classification with pandas](https://stackabuse.com/classification-in-python-with-scikit-learn-and-pandas/)

There are a lot of resources available online, especially for medium.com. For posts that requires tokens/credits, you can open and read that page in incognito mode of your browser. 
