Spanner Graph, en étroite collaboration avec Google Research Graph Mining, propose une suite d'algorithmes couvrant les besoins d'analyse de graphes pour les cas d'utilisation suivants :
Centralité
Les algorithmes de centralité classent les nœuds en fonction de leur importance structurelle dans un graphique. Elle peut vous aider à identifier les comptes frauduleux dans la fintech, les influenceurs dans les graphiques sociaux, les routeurs critiques dans les réseaux de télécommunications et plus encore.
PageRank
PageRank attribue un score aux nœuds en fonction de leur importance. Un nœud est considéré comme plus important si de nombreux autres nœuds importants y sont associés. L'algorithme simule une marche aléatoire dans le graphe. Les nœuds visités plus souvent au cours de cette marche sont considérés comme plus importants. Pour en savoir plus sur l'algorithme, consultez PageRank.
Signature de la fonction
PageRank(input_parameters) YIELD node, score
Paramètres d'entrée
Tous les paramètres d'entrée courants et :
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| source_nodes | Tableau de nœuds de graphique | Non | (aucun) | Si elle est présente, source du PageRank personnalisé. |
| damping_factor | FLOAT64 | Non | 0,85 | Probabilité que, à une itération donnée, l'algorithme choisisse de traverser l'un des bords sortants du nœud actuel. La valeur doit être comprise dans la plage [0, 1). |
| max_iterations | INT64 | Non | 10 | Nombre maximal d'itérations de l'algorithme. Doit être positive. Un nombre d'itérations plus élevé tend à produire des résultats plus précis, mais au détriment d'un temps d'exécution plus long. |
| approx_precision | FLOAT64 | Non | 1e-2 | Seuil de précision de l'approximation pour l'algorithme. La valeur ne doit pas être négative. Des valeurs plus petites ont tendance à produire des résultats plus précis, mais au détriment d'un temps d'exécution plus long. |
Sortie
Résultats de la fonction :
| Nom | Type | Description |
|---|---|---|
| nœud | GRAPH_ELEMENT (nœud) | Un nœud dans le graphique. |
| score | FLOAT64 | Score PageRank du nœud. |
Exemple
EXPORT DATA OPTIONS (
uri = "gs://my-bucket-name/my-output.csv",
format = "csv"
) AS
GRAPH FinGraph
CALL PageRank(
node_labels => ['Account'], edge_labels => ['Transfers'],
source_nodes => ARRAY {
MATCH (n:Account {id:7})
RETURN n
}
) YIELD node, score
RETURN node.id, score;
BetweennessCentrality
BetweennessCentrality mesure la fréquence à laquelle un nœud se trouve sur les chemins les plus courts entre d'autres paires de nœuds. Les nœuds à forte centralité d'intermédiarité servent souvent de ponts essentiels reliant différentes parties du graphique. Pour en savoir plus sur l'algorithme, consultez Centralité d'intermédiarité.
Signature de la fonction
BetweennessCentrality(input_parameters) YIELD node, score
Paramètres d'entrée
Tous les paramètres d'entrée courants et :
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| num_source_nodes | INT64 | Non | (aucun) | S'il est défini, il doit être positif et spécifie le nombre de nœuds sources que l'algorithme doit sélectionner pour calculer les centralités d'intermédiarité approximatives. Si cette valeur n'est pas définie ou est définie sur un nombre supérieur au nombre de nœuds du graphique, tous les nœuds sont utilisés comme nœuds sources, c'est-à-dire que l'algorithme calcule les centralités d'intermédiarité exactes. Des valeurs plus élevées permettent d'obtenir de meilleures approximations, mais aussi des temps d'exécution plus longs. |
Sortie
Résultats de la fonction :
| Nom | Type | Description |
|---|---|---|
| nœud | GRAPH_ELEMENT (nœud) | Un nœud dans le graphique. |
| score | FLOAT64 | Score de centralité du nœud. |
Exemple
EXPORT DATA OPTIONS (
uri = "gs://my-bucket-name/my-output.csv",
format = "csv"
) AS
GRAPH FinGraph
CALL BetweennessCentrality(
node_labels => ['Account'], edge_labels => ['Transfers'], num_source_nodes => 5
) YIELD node, score
RETURN node.id, score;
ClosenessCentrality
ClosenessCentrality mesure la proximité d'un nœud par rapport à tous les autres nœuds du graphique. Les nœuds présentant une centralité de proximité élevée peuvent atteindre d'autres nœuds via des chemins plus courts. Pour en savoir plus sur l'algorithme, consultez Centralité de proximité.
Signature de la fonction
ClosenessCentrality(input_parameters) YIELD node, score
Paramètres d'entrée
Tous les paramètres d'entrée courants et :
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| Standard | STRING | Non | EXACT | Mode de l'algorithme. Les valeurs acceptées sont EXACT et HYBRID. |
| use_wasserman_faust | BOOL | Non | FALSE | Si la valeur est false, calculez les centralités de proximité standards. Si la valeur est true, calcule les centralités de proximité Wasserman-Faust. |
| epsilon | FLOAT64 | Non | 0,1 | Utilisé uniquement pour l'algorithme HYBRID. La valeur doit être comprise entre 0,0 et 1,0.
Des valeurs plus petites signifient généralement une précision plus élevée. Des valeurs plus élevées permettent généralement à l'algorithme de s'exécuter plus rapidement. |
| sample_size | INT64 | Non | 0 | Utilisé uniquement pour l'algorithme HYBRID. Nombre de nœuds pivots à utiliser pour calculer approximativement les valeurs de centralité. Cette valeur ne doit pas être négative
Si elle n'est pas définie ou est égale à zéro, la valeur par défaut min(100 * ln(N), N) est utilisée, où N correspond au nombre de nœuds du graphique d'entrée.
|
Sortie
Résultats de la fonction :
| Nom | Type | Description |
|---|---|---|
| nœud | GRAPH_ELEMENT (nœud) | Nœud du graphique. |
| score | FLOAT64 | Score de centralité de proximité du nœud. |
Exemple
EXPORT DATA OPTIONS (
uri = "gs://my-bucket-name/my-output.csv",
format = "csv"
) AS
GRAPH FinGraph
CALL ClosenessCentrality(
node_labels => ['Account'], edge_labels => ['Transfers'],
mode => 'EXACT'
) YIELD node, score
RETURN node.id, score;
Clustering
Les algorithmes de clustering regroupent les nœuds en clusters (également appelés communautés) de sorte que les nœuds de chaque cluster sont plus densément connectés les uns aux autres qu'aux nœuds des autres clusters. Cela permet de détecter les éventuels réseaux de fraude dans le secteur de la fintech, d'identifier les segmentations de clients dans le secteur de la vente au détail, et plus encore.
WeaklyConnectedComponents
WeaklyConnectedComponents recherche des ensembles de nœuds disjoints de sorte que chaque nœud d'un ensemble soit accessible depuis n'importe quel autre nœud du même ensemble, mais pas depuis les nœuds d'autres ensembles. Pour en savoir plus sur l'algorithme, consultez Composantes connexes.
Signature de la fonction
WeaklyConnectedComponents(input_parameters) YIELD node, cluster
Paramètres d'entrée
Tous les paramètres d'entrée courants.
Sortie
Résultats de la fonction :
| Nom | Type | Description |
|---|---|---|
| nœud | GRAPH_ELEMENT (nœud) | Nœud du graphique. |
| cluster | INT64 | ID du composant/cluster connecté auquel appartient le nœud.
Dans la plage [0, N), où N est le nombre de nœuds dans le graphe. |
Exemple
EXPORT DATA OPTIONS (
uri = "gs://my-bucket-name/wcc-output.csv",
format = "csv"
) AS
GRAPH FinGraph
CALL WeaklyConnectedComponents(
node_labels => ['Account'], edge_labels => ['Transfers']
) YIELD node, cluster
RETURN node.id, cluster;
ModularityClustering
ModularityClustering partitionne le graphe en clusters en optimisant la modularité, une mesure de qualité de la densité des connexions au sein des clusters par rapport à ce qui serait attendu dans un réseau aléatoire. Pour en savoir plus sur l'algorithme, consultez Clustering par modularité.
Signature de la fonction
ModularityClustering(input_parameters) YIELD node, cluster
Paramètres d'entrée
Tous les paramètres d'entrée courants et :
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| resolution | FLOAT64 | Non | 1.0 | Contrôle la précision du clustering. Doit être un nombre fini et non négatif. Des valeurs de résolution plus petites ont tendance à entraîner des clusters plus grands. Les valeurs types sont comprises entre 0, 5 et 5. Lorsque la résolution est de zéro, l'algorithme (avec un nombre suffisant d'itérations) trouve les composants connectés du graphique (en ignorant les arêtes dont la pondération est de zéro). |
| max_iterations | INT64 | Non | 10 | Nombre maximal d'itérations externes de l'algorithme. Doit être positive. Des valeurs plus élevées ont tendance à générer des clusters de meilleure qualité, au détriment d'une durée d'exécution plus longue. |
| max_inner_iterations | INT64 | Non | 10 | Nombre maximal d'itérations internes de l'algorithme. Doit être positive. Des valeurs plus élevées ont tendance à générer des clusters de meilleure qualité, mais au prix d'un temps d'exécution plus long. |
Sortie
Résultats de la fonction :
| Nom | Type | Description |
|---|---|---|
| nœud | GRAPH_ELEMENT (nœud) | Un nœud dans le graphique. |
| cluster | INT64 | ID de la communauté/du cluster auquel appartient le nœud.
Dans la plage [0, N), où N correspond au nombre de nœuds dans le graphique. |
Exemple
EXPORT DATA OPTIONS (
uri = "gs://my-bucket-name/modularity-output.csv",
format = "csv"
) AS
GRAPH FinGraph
CALL ModularityClustering(
node_labels => ['Account'], edge_labels => ['Transfers'],
resolution => 1.0, max_iterations => 10
) YIELD node, cluster
RETURN node.id, cluster;
CorrelationClustering
CorrelationClustering partitionne les nœuds en fonction de leur similarité ou dissimilarité par paires, dans le but de regrouper les nœuds similaires tout en séparant ceux qui ne le sont pas. Pour en savoir plus sur l'algorithme, consultez clustering de corrélation.
Signature de la fonction
CorrelationClustering(input_parameters) YIELD node, cluster
Paramètres d'entrée
Tous les paramètres d'entrée courants et :
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| resolution | FLOAT64 | Oui | (aucun) | Contrôle la précision du clustering. Doit être explicitement défini par le client. Doit être un nombre fini et non négatif. Les valeurs plus petites ont tendance à générer des clusters plus grands. Lorsque la résolution est nulle et que toutes les pondérations d'arêtes sont positives, l'algorithme (avec un nombre suffisant d'itérations) trouve les composants connectés du graphe. |
| max_iterations | INT64 | Non | 10 | Nombre maximal d'itérations externes de l'algorithme. Doit être positive. Des valeurs plus élevées ont tendance à générer des clusters de meilleure qualité, au détriment d'une durée d'exécution plus longue. |
| max_inner_iterations | INT64 | Non | 10 | Nombre maximal d'itérations internes de l'algorithme. Doit être positive. Des valeurs plus élevées ont tendance à générer des clusters de meilleure qualité, mais au prix d'un temps d'exécution plus long. |
Sortie
Résultats de la fonction :
| Nom | Type | Description |
|---|---|---|
| nœud | GRAPH_ELEMENT (nœud) | Un nœud dans le graphique. |
| cluster | INT64 | ID de la communauté/du cluster auquel appartient le nœud.
Dans la plage [0, N), où N correspond au nombre de nœuds dans le graphique. |
Exemple
EXPORT DATA OPTIONS (
uri = "gs://my-bucket-name/correlation-output.csv",
format = "csv"
) AS
GRAPH FinGraph
CALL CorrelationClustering(
node_labels => ['Account'], edge_labels => ['Transfers'],
resolution => 0.5
) YIELD node, cluster
RETURN node.id, cluster;
LabelPropagation
LabelPropagation attribue des nœuds à des clusters à l'aide d'une technique de propagation de libellés, en commençant par un libellé initial qui peut utiliser des libellés de départ fournis dans l'entrée. À mesure que les nœuds adoptent de manière itérative l'étiquette partagée par la majorité de leurs voisins, les groupes densément connectés convergent vers une étiquette de consensus, formant ainsi des communautés. Pour en savoir plus sur l'algorithme, consultez Propagation d'étiquettes.
Signature de la fonction
LabelPropagation(input_parameters) YIELD node, cluster
Paramètres d'entrée
Tous les paramètres d'entrée courants et :
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| seed_label_property | STRING | Non | (aucun) | Nom de la propriété de nœud pour l'étiquette de départ. |
| max_iterations | INT64 | Non | 10 | Nombre maximal d'itérations de propagation d'étiquettes effectuées par l'algorithme. Doit être un nombre fini et positif. |
Sortie
Résultats de la fonction :
| Nom | Type | Description |
|---|---|---|
| nœud | GRAPH_ELEMENT (nœud) | Nœud du graphique. |
| cluster | INT64 | ID du cluster/de l'étiquette propagé du nœud. |
Exemple
EXPORT DATA OPTIONS (
uri = "gs://my-bucket-name/lp-output.csv",
format = "csv"
) AS
GRAPH FinGraph
CALL LabelPropagation(
node_labels => ['Account'], edge_labels => ['Transfers'],
max_iterations => 10
) YIELD node, cluster
RETURN node.id, cluster;
CliqueFinding
CliqueFinding identifie les communautés denses qui se chevauchent potentiellement et qui atteignent un seuil de densité minimal, de sorte que chaque clique (un groupe de nœuds où chaque nœud est connecté à tous les autres nœuds) est contenue dans au moins un cluster. Pour en savoir plus sur l'algorithme, consultez Agrégateur de cliques.
Signature de la fonction
CliqueFinding(input_parameters) YIELD node, clique
Remarque : Contrairement à la plupart des algorithmes, il peut y avoir plusieurs lignes pour le même nœud, car un nœud peut faire partie de plusieurs cliques.
Paramètres d'entrée
Tous les paramètres d'entrée courants et :
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| min_density | FLOAT64 | Non | 0,9 | Densité minimale des clusters à renvoyer. La valeur doit être comprise entre 0 et 1. |
Sortie
Résultats de la fonction :
| Nom | Type | Description |
|---|---|---|
| nœud | GRAPH_ELEMENT (nœud) | Nœud du graphique. |
| clique | INT64 | ID de la clique à laquelle appartient le nœud. |
Exemple
EXPORT DATA OPTIONS (
uri = "gs://my-bucket-name/clique-output.csv",
format = "csv"
) AS
GRAPH FinGraph
CALL CliqueFinding(
node_labels => ['Account'], edge_labels => ['Transfers'],
min_density => 0.9
) YIELD node, clique
RETURN node.id, clique;
Similarité
Les algorithmes de similarité quantifient la ressemblance entre des paires de nœuds en fonction de la structure de leur voisinage. Cela est utile pour déduire les arêtes manquantes entre les nœuds pour la résolution d'entités, les recommandations et plus encore.
Spanner Graph est compatible avec les similarités de nœuds par paires suivantes, où les scores de similarité sont calculés en fonction des voisinages des nœuds.
JaccardSimilarity: basé sur le ratio entre les voisins communs et le nombre total de voisinsCosineSimilarity: basé sur les pondérations des arêtes des voisins communsCommonNeighborsSimilarity: en fonction du nombre de voisins partagésTotalNeighborsSimilarity: basé sur le nombre de voisins d'au moins l'un des deux nœuds.
Pour en savoir plus sur l'algorithme, consultez Similitude des nœuds par paire.
Ces quatre algorithmes partagent les mêmes arguments et la même structure de sortie.
Signature de la fonction
[JaccardSimilarity|CosineSimilarity|CommonNeighborsSimilarity|TotalNeighborsSimilarity](input_parameters)
YIELD source_node, target_node, similarity
Paramètres d'entrée
Tous les paramètres d'entrée courants et :
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| source_nodes | Tableau de nœuds de graphique | Oui | N/A | Nœuds sources pour le calcul de la similarité par paires. |
| target_nodes | Tableau de nœuds de graphique | Oui | N/A | Nœuds cibles pour le calcul de la similarité par paire. |
Sortie
Résultats de la fonction :
| Nom | Type | Description |
|---|---|---|
| source_node | GRAPH_ELEMENT (nœud) | Nœud source utilisé dans le calcul de similarité. |
| target_node | GRAPH_ELEMENT (nœud) | Nœud cible utilisé dans le calcul de la similarité. |
| similarité | FLOAT64 | Score de similarité calculé entre le nœud source et le nœud cible. |
Exemple
EXPORT DATA OPTIONS (
uri = "gs://my-bucket-name/jaccard-output.csv",
format = "csv"
) AS
GRAPH FinGraph
CALL JaccardSimilarity(
source_nodes => ARRAY {
MATCH (n:Account {id: 7})
RETURN n
},
target_nodes => ARRAY {
MATCH (n:Account)
WHERE n.id != 7
RETURN n
}
) YIELD source_node, target_node, similarity
RETURN source_node.id AS source_id, target_node.id AS target_id, similarity;
Recherche de chemin
Les algorithmes de recherche de chemin calculent les itinéraires optimaux entre les nœuds. Cela est utile pour identifier l'itinéraire le moins cher dans les chaînes d'approvisionnement, évaluer la vulnérabilité en cybersécurité, etc.
ShortestPath
ShortestPath calcule les chemins les plus courts entre un ensemble donné de nœuds sources et un ensemble donné de nœuds cibles. Pour en savoir plus sur l'algorithme, consultez Chemins les plus courts de plusieurs à plusieurs.
Signature de la fonction
ShortestPath(input_parameters) YIELD source_node, target_node, path, cost
Paramètres d'entrée
Tous les paramètres d'entrée courants et :
| Nom | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| source_nodes | Tableau de nœuds de graphique | Oui | N/A | Nœuds sources pour le calcul du plus court chemin. |
| target_nodes | Tableau de nœuds de graphique | Oui | N/A | Nœuds cibles pour le calcul du chemin le plus court. |
Sortie
Résultats de la fonction :
| Nom | Type | Description |
|---|---|---|
| source_node | GRAPH_ELEMENT (nœud) | Nœud source du chemin d'accès. |
| target_node | GRAPH_ELEMENT (nœud) | Nœud cible du chemin d'accès. |
| chemin d'accès | GRAPH_PATH | Chemin le plus court trouvé. |
| coût | FLOAT64 | Coût du chemin le plus court. |
Exemple
EXPORT DATA OPTIONS (
uri = "gs://my-bucket-name/shortest-path-output.csv",
format = "csv"
) AS
GRAPH FinGraph
CALL ShortestPath(
source_nodes => ARRAY {
MATCH (n:Account {id: 7})
RETURN n
},
target_nodes => ARRAY {
MATCH (n:Account {id: 16})
RETURN n
}
) YIELD source_node, target_node, path, cost
RETURN source_node.id AS source_id, target_node.id AS target_id, PATH_LENGTH(path) AS length, cost;