classifier-toolkit 0.2.4__tar.gz → 0.2.5__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.5/.github/workflows/docs.yml +29 -0
- classifier_toolkit-0.2.5/.github/workflows/release.yaml +51 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/PKG-INFO +26 -11
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/README.md +19 -5
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/__init__.py +3 -0
- classifier_toolkit-0.2.5/classifier_toolkit/feature_selection/utils/feature_type_constraints.py +66 -0
- classifier_toolkit-0.2.5/classifier_toolkit/feature_selection/wrapper_methods/__init__.py +62 -0
- classifier_toolkit-0.2.5/classifier_toolkit/feature_selection/wrapper_methods/combination_search.py +569 -0
- classifier_toolkit-0.2.5/classifier_toolkit/feature_selection/wrapper_methods/recursive_feature_eliminator.py +1665 -0
- classifier_toolkit-0.2.5/classifier_toolkit/model_training/hyper_parameter_tuning/tuner.py +1332 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/utils/params.py +16 -39
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/bivariate_analysis.md +0 -4
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/eda_toolkit.md +0 -4
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/feature_engineering.md +0 -4
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/first_glance.md +0 -4
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/univariate_analysis.md +0 -4
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/visualizations.md +0 -4
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/warnings/default_warnings.md +0 -4
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/warnings/warning_system.md +0 -4
- classifier_toolkit-0.2.5/docs/feature_reduction/correlation.md +34 -0
- classifier_toolkit-0.2.5/docs/feature_reduction/counter_intuitive.md +49 -0
- classifier_toolkit-0.2.5/docs/feature_reduction/drift.md +35 -0
- classifier_toolkit-0.2.5/docs/feature_reduction/expert_rules.md +26 -0
- classifier_toolkit-0.2.5/docs/feature_reduction/low_variance.md +22 -0
- classifier_toolkit-0.2.5/docs/feature_reduction/overview.md +49 -0
- classifier_toolkit-0.2.5/docs/feature_reduction/predictive_power.md +34 -0
- classifier_toolkit-0.2.5/docs/feature_reduction/reducer.md +46 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/embedded_methods/elastic_net.md +0 -4
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/feature_stability.md +1 -5
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/meta_selector.md +17 -15
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/overview.md +10 -5
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/utils/data_handling.md +0 -4
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/utils/scoring.md +0 -4
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/wrapper_methods/bayesian_search.md +1 -5
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/wrapper_methods/boruta.md +1 -5
- classifier_toolkit-0.2.5/docs/feature_selection/wrapper_methods/combination_search.md +39 -0
- classifier_toolkit-0.2.5/docs/feature_selection/wrapper_methods/recursive_feature_eliminator.md +35 -0
- classifier_toolkit-0.2.5/docs/feature_selection/wrapper_methods/rfe.md +90 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/wrapper_methods/sequential_selection.md +0 -4
- classifier_toolkit-0.2.5/docs/model_training/tuner.md +359 -0
- classifier_toolkit-0.2.5/docs/reference/feature_reduction/base.md +5 -0
- classifier_toolkit-0.2.5/docs/reference/feature_selection/base.md +3 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/embedded_methods/elastic_net.md +1 -1
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/feature_stability.md +1 -1
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/meta_selector.md +1 -1
- classifier_toolkit-0.2.5/docs/reference/feature_selection/utils/plottings.md +5 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/wrapper_methods/bayesian_search.md +1 -1
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/wrapper_methods/boruta.md +1 -1
- classifier_toolkit-0.2.5/docs/reference/feature_selection/wrapper_methods/combination_search.md +111 -0
- classifier_toolkit-0.2.5/docs/reference/feature_selection/wrapper_methods/recursive_feature_eliminator.md +268 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/wrapper_methods/rfe.md +2 -2
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/wrapper_methods/sequential_selection.md +1 -1
- classifier_toolkit-0.2.5/docs/reference/model_training/params.md +5 -0
- classifier_toolkit-0.2.5/docs/reference/tuner/tuner.md +3 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/mkdocs.yml +57 -10
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/pyproject.toml +9 -6
- classifier_toolkit-0.2.5/tests/feature_selection/test_combination_search.py +290 -0
- classifier_toolkit-0.2.5/tests/feature_selection/test_recursive_feature_eliminator.py +638 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/uv.lock +776 -128
- classifier_toolkit-0.2.4/classifier_toolkit/feature_selection/wrapper_methods/__init__.py +0 -23
- classifier_toolkit-0.2.4/classifier_toolkit/model_training/hyper_parameter_tuning/tuner.py +0 -641
- classifier_toolkit-0.2.4/docs/feature_selection/wrapper_methods/rfe.md +0 -67
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.github/pull_request_template/default.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.github/workflows/checks.yaml +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.github/workflows/master.yaml +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.github/workflows/working-branch.yaml +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.gitignore +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.python-version +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.sqlfluff +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/LICENSE +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/Makefile +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/bivariate_analysis.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/eda_toolkit.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/feature_engineering.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/first_glance.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/univariate_analysis.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/visualizations.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/warnings/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/warnings/automated_warnings.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/warnings/default_warnings.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/base.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/correlation.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/counter_intuitive.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/drift.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/expert_rules.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/low_variance.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/predictive_power.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/reducer.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/base.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/embedded_methods/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/embedded_methods/elastic_net.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/feature_stability.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/meta_selector.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/utils/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/utils/data_handling.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/utils/plottings.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/utils/scoring.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/wrapper_methods/bayesian_search.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/wrapper_methods/boruta.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/wrapper_methods/rfe.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/wrapper_methods/rfe_catboost.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/wrapper_methods/sequential_selection.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/hyper_parameter_tuning/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/models/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/models/base.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/models/ensemble_methods.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/utils/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/changelog.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/overview.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/examples/eda_example.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/examples/feature_selection_advanced.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/examples/feature_selection_example.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/index.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/bivariate_analysis.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/eda_toolkit.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/feature_engineering.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/first_glance.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/overview.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/univariate_analysis.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/visualizations.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/warnings/default_warnings.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/warnings/warning_system.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/correlation.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/counter_intuitive.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/drift.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/expert_rules.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/low_variance.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/overview.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/predictive_power.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/reducer.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/overview.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/utils/data_handling.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/utils/scoring.md +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/stylesheets/extra.css +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/examples/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/examples/example.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/main.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/notebooks/paylater_removed.json +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/ruff.toml +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/conftest.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_bivariate_analysis.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_feature_engineering.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_first_glance.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_univariate_analysis.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_visualizations.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_warnings.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_correlation.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_counter_intuitive.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_drift.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_expert_rules.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_low_variance.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_predictive_power.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_reducer.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_smoke.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/__init__.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_bayesian_search.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_boruta.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_elastic_net.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_feature_stability.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_rfe.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_rfe_catboost.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_scoring.py +0 -0
- {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_sequential_selection.py +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Deploy docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [master]
|
|
6
|
+
paths:
|
|
7
|
+
- "docs/**"
|
|
8
|
+
- "mkdocs.yml"
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
deploy:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
permissions:
|
|
14
|
+
contents: write
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v6
|
|
17
|
+
|
|
18
|
+
- uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.12"
|
|
21
|
+
|
|
22
|
+
- name: Install uv
|
|
23
|
+
run: curl -LsSf https://astral.sh/uv/install.sh | sh && echo "$HOME/.local/bin" >> $GITHUB_PATH
|
|
24
|
+
|
|
25
|
+
- name: Install dependencies
|
|
26
|
+
run: uv sync --group docs
|
|
27
|
+
|
|
28
|
+
- name: Deploy
|
|
29
|
+
run: uv run mkdocs gh-deploy --force
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
env:
|
|
9
|
+
PYTHON_VERSION: "3.12.6"
|
|
10
|
+
UV_INDEX_URL: "https://${{ vars.NEXUS_READER_USERNAME }}:${{ secrets.NEXUS_READER_PASSWORD }}@package-registry.tooling-production.qonto.co/repository/pypi-proxies/simple"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
build-and-publish:
|
|
15
|
+
runs-on: default
|
|
16
|
+
permissions:
|
|
17
|
+
contents: write
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v6
|
|
20
|
+
|
|
21
|
+
- name: Set up Python
|
|
22
|
+
uses: actions/setup-python@v4
|
|
23
|
+
with:
|
|
24
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
25
|
+
|
|
26
|
+
- name: Install system dependencies
|
|
27
|
+
run: |
|
|
28
|
+
sudo apt-get update
|
|
29
|
+
sudo apt-get install -y build-essential gcc g++ make
|
|
30
|
+
|
|
31
|
+
- name: Install uv
|
|
32
|
+
run: |
|
|
33
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
34
|
+
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
|
35
|
+
|
|
36
|
+
- name: Install dependencies
|
|
37
|
+
run: uv sync
|
|
38
|
+
env:
|
|
39
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
40
|
+
|
|
41
|
+
- name: Build package
|
|
42
|
+
run: uv build
|
|
43
|
+
|
|
44
|
+
- name: Publish to PyPI
|
|
45
|
+
run: uv publish --token ${{ secrets.PYPI_TOKEN }}
|
|
46
|
+
|
|
47
|
+
- name: Create GitHub Release
|
|
48
|
+
uses: softprops/action-gh-release@v2
|
|
49
|
+
with:
|
|
50
|
+
files: dist/*
|
|
51
|
+
generate_release_notes: true
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: classifier-toolkit
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
|
+
Project-URL: Documentation, http://classifier-toolkit.gh-pages.qonto.co/
|
|
4
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>
|
|
5
6
|
License-File: LICENSE
|
|
6
|
-
Requires-Python: <3.
|
|
7
|
+
Requires-Python: <3.14,>=3.9
|
|
7
8
|
Requires-Dist: catboost<2.0.0,>=1.2.2
|
|
8
9
|
Requires-Dist: category-encoders<3.0.0,>=2.6.3
|
|
9
10
|
Requires-Dist: colorama<0.5.0,>=0.4.6
|
|
10
11
|
Requires-Dist: lightgbm<5.0.0,>=4.5.0
|
|
11
12
|
Requires-Dist: matplotlib<4.0.0,>=3.9.2
|
|
12
13
|
Requires-Dist: nbformat>=5.10.4
|
|
13
|
-
Requires-Dist: numpy<2.0
|
|
14
|
+
Requires-Dist: numpy<3.0,>=2.0
|
|
14
15
|
Requires-Dist: optuna<4.0.0,>=3.5.0
|
|
15
16
|
Requires-Dist: pandas<3.0.0,>=2.2.0
|
|
16
17
|
Requires-Dist: polars<2.0.0,>=1.2.1
|
|
17
|
-
Requires-Dist: pyarrow
|
|
18
|
+
Requires-Dist: pyarrow>=18.0.0
|
|
18
19
|
Requires-Dist: scikit-learn<2.0.0,>=1.4.0
|
|
19
|
-
Requires-Dist: scipy
|
|
20
|
-
Requires-Dist: shap
|
|
20
|
+
Requires-Dist: scipy>=1.11.0
|
|
21
|
+
Requires-Dist: shap>=0.46.0
|
|
21
22
|
Requires-Dist: statsmodels<0.15.0,>=0.14.2
|
|
22
23
|
Requires-Dist: tabulate<0.10.0,>=0.9.0
|
|
23
24
|
Requires-Dist: tqdm<5.0.0,>=4.66.0
|
|
@@ -39,8 +40,7 @@ pip install classifier-toolkit
|
|
|
39
40
|
[](https://github.com/astral-sh/uv)
|
|
40
41
|
[](https://github.com/astral-sh/ruff)
|
|
41
42
|
[](https://github.com/psf/black)
|
|
42
|
-
|
|
43
|
-
This is a new project.
|
|
43
|
+
[](http://classifier-toolkit.gh-pages.qonto.co/)
|
|
44
44
|
|
|
45
45
|
-----
|
|
46
46
|
|
|
@@ -65,10 +65,10 @@ This library automates binary classification tasks in the finance domain, specif
|
|
|
65
65
|
1. **EDA**: accessible via `EDA_Toolkit`. Provides EDA and feature engineering functionality with all necessary visualizations.
|
|
66
66
|
2. **Feature Reduction**: filter-style pre-selection pipeline (expert rules, low variance, drift, predictive power, counter-intuitive direction, high correlation).
|
|
67
67
|
3. **Feature Selection**: wrapper and embedded methods (RFE, Boruta, Sequential, Bayesian, ElasticNet, MetaSelector).
|
|
68
|
-
4. Model
|
|
68
|
+
4. **Model Training**: accessible via `Tuner`. Hyperparameter optimization (grid search, Bayesian via Optuna) for LightGBM and CatBoost with train/val/test evaluation.
|
|
69
69
|
5. Evaluation and reporting: To be implemented.
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
For detailed usage, refer to the documentation.
|
|
72
72
|
|
|
73
73
|
**Note**: that this library does not contain data wrangling steps (although it contains feature engineering), it's an intermediate step between EDA and feature engineering where users should fix any data quality related issues. Therefore, conducting the EDA is crucial to mitigate any issues before moving onto the feature engineering and the subsequent steps.
|
|
74
74
|
|
|
@@ -131,9 +131,25 @@ In the future, the package architectures will be included here. However, for now
|
|
|
131
131
|
- **Wrapper Methods**:
|
|
132
132
|
- Recursive Feature Elimination (RFE) with support for various ensemble methods (Random Forest, XGBoost, LightGBM, CatBoost).
|
|
133
133
|
- Sequential Feature Selection (forward, backward, floating, and bidirectional).
|
|
134
|
+
- **Recursive Feature Eliminator**: Adaptive two-phase elimination (batch drop + one-by-one) with overfitting-aware strategies, early stopping with rollback, temporal cross-validation, and sample weights.
|
|
135
|
+
- **Feature Combination Searcher**: Exhaustive combinatorial search over all subsets of a candidate pool, scoring each combination on train/val/test splits.
|
|
134
136
|
- **Meta Selector**: Combines multiple feature selection methods to provide a robust selection.
|
|
135
137
|
- **Utility Functions**: Includes scoring functions and plotting utilities for feature importance visualization.
|
|
136
138
|
|
|
139
|
+
- **Model Training**: Hyperparameter optimization for LightGBM and CatBoost, with support for grid search and Bayesian optimization (via Optuna).
|
|
140
|
+
|
|
141
|
+
```python
|
|
142
|
+
from classifier_toolkit.model_training.hyper_parameter_tuning import Tuner
|
|
143
|
+
|
|
144
|
+
tuner = Tuner(model_name="lightgbm", metric="auc", search_type="bayesian", n_trials=50)
|
|
145
|
+
tuner.fit(X_train, y_train, X_val, y_val, X_test=X_test, y_test=y_test)
|
|
146
|
+
|
|
147
|
+
best_model = tuner.best_model
|
|
148
|
+
tuner.results_df # full trial results
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Custom parameter search spaces can be defined via `ModelParams` and `ParamRange`.
|
|
152
|
+
|
|
137
153
|
### Development & CI/CD
|
|
138
154
|
|
|
139
155
|
This project uses modern tooling for fast and efficient development workflows:
|
|
@@ -172,6 +188,5 @@ uv build
|
|
|
172
188
|
|
|
173
189
|
### Future Work
|
|
174
190
|
The next planned improvements and additions to the library include:
|
|
175
|
-
* Adding model fitting and hyperparameter tuning functionalities.
|
|
176
191
|
* Developing comprehensive evaluation and reporting tools to assist with model assessment.
|
|
177
192
|
* Expanding documentation to include architecture diagrams and detailed usage examples.
|
|
@@ -9,8 +9,7 @@ pip install classifier-toolkit
|
|
|
9
9
|
[](https://github.com/astral-sh/uv)
|
|
10
10
|
[](https://github.com/astral-sh/ruff)
|
|
11
11
|
[](https://github.com/psf/black)
|
|
12
|
-
|
|
13
|
-
This is a new project.
|
|
12
|
+
[](http://classifier-toolkit.gh-pages.qonto.co/)
|
|
14
13
|
|
|
15
14
|
-----
|
|
16
15
|
|
|
@@ -35,10 +34,10 @@ This library automates binary classification tasks in the finance domain, specif
|
|
|
35
34
|
1. **EDA**: accessible via `EDA_Toolkit`. Provides EDA and feature engineering functionality with all necessary visualizations.
|
|
36
35
|
2. **Feature Reduction**: filter-style pre-selection pipeline (expert rules, low variance, drift, predictive power, counter-intuitive direction, high correlation).
|
|
37
36
|
3. **Feature Selection**: wrapper and embedded methods (RFE, Boruta, Sequential, Bayesian, ElasticNet, MetaSelector).
|
|
38
|
-
4. Model
|
|
37
|
+
4. **Model Training**: accessible via `Tuner`. Hyperparameter optimization (grid search, Bayesian via Optuna) for LightGBM and CatBoost with train/val/test evaluation.
|
|
39
38
|
5. Evaluation and reporting: To be implemented.
|
|
40
39
|
|
|
41
|
-
|
|
40
|
+
For detailed usage, refer to the documentation.
|
|
42
41
|
|
|
43
42
|
**Note**: that this library does not contain data wrangling steps (although it contains feature engineering), it's an intermediate step between EDA and feature engineering where users should fix any data quality related issues. Therefore, conducting the EDA is crucial to mitigate any issues before moving onto the feature engineering and the subsequent steps.
|
|
44
43
|
|
|
@@ -101,9 +100,25 @@ In the future, the package architectures will be included here. However, for now
|
|
|
101
100
|
- **Wrapper Methods**:
|
|
102
101
|
- Recursive Feature Elimination (RFE) with support for various ensemble methods (Random Forest, XGBoost, LightGBM, CatBoost).
|
|
103
102
|
- Sequential Feature Selection (forward, backward, floating, and bidirectional).
|
|
103
|
+
- **Recursive Feature Eliminator**: Adaptive two-phase elimination (batch drop + one-by-one) with overfitting-aware strategies, early stopping with rollback, temporal cross-validation, and sample weights.
|
|
104
|
+
- **Feature Combination Searcher**: Exhaustive combinatorial search over all subsets of a candidate pool, scoring each combination on train/val/test splits.
|
|
104
105
|
- **Meta Selector**: Combines multiple feature selection methods to provide a robust selection.
|
|
105
106
|
- **Utility Functions**: Includes scoring functions and plotting utilities for feature importance visualization.
|
|
106
107
|
|
|
108
|
+
- **Model Training**: Hyperparameter optimization for LightGBM and CatBoost, with support for grid search and Bayesian optimization (via Optuna).
|
|
109
|
+
|
|
110
|
+
```python
|
|
111
|
+
from classifier_toolkit.model_training.hyper_parameter_tuning import Tuner
|
|
112
|
+
|
|
113
|
+
tuner = Tuner(model_name="lightgbm", metric="auc", search_type="bayesian", n_trials=50)
|
|
114
|
+
tuner.fit(X_train, y_train, X_val, y_val, X_test=X_test, y_test=y_test)
|
|
115
|
+
|
|
116
|
+
best_model = tuner.best_model
|
|
117
|
+
tuner.results_df # full trial results
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Custom parameter search spaces can be defined via `ModelParams` and `ParamRange`.
|
|
121
|
+
|
|
107
122
|
### Development & CI/CD
|
|
108
123
|
|
|
109
124
|
This project uses modern tooling for fast and efficient development workflows:
|
|
@@ -142,6 +157,5 @@ uv build
|
|
|
142
157
|
|
|
143
158
|
### Future Work
|
|
144
159
|
The next planned improvements and additions to the library include:
|
|
145
|
-
* Adding model fitting and hyperparameter tuning functionalities.
|
|
146
160
|
* Developing comprehensive evaluation and reporting tools to assist with model assessment.
|
|
147
161
|
* Expanding documentation to include architecture diagrams and detailed usage examples.
|
|
@@ -29,6 +29,9 @@ _EXPORTS: Dict[str, str] = {
|
|
|
29
29
|
"RFESelector": "classifier_toolkit.feature_selection.wrapper_methods.rfe",
|
|
30
30
|
"RFECatBoostSelector": "classifier_toolkit.feature_selection.wrapper_methods.rfe_catboost",
|
|
31
31
|
"SequentialSelector": "classifier_toolkit.feature_selection.wrapper_methods.sequential_selection",
|
|
32
|
+
"FeatureCombinationSearcher": "classifier_toolkit.feature_selection.wrapper_methods.combination_search",
|
|
33
|
+
"RecursiveFeatureEliminator": "classifier_toolkit.feature_selection.wrapper_methods.recursive_feature_eliminator",
|
|
34
|
+
"fast_recursive_feature_elimination": "classifier_toolkit.feature_selection.wrapper_methods.recursive_feature_eliminator",
|
|
32
35
|
}
|
|
33
36
|
|
|
34
37
|
__all__ = list(_EXPORTS.keys())
|
classifier_toolkit-0.2.5/classifier_toolkit/feature_selection/utils/feature_type_constraints.py
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
from typing import Dict, List, Union
|
|
2
|
+
|
|
3
|
+
import pandas as pd
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def build_feature_type_map(
|
|
7
|
+
feature_type_mapping: Union[pd.DataFrame, Dict[str, str]],
|
|
8
|
+
) -> Dict[str, str]:
|
|
9
|
+
"""Normalize a feature_name/feature_type mapping into a ``{feature: type}`` dict.
|
|
10
|
+
|
|
11
|
+
Parameters
|
|
12
|
+
----------
|
|
13
|
+
feature_type_mapping : pd.DataFrame or Dict[str, str]
|
|
14
|
+
Either a dict, or a DataFrame with ``feature_name`` and ``feature_type``
|
|
15
|
+
columns (e.g. built from an information_schema query grouping features
|
|
16
|
+
into business types such as ``balance_amount``, ``outflow_card``, ...).
|
|
17
|
+
"""
|
|
18
|
+
if isinstance(feature_type_mapping, dict):
|
|
19
|
+
return dict(feature_type_mapping)
|
|
20
|
+
|
|
21
|
+
missing = {"feature_name", "feature_type"} - set(feature_type_mapping.columns)
|
|
22
|
+
if missing:
|
|
23
|
+
raise ValueError(
|
|
24
|
+
f"feature_type_mapping is missing required column(s): {sorted(missing)}"
|
|
25
|
+
)
|
|
26
|
+
return dict(
|
|
27
|
+
zip(
|
|
28
|
+
feature_type_mapping["feature_name"],
|
|
29
|
+
feature_type_mapping["feature_type"],
|
|
30
|
+
)
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def get_type_protected_features(
|
|
35
|
+
remaining_features: List[str], feature_type_map: Dict[str, str]
|
|
36
|
+
) -> List[str]:
|
|
37
|
+
"""Features that must not be removed to keep every required type covered.
|
|
38
|
+
|
|
39
|
+
A feature is protected once it is the *last* remaining representative of
|
|
40
|
+
its type within ``remaining_features``. Features absent from
|
|
41
|
+
``feature_type_map`` are unconstrained and never protected.
|
|
42
|
+
|
|
43
|
+
Parameters
|
|
44
|
+
----------
|
|
45
|
+
remaining_features : List[str]
|
|
46
|
+
Features still in play (not yet removed).
|
|
47
|
+
feature_type_map : Dict[str, str]
|
|
48
|
+
Mapping of feature name to feature type, as returned by
|
|
49
|
+
``build_feature_type_map``.
|
|
50
|
+
|
|
51
|
+
Returns
|
|
52
|
+
-------
|
|
53
|
+
List[str]
|
|
54
|
+
Subset of ``remaining_features`` that are the sole survivor of their type.
|
|
55
|
+
"""
|
|
56
|
+
type_counts: Dict[str, int] = {}
|
|
57
|
+
for feature in remaining_features:
|
|
58
|
+
feature_type = feature_type_map.get(feature)
|
|
59
|
+
if feature_type is not None:
|
|
60
|
+
type_counts[feature_type] = type_counts.get(feature_type, 0) + 1
|
|
61
|
+
|
|
62
|
+
return [
|
|
63
|
+
feature
|
|
64
|
+
for feature in remaining_features
|
|
65
|
+
if feature in feature_type_map and type_counts[feature_type_map[feature]] == 1
|
|
66
|
+
]
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from classifier_toolkit.feature_selection.wrapper_methods.combination_search import (
|
|
4
|
+
FeatureCombinationSearcher,
|
|
5
|
+
)
|
|
6
|
+
from classifier_toolkit.feature_selection.wrapper_methods.recursive_feature_eliminator import (
|
|
7
|
+
RecursiveFeatureEliminator,
|
|
8
|
+
fast_recursive_feature_elimination,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
from classifier_toolkit.feature_selection.wrapper_methods.bayesian_search import (
|
|
15
|
+
BayesianFeatureSelector,
|
|
16
|
+
)
|
|
17
|
+
except ImportError as e:
|
|
18
|
+
logger.warning("BayesianFeatureSelector not available: %s", e)
|
|
19
|
+
BayesianFeatureSelector = None # type: ignore[assignment,misc]
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
from classifier_toolkit.feature_selection.wrapper_methods.boruta import (
|
|
23
|
+
BorutaSelector,
|
|
24
|
+
)
|
|
25
|
+
except ImportError as e:
|
|
26
|
+
logger.warning("BorutaSelector not available: %s", e)
|
|
27
|
+
BorutaSelector = None # type: ignore[assignment,misc]
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
from classifier_toolkit.feature_selection.wrapper_methods.rfe import (
|
|
31
|
+
RFESelector,
|
|
32
|
+
)
|
|
33
|
+
except ImportError as e:
|
|
34
|
+
logger.warning("RFESelector not available: %s", e)
|
|
35
|
+
RFESelector = None # type: ignore[assignment,misc]
|
|
36
|
+
|
|
37
|
+
try:
|
|
38
|
+
from classifier_toolkit.feature_selection.wrapper_methods.rfe_catboost import (
|
|
39
|
+
RFECatBoostSelector,
|
|
40
|
+
)
|
|
41
|
+
except ImportError as e:
|
|
42
|
+
logger.warning("RFECatBoostSelector not available: %s", e)
|
|
43
|
+
RFECatBoostSelector = None # type: ignore[assignment,misc]
|
|
44
|
+
|
|
45
|
+
try:
|
|
46
|
+
from classifier_toolkit.feature_selection.wrapper_methods.sequential_selection import (
|
|
47
|
+
SequentialSelector,
|
|
48
|
+
)
|
|
49
|
+
except ImportError as e:
|
|
50
|
+
logger.warning("SequentialSelector not available: %s", e)
|
|
51
|
+
SequentialSelector = None # type: ignore[assignment,misc]
|
|
52
|
+
|
|
53
|
+
__all__ = [
|
|
54
|
+
"BayesianFeatureSelector",
|
|
55
|
+
"BorutaSelector",
|
|
56
|
+
"FeatureCombinationSearcher",
|
|
57
|
+
"RecursiveFeatureEliminator",
|
|
58
|
+
"RFESelector",
|
|
59
|
+
"RFECatBoostSelector",
|
|
60
|
+
"SequentialSelector",
|
|
61
|
+
"fast_recursive_feature_elimination",
|
|
62
|
+
]
|