Skip to main content

ClusterTK

PyPI version Python 3.8+ Tests codecov License: MIT

A comprehensive Python toolkit for cluster analysis with full pipeline support.

ClusterTK provides a complete, sklearn-style pipeline for clustering: from raw data preprocessing to cluster interpretation and export. Perfect for data analysts who want powerful clustering without writing hundreds of lines of code.

Features

  • 🔄 Complete Pipeline - One-line solution from raw data to insights
  • 📊 Multiple Algorithms - K-Means, GMM, Hierarchical, DBSCAN, HDBSCAN
  • 🎯 Auto-Optimization - Automatic optimal cluster number selection
  • 🧮 Smart Dimensionality Reduction - PCA/UMAP/None with algorithm-specific auto-mode
  • 🎯 Feature Selection - Find optimal feature subsets for better clustering (NEW in v0.16.0!)
  • 🎨 Rich Visualization - Beautiful plots (optional dependency)
  • 📁 Export & Reports - CSV, JSON, HTML reports with embedded plots
  • 💾 Save/Load - Persist and reload fitted pipelines
  • 🔍 Interpretation - Profiling, naming, and feature importance analysis

Quick Start

Installation

# Core functionality
pip install clustertk

# With visualization
pip install clustertk[viz]

Basic Usage

import pandas as pd
from clustertk import ClusterAnalysisPipeline

# Load data
df = pd.read_csv('your_data.csv')

# Create and fit pipeline
pipeline = ClusterAnalysisPipeline(
    dim_reduction='auto',      # Smart selection (PCA/UMAP/None based on algorithm)
    handle_missing='median',
    correlation_threshold=0.85,
    n_clusters=None,           # Auto-detect optimal number
    verbose=True
)

pipeline.fit(df, feature_columns=['feature1', 'feature2', 'feature3'])

# Get results
labels = pipeline.labels_
profiles = pipeline.cluster_profiles_
metrics = pipeline.metrics_

print(f"Found {pipeline.n_clusters_} clusters")
print(f"Silhouette score: {metrics['silhouette']:.3f}")

# Export
pipeline.export_results('results.csv')
pipeline.export_report('report.html')

# Visualize (requires clustertk[viz])
pipeline.plot_clusters_2d()
pipeline.plot_cluster_heatmap()

Documentation

Pipeline Workflow

Raw Data → Preprocessing → Feature Selection → Dimensionality Reduction
→ Clustering → Evaluation → Interpretation → Export

Each step is configurable through pipeline parameters or can be run independently.

Key Capabilities

Preprocessing

  • Missing value handling (median/mean/drop)
  • Univariate outlier handling (winsorize/robust/clip/remove)
  • Multivariate outlier detection (IsolationForest/LOF/EllipticEnvelope)
  • Automatic scaling (robust/standard/minmax)
  • Skewness transformation

Dimensionality Reduction (v0.15.0+)

  • Auto-mode - Smart selection based on algorithm + data
  • PCA - Linear, preserves global structure (best for K-Means/GMM)
  • UMAP - Non-linear, preserves local density (best for HDBSCAN/DBSCAN)
  • None - Work in original feature space (low-dimensional data)
Algorithm Features Auto Selection
K-Means/GMM <50 None
K-Means/GMM ≥50 PCA
HDBSCAN/DBSCAN <30 None
HDBSCAN/DBSCAN ≥30 UMAP

Clustering Algorithms

  • K-Means - Fast, spherical clusters
  • GMM - Probabilistic, elliptical clusters
  • Hierarchical - Dendrograms, hierarchical structure
  • DBSCAN - Density-based, arbitrary shapes
  • HDBSCAN - Advanced density-based, varying densities (v0.8.0+)

Evaluation & Interpretation

  • Silhouette score, Calinski-Harabasz, Davies-Bouldin metrics
  • Automatic optimal k selection
  • Cluster profiling and automatic naming
  • Feature importance analysis (v0.9.0+)
    • Permutation importance
    • Feature contribution (variance ratio)
    • SHAP values (optional)

Export & Reports

  • CSV export (data + labels)
  • JSON export (metadata + profiles)
  • HTML reports with embedded visualizations
  • Pipeline serialization (save/load)

Examples

HDBSCAN with UMAP (v0.15.0+)

# Perfect for high-dimensional density-based clustering
pipeline = ClusterAnalysisPipeline(
    dim_reduction='umap',         # Preserves local density
    umap_n_components=10,          # NOT 2! For clustering, not viz
    clustering_algorithm='hdbscan'
)

pipeline.fit(high_dim_data)

# UMAP preserves density → HDBSCAN finds real clusters!
print(f"Found {pipeline.n_clusters_} clusters")
print(f"Noise ratio: {pipeline.cluster_profiles_.noise_ratio_:.1%}")

Why UMAP for HDBSCAN?

  • PCA destroys local density → HDBSCAN finds only noise
  • UMAP preserves local structure → HDBSCAN works correctly
  • Auto-mode selects UMAP for HDBSCAN/DBSCAN when features >30

Important: Use n_components=10-20 for clustering, NOT 2-3 (visualization only)!

