CS221 Final Project Guidelines

In the final project, you will work in groups of up to four to apply the techniques that you've learned in CS221 to a new setting that you're interested in. Note that regardless of the group size, all groups must submit the work detailed in each milestone and will be graded on the same criteria. Additionally, we expect each team to submit a completed project. We encourage teams of 3-4 students. All projects require students to spend time gathering data and setting up the infrastructure to reach an end result, and thus 3 or 4 person teams can share these tasks much better. This allows the team to focus more on the interesting results and discussion in the project. Each member of the team should contribute in both technical and non-technical components of the project.

You will build a system to solve a well-defined task. Which task you choose is completely open-ended, but the methods you use should draw on the ones from the course.

If you are interested in doing the class project, submit the project interest form any time before October 5. We encourage all students who might be interested in a project to fill this form out. There is no commitment (you can fill it out and then not follow through with doing a project). Filling up this form lets us help you find a group if needed as well as assign a CA mentor to help you with the project proposal; earlier is better. Only one form per team needs to be filled out.

After you submit the form, you will be assigned one of the CAs as your official mentor. They will grade all your work and really get to know your project. You are required to have a 15-minute check-in meeting with your mentor in the week before or after the progress report deadline, and are encouraged to drop by your mentor's office hours often to discuss your project. Note that it will take several iterations to find the right project, so be patient; this exploration is an essential part of research, so learn from it. Have fun and don't wait until the last minute!


Throughout the quarter, there will be several milestones so that you can get adequate feedback on the project. While the project is ungraded (except for potential extra credit), we can only give feedback on milestones that are submitted on time.

Note: you can have an appendix for each of the assignments the beyond the maximum number of allowed pages with any figures, plots, or examples that you need.


Submit the milestones on Gradescope and make sure all group members are added to the submission.

All milestones are due at 11pm (23:00, not 23:59) .

For each milestone, you should submit: For p-final, also submit a URL to your video presentation (e.g., an unlisted YouTube URL). In addition, you should also submit supplementary material. There are two ways to do this. First, you can just package it up: The file size limit is 20MB per file. If the data does not fit in the file size limit, submit a small but meaningful subset of the data.

Rubric We will give feedback on the following dimensions:

Of course, the experiments may not always be successful. Getting negative results is normal, and as long as you make a reasonably well-motivated attempt and you explained why the results came out negative, you will get credit.

An example strategy

This is a suggestion of how to approach the final project with an example.


You are free to use existing datasets, but these might be not necessarily the best match for your problem, in which case you are probably better off making your own dataset.


You are free to use existing tools for parts of your project as long as you're clear what you used. When you use existing tools, the expectation is that you will do more on other dimensions.

Some project ideas

You can also get inspiration from last spring's CS221 projects (student access only).

Frequently asked questions

Can I use the same project for CS221 and another class (CS229, etc.)? The short answer is that you cannot turn in the identical project for both classes, but you can share common infrastructure across the two classes. First, you should make sure that you follow the guidelines for the CS221 project, which are likely different from those of other classes. Second, if any part of the project is done for a purpose outside CS221 (for the final project in CS229 or other classes, or even for your own research), then in the progress and final reports, you must clearly indicate which part of the project was done for CS221 and which part was not. For example, if you're taking CS229, then you cannot turn in the same pure machine learning project for CS221. But you can work on the same broad problem (e.g., news recommendation) for both classes and share the same dataset / generic wrapper code. You should then explore the machine learning aspect of the problem for CS229 (e.g., classifying news relevance) and another topic for CS221 (e.g., optimizing diversity across news articles using search or CSPs).

Are there restrictions on who I can partner up with for the final project? The only hard requirement is that each member of your group must be enrolled in CS221. Thus, if you choose to use the same project for CS221 and another class, all of your partners must be in CS221. If you feel like you have a compelling case for an exception, please submit a request on Ed detailing the parts of the project used for each class and the reasons for deviating from the project policies.

How do you choose a good baseline and oracle?
Baselines are simple algorithms, which might include using a small set of hand-crafted rules, training a simple classifier, etc. (Note that baselines are extremely simple, but you might be surprised at how effective they are.) While a predictor that guesses randomly provides a lower bound (and can be reported in the paper), it is too simple and doesn't give you much information. Predicting the majority label is a slightly less trivial baseline, and whether it's acceptable depends on how insightful it is. For classification, if the different labels have very different proportions, then it could be useful; otherwise it won't be. You are encouraged to have multiple baselines. Please note that we expect an implementation of the baseline for the project progress report (not project proposal).

Oracles are algorithms that "cheat" and look at the correct answer or involve humans. For human-like classification problems (e.g., sentiment classification), you can have each member of your project team try to annotate ~50 examples and measuring the agreement rate. Note that some tasks are subjective, so even though humans are providing ground truth labels, human accuracy will not be 100%. When the classification problem is not human-like, you can try to use the training error of an expressive classifier (e.g., nearest neighbors) as a proxy for oracle error. The idea is that if you can't even fit the training data using a very expressive classifier, there is probably a lot of noise in your dataset, and you have a slim chance of building any classifier that does well on test. While returning 100% is an upper bound, it is not a valid oracle since it is vacuously an upper bound. Sometimes, oracles might be difficult to come by. If you think that no good oracles exist, explain why. Please note that we do not expect an implementation of the oracle at any point during your final project. However if the implementation is very easy, you are free to implement the oracle.

Both baselines and oracles should be simple and not take much time. The point is not to do something fancy, but to work with the data / problem that you have in a substantive way and learn something from it. Here are some examples of baselines:

Guessing completely at random is technically a baseline, but is a really bad one because it doesn't really tell you much about how easy the problem is.
Here are some examples of oracles: Always guessing the correct label is technically an oracle, but it's a really bad one, because you'd always get 100% and you don't learn from it.
Overall, the main point of baselines and oracles is to get you to look at the problem carefully and think about what's possible. The accuracies of state-of-the-art systems on the dataset could be either a baseline or an oracle. Sometimes, there are data points that are neither baselines nor oracles: for example, in a two component system, you use an oracle for one and a baseline for another.