Archive for Март, 2010

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

Среда, Март 24th, 2010

BaseGroup Labs
Алексей Арустамов

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

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

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

Типы ошибок

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

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

  1. Противоречивость информации;
  2. Пропуски в данных;
  3. Аномальные значения;
  4. Шум;
  5. Ошибки ввода данных.

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

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

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

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

  1. При обнаружении нескольких противоречивых записей, удалять их. Метод простой, а потому легко реализуемый. Иногда этого бывает вполне достаточно. Тут важно не переусердствовать, иначе мы можем вместе с водой выплеснуть младенца.
  2. Исправить противоречивые данные. Можно вычислить вероятность появления каждого из противоречивых событий и выбрать наиболее вероятный. Это самый грамотный и корректный метод работы с противоречиями.

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

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

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

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

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

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

  1. Значение удаляется;
  2. Заменяется на ближайшее граничное значение.

Шум

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

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

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

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

Резюме

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

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

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

Пример очистки данных

Четверг, Март 18th, 2010

Игорь Артамонов
artamonov.ru

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

В общем, расскажу на примере одной недавней задачки.

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

Начинаем разбирать… Фантазия людей безгранична: вот возьмем к примеру Евросеть, как название только не напишут, могут как «ЕВРОСЕТЬ ЦЕНТР», или «ЕВРОСЕТЬ (ООО ЦЕНТР ХАБАРОВСК)». Ну с этим все более понятно, есть вхождение слова Евросеть и значит нашли магазин.

Следующий вариант это написание типа «Evroset». Сразу не найдем, тут нам надо сделать обратную транслитерацию. А есть, кстати, тот же DIXIS, для которого получается надо делать обратную операцию.

С учетом транслитерации и самих ошибок начинаются проблемы, потому люди пишут и как «Evroset», и как «Euroset», как «euroset.ru», да и в общем-то тоже самое для русского. К тому же бывают опечатки, или просто незнания правильного написания. «Техносила» может быть написана как «TECHNOSILA», или как «TEHNO SILA» (буковки C вообще нет), и т.д. А как вам «ЦИФРАГАД»(видимо не угодил он покупателю) и «ЦИФР0ГРАД» (Ноль вместо О, не иначе как кулхаксор писал), или «ЦЫФРАГРАТ» (ага, афтар жжет)?
Вывод такой: искать по вхождению не имеет смысла. Перебирать все варианты возможных ошибок, фантазий и пр. для каждого магазина просто нереально. Итого остается вариант искать по близости написания. Т.е. строка сравнивается по написанию со всеми магазинами, и берется тот, который наиболее похож. Естественно нужно еще найти какой-то минимальный порог, меньший 100% совпадения, но очень высокий, чтобы «ТЕХНОМИКС» не совпадал с «ТЕХНОМИР».

Сравнивать полную строку нет смысла, потому что чисто символьная разница между «СВЯЗНОЙ В ОКЕЕ НА МАРШАЛА ЖУКОВА», «СЕТЬ МАГАЗИНОВ САТЕЛЛИТ» и пр. далека от написания самого названия магазина. Из первой фразы надо сразу убирать адрес, но это просто, мы убираем все окончания начинающиеся на «на», «у», «ул», «в», «пр». Второй случай содержит часто употребимые слова, их можно выделить даже мельком пробежав все названия, хотя лучше с этим справился простенький скрипт. Но, так как даже после этого, во фразе все равно может остаться невыловленный нами мусор, надо сравнивать слова по отдельности, а не всю фразу.

Думаете стало находить? А фиг то там! Потому что если мы начнем таким образом сравнивать «EURO SET» и «BETA LINK», или, что еще хуже, «ЗАОБЕТА ЛИНК СПБ», то они станут непохожи, ведь из слова «BETA LINK», что «бета» что «линк» лишь наполовину похожи на «беталинк»… Поэтому надо сравнивать слова не только по одному, но и группами близлежащих, и к тому же не учитывая пробелы…

