Очистка данных перед загрузкой в хранилище

Очистка данных перед загрузкой в хранилище

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

Данные очищать необходимо! Ведь информация разнородна и почти всегда собирается из множества источников. Именно наличие различных точек сбора данных делает процесс очистки таким сложным и актуальным.

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

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

Типы ошибок

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

Характерный пример такой ошибки — обозначение пола человека. Где-то он обозначается как М/Ж, где-то как 1/0, где-то как True/false. С такого рода ошибками борются при помощи задания правил перекодировки и приведения типов, поэтому они решаются относительно легко. Нас интересуют более сложные проблемы, которые не решаются элементарными способами.

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

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

Противоречивость информации

Для начала нужно решить, что именно считать противоречием. Как ни странно, это задача нетривиальная. Например, пенсионную карточку в России нужно менять в случае изменения фамилии, имени, отчества и пола. Оказывается, в том, что человек родился женщиной, а вышел на пенсию мужчиной, противоречия нет!

После того, как мы определимся с тем, что считать противоречием, и найдем такие записи, есть несколько вариантов действий:

  • При обнаружении нескольких противоречивых записей, удалять их все, или оставлять один из вариантов, выбранный по какому-либо простому правилу. Например, последнюю по времени запись. Метод тривиальный, а потому легко реализуемый. Иногда этого бывает достаточно.
  • Исправить противоречивые данные с учетом статистики. Например, можно вычислить вероятность появления каждого из противоречивых значений и выбрать наиболее вероятное. Чаще всего этот метод дает более корректные результаты.

Пропуски в данных

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

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

Аномальные значения

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

Есть метод борьбы и с данной проблемой — робастные оценки. Это методы устойчивые к сильным возмущениям. Примером может быть медианный фильтр.

Мы оцениваем имеющиеся данные, и ко всему, что выходит за допустимые границы применяем одно из следующих действий:

  • Аномальные значения удаляется;
  • Аномальные данные заменяются на ближайшие граничные значения.

Шум

Почти всегда при анализе мы сталкиваемся с шумами. Чаще всего шум не несет полезной информации, а лишь мешает четко разглядеть картину. Методов борьбы с этим явлением несколько:

  • Спектральный анализ. При помощи него мы можем отсечь высокочастотные составляющие данных, т.е. шум — это частые и незначительные колебания около основного сигнала. Причем, изменяя ширину спектра, можно выбирать какого рода шум мы хотим убрать.
  • Авторегрессионые методы. Этот довольно распространенный метод активно применяется при анализе временных рядов. Он сводится к нахождению функции, которая описывает процесс, как сигнал плюс шум. Собственно, шум после этого можно удалить и оставить основной сигнал.

Ошибки ввода данных

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

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

Резюме

Грязные данные представляют собой очень большую проблему. Фактически они могут свести на нет все усилия по наполнению хранилища данных. При этом надо иметь в виду, что речь идет не о разовой очистке, а о постоянной работе в этом направлении. Как говорится «чисто не там где не сорят, а там, где убирают». Идеальным вариантом является внедрение в ETL-процесс специальных процедур, обеспечивающих очистку данных до загрузки в хранилище.

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

Описанные выше варианты решения проблем не единственные. Есть достаточно много других методов обработки, способных помочь повысить качество данных, начиная от экспертных систем и заканчивая нейросетями. При этом нужно учитывать то, что методы очистки могут быть сильно привязаны к предметной области. Например, то, что для одних является шумом для других — очень ценная информация.

С учетом вышесказанного, ETL-процесс стоит рассматривать шире, а не только как процедуры импорта данных из приемников, минимальных трансформаций и загрузки в хранилище. Очистка данных должна стать обязательным этапом работ, т.к. ценность хранилища определяется не только, и не столько объемами данных, сколько качеством собранной информации.

66
Начать дискуссию