Loading clustering data…
⚠️
Data file not found
clustering_data.js must be in the same folder as this HTML.

Generate it by running:

python personality_clustering.py

Then open this file in a browser (same directory, or via a local server).

Agent Performance Clustering

DBSCAN · Vector Space
● LOADING
Scatter · PCA
Trends Over Time
PCA Loadings
Algorithm
Parameters
ε · Epsilon (neighbourhood radius)
2.00
minPts · Core point threshold
3
Projection
Scatter axes
X axis
Y axis
Data info
Loading…
2D Projection · PCA
Cluster Profiles
Persons
Clusters
Noise pts
Silhouette
KPI dims
Var. explained
PCA Component Loadings
How DBSCAN Works
1 · Build person vectors
Each person is collapsed to a single point in K-dimensional KPI space. Values are z-score normalised so KPIs on different scales carry equal weight.
v⃗ᵢ = [(kpi₁ − μ₁)/σ₁ , (kpi₂ − μ₂)/σ₂ , …]
2 · Distance matrix
Euclidean distance is computed between all pairs. Two points are neighbours if their distance is ≤ ε.
d(p, q) = √ Σₖ (pₖ − qₖ)²
3 · Core points & expansion
A point with ≥ minPts neighbours within ε is a core point. Clusters grow outward by density-reachability. Points unreachable from any core point are labelled noise (−1).
4 · PCA visualisation
The full K-dimensional space is projected to 2D via PCA for display only — clustering runs in the original space.
X₂ᴅ = X · V[:, 0:2]
Tuning Guide
Choosing ε
Run --auto-eps in Python to pick ε from the k-distance elbow, or read the elbow plot in the notebook and set EPS manually.
Too few / giant clusters
decrease ε or increase minPts
Too many noise points
increase ε or decrease minPts
Low silhouette (< 0.3)
Drop correlated KPIs, apply feature weighting, or try metric='cosine' for pattern-based similarity rather than magnitude.
Regenerating the data file
After tuning, re-run the script and refresh this page — the dashboard reads the new file instantly.
python personality_clustering.py \
--input data.csv --eps 1.5 --min-samples 4