AI в финансах: fraud detection, robo-advisors, compliance

AI в финансовом секторе: обнаружение мошенничества, робо-эдвайзеры, алготрейдинг, KYC/AML автоматизация, Bloomberg GPT и финансовые LLM

Финансовая индустрия была одной из первых, кто начал применять машинное обучение в промышленных масштабах — ещё до эпохи LLM. Скоринговые модели в банках, алгоритмический трейдинг, антифрод-системы существуют десятилетиями. Но появление больших языковых моделей открыло новый фронт: теперь AI читает отчёты компаний быстрее аналитика, объясняет клиенту сложный продукт как опытный консультант, и проверяет соответствие тысяч транзакций регуляторным требованиям в реальном времени. JPMorgan сэкономил 360 000 рабочих часов юристов, автоматизировав анализ кредитных соглашений. Тинькофф детектирует 99% мошеннических транзакций за миллисекунды. Это не пилоты — это уже продакшен мирового масштаба.

Представьте, что каждый раз, когда вы платите картой, невидимый детектор за миллисекунды проверяет: это точно вы? Не украли ли карту? Типичная ли это покупка для вас? Именно так работает fraud detection — AI-система, которая изучила тысячи ваших предыдущих платежей и мгновенно замечает что-то подозрительное. То же самое происходит при открытии счёта (KYC), подборе инвестиций (robo-advisor) и соблюдении законов (compliance) — только вместо детектива работает нейросеть.

Суть за 2 минуты

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

Ключевые применения сегодня:

ОбластьЧто делает AIПримеры
Fraud detectionОценивает каждую транзакцию в реальном времениТинькофф, Сбер, Visa, Mastercard
Robo-advisorsПодбирает портфель, ребалансирует автоматическиТинькофф Инвестиции, Wealthfront, Betterment
АлготрейдингТоргует на основе новостей, сентимента, паттерновХедж-фонды, HFT-компании
KYC/AMLВерифицирует клиентов, мониторит подозрительные операцииВсе банки по требованию регулятора
Финансовые LLMАнализирует отчёты, отвечает на вопросы, ищет в документахBloombergGPT, FinGPT, ChatGPT для аналитиков
ComplianceПроверяет документы на соответствие требованиямJPMorgan COIN, Harvey для финансовых юристов

Ключевые цифры:

  • 360 000 рабочих часов юристов сэкономил JPMorgan за год, автоматизировав анализ кредитных соглашений
  • 99%+ точность детектирования фрода в топовых российских банках
  • $1 трлн — активы под управлением robo-advisors к 2024 году (по данным Statista)
  • 50 млрд параметров — размер BloombergGPT, первой крупной финансовой LLM
ПромптФинансовый аналитик → ChatGPT: быстрый анализ
Компания X опубликовала квартальный отчёт. Выручка выросла на 12% г/г до $4.2 млрд, EBITDA margin упала с 28% до 24%, долг вырос с $2 до $3.5 млрд. Дай краткую оценку: что произошло, какие вопросы задать менеджменту на звонке, красные флаги если есть.
Ответ модели

Основное: рост выручки есть, но маржа сжалась на 4 п.п. — нужно понять причину (рост COGS? инвестиции в рост? временный?). Долг вырос на 75% — Debt/EBITDA теперь ~3.5x, что близко к триггерным уровням ковенантов у большинства кредиторов.

Вопросы менеджменту:

  1. Что конкретно давит на маржу — это одноразово или новая реальность?
  2. На что пошёл долг — CAPEX, M&A, операционный кассовый разрыв?
  3. Каков прогноз свободного денежного потока на следующие 2 квартала?

Красные флаги: одновременное сжатие маржи + рост долга без очевидного объяснения — это паттерн, требующий объяснения до принятия позиции.

Fraud Detection: AI против мошенников

Обнаружение мошенничества — это гонка вооружений в реальном времени. Фродстеры постоянно меняют паттерны, банки постоянно переобучают модели. Человек физически не может проверить 100 транзакций в секунду — AI может.

Как работает современный антифрод

