AAYMA
RU
Войти

Money Graph · Граф денег

Инструмент объяснимой AML-аналитики графа переводов: роли клиентов, сообщества, Top-20 для ручной проверки и три CSV, интерактивный граф в Streamlit…

Доведённый продукт
Команда «Pied Piper» 53💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Pied Piper
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Доведённый продукт

Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)

Суть

Инструмент объяснимой AML-аналитики графа переводов: роли клиентов, сообщества, Top-20 для ручной проверки и три CSV, интерактивный граф в Streamlit и эксперимент устойчивости сети.

Как устроено

Pipeline читает nodes/edges/transactions.parquet (2 248 клиентов, 3 119 связей), считает метрики узлов, присваивает 6 объяснимых rule-based ролей, выделяет 105 сообществ и ранжирует по priority_score с текстовыми объяснениями; независимый validator проверяет выходные CSV. Streamlit UI с перетаскиваемым офлайн-графом, API и durable worker; what-if «исключение ключевых узлов» сравнивает удаление top-N по приоритету и по обороту (размер крупнейшей компоненты, изоляты).

Ключевые решения

  • rule-based роли узлов
  • выделение сообществ
  • приоритизация узлов
  • анализ устойчивости сети (удаление top-N)
  • независимая валидация выходных CSV

Особенности

Эксперимент устойчивости сети: сравнение удаления top-N по приоритету против top-N по обороту показывает ценность ранжирования; отдельный validator и SHA-аудит опубликованного результата.

Стек

Python 3.12 · Streamlit · Parquet · Docker Compose · Makefile · uv · pytest


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-4c401bd7-pied-piper.

README

README.md

Money Graph — HackAlem AI · трек Freedom · команда Pied Piper

Money Graph · Граф денег

HackAlem AI · Трек Freedom · Команда Pied Piper
Объяснимая аналитика денежных потоков — от переводов до очереди ручной проверки.

HackAlem AI 2026 Трек Freedom Python 3.12 Docker Compose Объяснимые правила

Запустить · Методология · Демо для жюри · Backend / API · Вся документация

ДанныеАналитикаРезультат
2 248 клиентов · 3 119 связей6 объяснимых ролей · 105 сообществTop-20 для проверки · 3 CSV

Кейс трека Freedom: восстановление финансовой структуры по графу переводов. Разработано на HackAlem AI, Астана, 23 сентября 2026.

Организаторы и партнёры HackAlem AI

Среди организаторов и партнёров мероприятия на официальном сайте HackAlem AI указаны Astana Hub, Silkroad Innovation Hub, OpenAI и BAITC.

Astana Hub — партнёр мероприятия Silkroad Innovation Hub — партнёр мероприятия OpenAI — партнёр мероприятия BAITC — партнёр мероприятия


Локальный инструмент объяснимой AML-аналитики графа переводов команды Pied Piper. Роли и приоритеты — сигналы для ручной проверки, а не доказательства нарушения.

Эксперимент устойчивости сети

В «Сеть и сообщества» → «Устойчивость сети: исключение ключевых узлов» можно исключить top-1/3/5/10 клиентов по приоритету и сравнить результат с отбором по обороту. Показаны размер крупнейшей группы, новые изоляты, доля разобщённых пар оставшихся клиентов, затронутые суммы и списки gid. Расчёт использует полную сеть независимо от фильтров, не меняет роли и CSV. Это симуляция наблюдаемого графа, не рекомендация блокировки и не оценка предотвращённого ущерба. Метод и ограничения.

Структура

backend/             API, worker, pipeline и независимый validator
  core/              загрузка, контракты, графовая аналитика, экспорт и чтение результатов
frontend/            Streamlit, визуализация графа и HTML-шаблон
docs/                архитектура, методология, контракты и отчёты аудита
tests/               аналитические, API, UI и интеграционные проверки
scripts/             служебные команды запуска и проверки
data/                исходные Parquet для сдачи (включены в Git)
outputs/             проверенный результат и current.json (включены в Git)
.streamlit/          настройки Streamlit для запуска из корня проекта
Dockerfile           общий runtime-образ и отдельная стадия tests
compose.yaml         UI, подготовка результатов, API, worker и CLI
requirements.lock    закреплённые зависимости общего Python-окружения

Все команды выполняются из корня репозитория. Используется Python 3.12. UI читает опубликованные файлы напрямую; API и worker работают отдельным сервисом.

Локальный запуск

Windows PowerShell (нужен uv):

.\make.cmd setup
.\make.cmd demo

Синтетический демонабор создаётся локально и не требует исходных данных. Предоставленные nodes.parquet, edges.parquet и transactions.parquet уже включены в data/. Для повторного расчёта:

