AAYMA
RU
Войти

TraceGraph

Платформа для аналитика AML: загрузка сети переводов из трёх parquet, объяснимые гипотезы ролей, сообщества и приоритеты проверки, граф-эксплорер и…

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

О проекте

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

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

Суть

Платформа для аналитика AML: загрузка сети переводов из трёх parquet, объяснимые гипотезы ролей, сообщества и приоритеты проверки, граф-эксплорер и выгрузка трёх CSV и Excel.

Как устроено

FastAPI сохраняет кейсы (SQLite, Alembic) и запускает движок tracegraph_ai в отдельном процессе. Движок строит признаки на pandas/NetworkX, роли (consolidator, transit, distributor, terminal, coordinator, peripheral) назначает правилами с порогом силы 0.45 (0.60 для coordinator) и флагом неоднозначности 0.08. Аномальность для приоритета даёт PyTorch Autoencoder с запасным IsolationForest. Результат: nodes_roles.csv, clusters.csv, top_nodes.csv с обоснованиями, в UI граф входящих и исходящих связей с окраской по ролям и сообществам.

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

  • NetworkX
  • rule-based role hypotheses
  • IsolationForest
  • PyTorch Autoencoder
  • community detection
  • temporal episodes
  • counterfactual analysis

Метрики

2248 участников, 91 сообщество, 2248 ранжированных строк за 7.71 с (IsolationForest, seed 42); Autoencoder 19.56 с

Особенности

Уверенность в роли отделена от силы признаков и учитывает полноту наблюдения, неоднозначные роли помечаются. Есть синтетический демо-набор для быстрой проверки. Выгрузка в Excel сохраняет ID без потери цифр. Движок и API работают в разных Python-окружениях.

Стек

Python · FastAPI · Pydantic · SQLAlchemy · Alembic · SQLite · pandas · NumPy · PyArrow · SciPy · PyTorch · scikit-learn · React · TypeScript · Vite · TanStack Query · openpyxl


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

README

README.md

TraceGraph — анализ сети денежных переводов

Проект команды hackyou для кейса HackAlem «Граф денег». TraceGraph помогает аналитику понять, кто собирает, распределяет и переводит средства, и выбрать участников для дальнейшей проверки. Результат — направленный граф переводов, гипотезы ролей, сообщества и приоритеты с объяснениями.

Что реализовано

  • Кейсы, загрузка и проверка трёх Parquet-файлов, запуск анализа и история результатов.
  • Диаграммы ролей и приоритетов, поиск участников по GID, фильтры и карточки с основаниями выводов.
  • Граф входящих и исходящих переводов: направления, суммы, число операций и переходы между участниками. Узлы можно окрашивать по ролям или сообществам; легенда объясняет цвета, отдельная обводка выделяет выбранного участника.
  • Гипотезы сообществ с числовыми основаниями: состав ролей, внутренние и внешние потоки, исходные узлы (seed) и границы наблюдения. При отсутствии потоков явно указывается недостаточность данных.
  • Три CSV для сдачи и отдельный Excel-файл с русским текстом и точными идентификаторами. JSON сохраняются как внутренний снимок для API, графа и карточек.
  • В Python SDK — подробные операции, пошаговые расследования и три локальных аналитических агента. Эти функции SDK пока не подключены к веб-интерфейсу.

Критерии ролей

Роли определяются объяснимыми правилами по структуре, суммам и датам переводов. ML оценивает аномальность для приоритета проверки. Основные условия допуска:

РольНаблюдаемые основания
consolidatorНе менее двух отправителей и положительный вход; учитываются объёмы и сходимость seed
transitПоложительные вход и выход; доступен баланс или временной проход средств
distributorНе менее двух получателей и положительный выход; учитываются охват и синхронность переводов
terminalПоложительный вход, отсутствие исходящих связей, узел не находится на границе обхода
coordinatorНе менее двух достижимых seed, положительные вход и выход, посредничество или мост между сообществами
peripheralНи одна допустимая роль не достигла порога; сюда входят изолированные узлы

Из допустимых ролей выбирается максимальная сила гипотезы: порог 0,45, для coordinator — 0,60. Разница сил двух гипотез не более 0,08 отмечается как неоднозначность. Это пороги силы признаков, а не role_score: уверенность рассчитывается отдельно с учётом полноты наблюдения. Полные формулы, веса и ограничения — в методике ролей.

Установка и запуск