Каждая транзакция порождает сотни признаков (features): сумма, мерчант, геолокация, время, девайс, скорость ввода PIN, IP-адрес, история предыдущих платежей, поведение в приложении. Модель (обычно градиентный бустинг или нейросеть) оценивает транзакцию за 20-100 миллисекунд и выдаёт score от 0 до 1 — вероятность фрода.

Три уровня защиты:

  1. Транзакционный скоринг — оценка каждого платежа в реальном времени. Если score выше порога — транзакция блокируется или требует дополнительной верификации (SMS, Face ID).
  2. Поведенческая биометрия (behavioral biometrics) — анализ того, как вы держите телефон, скорость печати, паттерн свайпов. Если кто-то использует ваш телефон «не так, как вы» — это сигнал. Компании вроде BioCatch специализируются именно на этом.
  3. Сетевой анализ (graph analytics) — построение графа связей между счетами, устройствами, адресами. Мошеннические схемы часто видны именно как аномальные паттерны в графе, которые невозможно обнаружить, глядя на каждую транзакцию отдельно.

Российский контекст: Тинькофф и Сбер

Тинькофф Банк — один из мировых лидеров по эффективности антифрода. В публичных выступлениях компания называет цифры 99%+ precision при крайне низком false positive rate (ложная блокировка легитимных транзакций). Ключевое конкурентное преимущество: Тинькофф — цифровой банк с полным контролем над UX, что позволяет собирать максимально богатые поведенческие данные.

Сбер инвестирует в AI с 2017 года. AI-фрод-детектор обрабатывает сотни миллионов транзакций ежедневно. В 2021 году Сбер опубликовал кейс: AI помог выявить схему с подставными ИП на сумму несколько миллиардов рублей — именно через граф-анализ связей между счетами.

Без техники
Традиционный антифрод (правила): • Ручные правила: «если сумма > 50 000 и страна = X — блокировать» • Легко обойти: мошенники учатся на отказах и подбирают параметры • Высокий false positive: блокируются и мошеннические, и легитимные транзакции • Обновление правил — недели согласований с аналитиками и риск-менеджерами • Реакция на новые схемы — месяцы после первых случаев
С техникой
ML-антифрод: • Сотни признаков (features) вместо 10-20 правил • Модель сама учится на новых мошеннических паттернах • Динамический порог: score, а не бинарная блокировка • Переобучение на новых данных — часы/дни • Behavioral biometrics: невозможно подделать «стиль поведения» владельца • False positive rate значительно ниже при сопоставимом обнаружении

Robo-Advisors: автоматизированное управление капиталом

Robo-advisor (робо-эдвайзер) — система автоматического управления инвестиционным портфелем. Вы отвечаете на вопросы (возраст, цели, горизонт инвестиций, терпимость к риску), алгоритм строит портфель и автоматически его ребалансирует.

Как это работает

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

Распределение активов (asset allocation) — на основе Modern Portfolio Theory (MPT): максимальная доходность при заданном уровне риска. Алгоритм строит оптимальный портфель из акций, облигаций, ETF, иногда — альтернативных активов.

Автоматическая ребалансировка — если акции выросли и их доля стала 65% вместо целевых 60%, алгоритм продаёт излишек и докупает облигации. Без эмоций, без прокрастинации, мгновенно.

Tax-loss harvesting — оптимизация налогов через фиксацию убытков для сальдирования с прибылями. Wealthfront и Betterment в США строят на этом ключевое ценностное предложение: автоматическая налоговая оптимизация, которая раньше требовала дорогого финансового советника.

Западные и российские платформы

Wealthfront и Betterment (США) — пионеры robo-advisory, под управлением десятки миллиардов долларов. Комиссия 0.25% в год против 1-2% у традиционных советников. Исследования показывают: для большинства розничных инвесторов robo-advisor даёт лучший результат, чем самостоятельное управление — прежде всего за счёт устранения эмоциональных решений.

