classifier-toolkit 0.2.6__tar.gz → 0.3.0__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.
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/.github/workflows/checks.yaml +1 -1
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/PKG-INFO +1 -1
- classifier_toolkit-0.3.0/classifier_toolkit/data_partition/__init__.py +19 -0
- classifier_toolkit-0.3.0/classifier_toolkit/data_partition/data_preprocess.py +152 -0
- classifier_toolkit-0.3.0/classifier_toolkit/data_partition/optimize_data.py +47 -0
- classifier_toolkit-0.3.0/classifier_toolkit/data_partition/split_train_test.py +785 -0
- classifier_toolkit-0.3.0/classifier_toolkit/explainability/__init__.py +41 -0
- classifier_toolkit-0.3.0/classifier_toolkit/explainability/base.py +60 -0
- classifier_toolkit-0.3.0/classifier_toolkit/explainability/interactions.py +138 -0
- classifier_toolkit-0.3.0/classifier_toolkit/explainability/misclassification.py +107 -0
- classifier_toolkit-0.3.0/classifier_toolkit/explainability/plots.py +140 -0
- classifier_toolkit-0.3.0/classifier_toolkit/explainability/toolkit.py +137 -0
- classifier_toolkit-0.3.0/classifier_toolkit/explainability/tree_explainer.py +136 -0
- classifier_toolkit-0.3.0/docs/data_partition/data_preprocess.md +43 -0
- classifier_toolkit-0.3.0/docs/data_partition/optimize_data.md +30 -0
- classifier_toolkit-0.3.0/docs/data_partition/overview.md +30 -0
- classifier_toolkit-0.3.0/docs/data_partition/split_train_test.md +43 -0
- classifier_toolkit-0.3.0/docs/explainability/interactions.md +48 -0
- classifier_toolkit-0.3.0/docs/explainability/misclassification.md +46 -0
- classifier_toolkit-0.3.0/docs/explainability/overview.md +87 -0
- classifier_toolkit-0.3.0/docs/explainability/plots.md +47 -0
- classifier_toolkit-0.3.0/docs/explainability/toolkit.md +59 -0
- classifier_toolkit-0.3.0/docs/explainability/tree_explainer.md +50 -0
- classifier_toolkit-0.3.0/docs/reference/data_partition/data_preprocess.md +46 -0
- classifier_toolkit-0.3.0/docs/reference/data_partition/optimize_data.md +36 -0
- classifier_toolkit-0.3.0/docs/reference/data_partition/overview.md +37 -0
- classifier_toolkit-0.3.0/docs/reference/data_partition/split_train_test.md +57 -0
- classifier_toolkit-0.3.0/docs/reference/explainability/interactions.md +7 -0
- classifier_toolkit-0.3.0/docs/reference/explainability/misclassification.md +3 -0
- classifier_toolkit-0.3.0/docs/reference/explainability/overview.md +42 -0
- classifier_toolkit-0.3.0/docs/reference/explainability/plots.md +7 -0
- classifier_toolkit-0.3.0/docs/reference/explainability/toolkit.md +3 -0
- classifier_toolkit-0.3.0/docs/reference/explainability/tree_explainer.md +7 -0
- classifier_toolkit-0.3.0/examples/selected_features.json +189 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/mkdocs.yml +19 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/pyproject.toml +1 -1
- classifier_toolkit-0.3.0/tests/data_partition/test_data_preprocess.py +167 -0
- classifier_toolkit-0.3.0/tests/data_partition/test_optimize_data.py +78 -0
- classifier_toolkit-0.3.0/tests/data_partition/test_split_train_test.py +122 -0
- classifier_toolkit-0.3.0/tests/eda/__init__.py +0 -0
- classifier_toolkit-0.3.0/tests/explainability/__init__.py +0 -0
- classifier_toolkit-0.3.0/tests/explainability/test_catboost_e2e.py +120 -0
- classifier_toolkit-0.3.0/tests/explainability/test_misclassification.py +63 -0
- classifier_toolkit-0.3.0/tests/explainability/test_plots.py +70 -0
- classifier_toolkit-0.3.0/tests/explainability/test_smoke.py +23 -0
- classifier_toolkit-0.3.0/tests/explainability/test_toolkit.py +58 -0
- classifier_toolkit-0.3.0/tests/explainability/test_tree_explainer.py +50 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/uv.lock +1 -1
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/.github/pull_request_template/default.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/.github/workflows/docs.yml +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/.github/workflows/master.yaml +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/.github/workflows/release.yaml +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/.github/workflows/working-branch.yaml +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/.gitignore +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/.python-version +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/.sqlfluff +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/LICENSE +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/Makefile +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/README.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/eda/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/eda/bivariate_analysis.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/eda/eda_toolkit.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/eda/feature_engineering.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/eda/first_glance.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/eda/univariate_analysis.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/eda/visualizations.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/eda/warnings/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/eda/warnings/automated_warnings.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/eda/warnings/default_warnings.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_reduction/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_reduction/base.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_reduction/correlation.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_reduction/counter_intuitive.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_reduction/drift.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_reduction/expert_rules.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_reduction/low_variance.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_reduction/predictive_power.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_reduction/reducer.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/base.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/embedded_methods/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/embedded_methods/elastic_net.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/feature_stability.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/meta_selector.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/utils/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/utils/data_handling.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/utils/feature_type_constraints.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/utils/plottings.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/utils/scoring.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/wrapper_methods/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/wrapper_methods/bayesian_search.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/wrapper_methods/boruta.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/wrapper_methods/combination_search.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/wrapper_methods/recursive_feature_eliminator.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/wrapper_methods/rfe.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/wrapper_methods/rfe_catboost.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/feature_selection/wrapper_methods/sequential_selection.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/model_training/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/model_training/hyper_parameter_tuning/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/model_training/hyper_parameter_tuning/tuner.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/model_training/models/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/model_training/models/base.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/model_training/models/ensemble_methods.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/model_training/utils/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/classifier_toolkit/model_training/utils/params.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/changelog.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/eda/bivariate_analysis.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/eda/eda_toolkit.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/eda/feature_engineering.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/eda/first_glance.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/eda/overview.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/eda/univariate_analysis.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/eda/visualizations.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/eda/warnings/default_warnings.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/eda/warnings/warning_system.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/examples/eda_example.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/examples/feature_selection_advanced.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/examples/feature_selection_example.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_reduction/correlation.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_reduction/counter_intuitive.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_reduction/drift.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_reduction/expert_rules.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_reduction/low_variance.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_reduction/overview.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_reduction/predictive_power.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_reduction/reducer.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/embedded_methods/elastic_net.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/feature_stability.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/meta_selector.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/overview.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/utils/data_handling.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/utils/scoring.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/wrapper_methods/bayesian_search.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/wrapper_methods/boruta.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/wrapper_methods/combination_search.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/wrapper_methods/recursive_feature_eliminator.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/wrapper_methods/rfe.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/feature_selection/wrapper_methods/sequential_selection.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/index.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/model_training/tuner.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/eda/bivariate_analysis.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/eda/eda_toolkit.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/eda/feature_engineering.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/eda/first_glance.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/eda/overview.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/eda/univariate_analysis.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/eda/visualizations.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/eda/warnings/default_warnings.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/eda/warnings/warning_system.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_reduction/base.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_reduction/correlation.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_reduction/counter_intuitive.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_reduction/drift.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_reduction/expert_rules.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_reduction/low_variance.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_reduction/overview.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_reduction/predictive_power.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_reduction/reducer.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/base.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/embedded_methods/elastic_net.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/feature_stability.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/meta_selector.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/overview.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/utils/data_handling.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/utils/plottings.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/utils/scoring.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/wrapper_methods/bayesian_search.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/wrapper_methods/boruta.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/wrapper_methods/combination_search.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/wrapper_methods/recursive_feature_eliminator.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/wrapper_methods/rfe.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/feature_selection/wrapper_methods/sequential_selection.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/model_training/params.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/reference/tuner/tuner.md +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/docs/stylesheets/extra.css +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/examples/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/examples/example.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/main.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/notebooks/paylater_removed.json +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/ruff.toml +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/conftest.py +0 -0
- {classifier_toolkit-0.2.6/tests/eda → classifier_toolkit-0.3.0/tests/data_partition}/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/eda/test_bivariate_analysis.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/eda/test_feature_engineering.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/eda/test_first_glance.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/eda/test_univariate_analysis.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/eda/test_visualizations.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/eda/test_warnings.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_reduction/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_reduction/test_correlation.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_reduction/test_counter_intuitive.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_reduction/test_drift.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_reduction/test_expert_rules.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_reduction/test_low_variance.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_reduction/test_predictive_power.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_reduction/test_reducer.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_reduction/test_smoke.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_selection/__init__.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_selection/test_bayesian_search.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_selection/test_boruta.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_selection/test_combination_search.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_selection/test_elastic_net.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_selection/test_feature_stability.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_selection/test_recursive_feature_eliminator.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_selection/test_rfe.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_selection/test_rfe_catboost.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_selection/test_scoring.py +0 -0
- {classifier_toolkit-0.2.6 → classifier_toolkit-0.3.0}/tests/feature_selection/test_sequential_selection.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: classifier-toolkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Project-URL: Documentation, http://classifier-toolkit.gh-pages.qonto.co/
|
|
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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from .data_preprocess import (
|
|
2
|
+
filter_default_observations_greedy,
|
|
3
|
+
filter_default_observations_priority,
|
|
4
|
+
)
|
|
5
|
+
from .optimize_data import optimize_dataframe_dtypes
|
|
6
|
+
from .split_train_test import (
|
|
7
|
+
split_data_by_date,
|
|
8
|
+
split_data_recent_orgs,
|
|
9
|
+
split_data_stratified_by_org,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"filter_default_observations_greedy",
|
|
14
|
+
"filter_default_observations_priority",
|
|
15
|
+
"optimize_dataframe_dtypes",
|
|
16
|
+
"split_data_by_date",
|
|
17
|
+
"split_data_recent_orgs",
|
|
18
|
+
"split_data_stratified_by_org",
|
|
19
|
+
]
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import pandas as pd
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def _filter_org_with_dedup(group, date_col, label_col, dedup_fn):
|
|
5
|
+
group = group.sort_values(date_col)
|
|
6
|
+
has_default = (group[label_col] == 1).any()
|
|
7
|
+
|
|
8
|
+
if not has_default:
|
|
9
|
+
return dedup_fn(group)
|
|
10
|
+
|
|
11
|
+
first_default_date = group.loc[group[label_col] == 1, date_col].min()
|
|
12
|
+
before = group[group[date_col] < first_default_date]
|
|
13
|
+
at_first = group[group[date_col] == first_default_date]
|
|
14
|
+
after = group[(group[date_col] > first_default_date) & (group[label_col] == 1)]
|
|
15
|
+
|
|
16
|
+
return pd.concat(
|
|
17
|
+
[dedup_fn(before), at_first, dedup_fn(after, ref_date=first_default_date)]
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def filter_default_observations_priority(
|
|
22
|
+
df,
|
|
23
|
+
org_id_col="org_id",
|
|
24
|
+
date_col="observation_date",
|
|
25
|
+
label_col="default_label",
|
|
26
|
+
priority_col="label",
|
|
27
|
+
priority_value="paylater",
|
|
28
|
+
min_days=7,
|
|
29
|
+
):
|
|
30
|
+
"""
|
|
31
|
+
Filter a dataset based on default events, then deduplicate by minimum time gap.
|
|
32
|
+
|
|
33
|
+
Two sequential filters are applied per organization:
|
|
34
|
+
|
|
35
|
+
1st filter — default event logic:
|
|
36
|
+
- No default events (default_label=1): keep all records.
|
|
37
|
+
- Has default events: keep all records before the first default date,
|
|
38
|
+
and only keep default_label=1 records on/after the first default date.
|
|
39
|
+
|
|
40
|
+
2nd filter — deduplication:
|
|
41
|
+
- Enforce a minimum gap of min_days between consecutive kept rows.
|
|
42
|
+
- When two rows are within min_days of each other, keep the one whose
|
|
43
|
+
priority_col equals priority_value ("paylater" beats "SDD").
|
|
44
|
+
If both or neither have priority, keep the earlier row.
|
|
45
|
+
|
|
46
|
+
Parameters:
|
|
47
|
+
-----------
|
|
48
|
+
df : pandas.DataFrame
|
|
49
|
+
org_id_col : str, default='org_id'
|
|
50
|
+
date_col : str, default='observation_date'
|
|
51
|
+
label_col : str, default='default_label'
|
|
52
|
+
Binary default indicator (1=default, 0=no default).
|
|
53
|
+
priority_col : str, default='label'
|
|
54
|
+
Column used to break ties during deduplication. Contains "paylater" or "SDD".
|
|
55
|
+
priority_value : str, default='paylater'
|
|
56
|
+
Value in priority_col that takes precedence when two rows are within min_days.
|
|
57
|
+
min_days : int, default=7
|
|
58
|
+
Minimum number of days required between consecutive kept rows.
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
--------
|
|
62
|
+
pandas.DataFrame
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
def _dedup(group, ref_date=None):
|
|
66
|
+
kept_indices = []
|
|
67
|
+
kept_has_priority = []
|
|
68
|
+
last_date = ref_date
|
|
69
|
+
|
|
70
|
+
for row in group.itertuples():
|
|
71
|
+
date = getattr(row, date_col)
|
|
72
|
+
has_priority = getattr(row, priority_col) == priority_value
|
|
73
|
+
|
|
74
|
+
if last_date is None or (date - last_date).days >= min_days:
|
|
75
|
+
kept_indices.append(row.Index)
|
|
76
|
+
kept_has_priority.append(has_priority)
|
|
77
|
+
last_date = date
|
|
78
|
+
elif kept_indices and has_priority and not kept_has_priority[-1]:
|
|
79
|
+
# Current row wins — replace the last kept row
|
|
80
|
+
kept_indices[-1] = row.Index
|
|
81
|
+
kept_has_priority[-1] = True
|
|
82
|
+
last_date = date
|
|
83
|
+
# else: keep the already-kept row (same priority or earlier wins)
|
|
84
|
+
|
|
85
|
+
return group.loc[kept_indices]
|
|
86
|
+
|
|
87
|
+
df_copy = df.copy()
|
|
88
|
+
df_copy[date_col] = pd.to_datetime(df_copy[date_col])
|
|
89
|
+
|
|
90
|
+
return (
|
|
91
|
+
df_copy.groupby(org_id_col, group_keys=False)
|
|
92
|
+
.apply(lambda g: _filter_org_with_dedup(g, date_col, label_col, _dedup))
|
|
93
|
+
.reset_index(drop=True)
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def filter_default_observations_greedy(
|
|
98
|
+
df,
|
|
99
|
+
org_id_col="org_id",
|
|
100
|
+
date_col="observation_date",
|
|
101
|
+
label_col="default_label",
|
|
102
|
+
min_days=7,
|
|
103
|
+
):
|
|
104
|
+
"""
|
|
105
|
+
Filter a dataset based on default events with a minimum gap between observations.
|
|
106
|
+
|
|
107
|
+
For each organization:
|
|
108
|
+
- If there are no default events (label=1), keep all records where consecutive
|
|
109
|
+
observation dates are at least min_days apart.
|
|
110
|
+
- If there are default events:
|
|
111
|
+
- Keep records before the first default date, enforcing min_days gap.
|
|
112
|
+
- Always include the first default date record (ignores min_days rule).
|
|
113
|
+
- Keep only default=1 records after the first default date, enforcing
|
|
114
|
+
min_days gap measured from the first default date onward.
|
|
115
|
+
|
|
116
|
+
Parameters:
|
|
117
|
+
-----------
|
|
118
|
+
df : pandas.DataFrame
|
|
119
|
+
The input dataframe containing organization data
|
|
120
|
+
org_id_col : str, default='org_id'
|
|
121
|
+
Column name for organization identifier
|
|
122
|
+
date_col : str, default='observation_date'
|
|
123
|
+
Column name for observation date
|
|
124
|
+
label_col : str, default='default_label'
|
|
125
|
+
Column name for default label (1=default, 0=no default)
|
|
126
|
+
min_days : int, default=7
|
|
127
|
+
Minimum number of days required between consecutive kept records
|
|
128
|
+
|
|
129
|
+
Returns:
|
|
130
|
+
--------
|
|
131
|
+
pandas.DataFrame
|
|
132
|
+
Filtered dataframe according to the specified rules
|
|
133
|
+
"""
|
|
134
|
+
|
|
135
|
+
def _dedup(group, ref_date=None):
|
|
136
|
+
kept_indices = []
|
|
137
|
+
last_date = ref_date
|
|
138
|
+
for row in group.itertuples():
|
|
139
|
+
date = getattr(row, date_col)
|
|
140
|
+
if last_date is None or (date - last_date).days >= min_days:
|
|
141
|
+
kept_indices.append(row.Index)
|
|
142
|
+
last_date = date
|
|
143
|
+
return group.loc[kept_indices]
|
|
144
|
+
|
|
145
|
+
df_copy = df.copy()
|
|
146
|
+
df_copy[date_col] = pd.to_datetime(df_copy[date_col])
|
|
147
|
+
|
|
148
|
+
return (
|
|
149
|
+
df_copy.groupby(org_id_col, group_keys=False)
|
|
150
|
+
.apply(lambda g: _filter_org_with_dedup(g, date_col, label_col, _dedup))
|
|
151
|
+
.reset_index(drop=True)
|
|
152
|
+
)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from collections import defaultdict
|
|
2
|
+
|
|
3
|
+
import pandas as pd
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def optimize_dataframe_dtypes(df, categorical_threshold=0.5, verbose=True):
|
|
7
|
+
"""
|
|
8
|
+
Optimize DataFrame data types to reduce memory usage.
|
|
9
|
+
|
|
10
|
+
Parameters:
|
|
11
|
+
- df: pandas DataFrame to optimize
|
|
12
|
+
- categorical_threshold: Convert object columns to category if unique ratio < threshold
|
|
13
|
+
- verbose: Print optimization details
|
|
14
|
+
|
|
15
|
+
Returns:
|
|
16
|
+
- Optimized DataFrame
|
|
17
|
+
- Dictionary mapping dtype names to lists of converted columns, plus
|
|
18
|
+
'memory_before_mb' and 'memory_after_mb' float entries
|
|
19
|
+
"""
|
|
20
|
+
df_opt = df.copy()
|
|
21
|
+
optimizations = defaultdict(list)
|
|
22
|
+
|
|
23
|
+
for col in df_opt.select_dtypes(include=["int64"]).columns:
|
|
24
|
+
if df_opt[col].isnull().any():
|
|
25
|
+
continue
|
|
26
|
+
downcast = "unsigned" if df_opt[col].min() >= 0 else "integer"
|
|
27
|
+
df_opt[col] = pd.to_numeric(df_opt[col], downcast=downcast)
|
|
28
|
+
optimizations[str(df_opt[col].dtype)].append(col)
|
|
29
|
+
|
|
30
|
+
n = len(df_opt)
|
|
31
|
+
for col in df_opt.select_dtypes(include=["object"]).columns:
|
|
32
|
+
if df_opt[col].nunique() / n < categorical_threshold:
|
|
33
|
+
df_opt[col] = df_opt[col].astype("category")
|
|
34
|
+
optimizations["category"].append(col)
|
|
35
|
+
|
|
36
|
+
mb_before = df.memory_usage(deep=True).sum() / 1024**2
|
|
37
|
+
mb_after = df_opt.memory_usage(deep=True).sum() / 1024**2
|
|
38
|
+
optimizations["memory_before_mb"] = mb_before
|
|
39
|
+
optimizations["memory_after_mb"] = mb_after
|
|
40
|
+
|
|
41
|
+
if verbose:
|
|
42
|
+
print(f"Memory reduced from {mb_before:.2f} MB to {mb_after:.2f} MB")
|
|
43
|
+
print(
|
|
44
|
+
f"Savings: {mb_before - mb_after:.2f} MB ({(mb_before - mb_after) / mb_before * 100:.1f}%)"
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
return df_opt, optimizations
|