classifier-toolkit 0.3.2__tar.gz → 0.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of classifier-toolkit might be problematic. Click here for more details.
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/.github/workflows/docs.yml +2 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/.gitignore +1 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/PKG-INFO +2 -2
- classifier_toolkit-0.3.4/docs/examples/feature_selection_advanced.md +111 -0
- classifier_toolkit-0.3.4/docs/examples/feature_selection_example.md +123 -0
- classifier_toolkit-0.3.4/docs/feature_selection/overview.md +89 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_selection/wrapper_methods/combination_search.md +1 -1
- classifier_toolkit-0.3.4/docs/index.md +92 -0
- classifier_toolkit-0.3.4/docs/model_training/overview.md +51 -0
- classifier_toolkit-0.3.4/examples/example_bayesian_search.ipynb +4475 -0
- classifier_toolkit-0.3.4/examples/example_combination_feature_search.ipynb +4262 -0
- classifier_toolkit-0.3.4/examples/example_explainability_catboost.ipynb +1565 -0
- classifier_toolkit-0.3.4/examples/example_explainability_lgbm.ipynb +1625 -0
- classifier_toolkit-0.3.4/examples/example_feature_reduction.ipynb +2280 -0
- classifier_toolkit-0.3.4/examples/example_grid_search.ipynb +1975 -0
- classifier_toolkit-0.3.4/examples/example_model_training_catboost.ipynb +133 -0
- classifier_toolkit-0.3.4/examples/example_model_training_lgbm.ipynb +133 -0
- classifier_toolkit-0.3.4/examples/example_recursive_feature_eliminator.ipynb +862 -0
- classifier_toolkit-0.3.4/examples/example_train_test_partition.ipynb +446 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/mkdocs.yml +2 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/pyproject.toml +2 -2
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/uv.lock +1 -1
- classifier_toolkit-0.3.2/docs/examples/feature_selection_advanced.md +0 -115
- classifier_toolkit-0.3.2/docs/examples/feature_selection_example.md +0 -105
- classifier_toolkit-0.3.2/docs/feature_selection/overview.md +0 -103
- classifier_toolkit-0.3.2/docs/index.md +0 -63
- classifier_toolkit-0.3.2/examples/example.py +0 -19
- classifier_toolkit-0.3.2/examples/selected_features.json +0 -189
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/.github/pull_request_template/default.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/.github/workflows/checks.yaml +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/.github/workflows/master.yaml +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/.github/workflows/release.yaml +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/.github/workflows/working-branch.yaml +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/.python-version +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/.sqlfluff +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/LICENSE +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/Makefile +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/README.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/data_partition/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/data_partition/data_preprocess.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/data_partition/optimize_data.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/data_partition/split_train_test.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/eda/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/eda/bivariate_analysis.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/eda/eda_toolkit.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/eda/feature_engineering.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/eda/first_glance.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/eda/univariate_analysis.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/eda/visualizations.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/eda/warnings/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/eda/warnings/automated_warnings.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/eda/warnings/default_warnings.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/explainability/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/explainability/base.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/explainability/interactions.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/explainability/misclassification.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/explainability/plots.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/explainability/toolkit.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/explainability/tree_explainer.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_reduction/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_reduction/base.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_reduction/correlation.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_reduction/counter_intuitive.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_reduction/drift.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_reduction/expert_rules.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_reduction/low_variance.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_reduction/predictive_power.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_reduction/reducer.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/base.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/embedded_methods/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/embedded_methods/elastic_net.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/feature_stability.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/meta_selector.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/utils/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/utils/data_handling.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/utils/feature_type_constraints.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/utils/plottings.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/utils/scoring.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/wrapper_methods/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/wrapper_methods/bayesian_search.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/wrapper_methods/boruta.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/wrapper_methods/combination_search.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/wrapper_methods/recursive_feature_eliminator.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/wrapper_methods/rfe.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/wrapper_methods/rfe_catboost.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/feature_selection/wrapper_methods/sequential_selection.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/model_training/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/model_training/hyper_parameter_tuning/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/model_training/hyper_parameter_tuning/tuner.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/model_training/models/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/model_training/models/base.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/model_training/models/ensemble_methods.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/model_training/utils/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/classifier_toolkit/model_training/utils/params.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/CNAME +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/changelog.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/data_partition/data_preprocess.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/data_partition/optimize_data.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/data_partition/overview.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/data_partition/split_train_test.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/eda/bivariate_analysis.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/eda/eda_toolkit.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/eda/feature_engineering.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/eda/first_glance.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/eda/overview.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/eda/univariate_analysis.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/eda/visualizations.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/eda/warnings/default_warnings.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/eda/warnings/warning_system.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/examples/eda_example.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/explainability/interactions.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/explainability/misclassification.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/explainability/overview.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/explainability/plots.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/explainability/toolkit.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/explainability/tree_explainer.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_reduction/correlation.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_reduction/counter_intuitive.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_reduction/drift.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_reduction/expert_rules.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_reduction/low_variance.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_reduction/overview.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_reduction/predictive_power.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_reduction/reducer.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_selection/embedded_methods/elastic_net.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_selection/feature_stability.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_selection/meta_selector.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_selection/utils/data_handling.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_selection/utils/scoring.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_selection/wrapper_methods/bayesian_search.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_selection/wrapper_methods/boruta.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_selection/wrapper_methods/recursive_feature_eliminator.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_selection/wrapper_methods/rfe.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/feature_selection/wrapper_methods/sequential_selection.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/model_training/tuner.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/data_partition/data_preprocess.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/data_partition/optimize_data.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/data_partition/overview.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/data_partition/split_train_test.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/eda/bivariate_analysis.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/eda/eda_toolkit.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/eda/feature_engineering.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/eda/first_glance.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/eda/overview.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/eda/univariate_analysis.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/eda/visualizations.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/eda/warnings/default_warnings.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/eda/warnings/warning_system.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/explainability/interactions.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/explainability/misclassification.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/explainability/overview.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/explainability/plots.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/explainability/toolkit.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/explainability/tree_explainer.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_reduction/base.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_reduction/correlation.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_reduction/counter_intuitive.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_reduction/drift.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_reduction/expert_rules.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_reduction/low_variance.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_reduction/overview.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_reduction/predictive_power.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_reduction/reducer.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/base.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/embedded_methods/elastic_net.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/feature_stability.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/meta_selector.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/overview.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/utils/data_handling.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/utils/plottings.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/utils/scoring.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/wrapper_methods/bayesian_search.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/wrapper_methods/boruta.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/wrapper_methods/combination_search.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/wrapper_methods/recursive_feature_eliminator.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/wrapper_methods/rfe.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/feature_selection/wrapper_methods/sequential_selection.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/model_training/params.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/reference/tuner/tuner.md +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/docs/stylesheets/extra.css +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/examples/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/main.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/notebooks/paylater_removed.json +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/ruff.toml +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/conftest.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/data_partition/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/data_partition/test_data_preprocess.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/data_partition/test_optimize_data.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/data_partition/test_split_train_test.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/eda/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/eda/test_bivariate_analysis.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/eda/test_feature_engineering.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/eda/test_first_glance.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/eda/test_univariate_analysis.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/eda/test_visualizations.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/eda/test_warnings.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/explainability/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/explainability/test_catboost_e2e.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/explainability/test_misclassification.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/explainability/test_plots.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/explainability/test_smoke.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/explainability/test_toolkit.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/explainability/test_tree_explainer.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_reduction/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_reduction/test_correlation.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_reduction/test_counter_intuitive.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_reduction/test_drift.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_reduction/test_expert_rules.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_reduction/test_low_variance.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_reduction/test_predictive_power.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_reduction/test_reducer.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_reduction/test_smoke.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_selection/__init__.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_selection/test_bayesian_search.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_selection/test_boruta.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_selection/test_combination_search.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_selection/test_elastic_net.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_selection/test_feature_stability.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_selection/test_recursive_feature_eliminator.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_selection/test_rfe.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_selection/test_rfe_catboost.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_selection/test_scoring.py +0 -0
- {classifier_toolkit-0.3.2 → classifier_toolkit-0.3.4}/tests/feature_selection/test_sequential_selection.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: classifier-toolkit
|
|
3
|
-
Version: 0.3.
|
|
4
|
-
Project-URL: Documentation,
|
|
3
|
+
Version: 0.3.4
|
|
4
|
+
Project-URL: Documentation, https://supreme-adventure-jg5qkyr.pages.github.io/
|
|
5
5
|
Author-email: "senih.yilmaz" <senih.yilmaz@qonto.com>, "jeremy.fraoua" <jeremy.fraoua@qonto.com>, "gauthier.marquand" <gauthier.marquand@qonto.com>, "arnaud.alepee" <arnaud.alepee@qonto.com>
|
|
6
6
|
License-File: LICENSE
|
|
7
7
|
Requires-Python: <3.14,>=3.9
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Advanced Feature Selection Examples
|
|
2
|
+
|
|
3
|
+
## Feature Stability Analysis
|
|
4
|
+
|
|
5
|
+
```python
|
|
6
|
+
from classifier_toolkit.feature_selection import FeatureStability
|
|
7
|
+
|
|
8
|
+
stability = FeatureStability(
|
|
9
|
+
X=X,
|
|
10
|
+
y=y,
|
|
11
|
+
target_col="target",
|
|
12
|
+
model_params={"n_estimators": 100},
|
|
13
|
+
method_params={"d": 100, "n_sets": 10},
|
|
14
|
+
model="xgboost",
|
|
15
|
+
method="jackknife",
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
stability.fit()
|
|
19
|
+
results = stability.calculate_stability()
|
|
20
|
+
print(results)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Boruta Feature Selection
|
|
24
|
+
|
|
25
|
+
```python
|
|
26
|
+
from classifier_toolkit.feature_selection import BorutaSelector
|
|
27
|
+
|
|
28
|
+
selector = BorutaSelector(
|
|
29
|
+
estimator_name="xgboost",
|
|
30
|
+
n_estimators="auto",
|
|
31
|
+
perc=99,
|
|
32
|
+
alpha=0.001,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
X_selected = selector.fit_transform(X, y)
|
|
36
|
+
print(selector.selected_features_)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Bayesian Feature Search
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
from classifier_toolkit.feature_selection import BayesianFeatureSelector
|
|
43
|
+
|
|
44
|
+
selector = BayesianFeatureSelector(
|
|
45
|
+
estimator_name="lightgbm",
|
|
46
|
+
n_features_to_select=10,
|
|
47
|
+
max_trials=100,
|
|
48
|
+
scoring="average_precision",
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
X_selected = selector.fit_transform(X, y)
|
|
52
|
+
print(selector.selected_features_)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## RFE with CatBoost
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
from classifier_toolkit.feature_selection import RFECatBoostSelector
|
|
59
|
+
|
|
60
|
+
selector = RFECatBoostSelector(
|
|
61
|
+
model_params={"iterations": 200, "depth": 4, "verbose": False},
|
|
62
|
+
cat_features=["legal_sector"],
|
|
63
|
+
n_features_to_select=10,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
selector.fit(X_train, y_train, cv_folds=cv_folds)
|
|
67
|
+
print(selector.selected_features_)
|
|
68
|
+
print(selector.rankings_)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Elastic Net Selection
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
from classifier_toolkit.feature_selection import ElasticNetLogisticSelector
|
|
75
|
+
|
|
76
|
+
selector = ElasticNetLogisticSelector(
|
|
77
|
+
n_features_to_select=10,
|
|
78
|
+
scoring="average_precision",
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
X_selected = selector.fit_transform(X, y)
|
|
82
|
+
print(selector.selected_features_)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Combining Multiple Methods
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
from classifier_toolkit.feature_selection import (
|
|
89
|
+
MetaSelector,
|
|
90
|
+
RFESelector,
|
|
91
|
+
BorutaSelector,
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
selector = MetaSelector(
|
|
95
|
+
model_params=[],
|
|
96
|
+
rfe_params={},
|
|
97
|
+
rfe_catboost_params={},
|
|
98
|
+
sequential_params={},
|
|
99
|
+
elastic_net_params={},
|
|
100
|
+
n_features_to_select=5,
|
|
101
|
+
methods=[
|
|
102
|
+
RFESelector(estimator_name="lightgbm", n_features_to_select=10),
|
|
103
|
+
BorutaSelector(estimator_name="xgboost", n_estimators="auto"),
|
|
104
|
+
],
|
|
105
|
+
voting="majority",
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
X_selected = selector.fit_transform(X, y)
|
|
109
|
+
method_results = selector.get_method_specific_results()
|
|
110
|
+
print(selector.selected_features_)
|
|
111
|
+
```
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Feature Selection Examples
|
|
2
|
+
|
|
3
|
+
## RFE with LightGBM
|
|
4
|
+
|
|
5
|
+
```python
|
|
6
|
+
from classifier_toolkit.feature_selection import RFESelector
|
|
7
|
+
|
|
8
|
+
selector = RFESelector(
|
|
9
|
+
estimator_name="lightgbm",
|
|
10
|
+
n_features_to_select=10,
|
|
11
|
+
scoring="average_precision",
|
|
12
|
+
cat_features=["legal_sector", "industry"],
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
selector.fit(X_train, y_train, cv_folds=cv_folds)
|
|
16
|
+
|
|
17
|
+
print(selector.selected_features_)
|
|
18
|
+
print(selector.prauc_scores_)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Auto-select the optimal number of features
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
selector = RFESelector(
|
|
25
|
+
estimator_name="lightgbm",
|
|
26
|
+
n_features_to_select=-1, # auto — picks the peak PR-AUC
|
|
27
|
+
scoring="average_precision",
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
selector.fit(X_train, y_train, cv_folds=cv_folds)
|
|
31
|
+
print(f"Selected {selector.n_features_to_select} features")
|
|
32
|
+
print(selector.selected_features_)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Recursive Feature Eliminator (large feature sets)
|
|
36
|
+
|
|
37
|
+
```python
|
|
38
|
+
from classifier_toolkit.feature_selection import RecursiveFeatureEliminator
|
|
39
|
+
|
|
40
|
+
rfe = RecursiveFeatureEliminator(
|
|
41
|
+
estimator_name="lightgbm",
|
|
42
|
+
model_params={"random_state": 42},
|
|
43
|
+
n_features_to_select=10,
|
|
44
|
+
overfitting_strategy="rollback",
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
rfe.fit(X_train, y_train, X_val=X_val, y_val=y_val)
|
|
48
|
+
X_selected = rfe.transform(X_train)
|
|
49
|
+
|
|
50
|
+
print(rfe.selected_features_)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Sequential Selection
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
from classifier_toolkit.feature_selection import SequentialSelector
|
|
57
|
+
|
|
58
|
+
selector = SequentialSelector(
|
|
59
|
+
estimator_name="lightgbm",
|
|
60
|
+
method="forward",
|
|
61
|
+
n_features_to_select=5,
|
|
62
|
+
scoring="roc_auc",
|
|
63
|
+
cv=5,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
X_selected = selector.fit_transform(X, y)
|
|
67
|
+
selector.print_feature_importances()
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Ensemble Selection with MetaSelector
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
from classifier_toolkit.feature_selection import (
|
|
74
|
+
MetaSelector,
|
|
75
|
+
RFESelector,
|
|
76
|
+
SequentialSelector,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
selector = MetaSelector(
|
|
80
|
+
model_params=[],
|
|
81
|
+
rfe_params={},
|
|
82
|
+
rfe_catboost_params={},
|
|
83
|
+
sequential_params={},
|
|
84
|
+
elastic_net_params={},
|
|
85
|
+
n_features_to_select=5,
|
|
86
|
+
methods=[
|
|
87
|
+
RFESelector(
|
|
88
|
+
estimator_name="lightgbm",
|
|
89
|
+
n_features_to_select=10,
|
|
90
|
+
),
|
|
91
|
+
SequentialSelector(
|
|
92
|
+
estimator_params={},
|
|
93
|
+
method="forward",
|
|
94
|
+
estimator_name="lightgbm",
|
|
95
|
+
n_features_to_select=10,
|
|
96
|
+
),
|
|
97
|
+
],
|
|
98
|
+
voting="majority",
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
X_selected = selector.fit_transform(X, y)
|
|
102
|
+
method_results = selector.get_method_specific_results()
|
|
103
|
+
importances = selector.get_feature_importances()
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Feature Combination Searcher (exhaustive subset search)
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
from classifier_toolkit.feature_selection import FeatureCombinationSearcher
|
|
110
|
+
|
|
111
|
+
searcher = FeatureCombinationSearcher(
|
|
112
|
+
required_features=["feature_a", "feature_b"],
|
|
113
|
+
candidate_features=["feature_c", "feature_d", "feature_e"],
|
|
114
|
+
categorical_features=["feature_b"],
|
|
115
|
+
model_params={"random_state": 42, "n_estimators": 100},
|
|
116
|
+
estimator_name="lightgbm",
|
|
117
|
+
min_features=3,
|
|
118
|
+
max_features=4,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
results = searcher.search(X_train, y_train, X_val, y_val, X_test, y_test)
|
|
122
|
+
print(results.sort_values("val_auc", ascending=False).head())
|
|
123
|
+
```
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Feature Selection Package Overview
|
|
2
|
+
|
|
3
|
+
The Feature Selection package provides a comprehensive toolkit for selecting the most predictive features for your machine learning models. It includes wrapper methods, embedded methods, ensemble orchestration, and stability analysis.
|
|
4
|
+
|
|
5
|
+
## Links
|
|
6
|
+
|
|
7
|
+
- [GitHub Repository](https://github.com/qonto-private/classifier-toolkit)
|
|
8
|
+
- [PyPI Package](https://pypi.org/project/classifier-toolkit/)
|
|
9
|
+
|
|
10
|
+
## Core Components
|
|
11
|
+
|
|
12
|
+
### [Meta Selector](meta_selector.md)
|
|
13
|
+
|
|
14
|
+
The central orchestrator that combines multiple feature selection methods and aggregates their results via voting:
|
|
15
|
+
|
|
16
|
+
- Majority, union, and intersection voting strategies
|
|
17
|
+
- Per-method result tracking
|
|
18
|
+
- Combined feature importance scores
|
|
19
|
+
|
|
20
|
+
### Wrapper Methods
|
|
21
|
+
|
|
22
|
+
#### RFE — Cross-validated elimination
|
|
23
|
+
|
|
24
|
+
- [RFE](wrapper_methods/rfe.md) — `RFESelector` (XGBoost, LightGBM, Random Forest) and `RFECatBoostSelector` (CatBoost native). Eliminates features step by step, scored via cross-validation. Supports auto feature count (`n_features_to_select=-1`), SHAP-combined ranking, and re-ranking.
|
|
25
|
+
|
|
26
|
+
#### Recursive Feature Eliminator — Adaptive two-phase elimination
|
|
27
|
+
|
|
28
|
+
- [Recursive Feature Eliminator](wrapper_methods/recursive_feature_eliminator.md) — `RecursiveFeatureEliminator`. A more advanced eliminator designed for large feature sets: runs a fast batch phase first, then switches to one-by-one removal with overfitting detection and rollback. Use this when you have 50+ features and want early stopping if val performance drops.
|
|
29
|
+
|
|
30
|
+
> **RFE vs RecursiveFeatureEliminator**: `RFESelector` is a cross-validated ranker — it repeatedly fits, scores all folds, and drops the lowest-ranked feature. `RecursiveFeatureEliminator` is an adaptive eliminator with a two-phase strategy and overfitting guard — better suited for large feature sets where early stopping matters.
|
|
31
|
+
|
|
32
|
+
#### Other wrapper methods
|
|
33
|
+
|
|
34
|
+
- [Feature Combination Searcher](wrapper_methods/combination_search.md) — `FeatureCombinationSearcher`. Exhaustive search over all subsets of a small candidate pool. Use when you want to evaluate every possible combination rather than relying on importance rankings.
|
|
35
|
+
- [Sequential Selection](wrapper_methods/sequential_selection.md) — `SequentialSelector`. Forward, backward, and bidirectional greedy selection.
|
|
36
|
+
- [Bayesian Search](wrapper_methods/bayesian_search.md) — `BayesianFeatureSelector`. Bayesian optimisation over feature subsets.
|
|
37
|
+
- [Boruta](wrapper_methods/boruta.md) — `BorutaSelector`. Shadow-feature statistical testing.
|
|
38
|
+
|
|
39
|
+
### Embedded Methods
|
|
40
|
+
|
|
41
|
+
- [Elastic Net](embedded_methods/elastic_net.md) — `ElasticNetLogisticSelector`. Regularization-based selection via L1/L2 penalty.
|
|
42
|
+
|
|
43
|
+
### Analysis Tools
|
|
44
|
+
|
|
45
|
+
- [Feature Stability](feature_stability.md) — `FeatureStability`. Measures how consistently features are selected across resampling runs.
|
|
46
|
+
|
|
47
|
+
### Utils
|
|
48
|
+
|
|
49
|
+
- [Data Handling](utils/data_handling.md) — CV fold management and data utilities
|
|
50
|
+
- [Scoring](utils/scoring.md) — Custom scoring functions (PR-AUC, TPR, FPR)
|
|
51
|
+
|
|
52
|
+
## Getting Started
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
from classifier_toolkit.feature_selection import (
|
|
56
|
+
MetaSelector,
|
|
57
|
+
RFESelector,
|
|
58
|
+
SequentialSelector,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
selector = MetaSelector(
|
|
62
|
+
model_params=[],
|
|
63
|
+
rfe_params={},
|
|
64
|
+
rfe_catboost_params={},
|
|
65
|
+
sequential_params={},
|
|
66
|
+
elastic_net_params={},
|
|
67
|
+
n_features_to_select=5,
|
|
68
|
+
methods=[
|
|
69
|
+
RFESelector(estimator_name="lightgbm", n_features_to_select=10),
|
|
70
|
+
SequentialSelector(
|
|
71
|
+
estimator_params={},
|
|
72
|
+
method="forward",
|
|
73
|
+
estimator_name="lightgbm",
|
|
74
|
+
n_features_to_select=10,
|
|
75
|
+
),
|
|
76
|
+
],
|
|
77
|
+
voting="majority",
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
X_selected = selector.fit_transform(X, y)
|
|
81
|
+
method_results = selector.get_method_specific_results()
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Best Practices
|
|
85
|
+
|
|
86
|
+
1. **Run Feature Reduction first** — use the [Feature Reduction](../feature_reduction/overview.md) module to drop low-variance, high-correlation, and drifted features before running selection. Smaller input sets make selection faster and more stable.
|
|
87
|
+
2. **Use cross-validation** — all wrapper methods accept `cv_folds` for robust scoring; avoid fitting on a single split.
|
|
88
|
+
3. **Combine methods with MetaSelector** — consensus features selected by multiple methods are more stable than those selected by one.
|
|
89
|
+
4. **Check stability** — after selection, use `FeatureStability` to verify that selected features remain consistent across resampling.
|
|
@@ -32,7 +32,7 @@ print(results.sort_values("val_auc", ascending=False).head())
|
|
|
32
32
|
|
|
33
33
|
## Notes
|
|
34
34
|
|
|
35
|
-
- Complexity grows as C(n_candidates, k) —
|
|
35
|
+
- Complexity grows as C(n_candidates, k) — for best performance, keeping the candidate pool under 15 features is recommended, though the searcher works fine with larger pools (20+ features) when runtime is acceptable
|
|
36
36
|
- `required_features` are always included in every combination
|
|
37
37
|
- Supports CatBoost and LightGBM backends
|
|
38
38
|
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Classifier Toolkit
|
|
2
|
+
|
|
3
|
+
A comprehensive Python toolkit for the full machine learning workflow — from data preparation to model deployment.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Classifier Toolkit is organized into six modules:
|
|
8
|
+
|
|
9
|
+
- **EDA**: Data inspection, visualization, univariate/bivariate analysis, feature engineering, and automated warnings
|
|
10
|
+
- **Feature Reduction**: Pre-selection filters to remove low-variance, high-correlation, drifted, or counter-intuitive features before feature selection
|
|
11
|
+
- **Feature Selection**: Wrapper, embedded, and ensemble methods for selecting the most predictive features
|
|
12
|
+
- **Model Training**: Hyperparameter tuning for CatBoost and LightGBM via grid search or Bayesian optimization
|
|
13
|
+
- **Data Partition**: Train/test splitting with temporal awareness, preprocessing, and dtype optimization
|
|
14
|
+
- **Explainability**: SHAP-based explanations, interaction analysis, and misclassification diagnostics
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pip install classifier-toolkit
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
### EDA
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
from classifier_toolkit.eda import EDAToolkit
|
|
28
|
+
|
|
29
|
+
eda = EDAToolkit(
|
|
30
|
+
dataframe=df,
|
|
31
|
+
target_column="target",
|
|
32
|
+
numerical_columns=["amount", "age"],
|
|
33
|
+
categorical_columns=["category"],
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
eda.perform_checks()
|
|
37
|
+
eda.plot_numerical_distributions()
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Feature Reduction
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
from classifier_toolkit.feature_reduction import FeatureReducer
|
|
44
|
+
|
|
45
|
+
reducer = FeatureReducer(df, target_col="target")
|
|
46
|
+
reducer.run_all()
|
|
47
|
+
features_to_drop = reducer.get_features_to_drop()
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Feature Selection
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
from classifier_toolkit.feature_selection import RFESelector
|
|
54
|
+
|
|
55
|
+
selector = RFESelector(
|
|
56
|
+
estimator_name="lightgbm",
|
|
57
|
+
n_features_to_select=10,
|
|
58
|
+
scoring="average_precision",
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
selector.fit(X_train, y_train, cv_folds=cv_folds)
|
|
62
|
+
print(selector.selected_features_)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Model Training
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
from classifier_toolkit.model_training.hyper_parameter_tuning.tuner import Tuner
|
|
69
|
+
|
|
70
|
+
tuner = Tuner(
|
|
71
|
+
X=X_train, y=y_train,
|
|
72
|
+
model_name="lightgbm",
|
|
73
|
+
X_val=X_val, y_val=y_val,
|
|
74
|
+
search_method="bayesian",
|
|
75
|
+
n_trials=50,
|
|
76
|
+
optimization_metric="prauc",
|
|
77
|
+
)
|
|
78
|
+
result = tuner.tune()
|
|
79
|
+
best_model = result["best_model"]
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Documentation Structure
|
|
83
|
+
|
|
84
|
+
- **Guides**: Conceptual explanations and usage examples for each module
|
|
85
|
+
- **API Reference**: Auto-generated documentation for all classes and functions
|
|
86
|
+
- **Examples**: End-to-end notebooks and worked examples
|
|
87
|
+
|
|
88
|
+
## Links
|
|
89
|
+
|
|
90
|
+
- [GitHub Repository](https://github.com/qonto-private/classifier-toolkit)
|
|
91
|
+
- [PyPI Package](https://pypi.org/project/classifier-toolkit/)
|
|
92
|
+
- [Issue Tracker](https://github.com/qonto-private/classifier-toolkit/issues)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Model Training Overview
|
|
2
|
+
|
|
3
|
+
The Model Training module provides hyperparameter tuning for **CatBoost** and **LightGBM** classifiers. It handles the full tuning loop — parameter search, cross-validation, early stopping, and final model refit — so you can focus on defining the search space rather than boilerplate.
|
|
4
|
+
|
|
5
|
+
## Components
|
|
6
|
+
|
|
7
|
+
### [Tuner](tuner.md)
|
|
8
|
+
|
|
9
|
+
The `Tuner` class is the main entry point. It supports two search strategies:
|
|
10
|
+
|
|
11
|
+
- **Grid search** — exhaustive evaluation of all parameter combinations, with automatic filtering of invalid conditional parameter combinations (e.g. CatBoost `boosting_type="Ordered"` constraints)
|
|
12
|
+
- **Bayesian search** — Optuna-based intelligent sampling, with support for persistent studies and resumption across runs
|
|
13
|
+
|
|
14
|
+
Both strategies share the same interface and return a unified result object.
|
|
15
|
+
|
|
16
|
+
## Key Features
|
|
17
|
+
|
|
18
|
+
- **Unified API** — same `Tuner` constructor and `.tune()` call for grid and Bayesian search, for both CatBoost and LightGBM
|
|
19
|
+
- **Validation modes** — holdout split (`X_val`/`y_val`) or k-fold CV (`cv_folds`), mutually exclusive
|
|
20
|
+
- **Automatic final refit** — the winning model is retrained on all data (train + val), with tree count pinned to the mean `best_iteration` across CV folds to avoid over-training
|
|
21
|
+
- **Conditional parameter handling** — invalid combinations (e.g. `subsample` with `bootstrap_type="Bayesian"`) are filtered automatically; no trial is wasted
|
|
22
|
+
- **Secondary test set** — pass `X_test_v2`/`y_test_v2` to evaluate on a sub-population (e.g. a product segment) alongside the primary test set
|
|
23
|
+
- **Parallel trials** — `parallel_trials > 1` runs grid trials concurrently via `ThreadPoolExecutor`
|
|
24
|
+
|
|
25
|
+
## Quick Example
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
from classifier_toolkit.model_training.hyper_parameter_tuning.tuner import Tuner
|
|
29
|
+
|
|
30
|
+
tuner = Tuner(
|
|
31
|
+
X=X_train, y=y_train,
|
|
32
|
+
model_name="lightgbm",
|
|
33
|
+
X_val=X_val, y_val=y_val,
|
|
34
|
+
X_test=X_test, y_test=y_test,
|
|
35
|
+
search_method="grid",
|
|
36
|
+
grid_param_values={
|
|
37
|
+
"learning_rate": [0.05, 0.1],
|
|
38
|
+
"num_leaves": [31, 63],
|
|
39
|
+
"max_depth": [6, 8],
|
|
40
|
+
},
|
|
41
|
+
optimization_metric="prauc",
|
|
42
|
+
)
|
|
43
|
+
result = tuner.tune()
|
|
44
|
+
|
|
45
|
+
best_model = result["best_model"]
|
|
46
|
+
best_params = result["best_params"]
|
|
47
|
+
best_score = result["best_score"]
|
|
48
|
+
test_metrics = result.get("test_metrics")
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
See the [Tuner guide](tuner.md) for full parameter documentation, Bayesian search examples, and the complete result object schema.
|