.\make.cmd run

Linux/macOS: make setup, затем make demo или make run. Интерфейс: http://localhost:3000. Для существующих результатов — make ui / .\make.cmd ui. API и worker: make backend / .\make.cmd backend (порт 8000).

Прямые команды после активации окружения:

python -m backend.pipeline --data data --out outputs
python -m backend.validate --data data --out outputs
python -m streamlit run frontend/app.py --server.port 3000 -- --outputs outputs
python -m backend
python -m pytest -q

Docker

Три входных Parquet для UI уже включены в data/:

docker compose build ui
docker compose up -d --no-build --pull never

prepare рассчитывает результаты в именованном volume results либо проверяет существующую публикацию. ui запускается после успешной проверки на http://localhost:3000.

docker compose run --rm validate
docker compose run --rm --no-deps pipeline
docker compose --profile backend up -d api worker
docker compose build tests
docker compose run --rm tests
docker compose down

API доступен на http://localhost:8000. API/worker используют отдельный volume backend-state, UI — results. Локальный outputs/ не является Docker volume. Остановка через down сохраняет volumes. Данные и результаты не включаются в образ.

Аудит и документация

Исходные данные, результаты, окружения, runtime и кэши исключены из Git. На чистом клоне исходные данные предоставляются отдельно; тесты реальных данных требуют локального набора. Исторические отчёты описывают проверки указанных в них версий и не заменяют новый прогон. Ранее закоммиченные данные остаются в истории Git.

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

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

asari92 22TheKasymov 19Azekaaa 10

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

  • 2026-09-23 17:47fix: restore official data and validated submission bundleasari92
  • 2026-09-23 17:46Merge remote-tracking branch 'origin/main'Azekaaa
  • 2026-09-23 17:41feat: compare network resilience by priority and turnoverAzekaaa
  • 2026-09-23 17:41Merge team branding into structured project documentationTheKasymov
  • 2026-09-23 17:40Merge team role explanations into reorganized packagesTheKasymov
  • 2026-09-23 17:39docs: brand repository for HackAlem AI Freedom trackasari92
  • 2026-09-23 17:38Reorganize frontend backend and documentation for auditTheKasymov
  • 2026-09-23 17:31Merge remote-tracking branch 'origin/main'asari92
Все коммиты (51)
  • 2026-09-23 17:30feat: explain role gates in evidence and client cardsasari92
  • 2026-09-23 17:28Merge branch 'main' of https://github.com/BAITC-Hacks/hack-4c401bd7-pied-piperTheKasymov
  • 2026-09-23 17:26Add backend scenario tests and HTTP workflow validationTheKasymov
  • 2026-09-23 17:23Merge remote-tracking branch 'origin/main'Azekaaa
  • 2026-09-23 17:18chore: remove obsolete starter and refresh docs with evidence auditAzekaaa
  • 2026-09-23 17:17Merge latest Streamlit controls and record integration checksTheKasymov
  • 2026-09-23 17:16Merge frontend graphs and review workflow with backendTheKasymov
  • 2026-09-23 17:14ui: preserve Streamlit tools while hiding Deployasari92
  • 2026-09-23 17:14Add local backend API and durable analysis workerTheKasymov
  • 2026-09-23 17:10ui: hide Streamlit deployment controlsasari92
  • 2026-09-23 17:04Merge origin/main: integrate role tests and frontend contract documentationasari92
  • 2026-09-23 16:59Merge remote-tracking branch 'origin/main'Azekaaa
  • 2026-09-23 16:58Merge origin/main: retain updated UI and integrate Docker launch changesasari92
  • 2026-09-23 16:53test: cover role semantics and strict publication runtime limitAzekaaa
  • 2026-09-23 16:52Merge branch 'main' of https://github.com/BAITC-Hacks/hack-4c401bd7-pied-piperTheKasymov
  • 2026-09-23 16:51feat: add frontend API contract and types for Money GraphTheKasymov
  • 2026-09-23 16:51feat: guide client review and compact disconnected graph componentsasari92
  • 2026-09-23 16:37feat: add draggable offline graphs and readable flow layoutasari92
  • 2026-09-23 16:36docs: write complete Russian README for hackathon judgesAzekaaa
  • 2026-09-23 16:33Separate Docker build and runtime and reuse validated resultsTheKasymov
  • 2026-09-23 16:25Use port 3000 for frontend launchersTheKasymov
  • 2026-09-23 16:22Containerize pipeline and UI and preserve bundle bytesTheKasymov
  • 2026-09-23 16:21feat: add make stop for project UI by portasari92
  • 2026-09-23 16:14build: add make commands for pipeline and Windows launcherAzekaaa
  • 2026-09-23 16:09Merge remote-tracking branch 'origin/main'asari92
  • 2026-09-23 16:09chore: include source dataset and validated results for private repo submissionasari92
  • 2026-09-23 16:08Document semantic QA on official dataTheKasymov
  • 2026-09-23 16:00docs: replan final two hours around release verification and demoasari92
  • 2026-09-23 15:48test: verify real bundles in browser and record Lane B acceptanceasari92
  • 2026-09-23 15:39Resolve documentation merge and record Lane A auditTheKasymov
  • 2026-09-23 15:30Refactor engine and reporting modules; implement pipeline for validation and publishingTheKasymov
  • 2026-09-23 15:30Merge branch 'main' of https://github.com/BAITC-Hacks/hack-4c401bd7-pied-piperAzekaaa
  • 2026-09-23 15:27docs: add product QA and demo materialsAzekaaa
  • 2026-09-23 15:14feat: add UTF-8 encoding to JSON output and implement new verification testsTheKasymov
  • 2026-09-23 14:59feat: support v1 published bundles and candidate validationasari92
  • 2026-09-23 14:45Merge origin/main: preserve revised schedule and integrate Lane A contractasari92
  • 2026-09-23 14:43docs: replan remaining 200 minutes around real-data integrationasari92
  • 2026-09-23 14:40Define v1 data contract for analytics and UITheKasymov
  • 2026-09-23 14:39feat: add Lane B analyst UI and independent output validationasari92
  • 2026-09-23 14:24add: analysisTheKasymov
  • 2026-09-23 14:16docs: track dataset README while ignoring parquet filesasari92
  • 2026-09-23 14:14docs: align implementation plan with simplified project layoutasari92
  • 2026-09-23 14:00firstasari92
