import numpy as np import pandas as pd def build_node_features(df: pd.DataFrame, users: pd.DataFrame): """ Returns zero node features. This is intentional: the benchmark is designed so that static structural features carry NO signal. Only temporal memory (TGN) can solve the task. XGBoost / GNN with static features must fail — proving temporal necessity. """ user_ids = users["user_id"].values return np.zeros((len(user_ids), 2), dtype=np.float32)