О проекте
Команда: 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
Авторы коммитов
История коммитов
- 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 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.