惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
罗磊的独立博客
H
Help Net Security
I
Intezer
G
Google Developers Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
Troy Hunt's Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
U
Unit 42
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News and Events Feed by Topic
J
Java Code Geeks
S
Security Affairs
T
The Blog of Author Tim Ferriss
Recent Commits to openclaw:main
Recent Commits to openclaw:main
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
D
Docker
The GitHub Blog
The GitHub Blog
F
Full Disclosure
N
News and Events Feed by Topic
Webroot Blog
Webroot Blog
S
Security @ Cisco Blogs
腾讯CDC
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
Blog — PlanetScale
Blog — PlanetScale
T
Threatpost
D
DataBreaches.Net
Recent Announcements
Recent Announcements
博客园 - 三生石上(FineUI控件)
MongoDB | Blog
MongoDB | Blog
博客园 - 【当耐特】
L
LINUX DO - 最新话题
Google Online Security Blog
Google Online Security Blog
S
Schneier on Security
S
Securelist
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Help Net Security
Help Net Security
P
Proofpoint News Feed
Project Zero
Project Zero
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享
Y
Y Combinator Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 叶小钗

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Базовые нейросетевые модели для кредитного скоринга физических лиц
Леонид Кулыгин · 2026-06-17 · via Все публикации подряд на Хабре

Базовые нейросетевые модели для кредитного скоринга физических лиц

Средний

8 мин

17

Всем привет! Мы команда прикладных исследований и разработки моделей глубокого обучения Альфа-банка. В этой статье мы хотели бы рассказать о наших самых актуальных разработках в области нейросетевых подходов к решению задачи кредитного скоринга физических лиц. Ранее мы уже писали на эту тему:

Последняя статья предыдущего цикла датирована 2023 годом. За это время мы смогли значительно продвинуться в исследовании способов решения данной задачи.

Постановка задачи

Коротко напомним про постановку проблемы. Суть кредитного скоринга заключается в оценке рисков банка при выдаче кредита заемщику. Для этого вводится понятие вероятности дефолта (далее — PD). Классическое определение дефолта — наличие просроченной задолженности в течение более 90 дней подряд на горизонте года от даты скоринга. Пример случая дефолта приведен на картинке ниже.

Для каждого клиента модель рассчитывает скоринговый балл (далее — скор), на основе которого кредитный конвейер делит клиентов на надежных и ненадежных заемщиков.

Наша PD модель является модульной и состоит из двух больших компонент: градиентного бустинга на табличных данных и нейросетевого скора, которые затем смешиваются с помощью логистической регрессии. Мы остановимся на разборе архитектуры нейросетевого скора. 

Он состоит их 5 основных компонент:

  1. Модуль на карточных транзакциях (далее КТ).

  2. Модуль на транзакциях расчетного счёта (далее ТРС).

  3. Модуль на данных кредитной истории (далее БКИ).

  4. Графовая нейронная сеть на данных социальных связей клиентов.

  5. Common модуль, объединяющий результаты предыдущих 4х компонент. 

В этой статье мы разберем первые три компоненты, а компонентам 4 и 5 посвятим отдельные публикации.

Краткое напоминание

Напомним наш подход к решению описанной задачи. 

В банке накоплено много источников данных, имеющих природу последовательностей. Такие данные являются отличными кандидатами на тестирование нейросетевого подхода для моделирования целевой переменной с их помощью. Основными доменами, подходящими под задачу кредитного скоринга, являются карточные транзакции, транзакции расчётного счёта и кредитная история.

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

Мы решили работать с этими данными методами, унаследованными из задач обработки естественного языка. Основные этапы их обработки заключаются в следующем:

  • Приводим вещественные признаки к категориальным, заменяя значения признака на номер квантиля, в который это значение попадает.

  • Для каждого категориального признака получаем векторное представление — эмбеддинг.

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

  • Дальше последовательность общих эмбеддингов идёт на вход нейронной сети.

  • На выходе получаем некоторое закодированное векторное представление домена для данного клиента.

Более подробно этот подход и использовавшиеся ранее архитектуры описаны в статьях, ссылки на которые приведены в начале.

Архитектура решения

Чтобы не превращать этот текст в пересказ уже проделанной работы, оставим старые архитектуры за рамками статьи. Вместо этого сосредоточимся на изменениях, которые действительно повлияли на качество, а также честно разберём, какие идеи не взлетели.

Спойлер: таких оказалось больше, чем хотелось бы. Поехали!