Нужны Python 3.12, Node.js 22.12+ или 24 LTS и Git. Интернет требуется для установки зависимостей. Docker, API-ключи и отдельный сервер БД не нужны.

Скачайте проект:

git clone https://github.com/BAITC-Hacks/hack-c2a931d4-hackyou.git
cd hack-c2a931d4-hackyou

Windows PowerShell — выполните из корня проекта:

py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r backend\requirements.txt
py -3.12 -m venv .venv-engine
.\.venv-engine\Scripts\python.exe -m pip install -r ml\requirements-lock.txt
.\.venv-engine\Scripts\python.exe -m pip install -e ./ml --no-deps
npm.cmd --prefix frontend ci
.\.venv\Scripts\python.exe scripts\dev.py

Если py недоступна, замените py -3.12 на python версии 3.12. Активация окружений и создание .env не требуются.

Linux / macOS
python3.12 -m venv .venv
.venv/bin/python -m pip install -r backend/requirements.txt
python3.12 -m venv .venv-engine
.venv-engine/bin/python -m pip install -e ./ml
npm --prefix frontend ci
.venv/bin/python scripts/dev.py

Эта установка использует IsolationForest. Установка Autoencoder с CPU PyTorch описана в документации движка; Windows-команды выше уже включают PyTorch.

Откройте http://127.0.0.1:5173. Скрипт запускает интерфейс и API вместе; Ctrl+C останавливает оба. Повторный запуск — только последняя команда для вашей ОС.

Кейсы и результаты сохраняются локально в storage/, SQLite и миграции создаются автоматически. Проверка API должна вернуть status: "ok" и engine: "configured". Документация API.

Если проект уже установлен: остановите его через Ctrl+C, выполните git pull --ff-only origin main, повторите команды установки зависимостей для вашей ОС и запустите scripts/dev.py. В частности, для Excel нужен openpyxl из backend/requirements.txt. Установка движка с -e ./ml использует обновлённый код. Обновите страницу браузера. Для новых гипотез сообществ запустите анализ заново: сохранённые результаты не пересчитываются автоматически.

Как проверить решение

  1. В интерфейсе нажмите «Новый кейс» и создайте кейс с любым названием.
  2. Загрузите три файла из папки data/ репозитория: nodes.parquet, edges.parquet, transactions.parquet. Нажмите «Проверить и сохранить». Во вкладке «Исходные данные» ожидаются 2 248 участников, 3 119 связей и 4 840 операций.
  3. Во вкладке «Исследование» нажмите «Запустить анализ» и дождитесь статуса «Готово». В обзоре выберите роль или приоритет, найдите участника по GID и откройте его карточку.
  4. Нажмите «Исследовать связи». Отправители расположены слева, получатели — справа. Переключите входящие/исходящие связи и «Цвет узлов» → «По ролям» / «По сообществам»; проверьте легенду. Нажмите сумму для деталей или соседний узел для перехода.
  5. В «Обзор и участники» → «Результаты анализа · CSV» скачайте три файла ниже. Для просмотра в таблицах есть отдельная кнопка «Скачать для Excel · .xlsx»: идентификаторы сохраняются как текст, без потери цифр. В clusters.csv проверьте гипотезы и суммы потоков; в top_nodes.csv — ранги и объяснения.
  6. Обновите страницу: кейс и результат должны сохраниться. Откройте прежний анализ из истории.
Файл для сдачиЧто содержит
nodes_roles.csvВсе участники: GID, роль, уверенность role_score, сообщество, приоритет и основания
clusters.csvСообщества: размер, число seed, внутренний оборот, ключевые участники и гипотеза
top_nodes.csvУчастники по убыванию приоритета: ранг, роль, score и объяснение; первые 20 строк — Top-20

Шесть JSON рядом с CSV — внутренний снимок анализа для графа, карточек, операций и восстановления. Они сохраняются на диске и доступны API, но скрыты из списка пользовательских скачиваний. Для обязательной сдачи нужны три CSV, Excel — удобная копия этих таблиц.

Контрольный прогон исходной выборки с IsolationForest и стандартным seed 42 дал 2 248 участников, 91 сообщество, 2 248 ранжированных строк за 7,71 с внутри движка. Для воспроизведения используйте команду CLI ниже с --input data: три CSV создаются при запуске. Autoencoder может дать другие приоритеты; выбранный backend отражается в отчёте запуска.