А еще надо учитывать чтобы из-за этой похожести «ДОМ.ТЕХНИКА» не совпал с «ДОМОТЕХНИКА» :) Тут, на самом деле, начинается новая проблема. И если дальше копать, то выясняем что магазинов с элементами «техно/техника/техникс», «мир», «центр», «видео» и пр. просто немеряно :( А ведь чем длиннее строка тем меньшую непохожесть вносит всего одна опечатка. Поэтому подобные элементы нужно сразу учитывать, чтобы не вносили погрешности. Но, опять же, тут надо учитывать что есть «М-ВИДЕО», который почти полностью состоит из одного из этих самых частоупотребимых элементов. Т.е. в данном случае нельзя отбрасывать эту часть, как мы делали с простым мусором (который упомянул выше, как например «СЕТЬ МАГАЗИНОВ»). Эти элементы надо сравнивать как обязательную и неотемлимую часть. И в тоже время требовать, чтобы ничего лишнего не было, т.е. «МИР ВИДЕО И АУДИО» это уже должно подпадать под мусор.

Да, и еще, насчет этих частоупотребымих элементов и мусора. Есть не только магазины, который в офлайне, но и интернет-магазины. А уж они то любят занять распространенное слово. И если на сайте telephone.ru продается достаточно товаров чтобы быть заметным, то нужно уметь его выделять. Вы думаете что его пишут как название сайта? Фиг то там! Он и сам себя именует как телефон.ру, и поэтому его пишут например как: «РОСТОВ.ТЕЛЕФОН.РУ» и так далее с учетом всех возможных опечаток. И выделяя его, нам ни в коем случае нельзя ошибиться и выделить «СОТОВЫЕ ТЕЛЕФОНЫ». Хотя в действительности для подобных сайтов не требует внесения каких-то особо уникальных вещей в алгоритм, но иметь ввиду это надо.

Ладно, это мы чуток разобрались с общеизвестными брендами, написание которых, чаще все же уникально. А ведь есть некоторые «псевдобренды», или не знаю как назвать. В общем, суть в том, что многим нашим предпринимателям лень думать над уникальным названием, и очень многие берут себе название типа «МИР», «МИР ТЕХНИКИ», «БЫТОВАЯ ТЕХНИКА», «ЭЛЕКТРОНИКА». И этих название просто куча в анкетах, и хотя клиент прекрасно понимает, что как таковой сети магазинов с таким именем нет в природе, но учитывать надо, из-за того, что слишком часто упоминается. И ведь приходится :) И, с учетом всего вышенаписанного, «БЫТОВАЯ ТЕХНИКА» должна отличатся от «МИР БЫТОВОЙ ТЕХНИКИ», от «ВИДЕО И БЫТОВАЯ ТЕХНИКА», но совпадать с «БЫТОВАЯ ТЕХНИКА 4″, «БЫТОВАЯ ТЕХНИКА МАГАЗИН №12 ЧП СОКОЛОВ С.И.», а «МИР» не должен совпасть с «АПЕЛЬСИНОВЫЙ МИР», «МИР ТЕХНИКИ», но совпадать с «МИР В ГИПЕРМАРКЕТЕ СЕМЬЯ» ну и т.д. Т.е. мусор если и может присутствовать, то только указывающий на месторасположение или тип.

Вот примерно такими вещами я сейчас и занимаюсь, если кому не лень тот может попробовать реализовать такой алгоритм, он не такой уж и сложный :) Я привел на примере магазинов цифровой техники, но примерно также делается и для многих других вещей: для брендов, названий товаров, автомобилей и пр. что имеет конечный описанный объем названий. А вот когда требуется просто выделить что-то из фразы, к примеру адрес, то тут все гораздо хитрей.
А еще подумайте как вообще можно написать адрес, или телефон, и как же определить настоящие это данные или нет, и поверьте, фантазия людей похоже действительно не имеет границ.
А ведь мало написать выделение данных, нужно чтобы алгоритм сразу отбрасывал, как мусор, данные о человеке типа «Мери Попинс, ул. Ленина 1 кв. 1, тел. 123-12-34″ :)

Что дает очистка данных

Четверг, Март 11th, 2010

Игорь Артамонов
artamonov.ru

Расскажу немного о том зачем нужна очистка данных и CDI. Сейчас не буду углубляться в CDI, MDM, это потом, и будем считать что данные должны быть чистые, это вполне логично. Вопрос в другом, вот почистили мы наши клиентские базы, положили в некую CDI систему, а на что можно рассчитывать дальше? Т.е. как мы сможем их использовать, помимо того что теперь мы знаем что у нас не мусор в базе/CRM? Какие преимущества мы получим от очистки данных?

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

