Repository navigation
Releases
SkillGraph v1.0.0
What's Changed
- feat(etl)!: merge duplicate skills, data-v4 and model-v4 by @AtulACleaver in #41
- docs(stats): stats.json, stats.md and report figures by @AtulACleaver in #43
- docs: final README and cleanup by @AtulACleaver in #44
Full Changelog: data-v4...v1.0.0
rules-v2
rules-v2
artifacts/rules.parquet: 772e49d57903dedda6833a6480bd5e40ea53d39ff4582d52c1940d6379f89c8b
model-v4
model-v4
artifacts/classifier.pkl: 9aea092ad75e9ab938bb463e6ad067ef8fbd42ccffe3dc1123d6aa1c59d3f051
artifacts/label_encoder.pkl: b267b408e9b0b9be719c9cfde23858ae9f94780c0a2ef584e61f1252ea31454e
data-v4
data-v4
data/dataset.parquet: 700336df38002c9c57b407fdc02a5697e114e8fc9f34e9fa162b8ddac2cbdc8a
data/baskets.parquet: 5d9252bc32ac0282f2e14734e7bd137c4ec6d52449549e7d171590952673bae9
rules-v1
Association rules mined on data-v3 baskets using FP-growth.
- Rule count: 336
- min_sup: 0.005 (0.50%)
- min_confidence: 0.3
- min_lift: 1.2
- SHA-256 (baskets.parquet): a2dfd96cae05f12a32bc09f85ac4c32d1830e7e46681d98af8ebd7165c51b0bb
- SHA-256 (rules.parquet): f607fa3a0976c3e0d2d22442bdc7017bbec4936a7bcd4888c9a229e3e97190a7
model-v3
Training commit SHA: bf4e0be
data-v3 Asset Hashes (SHA256):
baskets.parquet: a2dfd96cae05f12a32bc09f85ac4c32d1830e7e46681d98af8ebd7165c51b0bbdataset.parquet: f6a06ba428981d3a0298f611b92706306644f8e36bdec03f07e607e158142752skill_vocab.json: d749eb5d5044fea1e366972fba1bf94351c822dd580ac66a0e711a6f8f92deceskills_autocomplete.json: aa45b9dff320373682a87c49bdfeee87ffabe181f13558305c78611c36ccf036
Model Selection:
We chose Logistic Regression because LightGBM's lead was under 3 points, favoring simplicity and interpretability.
Test Metrics:
- Macro-F1: 0.742
- Accuracy: 0.746 (Majority baseline: 0.177)
- Top-3 Accuracy: 0.925
Note: The model is consistently overconfident in the upper probability bins (e.g., predicting 0.976 when the true probability is 0.915, or predicting 0.854 when true is 0.724).
Band Cutoffs (p75/p50 percentiles on val set):
- Backend: Ready >=0.25, Close >=0.15
- Data / BI Analyst: Ready >=0.20, Close >=0.10
- Data Science / ML: Ready >=0.20, Close >=0.10
- DevOps / Cloud: Ready >=0.15, Close >=0.10
- ERP / Enterprise: Ready >=0.10, Close >=0.10
- Frontend: Ready >=0.20, Close >=0.15
- Full Stack: Ready >=0.25, Close >=0.15
- Mobile: Ready >=0.20, Close >=0.15
- QA / Test: Ready >=0.15, Close >=0.10
- Support / IT Ops: Ready >=0.11, Close >=0.05
(Probability cutoffs remain: Ready >=0.6, Close >=0.3)
Environment:
- Python: 3.11
- Packages: numpy 2.4.6, scipy 1.17.1, scikit-learn 1.9.1, pandas 3.0.6, pyarrow 25.0.1, rapidfuzz 3.14.6, lightgbm 4.7.0, mlxtend 0.25.0
Asset Hashes (SHA256):
classifier.pkl: 9eb0a756879d1491ed2e9f9acb6f71f43ffdf452e2ed725b1795bd2bef5a7a8blabel_encoder.pkl: b267b408e9b0b9be719c9cfde23858ae9f94780c0a2ef584e61f1252ea31454emetrics.json: 05cfb86195be431c1699b1cd5b30d3ea31d405e184beded65f9430793ab2dd13role_profiles.json: 72d6a8d886b1d173adf7dd27c8448e3b164831b230cfafb52ccdb88616e5b6cfrules.parquet: cd2842f8495b16a9f58d2dad6d68925499fb362696f48c73817331bb0f256cfeskill_vocab.json: d749eb5d5044fea1e366972fba1bf94351c822dd580ac66a0e711a6f8f92deceskills_autocomplete.json: aa45b9dff320373682a87c49bdfeee87ffabe181f13558305c78611c36ccf036
(Byte-identical copies of skill_vocab.json and skills_autocomplete.json are included so one download fills ARTIFACTS_DIR)
model-v2
Superseded by data-v3 / model-v3. Built from unmerged code. Do not use.
data-v3
Supersedes data-v2. Built from 0a1b387 on atul/20-data-v3 (PR #21); the tag points at a4eab02 by mistake and stays there.
Rows per family:
- DevOps / Cloud: 2279
- QA / Test: 1649
- ERP / Enterprise: 1495
- Data / BI Analyst: 1365
- Full Stack: 1290
- Backend: 1276
- Data Science / ML: 1212
- Support / IT Ops: 1088
- Frontend: 784
- Mobile: 434
dataset.parquet keeps 103 rows with no skill IDs, which ml/train drops.
The baskets.parquet row count is 34,569 against the plan's ~30,134 (unexplained).
Vocab size: 800. Mapped mass: 77,217 / 100,912 (76.5%).
Asset Hashes (SHA256):
baskets.parquet: a2dfd96cae05f12a32bc09f85ac4c32d1830e7e46681d98af8ebd7165c51b0bbdataset.parquet: f6a06ba428981d3a0298f611b92706306644f8e36bdec03f07e607e158142752skill_vocab.json: d749eb5d5044fea1e366972fba1bf94351c822dd580ac66a0e711a6f8f92deceskills_autocomplete.json: aa45b9dff320373682a87c49bdfeee87ffabe181f13558305c78611c36ccf036
data-v2
Superseded by data-v3 / model-v3. Built from unmerged code. Do not use.
Data Handoff v1
First complete dataset handoff. dataset.parquet: 17,993 labelled rows across 10 families. baskets.parquet: 30,134 rows. skill_vocab.json: 1,500 canonical skills.