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

推荐订阅源

J
Java Code Geeks
TaoSecurity Blog
TaoSecurity Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
L
LangChain Blog
云风的 BLOG
云风的 BLOG
B
Blog
博客园 - Franky
Microsoft Security Blog
Microsoft Security Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 聂微东
月光博客
月光博客
The Cloudflare Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threat Research - Cisco Blogs
aimingoo的专栏
aimingoo的专栏
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tenable Blog
GbyAI
GbyAI
Cisco Talos Blog
Cisco Talos Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
SecWiki News
SecWiki News
F
Full Disclosure
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
Hacker News: Ask HN
Hacker News: Ask HN
宝玉的分享
宝玉的分享
博客园_首页
H
Heimdal Security Blog
G
GRAHAM CLULEY
B
Blog RSS Feed
大猫的无限游戏
大猫的无限游戏
有赞技术团队
有赞技术团队
S
Secure Thoughts
Recorded Future
Recorded Future
T
Tailwind CSS Blog
F
Fortinet All Blogs
Recent Announcements
Recent Announcements
Recent Commits to openclaw:main
Recent Commits to openclaw:main
腾讯CDC
AWS News Blog
AWS News Blog
Latest news
Latest news
C
CERT Recently Published Vulnerability Notes
A
About on SuperTechFans
美团技术团队
爱范儿
爱范儿
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
L
Lohrmann on Cybersecurity
NISL@THU
NISL@THU

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

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет 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 миллионов точек без потерь
Как научить языковую модель читать транзакции: превращаем историю платежей в базу знаний
valov_d_a · 2026-06-18 · via Все публикации подряд на Хабре

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

Средний

8 мин

170

Меня зовут Дмитрий Валов, я тимлид команды «Инструменты для банка (агенты)» в Sber AI Lab — Центре практического искусственного интеллекта Сбера.

Большие языковые модели (LLM) научились отвечать на вопросы, писать код и анализировать документы. Логично спросить: «А может ли одна универсальная модель заменить зоопарк специализированных систем, которыми банк описывает своих клиентов?» Сегодня под каждую задачу — отток, кредитный риск, NBA — заводится отдельный пайплайн: свой набор фичей поверх истории транзакций, своё обучение, свои перетренировки при каждом изменении. Данные об одном и том же клиенте растаскиваются по разным системам и плохо переиспользуются. Сложнее всего — сопровождение и актуализация: стоит появиться новому источнику или фиче, как модель приходится переобучать, иначе она просто не умеет ими пользоваться.

LLM выглядит идеальным кандидатом на роль единого интерфейса к этим данным: данные переводятся в текст, и новый источник достаточно дописать в промпт на инференсе, без переобучения. Но есть проблема: если просто скормить модели историю транзакций, она справляется заметно хуже специализированных моделей. В нашей работе FinTRACE мы разобрались, почему так происходит, и предложили способ это починить — не дообучая модель на огромных размеченных датасетах, а перестраивая то, что именно мы ей показываем.

Статья принята на SIGIR 2026.

В чём, собственно, проблема

Возьмём типичную строку из истории платежей: 2024-01-15, Grocery, 82.40, POS. Для человека это «купил продукты в магазине у дома». Для языковой модели — почти бессмысленный набор токенов.

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

Мы проверили это на эксперименте и получили картину, которая хорошо описывает весь «затык»:

  • Готовые LLM (GPT-4o, gpt-oss) в режиме 0/4/16 примеров упираются в потолок около 0,30 MCC и выше не растут.

  • Специализированные модели (TabPFN, CatBoost, CoLES) пробивают 0,48 MCC, но только при полной разметке, то есть когда у вас есть тысячи меток.

Между «потолком LLM» и «полом специализированных моделей» зияет разрыв. Назовём его разрывом обобщаемости: либо у вас гибкий, но слабый языковой интерфейс, либо сильная, но прожорливая на разметку специализированная модель. Хочется получить и то, и другое.

MCC (коэффициент корреляции Мэтьюса) — метрика качества классификации, устойчивая к дисбалансу классов. В отличие от accuracy, её трудно «накрутить», просто предсказывая преобладающий класс, поэтому на скошенных банковских данных она честнее.

Главная идея: не текст, а структурированная база знаний

Ключевая гипотеза FinTRACE звучит так: проблема не в том, что модель не умеет генерировать текст, а в том, что она не понимает связей между фичами, поэтому ей тяжело с ними работать. У неё нет грамотно организованного источника знаний о поведении клиента, где эти связи были бы явно прописаны.

Поэтому вместо того чтобы превращать сырой лог транзакций в текст, мы создаём из него структурированную базу знаний (Knowledge Base, KB). По духу это ближе к онтологиям и нейросимвольным системам, чем к обычному prompt-инжинирингу: мы строим явный промежуточный слой поведенческих паттернов, который можно извлекать, комбинировать и переиспользовать между задачами.

Устройство базы знаний: три слоя

KB организована в три семантических слоя, и каждый следующий собирается из предыдущего.

Слой 1. Feature essences — «сырые показатели»

