  Machine Learning (ML) is being used in multiple disciplines due to its
powerful capability to infer relationships within data. In particular, Software
Engineering (SE) is one of those disciplines in which ML has been used for
multiple tasks, like software categorization, bugs prediction, and testing. In
addition to the multiple ML applications, some studies have been conducted to
detect and understand possible pitfalls and issues when using ML. However, to
the best of our knowledge, only a few studies have focused on presenting ML
best practices or guidelines for the application of ML in different domains. In
addition, the practices and literature presented in previous literature (i) are
domain-specific (e.g., concrete practices in biomechanics), (ii) describe few
practices, or (iii) the practices lack rigorous validation and are presented in
gray literature. In this paper, we present a study listing 127 ML best
practices systematically mining 242 posts of 14 different Stack Exchange (STE)
websites and validated by four independent ML experts. The list of practices is
presented in a set of categories related to different stages of the
implementation process of an ML-enabled system; for each practice, we include
explanations and examples. In all the practices, the provided examples focus on
SE tasks. We expect this list of practices could help practitioners to
understand better the practices and use ML in a more informed way, in
particular newcomers to this new area that sits at the intersection of software
engineering and machine learning.
