Evidence-aware competency gap analysis with prerequisite sequencing, explainable resource matching, and ranking sensitivity.
Area: Learning & Development · Competency Intelligence · Workforce Development
Status: working research prototype
Author: Devis Wawan Saputra
Competency systems often make a dangerous simplification:
no competency record = no competency.
This repository explicitly avoids that assumption.
Competency Gap Intelligence separates:
- what a role requires
- what evidence exists
- how strong and recent that evidence is
- whether a gap is actually confirmed
- which prerequisite skills block progression
- which resources match the learner's current and target levels
- how sensitive the priority order is to role-importance assumptions
The output is designed to support development planning, not performance scoring.
Missing evidence is not proficiency zero.
A competency can be classified as:
gapmetexceeds_targetunknown_evidenceinsufficient_evidence
Only confirmed gaps receive a numeric development priority.
Unknown or weak evidence triggers assessment/review instead of automatic training.
- How should role requirements and demonstrated evidence be represented on an explicit scale?
- How should missing, stale, or low-confidence evidence change gap analysis?
- Which confirmed gaps remain high priority under different importance assumptions?
- How should prerequisite competencies affect development order?
- Which learning resources match the learner's current level, target level, and prerequisite state?
- Which recommendations are stable enough to support human review?
The implemented path is:
- declare a proficiency scale
- define role requirements
- collect competency evidence with provenance
- aggregate multiple evidence records
- classify each competency
- rank confirmed gaps
- identify prerequisite blockers
- sequence development needs
- match structured resources
- test ranking sensitivity under alternative importance scenarios
Every analysis requires a named scale with:
- minimum
- maximum
The synthetic demo uses a 0–5 scale, but the code does not assume that all competency frameworks use those numbers.
That matters because frameworks such as SFIA and O*NET define their own level structures and anchors.
A number without its scale definition is not a meaningful competency statement.
A role competency can include:
- target proficiency
- importance
- framework/source
- rationale
Example:
{
"statistics": {
"target": 3,
"importance": 1.4,
"framework": "synthetic role profile",
"rationale": "Required before advanced learning-analytics work."
}
}Importance affects priority only after a gap is supported by adequate evidence.
Evidence records can include:
- competency
- observed level
- source
- evidence type
- confidence
- observation date
- assessor
Multiple observations are combined using a transparent confidence-weighted mean.
The aggregation also records:
- evidence count
- mean confidence
- latest observation date
- evidence age
- stale flag
- sources
- evidence types
- assessors
This is deliberately inspectable. It is not presented as a psychometric model.
If no usable evidence exists:
status = unknown_evidence
current = None
gap = None
priority = None
action = collect_evidence
If evidence exists but is stale or below the configured confidence threshold:
status = insufficient_evidence
priority = None
action = review_evidence
The system therefore does not manufacture a large gap merely because a competency was never assessed.
For a sufficiently supported gap:
gap = target - observed
priority = gap × importance
Negative gaps are not treated as deficits.
A competency above target receives:
status = exceeds_target
gap = 0
The priority formula is simple on purpose. The repository also exposes ranking sensitivity so that the effect of changing importance assumptions is visible.
A competency dependency can be declared explicitly:
learning_analytics
↑
statistics
The prerequisite engine:
- rejects unknown competencies
- rejects self-dependencies
- rejects cycles
- identifies unresolved blockers
- places prerequisites before dependent gaps
This means a large advanced gap does not automatically outrank a missing foundation.
The original prototype attached the first three resources stored under a competency name.
That has been replaced.
Each learning resource now declares:
- id
- title
- competency
- entry level
- target level
- effort hours
- modality
- competency prerequisites
A candidate is matched only when:
- the competency is a confirmed gap
- the current level meets the resource entry level
- the resource advances beyond the current level
- its declared competency prerequisites are already met
Resources are ordered transparently by:
- whether they reach the role target
- amount of gap coverage
- lower effort
- deterministic title tie-breaker
No hidden recommender model is involved.
build_development_plan() produces an ordered plan with four possible actions:
collect_evidencereview_evidencedevelopno_development_required
Each plan item includes:
- competency
- status
- current and target level
- gap and priority where valid
- prerequisite blockers
- matched resources
- rationale
ranking_sensitivity() compares gap order across alternative importance-weight scenarios.
It reports:
- ranking under each scenario
- best rank
- worst rank
- whether the rank stayed stable
A priority that moves dramatically when reasonable role weights change should be treated as a planning assumption, not an objective fact.
The bundled example includes seven competencies and deliberately covers several different conditions:
- multiple evidence sources
- a confirmed foundation gap
- a dependent advanced gap
- one competency above target
- one competency with no evidence
- one low-confidence self-report
- one stale evidence record
- structured learning resources
- a prerequisite dependency
- alternative importance scenarios
The example is synthetic. It is designed to exercise the software path, not to describe a real employee.
The repository includes:
data/sample.csv— synthetic evidence recordsdata/role_profile.json— synthetic role requirements and scaledata/prerequisites.json— synthetic prerequisite graphdata/resources.json— structured synthetic development resourcesdata/README.md— schema, evidence, governance, and scale documentation
git clone https://github.com/devissaputra/competency_gap_intelligence.git
cd competency_gap_intelligence
python scripts/run_demo.py
python -m unittest discover -s tests -vThe current baseline uses only the Python standard library.
validate_scale(...) validates a declared proficiency scale.
validate_requirements(...) validates role requirements and importance.
aggregate_evidence(...) combines multiple evidence records while preserving provenance and recency.
competency_gaps(...) classifies each competency without converting missing evidence to zero.
validate_prerequisites(...) validates the dependency graph and rejects cycles.
prerequisite_blockers(...) identifies unresolved foundations.
development_sequence(...) orders prerequisite and downstream needs.
validate_resources(...) validates structured development resources.
match_resources(...) matches resources only to confirmed, level-compatible gaps.
build_development_plan(...) creates the explainable assessment/development path.
ranking_sensitivity(...) compares confirmed-gap rankings across importance scenarios.
The evaluation graphic is a checklist, not a measured result.
A real study should validate:
- role-profile quality
- proficiency evidence quality
- scoring reliability
- prerequisite validity
- resource relevance
- learning impact
- ranking robustness
- fairness in opportunity to demonstrate competency
The implementation is intentionally framework-agnostic.
Useful external reference systems include:
- ESCO for occupation–skill relationships
- O*NET for structured worker/job content, scales, and level anchors
- SFIA for digital professional skills and levels of responsibility
The repository does not copy or redistribute those frameworks.
See docs/related_work.md.
This repository does not:
- infer competency from employee behavior
- validate a competency framework
- prove that an observed score is reliable
- estimate potential
- prove that a resource will close a gap
- estimate causal training impact
- recommend employment actions
A numerical competency difference is only as credible as the framework, scale, evidence, and opportunity to demonstrate the skill.
Do not use this prototype alone for hiring, promotion, termination, pay, discipline, or performance ratings.
See docs/ethics_and_risks.md.
.
├── .github/workflows/ci.yml
├── assets/
│ ├── architecture.svg
│ ├── data_flow.svg
│ ├── demo_snapshot.svg
│ └── evaluation_dashboard.svg
├── data/
│ ├── README.md
│ ├── sample.csv
│ ├── role_profile.json
│ ├── prerequisites.json
│ └── resources.json
├── docs/
│ ├── ethics_and_risks.md
│ ├── related_work.md
│ └── research_protocol.md
├── reports/model_card.md
├── scripts/run_demo.py
├── src/competency_gap_intelligence/core.py
├── tests/test_core.py
├── .gitignore
├── CITATION.cff
├── LICENSE
├── pyproject.toml
└── README.md
A stronger empirical version would:
- connect to a versioned competency framework
- define anchored proficiency rubrics
- validate role requirements with multiple job experts
- measure rater/scoring reliability
- model uncertainty in proficiency estimates
- validate prerequisite relationships
- compare resource matching with expert L&D recommendations
- test whether development resources improve independent competency evidence
- evaluate opportunity-to-demonstrate bias
- compare the transparent baseline with learned recommendation methods
CITATION.cff contains the software citation. Code and original SVG visuals use the MIT License. External competency frameworks and datasets retain their own licenses and usage terms.