Для короткой проверки на полностью вымышленных данных используйте три Parquet из synthetic-demo/: ожидаются 38 участников, 37 связей и 96 операций. Подробная сверка с требованиями — в аудите готовности.

Проверка только движка, без интерфейса и API, после установки выше:

.\.venv-engine\Scripts\python.exe -m tracegraph_ai --input synthetic-demo --output out-demo --model isolation_forest

На Linux/macOS замените путь к Python на .venv-engine/bin/python. Ожидаются 5 сообществ и 3 CSV + 6 JSON в out-demo/. Для исходной выборки замените --input synthetic-demo на --input data. Флаг --model isolation_forest явно выбирает лёгкую модель; без него движок автоматически использует доступный backend.

Что уже проверено: чистый запуск платформы, загрузка через API, анализ и восстановление результата; сборка интерфейса; адресные тесты гипотез и совместимости снимков. Полный SDK-прогон исходной выборки с Autoencoder занимал 19,56 с; финальный синтетический прогон с IsolationForest — 0,42 с внутри движка, без установки зависимостей и запуска Python. Это локальные замеры, время на другом компьютере может отличаться. Методика, сравнение ролей и ограничения — в отчёте качества; границы выполненных проверок — в аудите готовности.

Технологии и архитектура

React / TypeScript → FastAPI → отдельный процесс TraceGraph AI
                        ↓                  ↓
                 SQLite + файлы      граф и ML на CPU
КомпонентТехнологии
ИнтерфейсReact, TypeScript, Vite, TanStack Query, React Router
API и хранениеFastAPI, Pydantic, SQLAlchemy, Alembic, SQLite
Анализ данныхpandas, NumPy, PyArrow, NetworkX, SciPy
MLPyTorch Autoencoder; резервная модель — scikit-learn IsolationForest
ЭкспортCSV, JSON, XLSX / openpyxl

Backend и движок используют отдельные Python-окружения. Расчёты выполняет движок; API проверяет и сохраняет результаты, интерфейс показывает их аналитику.

Для масштаба около миллиона узлов потребуется обработка данных частями, очередь фоновых расчётов, приближённые графовые метрики и выдача окрестностей по запросу. Это направление развития; текущий прототип на таком объёме не проверен. Подробнее — архитектура.

Данные, внешние сервисы и ограничения

  • В data/ находится обезличенная выборка организаторов HackAlem: узлы, связи и операции за июль 2026 года.
  • После установки решение работает локально, без LLM и внешних API. Демонстрация доступна по локальному адресу выше.
  • Роли и приоритеты — гипотезы для проверки, а не доказательство нарушения. role_score показывает поддержку роли по наблюдаемым признакам в диапазоне 0–1; это не accuracy и не вероятность нарушения. Разметки подтверждённых ролей в данных нет.
  • Данные ограничены одним банком, исходящим обходом до четырёх шагов, порогом 5 000 ₸ и точностью дат до дня. Связи не доказывают движение одних и тех же денег.
  • На графе показываются до 6, 12 или 20 соседей по выбранному лимиту; итоги участника учитывают всё окружение.
  • Это локальный MVP без авторизации и разграничения доступа, рассчитанный на один процесс API.

Подробности: SDK и движок, методика ролей, проверки и ограничения модели, настройки платформы, компоненты, лицензии и использование AI.

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

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

Aibar 24MukhammedZhumali 14MuhammedZhumali 4aiz 2

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

  • 2026-09-23 17:57docs: keep generated analysis outputs out of submission treeAibar
  • 2026-09-23 17:56docs: finalize submission artifacts and requirements evidenceAibar
  • 2026-09-23 17:51docs: clarify launch verification and submission outputsAibar
  • 2026-09-23 17:47feat: complete graph highlighting and grounded community hypothesesAibar
  • 2026-09-23 17:39merge: preserve shared README while integrating verified demoAibar
  • 2026-09-23 17:39docs: record requirements audit and clean-start verificationAibar
  • 2026-09-23 17:38docs: simplify setup and final project READMEMukhammedZhumali
  • 2026-09-23 17:35Merge branch 'main' of https://github.com/BAITC-Hacks/hack-c2a931d4-hackyouAibar
