О проекте
Команда: Arys
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Рабочий MVP
Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)
Суть
Explainable-пайплайн AML: строит направленный граф транзакций, назначает узлам 6 ролей, кластеризует Louvain и ранжирует кандидатов на проверку. Интерфейс на Streamlit.
Как устроено
pipeline.py читает nodes, edges и transactions (Parquet или CSV) и строит граф в NetworkX. Считаются структурные, денежные и временные признаки, seed coverage, betweenness, PageRank, Louvain-кластеры. Роль выбирается из шести интерпретируемых role-score. Priority score — взвешенная сумма перцентильно нормализованных признаков, веса лежат в config.json, для известных seed множитель 0.55. На выходе nodes_roles, clusters, top_nodes CSV с полем evidence.
Ключевые решения
- NetworkX
- Louvain
- PageRank
- betweenness
- percentile normalization
- rule-based roles
Особенности
Честно разобраны ограничения выгрузки: depth=4 и out_degree=0 не считаются достаточным основанием для роли terminal. Seed намеренно понижены в рейтинге, чтобы топ-лист искал новых участников. Есть план масштабирования до ~1 млн узлов (igraph, GraphFrames).
Стек
Python · NetworkX · pandas · Streamlit
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-5f7fa4b5-arys.
README
README.mdAML Graph — восстановление финансовой структуры сети
Локальный explainable-пайплайн по ТЗ HackAlem AI. Из nodes/edges/transactions строит направленный граф, рассчитывает структурные, денежные и временные признаки, Louvain-кластеры, 6 ролей и priority score.
Роли
consolidator, transit, distributor, terminal, coordinator, peripheral.
Важно: depth=4 && out_degree=0 не считается достаточным основанием для terminal, поскольку это граница 4-hop выгрузки. Все формулировки — гипотезы для AML-проверки, не утверждения о виновности.
Быстрый запуск
python -m venv .venv
source .venv/bin/activate # Windows: .venv\\Scripts\\activate
pip install -r requirements.txt
python pipeline.py
streamlit run app.py
Pipeline автоматически предпочитает Parquet, если он есть; иначе читает CSV.
Выход
outputs/nodes_roles.csv: gid, role, role_score, cluster_id, priority_score, evidenceoutputs/clusters.csv: cluster_id, n_nodes, n_seed, sum_kzt_internal, top_gids, hypothesisoutputs/top_nodes.csv: rank, gid, role, priority_score, whyoutputs/node_features.csv: диагностические признаки для UI/аудита
Priority score
0.24 seed_coverage + 0.23 betweenness + 0.17 degree + 0.12 volume + 0.09 PageRank + 0.08 cluster_bridge + 0.07 role_score, после percentile-нормализации. Известным seed применяется множитель 0.55: задача TOP-листа — искать следующие узлы для проверки, а не повторять исходные 81.
Explainability
Роль выбирается из шести интерпретируемых role-score. В evidence сохраняются наблюдаемые признаки (fan-in/fan-out, поток, seed coverage, betweenness, межкластерные связи). Весовые коэффициенты priority вынесены в config.json.
Ограничения
Граф содержит только исходящие переводы от seed на 4 колена, поэтому observed IN/OUT не является полным балансом клиента. Seed имеют неполный входящий поток; depth=4 обрезан; операции ниже порога исходной выгрузки невидимы.
Масштабирование до ~1 млн узлов
NetworkX заменить на igraph/Graph-tool/Spark GraphFrames или специализированный graph engine; centrality считать приближённо; seed coverage — батчевым multi-source traversal; признаки хранить в Parquet/аналитической БД. UI должен получать ego-subgraph через API, а не загружать весь граф в браузер.
Авторы коммитов
История коммитов
- 2026-09-23 17:18Implement AML transaction graph analysis pipelineAral Absamatov
- 2026-09-23 16:40ЖобаAral Absamatov
- 2026-09-23 16:04Үшінші файлAral Absamatov
- 2026-09-23 15:25Екінші файлAral Absamatov
- 2026-09-23 15:23Бірінші файлAral Absamatov
- 2026-09-23 14:49Step 1Aral Absamatov
Структура репозитория (19 файлов)
README.md app.py config.json data/edges.csv data/nodes.csv data/transactions.csv outputs/clusters.csv outputs/node_features.csv outputs/nodes_roles.csv outputs/top_nodes.csv pipeline.py requirements.txt src/aml_graph/__init__.py src/aml_graph/export.py src/aml_graph/features.py src/aml_graph/io.py src/aml_graph/scoring.py src/aml_graph/validate.py tests/test_pipeline.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.