Это числовые характеристики, посчитанные прямо из последовательности событий. Считаем мы их по пайплайну фич из нашей предыдущей работы LATTE. Примеры:

  • inter_transaction_interval — средний интервал между операциями;

  • spending_variance — дисперсия сумм трат;

  • category_entropy — энтропия категорий (насколько разнообразны покупки);

  • activity_period_days — длина активного периода клиента.

Таких показателей десятки, и сами по себе они «немые»: число category_entropy = 1.8 ничего не говорит модели без контекста.

Слой 2. Behavioral patterns — «черты поведения»

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

Чтобы сформулировать черты, мы раскладываем сырые показатели по трём осмысленным категориям, привязанным к структуре транзакционных данных:

Категория

Что описывает

Примеры показателей

Временна́я динамика

Регулярность активности, ритм операций

Интервалы между транзакциями, регулярность активности

Денежное поведение

Как клиент распоряжается деньгами

Дисперсия трат, постоянство дохода

Распределение по мерчантам

На чём сфокусированы покупки

Концентрация категорий, разнообразие покупок

Внутри каждой категории мы просим LLM отобрать один-два наиболее релевантных для задачи показателя. То есть модель работает не аналитиком данных, а «куратором»: она не считает признаки, а решает, на какие из них смотреть. Схематично промпт отбора выглядит так:

Категория: денежное поведение

Доступные показатели:

— spending_variance (дисперсия сумм трат)

— income_consistency (постоянство поступлений)

— avg_transaction_amount(средний чек)

Целевая задача: предсказание оттока клиента.

Выбери 1–2 показателя, наиболее информативных для черты «финансовая стабильность». Ответ — только имена показателей.

Слой 3. Downstream targets — «цели»

Это downstream-задачи: отток, дефолт, демографический атрибут. Они появляются в KB только тогда, когда есть размеченные данные. Если разметки нет — слой целей остаётся пустым, а KB всё равно полезна (об этом ниже).

Как связать слои: white-box правила

Три слоя нужно соединить, и связываем мы их не нейросетью-чёрным-ящиком, а white-box правилами. Для этого используем интерпретируемую модель AutoWoE (из нашего LightAutoML). Она извлекает явные зависимости между показателями, поведенческими чертами и таргетом, формируя граф, центрированный на целевом узле.

А дальше мы переводим извлечённые зависимости в человекочитаемые нечёткие правила, которые можно прямо вставить в промпт:

ЕСЛИ activity_period_days ≤ 70.5 → СИЛЬНЫЙ сигнал оттока

ЕСЛИ spending_variance высокая И behavioral_loyalty падает → ПОВЫШЕННЫЙ риск оттока

ЕСЛИ category_entropy низкая И income_consistency высокая → сигнал УДЕРЖАНИЯ (стабильный клиент)

В итоге на входе у модели больше не «простыня» из сотен строк транзакций, а компактный набор фактов и правил (до ~20 фактов на промпт), где явно сказано, как поведение связано с целью. Модель отвечает, опираясь на прослеживаемую цепочку доказательств, а не на сырые записи.

Почему именно правила, а не «больше чисел»

Что прирост дают именно правила, а не объём данных в промпте, мы проверили отдельной абляцией. Сравнили несколько способов наполнить промпт:

Стратегия контекста

F1

MCC

Голый zero-shot по сериализованным транзакциям

0,55

0,19

+ квантили фичей

0,54

0,17

+ важности фичей

0,51

0,10

+ и то, и другое

0,55

0,18

KB через white-box правила

0,69

0,41

Вывод контринтуитивный, но показательный: добавление статистических подсказок (квантилей, важностей фич) не помогает — все варианты остаются на уровне базового zero-shot или даже ниже. Узкое место не в нехватке чисел, а в отсутствии явной семантической структуры, которая организует эти числа в связное «поведенческое досье». Как только мы даём модели именно структуру white-box знаний, MCC прыгает с 0,19 до 0,41.

Отдельно проверили стратегию отбора поведенческих черт:

Случайный отбор

LLM-guided

Без white-box

F1

0,63

0,69

0,41

MCC

0,28

0,38

0,01

Без white-box компонента (когда LLM сама строит KB по именам и распределениям фич) система буквально разваливается — MCC = 0,01. А вот случайный отбор черт всё ещё работает на удивление неплохо, если правила на месте. То есть главный источник силы — явные правила из white-box модели, а LLM-guided отбор лишь помогает приоритизировать самое информативное.

Три режима работы под разную доступность разметки

Базу знаний можно использовать по-разному в зависимости от того, сколько у вас меток.

Режим 1. Target-aware KB (разметка есть)

AutoWoE строит граф, центрированный на целевом узле: цель связана с информативными элементами KB через интерпретируемые ассоциации. На инференсе мы извлекаем релевантные элементы и правила, собираем структурированный промпт — и модель выдаёт обоснованный прогноз. Схематично промпт инференса:

Задача: предсказать отток клиента в ближайшие 3 месяца (метки: отток / удержание).

Поведенческие признаки клиента:

— financial_stability: низкая (spending_variance высокая)

— behavioral_loyalty: снижается

— activity_period_days: 58

Правила (из white‑box модели):

