Искусственный интеллект смотрит жалобы

от автора

Любая финансовая организация — это живой организм и процессы в нем – несовершенны. Несовершенство процессов порождает недовольство от клиентов, которое может трансформироваться даже в жалобы. В данной статье мы расскажем о своем вкладе в процесс автоматизации работы, посредством реализации небольшого Machine Learning-проекта.

Любую сложную задачу можно попробовать решить простыми методами, и решение задачи Machine Learning не является исключением.

Обратная связь – это самая ценная информация, поэтому следует максимально подробно изучить каждый её бит. Анализируя жалобы от клиентов, мы объективно видим, в каких бизнес-процессах возникают проблемы. Поскольку процессы часто взаимосвязаны, их возможно сгруппировать и рассматривать как группу. Соответственно, мы приходим к стандартной задаче Machine Learning (ML) – «многоклассовая классификация». В результате данного анализа решается задача — сбор сводной аналитики по организации.

Задача классификации – это задача, в которой имеется множество объектов, разделенных определенным образом на классы. В случае многоклассовой классификации число классов должно быть более 2 и может достигать даже многих тысяч.

Данные по жалобам и ответам на них хранятся на сервере, процесс выгрузки и предобработки проводится стандартно через запрос к базе, на выходе мы получаем датафрейм с данными, с которыми мы будем работать. Жалоба и ответ на нее – это достаточно объемные документы. Например, ответ на жалобу может достигать нескольких сотен или даже тысячи слов. Обрабатывать такой текст напрямую очень затратно (вычислительно), поэтому и необходима предобработка текста.

def review_to_wordlist(review):        		review_text = re.sub('[^а-яА-ЯёЁ]',' ', review)        		words = review_text.strip().lower().split()        		words = [w for w in words if not w in stop_words]         		words = [morph.parse(w)[0].normal_form for w in words]        		new_stop_words = find_names(words)        		words = [w for w in words if not w in new_stop_words]        		return words

Точность по модели существенно зависит от уникальности текста, поэтому из текста необходимо убрать слова, не несущие особого смысла – «стоп-слова». Обычно в состав слов входят предлоги, союзы и другие незначимые части речи. Также мы дополнили словарь стоп-слов именами и отчествами.

def find_names(words, prob_thresh = 0.4):     words = [w for w in words if 'str' in str(type(w))]     add_stop_words = [w for w in words for p in morph.parse(w) if 'Name' in p.tag and     p.score >= prob_thresh]     stop_words.update(add_stop_words)     return stop_words

До момента реализации проекта классификация производилась вручную, следовательно, у нас есть данные, размеченные экспертами. А это классическая ML задача обучения с учителем. Предобработанный текст приводим к виду, который модель может обработать. Для этого переводим ответы на жалобы в векторы признаков (используемая в коде независимая переменная – features, зависимая – labels).

tfidf = TfidfVectorizer(sublinear_tf=True, min_df=5, norm='l2', encoding='utf8',       ngram_range=(1, 2), stop_words=stop_words) features = tfidf.fit_transform(df_temp['Consumer_complaint_narrative']) labels = df_temp['Num_bp']

Для классификации выбрана модель Linear Support Vector Classification. Это было сделано по следующим причинам:
• высокая эффективность при работе с измерениями большой размерности;
• устойчивая работа в случае превышения размерности над количеством сэмплов.
Данный проект подготовлен для внедрения в пром. Ежедневно модель будет проводить классификацию данных, введенных в течении рабочего дня. На начальном этапе предполагается дополнительно ручная верификация работы модели экспертом. Раз в месяц модель будет переобучаться. Внедрение данного проекта позволило нам еще на один шаг приблизиться к будущему!

ссылка на оригинал статьи https://habr.com/ru/post/504798/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *