classifier-toolkit 0.5.0__tar.gz → 0.5.1__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.5.0 → classifier_toolkit-0.5.1}/PKG-INFO +1 -1
- classifier_toolkit-0.5.1/classifier_toolkit/_typing.py +6 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/calibration/ovr_calibration.py +1 -2
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/calibration/reliability.py +1 -1
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/eda/eda_toolkit.py +3 -1
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/eda/visualizations.py +4 -2
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/explainability/base.py +5 -3
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/explainability/misclassification.py +2 -1
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/explainability/plots.py +2 -1
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/explainability/toolkit.py +2 -1
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/explainability/tree_explainer.py +3 -2
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_reduction/correlation.py +227 -77
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_reduction/counter_intuitive.py +4 -3
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_reduction/reducer.py +24 -3
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/utils/scoring.py +4 -2
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/wrapper_methods/combination_search.py +1 -1
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/wrapper_methods/recursive_feature_eliminator.py +97 -13
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/wrapper_methods/rfe.py +3 -2
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/model_training/hyper_parameter_tuning/tuner.py +71 -11
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/model_training/models/ensemble_methods.py +3 -2
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/model_validation/evaluator.py +56 -9
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/risk_class/risk_classes_dp.py +4 -3
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_bayesian_search.ipynb +3 -3
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_recursive_feature_eliminator.ipynb +2 -1
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/pyproject.toml +1 -1
- classifier_toolkit-0.5.1/tests/feature_reduction/test_correlation_missing.py +322 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/test_recursive_feature_eliminator.py +187 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_training/hyper_parameter_tuning/test_tuner.py +164 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_validation/test_evaluator_multiclass.py +61 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_validation/test_print_risk_class_validation_report.py +27 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/risk_class/test_validate_risk_classes.py +9 -1
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/.gitignore +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/LICENSE +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/README.md +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/calibration/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/calibration/base.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/data_partition/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/data_partition/data_preprocess.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/data_partition/optimize_data.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/data_partition/split_train_test.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/datasets/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/datasets/_demo.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/eda/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/eda/bivariate_analysis.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/eda/feature_engineering.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/eda/first_glance.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/eda/univariate_analysis.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/eda/warnings/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/eda/warnings/automated_warnings.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/eda/warnings/default_warnings.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/explainability/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/explainability/interactions.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_reduction/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_reduction/base.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_reduction/drift.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_reduction/expert_rules.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_reduction/low_variance.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_reduction/predictive_power.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/base.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/embedded_methods/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/embedded_methods/elastic_net.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/feature_stability.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/meta_selector.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/utils/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/utils/data_handling.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/utils/feature_type_constraints.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/utils/plottings.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/wrapper_methods/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/wrapper_methods/bayesian_search.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/wrapper_methods/boruta.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/wrapper_methods/rfe_catboost.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/feature_selection/wrapper_methods/sequential_selection.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/model_training/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/model_training/hyper_parameter_tuning/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/model_training/models/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/model_training/models/base.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/model_training/utils/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/model_training/utils/params.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/model_validation/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/model_validation/model_assessment.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/risk_class/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/risk_class/risk_classes.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_combination_feature_search.ipynb +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_explainability_catboost.ipynb +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_explainability_lgbm.ipynb +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_feature_reduction.ipynb +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_grid_search.ipynb +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_model_training_catboost.ipynb +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_model_training_lgbm.ipynb +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_model_validation.ipynb +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_risk_classes_dp.ipynb +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/examples/example_train_test_partition.ipynb +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/calibration/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/calibration/test_ovr_calibration.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/calibration/test_reliability.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/conftest.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/data_partition/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/data_partition/test_data_preprocess.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/data_partition/test_optimize_data.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/data_partition/test_split_train_test.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/datasets/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/datasets/test_demo_data.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/eda/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/eda/test_bivariate_analysis.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/eda/test_feature_engineering.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/eda/test_first_glance.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/eda/test_univariate_analysis.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/eda/test_visualizations.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/eda/test_warnings.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/explainability/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/explainability/test_catboost_e2e.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/explainability/test_interactions.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/explainability/test_interactions_ranking.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/explainability/test_misclassification.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/explainability/test_multiclass_e2e.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/explainability/test_plots.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/explainability/test_smoke.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/explainability/test_toolkit.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/explainability/test_tree_explainer.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_reduction/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_reduction/test_correlation.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_reduction/test_correlation_tie_break.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_reduction/test_counter_intuitive.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_reduction/test_drift.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_reduction/test_expert_rules.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_reduction/test_low_variance.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_reduction/test_predictive_power.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_reduction/test_reducer.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_reduction/test_smoke.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/test_bayesian_search.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/test_boruta.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/test_combination_search.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/test_elastic_net.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/test_feature_stability.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/test_rfe.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/test_rfe_assessment.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/test_rfe_catboost.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/test_scoring.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/feature_selection/test_sequential_selection.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_training/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_training/hyper_parameter_tuning/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_training/hyper_parameter_tuning/test_params.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_training/models/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_training/models/test_ensemble_methods.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_validation/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_validation/test_compare_score_distributions.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_validation/test_evaluate_risk_classes_dp.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_validation/test_evaluator_threshold.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_validation/test_model_assessment.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_validation/test_print_full_validation_report.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/model_validation/test_score_distribution_psi.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/risk_class/__init__.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/risk_class/test_construct_bins_dp.py +0 -0
- {classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/tests/risk_class/test_risk_classes.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: classifier-toolkit
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Project-URL: Documentation, https://supreme-adventure-jg5qkyr.pages.github.io/
|
|
5
5
|
Author-email: "senih.yilmaz" <senih.yilmaz@qonto.com>, "jeremy.fraoua" <jeremy.fraoua@qonto.com>, "gauthier.marquand" <gauthier.marquand@qonto.com>, "arnaud.alepee" <arnaud.alepee@qonto.com>
|
|
6
6
|
License-File: LICENSE
|
|
@@ -14,10 +14,9 @@ from typing import Dict, Optional, Sequence, Union
|
|
|
14
14
|
|
|
15
15
|
import numpy as np
|
|
16
16
|
|
|
17
|
+
from classifier_toolkit._typing import ClassLabel
|
|
17
18
|
from classifier_toolkit.calibration.base import CalibrationError
|
|
18
19
|
|
|
19
|
-
ClassLabel = Union[str, int]
|
|
20
|
-
|
|
21
20
|
|
|
22
21
|
class OVRHistogramCalibrator:
|
|
23
22
|
"""Calibrate multiclass probabilities via One-vs-Rest histogram binning.
|
|
@@ -3,6 +3,8 @@ from typing import Any, Dict, List, Literal, Optional, Union
|
|
|
3
3
|
|
|
4
4
|
import pandas as pd
|
|
5
5
|
|
|
6
|
+
from classifier_toolkit._typing import ClassLabel
|
|
7
|
+
|
|
6
8
|
from .bivariate_analysis import BivariateAnalysis
|
|
7
9
|
from .feature_engineering import FeatureEngineering
|
|
8
10
|
from .first_glance import FirstGlance
|
|
@@ -49,7 +51,7 @@ class EDAToolkit:
|
|
|
49
51
|
id_column: Optional[str] = None,
|
|
50
52
|
to_be_enc: Optional[List[str]] = None,
|
|
51
53
|
warning_system: Optional[WarningSystem] = None,
|
|
52
|
-
pos_label: Optional[
|
|
54
|
+
pos_label: Optional[ClassLabel] = None,
|
|
53
55
|
) -> None:
|
|
54
56
|
"""
|
|
55
57
|
Initialize the EDAToolkit class with data and configuration settings.
|
{classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/eda/visualizations.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import colorsys
|
|
2
2
|
import itertools
|
|
3
3
|
import math
|
|
4
|
-
from typing import List, Literal, Optional, Tuple
|
|
4
|
+
from typing import List, Literal, Optional, Tuple
|
|
5
5
|
|
|
6
6
|
import matplotlib.pyplot as plt
|
|
7
7
|
import numpy as np
|
|
@@ -16,6 +16,8 @@ from sklearn.preprocessing import MinMaxScaler
|
|
|
16
16
|
from statsmodels.stats.outliers_influence import variance_inflation_factor
|
|
17
17
|
from tqdm import tqdm
|
|
18
18
|
|
|
19
|
+
from classifier_toolkit._typing import ClassLabel
|
|
20
|
+
|
|
19
21
|
# The pos_label class is always drawn in this red; other classes cycle
|
|
20
22
|
# through a palette with no reds/oranges, so it stays visually distinct.
|
|
21
23
|
_POS_LABEL_COLOR = "#d62728"
|
|
@@ -39,7 +41,7 @@ class Visualizations:
|
|
|
39
41
|
target_column: str,
|
|
40
42
|
numerical_columns: List[str],
|
|
41
43
|
categorical_columns: List[str],
|
|
42
|
-
pos_label: Optional[
|
|
44
|
+
pos_label: Optional[ClassLabel] = None,
|
|
43
45
|
) -> None:
|
|
44
46
|
"""
|
|
45
47
|
Initialize the Visualizations class with data and configuration.
|
{classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/explainability/base.py
RENAMED
|
@@ -6,13 +6,15 @@ from typing import Any, Optional, Union
|
|
|
6
6
|
import numpy as np
|
|
7
7
|
import pandas as pd
|
|
8
8
|
|
|
9
|
+
from classifier_toolkit._typing import ClassLabel
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
class ExplainabilityError(Exception):
|
|
11
13
|
"""Base exception for explainability errors."""
|
|
12
14
|
|
|
13
15
|
|
|
14
16
|
def resolve_class_index(
|
|
15
|
-
classes: Optional[np.ndarray], label:
|
|
17
|
+
classes: Optional[np.ndarray], label: ClassLabel, missing_reason: str
|
|
16
18
|
) -> int:
|
|
17
19
|
"""Resolve a class label to its index in ``classes``.
|
|
18
20
|
|
|
@@ -87,7 +89,7 @@ class ShapResult:
|
|
|
87
89
|
"""
|
|
88
90
|
return self.values.ndim == 3 and self.values.shape[-1] > 2
|
|
89
91
|
|
|
90
|
-
def class_index_for_label(self, label:
|
|
92
|
+
def class_index_for_label(self, label: ClassLabel) -> int:
|
|
91
93
|
"""Resolve a class label to its index along the trailing class axis.
|
|
92
94
|
|
|
93
95
|
Raises
|
|
@@ -109,7 +111,7 @@ class ShapResult:
|
|
|
109
111
|
return self.values[..., class_index]
|
|
110
112
|
return self.values
|
|
111
113
|
|
|
112
|
-
def values_for_label(self, label:
|
|
114
|
+
def values_for_label(self, label: ClassLabel) -> np.ndarray:
|
|
113
115
|
"""Return a 2D SHAP matrix for the given class label.
|
|
114
116
|
|
|
115
117
|
For binary results, ``label`` is ignored: the positive-class 2D matrix
|
|
@@ -7,6 +7,7 @@ from typing import Literal, Optional, Union
|
|
|
7
7
|
import numpy as np
|
|
8
8
|
import pandas as pd
|
|
9
9
|
|
|
10
|
+
from classifier_toolkit._typing import ClassLabel
|
|
10
11
|
from classifier_toolkit.explainability.base import ExplainabilityError
|
|
11
12
|
from classifier_toolkit.explainability.plots import plot_waterfall
|
|
12
13
|
from classifier_toolkit.explainability.tree_explainer import TreeSHAPExplainer
|
|
@@ -80,7 +81,7 @@ class MisclassificationAnalyzer:
|
|
|
80
81
|
explainer: TreeSHAPExplainer,
|
|
81
82
|
feature_names: Sequence[str],
|
|
82
83
|
threshold: float = 0.5,
|
|
83
|
-
pos_label: Optional[
|
|
84
|
+
pos_label: Optional[ClassLabel] = None,
|
|
84
85
|
prediction_rule: Optional[PredictionRule] = None,
|
|
85
86
|
) -> None:
|
|
86
87
|
if prediction_rule not in (None, "threshold", "argmax"):
|
{classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/explainability/plots.py
RENAMED
|
@@ -9,6 +9,7 @@ import numpy as np
|
|
|
9
9
|
import pandas as pd
|
|
10
10
|
import shap
|
|
11
11
|
|
|
12
|
+
from classifier_toolkit._typing import ClassLabel
|
|
12
13
|
from classifier_toolkit.explainability.base import ShapResult
|
|
13
14
|
|
|
14
15
|
|
|
@@ -54,7 +55,7 @@ def plot_summary(
|
|
|
54
55
|
|
|
55
56
|
def plot_pos_label_summary(
|
|
56
57
|
shap_result: ShapResult,
|
|
57
|
-
pos_label:
|
|
58
|
+
pos_label: ClassLabel,
|
|
58
59
|
max_display: int = 20,
|
|
59
60
|
show: bool = True,
|
|
60
61
|
) -> None:
|
{classifier_toolkit-0.5.0 → classifier_toolkit-0.5.1}/classifier_toolkit/explainability/toolkit.py
RENAMED
|
@@ -6,6 +6,7 @@ from typing import Optional, Union
|
|
|
6
6
|
import numpy as np
|
|
7
7
|
import pandas as pd
|
|
8
8
|
|
|
9
|
+
from classifier_toolkit._typing import ClassLabel
|
|
9
10
|
from classifier_toolkit.explainability.base import ExplainabilityError, ShapResult
|
|
10
11
|
from classifier_toolkit.explainability.interactions import (
|
|
11
12
|
analyze_shap_interactions,
|
|
@@ -53,7 +54,7 @@ class ExplainabilityToolkit:
|
|
|
53
54
|
categorical_features: Optional[Sequence[str]] = None,
|
|
54
55
|
cat_features: Optional[list[str]] = None,
|
|
55
56
|
threshold: float = 0.5,
|
|
56
|
-
pos_label: Optional[
|
|
57
|
+
pos_label: Optional[ClassLabel] = None,
|
|
57
58
|
prediction_rule: Optional[PredictionRule] = None,
|
|
58
59
|
) -> None:
|
|
59
60
|
self.model = model
|
|
@@ -7,6 +7,7 @@ import numpy as np
|
|
|
7
7
|
import pandas as pd
|
|
8
8
|
import shap
|
|
9
9
|
|
|
10
|
+
from classifier_toolkit._typing import ClassLabel
|
|
10
11
|
from classifier_toolkit.explainability.base import (
|
|
11
12
|
ExplainabilityError,
|
|
12
13
|
ShapResult,
|
|
@@ -92,7 +93,7 @@ class TreeSHAPExplainer:
|
|
|
92
93
|
classes = getattr(self.model, "classes_", None)
|
|
93
94
|
return np.asarray(classes) if classes is not None else None
|
|
94
95
|
|
|
95
|
-
def class_index_for_label(self, label:
|
|
96
|
+
def class_index_for_label(self, label: ClassLabel) -> int:
|
|
96
97
|
"""Resolve a class label to its index along the trailing class axis.
|
|
97
98
|
|
|
98
99
|
Raises
|
|
@@ -167,7 +168,7 @@ class TreeSHAPExplainer:
|
|
|
167
168
|
def explain_observation_for_label(
|
|
168
169
|
self,
|
|
169
170
|
X: Union[pd.DataFrame, pd.Series],
|
|
170
|
-
label:
|
|
171
|
+
label: ClassLabel,
|
|
171
172
|
):
|
|
172
173
|
"""Single-row SHAP explanation restricted to one class (waterfall-ready).
|
|
173
174
|
|