Тинькофф Инвестиции — крупнейшая розничная брокерская платформа в России. Предлагает автоследование (копирование стратегий) и умные стратегии на основе алгоритмов. «Вечный портфель» и аналогичные продукты — фактически упрощённые robo-advisory стратегии с ребалансировкой.

Сбер Управление Активами — автоматизированные стратегии на базе ПИФов с элементами алгоритмического управления.

Алгоритмический трейдинг и LLM

Алгоритмический трейдинг существует с 1980-х, но LLM открыли новое измерение: модели, которые умеют читать новости и понимать нюансы языка, могут торговать на основе нарратива, а не только цифр.

Sentiment Analysis для торговли

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

Earnings call sentiment — анализ транскриптов звонков с аналитиками. Tone of voice CEO коррелирует с последующей динамикой акций: если менеджмент говорит неуверенно о прогнозах или слишком часто использует хеджирующие формулировки — это сигнал. LLM анализирует это автоматически.

Alternative data — нестандартные источники данных. Количество резюме на LinkedIn от сотрудников компании X (признак найма = рост), тональность отзывов в App Store, посещаемость магазинов по данным мобильных устройств. LLM помогает извлекать структурированные сигналы из неструктурированного текста.

Алгоритмический трейдинг на основе LLM — не магия. Рынки адаптируются: когда стратегия становится массовой, её альфа исчезает. Большинство описанных подходов работают в хедж-фондах с командами квантов, значительными вычислительными ресурсами и проприетарными данными. Для розничного инвестора «торговать по сигналам ChatGPT» — это не стратегия, это азартная игра.

KYC/AML: автоматизация комплаенса

KYC (Know Your Customer, знай своего клиента) и AML (Anti-Money Laundering, противодействие отмыванию денег) — регуляторные требования, которые стоят банкам миллиарды долларов ежегодно. AI атакует эту проблему с нескольких сторон.

KYC: верификация клиентов

Document verification — AI распознаёт паспорта, права, проверяет подлинность документов (watermarks, шрифты, структуру данных). Системы вроде Onfido или Sum&Substance работают за секунды там, где человек тратит минуты, и с меньшим процентом ошибок.

Биометрическая верификация — liveness detection (проверка, что перед камерой живой человек, а не фото), сравнение с документом. Стало стандартом для дистанционного открытия счёта в российских банках: Тинькофф, Сбер, ВТБ — всё через AI-верификацию.

Оценка риска клиента — не просто «проверить документы», но и оценить: откуда деньги, типичность операций для профиля, связи с политически значимыми лицами (PEP, Politically Exposed Persons). AI анализирует открытые источники (новости, реестры, санкционные списки) автоматически.

AML: мониторинг транзакций

Transaction monitoring — анализ паттернов транзакций на предмет подозрительности. Классические правила порождали тысячи ложных срабатываний (SAR, Suspicious Activity Reports), которые вручную разбирали комплаенс-офицеры. ML-модели снижают false positive rate в 5-10 раз при сопоставимом обнаружении реального отмывания.

Сетевой анализ для AML — построение графа: если деньги проходят через цепочку счетов, возвращаясь к источнику (типичная схема отмывания), граф это покажет там, где анализ отдельных транзакций — нет.

Финансовые LLM: BloombergGPT, FinGPT и другие

Общие LLM (GPT-4, Claude) умеют анализировать финансовые данные, но специализированные модели обучены на терминах, паттернах и документах конкретной индустрии.

BloombergGPT

В 2023 году Bloomberg опубликовал статью о BloombergGPT — языковой модели на 50 млрд параметров, обученной на 363 млрд токенов финансовых данных: новости Bloomberg, SEC-файлинги, финансовые статьи, аналитические отчёты. Плюс 345 млрд токенов общего текста.

Результат: BloombergGPT значительно превосходит общие LLM аналогичного размера на финансовых бенчмарках (Financial PhraseBank, FiQA SA, ConvFinQA). На общих задачах — сопоставим с общими моделями того же размера, но не превосходит.

Вывод: domain-specific обучение работает для специализированных задач. Для финансового аналитика, которому нужно работать с Bloomberg Terminal — специализированная модель точнее.

