Как отладить анализ данных?


10

Я столкнулся со следующей проблемой, которая, по моему мнению, довольно типична.

У меня есть большие данные, скажем, несколько миллионов строк. Я провел некоторый нетривиальный анализ, например, SQL-запрос, состоящий из нескольких подзапросов. Я получаю некоторый результат, утверждая, например, что свойство X увеличивается со временем.

Теперь есть две возможные вещи, которые могут привести к этому:

  1. Х действительно увеличивается с течением времени
  2. У меня ошибка в моем анализе

Как я могу проверить, что произошло первое, а не второе? Пошаговый отладчик, даже если он существует, не поможет, поскольку промежуточные результаты могут состоять из миллионов строк.

Единственное, о чем я мог подумать, - это как-то сгенерировать небольшой синтетический набор данных со свойством, которое я хочу протестировать, и запустить анализ на нем в качестве модульного теста. Есть ли инструменты для этого? В частности, но не ограничиваясь этим, SQL.


Отличный вопрос! Я думаю, что это важная и нетривиальная проблема.
Бен

Ответы:


4

Вот предложение:

  • Кодируйте свой анализ таким образом, чтобы его можно было выполнить на подвыборках.
  • Кодируйте дополнительную подпрограмму, которая может выполнять выборку либо случайно, либо по времени, либо по региону, либо ... Это может зависеть от конкретной области. Это где ваши знания входят.
  • Объедините два и посмотрите, стабильны ли результаты по подвыборкам.

Не будет ли это также означать, что моя ошибка стабильна во всех подвыборках?
Маленькие столики Бобби

Это возможный результат, но вы узнаете об этом только однажды. И если это так, вы можете, по крайней мере, отладить меньшие наборы данных.
Дирк Эддельбюттель

1

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

Убедитесь, что вы не вставили никаких фильтров на предыдущем шаге. Когда у вас есть полные данные на обобщенном уровне, вы можете поиграть в сводные таблицы и посмотреть, что меняется, увеличивается или уменьшается.

Если данные слишком велики, чтобы их можно было суммировать даже по важным параметрам, их необходимо разделить на 3–4 подмножества, а затем повторить.

Надеюсь, поможет.


1

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

Как только реализация проверена, вам необходимо убедиться, что между переменными, которые вы пытаетесь предсказать, существует значительная связь. Для этого определите нулевую гипотезу и попробуйте отклонить нулевую гипотезу со значительным уровнем достоверности. ( проверка гипотезы о линейной регрессии )

Для вашего дистрибутива SQL могут быть интегрированные тестовые среды. Но использование языка программирования, такого как R, будет легче реализовать.


1

Мне нравится многошаговая стратегия:

  1. Пишите чистый, легкий для понимания код, в отличие от короткого кода. Я знаю статистиков, которые любят хитрый код, но обнаруживать проблемы в хитром коде опасно. (Я упоминаю об этом, потому что мой руководитель любил документированные скрипты на 500 строк на языке Python - весело отлаживал этот беспорядок, и я часто видел этот паттерн, особенно от людей, которые не из ИТ-среды)

  2. Разбейте ваш код на более мелкие функции, которые можно протестировать и оценить в меньших размерах.

  3. Ищите связанные элементы, например, число случаев с условием X равно Y, поэтому этот запрос ДОЛЖЕН возвращать Y. Чаще всего это более сложный, но выполнимый.

  4. Когда вы запускаете свой скрипт в первый раз, протестируйте его с помощью небольшой подвыборки и тщательно проверьте, все ли в порядке. В то время как мне нравятся юнит-тесты в ИТ, ошибки в статистических скриптах часто бывают настолько явными, что их легко заметить при тщательной проверке. Или это методические ошибки, которые, вероятно, никогда не будут обнаружены юнит-тестами.

Этого должно быть достаточно для обеспечения чистой «одноразовой» работы. Но для временного ряда, как вы, похоже, добавили бы, что вы должны проверять значения вне диапазона, невозможные комбинации и т. Д. Для меня большинство сценариев, которые достигли шага 4, вероятно, не содержат ошибок - и они останутся такими, если что-то меняется. И чаще всего данные меняются - и это то, что следует проверять при каждом запуске. Написание кода для этого может занимать много времени и раздражать, но это бьет тонкие ошибки из-за ошибок ввода данных.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.