AAYMA
RU
Войти

Граф денег — Cyberplus

Локальное рабочее место AML-аналитика: направленный граф переводов до 4 переходов, гипотезы ролей, кластеры и объяснимая очередь проверки с…

Рабочий MVP
Команда «Cyberplusr» 11💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: 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

Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
5
Авторы
2
Файлы
44
Ветки
1

Авторы коммитов

Nurbek 3ikon 2

История коммитов

  • 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 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.