Начнём с, казалось бы, очевидного, но на практике крайне важного наблюдения. По мере роста обучающей выборки качество нейросетевого скора стабильно улучшается. За время работы над моделью нам удалось расширить датасет, добавив данные за последние два года. В итоге распределение обучающей выборки теперь покрывает период с 2017 по 2024 год.

Это позволило заметно улучшить качество моделей, в том числе за счёт лучшего покрытия различных клиентских сегментов.

Впрочем, подход «смешать всё, что есть», не работает. Мы аккуратно чистили данные, анализировали распределения по датам и сегментам, сопоставляли их с target rate и только после этого формировали финальную выборку. Уже на этом этапе, за счёт более качественных данных и подбора гиперпараметров, удалось получить ощутимый прирост в сравнении с моделями прошлого поколения, что видно по графику ежемесячного аплифта к метрике Джини по трем базовым моделям.

На этом месте можно было бы остановиться и сказать, что основная работа сделана: данные почистили, гиперпараметры подобрали, качество моделей поднялось — живём.

Но в этот момент в команде появились новые сотрудники с горящими глазами и свежими идеями из последних статей. Им очень хотелось проверить, можно ли «переизобрести» нашу базовую архитектуру…  

Бизнес, к счастью, поддержал этот настрой — и мы запустили серию довольно смелых архитектурных экспериментов над базовыми моделями ТРС, КТ и БКИ.  

Напомним, что в основе нашего подхода лежит обработка event-sequence данных с помощью последовательных архитектур (RNN или encoder-based Transformer), которые выступают в роли feature extractor’ов. Каждая такая модель независимо извлекает представление клиента в своём домене и обучается напрямую на задачу PD — это классический supervised-подход. 

Однако в какой-то момент мы начали переосмысливать саму роль этих моделей. Вместо того, чтобы рассматривать их исключительно как независимые классификаторы, мы стали смотреть на них как на инструмент построения качественного векторного пространства клиентов, которое затем используется финальным агрегатором.

Прежде чем переходить к архитектурным изменениям, кратко опишем используемые последовательности.

В зависимости от домена данных используемые нами максимальные длины последовательностей существенно различаются:

  • БКИ: до 50 событий.

  • ТРС: до 550 транзакций.

  • КТ: до 750 транзакций.

Во всех случаях используется окно наблюдений длиной в один год. Мы также пробовали расширять его (например, для БКИ до трёх лет), однако это не дало ожидаемого прироста качества. При этом, после оптимизации обучения и инференса, мы рассматриваем возможность вернуться к этой идее и протестировать более длинные горизонты.

Отдельно отметим, что мы не используем явное кодирование временных промежутков (time gaps) — задача формулируется как event-sequence, где порядок событий уже несёт основной сигнал. 

Смена функции потерь

Одним из самых сильных улучшений стала смена функции потерь. Вместо стандартной бинарной кросс-энтропии мы перешли к оптимизации ROC-AUC через pairwise log loss.

Интуитивно идея следующая: модель обучается не просто предсказывать вероятность дефолта, а правильно упорядочивать клиентов — так, чтобы дефолтные клиенты получали более высокий скор, чем недефолтные.

На практике это реализуется следующим образом:

  1. Внутри батча выделяются положительные и отрицательные объекты.

  2. Строятся попарные разности логитов.

  3. Применяется логистическая функция потерь к этим разностям.

Такой подход позволяет напрямую оптимизировать ранжирование и лучше использовать данные, особенно в условиях дисбаланса классов. Этот переход дал один из самых сильных приростов качества за всё время экспериментов и стал нашим текущим бейзлайном. 

Hard negative mining

Очевидный следующий шаг по улучшению качества ранжирования это использовать hard negative mining.

Коротко напомним суть подхода: при обучении на pairwise log loss модель получает наибольший сигнал от «сложных» пар — тех случаев, где модель ошибается или не уверена (например, когда недефолтный клиент получает скор выше дефолтного). 

Предвкушая высокие аплифты, мы столкнулись с сильным ухудшением качества… 

Но потом мы выдвинули гипотезу, что это связано с особенностями пайплайна: для экономии памяти мы разбиваем датасет на чанки, внутри которых формируются батчи. Это снижает потребление памяти примерно в два раза, но ухудшает качество перемешивания данных. В результате «сложные» пары просто не попадают в один батч, и эффект hard mining существенно снижается.

Трансформеры

