vc.ru ищет PHP Middle разработчика
Machine learning
NTA
647

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)

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

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

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

Лайфхаки IT, проверенные AI-решения для стандартных задач
{ "author_name": "NTA", "author_type": "editor", "tags": [], "comments": 0, "likes": 0, "favorites": 7, "is_advertisement": false, "subsite_label": "ml", "id": 138164, "is_wide": true, "is_ugc": false, "date": "Fri, 03 Jul 2020 17:30:54 +0300", "is_special": false }
Объявление на vc.ru
0
Комментариев нет
Популярные
По порядку

Комментарии