Releases: xRiskLab/fastwoe
Releases · xRiskLab/fastwoe
Release v0.1.6a3
Changes
See CHANGELOG.md for detailed changes.
Installation
pip install fastwoe==0.1.6a3What's New in v0.1.6a3
Check the CHANGELOG for full details.
Release v0.1.6a0-test
Changes
See CHANGELOG.md for detailed changes.
Installation
pip install fastwoe==0.1.6a0-testWhat's New in v0.1.6a0-test
Check the CHANGELOG for full details.
Release v0.1.5
Changes
Performance Fix & Code Cleanup: Eliminated DataFrame fragmentation warning and removed debug statements
Bug Fixes
- DataFrame Fragmentation Warning: Fixed
PerformanceWarning: DataFrame is highly fragmentedintransform()method- Root cause: Iteratively adding columns to DataFrame with
woe_df[col] = woe_valuescaused memory fragmentation - Solution: Collect all WOE columns in a dictionary first, then create DataFrame in one operation
- Performance improvement: Eliminates repeated memory reallocation during transform
- User impact: No more annoying performance warnings when transforming data
- Root cause: Iteratively adding columns to DataFrame with
- Debug Print Statement: Removed leftover debug
print("FAISS is available:", faiss)statement in FAISS KMeans binning- Cleaned up console output when using
binning_method='faiss_kmeans'
- Cleaned up console output when using
- Code Quality: Improved transform method efficiency following pandas best practices
Technical Details
- Changed from:
for col in columns: woe_df[col] = values(causes fragmentation) - Changed to:
woe_columns = {col: values for col in columns}; woe_df = pd.DataFrame(woe_columns)(single allocation) - Follows pandas recommendation to use
pd.concat(axis=1)or dict-based DataFrame construction
Testing
- All 102 tests passing successfully ✅
- Verified no fragmentation warnings with multi-feature datasets
- Backward compatible: transform output unchanged
Installation
pip install fastwoe==0.1.5See CHANGELOG.md for full details.
v0.1.5rc1
v0.1.5a1: Multiclass WOE Refactoring & Bug Fixes
🎉 Release v0.1.5a1: Multiclass WOE Refactoring & Bug Fixes
🏗️ Code Organization
- Multiclass Separation: Extracted multiclass functionality into
fastwoe_multiclass.py- Created
MulticlassWoeMixinfor clean separation of concerns - Reduced main file complexity by ~300 lines
- Created
- Type Stubs: Added
typings/folder for better IDE support
🐛 Multiclass WOE Bug Fixes
- Fixed missing
Xparameter causing zero counts and divide-by-zero warnings - Fixed array flattening issue causing NaN values
- Fixed WOE calculation formula (removed incorrect epsilon)
- Fixed probability prediction logic with proper simple-vs-composite hypothesis (Good, 1950)
- Fixed double sigmoid application and loop storage issues
🔧 Monotonic Constraints Fix
- Fixed infinity symbol parsing in bin labels (
-∞,∞) - Proper handling of infinite bounds in isotonic regression
✅ Testing & Quality
- All 156 tests passing
- 73% test coverage
- Type checking clean (
ty check) - Linting clean (
ruff check&ruff format)
📚 Documentation
- Updated README with multiclass monotonic constraints support
- Updated examples:
fastwoe_multiclass.ipynb,fastwoe_monotonic.ipynb - Added comprehensive multiclass WOE guide
See CHANGELOG.md for full details.
Release v0.1.4.post2: Monotonic Constraints Support
Monotonic Constraints Support
This release adds comprehensive monotonic constraints support across all binning methods, essential for credit scoring compliance and regulatory requirements.
New Features:
- Monotonic Constraints: Complete implementation across all binning methods
- Tree Method: Native scikit-learn monotonic constraints
- KBins Method: Isotonic regression post-processing
- FAISS KMeans Method: Isotonic regression post-processing
- Constraint Values: 1 (increasing), -1 (decreasing), 0 (no constraint)
- Comprehensive Testing: Extensive test coverage for all scenarios
- Enhanced Documentation: Updated README and examples
Technical Details:
- API: Added monotonic_cst parameter to FastWoe constructor
- Validation: Comprehensive input validation with clear error messages
- Binning Info: Constraints stored in binning_info_ and displayed in summaries
- Isotonic Regression: Uses scikit-learn's IsotonicRegression for KBins/FAISS
- Backward Compatibility: Fully compatible with existing code
Examples:
- New: examples/fastwoe_monotonic.py - Comprehensive demonstration
- Shows all binning methods with constraints
- Compares KBins strategies (uniform, quantile, kmeans)
- Analyzes monotonic patterns and performance
Bug Fixes:
- Fixed FAISS API compatibility issues
- Fixed type checking configuration
- Improved exception handling in tests
Installation: pip install fastwoe==0.1.4.post2
Release v0.1.4: Multiclass Support & Enhanced Tree Binning
Major Features
🎯 Multiclass WOE Encoding
- One-vs-rest approach for targets with 3+ classes
- Automatic detection of multiclass vs binary targets
- Multiple output columns per feature for multiclass scenarios
- Class-specific methods:
predict_proba_class(),predict_ci_class() - Support for string/integer labels in multiclass scenarios
🌳 Enhanced Tree Binning
- Decision tree as default binner for numerical features
- Fixed NaN values in the last bin for numerical features
- Optimized default parameters:
max_depth=3,random_state=42 - Unified
binner_kwargsAPI for consistent parameter passing
Improvements
🔧 Bug Fixes
- Fixed NaN values appearing in the last bin for numerical features
- Improved error handling and validation
- Enhanced type checking with comprehensive configuration
📚 Documentation & Examples
- Updated README with multiclass examples and API documentation
- Added comprehensive multiclass example (
fastwoe_multiclass.py) - Enhanced type checking configuration for examples
- Updated CHANGELOG with detailed release notes
🧪 Testing & Quality
- Fixed all type checking issues across core library, tests, and examples
- Added comprehensive test coverage for multiclass functionality
- Enhanced CI/CD pipeline with proper type checking
Breaking Changes
- Decision tree is now the default binner for numerical features (was KMeans)
- Multiclass targets automatically detected and handled with one-vs-rest encoding
Migration Guide
If you were using KMeans binning explicitly, update your code:
# Old (explicit KMeans)
encoder = FastWoe(numerical_binner='kmeans')
# New (default decision tree, or explicit KMeans)
encoder = FastWoe() # Uses decision tree by default
encoder = FastWoe(numerical_binner='kmeans') # Still worksPerformance Improvements
- Faster numerical binning with optimized decision tree parameters
- Improved memory efficiency for multiclass scenarios
- Enhanced parallel processing for large datasets
Full Changelog: v0.1.3...v0.1.4
Release v0.1.3.post1: Enhanced Statistical Analysis & Developer Experience
Enhanced Statistical Analysis & Developer Experience
- IV Standard Errors: Add confidence intervals and significance testing for Information Value calculations
- Series Input Support: Fix 'Series' object has no attribute 'columns' error
- Type Checking Integration: Integrate pyrefly type checking with CI workflows
- FAISS GPU Support: Add fastwoe[faiss-gpu] optional dependency and improve dependency management
- Improved UX: Change default warn_on_numerical=False (numerical binning is now core feature)
- Local Testing: Add act integration for local GitHub Actions testing
- Enhanced Documentation: Comprehensive guides and examples with improved mathematical framework
- Development Automation: Add Make commands for streamlined workflows