FinGPT (открытый проект)

FinGPT — open-source альтернатива, проект Columbia University. Философия: вместо дорогостоящего переобучения с нуля — fine-tuning существующих открытых моделей (LLaMA, Falcon) на финансовых данных. Данные: Yahoo Finance, SEC EDGAR, Reddit финансовые форумы, Twitter-финансы, финансовые новостные ленты.

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

ChatGPT/Claude как инструмент аналитика

Для большинства финансовых профессионалов специализированные модели пока недоступны или избыточны. Практическое применение общих LLM:

ПромптDCF-анализ через промпт
Я провожу DCF-оценку компании X (SaaS, B2B). Базовые данные:
- Текущая выручка: $100 млн
- Рост выручки: 30% г/г (снижается на ~5 п.п. ежегодно)
- Gross margin: 75%
- EBITDA margin на зрелости: 25% (через 5 лет)
- WACC: 12%
- Горизонт: 5 лет + terminal value
- EV/EBITDA терминальный: 12x
Построй базовый DCF, укажи допущения, посчитай implied EV.
Ответ модели

Допущения:

  • Year 1-5 revenue growth: 30%, 25%, 20%, 15%, 10%
  • Gross margin стабильная 75%
  • EBITDA margin: 5%, 10%, 15%, 20%, 25% (линейный рост к зрелости)
  • Tax rate: 25%
  • D&A = CAPEX (упрощение для SaaS)

Денежные потоки (FCFF, $млн): Y1: Rev=130, EBITDA=6.5, FCFF≈4.9 Y2: Rev=162, EBITDA=16.2, FCFF≈12.2 Y3: Rev=195, EBITDA=29.2, FCFF≈21.9 Y4: Rev=224, EBITDA=44.8, FCFF≈33.6 Y5: Rev=246, EBITDA=61.5, FCFF≈46.1

PV of FCF (WACC 12%): ~$82 млн Terminal value: 61.5×12/1.12^5 = ~$418 млн Implied EV: ~$500 млн (5x текущей выручки)

Чувствительность: ±1 п.п. WACC меняет EV на ~$40 млн. Ключевой драйвер — terminal EBITDA margin.

Регуляторный комплаенс и объяснимость

Финансовый сектор — один из самых зарегулированных в мире. Это создаёт специфические требования к AI-системам.

Explainability (объяснимость)

Регулятор требует, чтобы банк мог объяснить отказ в кредите или блокировку транзакции. «Нейросеть так решила» — не ответ. GDPR прямо закрепляет право на объяснение автоматизированных решений.

Подходы к объяснимости:

  • SHAP (SHapley Additive exPlanations) — показывает, какие признаки как повлияли на конкретный прогноз
  • LIME (Local Interpretable Model-agnostic Explanations) — локальное приближение сложной модели простой интерпретируемой
  • Monotonic constraints — при кредитном скоринге: больший доход → не может снижать вероятность одобрения

EU AI Act и финансовый сектор

EU AI Act (вступил в силу в 2024 году) классифицирует кредитный скоринг и оценку рисков страхования как высокорисковые AI-системы. Требования:

  • Регистрация в EU Database
  • Оценка рисков и документация
  • Человеческий надзор над критическими решениями
  • Право клиента на объяснение и оспаривание

Позиция ЦБ РФ

Банк России активно следит за AI в финансовом секторе. Ключевые документы:

  • Доклад ЦБ «AI в финансовом секторе» (2021) — первое системное исследование применения AI
  • Стандарт по управлению рисками AI (разрабатывается) — требования к model risk management
  • Принципы этичного AI — рекомендации для банков

ЦБ придерживается позиции: AI-системы в финансах должны быть объяснимы, аудируемы и иметь человека в контуре принятия решений. Полностью автоматические кредитные решения без возможности оспорить — нарушение прав потребителя.

