AAYMA
RU
Войти

Граф денег

Пайплайн анализа транзакционной сети (роли клиентов, топ-30 с объяснением, кластеры, сценарии блокировки) и веб-интерфейс с графом денежных потоков…

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

О проекте

Команда: Alisher
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Рабочий MVP

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

Суть

Пайплайн анализа транзакционной сети (роли клиентов, топ-30 с объяснением, кластеры, сценарии блокировки) и веб-интерфейс с графом денежных потоков и AI-сводкой по роли узла.

Как устроено

analysis/run.py читает три Parquet и за ~5 секунд пишет CSV: роли и приоритеты, топ-30, кластеры с гипотезами, устойчивость при блокировке топ-N, запросы недостающих данных и рёбра с долей денег seed. Узлы ранжируются по потоку денег от seed, учитываются внутридневные циклы и балансы при блокировке. Веб-часть на TypeScript/React показывает граф с ограниченной отрисовкой, AI-бриф по узлу генерируется через OpenAI при наличии ключа.

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

  • seed money flow attribution
  • intraday cycle detection
  • resilience / блокировка топ-N
  • кластеризация

Особенности

Отдельные выгрузки resilience.csv (сценарии блокировки) и data_requests.csv (каких данных не хватает по узлу) полезны аналитику. Развёрнутое демо на Render.

Стек

Python · TypeScript · React · Node.js · Parquet · Render

Модели

OpenAI API


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

README

README.md

Граф денег

Демо: https://hackalem-ai-finances-track.onrender.com

Аналитика (analysis/)

Нужен Python 3.9+. Сеть, LLM и внешние данные не нужны.

Из корня репозитория:

python3 -m venv analysis/.venv
analysis/.venv/bin/python -m pip install -r analysis/requirements.txt
analysis/.venv/bin/python analysis/run.py

Расчёт занимает около 5 секунд. Скрипт читает Parquet из docs/data/ и пишет CSV в analysis/out/:

ФайлЧто внутри
nodes_roles.csvроли и приоритет всех клиентов
top_nodes.csvтоп-30 для проверки с объяснением
clusters.csvкластеры и гипотезы по ним
resilience.csvсценарии блокировки топ-N счетов
data_requests.csvкаких данных не хватает по узлам
edges_flow.csvрёбра с долей денег seed

Тесты:

analysis/.venv/bin/python -m unittest discover -s analysis/tests -v

Параметры, методика и описание колонок — в analysis/README.md.

Веб-интерфейс (web/)

Нужен Node.js 20+.

Из корня репозитория:

cd web
npm install
cp .env.example .env.local
npm run dev

Откройте localhost:3000.

Данные для экрана лежат в web/public/data/: три Parquet и три CSV из аналитики. После нового запуска analysis/run.py скопируйте свежие CSV:

cp analysis/out/{nodes_roles,clusters,top_nodes}.csv web/public/data/

Граф работает без ключа. Для AI-функций задайте OPENAI_API_KEY в web/.env.local. Модели можно поменять через OPENAI_MODEL и OPENAI_BRIEF_MODEL.

Тесты:

cd web
npm test
Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
13
Авторы
1
Файлы
218
Ветки
1

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

Alisher Mukhametzhanov 13

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

  • 2026-09-23 17:57Remove agents.mdAlisher Mukhametzhanov
  • 2026-09-23 17:55Sync web with new analysis outputs and add web README sectionAlisher Mukhametzhanov
  • 2026-09-23 17:34feat(web): add AI role brief to node cardAlisher Mukhametzhanov
  • 2026-09-23 17:34Add jury README with analysis run stepsAlisher Mukhametzhanov
  • 2026-09-23 17:29Fix seed attribution, intraday cycles, and blocking balancesAlisher Mukhametzhanov
  • 2026-09-23 17:09feat(web): add money flow graph with bounded renderingAlisher Mukhametzhanov
  • 2026-09-23 17:00Rank nodes by seed money flowAlisher Mukhametzhanov
  • 2026-09-23 16:08Remove unnecessary data in AGENTS.mdAlisher Mukhametzhanov
