О проекте
Команда: Cyberplusr
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Рабочий MVP
Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)
Суть
Локальное рабочее место AML-аналитика: направленный граф переводов до 4 переходов, гипотезы ролей, кластеры и объяснимая очередь проверки с ИИ-помощником на OpenAI.
Как устроено
pipeline.py на pandas+NetworkX читает parquet организаторов, строит направленный граф, считает метрики (в т.ч. точное посредничество), кластеры Louvain (seed=42) и правила ролей (rules.py) с вкладом пяти признаков в приоритет; выгружает nodes_roles.csv, clusters.csv, top_nodes.csv. Интерфейс React+TypeScript+React Flow показывает окружение узла, фильтры, карточку и таблицу. Опциональный агент на OpenAI отвечает в чате по фактам графа после согласия пользователя.
Ключевые решения
- NetworkX
- Louvain
- betweenness centrality
- эвристические правила ролей
- объяснимый priority score
Особенности
Честно описаны ограничения: role_score — сила эвристики, не вероятность; временное совпадение не доказывает передачу тех же денег. Запрос согласия перед отправкой фактов графа в OpenAI. README содержит неразрешённые маркеры merge-конфликта.
Стек
Python · pandas · NetworkX · React · TypeScript · React Flow · Vite · Tailwind
Модели
OpenAI
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-cbd25be5-cyberplusr.
README
README.md<<<<<<< HEAD
hack-cbd25be5-cyberplusr
Hackathon team repository for Cyberplusr dg
Граф денег — Cyberplus / HackAlem AI
Добавлен минимальный OpenAI-агент: чат, чтение счетов и связей, объяснение очереди проверки. Для включения нужен локальный .env с OPENAI_API_KEY. Кнопка — «ИИ-помощник» внизу справа. Перед отправкой интерфейс запрашивает разрешение на передачу выбранных фактов графа в OpenAI.
Локальное рабочее место AML-аналитика: направленный граф переводов до четырёх переходов, гипотезы ролей, кластеры и объяснимая очередь проверки. React + TypeScript + React Flow; Python + pandas + NetworkX.
Быстрый запуск на этом компьютере
В терминале VS Code (PowerShell):
cd C:\Users\nurik\hack-cbd25be5-cyberplusr
.\.venv\Scripts\python.exe run.py --port 5176
Открыть http://127.0.0.1:5176. Если сервер уже запущен, просто открыть адрес. Остановка — Ctrl+C; занятый порт заменить, например, на 5177. Также можно дважды нажать START.cmd (порт 5173).
Команда пересчитывает данные, собирает интерфейс и запускает сервер только на localhost. Первичная установка зависимостей не входит в запуск.
Установка с чистого клона
Нужны Node.js 20+ и Python 3.12. В корне репозитория:
npm.cmd ci
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
Распаковать предоставленные организаторами nodes.parquet, edges.parquet и transactions.parquet непосредственно в data/. Затем запустить run.py, как выше. Можно передать другую папку: --data "C:\путь\data".
PowerShell может блокировать npm.ps1: используйте npm.cmd. Активация виртуального окружения и изменение политики выполнения PowerShell не нужны.
Для разработки только интерфейса: npm.cmd run dev. Без локального graph_export.json интерфейс показывает явно обозначенный синтетический пример; реальный граф появляется после запуска pipeline.py или run.py. Чистая установка на другом компьютере ещё не проверена.
Использование
- Поиск по полному gid открывает узел и сбрасывает фильтры.
- Фильтры: роли, кластер, глубина 0–4. Глубина 0 — исходные seed.
- Окружение: 16, 40 или все прямые соседи; слева входящие, справа исходящие. Стрелки сохраняют направление. Узлы можно перемещать, масштабировать и центрировать кнопкой fit view.
- Обзор: первые 120 узлов по приоритету среди прошедших фильтры. Таблица включает все прошедшие фильтры узлы.
- Цвет по роли или кластеру; суммы на связях включаются отдельно.
- Карточка показывает метрики, объяснение роли и вклад пяти признаков в приоритет.
- Три ссылки CSV выгружают полный рассчитанный результат, независимо от фильтров.
Расчёт и результаты
.\.venv\Scripts\python.exe run.py --no-serve
.\.venv\Scripts\python.exe verify_outputs.py
.\.venv\Scripts\python.exe -m unittest -v test_pipeline
.\.venv\Scripts\python.exe audit_model.py
Выходы в public/results/: nodes_roles.csv (все узлы), clusters.csv (кластеры), top_nodes.csv (топ-50), validation.json. Дополнительный аудит создаёт model_audit.json и CASE_REVIEW.md с примерами ролей для проверки. src/data/graph_export.json подключается к интерфейсу при сборке. В JSON gid хранится строкой; CSV в Excel импортируйте с типом «текст» для gid, иначе длинный идентификатор потеряет точность.
Формулы и ограничения · Архитектура · Демонстрация за 5 минут · Проверки и чувствительность.
Ограничения
Правила объяснимы, но не обучены на размеченных ролях: role_score — эвристическая сила подтверждения, не вероятность. Приоритет — очередь ручной проверки, не вывод о виновности. Выборка ограничена июлем 2026, внутрибанковскими переводами от 5 000 KZT и четырьмя исходящими переходами. Отсутствие выхода на глубине 4 означает обрыв наблюдения. Вход неполон, в том числе у seed. Временное совпадение не доказывает передачу тех же денег; суммы на пути нельзя складывать как независимые средства.
Точное посредничество NetworkX и включение JSON в JS подходят для текущего набора, но не для миллиона узлов. Для роста нужны пакетные агрегации Arrow/DuckDB, приближённое посредничество, igraph/NetworKit, локальный API с выдачей окружения и постраничной таблицей. Размер JS-сборки вызывает предупреждение Vite; это известное ограничение прототипа.
Git и воспроизводимость
Исходники и синтетический пример входят в Git. Исходные Parquet, рассчитанные CSV/JSON, dist/, .venv/ и node_modules/ исключены. Не публикуйте готовый dist с реальными финансовыми данными. Зависимости зафиксированы requirements.txt и package-lock.json. Louvain использует seed=42, resolution=1. При равном приоритете порядок определяется gid.
cd7b4d8da8323406ff5ac2e4e6eb55b82fce342f
Авторы коммитов
История коммитов
- 2026-09-23 17:29Resolve merge conflictikon
- 2026-09-23 17:24Save local changesikon
- 2026-09-23 16:43Add OpenAI graph assistantNurbek
- 2026-09-23 16:27Add OpenAI graph assistantNurbek
- 2026-09-23 15:34Add AML graph analysis and interfaceNurbek
Структура репозитория (44 файлов)
.env.example .gitignore README-AML.md README.md START.cmd START.txt agent_server.py audit_model.py build.mjs docs/AGENT.md docs/ARCHITECTURE.md docs/DEMO.md docs/VALIDATION.md index.html package-lock.json package.json pipeline.py postcss.config.js public/METHOD.md requirements.txt rules.py run.py src/App.tsx src/components/AgentChat.tsx src/components/Filters.tsx src/components/GraphView.tsx src/components/Legend.tsx src/components/NodeCard.tsx src/components/PriorityTable.tsx src/components/TopBar.tsx src/data/mockData.ts src/data/realData.ts src/index.css src/main.tsx src/roles.ts src/types.ts src/utils/format.ts src/vite-env.d.ts tailwind.config.js test_agent.py test_pipeline.py tsconfig.json verify_outputs.py vite.config.ts
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.