HR-QDE Prototype
  1. Lerner
  2. Stelle
  3. Gap
  4. 4 Lernpfad
Lerner
A. Heinrich
Zielstelle
Data Scientist (KMU München)

Pfad-Berechnungs-Strategie

RG2.2-S

Echte GDS-Dijkstra-Berechnung: Skill-Skill-Graph wird projiziert (Edges = Module, Gewicht = ECTS), Dijkstra findet ECTS-minimale Pfade von acquired zu missing Skills. Demonstriert Graph Data Science als Algorithmik-Plattform.

Erweiterte Optionen (Constraints)
Module
3
ECTS-Summe
21
Offen
1
Berechnungszeit
58 ms

Empfohlener Lernpfad (3 Module)

  1. 1

    Machine Learning Grundlagen

    INF-501 · 6 ECTS
    Voraussetzungen:
    Statistik Python (Computerprogrammierung)
    Schließt Skill-Lücke:
    maschinelles Lernen
  2. 2

    Cloud-Technologien für Data Professionals

    INF-410 · 6 ECTS
    Voraussetzungen:
    Python (Computerprogrammierung)
    Schließt Skill-Lücke:
    Cloud-Technologien
  3. 3

    Deep Learning Spezialisierung

    INF-602 · 9 ECTS
    Voraussetzungen:
    maschinelles Lernen
    Schließt Skill-Lücke:
    Deep Learning

Teilweise gelöst.

Nicht jeder geforderte Skill konnte durch ein verfügbares Modul abgedeckt werden. Offen bleiben: SQL

Berechnungs-Transparenz GDS Dijkstra
Architektur:

Graph Data Science Library. Projizierter Skill-Skill-Graph (Edges = Module, Weight = ECTS). Dijkstra läuft als nativer Algorithmus im Neo4j-Server. Greedy-Sequenzierung für valide Abhängigkeits-Reihenfolge.

Knoten: 13
Edges: 16
Cypher-Calls: 4
Sequenz-Iter.: 4
Graph-Projektion: hrqde_path_6a301c4d614143_84827294
Gefundene Dijkstra-Pfade (kürzester pro fehlendem Skill):
→ Ziel: 3a2d5b45-56e4-4f5a-a55a-4a4a65afdc43
Quelle: ccd0a1d9-afda-43d9-b901-96344886e14d   Cost: 6
Skill-Sequenz: ccd0a1d9-afda-43d9-b901-96344886e14d → 3a2d5b45-56e4-4f5a-a55a-4a4a65afdc43
→ Ziel: bd14968e-e409-45af-b362-3495ed7b10e0
Quelle: ccd0a1d9-afda-43d9-b901-96344886e14d   Cost: 6
Skill-Sequenz: ccd0a1d9-afda-43d9-b901-96344886e14d → bd14968e-e409-45af-b362-3495ed7b10e0
→ Ziel: ecc4552a-92c5-4222-b18d-faf5ac841080
Quelle: ccd0a1d9-afda-43d9-b901-96344886e14d   Cost: 15
Skill-Sequenz: ccd0a1d9-afda-43d9-b901-96344886e14d → 3a2d5b45-56e4-4f5a-a55a-4a4a65afdc43 → ecc4552a-92c5-4222-b18d-faf5ac841080
Cypher-Queries (vier Phasen) anzeigen
projection
// Phase 1: Skill-Skill-Graph-Projektion
// Knoten: Skills, die von Demo-Modulen referenziert werden
// Edges:  pro Modul eine Kante prereq -> outcome,
//         Weight = ECTS, Property moduleUri für Resolution

CALL gds.graph.project.cypher(
    $graphName,
    'MATCH (m)-[:hrqde__requiresCompetence]->(s)
     WHERE m.uri STARTS WITH "..."
     RETURN DISTINCT id(s) AS id
     UNION
     MATCH (m)-[:hrqde__hasOutcome]->()
              -[:hrqde__targetsCompetence]->(s)
     WHERE m.uri STARTS WITH "..."
     RETURN DISTINCT id(s) AS id',
    'MATCH (s1)<-[:hrqde__requiresCompetence]-(m)
                -[:hrqde__hasOutcome]->()
                -[:hrqde__targetsCompetence]->(s2)
     WHERE m.uri STARTS WITH "..."
     RETURN id(s1) AS source, id(s2) AS target,
            toFloat(m.hrqde__ects) AS weight,
            m.uri AS moduleUri'
)
YIELD nodeCount, relationshipCount
dijkstra
// Phase 2: Dijkstra für alle (acquired, missing) Paare
// mit Best-of-N Auswahl pro missing Skill

UNWIND $acquiredUris AS acqUri
MATCH (source:Resource {uri: acqUri})
UNWIND $missingUris AS missingUri
MATCH (target:Resource {uri: missingUri})

CALL gds.shortestPath.dijkstra.stream($graphName, {
    sourceNode: source,
    targetNode: target,
    relationshipWeightProperty: 'weight'
})
YIELD totalCost, path

WITH missingUri, acqUri, totalCost,
     [n IN nodes(path) | n.uri] AS skillUris
ORDER BY missingUri, totalCost ASC
WITH missingUri,
     collect({sourceUri: acqUri, totalCost: totalCost,
              skillUris: skillUris})[0] AS bestPath
RETURN missingUri, bestPath.sourceUri, bestPath.totalCost,
       bestPath.skillUris
moduleResolution
// Phase 3: Pro Skill-Übergang das billigste Modul auflösen

UNWIND $transitions AS t
MATCH (s1:Resource {uri: t.from})
      <-[:hrqde__requiresCompetence]-(m:Resource)
      -[:hrqde__hasOutcome]->()
      -[:hrqde__targetsCompetence]->(s2:Resource {uri: t.to})
WHERE m.uri STARTS WITH "..."
WITH t, m
ORDER BY toFloat(m.hrqde__ects) ASC, m.uri ASC
WITH t, collect(m.uri)[0] AS moduleUri
RETURN DISTINCT moduleUri
cleanup
// Phase 5: Graph-Projektion droppen (im finally-Block)

CALL gds.graph.drop($graphName, false)
YIELD graphName
RETURN graphName
Loading…
Loading the web debug toolbar…
Attempt #