{"id":14268,"url":"\/distributions\/14268\/click?bit=1&hash=1e3309842e8b07895e75261917827295839cd5d4d57d48f0ca524f3f535a7946","title":"\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"f71e1caf-7964-5525-98be-104bb436cb54"}

AI ищет залоговое имущество

Что делать, если необходимо сопоставить данные из одной базы данных с любой другой, но четкого уникального ID нет. Как нам поможет в этом искусственный интеллект? Об этом в нашей статье.

Сопоставить данные и проверить правильность заполнения в разных базах данных (далее — БД) несложно, когда есть четкое соответствие данных в одной БД и понимание того, как эти данные связаны с другими БД — по связям определяем, что и с чем нужно сравнить. И, в случае наличия расхождений, легко их идентифицируем.

Рассмотрим на примере залогового имущества:

В одной БД залог указан как «Нежилое помещение с кадастровым номером 56:7889:788, площадью 1023,5 кв.м. расположенное по адресу улица Малых эксцентриситетов 12», во второй, соответственно, «Помещение площадью 1023,5 кв.м.» (думаю, это удалить: или еще лучше — «Оборудование насосное фирмы Nasos марка Nasos-02 номер 322223322»), а в третьей, просто краткое наименование — «Оборудование».

Конечно, на помощь могут прийти данные по стоимости — цифры все-таки сравнивать легко и просто, но и здесь может быть не все так просто. Часто бывает так, что в одной БД предметы залога занесены по отдельным единицам, а в другой могут быть сгруппированы.

И здесь нам на помощь приходит python с возможностью NLP обработки текста и пакет sclearn, который позволит нам выявлять сходства.

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

import pandas as pd import nltk import numpy as np import re from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics import pairwise_distances # для проведения косинусного сходства cv = CountVectorizer() X = cv.fit_transform(text_normalisation(df['Наименование'])).toarray() features = cv.get_feature_names() df_bag_of_words = pd.DataFrame(X, columns = features)

Итоговый датафрейм df_bag_of_words по каждой из разных БД выглядит следующим образом:

Итого, мы имеем вектор описаний залога из одной БД и вектор описаний из другой БД. Казалось бы, все отлично — все текстовые данные векторизованы, значит можно решительно обучать модель на размеченных данных… Но! У нас залог по каждому клиенту представлен по-разному, то есть нам нужно выявлять сходство по данным каждого клиента, другими словами, мы работаем не по всей выборке, а по ее части. Именно поэтому в качестве меры схожести мы выбрали косинусную меру. Модель, к примеру, на базе опорных векторов просто получилась бы недообученной на таких небольших выборках.

Выбрать становится очень просто – это можно сделать на основании максимального сходства векторов описаний по каждому клиенту df_bag_of_words_1, df_bag_of_words_2

cosine_value = 1 - pairwise_distances(df_bag_of_words_1, df_bag_of_words_2, metric='cosine')

Добавляем к исходному датафрейму df[‘Наименование’], с описанием залога, данные по полученным мерам схожести:

df['Мера схожести'] = cosine_value df_simi = pd.DataFrame(df, columns=['Клиент 1','Мера схожести'])

После формирования итогового датафрейма проводим сортировку по столбцу меры схожести:

df_simi.sort_values(by='Мера схожести', ascending=False)

Таким образом мы получаем по каждому описанию меру сходства с каждым описанием из другой БД примерно вот такого вида:

Из каждой таблицы выбираем строку с максимальной мерой схожести — и собираем эти строки в итоговую таблицу. На выходе мы получаем по каждому клиенту сводную таблицу с сопоставлением данных и мерой схожести.

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

0
Комментарии
-3 комментариев
Раскрывать всегда