О проекте
Команда: CodeAI
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Доведённый продукт
Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)
Суть
Локальное Streamlit-приложение для AML-аналитика: валидирует три parquet, строит граф переводов, назначает роли по правилам, выделяет Louvain-кластеры, формирует очередь проверки и интерактивную карту. Интерфейс на казахском языке.
Как устроено
data.py валидирует схему, суммы и сверку рёбер с транзакциями. graph.py строит NetworkX DiGraph и считает взвешенный PageRank, точную betweenness, достижимость от seed и компоненты. roles.py применяет явные правила из config/roles.json (первое подходящее правило), а приоритет собирается из 7 нормированных вкладов. Louvain работает на ненаправленной проекции с seed=42. LLM (OpenAI или NVIDIA) опционально пишет объяснение по готовым фактам; расход токенов учитывается в SQLite.
Ключевые решения
- NetworkX
- взвешенный PageRank
- betweenness centrality
- Louvain
- правила ролей из JSON-конфига
- взвешенный приоритет из 7 компонент
- анализ чувствительности к порогам
- vis-network
Метрики
281 автоматический тест пройден; живой LLM-ответ не получен (OpenAI HTTP 401, NVIDIA HTTP 410)
Особенности
В README честно написано, что живая проверка LLM не прошла (401/410). Бюджет и токены API учитываются в SQLite. Есть проверка устойчивости ролей, топ-30 и кластеризации при изменении порога и параметра Louvain. Интерфейс полностью на казахском.
Стек
Python · Streamlit · pandas · PyArrow · NetworkX · Altair · vis-network · SQLite · pytest · PowerShell
Модели
OpenAI Responses API · NVIDIA API Catalog
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-bfb7d63d-codeai.
README
README.mdMoneyMap — граф финансовых связей
Проект для HackAlem AI: исследование транзакционной сети и объяснимый выбор клиентов для дальнейшей проверки.
1. О проекте
MoneyMap — локальное рабочее пространство для аналитика банковского финансового мониторинга (AML). Проект помогает перейти от таблиц переводов к связной картине: кто собирает деньги, кто передаёт их дальше, какие клиенты связывают разные части сети и с кого начать проверку.
В кейсе известен 81 исходный клиент, а наблюдаемая сеть содержит 2 248 клиентов. Ручное исследование переводов на несколько шагов затрудняет поиск важных участников. MoneyMap рассчитывает характеристики графа, предлагает финансовые роли, выделяет группы и формирует очередь проверки с числовыми обоснованиями.
Результат — аналитические гипотезы, а не установление виновности или личности организатора. Основной анализ, карта, отчёт и экспорт работают локально без API-ключей. Дополнительное объяснение через LLM включается отдельно.
Интерфейс и текстовые обоснования текущей версии — на казахском языке. Ниже приведены русские пояснения к названиям разделов и кнопок.
Контрольная проверка от 23 сентября 2026 года: локальный анализ и экспорт прошли проверку; 281 автоматический тест пройден. Успешный живой LLM-ответ не получен: OpenAI вернул HTTP 401, NVIDIA — HTTP 410. Основную демонстрацию можно провести без ключей. Подробности и границы проверки: финальный отчёт.
2. Что реализовано
| Возможность | Что получает аналитик |
|---|---|
| Загрузка и проверка данных | Чтение трёх Parquet-файлов, проверка схемы, идентификаторов, сумм, дат и соответствия агрегированных связей исходным операциям |
| Обзор сети | Число клиентов и переводов, оборот по дням, распределение ролей, компоненты связности и ограничения наблюдения |
| Финансовые роли | Одна из шести гипотез для каждого клиента, сила соответствия правилу и краткое числовое обоснование |
| Очередь проверки | Топ-30 по умолчанию, таблица всех клиентов, фильтр по роли и разложение приоритета на семь составляющих |
| Интерактивная карта | Направленные связи, поиск по полному gid, окружение на 1–2 шага, вся сеть или отдельный кластер; фильтры по роли, кластеру, сумме и направлению |
| Карточка клиента | Входящие и исходящие суммы, контрагенты, операции, даты, правило роли, вклад показателей в приоритет и наблюдаемые пути от исходных клиентов |
| Анализ кластеров | Louvain-группы, внутренние и межкластерные потоки, концентрация переводов и числовые основания групповой гипотезы |
| Проверка устойчивости | Сравнение ролей, состава топ-30 и кластеризации при изменении порога для сборщика денег и параметра Louvain |
| Аналитическая справка | Локальный отчёт по рассчитанным фактам, выгрузка TXT/JSON; опциональное объяснение OpenAI или NVIDIA |
| Экспорт и воспроизводимость | Три итоговых CSV, JSON-отчёт, ZIP; командная строка и отдельный скрипт приёмочной проверки |
Свёрнутое боковое меню сохраняет логотип и значки разделов. Переход из очереди, кластера или справки на карту передаёт выбранного клиента либо группу. Фильтры карты меняют отображение; рассчитанные показатели клиента сохраняют привязку к полному загруженному набору.
Как определяются роли и приоритет
Основной алгоритм — явные правила из config/roles.json. Обученной модели классификации в проекте нет. Правила проверяются в порядке строк таблицы; если подходят несколько, выбирается первое.
| Роль в CSV | Интерпретация и основные условия по умолчанию |
|---|---|
coordinator | Структурный кандидат в координаторы: не менее 3 отправителей и 3 получателей, достижим из не менее 2 других исходных клиентов, положительная промежуточная центральность не ниже 90-го перцентиля её положительных значений |
distributor | Распределитель: не менее 10 разных получателей |
consolidator | Сборщик денег: не менее 5 отправителей, наблюдаемый расход/приход ≤ 0,3 |
transit | Транзит: есть входящие и исходящие связи, расход/приход от 0,8 до 1,2; отсутствует противоречие «весь расход раньше первого прихода» |
terminal | Наблюдаемый конечный получатель: положительный приход и отсутствие исходящих связей в доступной выборке |
peripheral | Недостаточно оснований для предыдущих ролей либо недостаточно наблюдений |
Перед этими правилами учитываются ограничения данных. Узлы четвёртого шага, изолированные клиенты и клиенты только с переводами самим себе получают peripheral. Для исходных клиентов (is_seed) роли consolidator, transit, terminal не назначаются: их входящие потоки неполны. Соотношение расхода и прихода используется только при положительном наблюдаемом приходе и допустимой полноте наблюдения.
role_score отражает силу соответствия правилу, а priority_score — отдельный приоритет проверки. Оба находятся в диапазоне 0–1 и не являются вероятностью противоправных действий.
Приоритет складывается из нормированных признаков: концентрация средств — 25%, входящая сумма — 15%, число отправителей — 15%, промежуточная центральность — 15%, достижимость от исходных клиентов — 15%, число получателей — 10%, PageRank — 5%. В интерфейсе доступны отдельные вклады. Точные пороги и параметры нормирования сохраняются в отчёте расчёта.
3. Как работает решение
- Входные данные. Аналитик открывает локальный кейс, загружает три Parquet-файла или выбирает встроенный синтетический пример.
- Валидация. Приложение проверяет данные и показывает ошибки и ограничения. При блокирующих ошибках анализ не запускается; строки не удаляются молча.
- Расчёт. Из связей строится направленный граф со всеми клиентами, включая изолированных. Рассчитываются метрики, временные признаки, кластеры, роли и приоритеты.
- Исследование. Аналитик выбирает клиента в очереди, переходит на карту, изучает операции, окружение и обоснование роли. При необходимости открывает весь кластер.
- Результат. Аналитик получает справку и выгружает три CSV для дальнейшей проверки. Дополнительный LLM-комментарий не меняет рассчитанные роли и рейтинг.
| Раздел интерфейса | Назначение |
|---|---|
| Шолу | Обзор и запуск анализа |
| Тексеру кезегі | Очередь проверки |
| Желі картасы | Карта финансовых связей |
| Кластерлер | Группы и их потоки |
| Анықтама | Справка и дополнительное LLM-объяснение |
| Деректер және экспорт | Данные, качество и выгрузка результатов |
4. Технологии
| Компонент | Технологии и применение |
|---|---|
| Язык и среда | Python; проверенная среда — Windows x64, Python 3.14.3 |
| Веб-приложение | Streamlit 1.64.0, состояние пользовательской сессии |
| Данные | pandas 3.0.6 и PyArrow 25.0.1: таблицы и Parquet; NumPy 2.5.3 и SciPy 1.18.1: численные зависимости анализа |
| Графовые алгоритмы | NetworkX 3.7: направленный граф, взвешенный PageRank, точная невзвешенная betweenness centrality, достижимость, компоненты и Louvain |
| Диаграммы и карта | Altair 6.3.0; собственный Streamlit-компонент на HTML/CSS/JavaScript с локальной vis-network 9.1.2 |
| Дополнительные API | HTTP-запросы через Requests 2.34.2 к OpenAI Responses API или NVIDIA API Catalog; модели и включение описаны ниже |
| Локальный учёт API | SQLite через стандартный модуль sqlite3: журнал запросов, токенов и расчётного бюджета |
| Проверки | pytest 9.1.1, Streamlit AppTest, имитации ответов провайдеров и независимая проверка CSV |
Все Python-зависимости закреплены в requirements.txt. Ресурсы карты хранятся в репозитории и не требуют CDN. Отдельная сборка Node.js, PHP, OSPanel, внешний сервер базы данных или GPU для запуска приложения не нужны.
5. Архитектура проекта
Веб-интерфейс и CLI используют одни и те же модули обработки данных и расчёта.
Три Parquet-файла
↓
data.py — чтение и валидация
↓
graph.py — направленный граф, метрики и даты
↓
roles.py + config/roles.json — роли, приоритеты, кластеры
├── UI → карта → карточка клиента
├── reports.py → CSV / JSON / ZIP
└── ai_facts.py → локальная справка
└── опционально: API → проверка ответа → LLM-текст
Louvain работает на взвешенной ненаправленной проекции графа с фиксированным seed=42. Исходный направленный граф сохраняется для анализа потоков. Кластеры Louvain и компоненты связности — разные сущности.
| Путь | Ответственность |
|---|---|
| app.py | Точка входа Streamlit, загрузка данных, обзор и навигация |
| moneymap/data.py | Валидация трёх входных таблиц |
| moneymap/graph.py | Граф, метрики клиентов, даты, пути и компоненты |
| moneymap/roles.py | Правила ролей, рейтинг, групповые потоки и чувствительность к параметрам |
moneymap/ui_*.py | Разделы интерфейса, оформление и состояние навигации |
moneymap/graph_view.py, moneymap/map_component.py, moneymap/graph_component/ | Подготовка отображаемого графа, обмен событиями с браузером и локальная карта |
moneymap/ai_*.py | Подготовка фактов, локальная справка, настройки, API, проверка ответа и бюджет |
| moneymap/reports.py | Формирование экспортируемых файлов |
| moneymap/main.py | CLI: demo, validate, analyze, run |
tests/, scripts/ | Автоматические тесты, приёмочная проверка и сборка архивов |
docs/ | Исследование кейса, аудит данных и отчёты проверок |
Загруженные через браузер данные и результаты работы интерфейса находятся в памяти сессии. CLI сохраняет результаты в указанную папку. Единственная встроенная база SQLite относится к учёту дополнительных API-запросов, а не к хранению банковских операций.
6. Установка и запуск
Требования
- Windows x64 и установленный Python 3.14 x64, доступный командой
python. Именно эта среда проверена в проекте. - PowerShell, браузер и распакованный проект.
- Интернет для первоначальной установки зависимостей, если нет подготовленной папки
wheelhouse. - Для реального кейса — три файла организатора. Для встроенного демо дополнительные файлы не нужны.
Обычный запуск
Откройте PowerShell в корне проекта, где находятся app.py и requirements.txt.
python --version
powershell -ExecutionPolicy Bypass -File .\setup.ps1
powershell -ExecutionPolicy Bypass -File .\start.ps1
setup.ps1 создаёт .venv и устанавливает зависимости. start.ps1 запускает Streamlit из этой среды.
Откройте http://127.0.0.1:8501. Оставьте терминал открытым; остановка сервера — Ctrl+C. При следующих запусках достаточно start.ps1. Если порт занят:
powershell -ExecutionPolicy Bypass -File .\start.ps1 -Port 8502
Подготовка данных
Создайте папку data/case и скопируйте туда файлы организатора без переименования:
data/case/
├── nodes.parquet
├── edges.parquet
└── transactions.parquet
В приложении появится кнопка «Берілген кейсті ашу» — «Открыть предоставленный кейс». Альтернатива: загрузить три файла в панели «Кейс деректері · ашу немесе ауыстыру» и нажать «Файлдарды тексеру» — «Проверить файлы».
data/ исключена из Git. После получения только исходного кода реальные данные нужно добавить отдельно. Готовые CSV не заменяют входные Parquet-файлы.
Установка без интернета
Если полученный offline-архив содержит папку wheelhouse, установите пакеты из неё:
powershell -ExecutionPolicy Bypass -File .\setup.ps1 -Wheelhouse .\wheelhouse
powershell -ExecutionPolicy Bypass -File .\start.ps1
Подготовленный набор wheel-пакетов предназначен для Windows x64 / Python 3.14. Сам Python и исходные данные в архив не входят. Проверка на macOS/Linux или другом физическом компьютере в текущем отчёте не заявлена.
Расчёт без браузера
.\.venv\Scripts\python.exe -m moneymap run --data-dir data/case --out output/submission/results
Команда проверяет данные, выполняет анализ и записывает три CSV и run_report.json. Для другой папки измените --data-dir. Дополнительно доступны --config config/roles.json и --top-n 50; минимальное запрашиваемое значение top-n — 20, а для меньшего набора выгружаются все клиенты.
Повторный запуск обновляет выходные отчёты. Если входные данные не проходят валидацию, новые результаты анализа не записываются, прежние файлы остаются в папке.
7. Как проверить решение: сценарий для жюри
Быстрая проверка без файлов организатора
- Запустите приложение и нажмите «Демо деректермен тексеру» — «Проверить на демоданных».
- На странице «Шолу» проверьте: 16 клиентов, 15 направленных связей, 17 операций. Это полностью синтетический пример.
- Нажмите «Талдауды бастау» — «Начать анализ».
- В «Тексеру кезегі» выберите клиента и нажмите «Желіде ашу →» либо выберите строку таблицы. Проверьте переход к нему на карте и числовое обоснование в карточке.
- На странице «Желі картасы» найдите клиента
1004через поле «Кез келген клиентті іздеу · gid» и кнопку «Картадан табу». Это изолированный исходный клиент: он остаётся в анализе, имеет рольperipheralи приоритет 0. - В «Анықтама» нажмите «Көмекшіге деректерді дайындау», затем «Анықтаманы дайындау · API-сыз». Справка должна сформироваться без API-ключа.
- Откройте «Деректер және экспорт» → «Экспорт» и скачайте CSV или ZIP. В
nodes_roles.csvиtop_nodes.csvдля этого небольшого примера должно быть по 16 строк данных.
Тот же пример можно проверить через CLI, указав ещё не существующую папку для генерации входных файлов:
.\.venv\Scripts\python.exe -m moneymap demo --output-dir data/jury-demo
.\.venv\Scripts\python.exe -m moneymap run --data-dir data/jury-demo --out output/jury-demo
demo отказывается перезаписывать существующие файлы. Для повторного анализа используйте вторую команду.
Проверка на исходном кейсе
Откройте файлы организатора и повторите анализ. Ожидаемые значения для исходного набора и текущей конфигурации зафиксированы в отчёте проверки версии:
| Контрольная точка | Ожидаемое значение |
|---|---|
| Клиенты / направленные связи / операции | 2 248 / 3 119 / 4 840 |
Исходные клиенты (is_seed) | 81 |
| Узлы четвёртого шага | 444; роль peripheral |
| Изолированные исходные клиенты | 19; все сохранены |
| Компоненты слабой связности, включая изолированных | 35 |
| Кластеры Louvain | 91 |
Строки данных в nodes_roles.csv / clusters.csv / top_nodes.csv | 2 248 / 91 / 30 |
Дополнительная проверка времени: найдите 100000005873152100. У него наблюдается расход 10 000 ₸ 3 июля 2026, а приход 10 000 ₸ — 5 июля. Карточка показывает временное противоречие, роль — peripheral. Равенство сумм само по себе не превращает такого клиента в транзитный узел.
Автоматические проверки
.\.venv\Scripts\python.exe -m pytest -q
.\.venv\Scripts\python.exe -m pip check
.\.venv\Scripts\python.exe scripts\verify_submission.py --data-dir data/case --out output/submission/results
Последняя команда дважды пересчитывает результаты из Parquet, проверяет схемы CSV, охват клиентов, диапазоны оценок, обоснования, кластерные суммы, порядок рейтинга и ограничение времени 300 секунд. Также сравниваются байты трёх CSV и хэши исходных файлов. Результат записывается в acceptance_report.json; успешное завершение отмечается PASS.
Внутри CLI-процессов проверяющий скрипт блокирует Python socket/DNS-вызовы. Это проверка отсутствия сетевых обращений расчёта, а не изоляция сети на уровне ОС. Интеграции LLM тестируются с имитацией ответов провайдеров; успешный реальный API-вызов этим не подтверждается.
8. Формат результатов
| Файл | Колонки |
|---|---|
nodes_roles.csv | gid, role, role_score, cluster_id, priority_score, evidence |
clusters.csv | cluster_id, n_nodes, n_seed, sum_kzt_internal, top_gids, hypothesis |
top_nodes.csv | rank, gid, role, priority_score, why |
На каждого входного клиента приходится ровно одна строка в nodes_roles.csv. evidence — непустое числовое обоснование длиной не более 200 символов. top_gids содержит JSON-список идентификаторов в текстовом представлении. CSV записываются в UTF-8 с BOM.
run_report.json содержит конфигурацию, пороги, нормирование, сводные показатели, групповые потоки и результаты проверки чувствительности. При запуске через CLI дополнительно сохраняются SHA-256 входных файлов и конфигурации, версии библиотек и время от чтения исходных данных до получения CSV.
Большие gid передаются в браузер строками для сохранения точности. При импорте CSV в Excel задавайте для идентификаторов текстовый тип, иначе длинные числа могут округлиться.
9. Данные и интеграции
Входные файлы
| Файл | Обязательные колонки | Содержание |
|---|---|---|
nodes.parquet | gid, depth, is_seed | Клиенты, шаг обнаружения 0–4, признак исходного клиента |
edges.parquet | src, dst, sum_kzt, n_tx, depth | Направленные пары, суммарный объём и число переводов, шаг обнаружения связи |
transactions.parquet | src, dst, date, sum_kzt | Отдельные переводы: отправитель, получатель, дата и сумма в тенге |
Источник реального набора — материалы организатора хакатона. Согласно аудиту входных данных, он содержит операции 1–31 июля 2026 года; наблюдаемая сумма — 365 890 012,01 ₸. Выборка ограничена одним банком, переводами от 5 000 ₸ и четырьмя шагами исходящих связей от начальных клиентов.
Валидатор проверяет обязательные колонки, пропуски, точность целочисленных ID, уникальность клиентов и агрегированных пар, наличие участников в nodes, положительные конечные суммы, число операций и даты. Агрегация транзакций по паре должна совпадать с edges по сумме и количеству. Веб-загрузка ограничена 20 МБ на файл.
Прямых интеграций с банковскими системами, внешними реестрами клиентов или потоками транзакций нет. Второй источник данных — встроенный генератор синтетического демо в moneymap/demo.py.
Дополнительное LLM-объяснение
API не обязателен для запуска и проверки основного решения. Граф, роли, кластеры, рейтинг, локальная справка и CSV рассчитываются без внешней модели. Для дополнительного объяснения достаточно одного доступного провайдера и его ключа; оба ключа одновременно не требуются.
| Провайдер | Реализованный API | Модель, закреплённая в коде |
|---|---|---|
| OpenAI | https://api.openai.com/v1/responses | gpt-4.1-mini-2025-04-14 |
| NVIDIA API Catalog | https://integrate.api.nvidia.com/v1/chat/completions | meta/llama-3.3-70b-instruct |
Фактический статус на 23 сентября 2026 года:
| Провайдер | Результат живой проверки | Что это означает для жюри |
|---|---|---|
| OpenAI | HTTP 401, ошибка аутентификации | С текущим ключом ответ не получен. Нужны корректные учётные данные и повторная проверка; причина ошибки не доказывает проблему баланса или конкретное состояние аккаунта |
| NVIDIA | HTTP 410 Gone | Закреплённая модель недоступна на используемом размещённом endpoint. В официальной карточке отмечено Free Endpoint Deprecated; замена одного ключа не гарантирует восстановление. Карточка NVIDIA |
Проверка использовала только синтетические демоданные. Выполнены по одному исходному и одному отдельному диагностическому запросу к каждому провайдеру — четыре запроса, без автоматических повторов. Ключи присутствовали в локальных настройках, но MONEYMAP_AI_ENABLED=false; для диагностики режим включался только внутри проверяющего процесса. Успешного LLM-ответа и оценки качества модели нет. Полные результаты: FINAL_CHECK_RU.md.
Настройка выбранного провайдера
Создайте локальный .env в корне проекта по образцу .env.example. Если файл уже есть, отредактируйте его, сохранив нужные настройки. Вставьте настоящий ключ вместо YOUR_...; ключи не следует помещать в README или Git. Для внешнего запроса нужны интернет и доступ к выбранной модели у провайдера.
Для OpenAI:
MONEYMAP_AI_ENABLED=true
OPENAI_API_KEY=YOUR_OPENAI_API_KEY
OPENAI_MODEL=gpt-4.1-mini-2025-04-14
Текущая конфигурация NVIDIA приведена для воспроизводимости; она не устраняет HTTP 410:
MONEYMAP_AI_ENABLED=true
NVIDIA_API_KEY=YOUR_NVIDIA_API_KEY
NVIDIA_MODEL=meta/llama-3.3-70b-instruct
Произвольная замена NVIDIA_MODEL в .env не поддерживается: код разрешает только закреплённую модель. Переход на другую модель требует изменения конфигурации в коде и проверки адаптера, формата ответа и лимитов. В текущей версии такая миграция не выполнена.
По умолчанию интеграция выключена. Переменные окружения процесса имеют приоритет над .env, включая явно пустые значения. Кнопка «API күйін жаңарту» перечитывает настройки, не отправляет пробный запрос и не подтверждает работоспособность ключа или модели.
Как проверить именно LLM-ответ
- Загрузите встроенное демо и выполните анализ по сценарию раздела 7.
- Откройте «Анықтама», нажмите «Көмекшіге деректерді дайындау», выберите тип справки и клиента, например
1005из демоданных. - Раскройте «Қосымша: LLM түсіндірмесі және баптаулар», выберите провайдера и нажмите «API күйін жаңарту» после изменения
.env. - Нажмите «AI түсіндірмесін алу». Только это действие запускает новый запрос; одинаковый уже успешно обработанный запрос может вернуться из сессионного кэша.
- При успешном новом ответе появляется «LLM түсіндірмесі алынды · талдаушы тексеруі қажет». Откройте «LLM мәтіні · автоматты расталмаған түсіндірме»: именно там расположен текст модели. Основная справка на странице остаётся локальной. Сообщение «Кэштен алынды · жаңа сұрау жоқ» означает, что новый сетевой запрос не выполнялся.
- При ошибке приложение показывает предупреждение и локальную справку. Наличие справки после ошибки не подтверждает успех API. Для гарантированной демонстрации без сети используйте «Анықтаманы дайындау · API-сыз».
Шаги 4–5 описывают ожидаемое поведение при доступном провайдере; контрольная проверка текущих ключей и моделей завершилась ошибками из таблицы выше.
| Ситуация | Что проверить |
|---|---|
| Кнопка запроса недоступна | MONEYMAP_AI_ENABLED=true, ключ выбранного провайдера, формат .env, переменные окружения |
| Ошибка аутентификации / HTTP 401 или 403 | Корректность ключа и доступ к модели; не публикуйте ключ при диагностике |
| HTTP 410 у текущей NVIDIA-модели | Прекращение доступа к endpoint; требуется отдельная миграция интеграции |
| Лимит провайдера / HTTP 429 | Ограничения запросов или кредита в аккаунте провайдера |
| Сетевая ошибка или таймаут | Доступ к интернету и сервису; автоматического повтора нет |
| Ответ не принят | JSON, ссылки на факты или значения не прошли проверку; такой текст не используется |
| Локальный лимит запросов, токенов или бюджета | Настройки MONEYMAP_AI_MAX_REQUESTS, MONEYMAP_AI_MAX_TOTAL_TOKENS, MONEYMAP_AI_BUDGET_USD и журнал в дополнительном разделе |
LLM получает ограниченный набор рассчитанных фактов с обозначениями вида C001. Исходные Parquet-файлы и таблица соответствия полным gid не передаются; сами финансовые показатели остаются реальными данными. Ответ проверяется по структуре JSON, ссылкам на факты и допустимым числовым значениям. Такая проверка не гарантирует истинность всех смысловых выводов модели.
Доступны пять заданий: объяснение клиента, краткая справка о нём, приоритетные клиенты, обзор кластера и общие получатели выбранных клиентов. Свободного чата с произвольными запросами нет. Локальная справка строится из фактов Python-кодом и не является LLM-ответом.
Настройки по умолчанию: 20 запросов, 200 000 учитываемых/резервируемых токенов и $1 расчётного бюджета OpenAI. Это локальные ограничения приложения, не баланс и не платёжный лимит аккаунта провайдера. Для NVIDIA неизвестная денежная стоимость не подменяется оценкой; действуют ограничения запросов и токенов. Число запросов и токены учитываются совместно для обоих провайдеров в output/ai/usage.sqlite3; история сохраняется после перезапуска или замены ключа. Неудачные попытки тоже учитываются, а неизвестный расход сохраняется как резерв. Автоматических повторных запросов нет. .env и журнал расходов исключены из передаваемых сборок.
10. Ограничения текущей версии
- Неполная финансовая картина. Нет переводов ниже 5 000 ₸, других банков и операций вне выбранного месяца. Клиентские профили, назначения платежей, остатки и подтверждённые роли отсутствуют. Полное выявление дробления сумм невозможно.
- Граница графа. Исходящие операции 444 клиентов четвёртого шага не раскрыты. Нельзя считать их конечными получателями только из-за отсутствия видимого расхода. Входящие потоки исходных клиентов также неполны; превышение расхода над приходом само по себе не доказывает аномалию.
- Ограниченная временная детализация. Есть даты, но нет времени внутри дня. Структурный путь не доказывает движение одних и тех же денег по цепочке. Проверка дат отсекает часть противоречий, но не выполняет точное сопоставление входящих и исходящих средств.
- Оборот не равен остатку или преступному доходу. Одна сумма может учитываться повторно на разных шагах. Внешний поток кластера означает связь с другим кластером внутри наблюдаемого графа, а не перевод в другой банк.
- Нет эталонной разметки. Роли и групповые гипотезы основаны на правилах; accuracy, precision и полнота выявления организаторов не измерены. Чувствительность к параметрам не заменяет оценку качества на размеченных данных.
- Неоднозначные повторения операций. В исходном наборе сохранены 97 дополнительных строк с совпадающими реквизитами. Без уникального ID транзакции нет оснований автоматически удалять их как ошибки.
- Масштабирование не подтверждено. Pandas и NetworkX держат данные в памяти, точная betweenness дорога на больших графах, полная карта передаётся браузеру. Проверки на миллион узлов нет.
- Локальный прототип. Нет пользовательских аккаунтов, разграничения прав и совместного ведения расследований. Нет подключения к банковской АБС, автоматического блокирования счетов или симуляции разрушения сети. Рабочее состояние интерфейса не заменяет постоянное хранилище кейсов.
- Язык и внешние модели. Интерфейс и обоснования — на казахском; переключатель на русский не реализован. Дополнительные API требуют ключей, интернета и отдельной проверки доступности. Собственная нейросеть не обучалась.
11. Развёрнутая версия и материалы проекта
Подтверждённая публичная deployed-версия в репозитории не указана. В текущей конфигурации сервер привязан к 127.0.0.1. Адрес http://127.0.0.1:8501 доступен локально после запуска и не является публичной ссылкой для жюри.
Дополнительные материалы, преимущественно на казахском языке:
- Финальная контрольная проверка и статус API, 23.09.2026.
- Разбор кейса и требований.
- Аудит исходных данных.
- Отчёт о текущей версии и выполненных проверках.
- Схема архитектуры в HTML.
Для подготовки архива после успешной приёмочной проверки:
.\.venv\Scripts\python.exe scripts\package_submission.py
Архив создаётся в output/submission/ и включает код, документацию, тесты, ресурсы карты и подготовленные результаты. Сборка исключает исходные Parquet, .env, ключи, виртуальную среду и журнал API-расходов. Для демонстрации реального кейса исходные три файла нужно передать отдельно. Папка output/ исключена из Git; результаты и архивы можно воспроизвести командами выше.
Авторы коммитов
История коммитов
- 2026-09-23 17:53docs: identify exact revision used for final checksYernur Noraly
- 2026-09-23 17:52docs: record final verification and live API limitationsYernur Noraly
- 2026-09-23 17:43qweYernur Noraly
- 2026-09-23 17:40Replace main project with current MoneyMap workspaceYernur Noraly
- 2026-09-23 17:40docs: add Russian README for hackathon juryYernur Noraly
- 2026-09-23 17:29qweYernur Noraly
- 2026-09-23 16:41Complete investigation tools and expert review workflowCodex
- 2026-09-23 16:30Add investigation lab, graph insights and local AI assistantCodex
Все коммиты (13)
- 2026-09-23 15:48qweYernur Noraly
- 2026-09-23 15:17version 2Yernur Noraly
- 2026-09-23 14:55Deliver AQSHA TRACE AML graph analysis workspaceCodex
- 2026-09-23 14:51Merge pull request #1 from BAITC-Hacks/version_1Yernur Noraly
- 2026-09-23 14:41version_1Yernur Noraly
Структура репозитория (68 файлов)
.env.example .gitignore .streamlit/config.toml README.md app.py config/roles.json docs/ARCHITECTURE.md docs/CASE_COMPLIANCE_REVIEW_KK.md docs/CASE_RESEARCH_KK.md docs/DEMO.md docs/FINAL_CHECK_RU.md docs/INPUT_AUDIT.md docs/JURY_QA.md docs/RELEASE_REVIEW_KK.md docs/ROADMAP.md docs/STAGE2.md docs/STAGE3.md docs/STAGE4.md docs/STAGE5.md docs/STAGE6.md docs/VERIFICATION.md docs/architecture.html docs/architecture.svg moneymap/__init__.py moneymap/__main__.py moneymap/ai_budget.py moneymap/ai_facts.py moneymap/ai_provider.py moneymap/ai_response.py moneymap/ai_service.py moneymap/ai_settings.py moneymap/data.py moneymap/demo.py moneymap/graph.py moneymap/graph_component/graph.css moneymap/graph_component/graph.js moneymap/graph_component/index.html moneymap/graph_view.py moneymap/map_component.py moneymap/reports.py moneymap/roles.py moneymap/ui_ai.py moneymap/ui_design.py moneymap/ui_graph.py moneymap/ui_map.py moneymap/ui_roles.py moneymap/ui_state.py pytest.ini requirements.txt scripts/package_submission.py scripts/verify_submission.py setup.ps1 start.ps1 tests/test_ai_app.py tests/test_ai_budget.py tests/test_ai_facts.py tests/test_ai_provider.py tests/test_ai_response.py tests/test_ai_service.py tests/test_ai_settings.py tests/test_app.py tests/test_cli.py tests/test_data.py tests/test_graph.py tests/test_graph_view.py tests/test_map_component.py tests/test_roles.py tests/test_submission_verifier.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.