После успешного внедрения ранжирования мы перешли к попытке заменить базовую RNN-архитектуру на трансформер.

В качестве базовой конфигурации использовался encoder-only трансформер:

  • размер скрытого пространства — 256;

  • количество голов внимания — 8;

  • feed-forward слой — 1024,

  • глубина — 3 блока.

На вход подавалась последовательность эмбеддингов, дополненная CLS-токеном и позиционным кодированием. Для каждого источника архитектуры немного менялись (но не сильно). В общем виде это выглядит так:

 Входе экспериментов мы исследовали различные компоненты:

  • Добавление CLS-токена (дало базовый прирост).

  • Подбор глубины (оптимум — 3 блока).

  • Функции активации (SiLU, GELU, SwiGLU).

  • Нормализации (лучший результат показал RMSNorm против LayerNorm).

Отдельно отметим, что SiLU и SwiGLU дали наиболее стабильный прирост, что согласуется с наблюдениями из современных архитектур.

Эксперименты с более сложными механизмами внимания

Мы также экспериментировали с более сложными механизмами внимания, включая gated attention из архитектуры Qwen.

В чистом виде этот подход не дал существенного прироста, однако оказался полезным как механизм пулинга. В комбинации с CLS-токеном это позволило получить более информативное представление последовательности.  

На графике представлены аплифты разных стратегий агрегирования векторного пространства после энкодера против бейзлайна только на CLS‑токене, где лучший результат — комбинация между Gated attention с CLS.

Обучение проводилось с использованием уже с комбинированной функции потерь, где суммируется бинарная кросс-энтропия и pairwise log loss, так как что-то одно не давало сильных результатов. 

Подбор весов между ними осуществлялся экспериментально.

Мы также придерживались современных лучших практик обучения трансформеров, включая аккуратный подбор weight decay в AdamW и использование продвинутых техник регуляризации вместе с грамотным batch_size.

Прунинг весов

После стабилизации архитектуры мы попробовали ещё одно направление — прунинг весов.

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

Мы исследовали: 

  • unstructured pruning (обнуление малых весов),

  • pruning attention-head’ов,

  • частичный pruning feed-forward слоёв.

После этого модель дообучалась.

На практике мы увидели, что:

  • умеренный прунинг почти не ухудшает качество,

  • иногда даёт небольшой прирост (за счёт регуляризации),

  • агрессивный прунинг приводит к деградации.

При этом выигрыш по скорости оказался ограниченным:

Pruning family

Degree

OOT uplift

Unstructured

10 %

+0.08%

Unstructured

20 %

+0.27%

Unstructured

30 %

-0.18%

Unstructured

50 %

-1.74%

Attention heads

10%

+0.03%

Attention heads

30%

-0.41%

Attention heads

50%

-3.08%

FFN

10 %

+0.11%

FFN

20 %

-0.36%

FFN

40 %

-2.64%

Combined

15%

-0.22%

Combined

30%

-9.84%

Перейдем к кульминации

Несмотря на все архитектурные улучшения, трансформер не смог обойти идею ранжирующих RNN Feature extractor’ов. Финальные значения аплифта по Gini для наших моделей:

Сравниваем RNN с pairwise log loss и наши лучшие экспериментальные наработки с Transformer против бейзлайна RNN с расширенной выборкой.

Сравниваем RNN с pairwise log loss и наши лучшие экспериментальные наработки с Transformer против бейзлайна RNN с расширенной выборкой.

Анализируя результаты мы пришли к выводу, что ключевое преимущество RNN — способность последовательно накапливать информацию от события к событию. В отличие от трансформеров, которые обрабатывают последовательность более «плоско», RNN естественным образом формируют историческое состояние.

Эта идея перекликается с современными исследованиями, например History Tokenize Transformer.

Однако на текущий момент лучшим решением остаётся:

  • RNN как feature extractor.

  • Обучение через ранжирование.

  • Независимое обучение по доменам.

Именно эта конфигурация даёт наиболее информативные представления для финального агрегатора. Однако мы очень верим и любим технологию трансформеров и продолжим исследовать способы ее применения в нашей задаче. Да, мы пока что не изобрели лампочку, но зато мы теперь знаем 1000 способов как её сделать невозможно!).

Также указанные подходы можно (и нужно!) распространять на прочие домены данных, имеющие природу последовательностей, например, на данные чеков, данные логов действий в мобильном приложении и прочие. О дальнейших результатах наших экспериментов мы обязательно сообщим в следующих публикациях.