{"id":14262,"url":"\/distributions\/14262\/click?bit=1&hash=8ff33b918bfe3f5206b0198c93dd25bdafcdc76b2eaa61d9664863bd76247e56","title":"\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u0435 \u041c\u043e\u0441\u043a\u0432\u0435 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0434\u043e 1,5 \u043c\u043b\u043d \u0440\u0443\u0431\u043b\u0435\u0439","buttonText":"\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435","imageUuid":"726c984a-5b07-5c75-81f7-6664571134e6"}

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 комментариев
Раскрывать всегда