AI ищет залоговое имущество
Что делать, если необходимо сопоставить данные из одной базы данных с любой другой, но четкого уникального ID нет. Как нам поможет в этом искусственный интеллект? Об этом в нашей статье.
Сопоставить данные и проверить правильность заполнения в разных базах данных (далее — БД) несложно, когда есть четкое соответствие данных в одной БД и понимание того, как эти данные связаны с другими БД — по связям определяем, что и с чем нужно сравнить. И, в случае наличия расхождений, легко их идентифицируем.
Рассмотрим на примере залогового имущества:
В одной БД залог указан как «Нежилое помещение с кадастровым номером 56:7889:788, площадью 1023,5 кв.м. расположенное по адресу улица Малых эксцентриситетов 12», во второй, соответственно, «Помещение площадью 1023,5 кв.м.» (думаю, это удалить: или еще лучше — «Оборудование насосное фирмы Nasos марка Nasos-02 номер 322223322»), а в третьей, просто краткое наименование — «Оборудование».
Конечно, на помощь могут прийти данные по стоимости — цифры все-таки сравнивать легко и просто, но и здесь может быть не все так просто. Часто бывает так, что в одной БД предметы залога занесены по отдельным единицам, а в другой могут быть сгруппированы.
И здесь нам на помощь приходит python с возможностью NLP обработки текста и пакет sclearn, который позволит нам выявлять сходства.
Для начала, нормализация текста описания залога — обработка проводится функцией text_normalisation. После предобработки приводим текст к виду, который модель может обработать, то есть переводим текст в векторы признаков.
Итоговый датафрейм df_bag_of_words по каждой из разных БД выглядит следующим образом:
Итого, мы имеем вектор описаний залога из одной БД и вектор описаний из другой БД. Казалось бы, все отлично — все текстовые данные векторизованы, значит можно решительно обучать модель на размеченных данных… Но! У нас залог по каждому клиенту представлен по-разному, то есть нам нужно выявлять сходство по данным каждого клиента, другими словами, мы работаем не по всей выборке, а по ее части. Именно поэтому в качестве меры схожести мы выбрали косинусную меру. Модель, к примеру, на базе опорных векторов просто получилась бы недообученной на таких небольших выборках.
Выбрать становится очень просто – это можно сделать на основании максимального сходства векторов описаний по каждому клиенту df_bag_of_words_1, df_bag_of_words_2
Добавляем к исходному датафрейму df[‘Наименование’], с описанием залога, данные по полученным мерам схожести:
После формирования итогового датафрейма проводим сортировку по столбцу меры схожести:
Таким образом мы получаем по каждому описанию меру сходства с каждым описанием из другой БД примерно вот такого вида:
Из каждой таблицы выбираем строку с максимальной мерой схожести — и собираем эти строки в итоговую таблицу. На выходе мы получаем по каждому клиенту сводную таблицу с сопоставлением данных и мерой схожести.
С помощью данного проекта мы смогли сопоставить информацию по залогам из разных БД и произвести автоматизированный поиск расхождений, при этом в большей части мы это сделали используя прошлый опыт и ранее написанный код.