Плюсы

  • Скорость: миллисекунды на оценку транзакции вместо секунд у человека
  • Масштаб: миллиарды транзакций в день — невозможно без AI
  • Точность: ML-модели превосходят правила и человека на типовых задачах обнаружения фрода
  • Доступность: robo-advisors дают качественное управление портфелем при минимальных комиссиях
  • Экономия: JPMorgan — 360 000 часов юристов; банки — снижение затрат на KYC/AML на 30-50%

Минусы

  • Дискриминация: скоринговые модели могут воспроизводить исторические предвзятости
  • Adversarial attacks: мошенники целенаправленно атакуют ML-модели, изучая их границы
  • Объяснимость: глубокие нейросети сложно интерпретировать для регулятора и клиента
  • Model drift: финансовые данные меняются; модель, отличная год назад, может деградировать
  • Концентрация риска: все банки используют похожие модели — системный риск коррелированных ошибок

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

Несколько рабочих промптов для повседневных задач:

ПромптСаммари earnings call
Прочитай следующий фрагмент транскрипта earnings call [компания, квартал]. Выдели: 1) ключевые финансовые результаты vs guidance, 2) изменение прогноза (guidance revision), 3) главные риски, о которых упомянул менеджмент, 4) нетипичные или уклончивые формулировки (language hedging). Формат: bullet points, не более 300 слов. [вставь транскрипт]
Ответ модели

Финансовые результаты: выручка $X vs guidance $Y (+/-Z%). EPS $X vs consensus $Y.

Guidance revision: повышен/снижен прогноз на следующий квартал с X до Y по причине [причина].

Главные риски (слова менеджмента): рост конкуренции в сегменте X, давление на маржу от COGS, неопределённость macro.

Hedging language: CEO 4 раза использовал 'challenging environment', CFO избегал давать точный прогноз по margin на 2H. Нетипично уклончивый ответ на вопрос об inventory levels.

ПромптRisk assessment контракта
Проанализируй следующий кредитный договор (или договор поставки/аренды). Найди: 1) нестандартные ковенанты (условия), которые могут ограничить операционную свободу заёмщика, 2) триггеры досрочного погашения (events of default), 3) пункты с размытыми формулировками, допускающими разные интерпретации, 4) отсутствие стандартных защитных условий. [вставь текст договора]
Ответ модели

Нестандартные ковенанты: п.12.3 требует согласования кредитора при любом M&A > $10 млн — нетипично низкий порог. п.14.1 — ограничение CAPEX 15% от EBITDA без согласования.

Triggering events: п.18.4 содержит размытую формулировку 'material adverse change' без чёткого определения — потенциальный риск произвольного применения.

Размытые формулировки: п.9.2 ('в разумные сроки') без числового определения создаёт риск споров.

Отсутствует: стандартный cure period (обычно 30 дней) для технических нарушений ковенантов.

Fraud Detection: архитектура пайплайна

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

Структура признаков (Feature Engineering)

from dataclasses import dataclass
from datetime import datetime
from typing import Optional
import numpy as np


@dataclass
class Transaction:
    """Сырая транзакция из процессинга."""
    transaction_id: str
    user_id: str
    amount: float
    currency: str
    merchant_id: str
    merchant_category_code: str  # MCC
    timestamp: datetime
    device_id: str
    ip_address: str
    card_present: bool  # физическая или онлайн-транзакция
    country: str
    city: str