Структура репозитория (90 файлов)
.dockerignore
.gitattributes
.gitignore
.streamlit/config.toml
Dockerfile
Makefile
README.md
backend/__init__.py
backend/__main__.py
backend/analytics.py
backend/api.py
backend/config.py
backend/core/__init__.py
backend/core/bundle_io.py
backend/core/contracts.py
backend/core/csv_export.py
backend/core/data.py
backend/core/engine.py
backend/core/explanations.py
backend/core/reporting.py
backend/core/resilience.py
backend/core/results.py
backend/datasets.py
backend/errors.py
backend/models.py
backend/pipeline.py
backend/store.py
backend/validate.py
backend/worker.py
compose.yaml
data/README.md
data/edges.parquet
data/nodes.parquet
data/transactions.parquet
docs/AUDIT_LANE_A.md
docs/PLAN.md
docs/README.md
docs/TECHNICAL_LANE_B.md
docs/architecture.md
docs/assets/money-graph-banner.svg
docs/audit-sha256-20260923.md
docs/backend-scenarios.md
docs/backend-verification.md
docs/backend.md
docs/demo.md
docs/evidence-audit.md
docs/frontend-api.types.ts
docs/frontend-contract.md
docs/implementation-plan.md
docs/methodology.md
docs/product-guide.md
docs/qa-real-data.md
docs/qa.md
docs/repository-layout.md
frontend/__init__.py
frontend/app.py
frontend/graph.html
frontend/graph_ui.py
frontend/presentation.py
frontend/view.py
make.cmd
outputs/current.json
outputs/runs/036aae81-4aa5-42fd-b867-b8cc7297eb16/clusters.csv
outputs/runs/036aae81-4aa5-42fd-b867-b8cc7297eb16/edges.parquet
outputs/runs/036aae81-4aa5-42fd-b867-b8cc7297eb16/node_metrics.parquet
outputs/runs/036aae81-4aa5-42fd-b867-b8cc7297eb16/nodes_roles.csv
outputs/runs/036aae81-4aa5-42fd-b867-b8cc7297eb16/run.json
outputs/runs/036aae81-4aa5-42fd-b867-b8cc7297eb16/top_nodes.csv
requirements.lock
requirements.txt
scripts/audit_evidence.py
scripts/ensure_results.py
scripts/smoke_backend.py
scripts/stop_ui.py
tests/browser_graph.py
tests/browser_smoke.py
tests/conftest.py
tests/fixtures/ui/make_fixture.py
tests/test_a_verification.py
tests/test_backend.py
tests/test_backend_http.py
tests/test_backend_scenarios.py
tests/test_bundle_protocol.py
tests/test_csv_downloads.py
tests/test_evidence_audit.py
tests/test_graph_ui.py
tests/test_resilience.py
tests/test_role_semantics.py
tests/test_ui.py
tests/test_validation.py

Обсуждение 0 комментариев

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

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