# data[].attributes.body
Machine learning is a type of technology that allows computers to learn from data and make decisions or predictions without being directly programmed for every task. Instead of being told exactly what to do step by step, the computer uses patterns in data to figure things out on its own.

# data[].attributes.body
Content-based filtering is a way that computer systems make recommendations by looking at the details of items you’ve liked before. For example, if you enjoy action movies, the system will recommend other action movies based on their features—like fast-paced scenes, car chases, or famous action actors. It learns what kind of “ingredients” you like and looks for more items with similar ingredients.

Collaborative filtering makes recommendations by looking at what other people like. Instead of focusing on the item details, it finds people who have similar tastes to you and suggests things they enjoyed. For example, if you and another person both liked the same few songs, and that person also liked a song you haven’t heard, the system might recommend it to you too. It's like getting suggestions from a crowd of people who think like you.

# data[].attributes.body
In our first Colab, we all rated the same 23 songs. Some were different genres, or languages- than others. The purpose was for the program to be able to recommend new songs based on the ones we liked the best.

# data[].attributes.body
My top three attributes were the uniqueness of the lyrics, energy, and popularity. I chose these personally because based off the music I stream the most, these seemed most fitting for me personally.

# data[].attributes.body
Choosing the appropriate level of complexity for a machine learning model involves finding a balance between underfitting and overfitting. A model that is too simple may not capture the important patterns in the data, leading to poor performance. On the other hand, a model that is too complex may learn the training data too well can cause it to perform poorly on new, unseen data. To determine the right level of complexity, it is important to evaluate the model using both training and testing datasets. Monitoring performance on both can help reveal whether the model is generalizing well or just memorizing. Gradually adjusting the model’s complexity and checking for consistent performance across different data splits can help in selecting a model that is accurate and reliable.

# data[].attributes.body
This is an example of testing data with a one attribute model. As you can see it isn't the most accurate slope. This is because the less data you give the program the less accurate the guess will be.

# data[].attributes.body
This is a similar example, but because there are two attributes, the graph represents x, y, and "z". This more accurately guessed what I would have rated a testing data song.

# data[].attributes.body
On our 5th Colab, we made a class ratings matrix using a csv file of everyone's ratings, as a way of using collaborative filtering. We compared our rankings to our peers to determine who we had the strongest likeabilities alike. I found Jada and I were a 78 percent 'match'- meaning that if I liked a song the probability of Jada liking it as well is about 78% chance.

# data[].attributes.body
This is an image of my personal recommendation predictions. As you can see, the results aren't too far off from what I rated. But, there is a ton of room for improvement. The main issue is, it would never fully commit to a ten or a one, but I frequently did. This made it assume that my highest rankings would be a bit lower than a perfect ten; vice versa for lowest ranked. If I could go back to tweak my model to try and get the best results, I would try to be more precise with my attributes, as I think if they were completely accurate then my prediction results could have been more accurate.

# data[].attributes.body
All in all, I believe machine learning is a very helpful tool that we all have fingertip access to. I think it is important for people to realize that although it can be extremely convenient, it can also have its cons. When being used in a more public setting- such as all of our social media platforms, it can start its own set of issues. Like online echo chambers, and sometimes burn out of our favorite things because the algorithm takes away its specialty/novelty. Collaborative filtering may also have it's biases that come with it, like something I personally found during the research for this very project. I found that if I personally knew me and one specific person had more of a chance listening to the same music, I would 100% of the time listen to their recommendation over that of someone who's just a little bit less similar to me. Which does not always mean their music will be objectively worse. So in a way, both algorithms create somewhat of an echo chamber. Overall, with all my nuances, I still believe these algorithms are very helpful, and I- like many others, use them pretty much every day. Don't knock your Spotify's recommended radios before you try them.