/hacks-ai-BBBB

Решение кейса хакатона от ЦБ: задача предсказания кредитного рейтинга для пресс-релиза КРА

Primary LanguageJupyter Notebook

hacks-ai-BBBB


Модель для определения кредитного рейтинга компании. Она упрощает проверку выпускаемых КРА пресс-релизов о назначении кредитного рейтинга. Продукт обладает графическим интерфейсом, позволяющим проверять пользовательский пресс-релиз. Модель определяет наиболее вероятные кредитные рейтинги согласно пресс-релизу и выделяет ключевые конструкции, повлиявшие на вычисление рейтинга.

Уникальность решения состоит в том, что модель учитывает отношения между значениями рейтингов, что дает возможность минимизировать ошибку до максимум одного класса. Модель основана на классических простых алгоритмах, что обеспечивает ей интерпретируемость результатов (одно из основных требований).

  • Screencast веб-сервиса (если веб-сервис не работает): here
  • Ссылка на веб-сервис: here

Технический ход решения:

  • предложенную задачу классификации кредитного рейтинга интерпретировали как задачу регрессии, чтобы ввести порядковые отношения между классами

    • разработали шкалу соотвествия числовых значений для классов
    • подобрали функцию scaling-а значений расстояний между классами для их интерпретации как коэффициента "уверенности" (вероятности) в выборе класса

  • сделали аугментацию датасета через перевод с одного языка на другой и возвращение к исходному

  • предобработали текстовые данные

    • привели лемматизацию и удалили именнованные сущности через natasha
    • распарсили и избавились от email, номеров телефонов и пунктуации
    • векторизовали TF-IDF по 3-gramms для учета моделью контекста

  • обучили линейную регрессию

    • для prediction вернули классы из числового диапазона с некоторой погрешностью

  • вернули словосочетания, влияющие на выбор того или иного класса

    • 1 интерпретируемый способ: сравнение TF-IDF значений векторов и соотвествующих весов линейной модели по модулю, вытаскивание фичей из сырых текстов через сравнение подстрок после стэмминга
    • 2 экспериментальный способ: использовали rubert-tiny2-russian-sentiment для сентимент анализа и находили эти же фразы опять в тексте через sbert_synonymy, т.е. смотря на косинусное расстояние новых эмбеддингов

  • обернули все в web-интерфейс на flask с возможностью ознакомиться с постановкой задачи и попробовать определить ближайшие классы кредитного рейтинга, а также двумя способами выделить ключевые формулировки, повлиявшие на решение

В папке models хранится модель векторизации текстов и модель регрессии, в папке datasets - предобработанные данные, остальные тетради описывают эксперименты/код для тестов и обучения/код для web-приложения. Наилучший выбитый score на аугментированных данных: f1_micro = 0.88 для общих категорий рейтинга и для регрессии MAE 0.026, RMSE 0.039. Тем не менее модель возможно сильно переобучилась на аугментированных данных, из-за чего на финальном тесте хакатона провалилась