  Data science pipelines to train and evaluate models with machine learning may
contain bugs just like any other code. Leakage between training and test data
can lead to overestimating the model's accuracy during offline evaluations,
possibly leading to deployment of low-quality models in production. Such
leakage can happen easily by mistake or by following poor practices, but may be
tedious and challenging to detect manually. We develop a static analysis
approach to detect common forms of data leakage in data science code. Our
evaluation shows that our analysis accurately detects data leakage and that
such leakage is pervasive among over 100,000 analyzed public notebooks. We
discuss how our static analysis approach can help both practitioners and
educators, and how leakage prevention can be designed into the development
process.
