Tool 07 · Algorithm Deep Dive
Collaborative Filtering + SAP Taxonomy
SAP ships 15,000+ Fiori apps with overlapping names and functionality. Rule-matching on app names is hopeless — "Post Journal Entry" and "Record GL Posting" describe the same app. Even experienced consultants can't memorize the catalog. Projects often build custom apps because nobody knows a standard Fiori app already exists.
Two-stage retrieval + ranking over the full Fiori catalog. Bi-Encoder (bge-large) performs fast semantic search understanding synonyms and concepts. Cross-Encoder precisely re-ranks top candidates. Output includes fit score, coverage tag, and gap analysis — directly feeding RICEFW estimation.
bge-large-en-v1.5 — 1,024-dim sentence embeddings. Pre-encodes all 15,000+ Fiori app descriptions (title + business scenario + key fields).
FAISS Flat Index — Exact search (small enough to stay in memory). Cosine similarity over 1,024-dim vectors.
bge-reranker-large — Re-ranks top-25 candidates to top-5. Takes both query and document as input for precise scoring.
Module compatibility filter using Tool 03 output. Ensures recommended apps are compatible with assigned SAP modules.
Requirement: "Create purchase order with approval workflow" (Module: MM)
Create, edit, and display purchase orders with flexible workflow integration.
Coverage: Full | Business Catalog: SAP_MM_BC_PO_MANAGEUniversal inbox for approving purchase orders and other workflow tasks.
Coverage: Partial (approval only) | Business Catalog: SAP_CROSS_BC_WORKFLOWMass maintenance of purchase order header and item data.
Coverage: Partial | Gap: No approval workflow integration
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ FIORI APP RECOMMENDER PIPELINE │
├─────────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ │
│ │ INPUT: │ "Create purchase order with approval workflow" │
│ │ Requirement │ Module: MM (from Tool 03) │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ STEP 1: BI-ENCODER RETRIEVAL (Top-25) │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ bge-large-en-v1.5 Bi-Encoder │ │ │
│ │ │ │ │ │
│ │ │ Requirement → Embedding (1,024-dim) │ │ │
│ │ │ │ │ │
│ │ │ FAISS Flat Index over 15,000+ Fiori apps: │ │ │
│ │ │ • App ID │ │ │
│ │ │ • Title │ │ │
│ │ │ • Description │ │ │
│ │ │ • Business Scenario │ │ │
│ │ │ • Key Fields │ │ │
│ │ │ │ │ │
│ │ │ Cosine Similarity: sim(q, app) = (q·app)/(‖q‖·‖app‖) │ │ │
│ │ │ │ │ │
│ │ │ Returns: Top-25 candidates (~5ms) │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ STEP 2: CROSS-ENCODER RE-RANKING (Top-5) │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ bge-reranker-large Cross-Encoder │ │ │
│ │ │ │ │ │
│ │ │ For each of 25 candidates: │ │ │
│ │ │ Input = [CLS] Requirement [SEP] App_Description [SEP] │ │ │
│ │ │ Output = Relevance Score (0-1) │ │ │
│ │ │ │ │ │
│ │ │ Why two stages? │ │ │
│ │ │ • Cross-Encoder too slow for 15,000 apps (~30s) │ │ │
│ │ │ • Bi-Encoder fast but less accurate │ │ │
│ │ │ • Combined = Speed (5ms) + Accuracy (re-ranked) │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ STEP 3: MODULE COMPATIBILITY FILTER │ │
│ │ │ │
│ │ Filter by assigned module (MM from Tool 03): │ │
│ │ • App must be compatible with MM module │ │
│ │ • Business Catalog must include MM scope │ │
│ │ • Cross-module apps kept if relevant │ │
│ │ │ │
│ │ If top app filtered out, promote next compatible app │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ STEP 4: COVERAGE ANALYSIS & OUTPUT │ │
│ │ │ │
│ │ Compare requirement text to app capabilities: │ │
│ │ • Full coverage: All requirement aspects covered │ │
│ │ • Partial coverage: Some aspects missing → List gaps │ │
│ │ • No coverage: No matching app → Suggest custom development │ │
│ │ │ │
│ │ Output: Top-5 apps with fit scores, coverage tags, gap lists │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ OUTPUT JSON: │ │
│ │ { │ │
│ │ "requirement": "Create purchase order with approval workflow", │ │
│ │ "module": "MM", │ │
│ │ "recommendations": [ │ │
│ │ {"app_id": "F0842A", "name": "Manage Purchase Orders", │ │
│ │ "fit": 0.94, "coverage": "full"}, │ │
│ │ {"app_id": "F0862", "name": "My Inbox - Approve POs", │ │
│ │ "fit": 0.87, "coverage": "partial", │ │
│ │ "gaps": ["No PO creation capability"]} │ │
│ │ ] │ │
│ │ } │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────┘
Tool 07 reduces custom development by identifying standard Fiori apps that meet requirements.
| Metric | Value | Benchmark |
|---|---|---|
| Top-1 Accuracy | 86.4% | 1,000 requirement-app pairs |
| Top-3 Accuracy | 94.2% | Same test set |
| Top-5 Accuracy | 96.1% | Same test set |
| Mean Reciprocal Rank (MRR) | 0.91 | Industry standard |
| Retrieval Latency | 5ms | Bi-Encoder only |
| Re-ranking Latency | 45ms | Cross-Encoder (25 candidates) |
Result: 6 months of custom development avoided. Estimated savings: $180,000.