def extract_features(
    tx: Transaction,
    user_history: list[Transaction],
    window_hours: int = 24,
) -> dict[str, float]:
    """
    Извлечь признаки для fraud scoring.
    Каждый признак должен быть обоснован бизнес-логикой.
    """
    now = tx.timestamp
    recent = [t for t in user_history if (now - t.timestamp).total_seconds() < window_hours * 3600]

    # Признаки транзакции
    features = {
        "amount": tx.amount,
        "amount_log": np.log1p(tx.amount),  # лог-трансформация для скошенных распределений

        # Отклонение от среднего пользователя
        "amount_vs_user_mean": tx.amount / (np.mean([t.amount for t in user_history]) + 1e-9),
        "amount_vs_user_std_z": (
            (tx.amount - np.mean([t.amount for t in user_history]))
            / (np.std([t.amount for t in user_history]) + 1e-9)
        ),

        # Временные признаки
        "hour_of_day": now.hour,
        "day_of_week": now.weekday(),
        "is_weekend": int(now.weekday() >= 5),
        "is_night": int(now.hour < 6 or now.hour > 23),

        # Скорость транзакций (velocity)
        "tx_count_24h": len(recent),
        "tx_sum_24h": sum(t.amount for t in recent),
        "unique_merchants_24h": len({t.merchant_id for t in recent}),
        "unique_countries_24h": len({t.country for t in recent}),

        # Географические признаки
        "new_country": int(tx.country not in {t.country for t in user_history}),
        "new_merchant": int(tx.merchant_id not in {t.merchant_id for t in user_history}),

        # Канальные признаки
        "is_card_not_present": int(not tx.card_present),
        "new_device": int(tx.device_id not in {t.device_id for t in user_history}),
    }

    return features

ML-модель: Real-time Scoring

import joblib
import lightgbm as lgb
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler


def build_fraud_model(X_train, y_train, X_val, y_val) -> lgb.LGBMClassifier:
    """
    LightGBM — стандарт для транзакционного фрода:
    - быстрый inference (< 1 мс)
    - интерпретируемость через SHAP
    - хорошо работает на несбалансированных данных

    Типичный дисбаланс: 0.1-0.5% фрода.
    """
    model = lgb.LGBMClassifier(
        n_estimators=500,
        learning_rate=0.05,
        max_depth=6,
        num_leaves=31,
        # Критично для несбалансированных данных:
        class_weight="balanced",
        # или: scale_pos_weight=neg_count/pos_count
        min_child_samples=50,
        subsample=0.8,
        colsample_bytree=0.8,
        random_state=42,
        n_jobs=-1,
    )

    model.fit(
        X_train, y_train,
        eval_set=[(X_val, y_val)],
        eval_metric="auc",
        callbacks=[lgb.early_stopping(50, verbose=False)],
    )

    return model


def get_fraud_score_with_explanation(
    model: lgb.LGBMClassifier,
    features: dict[str, float],
    top_n_reasons: int = 3,
) -> dict:
    """
    Вернуть score + объяснение через SHAP.
    Требование регулятора: каждое решение должно быть объяснимо.
    """
    import shap

    X = np.array([list(features.values())])
    feature_names = list(features.keys())

    score = model.predict_proba(X)[0][1]  # вероятность фрода

    # SHAP для объяснимости
    explainer = shap.TreeExplainer(model)
    shap_values = explainer.shap_values(X)[1]  # для класса 1 (фрод)

    # Топ-N признаков, которые повлияли на решение
    shap_pairs = sorted(
        zip(feature_names, shap_values[0]),
        key=lambda x: abs(x[1]),
        reverse=True,
    )
    top_reasons = [
        {"feature": name, "shap_value": float(val), "direction": "increase" if val > 0 else "decrease"}
        for name, val in shap_pairs[:top_n_reasons]
    ]

    return {
        "fraud_score": float(score),
        "decision": "block" if score > 0.8 else ("review" if score > 0.4 else "approve"),
        "top_reasons": top_reasons,
    }

Финансовые данные и LLM: анализ отчётности

import anthropic
from pathlib import Path


FINANCIAL_ANALYST_PROMPT = """Ты опытный финансовый аналитик (buy-side, equity research).

Твои задачи:
- Анализировать финансовую отчётность объективно и критически
- Выявлять расхождения между словами менеджмента и цифрами
- Всегда указывать на ключевые риски и неопределённости
- Давать структурированный анализ, удобный для принятия инвестиционных решений

ВАЖНО: Ты не даёшь инвестиционных рекомендаций (buy/sell/hold). Только анализ.
Все выводы — на основе предоставленных данных, без домыслов.
"""


