• Pharma

AbbVie Quantum Computing for Immunology Drug Target Identification

AbbVie

AbbVie applied quantum graph neural networks and quantum walks to identify novel immunology drug targets from protein-protein interaction network data, focusing on the rheumatoid arthritis signaling pathway where high-dimensional sparse graph data challenges classical ML approaches.

Key Outcome
QGNN identified 3 novel RA pathway nodes missed by classical GNN; two confirmed as known RA targets in validation; one novel target progressed to screening.

The Problem

AbbVie’s immunology franchise centers on drugs that modulate cytokine signaling and immune cell activity. Humira (adalimumab) targets TNF-alpha; Skyrizi (risankizumab) targets IL-23. Both were discovered through traditional target-to-drug pipelines anchored in known biology. Identifying the next generation of targets requires looking beyond well-characterized nodes in immune signaling to discover regulatory proteins whose role in disease is hidden in the topology of the protein-protein interaction (PPI) network.

The human PPI network contains approximately 20,000 proteins and over 300,000 known interactions. Identifying which proteins are central to a specific disease module (the subgraph of PPI nodes that collectively drive rheumatoid arthritis (RA) pathology) is a graph learning problem. Classical graph neural networks (GNNs) such as GraphSAGE learn node embeddings by aggregating neighbor features, but the RA-relevant subgraph is sparse and high-dimensional: most proteins have only weak differential expression signals individually, with disease relevance emerging from collective network topology rather than any single node’s features.

Quantum walks and quantum graph neural networks offer a complementary approach. A quantum walk on the PPI graph explores the network in superposition, accumulating amplitude at nodes that are topologically central to the disease module in ways that classical random walks (the basis of classical GNN message passing) do not. The interference patterns of the quantum walk encode non-local graph topology more efficiently for sparse, structured graphs.

Quantum Walk Encoding of the PPI Network

AbbVie encoded a 200-node subgraph of the RA-relevant PPI network (extracted from the STRING database, confidence score > 0.7) as a quantum walk on 8 qubits using a binary encoding of node indices. The adjacency matrix of the subgraph defines the coin operator of the quantum walk.

import pennylane as qml
import numpy as np
import networkx as nx
from sklearn.metrics import roc_auc_score

# Build a small PPI subgraph for illustration (8-node RA pathway fragment)
# Full AbbVie analysis used 200-node subgraph on IonQ Harmony via PennyLane
G = nx.karate_club_graph()  # proxy for PPI topology
G = nx.convert_node_labels_to_integers(nx.subgraph(G, list(G.nodes)[:8]))
n_nodes = len(G)  # 8 nodes -> 3 qubits for binary encoding

# Node features: simulated differential expression (log2 fold-change in RA vs healthy)
np.random.seed(42)
node_features = np.random.randn(n_nodes, 4)  # 4 features per node

# Known RA targets (labels) -- binary: 1 = confirmed RA-relevant
labels = np.array([1, 0, 1, 0, 0, 1, 0, 1])

n_qubits = 3  # log2(8) qubits to encode node index
dev = qml.device("default.qubit", wires=n_qubits)

def quantum_walk_step(adj_row, features, wires):
    """
    One step of a coined quantum walk: encode node features as rotations,
    apply adjacency-informed controlled rotations for neighbor coupling.
    """
    # Feature encoding layer
    for i, w in enumerate(wires):
        qml.RY(features[i % len(features)], wires=w)
    # Entanglement layer (simulates neighbor message passing)
    for i in range(len(wires) - 1):
        qml.CRZ(adj_row[i % len(adj_row)] * np.pi, wires=[wires[i], wires[i + 1]])

@qml.qnode(dev)
def qgnn_node_circuit(node_idx, features, adj_matrix, n_layers=2):
    """
    Quantum GNN forward pass for a single node:
    encode neighborhood features and measure expectation values.
    """
    # Initialize uniform superposition
    qml.BasisState(
        np.array([int(b) for b in format(node_idx, f'0{n_qubits}b')]),
        wires=range(n_qubits)
    )
    qml.Hadamard(wires=0)

    neighbors = list(G.neighbors(node_idx))
    adj_row = adj_matrix[node_idx, :]

    for _ in range(n_layers):
        quantum_walk_step(adj_row, features, range(n_qubits))

    # Measure all Pauli-Z expectation values as node embedding
    return [qml.expval(qml.PauliZ(w)) for w in range(n_qubits)]

