Skip to main content

DAU Undersampling (Density-Aware Undersampling)

DAU (Density-Aware Undersampling) is a Python package to handle imbalanced datasets by reducing the majority class without losing important information.

Instead of random undersampling, DAU keeps:

  • Sparse points (outliers / rare cases) → retained fully
  • Dense clusters → represented by a few points (using DBSCAN)
  • Noise points → kept separately

This leads to smarter undersampling and better ML performance compared to random undersampling.


Installation

From PyPI:

pip install dau-undersampling

(Optionally, for testing on TestPyPI):

pip install -i https://test.pypi.org/simple/ dau-undersampling

âš¡ Quickstart

import pandas as pd
from sklearn.datasets import make_classification
from dau_undersampling import DAU

# 1. Create an imbalanced dataset
X, y = make_classification(
    n_samples=1000, n_features=10,
    n_classes=2, weights=[0.9, 0.1],
    random_state=42
)

X = pd.DataFrame(X)
y = pd.Series(y)

# 2. Apply DAU undersampling
dau = DAU(n_neighbors=5, min_samples=3, eps=0.5, percentile=25)
X_resampled, y_resampled = dau.fit_transform(X, y)

print("Original dataset shape:", y.value_counts().to_dict())
print("Resampled dataset shape:", y_resampled.value_counts().to_dict())

🛠 Usage & Parameters

Class: DAU

DAU(n_neighbors=3, min_samples=5, eps=0.05, percentile=25)

Parameters:

  • n_neighbors (int, default=3) Number of neighbors for KNN distance calculation.
  • min_samples (int, default=5) Minimum samples per cluster (DBSCAN).
  • eps (float, default=0.05) Maximum neighborhood radius (DBSCAN).
  • percentile (int, default=25) Threshold to split sparse vs dense points.

Method: fit_transform(X, y)

Performs density-aware undersampling.

Arguments:

  • X: pd.DataFrame → features of majority class or dataset.
  • y: pd.Series → labels (binary classification).

Returns:

  • X_resampled: Reduced features after undersampling.
  • y_resampled: Reduced labels aligned with features.

Example in Pipeline

You can also integrate DAU into an ML pipeline (with imblearn):

from imblearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression

pipeline = Pipeline([
    ('undersample', DAU(n_neighbors=7, min_samples=5, eps=0.4, percentile=30)),
    ('clf', LogisticRegression())
])

pipeline.fit(X, y)

Why DAU vs Other Methods?

Method Behavior
Random undersampling Drops samples randomly (risk of losing rare but important cases).
NearMiss / Tomek Links Works with distances but may remove outliers or boundary points.
DAU (this package) Preserves outliers + keeps 1 representative per dense cluster (balanced).

Contributing

  1. Fork this repo
  2. Create a new branch (git checkout -b feature-xyz)
  3. Commit changes (git commit -m "Added xyz")
  4. Push (git push origin feature-xyz)
  5. Open a Pull Request

License

This project is licensed under the MIT License – see the LICENSE file for details.

Release files for dau-undersampler 0.1.0

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

Source distribution (sdist)

Source distribution for dau-undersampler 0.1.0
File Size Uploaded
dau_undersampler-0.1.0.tar.gz 4.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dau-undersampler 0.1.0
File Interpreter ABI Platform
dau_undersampler-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 9.3 kB

Release files / dau_undersampler-0.1.0.tar.gz

Download URL dau_undersampler-0.1.0.tar.gz
Size 4.6 kB
Tags Source
SHA-256 checksum
How to use checksums
39c1cbffcf347483319650290d1bda240bbb73cf7efa0ef8febaa1fb76258399
BLAKE2b-256 checksum
How to use checksums
ab62ae8d10cc7d88c97447946265e5ed98dca7409406be61495206d85be98069
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.3

Release files / dau_undersampler-0.1.0-py3-none-any.whl

Download URL dau_undersampler-0.1.0-py3-none-any.whl
Size 4.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
33f7ffb7361930e763a92b8ea89ac7038e0ca528fe3b1f531b3b0d2cc235af26
BLAKE2b-256 checksum
How to use checksums
ef076a5a3494e5e3cf61e46b54c939b3d6a869e876988551788421c56a9756fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.3

Release history Release notifications | RSS feed

This release

0.1.0 This release

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