О проекте
Команда: Fusion
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Рабочий MVP
Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)
Суть
AML-инструмент, который превращает сеть транзакций в очередь проверки с приоритетами. Строит направленный граф переводов, определяет структурные роли (consolidator, транзитный, распределяющий узел и другие), делит сеть на кластеры Louvain и выдаёт Top-20 с объяснением priority score.
Как устроено
Три parquet-файла (nodes, edges, transactions) проходят проверку данных, из них в NetworkX строится направленный граф. Из графа считаются признаки, детерминированные правила ролей и priority score из пяти составляющих с понижающим множителем наблюдаемости для узлов на границе данных (depth). Кластеры находятся методом Louvain. Pipeline записывает nodes_roles.csv, clusters.csv, top_nodes.csv и run_report.json. FastAPI отдаёт данные в React с графом на Cytoscape.js. OpenAI Responses API только объясняет уже посчитанные факты, при недоступности основной расчёт продолжает работать.
Ключевые решения
- NetworkX
- Louvain
- направленный граф транзакций
- rule-based роли узлов
- priority score с поправкой на наблюдаемость
- Cytoscape.js
- grounded LLM-объяснения
Особенности
Приоритет учитывает ограничения наблюдаемости: для узлов на границе выборки (depth=4) применяется понижающий множитель, изолированные seed не помечаются как terminal по ошибке. README содержит конкретные проверочные GID с ожидаемыми значениями. По заявлению команды: 2248 узлов, 88 кластеров, 34 проверки данных и 99 из 99 тестов. Можно загрузить свой набор parquet или ZIP.
Стек
Python 3.12 · pandas · PyArrow · NetworkX · SciPy · FastAPI · React · TypeScript · Vite · Cytoscape.js · unittest
Модели
OpenAI Responses API
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-6480017d-fusion.
README
README.mdFusion — кого проверить первым?
Fusion — аналитический инструмент для AML-аналитика банка. Он превращает транзакционную сеть в приоритизированную очередь проверки и отвечает на главный вопрос:
Кого из клиентов проверять первым и почему?
На исходном наборе Fusion анализирует 2 248 участников, строит направленный граф переводов, определяет роли, кластеры и Top-20 по приоритету. Основные расчёты выполняются локально и не зависят от LLM.
1. Что решает продукт
AML-аналитик получает список уже известных клиентов и должен вручную восстановить, куда идут деньги, где они концентрируются, через какие узлы проходят и кого проверять дальше.
Fusion автоматизирует этот этап.
Система:
- строит направленный граф денежных переводов;
- выделяет структурные роли участников;
- группирует сеть по кластерам;
- формирует Top-20 узлов для первичной проверки;
- показывает входящие и исходящие связи, суммы и количество операций;
- объясняет, из каких факторов сформирован priority score;
- показывает ограничения наблюдаемости данных.
Для выбранного GID аналитик видит:
- роль;
- место в общем рейтинге;
- priority score;
- входящие и исходящие денежные потоки;
- кластер;
- объяснение роли и приоритета;
- ограничения данных.
Бизнес-результат
Fusion сокращает время на:
- ручную трассировку цепочек переводов;
- поиск точек консолидации;
- поиск транзитных и распределяющих узлов;
- поиск структурно значимых участников;
- первичную приоритизацию AML-проверки.
Система не принимает решение о виновности клиента и не заменяет AML-аналитика.
Fusion формирует аналитическую гипотезу и показывает, куда смотреть в первую очередь. Решение об углублённой проверке и дальнейших действиях остаётся за AML-аналитиком.
2. Как запустить
Требования:
- Python 3.12
- Node.js 22
- Git
Команды выполнять из корня проекта.
1. Получить код и установить зависимости
git clone https://github.com/BAITC-Hacks/hack-6480017d-fusion.git Fusion
cd Fusion
python3.12 -m venv .venv
.venv/bin/python -m pip install -r backend/requirements-dev.txt
npm --prefix frontend ci
2. Положить исходные данные в data/
data/
├── nodes.parquet
├── edges.parquet
└── transactions.parquet
3. Рассчитать результаты и запустить приложение
macOS / Linux
source .venv/bin/activate
Windows PowerShell
.venv\Scripts\Activate.ps1
:: Windows CMD .venv\Scripts\activate.bat
.venv/bin/python -m backend.pipeline
.venv/bin/python scripts/run_local.py
Открыть:
Проверка уже запущенного приложения:
.venv/bin/python scripts/run_local.py --check
Для основного расчёта и интерфейса OpenAI-ключ не требуется.
Если хотите проверить Fusion на другом наборе данных, в интерфейсе нажмите «Данные» и загрузите либо 3 файла Parquet (nodes.parquet, edges.parquet, transactions.parquet), либо один ZIP-архив, содержащий эти три файла.
3. Какие технологии используются
flowchart LR
D[3 Parquet] --> A[Проверка данных]
A --> G[Направленный граф]
G --> C[Признаки, роли, priority]
G --> L[Louvain clustering]
C --> F[3 CSV]
C --> B[FastAPI]
L --> B
B --> U[React + Cytoscape]
B --> O[OpenAI explanation]
O --> U
Основной стек:
- Python 3.12
- pandas / PyArrow — обработка parquet
- NetworkX / SciPy — графовая аналитика
- FastAPI — backend
- React + TypeScript + Vite — frontend
- Cytoscape.js — визуализация графа
- Louvain — кластеризация
- OpenAI Responses API — дополнительное объяснение рассчитанных фактов
AI не определяет роли и не рассчитывает priority score. Если OpenAI недоступен, основной pipeline, интерфейс и CSV продолжают работать.
Структура проекта:
backend/ — расчёты, API, AI
frontend/ — интерфейс и граф
data/ — исходные parquet
artifacts/ — результаты расчёта
docs/ — методика, аудит и demo
4. Как проверить решение
Шаг 1. Запустить полный расчёт
.venv/bin/python -m backend.pipeline
После запуска должны появиться:
artifacts/nodes_roles.csv
artifacts/clusters.csv
artifacts/top_nodes.csv
artifacts/run_report.json
Ожидаемый результат на исходном наборе:
nodes_roles.csv— 2 248 строк;clusters.csv— 88 кластеров;top_nodes.csv— не менее 20 узлов;- обязательные поля заполнены;
- расчёт укладывается в лимит 5 минут.
Шаг 2. Запустить автоматические проверки
.venv/bin/python -m backend.audit
.venv/bin/python -m unittest discover -s backend/tests -v
.venv/bin/python -m pip check
npm --prefix frontend run build
Актуальный подтверждённый прогон:
- 34 проверки данных;
- 99/99 backend-тестов;
- frontend production build — успешен.
Шаг 3. Проверить интерфейс за 3 минуты
В сводке должно быть:
- 2 248 участников;
- 3 119 связей;
- 4 840 транзакций;
- 81 seed;
- Top-20 по приоритету проверки.
Проверочный GID:
100000004015047100
Ожидается:
- роль:
consolidator; - priority:
0.625090; - место:
5 из 2248; - 9 плательщиков / 1 получатель;
- 919 104 / 69 195 KZT;
- видны пять составляющих priority;
- видны полные входящие и исходящие связи.
Проверка границы данных:
100000008175078100
Должен отображаться статус depth=4 и понижающий множитель наблюдаемости.
Проверка изолированного seed:
100000000456947100
Должен отображаться нулевой приоритет и отсутствие наблюдаемых потоков без ошибочной классификации как terminal.
Проверка кластера:
- выбрать Cluster 0;
- ожидается 278 участников;
- 1 seed;
- внутренний оборот 31 237 334,24 KZT;
- доступны лидеры и гипотеза кластера.
Главный критерий проверки
После выбора любого GID должно быть понятно:
Почему этот участник получил такую роль и почему AML-аналитику предлагается проверить его с таким приоритетом?
Документация
docs/METHODOLOGY.md— правила ролей и priority;docs/DATA_AUDIT.md— аудит данных;docs/DEMO.md— сценарий демонстрации;docs/PROGRESS.md— текущий статус проекта.
Авторы коммитов
История коммитов
- 2026-09-23 17:57Update README with virtual environment activation instructionsdimka077
- 2026-09-23 17:51docs: publish updated project READMEummvvaa
- 2026-09-23 17:45data: include original HackAlem parquet datasetDinmukhammed Begali
- 2026-09-23 17:37feat: import validated datasets and document current Fusion workflowummvvaa
- 2026-09-23 17:17Redesign Fusion as a compact dark AML workspaceDinmukhammed Begali
- 2026-09-23 16:53Expose complete node flows, priority evidence and observation coverageummvvaa
- 2026-09-23 16:35Audit Fusion pipeline, ranking robustness and submission readinessDinmukhammed Begali
- 2026-09-23 16:18Add grounded OpenAI analysis, compact dialog and complete MVP guideummvvaa
Все коммиты (13)
- 2026-09-23 15:54Document local launch, API settings and alternating team commitsDinmukhammed Begali
- 2026-09-23 15:48Add interactive transaction graph, node analysis and CSV exportsummvvaa
- 2026-09-23 15:23feat: add deterministic role analysis and CSV pipelineummvvaa
- 2026-09-23 15:04test: verify Fusion stage one and restore progress reportummvvaa
- 2026-09-23 14:45feat: add Fusion stage-one app and team Git workflowummvvaa
Структура репозитория (83 файлов)
.gitignore AGENTS.md MANIFEST.json README.md START_HERE.md artifacts/.gitkeep backend/.env.example backend/__init__.py backend/ai_config.py backend/ai_evidence.py backend/ai_models.py backend/ai_providers.py backend/ai_service.py backend/analysis_config.py backend/analysis_service.py backend/app.py backend/audit.py backend/datasets.py backend/features.py backend/pipeline.py backend/requirements-dev.txt backend/requirements.in backend/requirements.txt backend/roles.py backend/serialization.py backend/tests/__init__.py backend/tests/test_ai_evidence.py backend/tests/test_ai_providers.py backend/tests/test_ai_service.py backend/tests/test_analysis_api.py backend/tests/test_api.py backend/tests/test_audit.py backend/tests/test_datasets_api.py backend/tests/test_node_details_api.py backend/tests/test_pipeline.py backend/tests/test_serialization.py backend/validate_ai.py data/README.md data/edges.parquet data/nodes.parquet data/transactions.parquet docs/AI_DESIGN.md docs/AI_VALIDATION.md docs/COLLABORATION.md docs/DATA_AUDIT.md docs/DATA_NOTES.md docs/DEMO.md docs/LOCAL_SETUP.md docs/METHODOLOGY.md docs/PLAN.md docs/PROGRESS.md docs/TECHNICAL_AUDIT.md docs/case.md docs/dataset.md frontend/index.html frontend/package-lock.json frontend/package.json frontend/src/AiPanel.tsx frontend/src/App.tsx frontend/src/ClusterSummary.tsx frontend/src/DatasetPanel.tsx frontend/src/NetworkGraph.tsx frontend/src/NodeFlows.tsx frontend/src/PriorityExplanation.tsx frontend/src/ai.css frontend/src/aiApi.ts frontend/src/api.ts frontend/src/cluster-summary.css frontend/src/dataset.css frontend/src/datasetApi.ts frontend/src/main.tsx frontend/src/node-flows.css frontend/src/presentation.ts frontend/src/priority-explanation.css frontend/src/styles.css frontend/tsconfig.json frontend/vite.config.ts prompts/01_START.md prompts/UPDATE_TWO_PROVIDERS.md scripts/run_local.py starter/README.md starter/requirements.txt starter/starter.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.