Все коммиты (44)
  • 2026-09-23 17:35feat: add synthetic demo and simplify submission walkthroughAibar
  • 2026-09-23 17:33Merge pull request #3 from BAITC-Hacks/codex/readable-money-flowsMuhammedZhumali
  • 2026-09-23 17:30feat: add Excel export preserving Unicode and exact identifiersMukhammedZhumali
  • 2026-09-23 17:30fix: separate money flow directions and readable edge labelsMukhammedZhumali
  • 2026-09-23 17:08Merge pull request #2 from BAITC-Hacks/codex/analyst-dashboardMuhammedZhumali
  • 2026-09-23 17:04Merge commit '0d9610c' into codex/analyst-dashboardMukhammedZhumali
  • 2026-09-23 17:02Merge remote-tracking branch 'origin/main' into codex/analyst-dashboardMukhammedZhumali
  • 2026-09-23 17:00feat: add analyst dashboards and directed neighborhood explorerMukhammedZhumali
  • 2026-09-23 17:00docs: publish role quality comparison and integration guidanceAibar
  • 2026-09-23 16:59fix: ground role confidence in available behavioral evidenceAibar
  • 2026-09-23 16:41merge: integrate platform with engine 0.3 and preserve setup guidesAibar
  • 2026-09-23 16:35docs: keep interface mockups outside the engine repositoryAibar
  • 2026-09-23 16:25docs: document setup integration and measured enrichment resultsAibar
  • 2026-09-23 16:24Merge pull request #1 from BAITC-Hacks/codex/fullstack-foundationMuhammedZhumali
  • 2026-09-23 16:23feat: enrich investigations with three cited analytical agentsAibar
  • 2026-09-23 16:16feat: connect real engine with analysis history and results UIMukhammedZhumali
  • 2026-09-23 15:56merge: sync engine 0.2 snapshots and investigations from mainMukhammedZhumali
  • 2026-09-23 15:52docs: hand off the resumable prototype and verified integration workflowAibar
  • 2026-09-23 15:50feat: investigate selected nodes with fresh branch-local calculationsAibar
  • 2026-09-23 15:47feat: prepare analyst review cases and measure labeled usefulnessAibar
  • 2026-09-23 15:46feat: restore portable analyses and expose traceable operation viewsAibar
  • 2026-09-23 15:45merge: integrate TraceGraph AI engine branchMukhammedZhumali
  • 2026-09-23 15:45fix: require linked temporal episodes for coordination evidenceAibar
  • 2026-09-23 15:43feat: persist and validate analysis result snapshotsMukhammedZhumali
  • 2026-09-23 15:32docs: document integration and verify reproducible CPU prototypeAibar
  • 2026-09-23 15:27feat: expose analysis SDK exports and bounded evidence investigationsAibar
  • 2026-09-23 15:26feat: add case history and validated parquet importsMukhammedZhumali
  • 2026-09-23 15:23feat: calculate graph evidence and explainable role prioritiesAibar
  • 2026-09-23 15:23feat: add CPU autoencoder with deterministic anomaly fallbackAibar
  • 2026-09-23 15:19feat: establish TraceGraph package and lossless integration contractAibar
  • 2026-09-23 15:04chore: scaffold local FastAPI and React applicationMukhammedZhumali
  • 2026-09-23 14:56docs: define architecture and engine contractsMukhammedZhumali
  • 2026-09-23 14:39md initMukhammedZhumali
  • 2026-09-23 13:45upd readmeaiz
  • 2026-09-19 10:50Update README.mdMuhammedZhumali
  • 2026-09-19 10:50Testaiz