Все коммиты (13)
  • 2026-09-23 16:04Add web viewAlisher Mukhametzhanov
  • 2026-09-23 15:35Use initial starter script, calculate golden out using the scriptAlisher Mukhametzhanov
  • 2026-09-23 15:24Add docsAlisher Mukhametzhanov
  • 2026-09-23 15:19Add graph analysis starterAlisher Mukhametzhanov
  • 2026-09-23 15:09Clear README.mdAlisher Mukhametzhanov
Структура репозитория (218 файлов)
.gitignore
README.md
analysis/README.md
analysis/out/clusters.csv
analysis/out/data_requests.csv
analysis/out/edges_flow.csv
analysis/out/nodes_roles.csv
analysis/out/resilience.csv
analysis/out/top_nodes.csv
analysis/requirements.txt
analysis/run.py
analysis/tests/test_pipeline.py
docs/data/README.md
docs/data/edges.parquet
docs/data/nodes.parquet
docs/data/transactions.parquet
docs/problem-statement.md
docs/starter/README.md
docs/starter/out/clusters.csv
docs/starter/out/nodes_roles.csv
docs/starter/out/top_nodes.csv
docs/starter/requirements.txt
docs/starter/starter.py
web/.agents/skills/ai-elements/SKILL.md
web/.agents/skills/ai-elements/references/agent.md
web/.agents/skills/ai-elements/references/artifact.md
web/.agents/skills/ai-elements/references/attachments.md
web/.agents/skills/ai-elements/references/audio-player.md
web/.agents/skills/ai-elements/references/canvas.md
web/.agents/skills/ai-elements/references/chain-of-thought.md
web/.agents/skills/ai-elements/references/checkpoint.md
web/.agents/skills/ai-elements/references/code-block.md
web/.agents/skills/ai-elements/references/commit.md
web/.agents/skills/ai-elements/references/confirmation.md
web/.agents/skills/ai-elements/references/connection.md
web/.agents/skills/ai-elements/references/context.md
web/.agents/skills/ai-elements/references/controls.md
web/.agents/skills/ai-elements/references/conversation.md
web/.agents/skills/ai-elements/references/edge.md
web/.agents/skills/ai-elements/references/environment-variables.md
web/.agents/skills/ai-elements/references/file-tree.md
web/.agents/skills/ai-elements/references/image.md
web/.agents/skills/ai-elements/references/inline-citation.md
web/.agents/skills/ai-elements/references/jsx-preview.md
web/.agents/skills/ai-elements/references/message.md
web/.agents/skills/ai-elements/references/mic-selector.md
web/.agents/skills/ai-elements/references/model-selector.md
web/.agents/skills/ai-elements/references/node.md
web/.agents/skills/ai-elements/references/open-in-chat.md
web/.agents/skills/ai-elements/references/package-info.md
web/.agents/skills/ai-elements/references/panel.md
web/.agents/skills/ai-elements/references/persona.md
web/.agents/skills/ai-elements/references/plan.md
web/.agents/skills/ai-elements/references/prompt-input.md
web/.agents/skills/ai-elements/references/queue.md
web/.agents/skills/ai-elements/references/reasoning.md
web/.agents/skills/ai-elements/references/sandbox.md
web/.agents/skills/ai-elements/references/schema-display.md
web/.agents/skills/ai-elements/references/shimmer.md
web/.agents/skills/ai-elements/references/snippet.md
web/.agents/skills/ai-elements/references/sources.md
web/.agents/skills/ai-elements/references/speech-input.md
web/.agents/skills/ai-elements/references/stack-trace.md
web/.agents/skills/ai-elements/references/suggestion.md
web/.agents/skills/ai-elements/references/task.md
web/.agents/skills/ai-elements/references/terminal.md
web/.agents/skills/ai-elements/references/test-results.md
web/.agents/skills/ai-elements/references/tool.md
web/.agents/skills/ai-elements/references/toolbar.md
web/.agents/skills/ai-elements/references/transcription.md
web/.agents/skills/ai-elements/references/voice-selector.md
web/.agents/skills/ai-elements/references/web-preview.md
web/.agents/skills/ai-elements/scripts/agent.tsx
web/.agents/skills/ai-elements/scripts/artifact.tsx
web/.agents/skills/ai-elements/scripts/attachments-inline.tsx
web/.agents/skills/ai-elements/scripts/attachments-list.tsx
web/.agents/skills/ai-elements/scripts/attachments.tsx
web/.agents/skills/ai-elements/scripts/audio-player-remote.tsx
web/.agents/skills/ai-elements/scripts/audio-player.tsx
web/.agents/skills/ai-elements/scripts/chain-of-thought.tsx
web/.agents/skills/ai-elements/scripts/checkpoint.tsx
web/.agents/skills/ai-elements/scripts/code-block-dark.tsx
web/.agents/skills/ai-elements/scripts/code-block.tsx
web/.agents/skills/ai-elements/scripts/commit.tsx
web/.agents/skills/ai-elements/scripts/confirmation-accepted.tsx
web/.agents/skills/ai-elements/scripts/confirmation-rejected.tsx
web/.agents/skills/ai-elements/scripts/confirmation-request.tsx
web/.agents/skills/ai-elements/scripts/confirmation.tsx
web/.agents/skills/ai-elements/scripts/context.tsx
web/.agents/skills/ai-elements/scripts/conversation.tsx
web/.agents/skills/ai-elements/scripts/environment-variables.tsx
web/.agents/skills/ai-elements/scripts/file-tree-basic.tsx
web/.agents/skills/ai-elements/scripts/file-tree-expanded.tsx
web/.agents/skills/ai-elements/scripts/file-tree-selection.tsx
web/.agents/skills/ai-elements/scripts/file-tree.tsx
web/.agents/skills/ai-elements/scripts/image.tsx
web/.agents/skills/ai-elements/scripts/inline-citation.tsx
web/.agents/skills/ai-elements/scripts/jsx-preview.tsx
web/.agents/skills/ai-elements/scripts/message.tsx
web/.agents/skills/ai-elements/scripts/mic-selector.tsx
web/.agents/skills/ai-elements/scripts/model-selector.tsx
web/.agents/skills/ai-elements/scripts/open-in-chat.tsx
web/.agents/skills/ai-elements/scripts/package-info.tsx
web/.agents/skills/ai-elements/scripts/persona-command.tsx
web/.agents/skills/ai-elements/scripts/persona-glint.tsx
web/.agents/skills/ai-elements/scripts/persona-halo.tsx
web/.agents/skills/ai-elements/scripts/persona-mana.tsx
web/.agents/skills/ai-elements/scripts/persona-obsidian.tsx
web/.agents/skills/ai-elements/scripts/persona-opal.tsx
web/.agents/skills/ai-elements/scripts/plan.tsx
web/.agents/skills/ai-elements/scripts/prompt-input-cursor.tsx
web/.agents/skills/ai-elements/scripts/prompt-input-tooltip.tsx
web/.agents/skills/ai-elements/scripts/prompt-input.tsx
web/.agents/skills/ai-elements/scripts/queue-prompt-input.tsx
web/.agents/skills/ai-elements/scripts/queue.tsx
web/.agents/skills/ai-elements/scripts/reasoning.tsx
web/.agents/skills/ai-elements/scripts/sandbox.tsx
web/.agents/skills/ai-elements/scripts/schema-display-basic.tsx
web/.agents/skills/ai-elements/scripts/schema-display-body.tsx
web/.agents/skills/ai-elements/scripts/schema-display-nested.tsx
web/.agents/skills/ai-elements/scripts/schema-display-params.tsx
web/.agents/skills/ai-elements/scripts/schema-display.tsx
web/.agents/skills/ai-elements/scripts/shimmer-duration.tsx
web/.agents/skills/ai-elements/scripts/shimmer-elements.tsx
web/.agents/skills/ai-elements/scripts/shimmer.tsx
web/.agents/skills/ai-elements/scripts/snippet-plain.tsx
web/.agents/skills/ai-elements/scripts/snippet.tsx
web/.agents/skills/ai-elements/scripts/sources-custom.tsx
web/.agents/skills/ai-elements/scripts/sources.tsx
web/.agents/skills/ai-elements/scripts/speech-input.tsx
web/.agents/skills/ai-elements/scripts/stack-trace-collapsed.tsx
web/.agents/skills/ai-elements/scripts/stack-trace-no-internal.tsx
web/.agents/skills/ai-elements/scripts/stack-trace.tsx
web/.agents/skills/ai-elements/scripts/suggestion-input.tsx
web/.agents/skills/ai-elements/scripts/suggestion.tsx
web/.agents/skills/ai-elements/scripts/task.tsx
web/.agents/skills/ai-elements/scripts/terminal-basic.tsx
web/.agents/skills/ai-elements/scripts/terminal-clear.tsx
web/.agents/skills/ai-elements/scripts/terminal-streaming.tsx
web/.agents/skills/ai-elements/scripts/terminal.tsx
web/.agents/skills/ai-elements/scripts/test-results-basic.tsx
web/.agents/skills/ai-elements/scripts/test-results-errors.tsx
web/.agents/skills/ai-elements/scripts/test-results-suites.tsx
web/.agents/skills/ai-elements/scripts/test-results.tsx
web/.agents/skills/ai-elements/scripts/tool-input-available.tsx
web/.agents/skills/ai-elements/scripts/tool-input-streaming.tsx
web/.agents/skills/ai-elements/scripts/tool-output-available.tsx
web/.agents/skills/ai-elements/scripts/tool-output-error.tsx
web/.agents/skills/ai-elements/scripts/tool.tsx
web/.agents/skills/ai-elements/scripts/transcription.tsx
web/.agents/skills/ai-elements/scripts/voice-selector.tsx
web/.agents/skills/ai-elements/scripts/web-preview.tsx
web/.agents/skills/shadcn/SKILL.md
web/.agents/skills/shadcn/agents/openai.yml
web/.agents/skills/shadcn/assets/shadcn-small.png
web/.agents/skills/shadcn/assets/shadcn.png
web/.agents/skills/shadcn/cli.md
web/.agents/skills/shadcn/customization.md
web/.agents/skills/shadcn/evals/evals.json
web/.agents/skills/shadcn/mcp.md
web/.agents/skills/shadcn/registry.md
web/.agents/skills/shadcn/rules/base-vs-radix.md
web/.agents/skills/shadcn/rules/chat.md
web/.agents/skills/shadcn/rules/composition.md
web/.agents/skills/shadcn/rules/forms.md
web/.agents/skills/shadcn/rules/icons.md
web/.agents/skills/shadcn/rules/styling.md
web/.env.example
web/.gitignore
web/.prettierignore
web/.prettierrc.json
web/AGENTS.md
web/README.md
web/app/api/chat/route.ts
web/app/api/node-brief/route.ts
web/app/globals.css
web/app/graph.css
web/app/layout.tsx
web/app/page.tsx
web/components.json
web/components/ai-elements/conversation.tsx
web/components/ai-elements/message.tsx
web/components/ai-elements/prompt-input.tsx
web/components/chat.tsx
web/components/graph/money-graph.tsx
web/components/graph/network.tsx
web/components/graph/node-card.tsx
web/components/graph/role-symbol.tsx
web/components/graph/upload-dialog.tsx
web/components/ui/button.tsx
web/components/ui/input-group.tsx
web/components/ui/input.tsx
web/components/ui/textarea.tsx
web/eslint.config.mjs
web/lib/graph/dataset.test.ts
web/lib/graph/dataset.ts
web/lib/graph/dataset.worker.ts
web/lib/graph/roles.ts
web/lib/graph/types.ts
web/lib/graph/view.ts
web/lib/utils.ts
web/next.config.ts
web/package-lock.json
web/package.json
web/postcss.config.mjs
web/public/data/clusters.csv
web/public/data/data_requests.csv
web/public/data/edges.parquet
web/public/data/edges_flow.csv
web/public/data/nodes.parquet
web/public/data/nodes_roles.csv
web/public/data/resilience.csv
web/public/data/top_nodes.csv
web/public/data/transactions.parquet
web/public/fonts/inter-LICENSE.txt
web/public/fonts/inter-latin-400-normal.woff
web/skills-lock.json
web/tsconfig.json

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

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

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