При создании хранилищ данных все еще недостаточно внимания уделяется очистке поступающей в него информации. Видимо, считается, что чем больше размер хранилища, тем лучше. Это верный способ превратить хранилище данных в свалку мусора.
Данные очищать необходимо! Ведь информация разнородна и почти всегда собирается из множества источников. Именно наличие различных точек сбора данных делает процесс очистки таким сложным и актуальным.
Ошибки допускаются всегда, и полностью избавится от них не получится. Возможно, иногда есть смысл смириться с ними, а не тратить ресурсы на исправления. Но, в общем случае, нужно стремиться любыми способами снизить количество ошибок до приемлемого уровня. Применяемые для анализа методы и без того грешат неточностями, так зачем усугублять ситуацию?
К тому же нужно учесть психологический аспект проблемы. Если аналитик или лицо, принимающее решение, не будет уверено в цифрах, которые получает из хранилища данных, то он станет полагаться на сведения, полученные из других источников. Это серьезно снижает ценность хранилища.
Мы не будем рассматривать простые ошибки, такие как несоответствие типов, различия в форматах ввода и кодировках. Т.е. случаи, когда информация поступает из нескольких источников, где для обозначения одного и того же факта приняты различные соглашения.
Характерный пример такой ошибки — обозначение пола человека. Где-то он обозначается как М/Ж, где-то как 1/0, где-то как True/False. С такого рода ошибками борются при помощи задания правил перекодировки и приведения типов, поэтому они решаются относительно легко. Нас интересуют более сложные проблемы, которые не решаются элементарными способами.
Типов сложных ошибок довольно много. Помимо универсальных, существуют ошибки, характерные только для какой-то конкретной предметной области или задачи. Но давайте рассмотрим такие, которые не зависят от задачи:
Для решения каждой из этих проблем есть отработанные методы. Конечно, ошибки можно править и вручную, но при больших объемах данных это становится проблематично. Поэтому рассмотрим варианты решения этих задач в автоматическом режиме при минимальном участии человека.
Для начала нужно решить, что именно считать противоречием. Как ни странно, это задача нетривиальная. Например, пенсионную карточку в России нужно менять в случае изменения фамилии, имени, отчества и пола. Оказывается, в том, что человек родился женщиной, а вышел на пенсию мужчиной, противоречия нет!
После того, как мы определимся с тем, что считать противоречием, и найдем такие записи, есть несколько вариантов действий:
Эта проблема — бич для многих хранилищ данных. Большинство методов прогнозирования исходят из предположения, что данные поступают равномерным постоянным потоком. На практике такое встречается редко. Поэтому одна из самых востребованных областей применения хранилищ данных — прогнозирование — оказывается реализованной некачественно или со значительными ограничениями. Для борьбы с этим явлением можно воспользоваться следующими методами:
Довольно часто происходят события или попадаются данные, которые сильно выбиваются из общей картины. Например, цена на продукт в 10 раз выше средней. Такие значения лучше всего откорректировать. Дело в том, что алгоритмы анализа ничего не знают о природе процессов. Поэтому любая аномалия будет восприниматься как совершенно нормальное значение. Из-за этого сильно исказиться модель, т.к. случайный провал или успех будет считаться закономерностью.
Есть метод борьбы и с данной проблемой — робастные оценки. Это методы устойчивые к сильным возмущениям. Примером может быть медианный фильтр.
Мы оцениваем имеющиеся данные, и ко всему, что выходит за допустимые границы применяем одно из следующих действий:
Почти всегда при анализе мы сталкиваемся с шумами. Чаще всего шум не несет полезной информации, а лишь мешает четко разглядеть картину. Методов борьбы с этим явлением несколько:
Это тема для отдельного разговора, т.к. количество типов такого рода ошибок слишком велико, например, опечатки, сознательное искажение данных, несоответствие форматов, и это еще не считая ошибок, связанных с особенностями работы приложения по вводу данных.
Для борьбы с большинством из них есть отработанные методы. Некоторые вещи очевидны, например, перед внесением данных в хранилище можно провести проверку форматов. Некоторые — более изощренные. Например, можно исправлять опечатки на основе различного рода тезаурусов. Но, в любом случае, очищать нужно и от такого рода ошибок.
Грязные данные представляют собой очень большую проблему. Фактически они могут свести на нет все усилия по наполнению хранилища данных. При этом надо иметь в виду, что речь идет не о разовой очистке, а о постоянной работе в этом направлении. Как говорится «чисто не там где не сорят, а там, где убирают». Идеальным вариантом является внедрение в ETL-процесс специальных процедур, обеспечивающих очистку данных до загрузки в хранилище.
Данные, измененные в процессе очистки, необходимо маркировать, чтобы учесть этот аспект при последующем анализе. Иначе есть риск полагаться на них, как на реальную информацию, что может привести к неверным выводам.
Описанные выше варианты решения проблем не единственные. Есть достаточно много других методов обработки, способных помочь повысить качество данных, начиная от экспертных систем и заканчивая нейросетями. При этом нужно учитывать то, что методы очистки могут быть сильно привязаны к предметной области. Например, то, что для одних является шумом для других — очень ценная информация.
С учетом вышесказанного, ETL-процесс стоит рассматривать шире, а не только как процедуры импорта данных из приемников, минимальных трансформаций и загрузки в хранилище. Очистка данных должна стать обязательным этапом работ, т.к. ценность хранилища определяется не только, и не столько объемами данных, сколько качеством собранной информации.
Другие материалы по теме:
Как найти и объединить дубли клиентов