Вопрос на миллион долларов - каковы распространенные варианты использования модульного тестирования в конвейере кода Data Science?

Как вы, несомненно, знаете, вопрос не в том, нужно ли использовать модульное тестирование в конвейере DS, поскольку ответ определенно - черт возьми, да! Но на что обращать внимание при модульном тестировании?

Во-первых, что такое тестирование? Тестирование определяется как задача, которая проверяет, соответствуют ли фактические результаты ожидаемым, таким образом гарантируя, что ваш код не содержит ошибок.

Тестирование должно быть неотъемлемой частью любого проекта, особенно с точки зрения перспективы каждого проекта в области науки о данных - будь то на этапе анализа, на этапе подготовки данных, на этапе алгоритма или даже на этапе оценки вашей модели!

В этом сообщении блога мы рассмотрим некоторые из наиболее распространенных и менее распространенных случаев, когда мы реализовали конкретное модульное тестирование здесь, в Fyber.

Тесты на смещение данных

Представленные здесь тесты являются относительно простыми в реализации тестами, которые, основываясь на нашем опыте, позволяют найти многие из известных проблем.

Дрейф данных - это изменение любого аспекта данных. Время (например, получение каждые 2 часа, а не каждый час), структура данных (например, старый столбец удаляется, новый столбец добавляется), тип данных (например, столбец изменен с int на строку …), так далее.

Соответствующие варианты использования могут быть следующими:

  1. Нулевые значения внутри столбца

Этот вариант использования относится к тому факту, что после некоторой обработки по пути / некоторого дрейфа данных в столбце может быть значение NULL.

Таким образом, тесты, которые могут быть написаны для решения этой проблемы, включают:

  • Проверить, является ли столбец нулевым, и вернуть логический флаг соответственно / подтвердить, что он не равен нулю - это может быть тот случай, когда значение null не ожидается в конкретном столбце.
  • Подсчитайте количество нулевых / ненулевых значений внутри столбца - это актуально, когда в столбце ожидается нулевое значение по любой заданной причине, или в случае, если мы хотели бы увидеть их количество null VS. ненулевые значения в определенном столбце
  • Просмотрите все / несколько столбцов и проверьте наличие нуля во всех из них. Это может происходить в тех случаях, когда значение null не ожидается ни в одном из столбцов.

2. Размер / количество фрейма данных / столбца

Этот вариант использования относится к отслеживанию определенных данных, обработке данных и удалению выбросов / фильтрации. Таким образом, мы хотели бы проверить себя с точки зрения размера данных, который у нас остался, чтобы убедиться, что мы не соответствуем нашей модели / любому дальнейшему шагу в нашем конвейере с DataFrame, который «внезапно» становится слишком большим или слишком маленьким. .

Поэтому мы можем написать различные тесты / проверки действительности, чтобы решить эту проблему:

  • Размер фрейма данных подсчета / размер столбца подсчета - это можно использовать как тип проверки действительности, чтобы фактически регистрировать размер фрейма данных после выполнения с ним манипуляций.
  • Тесты подтверждения размера. Это может быть тот случай, когда мы знаем (даже в качестве приблизительной оценки), каким, вероятно, будет размер наших выходных данных после манипуляций с данными. Примеры могут включать более 0, более 1 млн записей, не более 10 млн, от 1 до 2 млн записей и т. Д.

3. Тесты для конкретных доменов

Этот раздел относится к конкретной области, в которой вы работаете.

Возьмем общий пример: я знаю, что в выбранном столбце всегда, в любой момент времени и без применения какой-либо фильтрации, должно быть ровно 2 категории (т. Е. 2 ​​уникальных значения). Итак, я могу проверить отдельные наблюдения в этом столбце, чтобы убедиться, что я в порядке, и проанализировать соответствующие данные.

Конкретные примеры могут включать:

  • Мир электронной коммерции - анализ и обработка данных любого пола
  • Банковский мир - анализ и обработка данных из любой «группы доходов» (низкий, средний, высокий…)
  • Мир Ad-Tech - анализ и обработка данных из любой «операционной системы устройства»

Поэтому мы можем написать несколько тестов / проверок действительности, чтобы решить эту проблему:

  • Различный подсчет в определенном столбце
  • Агрегируйте данные по каждой «категории» и подсчитайте количество записей / сумму по некоторым KPI - Это может быть более подробный случай, когда вам недостаточно просто «иметь» категорию в данные. Вместо этого вы хотели бы убедиться, что эта категория содержит достаточно данных, после манипуляций, сделанных в вашем DataFrame.

Наконец, я хотел бы услышать ваши примеры использования модульного тестирования в мире науки о данных, поэтому не стесняйтесь оставлять их в разделе комментариев!