# Setting Up Your Goal

Every ML project has a specific goal to be achieved, and we use evaluation metrics to determine if the goal is satisfactorily achieved.

One thing to keep in mind is to use a **single number evaluation metric**. This helps us easily and quickly compare the outcomes of each iteration of a certain model or compare the performance of multiple models. For example, instead of using both precision and recall, we could use the f1-score.

Sometimes, we might not be able to use a single metric. In such cases, we could try using **optimizing** and **satisficing** metrics. Say we have two metrics: accuracy and runtime. We could choose a model that has the highest accuracy with runtime<=threshold. So, accuracy would be the _optimizing metric_ and runtime would be the _satisficing metric_. In general, if we have n metrics, we could have 1 optimizing metric and n-1 satisficing metrics.

Another thing to keep in mind is that the dev and test sets must come from the same distribution. Also, they must contain data that is similar to the kind of data that the model is to be run on. This would ensure that the model would perform well once deployed.

If we notice that the metric isn't able to correctly identify the better model, we must promptly change the metric. Also, if we see that the dev/test set is not indicative of the data that the model will be used on, we must change the dev/test set as well to ensure that the model would be able to generalize well.
