Как строить графовые представления
Что проверяют
Умеете ли вы превратить обычные таблицы в граф так, чтобы он помогал задаче, и понимаете ли, как из графа получить признаки или эмбеддинги для модели. Вопрос поведенческий, поэтому ждут ваш проект. Следом спрашивают, как вы проверяли качество и как справлялись с размером графа.
Как отвечать
Стройте ответ от задачи к графу на своём примере:
- узлы и рёбра: пользователи и товары с ребром «купил», переводы между счетами, статьи со ссылками. Объясните выбор схемы и нужен ли гетерогенный граф с разными типами узлов;
- веса и направление: число взаимодействий, сумма, давность. Старые рёбра часто затухают или отсекаются окном;
- хранение: список смежности или разреженная матрица в
scipy.sparse, NetworkX для анализа, igraph или графовая база для больших графов; - признаки из графа: степень, PageRank, сообщества через Louvain или Leiden, число общих соседей. Их добавляют в бустинг как обычные колонки;
- эмбеддинги: node2vec и DeepWalk на случайных блужданиях, GNN вроде GraphSAGE или GCN в PyTorch Geometric. GraphSAGE удобен тем, что считает эмбеддинг нового узла по его соседям;
- оценка: при предсказании связей тестовые рёбра удаляются из графа до обучения, иначе ответ уже лежит во входных данных.
Нужны ваши цифры: сколько узлов и рёбер, сколько времени шёл расчёт, какой прирост дала графовая часть к базовой модели. Если с графами не работали, так и скажите и разберите, как построили бы граф на знакомых данных. Это честнее выдуманного кейса и показывает ход мысли.
Где спотыкаются
Рассказывают про DFS и Дейкстру вместо построения представления. Алгоритмы обхода тут вторичны, спрашивают про моделирование данных.
Запускают NetworkX на десятках миллионов рёбер и упираются в память и время, не зная более быстрых альтернатив.
Не убирают тестовые рёбра из графа при предсказании связей и получают неправдоподобно высокое качество.