Graph Mining vs GNN Message Passing: When to Use Each
Graph mining and graph neural networks both operate on graph-structured data, but they address fundamentally different questions. Conflating them leads to tool mismatches — using a learned model where a deterministic algorithm suffices, or trying to compute structural features with a message-passing layer that was designed for something else.
This article explains what graph mining is, what message-passing GNNs are, where their use cases diverge, and how TGraphX exposes both in one coherent framework.
Graph Mining: What It Is
Graph mining extracts structural properties from a graph without learning from labels. The operations are deterministic given the graph's topology:
- Centrality measures: degree centrality, betweenness centrality, closeness, eigenvector centrality
- Motif counting: triangles, 3-paths, 4-cliques, clustering coefficients
- Community detection: label propagation, spectral clustering, Louvain-style methods
- Graph similarity: graph edit distance, WL graph kernels, spectral distance
- Classical shortest paths: BFS, Dijkstra, Floyd-Warshall
- Random walk features: Node2Vec, DeepWalk position encodings
Graph mining answers questions like:
- "Which nodes are most central in this network?"
- "Does this graph contain certain motif patterns?"
- "How similar are these two graphs structurally?"
- "Which communities exist in this network?"
These questions have well-defined answers for a given graph. No training data or labels are required.
GNN Message Passing: What It Is
GNN message passing learns to transform node/edge features by aggregating neighborhood information. Given labeled training data, a GNN learns a function:
h_v^(K) = f_θ( graph topology, node features, edge features )
such that h_v^(K) is predictive of a downstream target (node class, graph property, link existence).
GNNs answer questions like:
- "What is the class of each node given this training set?"
- "Is this link present or absent?"
- "What is the property of this molecule?"
- "How should this graph be classified?"
These questions require labels and a training process. The answer is statistical, not deterministic.
When to Use Graph Mining
You do not have labeled training data. If you cannot train a model, mining is your only option for extracting graph-structure insights.
You need interpretable structural features. Betweenness centrality has a precise mathematical definition. A GNN's node embedding is a learned function that is harder to interpret directly.
Your task is fundamentally structural. "Find the shortest path between A and B" is a graph algorithm. A GNN trained on this task would be an unnecessary complication.
You need population-level statistics. "What is the degree distribution of this network?" requires mining, not learning.
You are preparing features for a downstream model. Mining-derived features (Node2Vec embeddings, WL features, degree statistics) can be used as input features to a GNN, combining both approaches.
When to Use GNN Message Passing
You have labeled training data. Node classification, link prediction, and graph classification are supervised learning problems. GNNs are the right tool.
Node features carry signal beyond topology. If nodes have image content, text embeddings, or other rich features that correlate with labels, GNNs can learn to combine topology and features. Mining is topology-only.
You want to generalize to unseen nodes or graphs. Inductive GNNs (GraphSAGE, GIN with neighbor sampling) generalize to new nodes. Mining features are computed fresh for each new graph.
The task requires feature-topology joint modeling. When the prediction depends on how feature patterns are distributed across the topology, GNNs capture this interaction directly.
TGraphX's Graph Mining API
from tgraphx.mining import (
graph_summary,
degree_statistics,
triangle_count,
clustering_coefficient,
betweenness_centrality,
wl_graph_features,
)
import torch
edge_index = torch.tensor([[0, 1, 1, 2], [1, 0, 2, 1]], dtype=torch.long)
num_nodes = 3
summary = graph_summary(edge_index, num_nodes=num_nodes)
print(summary)
# {'num_nodes': 3, 'num_edges': 4, 'density': ..., 'is_directed': True, ...}
deg_stats = degree_statistics(edge_index, num_nodes=num_nodes)
print(deg_stats)
# {'mean_degree': ..., 'max_degree': ..., 'min_degree': ..., 'std_degree': ...}
# Weisfeiler-Lehman features for graph similarity
wl_features = wl_graph_features(edge_index, num_nodes=num_nodes, iterations=3)
TGraphX's GNN API
from tgraphx import Graph, ConvMessagePassing
import torch
N, C, H, W = 50, 8, 6, 6
g = Graph(
node_features=torch.randn(N, C, H, W),
edge_index=torch.randint(0, N, (2, 200), dtype=torch.long),
node_labels=torch.randint(0, 4, (N,)),
)
layer = ConvMessagePassing(in_shape=(C, H, W), out_shape=(16, H, W))
out = layer(g.node_features, g.edge_index)
print(out.shape) # [50, 16, 6, 6]
Combining Mining and Learning
TGraphX is designed to make both approaches composable. A common workflow:
- Mine structural features to understand the graph's properties and detect anomalies before training
- Compute positional encodings (e.g., Node2Vec) as node feature augmentation
- Train a GNN on the augmented features
from tgraphx.mining import node2vec_embeddings, graph_summary
from tgraphx import Graph, NeighborLoader
import torch
# Step 1: structural audit
edge_index = torch.randint(0, 100, (2, 500), dtype=torch.long)
summary = graph_summary(edge_index, num_nodes=100)
print("Density:", summary["density"])
# Step 2: Node2Vec positional encodings
pos_enc = node2vec_embeddings(
edge_index, num_nodes=100,
embedding_dim=16, walk_length=10, num_walks=5, seed=42
) # [100, 16]
# Step 3: Combine with node features and train
x_base = torch.randn(100, 8)
x_combined = torch.cat([x_base, pos_enc], dim=1) # [100, 24]
g = Graph(
node_features=x_combined,
edge_index=edge_index,
node_labels=torch.randint(0, 4, (100,)),
)
# ... proceed with GNN training
Key Differences Summarized
| Dimension | Graph Mining | GNN Message Passing |
|---|---|---|
| Requires labels | No | Yes (supervised) |
| Deterministic | Yes | No (depends on training) |
| Interpretable output | Yes (centrality, motif count) | Partially (embeddings are dense) |
| Generalizes to unseen graphs | By recomputation | Yes (inductive) |
| Handles rich node features | No (topology only) | Yes |
| Scales to large graphs | Depends on algorithm | With sampling (NeighborLoader) |
| TGraphX module | tgraphx.mining |
tgraphx.layers, tgraphx core |
Honest Limitations
Mining does not replace GNNs for supervised tasks. If you have labeled data and want to maximize predictive performance, mining features alone will typically underperform a well-tuned GNN that models the feature-topology joint distribution.
GNNs do not replace mining for structural understanding. A GNN trained for node classification learns node embeddings that are optimal for its training objective, not for answering "is this node a bridge node?" or "does this subgraph contain a k-clique?"
TGraphX's mining tools are building blocks, not a full graph analytics system. The mining module provides GNN-oriented structural features. For production graph analytics at scale, dedicated tools (NetworkX, cuGraph, GraphX) may be more appropriate.
Further Reading
- What is a TGX graph — the data model that unifies mining and learning in TGraphX
- Graph mining and motif discovery with TGraphX — detailed tutorial on TGraphX's mining API
- TGraphX vs NetworkX — graph analytics vs graph learning tools
- Neighbor sampling with TGraphX — scalable GNN training
- Explicit auditable graph APIs — why TGraphX separates mining and learning APIs explicitly