def analyze_earnings_report(
    report_text: str,
    company: str,
    quarter: str,
    prior_guidance: Optional[str] = None,
) -> dict:
    """
    Анализ квартального отчёта через LLM.

    Args:
        report_text: текст отчёта или транскрипт earnings call
        company: название компании
        quarter: квартал (например, "Q3 2025")
        prior_guidance: предыдущий прогноз менеджмента (если есть)
    """
    client = anthropic.Anthropic()

    context = f"Компания: {company}\nОтчётный период: {quarter}\n"
    if prior_guidance:
        context += f"Предыдущий guidance менеджмента:\n{prior_guidance}\n\n"
    context += f"Текст отчёта/транскрипта:\n{report_text}"

    response = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=2000,
        system=FINANCIAL_ANALYST_PROMPT,
        messages=[
            {
                "role": "user",
                "content": f"""{context}

Проведи анализ по следующей структуре:

1. КЛЮЧЕВЫЕ РЕЗУЛЬТАТЫ
   - Выручка: факт vs guidance/consensus
   - Margins: динамика и объяснение
   - EPS: факт vs ожидания

2. КАЧЕСТВО ПРИБЫЛИ
   - Органический vs неорганический рост
   - Разовые статьи, влияющие на результат
   - FCF conversion

3. FORWARD-LOOKING
   - Новый guidance vs предыдущий
   - Качество комментариев менеджмента (конкретные цифры или размытые формулировки?)

4. КРАСНЫЕ ФЛАГИ
   - Необъяснённые отклонения
   - Изменения в учётной политике
   - Нетипичный язык или уклончивые ответы на конкретные вопросы

5. КЛЮЧЕВЫЕ ВОПРОСЫ
   - 3 вопроса, которые необходимо прояснить""",
            }
        ],
    )

    return {
        "company": company,
        "quarter": quarter,
        "analysis": response.content[0].text,
        "tokens_used": response.usage.input_tokens + response.usage.output_tokens,
    }


def compliance_check_document(
    document_text: str,
    regulation_type: str = "AML",
    jurisdiction: str = "RU",
) -> dict:
    """
    Проверка документа на соответствие регуляторным требованиям через LLM.
    Не заменяет юридическую экспертизу — флагует потенциальные проблемы.
    """
    client = anthropic.Anthropic()

    COMPLIANCE_PROMPTS = {
        "AML_RU": """Ты комплаенс-специалист по 115-ФЗ (Противодействие легализации доходов).
        Анализируй документ на наличие признаков, требующих обязательного контроля или сообщения в Росфинмониторинг.
        Ссылайся на конкретные статьи 115-ФЗ.
        Указывай уровень уверенности: высокий/средний/низкий риск.""",

        "GDPR_FINANCE": """Ты DPO (Data Protection Officer) в финансовой компании.
        Проверь документ на соответствие GDPR применительно к финансовым данным.
        Основные проверки: правовое основание обработки, retention periods, трансграничная передача.""",
    }

    system = COMPLIANCE_PROMPTS.get(f"{regulation_type}_{jurisdiction}", COMPLIANCE_PROMPTS["AML_RU"])

    response = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=1500,
        system=system,
        messages=[
            {
                "role": "user",
                "content": f"Проверь следующий документ:\n\n{document_text}\n\nВыдай: 1) уровень риска (LOW/MEDIUM/HIGH), 2) конкретные проблемные места с цитатами, 3) рекомендуемые действия.",
            }
        ],
    )

    return {
        "regulation": f"{regulation_type}/{jurisdiction}",
        "analysis": response.content[0].text,
        "disclaimer": "AI-анализ носит информационный характер и не является юридическим заключением. Требуется верификация квалифицированным специалистом.",
    }

Построение robo-advisor: минимальная архитектура

from scipy.optimize import minimize
import numpy as np