Feature Selection for Better Clustering (v0.16.0+)

# Problem: You have 30 features, but not all are useful for clustering
# More features ≠ better clustering (curse of dimensionality)

# Step 1: Fit on all features
pipeline = ClusterAnalysisPipeline(dim_reduction='pca')
pipeline.fit(df)  # 30 features → Silhouette: 0.42

# Step 2: Find which features matter most
importance = pipeline.get_pca_feature_importance()
print(importance.head(10))  # Top 10 features by PCA loadings

# Step 3: Try refitting with top 10 features
comparison = pipeline.refit_with_top_features(
    n_features=10,
    importance_method='permutation',  # Best for clustering quality
    compare_metrics=True,
    update_pipeline=False  # Just compare, don't update yet
)

# Step 4: If metrics improved, update pipeline
if comparison['metrics_improved']:
    print(f"Improvement: {comparison['weighted_improvement']:+.1%}")
    pipeline.refit_with_top_features(n_features=10, update_pipeline=True)
    # New silhouette: 0.58 (+38% improvement!)

Why Feature Selection?

  • Irrelevant features dilute clustering signal (noise)
  • PCA can't fix bad features, only compress them
  • 10 good features > 30 mixed features

Three Importance Methods:

  • 'permutation' - Best for clustering quality (default)
  • 'contribution' - Variance ratio analysis
  • 'pca' - PCA loadings (only if dim_reduction='pca')

Feature Importance Analysis

# Understand which features drive your clustering
results = pipeline.analyze_feature_importance(method='all')

# View permutation importance
print(results['permutation'].head())

# View feature contribution (variance ratio)
print(results['contribution'].head())

# Use top features for focused analysis
top_features = results['permutation'].head(5)['feature'].tolist()

Algorithm Comparison

# Compare multiple algorithms automatically
results = pipeline.compare_algorithms(
    X=df,
    feature_columns=['feature1', 'feature2', 'feature3'],
    algorithms=['kmeans', 'gmm', 'hierarchical', 'dbscan'],
    n_clusters_range=(2, 8)
)

print(results['comparison'])  # DataFrame with metrics
print(f"Best algorithm: {results['best_algorithm']}")

# Visualize comparison
pipeline.plot_algorithm_comparison(results)

Customer Segmentation

pipeline = ClusterAnalysisPipeline(
    n_clusters=None,  # Auto-detect
    auto_name_clusters=True
)

pipeline.fit(customers_df,
            feature_columns=['age', 'income', 'purchases'],
            category_mapping={
                'demographics': ['age', 'income'],
                'behavior': ['purchases']
            })

pipeline.export_report('customer_segments.html')

Anomaly Detection

pipeline = ClusterAnalysisPipeline(
    clustering_algorithm='dbscan'
)

pipeline.fit(transactions_df)
anomalies = transactions_df[pipeline.labels_ == -1]

More examples: docs/examples.md

Requirements

  • Python 3.8+
  • numpy >= 1.20.0
  • pandas >= 1.3.0
  • scikit-learn >= 1.0.0
  • scipy >= 1.7.0
  • joblib >= 1.0.0

Optional (for visualization):

  • matplotlib >= 3.4.0
  • seaborn >= 0.11.0

Contributing

Contributions are welcome! Please check:

License

MIT License - see LICENSE file for details.

Citation

If you use ClusterTK in your research, please cite:

@software{clustertk2024,
  author = {Veselov, Aleksey},
  title = {ClusterTK: A Comprehensive Python Toolkit for Cluster Analysis},
  year = {2024},
  url = {https://github.com/alexeiveselov92/clustertk}
}

Made with ❤️ for the data science community

Metadata

Release files for clustertk 0.16.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for clustertk 0.16.2
File Size Uploaded
clustertk-0.16.2.tar.gz 100.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for clustertk 0.16.2
File Interpreter ABI Platform
clustertk-0.16.2-py3-none-any.whl Python 3 none any Details

Total release size: 217.7 kB

Release files / clustertk-0.16.2.tar.gz

Download URL clustertk-0.16.2.tar.gz
Size 100.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8223e6fda216107827fc71f2b7be4604bb21d98175e62acbfe1cc24e25e5d5ff
BLAKE2b-256 checksum
How to use checksums
67414ad48068c32d586e9685021e49844274c02fd1b699155f7ce505d2a39d71
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / clustertk-0.16.2-py3-none-any.whl

Download URL clustertk-0.16.2-py3-none-any.whl
Size 116.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
72f76115c99d28204387febb4d410852825883ab4811f305494e28d08ec5c4eb
BLAKE2b-256 checksum
How to use checksums
aaba256f57987f93c992d0ce1a1ad8d622364f59b02840481ed14bfcaa267ada
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.16.2 This release

2 release files

0.16.1

2 release files

0.16.0

2 release files

0.15.0

2 release files

0.14.5

2 release files

0.14.4

2 release files

0.14.3

2 release files

0.14.2

2 release files

0.14.1

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.12.1

2 release files

0.12.0

2 release files

0.11.1

2 release files

0.11.0

2 release files

0.10.2

2 release files

0.10.1

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page