Home / Architecture / Tool 10 Demo / Algorithm Detail

Tool 10 · Algorithm Deep Dive

Change Impact Analyzer

Graph Neural Network + Process Mining

81.4%Recall @90% Prec
50kAvg Nodes/Graph
128Embedding Dims
10kRandom Walks
Try Interactive Demo

🎯 Why This Algorithm

📋 Problem Statement

Impact is inherently a graph problem — if you change object A, which other objects feel it? A "where-used" list shows direct dependencies but misses indirect ripple effects. A developer changes one line in a BAPI; where-used shows 12 dependencies. Actual impact: 47 downstream programs break at month-end.

✅ Solution

Typed dependency graph built from SolMan/Signavio data. Node2Vec embeddings capture structural similarity — finding objects that "look like" the changed one in the dependency web. Weighted random walk propagates impact through the graph, decaying with hop distance and edge-type weight.

🧩 What It Comprises

🕸️ Dependency Graph

Typed graph: requirements ↔ objects ↔ modules ↔ compliance packs. ~50k nodes on mid-size program. Edge types: CALLS, READS_FROM, INHERITS, IMPLEMENTS, USES_DATA_FROM.

🧬 Node2Vec Embeddings

128-dim embeddings trained on full graph. Captures structural role: "What else looks like this object in the dependency web?"

🚶 Random Walk Propagation

10,000 weighted random walks from changed node. Transition probabilities weighted by edge type importance.

📊 Ripple Score

Aggregated visit counts normalized to 0-100 impact score per downstream object.

📥 Inputs & 📤 Outputs

📥 Inputs

  • Change description (natural language)
  • Target object (extracted via NER)
  • Dependency graph (from SolMan/Signavio)

📤 Outputs

  • Ripple list: affected objects, modules, compliance items
  • Ripple intensity score (0-100)
  • Explanation path (change → A → B → C)
  • Recommended testing scope

🕸️ Dependency Graph Visualization

A
B
C
D
E

Changed Node: B → Ripple effects to A, C, D, E

🔄 How It Runs — Step by Step

┌─────────────────────────────────────────────────────────────────────────────────────────┐
│                        CHANGE IMPACT ANALYZER PIPELINE                                     │
├─────────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                           │
│   ┌──────────────┐                                                                        │
│   │   INPUT:     │  "Change tax calculation logic in BAPI_TAX_CALC"                        │
│   │ Change Text  │                                                                        │
│   └──────┬───────┘                                                                        │
│          │                                                                                 │
│          ▼                                                                                 │
│   ┌──────────────────────────────────────────────────────────────────┐                    │
│   │                    STEP 1: NER TARGET EXTRACTION                    │                    │
│   │                                                                     │                    │
│   │   Fine-tuned NER extracts target object from change text:           │                    │
│   │   "BAPI_TAX_CALC" → Object Type: BAPI, Module: FI                   │                    │
│   └──────────────────────────────────────────────────────────────────┘                    │
│          │                                                                                 │
│          ▼                                                                                 │
│   ┌──────────────────────────────────────────────────────────────────┐                    │
│   │                    STEP 2: BUILD DEPENDENCY GRAPH (Nightly)         │                    │
│   │                                                                     │                    │
│   │   Import from SolMan / Signavio:                                    │                    │
│   │                                                                     │                    │
│   │   Nodes: Programs, Function Modules, Classes, Tables, CDS Views,    │                    │
│   │          BAPIs, Requirements, Modules, Compliance Packs             │                    │
│   │                                                                     │                    │
│   │   Edges (with type weights):                                        │                    │
│   │   ┌──────────────────┬──────────┐                                  │                    │
│   │   │ Edge Type        │ Weight   │                                  │                    │
│   │   ├──────────────────┼──────────┤                                  │                    │
│   │   │ READS_FROM       │ 1.0      │ (strongest dependency)           │                    │
│   │   │ CALLS            │ 0.8      │                                  │                    │
│   │   │ IMPLEMENTS       │ 0.7      │                                  │                    │
│   │   │ USES_DATA_FROM   │ 0.6      │                                  │                    │
│   │   │ INHERITS         │ 0.5      │                                  │                    │
│   │   └──────────────────┴──────────┘                                  │                    │
│   └──────────────────────────────────────────────────────────────────┘                    │
│          │                                                                                 │
│          ▼                                                                                 │
│   ┌──────────────────────────────────────────────────────────────────┐                    │
│   │                    STEP 3: Node2Vec EMBEDDING (Nightly)            │                    │
│   │                                                                     │                    │
│   │   Train Node2Vec on full graph:                                     │                    │
│   │   • Random walks generate "sentences" of nodes                      │                    │
│   │   • Skip-gram model learns 128-dim embeddings                       │                    │
│   │   • Similar structural roles → similar embeddings                   │                    │
│   │                                                                     │                    │
│   │   Cosine similarity finds "structurally similar" objects            │                    │
│   └──────────────────────────────────────────────────────────────────┘                    │
│          │                                                                                 │
│          ▼                                                                                 │
│   ┌──────────────────────────────────────────────────────────────────┐                    │
│   │                    STEP 4: WEIGHTED RANDOM WALK PROPAGATION         │                    │
│   │                                                                     │                    │
│   │   Start at changed node (BAPI_TAX_CALC)                             │                    │
│   │   Run 10,000 random walks with:                                     │                    │
│   │   • Transition probability ∝ edge_weight                            │                    │
│   │   • Restart probability = 0.15 (teleport back to source)            │                    │
│   │   • Decay factor = 0.85 per hop                                     │                    │
│   │                                                                     │                    │
│   │   ┌─────────────────────────────────────────────────────────────┐  │                    │
│   │   │  Walk 1: BAPI_TAX_CALC → READS_FROM(1.0) → TAX_TABLE         │  │                    │
│   │   │          → CALLS(0.8) → TAX_REPORT → CALLS(0.8) → FI_POST    │  │                    │
│   │   │                                                              │  │                    │
│   │   │  Walk 2: BAPI_TAX_CALC → CALLS(0.8) → VALIDATION_FUNC        │  │                    │
│   │   │          → (restart) → BAPI_TAX_CALC → ...                    │  │                    │
│   │   └─────────────────────────────────────────────────────────────┘  │                    │
│   │                                                                     │                    │
│   │   After 10,000 walks, count visits per node → Impact Score          │                    │
│   └──────────────────────────────────────────────────────────────────┘                    │
│          │                                                                                 │
│          ▼                                                                                 │
│   ┌──────────────────────────────────────────────────────────────────┐                    │
│   │                    STEP 5: RIPPLE LIST & OUTPUT                    │                    │
│   │                                                                     │                    │
│   │   Normalize visit counts to 0-100 Ripple Score:                     │                    │
│   │                                                                     │                    │
│   │   ┌─────────────────────────────┬───────────────┬────────────────┐ │                    │
│   │   │ Object                      │ Ripple Score  │ Impact Path    │ │                    │
│   │   ├─────────────────────────────┼───────────────┼────────────────┤ │                    │
│   │   │ TAX_TABLE                   │ 98            │ Direct READS   │ │                    │
│   │   │ TAX_REPORT                  │ 76            │ CALLS → CALLS  │ │                    │
│   │   │ FI_POSTING_PROGRAM          │ 64            │ CALLS → CALLS  │ │                    │
│   │   │ VALIDATION_FUNC             │ 52            │ Direct CALLS   │ │                    │
│   │   │ MM_TAX_INTERFACE            │ 31            │ CALLS → READS  │ │                    │
│   │   └─────────────────────────────┴───────────────┴────────────────┘ │                    │
│   │                                                                     │                    │
│   │   Output: Ripple list + Recommended testing scope                    │                    │
│   └──────────────────────────────────────────────────────────────────┘                    │
│                                                                                           │
└─────────────────────────────────────────────────────────────────────────────────────────┘
                    

