Skip to main content

Automatic missing value imputation with intelligent strategy selection

Project description

subhikshaImputeX

Python Version License PyPI

Automatic missing value imputation with intelligent per-column strategy selection.

subhikshaImputeX is a production-ready Python library that automatically detects and applies the best imputation method for each column in your dataset using cross-validation.

🎯 Key Features

Automatic Strategy Selection - Tests multiple imputation methods per column and selects the best
Multiple Strategies - Mean, Median, Mode, KNN, Regression, Forward Fill
Cross-Validation - Evaluates accuracy using known values before imputation
Correlation Detection - Identifies relationships between features for smarter imputation
Transparent Reporting - Shows what strategy was chosen and why
Lightweight - Only depends on NumPy, Pandas, and Scikit-learn
Per-Column Flexibility - Different strategies for different columns
Type-Aware - Handles numeric and categorical data appropriately

📦 Installation

From PyPI (recommended)

pip install subhikshaImputeX

From source

git clone https://github.com/subi2404/subhikshaImputeX.git
cd subhikshaImputeX
pip install -e .

Development setup

pip install -e ".[dev]"

🚀 Quick Start

Basic Usage

import pandas as pd
from subhikshaImputeX import SmartImputer

# Load data with missing values
df = pd.read_csv('data.csv')

# Create and fit imputer
imputer = SmartImputer(evaluation=True, verbose=True)
df_clean = imputer.fit_transform(df)

# Print report
imputer.print_report()

Advanced Usage

from subhikshaImputeX import SmartImputer

# Custom configuration
imputer = SmartImputer(
    strategy='auto',              # Auto-select best strategy per column
    evaluation=True,              # Evaluate strategies via cross-validation
    n_splits=5,                   # 5-fold cross-validation
    detect_correlations=True,     # Detect feature correlations
    verbose=True,                 # Print progress
    random_state=42               # Reproducibility
)

# Fit on training data
imputer.fit(df_train)

# Transform train and test
df_train_clean = imputer.transform(df_train)
df_test_clean = imputer.transform(df_test)

# Get detailed report
report = imputer.get_report()
print(report)

Using Specific Strategies

from subhikshaImputeX import SmartImputer

# Use only mean imputation
imputer = SmartImputer(strategy='mean')
df_clean = imputer.fit_transform(df)

# Available strategies: 'mean', 'median', 'mode', 'knn', 'regression', 'forward_fill'

Manual Strategy Selection

from subhikshaImputeX import (
    MeanImputer, 
    KNNImputation, 
    RegressionImputer
)

# Use custom strategy directly
imputer = MeanImputer()
imputer.fit(df['column'])
df['column'] = imputer.transform(df['column'])

📊 Available Strategies

Strategy Type Best For Pros Cons
Mean Numeric Quick baseline Fast, simple Loses variance
Median Numeric Robust imputation Handles outliers Less variance
Mode Categorical Most frequent Interpretable Information loss
KNN Both Local patterns Considers similarity Slow on large data
Regression Numeric Feature relationships Preserves correlations Assumes linearity
Forward Fill Time series Sequential data Context-aware Assumes order

🔍 How It Works

1. Automatic Strategy Selection

For each column with missing values:

  • Identifies data type (numeric or categorical)
  • Selects applicable strategies
  • Evaluates each using cross-validation
  • Chooses best performer

2. Cross-Validation Evaluation

  • Randomly masks known values
  • Applies strategy to predict masked values
  • Compares predictions to true values
  • Calculates RMSE (numeric) or accuracy (categorical)
  • Repeats across multiple splits

3. Correlation Detection

  • Identifies relationships between features
  • Prioritizes correlated features for regression/KNN
  • Provides feature importance ranking

📈 Performance

Evaluation Metrics

Numeric Columns:

  • Uses RMSE (Root Mean Squared Error)
  • Lower RMSE = Better imputation

Categorical Columns:

  • Uses Accuracy
  • Higher accuracy = Better imputation

Cross-Validation

  • Default: 5-fold cross-validation
  • Configurable via n_splits parameter
  • Prevents overfitting to training data

💡 Examples

Example 1: Auto Imputation with Report

import pandas as pd
from subhikshaImputeX import SmartImputer
import numpy as np

# Create sample data
df = pd.DataFrame({
    'age': [25, np.nan, 35, 45, np.nan, 30],
    'income': [50000, 60000, np.nan, 80000, 90000, np.nan],
    'category': ['A', 'B', np.nan, 'A', 'C', 'B']
})