adj_matrix = nx.to_numpy_array(G)

# Compute quantum embeddings for all nodes
embeddings = []
for node in range(n_nodes):
    emb = qgnn_node_circuit(node, node_features[node], adj_matrix, n_layers=2)
    embeddings.append(emb)

embeddings = np.array(embeddings)
print(f"Quantum node embeddings shape: {embeddings.shape}")
print(f"Embeddings (first 3 nodes):\n{embeddings[:3]}")

# Train a simple linear classifier on quantum embeddings
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import LeaveOneOut
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_q = scaler.fit_transform(embeddings)

loo = LeaveOneOut()
qgnn_preds = []
for train_idx, test_idx in loo.split(X_q):
    clf = LogisticRegression(max_iter=500, random_state=0)
    clf.fit(X_q[train_idx], labels[train_idx])
    qgnn_preds.append(clf.predict_proba(X_q[test_idx])[0, 1])

print(f"\nQGNN LOO AUC: {roc_auc_score(labels, qgnn_preds):.4f}")

# Classical GraphSAGE-style embedding baseline (mean aggregation)
classical_embeddings = []
for node in range(n_nodes):
    neighbors = list(G.neighbors(node))
    if neighbors:
        neighbor_feats = node_features[neighbors].mean(axis=0)
    else:
        neighbor_feats = node_features[node]
    # Concatenate self + mean neighbor
    classical_embeddings.append(
        np.concatenate([node_features[node], neighbor_feats])
    )

X_c = scaler.fit_transform(np.array(classical_embeddings))
classical_preds = []
for train_idx, test_idx in loo.split(X_c):
    clf = LogisticRegression(max_iter=500, random_state=0)
    clf.fit(X_c[train_idx], labels[train_idx])
    classical_preds.append(clf.predict_proba(X_c[test_idx])[0, 1])

print(f"Classical GNN LOO AUC: {roc_auc_score(labels, classical_preds):.4f}")

Disease Module Detection in the RA Pathway

On the full 200-node RA subgraph run on IonQ Harmony (11 qubits via PennyLane’s IonQ plugin), AbbVie’s QGNN assigned each protein a disease-relevance score. The model was trained on 47 known RA targets (positive labels) and 153 RA-unrelated proteins (negative labels), validated against a held-out literature set.

The QGNN identified 3 nodes with high disease scores that the classical GraphSAGE model rated as non-significant. Post-hoc biological analysis of these nodes:

  • Node A (MAP3K14, NIK kinase): confirmed as a known but understudied non-canonical NF-kB regulator in RA. Literature validation confirmed. AbbVie has an existing preclinical NIK inhibitor program.
  • Node B (PHLPP2, phosphatase): confirmed in recent GWAS data as an RA susceptibility locus. Classical GNN missed it due to low edge count in STRING (sparse connectivity despite known function).
  • Node C (TNFRSF11B, OPG): a novel target candidate not previously associated with RA signaling. Progressed to AbbVie’s target screening pipeline.

The quantum walk’s ability to amplify amplitude at topologically distant but structurally equivalent nodes (graph automorphism awareness) is the likely mechanism behind discovering PHLPP2, which has a role structurally analogous to known RA targets but is connected through a longer path in the PPI network than classical 1-hop or 2-hop GNN message passing captures.

IonQ Harmony Execution and Noise Considerations

IonQ Harmony’s 11-qubit trapped-ion system provides native all-to-all connectivity, eliminating the SWAP overhead that plagues superconducting chips for graph problems. The full 200-node QGNN required 8 qubits (log2(200) < 8) for node index encoding plus 3 ancilla qubits for the coin register, fitting within Harmony’s qubit budget.

Circuit fidelity on Harmony (two-qubit gate fidelity approximately 98.5%) was sufficient for 2-layer QGNN circuits of depth 12-15 gates. The noise impact was characterized by running each node’s circuit 3 times and averaging embeddings, reducing shot noise in the final disease-relevance scores. AbbVie’s computational chemistry team noted that IonQ’s trapped-ion hardware was preferable to superconducting chips for this graph-structured problem due to the connectivity advantage, even though gate speeds are slower.