Наборы данных с пониманием лучших практик

13

Я магистрант CS в области интеллектуального анализа данных. Мой руководитель однажды сказал мне, что перед тем, как запустить какой-либо классификатор или сделать что-либо с набором данных, я должен полностью понять данные и убедиться, что данные чистые и правильные.

Мои вопросы:

  • Как лучше всего понимать набор данных (большой размер с числовыми и номинальными атрибутами)?

  • Практика, чтобы убедиться, что набор данных чистый?

  • Практика, чтобы убедиться, что набор данных не имеет неправильных значений или так?

Джек Твен
источник

Ответы:

8

Существуют основные вещи, которые вы можете сделать с любым набором данных:

  1. Проверьте значения (допуск длины строки, тип данных, маски форматирования, наличие обязательных полей и т. Д.)
  2. Корректность диапазона (соответствуют ли эти, казалось бы, правильные данные ожидаемым диапазонам значений)
  3. Предварительная обработка (если я попытаюсь проанализировать эти данные, могу ли я выполнить основы без ошибок)
  4. Предварительная отчетность (запустите отчет по набору данных и убедитесь, что он прошел тест на работоспособность)
  5. Определение пустого, пустого, нулевого и ложного значений для любого столбца данных.
  6. Выявление неуместных данных (числовые значения значительно отличаются от других значений в наборе данных, строковые значения, которые выглядят так, как будто они написаны с ошибками и т. Д.)
  7. Устранение или исправление явно ошибочных данных

Понимание данных для выявления ошибок - это совершенно другая игра с мячом, и это очень важно.

Например, у вас может быть правило, согласно которому серийный номер должен присутствовать в данном наборе данных, и этот серийный номер должен быть буквенно-цифровым с максимальной длиной строки 255 и минимальной длиной строки 5.

Глядя на данные, вы можете обнаружить, что одно конкретное значение серийного номера гласит: « "PLEASE ENTER SERIAL" Это совершенно верно, но неправильно».

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

В реальном мире вы не всегда можете позволить себе роскошь глубоко понимать ваши данные.

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

Кроме того, вопрос об источнике данных и о том, насколько хорошо этому источнику данных можно доверять, является обязательным. У меня часто бывает несколько противоречивых источников данных, и мы создаем правила, чтобы определить «источник правды». Иногда один набор данных имеет большие данные в данном аспекте, но другие наборы данных сильнее в других областях.

Обычно я скептически отношусь к вводимым вручную данным, но в некоторых случаях они сильнее, чем все, что можно получить с помощью автоматизации.

Стив Каллестад
источник
5

Мне очень нравится @Kallestad answer, но я хотел бы добавить мета-шаг: убедитесь, что вы понимаете, как собирались данные, и какие существуют ограничения. Я думаю, что очень распространено думать, что там, где нет неочевидных шагов, когда данные были собраны, но это не так: в большинстве случаев какой-то процесс или индивид думал о данных, и эти шаги могут и будут влиять на форму данных.

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

Вторая ошибка была более сложной: когда я проводил некоторый географический анализ, я обнаружил, что у многих людей характерны очень большие схемы движения, что говорит о том, что многие из них путешествовали из Мюнхена в Гамбург за считанные минуты. Когда я разговаривал с ppeople, они обнаружили небольшую ошибку в программном обеспечении агрегации данных, которая раньше не была замечена.

Выводы:

  • Не думайте, что ваши данные были собраны совершенными процессами / людьми.
  • Постарайтесь понять ограничения ваших поставщиков данных.
  • Посмотрите на отдельные шаблоны / значения и попробуйте определить, являются ли они логичными (легко для перемещения / географических данных)
Кристиан Зауэр
источник
4

Я обычно использую двухэтапный подход

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

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

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

damienfrancois
источник
4

Ниже вы можете найти копию моего ответа на связанный (хотя и сфокусированный на аспекте очистки данных) вопрос здесь, на Data Science StackExchange ( /datascience//a/722/2452 ), предоставленный в полном объеме для удобство читателей. Я верю, что это частично отвечает и на ваш вопрос, и надеюсь, что это полезно. Хотя ответ сосредоточен на Rэкосистеме, аналогичные пакеты и / или библиотеки можно найти для других сред анализа данных . Более того, хотя два цитируемых документа по подготовке данных также содержат примеры в R, эти документы представляют общий рабочий процесс (структуру) и лучшие практики , которые применимы к любому среда анализа данных.

R содержит некоторые стандартные функции для манипулирования данными, которые могут быть использованы для очистки данных, в базовом пакете ( gsub, transformи т.д.), а также в различные пакеты сторонних разработчиков , такие как stringr , перекроить , reshape2 и plyr . Примеры и лучшие практики использования этих пакетов и их функций описаны в следующей статье: http://vita.had.co.nz/papers/tidy-data.pdf .

Кроме того, R предлагает некоторые пакеты специально сосредоточены на очистке и преобразования данных:

Комплексный и последовательный подход к очистке данных в R, включая примеры и использование правил редактирования и дедуктивных пакетов, а также описание рабочего процесса ( каркаса ) очистки данных в R, представлен в следующей статье, которую я настоятельно рекомендую: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf .

Александр Блех
источник
3

Люди здесь заявили о больших шагах, но я думаю, что по следующей ссылке есть отличная информация о том, что я делаю, когда получаю новый набор данных, как сообщается в твиттере. Он суммирует шаги, которые люди твитнули, отвечая на великий вопрос @hmason «Люди данных: Что самое первое, что вы делаете, когда получаете новый набор данных? "

Надеюсь, это будет полезно.

Ислам Эль Хосари
источник
1

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

JenSCDC
источник