print("Before imputation:")
print(df)
print("\nMissing values:")
print(df.isnull().sum())

# Impute
imputer = SmartImputer(evaluation=True, verbose=True)
df_clean = imputer.fit_transform(df)

print("\n\nAfter imputation:")
print(df_clean)

# Report
imputer.print_report()

Example 2: Train-Test Split

import pandas as pd
from subhikshaImputeX import SmartImputer

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

# Split
train = df.iloc[:800]
test = df.iloc[800:]

# Fit on train, transform both
imputer = SmartImputer(evaluation=True)
imputer.fit(train)

train_clean = imputer.transform(train)
test_clean = imputer.transform(test)

# Use for model training
from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier()
model.fit(train_clean.drop('target', axis=1), train_clean['target'])

Example 3: Correlation Analysis

from subhikshaImputeX import CorrelationDetector
import pandas as pd

df = pd.read_csv('data.csv')

# Detect correlations
detector = CorrelationDetector(min_correlation=0.5)
correlations = detector.detect(df)

print("Strong correlations:")
for col, corrs in correlations.items():
    print(f"\n{col}:")
    for corr_col, corr_val in corrs[:3]:  # Top 3
        print(f"  {corr_col}: {corr_val:.3f}")

# Visualize (requires matplotlib, seaborn)
# detector.plot_correlation_heatmap()

🔧 Configuration

SmartImputer Parameters

SmartImputer(
    strategy='auto',              # Strategy selection mode
                                  # Options: 'auto', 'mean', 'median', 'mode', 'knn', 'regression', 'forward_fill'
    
    evaluation=True,              # Enable cross-validation evaluation
    
    n_splits=5,                   # Number of CV folds for evaluation
    
    detect_correlations=True,     # Detect feature correlations
    
    verbose=True,                 # Print progress and results
    
    random_state=42               # Random seed for reproducibility
)

📋 API Reference

SmartImputer

Methods:

  • fit(X) - Fit on training data
  • transform(X) - Apply imputation
  • fit_transform(X) - Fit and transform
  • get_report() - Get imputation report (dict)
  • print_report() - Print formatted report

CorrelationDetector

Methods:

  • detect(df) - Find correlations
  • get_correlated_features(column, top_n=3) - Get correlated features
  • get_correlation_pairs() - Get all correlation pairs
  • get_feature_importance_for_imputation(column, df) - Rank features
  • plot_correlation_heatmap() - Visualize correlations

Individual Strategies

All strategies follow the scikit-learn API:

  • fit(series, X=None)
  • transform(series)
  • fit_transform(series, X=None)

🤝 Contributing

Contributions are welcome! Here's how:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run tests (pytest tests/)
  5. Commit changes (git commit -m 'Add amazing feature')
  6. Push to branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

Development Setup

git clone https://github.com/subi2404/subhikshaImputeX.git
cd subhikshaImputeX
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -e ".[dev]"
pytest tests/

🧪 Testing

Run the test suite:

pytest tests/                    # Run all tests
pytest tests/ -v                 # Verbose output
pytest tests/ --cov              # With coverage report

📝 License

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

🙋 Support

📚 References

🎓 Citation

If you use subhikshaImputeX in academic research, please cite:

@software{subhikshaImputeX2025,
  title=subhikshaImputeX: Automatic Missing Value Imputation,
  author=Subhiksha_Anandhan,
  year=2025,
  url={https://github.com/subi2404/subhikshaImputeX}
}

Made with ❤️ by Subhiksha_Anandhan

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

subhikshaimputex-0.1.0.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

subhikshaimputex-0.1.0-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file subhikshaimputex-0.1.0.tar.gz.

File metadata

  • Download URL: subhikshaimputex-0.1.0.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for subhikshaimputex-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7dec4a353272d5ae5ccf314c77aa0d6fe46f5d0a36d5be3aff4d6ac5cdeaa7d4
MD5 86f5102a3935ccbab0b635ffe3977caf
BLAKE2b-256 22d9c850315522e45391f42d04bdfaae2ff7397389062c062b131b418b212b7a

See more details on using hashes here.

File details

Details for the file subhikshaimputex-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for subhikshaimputex-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8db37651d7a332960341ca422963ee8e388c2131d447b30e7371566b30334980
MD5 55d66582e675a39281b56c0deb291abd
BLAKE2b-256 e35d438ffe4ce7164a8da66230477f79d8c2e30d783b8c45a4a35e8d34a89be9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page