Основные блоки данных

Приведу список основных элементов данных и то что можно получить на из основе.

Адрес

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

Имя

  1. Определение пола. Нужно для:
    1. Формировании исходящей корреспонденции. Может и мелочь, но меня лично раздражает эта запись в поздравительных письмах типа «уважаемый(ая)». Ты или определись с моим полом или не делай вид что письмо совсем уж персональное.
    2. Сегментация по полу при исследованиях
  2. Уточнение семейных связей (используя совместно со значениями адреса и возраста)

Телефон

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

Прочие поля

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

Связи между клиентами

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

  • Анализ нового клиента. Т.е. известное «скажи мне кто твой друг и я скажу кто ты» в действии.
    • К примеру у нас появляется новый клиент, молодой человек или девушка, по которому мы определили что он родственник нашего существующего vip клиента, и даже то что это сын или дочь. В таком случае нам лучше пометить и этого клиента как VIP, или ввести тип вроде VIP-related. Вполне возможно что если ему не понравится сервис, он может отговорит и своего отца пользоваться нашими услугами. Да, дети иногда имеют хорошее влияние на своих родителей, да еще и с учетом юношеского максимализма. В общем лучше подстраховаться сразу.
    • С другой стороны таким образом можно вычислить родственника (или соседа/друга) нежелательного клиента, или мошенника.
    • Ну конечно дополнительные критерии для скоринга.
  • Следующий вариант это коллеги. Если в одной организации есть несколько лояльных клиентов, то такую организацию будет гораздо проще поставить на какое либо корпоративное обслуживание. Опять же будет возможность улучшить лояльность компании, которой делается соответствующее предложение, предложив перед этим какой то бонус найденным (но ничего не подозревающим) «инсайдерам». Но это уже в сторону вирусного маркетинга и пр., тут главное что нашли точку куда можно приложить силу.

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

Да, и еще, тут еще интересный момент есть: для обнаружения связей между клиентами можно воспользоваться базами «Одноклассников» и «В Контакте». Если у нас не трудно достать базы не только всех гос. структур, но и вполне серьезных коммерческих организаций, банков и операторов сотовой связи, то база «Одноклассников» вообще не проблема, рано или поздно базы социальных сетей будут в продаже. Кстати, в случае БД социальных сетей типа «Одноклассников» все даже проще, так как доступ ко всем связям есть извне, через web, не надо прямого доступа к серверам. Я более чем уверен что уже есть софт который вытаскивает всю нужную информацию с этих сайтов и сохраняет ее в нужном виде. В конце концов вполне реально самостоятельно сделать парсинг подобных сайтов и последующее насыщение профайла, по мере надобности, так даже правильнее будет. Причем это будет вполне законно, в отличии от краденных баз.

Заявки рассмотрят быстрее

Вторник, Март 2nd, 2010

Источник osp.ru

«Промсвязьбанк» завершил внедрение системы электронного документооборота на базе EMC Documentum 6.0 для автоматизации процесса принятия решений по кредитным заявкам. Разработанная ИТ-специалистами банка и экспертами «Техносерв Консалтинг» система позволяет хранить поданные документы в электронном виде, проверять их на соответствие всем требованиям, а также отслеживать жизненный цикл каждой заявки и обращаться к результатам ее обработки впоследствии. В настоящее время в систему из любой точки продаж банка поступают заявки на получение кредита или кредитной карты для последующей централизованной обработки. При этом автоматически проводится проверка полномочий сотрудников, работающих с документами. Сложность проекта заключалась в том, что в рамках проекта система документооборота была интегрирована с большим количеством других программных комплексов, таких как корпоративное хранилище SAP BW, скоринговая система и другие приложения.

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

Источник: ОАО «Промсвязьбанк»

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

Работа над проектом велась ИТ-специалистами Промсвязьбанка совместно с «Техносерв Консалтинг», дочерней компанией крупнейшего российского системного интегратора «Терхносерв».

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

В дальнейших планах Промсвязьбанка – внедрение продуктов на базе EMC Documentum в таких направлениях, как принятие решения по заявкам клиентов малого и среднего бизнеса, а также организация архива клиентских дел.