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.
Files changed (169) hide show
  1. classifier_toolkit-0.2.5/.github/workflows/docs.yml +29 -0
  2. classifier_toolkit-0.2.5/.github/workflows/release.yaml +51 -0
  3. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/PKG-INFO +26 -11
  4. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/README.md +19 -5
  5. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/__init__.py +3 -0
  6. classifier_toolkit-0.2.5/classifier_toolkit/feature_selection/utils/feature_type_constraints.py +66 -0
  7. classifier_toolkit-0.2.5/classifier_toolkit/feature_selection/wrapper_methods/__init__.py +62 -0
  8. classifier_toolkit-0.2.5/classifier_toolkit/feature_selection/wrapper_methods/combination_search.py +569 -0
  9. classifier_toolkit-0.2.5/classifier_toolkit/feature_selection/wrapper_methods/recursive_feature_eliminator.py +1665 -0
  10. classifier_toolkit-0.2.5/classifier_toolkit/model_training/hyper_parameter_tuning/tuner.py +1332 -0
  11. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/utils/params.py +16 -39
  12. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/bivariate_analysis.md +0 -4
  13. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/eda_toolkit.md +0 -4
  14. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/feature_engineering.md +0 -4
  15. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/first_glance.md +0 -4
  16. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/univariate_analysis.md +0 -4
  17. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/visualizations.md +0 -4
  18. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/warnings/default_warnings.md +0 -4
  19. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/warnings/warning_system.md +0 -4
  20. classifier_toolkit-0.2.5/docs/feature_reduction/correlation.md +34 -0
  21. classifier_toolkit-0.2.5/docs/feature_reduction/counter_intuitive.md +49 -0
  22. classifier_toolkit-0.2.5/docs/feature_reduction/drift.md +35 -0
  23. classifier_toolkit-0.2.5/docs/feature_reduction/expert_rules.md +26 -0
  24. classifier_toolkit-0.2.5/docs/feature_reduction/low_variance.md +22 -0
  25. classifier_toolkit-0.2.5/docs/feature_reduction/overview.md +49 -0
  26. classifier_toolkit-0.2.5/docs/feature_reduction/predictive_power.md +34 -0
  27. classifier_toolkit-0.2.5/docs/feature_reduction/reducer.md +46 -0
  28. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/embedded_methods/elastic_net.md +0 -4
  29. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/feature_stability.md +1 -5
  30. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/meta_selector.md +17 -15
  31. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/overview.md +10 -5
  32. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/utils/data_handling.md +0 -4
  33. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/utils/scoring.md +0 -4
  34. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/wrapper_methods/bayesian_search.md +1 -5
  35. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/wrapper_methods/boruta.md +1 -5
  36. classifier_toolkit-0.2.5/docs/feature_selection/wrapper_methods/combination_search.md +39 -0
  37. classifier_toolkit-0.2.5/docs/feature_selection/wrapper_methods/recursive_feature_eliminator.md +35 -0
  38. classifier_toolkit-0.2.5/docs/feature_selection/wrapper_methods/rfe.md +90 -0
  39. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/feature_selection/wrapper_methods/sequential_selection.md +0 -4
  40. classifier_toolkit-0.2.5/docs/model_training/tuner.md +359 -0
  41. classifier_toolkit-0.2.5/docs/reference/feature_reduction/base.md +5 -0
  42. classifier_toolkit-0.2.5/docs/reference/feature_selection/base.md +3 -0
  43. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/embedded_methods/elastic_net.md +1 -1
  44. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/feature_stability.md +1 -1
  45. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/meta_selector.md +1 -1
  46. classifier_toolkit-0.2.5/docs/reference/feature_selection/utils/plottings.md +5 -0
  47. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/wrapper_methods/bayesian_search.md +1 -1
  48. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/wrapper_methods/boruta.md +1 -1
  49. classifier_toolkit-0.2.5/docs/reference/feature_selection/wrapper_methods/combination_search.md +111 -0
  50. classifier_toolkit-0.2.5/docs/reference/feature_selection/wrapper_methods/recursive_feature_eliminator.md +268 -0
  51. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/wrapper_methods/rfe.md +2 -2
  52. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/wrapper_methods/sequential_selection.md +1 -1
  53. classifier_toolkit-0.2.5/docs/reference/model_training/params.md +5 -0
  54. classifier_toolkit-0.2.5/docs/reference/tuner/tuner.md +3 -0
  55. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/mkdocs.yml +57 -10
  56. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/pyproject.toml +9 -6
  57. classifier_toolkit-0.2.5/tests/feature_selection/test_combination_search.py +290 -0
  58. classifier_toolkit-0.2.5/tests/feature_selection/test_recursive_feature_eliminator.py +638 -0
  59. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/uv.lock +776 -128
  60. classifier_toolkit-0.2.4/classifier_toolkit/feature_selection/wrapper_methods/__init__.py +0 -23
  61. classifier_toolkit-0.2.4/classifier_toolkit/model_training/hyper_parameter_tuning/tuner.py +0 -641
  62. classifier_toolkit-0.2.4/docs/feature_selection/wrapper_methods/rfe.md +0 -67
  63. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.github/pull_request_template/default.md +0 -0
  64. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.github/workflows/checks.yaml +0 -0
  65. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.github/workflows/master.yaml +0 -0
  66. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.github/workflows/working-branch.yaml +0 -0
  67. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.gitignore +0 -0
  68. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.python-version +0 -0
  69. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/.sqlfluff +0 -0
  70. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/LICENSE +0 -0
  71. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/Makefile +0 -0
  72. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/__init__.py +0 -0
  73. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/bivariate_analysis.py +0 -0
  74. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/eda_toolkit.py +0 -0
  75. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/feature_engineering.py +0 -0
  76. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/first_glance.py +0 -0
  77. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/univariate_analysis.py +0 -0
  78. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/visualizations.py +0 -0
  79. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/warnings/__init__.py +0 -0
  80. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/warnings/automated_warnings.py +0 -0
  81. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/eda/warnings/default_warnings.py +0 -0
  82. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/__init__.py +0 -0
  83. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/base.py +0 -0
  84. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/correlation.py +0 -0
  85. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/counter_intuitive.py +0 -0
  86. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/drift.py +0 -0
  87. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/expert_rules.py +0 -0
  88. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/low_variance.py +0 -0
  89. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/predictive_power.py +0 -0
  90. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_reduction/reducer.py +0 -0
  91. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/base.py +0 -0
  92. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/embedded_methods/__init__.py +0 -0
  93. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/embedded_methods/elastic_net.py +0 -0
  94. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/feature_stability.py +0 -0
  95. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/meta_selector.py +0 -0
  96. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/utils/__init__.py +0 -0
  97. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/utils/data_handling.py +0 -0
  98. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/utils/plottings.py +0 -0
  99. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/utils/scoring.py +0 -0
  100. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/wrapper_methods/bayesian_search.py +0 -0
  101. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/wrapper_methods/boruta.py +0 -0
  102. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/wrapper_methods/rfe.py +0 -0
  103. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/wrapper_methods/rfe_catboost.py +0 -0
  104. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/feature_selection/wrapper_methods/sequential_selection.py +0 -0
  105. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/__init__.py +0 -0
  106. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/hyper_parameter_tuning/__init__.py +0 -0
  107. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/models/__init__.py +0 -0
  108. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/models/base.py +0 -0
  109. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/models/ensemble_methods.py +0 -0
  110. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/classifier_toolkit/model_training/utils/__init__.py +0 -0
  111. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/changelog.md +0 -0
  112. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/eda/overview.md +0 -0
  113. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/examples/eda_example.md +0 -0
  114. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/examples/feature_selection_advanced.md +0 -0
  115. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/examples/feature_selection_example.md +0 -0
  116. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/index.md +0 -0
  117. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/bivariate_analysis.md +0 -0
  118. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/eda_toolkit.md +0 -0
  119. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/feature_engineering.md +0 -0
  120. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/first_glance.md +0 -0
  121. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/overview.md +0 -0
  122. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/univariate_analysis.md +0 -0
  123. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/visualizations.md +0 -0
  124. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/warnings/default_warnings.md +0 -0
  125. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/eda/warnings/warning_system.md +0 -0
  126. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/correlation.md +0 -0
  127. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/counter_intuitive.md +0 -0
  128. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/drift.md +0 -0
  129. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/expert_rules.md +0 -0
  130. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/low_variance.md +0 -0
  131. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/overview.md +0 -0
  132. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/predictive_power.md +0 -0
  133. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_reduction/reducer.md +0 -0
  134. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/overview.md +0 -0
  135. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/utils/data_handling.md +0 -0
  136. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/reference/feature_selection/utils/scoring.md +0 -0
  137. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/docs/stylesheets/extra.css +0 -0
  138. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/examples/__init__.py +0 -0
  139. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/examples/example.py +0 -0
  140. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/main.py +0 -0
  141. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/notebooks/paylater_removed.json +0 -0
  142. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/ruff.toml +0 -0
  143. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/__init__.py +0 -0
  144. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/conftest.py +0 -0
  145. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/__init__.py +0 -0
  146. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_bivariate_analysis.py +0 -0
  147. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_feature_engineering.py +0 -0
  148. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_first_glance.py +0 -0
  149. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_univariate_analysis.py +0 -0
  150. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_visualizations.py +0 -0
  151. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/eda/test_warnings.py +0 -0
  152. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/__init__.py +0 -0
  153. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_correlation.py +0 -0
  154. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_counter_intuitive.py +0 -0
  155. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_drift.py +0 -0
  156. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_expert_rules.py +0 -0
  157. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_low_variance.py +0 -0
  158. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_predictive_power.py +0 -0
  159. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_reducer.py +0 -0
  160. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_reduction/test_smoke.py +0 -0
  161. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/__init__.py +0 -0
  162. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_bayesian_search.py +0 -0
  163. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_boruta.py +0 -0
  164. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_elastic_net.py +0 -0
  165. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_feature_stability.py +0 -0
  166. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_rfe.py +0 -0
  167. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_rfe_catboost.py +0 -0
  168. {classifier_toolkit-0.2.4 → classifier_toolkit-0.2.5}/tests/feature_selection/test_scoring.py +0 -0
  169. {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.4
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.13,>=3.9
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<19.0.0,>=18.0.0
18
+ Requires-Dist: pyarrow>=18.0.0
18
19
  Requires-Dist: scikit-learn<2.0.0,>=1.4.0
19
- Requires-Dist: scipy<1.14
20
- Requires-Dist: shap<0.45.0,>=0.44.1
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
  [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)
40
41
  [![Linting - Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
41
42
  [![Code style - Black](https://img.shields.io/badge/Code%20Style-Black-000000.svg)](https://github.com/psf/black)
42
-
43
- This is a new project.
43
+ [![Documentation](https://img.shields.io/badge/docs-gh--pages-blue)](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 fitting and hyperparameter tuning: To be implemented.
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
- In the future, the package architectures will be included here. However, for now please consult the docstrings in the specific methods in the relevant modules.
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
  [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)
10
10
  [![Linting - Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
11
11
  [![Code style - Black](https://img.shields.io/badge/Code%20Style-Black-000000.svg)](https://github.com/psf/black)
12
-
13
- This is a new project.
12
+ [![Documentation](https://img.shields.io/badge/docs-gh--pages-blue)](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 fitting and hyperparameter tuning: To be implemented.
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
- In the future, the package architectures will be included here. However, for now please consult the docstrings in the specific methods in the relevant modules.
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())
@@ -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
+ ]