def modern_portfolio_optimization(
    expected_returns: np.ndarray,  # годовая доходность по каждому активу
    cov_matrix: np.ndarray,        # ковариационная матрица доходностей
    risk_tolerance: float,          # 0.0 (консервативный) до 1.0 (агрессивный)
    constraints: Optional[dict] = None,
) -> dict:
    """
    Оптимизация портфеля по Марковицу (Modern Portfolio Theory).
    Максимизируем risk-adjusted return для заданной терпимости к риску.
    """
    n_assets = len(expected_returns)

    def portfolio_volatility(weights):
        return np.sqrt(weights @ cov_matrix @ weights)

    def portfolio_return(weights):
        return weights @ expected_returns

    def negative_sharpe(weights, risk_free_rate=0.05):
        ret = portfolio_return(weights)
        vol = portfolio_volatility(weights)
        return -(ret - risk_free_rate) / (vol + 1e-9)

    # risk_tolerance влияет на целевую функцию
    def objective(weights):
        ret = portfolio_return(weights)
        vol = portfolio_volatility(weights)
        # Комбинация: (1-tol)*risk_minimization + tol*return_maximization
        return (1 - risk_tolerance) * vol - risk_tolerance * ret

    # Ограничения: сумма весов = 1, все веса >= 0 (нет коротких позиций)
    cons = [{"type": "eq", "fun": lambda w: np.sum(w) - 1}]
    bounds = [(0, 1)] * n_assets

    if constraints:
        # Дополнительные ограничения (например, max 30% в один актив)
        if "max_weight" in constraints:
            bounds = [(0, constraints["max_weight"])] * n_assets

    result = minimize(
        objective,
        x0=np.ones(n_assets) / n_assets,  # равновесный старт
        method="SLSQP",
        bounds=bounds,
        constraints=cons,
        options={"ftol": 1e-9, "maxiter": 1000},
    )

    optimal_weights = result.x
    return {
        "weights": optimal_weights.tolist(),
        "expected_return": float(portfolio_return(optimal_weights)),
        "volatility": float(portfolio_volatility(optimal_weights)),
        "sharpe_ratio": float(
            (portfolio_return(optimal_weights) - 0.05)
            / (portfolio_volatility(optimal_weights) + 1e-9)
        ),
        "optimization_success": result.success,
    }


def rebalance_portfolio(
    current_weights: dict[str, float],
    target_weights: dict[str, float],
    portfolio_value: float,
    threshold: float = 0.05,  # ребалансировать если отклонение > 5%
    transaction_cost: float = 0.001,  # 0.1% комиссия
) -> list[dict]:
    """
    Вычислить необходимые сделки для ребалансировки.
    Минимизируем транзакционные издержки: торгуем только при значимых отклонениях.
    """
    trades = []
    for asset, target_w in target_weights.items():
        current_w = current_weights.get(asset, 0.0)
        delta_w = target_w - current_w

        if abs(delta_w) > threshold:
            amount = delta_w * portfolio_value
            cost = abs(amount) * transaction_cost
            trades.append({
                "asset": asset,
                "action": "buy" if delta_w > 0 else "sell",
                "amount": abs(amount),
                "transaction_cost": cost,
                "current_weight": current_w,
                "target_weight": target_w,
            })

    return sorted(trades, key=lambda x: abs(x["amount"]), reverse=True)
Три самых частых ошибки при создании финансовых AI-систем: 1) недооценка data leakage — будущие данные утекают в обучение, модель показывает фантастические метрики на бэктесте и деградирует в продакшене; 2) игнорирование concept drift — финансовые паттерны меняются, модель без мониторинга незаметно деградирует; 3) пренебрежение объяснимостью с первого дня — регулятор потребует объяснений, и рефакторинг чёрного ящика постфактум болезнен.

Проверьте себя

Проверьте себя

1. Что такое behavioral biometrics в контексте банковского fraud detection?

2. Почему BloombergGPT превосходит общие LLM на финансовых задачах, но не на общих?

3. Что такое concept drift и почему это критически важно для финансовых ML-моделей?

Связанные темы

  • AI Red Teaming — тестирование безопасности AI-систем, включая финансовые
  • Structured Outputs — JSON-ответы для финансовых данных
  • Observability — мониторинг и трекинг LLM-приложений в продакшене
  • AI Safety и Alignment — этические основы безопасного AI
  • EU AI Act — регулирование высокорискованных AI-систем

Источники