Структура репозитория (144 файлов)
.env.example
.gitattributes
.gitignore
README.md
backend/__init__.py
backend/app/__init__.py
backend/app/analysis_schemas.py
backend/app/api.py
backend/app/config.py
backend/app/database.py
backend/app/errors.py
backend/app/insight_schemas.py
backend/app/main.py
backend/app/models.py
backend/app/repositories.py
backend/app/schemas.py
backend/app/services/__init__.py
backend/app/services/analyses.py
backend/app/services/cases.py
backend/app/services/datasets.py
backend/app/services/engine.py
backend/app/services/excel.py
backend/app/services/insights.py
backend/app/services/results.py
backend/app/services/validation.py
backend/app/storage_lock.py
backend/backend.md
backend/engine_worker.py
backend/migrations/env.py
backend/migrations/versions/0001_baseline.py
backend/migrations/versions/0002_cases_datasets.py
backend/migrations/versions/0003_analysis_runs.py
backend/requirements.in
backend/requirements.txt
backend/tests/test_analyses.py
backend/tests/test_cases.py
backend/tests/test_engine_integration.py
backend/tests/test_engine_runtime.py
backend/tests/test_excel.py
backend/tests/test_insights.py
data/edges.parquet
data/nodes.parquet
data/transactions.parquet
docs/ai-engine-contract.md
docs/ai-engine-readme.md
docs/analyst-review.md
docs/architecture.md
docs/demo.md
docs/engine-contract.md
docs/enrichment-metrics.md
docs/implementation-plan.md
docs/investigation-enrichment.md
docs/metrics/enrichment-0.3.0.json
docs/metrics/model-evaluation-after-0.3.1.json
docs/metrics/model-evaluation-before-0.3.0.json
docs/model-quality-review.md
docs/model.md
docs/platform-guide.md
docs/role-methodology.md
docs/submission-readiness.md
docs/third-party-components.md
docs/validation.md
frontend/.prettierrc.json
frontend/frontend.md
frontend/index.html
frontend/package-lock.json
frontend/package.json
frontend/src/App.tsx
frontend/src/analyst.css
frontend/src/api.ts
frontend/src/components/ErrorMessage.tsx
frontend/src/components/Modal.tsx
frontend/src/features/analysis/AnalysisDashboard.tsx
frontend/src/features/analysis/AnalysisPanel.tsx
frontend/src/features/analysis/GraphExplorer.tsx
frontend/src/features/analysis/NodeDrawer.tsx
frontend/src/features/analysis/flowLayout.test.ts
frontend/src/features/analysis/flowLayout.ts
frontend/src/features/analysis/presentation.ts
frontend/src/features/cases/CaseWorkspace.tsx
frontend/src/features/cases/CreateCase.tsx
frontend/src/features/cases/Dashboard.tsx
frontend/src/features/cases/ImportPanel.tsx
frontend/src/features/cases/QualityPanel.tsx
frontend/src/features/cases/Status.tsx
frontend/src/files.test.ts
frontend/src/files.ts
frontend/src/format.ts
frontend/src/main.tsx
frontend/src/styles.css
frontend/tsconfig.json
frontend/vite.config.ts
ml/examples/enrich_investigation.py
ml/examples/evaluate_enrichment.py
ml/examples/evaluate_model.py
ml/examples/generate_synthetic_data.py
ml/examples/integrate.py
ml/examples/review_results.py
ml/ml.md
ml/pyproject.toml
ml/requirements-lock.txt
ml/src/tracegraph_ai/__init__.py
ml/src/tracegraph_ai/__main__.py
ml/src/tracegraph_ai/anomaly.py
ml/src/tracegraph_ai/autoencoder.py
ml/src/tracegraph_ai/communities.py
ml/src/tracegraph_ai/config.py
ml/src/tracegraph_ai/counterfactual.py
ml/src/tracegraph_ai/diagnostics.py
ml/src/tracegraph_ai/engine.py
ml/src/tracegraph_ai/enrichment/__init__.py
ml/src/tracegraph_ai/enrichment/alternatives.py
ml/src/tracegraph_ai/enrichment/config.py
ml/src/tracegraph_ai/enrichment/orchestrator.py
ml/src/tracegraph_ai/enrichment/paths.py
ml/src/tracegraph_ai/enrichment/patterns.py
ml/src/tracegraph_ai/enrichment/runtime.py
ml/src/tracegraph_ai/errors.py
ml/src/tracegraph_ai/evidence.py
ml/src/tracegraph_ai/exports.py
ml/src/tracegraph_ai/features.py
ml/src/tracegraph_ai/features_temporal.py
ml/src/tracegraph_ai/inference.py
ml/src/tracegraph_ai/investigation.py
ml/src/tracegraph_ai/investigation_actions.py
ml/src/tracegraph_ai/io.py
ml/src/tracegraph_ai/persistence.py
ml/src/tracegraph_ai/review.py
ml/src/tracegraph_ai/serialization.py
ml/tests/test_communities.py
ml/tests/test_confidence.py
ml/tests/test_critical_cases.py
ml/tests/test_enrichment.py
ml/tests/test_investigation_actions.py
ml/tests/test_review.py
ml/tests/test_saved_analysis.py
ml/tests/test_temporal_episodes.py
pyproject.toml
scripts/dev.py
synthetic-demo/edges.parquet
synthetic-demo/nodes.parquet
synthetic-demo/transactions.parquet
tasks/plan.md
tasks/todo.md
Ветки (5)

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

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

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