🏗️ Architecture & Integration

Where Change Impact Analyzer Sits in A²AI

📊 SolMan
Object Registry
📋 Signavio
Process Flows
↓ (Nightly Import)
🕸️ TOOL 10
Change Impact Analyzer
Graph + Node2Vec
TOOL 05
Risk Estimator
TOOL 09
Clean Core
Testing Plan
Scope Generator

Tool 10 prevents surprises during upgrades and custom development.

🔬 Recommended Enhancement: R-GCN

Relational Graph Convolutional Network (R-GCN)

Current Random Walk treats all edge types with fixed weights. R-GCN learns edge-type-specific weight matrices:

h_i^{(l+1)} = σ( Σ_{r∈R} Σ_{j∈N_i^r} (1/c_{i,r}) W_r^{(l)} h_j^{(l)} + W_0^{(l)} h_i^{(l)} )

Expected improvement: 81.4% recall → 88-91% recall at 90% precision.

📐 Mathematical Explanation

Random Walk with Restart (RWR) Stationary Distribution:

p = (1-c) W p + c e_i

Where:
• W = Column-normalized weighted adjacency matrix
• c = Restart probability (0.15)
• e_i = One-hot vector at start node i
• p = Stationary distribution (impact scores)

Node2Vec Objective:

max_f Σ_{u∈V} [-log Z_u + Σ_{n∈N_S(u)} f(n)·f(u)]

Where N_S(u) is the neighborhood of u generated by biased random walks.

Edge-Type Weighted Transition Probability:

P(v | u) = w(u,v) / Σ_{k∈N(u)} w(u,k)

Where w(u,v) is edge-type specific weight (READS=1.0, CALLS=0.8, etc.)

📊 Measured Performance

MetricValueBenchmark
Recall @ 90% Precision81.4%300-change backtest
Mean Average Precision (MAP)0.76Ranked impact list quality
False Positive Rate9.2%Objects flagged but not actually impacted
Graph Build Time~45s50k node graph
Query Latency120msImpact computation

📚 Training & Calibration Set

  • Graph Source: SolMan + Signavio exports (refreshed nightly)
  • Node2Vec Training: Full graph, 10 epochs, 80 walk length, 10 walks per node
  • Edge Weights: Calibrated on 300 historical changes with known impacts
  • Validation: 5 projects with documented change impact logs
  • Retrain Schedule: Nightly graph rebuild + Node2Vec retrain

🎬 End-to-End Example

Scenario: Tax Calculation BAPI Change

  1. Input: Developer plans to change tax calculation in BAPI_TAX_CALC
  2. NER: Extracts target object "BAPI_TAX_CALC" (FI module, BAPI type)
  3. Random Walk: Propagates from BAPI through dependency graph
  4. Output: 47 impacted objects identified, including 12 not in where-used list
  5. Action: Testing scope expanded to cover all 47 objects

Result: Month-end closing succeeds; avoided 2-week delay and $80k rework.