— ЕСЛИ activity_period_days ≤ 70.5 → сильный сигнал оттока

— ЕСЛИ spending_variance высокая И loyalty падает → повышенный риск

Дай ответ: метка + краткое обоснование строго на основе фактов и правил выше.

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

Режим 2. KB-grounded instruction tuning (дообучение без ручной разметки)

Каждый экземпляр target-aware KB мы превращаем в обучающий пример-тройку {инструкция, контекст, ответ} и используем как данные для дообучения. Модель учится по структурированному входу генерировать объяснение и финальный прогноз, то есть интернализует паттерны финансового рассуждения без ручной аннотации. Формат тройки:

{
  "instruction": "На основе поведенческих фактов и правил определи, уйдёт ли клиент.",
  "context": "financial_stability: низкая; activity_period_days: 58; правило:
              activity_period_days ≤ 70.5 → сильный сигнал оттока",
  "response": "Период активности 58 дней — ниже порога 70.5, стабильность низкая.
               Это сильный сигнал оттока. Метка: отток."
}

Размеченные данные автоматически превращаются в инструкционный датасет — никто не пишет аннотации руками.

Режим 3. KB при дефиците разметки (zero/few-shot)

Если разметки под целевую задачу мало или нет вообще, то мы переиспользуем заранее посчитанную KB без целевых связей — остаётся feature-центричный граф зависимостей между показателями, который не нужно перестраивать под каждую новую цель.

Самое интересное здесь — как этот граф достраивается до незнакомого таргета, которого не было при построении KB:

  1. LLM отбирает фичи. По текстовому описанию новой задачи модель выбирает несколько показателей, которые, как она считает, связаны с таргетом.

  2. White-box строит связи между фичами. Для отобранных показателей AutoWoE извлекает явные зависимости — получается граф связей между самими фичами, пока ещё без узла цели.

  3. LLM достраивает граф до таргета. Видя эти связи между фичами, модель сама дотягивает граф до целевого узла: она рассуждает, как взаимосвязанные поведенческие признаки должны влиять на новую цель, которую не видела при создании базы.

  • Zero-shot: весь вышеописанный механизм работает прямо на инференсе, без обновления весов: модель адаптируется к задаче, опираясь на описание цели и извлечённые подграфы наиболее релевантных показателей.

  • Few-shot: добавляем до 16 размеченных примеров и небольшую память self-reflection — пар «прошлый прогноз ↔ реальный исход». Модель сначала выдаёт черновой прогноз, потом пересматривает его, сверяясь с прошлыми успехами и провалами. Это лёгкий механизм адаптации без дообучения.

Что получилось

Тестировали на трёх публичных бенчмарках (Gender, Rosbank, DataFusion) и на внутреннем датасете Сбера. Zero/few-shot — на gpt-oss-120b, дообучение — на Llama-3-8B-Instruct, white-box правила — через AutoWoE, всё на кластере из 4× A100.

В low-supervision режиме:

  • zero-shot MCC на Rosbank удвоился: с 0,19 до 0,38 — без какого-либо переобучения под задачу;

  • с 16 примерами вырос до 0,40 MCC, обойдя и промпт-based, и эмбеддинг-based, и табличные бейзлайны;

  • на DataFusion — лучший few-shot результат 0,77 F1/0,10 MCC, выше сильных табличных методов вроде TabPFN.

При knowledge-grounded дообучении (FinTRACE Instruct):

  • 0,48 MCC на Rosbank — это уровень специализированной SOTA-модели CoLES (тоже 0,48), но без узкоспециализированной архитектуры;

  • 0,53 на Gender, 0,12 на DataFusion;

  • при этом общие языковые способности не деградируют — на MMLU модель держит те же 0,53, что и до дообучения.

Последний пункт важен. Обычные стратегии дообучения здесь подводят: NTP-тюнинг (LLM4ES) хоть и поднимает метрики на Rosbank, однако полностью теряет общие текстовые способности (текстовые навыки на MMLU падает в ноль), а обычный SFT не переносится на несбалансированный DataFusion и схлопывается до 0,00 MCC. FinTRACE Instruct закрывает разрыв до специализированных моделей и сохраняет универсальность LLM, что и было главной целью.

Вместо заключения

Начинали мы с простой гипотезы: языковая модель плохо читает транзакции не потому, что глупая, а потому что мы даём ей неподходящий вид данных. Эксперименты это подтвердили: стоило заменить сырую сериализацию на структурированную базу знаний с явными white-box правилами, как разрыв обобщаемости между гибким языковым интерфейсом и специализированными моделями заметно сократился.

Самое приятное: подход не требует размечать тысячи примеров и не ломает общие способности модели. Структура важнее объёма данных — кажется, для транзакционной аналитики это работает.

Авторы статьи: Артем Сахно (Sber AI Lab), Даниил Томилов (Sber AI Lab), Юлиана Шахвалиева (Sber AI), Инесса Фёдорова (Sber AI), Дарья Рузанова (Sber AI), Омар Золоев (Sber AI Lab), Андрей Савченко (Sber AI Lab), Максим Макаренко (Sber AI Lab).