validmind 2.13.5__tar.gz → 2.13.7__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.
- {validmind-2.13.5 → validmind-2.13.7}/PKG-INFO +5 -1
- {validmind-2.13.5 → validmind-2.13.7}/pyproject.toml +8 -2
- validmind-2.13.7/validmind/__version__.py +1 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/ai/utils.py +112 -22
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/IQROutliersBarPlot.py +6 -2
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/IQROutliersTable.py +5 -2
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ModelPredictionResiduals.py +2 -2
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/CalibrationCurve.py +10 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ConfusionMatrix.py +10 -5
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/MinimumF1Score.py +12 -3
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/OverfitDiagnosis.py +41 -1
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py +161 -23
- validmind-2.13.7/validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +204 -0
- validmind-2.13.7/validmind/tests/model_validation/sklearn/ROCCurve.py +227 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RobustnessDiagnosis.py +43 -3
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/SHAPGlobalImportance.py +40 -19
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py +9 -0
- validmind-2.13.7/validmind/tests/model_validation/sklearn/_diagnosis_metrics.py +126 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +2 -2
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/GINITable.py +89 -2
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +2 -2
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/ScorecardHistogram.py +2 -2
- validmind-2.13.5/validmind/__version__.py +0 -1
- validmind-2.13.5/validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +0 -95
- validmind-2.13.5/validmind/tests/model_validation/sklearn/ROCCurve.py +0 -111
- {validmind-2.13.5 → validmind-2.13.7}/.gitignore +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/LICENSE +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/README.pypi.md +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/ai/test_descriptions.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/api_client.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/client.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/client_config.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/credentials_store.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/config.json +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/customer_churn.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/datasets/bank_customer_churn.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/datasets/taiwan_credit.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/taiwan_credit.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/cluster/digits.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/credit_risk/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/credit_risk/datasets/lending_club_biased.csv.gz +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/credit_risk/datasets/lending_club_loan_data_2007_2014_clean.csv.gz +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/credit_risk/lending_club.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/credit_risk/lending_club_bias.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/agent_dataset.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_1.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_2.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_3.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_4.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_5.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/rfp.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/cnn_dailymail.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/datasets/Covid_19.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/datasets/cnn_dailymail_100_with_predictions.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/datasets/cnn_dailymail_500_with_predictions.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/datasets/sentiments_with_predictions.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/twitter_covid_19.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/california_housing.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/california_housing.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/CPIAUCSL.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/CSUSHPISA.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/DRSFRMACBS.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/FEDFUNDS.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/GDP.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/GDPC1.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/GS10.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/GS3.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/GS5.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/MORTGAGE30US.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/UNRATE.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_1.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_2.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_3.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_4.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_5.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/leanding_club_loan_rates.csv +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/fred.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/fred_timeseries.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/generate_california_housing_csv.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/lending_club.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/errors.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/experimental/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/experimental/agents.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/html_templates/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/html_templates/content_blocks.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/input_registry.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/logging.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/models/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/models/foundation.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/models/function.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/models/huggingface.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/models/metadata.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/models/pipeline.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/models/pytorch.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/models/r_model.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/models/sklearn.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/oidc_device.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/AbsoluteError.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/BrierScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/CalibrationError.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/ClassBalance.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/Confidence.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/Correctness.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/LogLoss.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/OutlierScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/ProbabilityError.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/Uncertainty.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/AnswerRelevancy.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/ArgumentCorrectness.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/Bias.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/ContextualPrecision.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/ContextualRecall.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/ContextualRelevancy.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/Faithfulness.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/GEval.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/Hallucination.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/PlanAdherence.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/PlanQuality.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/Summarization.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/TaskCompletion.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/ToolCorrectness.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/template.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/classifier.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/cluster.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/embeddings.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/llm.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/nlp.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/parameters_optimization.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/regression.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/statsmodels_timeseries.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/summarization.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/tabular_datasets.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/text_data.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/time_series.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/__types__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/_store.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/comparison.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ACFandPACFPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ADF.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/AutoAR.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/AutoMA.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/AutoStationarity.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/BivariateScatterPlots.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/BoxPierce.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ChiSquaredFeaturesTable.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ClassImbalance.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/DatasetDescription.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/DatasetSplit.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/DescriptiveStatistics.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/DickeyFullerGLS.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/Duplicates.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/EngleGrangerCoint.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/FeatureTargetCorrelationPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/HighCardinality.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/HighPearsonCorrelation.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/IsolationForestOutliers.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/JarqueBera.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/KPSS.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/LJungBox.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/LaggedCorrelationHeatmap.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/MissingValues.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/MissingValuesBarPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/MutualInformation.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/PearsonCorrelationMatrix.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/PhillipsPerronArch.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ProtectedClassesCombination.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ProtectedClassesDescription.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ProtectedClassesDisparity.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ProtectedClassesThresholdOptimizer.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/RollingStatsPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/RunsTest.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ScatterPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ScoreBandDefaultRates.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/SeasonalDecompose.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ShapiroWilk.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/Skewness.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/SpreadPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TabularCategoricalBarPlots.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TabularDateTimeHistograms.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TabularDescriptionTables.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TabularNumericalHistograms.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TargetRateBarPlots.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesDescription.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesDescriptiveStatistics.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesFrequency.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesHistogram.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesLinePlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesMissingValues.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesOutliers.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TooManyZeroValues.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/UniqueRows.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/WOEBinPlots.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/WOEBinTable.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ZivotAndrewsArch.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/CommonWords.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/Hashtags.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/LanguageDetection.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/Mentions.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/PolarityAndSubjectivity.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/Punctuations.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/Sentiment.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/StopWords.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/TextDescription.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/Toxicity.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/decorator.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/load.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/BertScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/BleuScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ClusterSizeDistribution.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ContextualRecall.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/FeaturesAUC.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/MeteorScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ModelMetadata.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/RegardScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/RegressionResidualsPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/RougeScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/TimeSeriesPredictionWithCI.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/TimeSeriesPredictionsPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/TimeSeriesR2SquareBySegments.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/TokenDisparity.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ToxicityScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/ClusterDistribution.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/CosineSimilarityComparison.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/CosineSimilarityDistribution.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/CosineSimilarityHeatmap.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/DescriptiveAnalytics.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/EmbeddingsVisualization2D.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/EuclideanDistanceComparison.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/EuclideanDistanceHeatmap.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/PCAComponentsPairwisePlots.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisKeyword.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisRandomNoise.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisSynonyms.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisTranslation.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/TSNEComponentsPairwisePlots.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/utils.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/AnswerCorrectness.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/AspectCritic.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/ContextEntityRecall.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/ContextPrecision.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/ContextPrecisionWithoutReference.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/ContextRecall.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/Faithfulness.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/NoiseSensitivity.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/ResponseRelevancy.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/SemanticSimilarity.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/utils.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/AdjustedMutualInformation.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/AdjustedRandIndex.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ClassifierPerformance.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ClassifierThresholdOptimization.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ClusterCosineSimilarity.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/CompletenessScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/FeatureImportance.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/FowlkesMallowsScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/HomogeneityScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/HyperParametersTuning.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/KMeansClustersOptimization.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/MinimumAccuracy.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ModelParameters.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/PermutationFeatureImportance.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RegressionErrors.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RegressionErrorsComparison.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RegressionPerformance.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RegressionR2Square.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RegressionR2SquareComparison.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ScoreProbabilityAlignment.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/SilhouettePlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/TrainingTestDegradation.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/VMeasure.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/AutoARIMA.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/DurbinWatsonTest.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/KolmogorovSmirnov.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/Lilliefors.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionCoeffs.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlotLevels.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionModelSensitivityPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionModelSummary.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionPermutationFeatureImportance.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/statsutils.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/CalibrationCurveDrift.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ClassDiscriminationDrift.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ClassImbalanceDrift.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ClassificationAccuracyDrift.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ConfusionMatrixDrift.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/CumulativePredictionProbabilitiesDrift.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/FeatureDrift.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/PredictionAcrossEachFeature.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/PredictionCorrelation.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/PredictionProbabilitiesHistogramDrift.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/PredictionQuantilesAcrossFeatures.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ROCCurveDrift.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ScoreBandsDrift.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ScorecardHistogramDrift.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/TargetPredictionDistributionPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/output.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/plots/BoxPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/plots/CorrelationHeatmap.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/plots/HistogramPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/plots/ViolinPlot.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/plots/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Bias.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Clarity.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Conciseness.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Delimitation.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/NegativeInstruction.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Robustness.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Specificity.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/ai_powered_test.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/run.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/stats/CorrelationAnalysis.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/stats/DescriptiveStats.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/stats/NormalityTests.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/stats/OutlierDetection.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/stats/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/test_providers.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/utils.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/classification/Accuracy.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/classification/F1.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/classification/Precision.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/classification/ROC_AUC.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/classification/Recall.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/AdjustedRSquaredScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/GiniCoefficient.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/HuberLoss.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/KolmogorovSmirnovStatistic.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/MeanAbsoluteError.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/MeanAbsolutePercentageError.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/MeanBiasDeviation.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/MeanSquaredError.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/QuantileLoss.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/RSquaredScore.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/RootMeanSquaredError.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/utils.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/dataset/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/dataset/dataset.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/dataset/utils.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/figure.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/html_progress.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/html_renderer.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/input.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/model.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/result/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/result/pii_filter.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/result/result.jinja +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/result/result.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/result/utils.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/test_suite/__init__.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/test_suite/runner.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/test_suite/summary.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/test_suite/test.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/test_suite/test_suite.py +0 -0
- {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/text_generation_summary.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: validmind
|
|
3
|
-
Version: 2.13.
|
|
3
|
+
Version: 2.13.7
|
|
4
4
|
Summary: ValidMind Library
|
|
5
5
|
Author-email: Andres Rodriguez <andres@validmind.ai>, Juan Martinez <juan@validmind.ai>, Anil Sorathiya <anil@validmind.ai>, Luis Pallares <luis@validmind.ai>, John Walz <john@validmind.ai>
|
|
6
6
|
License: DUAL LICENSE NOTICE
|
|
@@ -726,7 +726,9 @@ Requires-Dist: langchain-google-genai; extra == 'all'
|
|
|
726
726
|
Requires-Dist: langchain-openai>=0.1.8; extra == 'all'
|
|
727
727
|
Requires-Dist: langchain<0.4.0,>=0.2.0; extra == 'all'
|
|
728
728
|
Requires-Dist: langdetect; extra == 'all'
|
|
729
|
+
Requires-Dist: llvmlite<0.48,>=0.47.0; (python_version >= '3.14') and extra == 'all'
|
|
729
730
|
Requires-Dist: nltk<4.0.0,>=3.8.1; extra == 'all'
|
|
731
|
+
Requires-Dist: numba>=0.65.1; (python_version >= '3.14') and extra == 'all'
|
|
730
732
|
Requires-Dist: pyarrow<16; (python_version < '3.13') and extra == 'all'
|
|
731
733
|
Requires-Dist: pyarrow<21,>=20; (python_version == '3.13') and extra == 'all'
|
|
732
734
|
Requires-Dist: pyarrow<23,>=22; (python_version >= '3.14') and extra == 'all'
|
|
@@ -753,6 +755,8 @@ Requires-Dist: pyarrow<16; (python_version < '3.13') and extra == 'datasets'
|
|
|
753
755
|
Requires-Dist: pyarrow<21,>=20; (python_version == '3.13') and extra == 'datasets'
|
|
754
756
|
Requires-Dist: pyarrow<23,>=22; (python_version >= '3.14') and extra == 'datasets'
|
|
755
757
|
Provides-Extra: explainability
|
|
758
|
+
Requires-Dist: llvmlite<0.48,>=0.47.0; (python_version >= '3.14') and extra == 'explainability'
|
|
759
|
+
Requires-Dist: numba>=0.65.1; (python_version >= '3.14') and extra == 'explainability'
|
|
756
760
|
Requires-Dist: shap>=0.46.0; extra == 'explainability'
|
|
757
761
|
Provides-Extra: huggingface
|
|
758
762
|
Requires-Dist: sentencepiece<0.3.0,>=0.2.0; extra == 'huggingface'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "validmind"
|
|
3
|
-
version = "2.13.
|
|
3
|
+
version = "2.13.7"
|
|
4
4
|
description = "ValidMind Library"
|
|
5
5
|
readme = "README.pypi.md"
|
|
6
6
|
requires-python = ">=3.9,<3.15"
|
|
@@ -65,6 +65,8 @@ all = [
|
|
|
65
65
|
"pyarrow (>=22,<23) ; python_version >= '3.14'",
|
|
66
66
|
"arch (>=7.0.0)",
|
|
67
67
|
"shap (>=0.46.0)",
|
|
68
|
+
"numba (>=0.65.1) ; python_version >= '3.14'",
|
|
69
|
+
"llvmlite (>=0.47.0,<0.48) ; python_version >= '3.14'",
|
|
68
70
|
"scorecardpy==0.1.9.6",
|
|
69
71
|
"setuptools (<82)",
|
|
70
72
|
]
|
|
@@ -107,7 +109,11 @@ nlp = [
|
|
|
107
109
|
pytorch = ["torch (>=2.0.0)"]
|
|
108
110
|
stats = ["scipy", "statsmodels (>=0.14.2,<0.15.0)", "arch (>=7.0.0)"]
|
|
109
111
|
xgboost = ["xgboost (>=1.5.2,<3)"]
|
|
110
|
-
explainability = [
|
|
112
|
+
explainability = [
|
|
113
|
+
"shap (>=0.46.0)",
|
|
114
|
+
"numba (>=0.65.1) ; python_version >= '3.14'",
|
|
115
|
+
"llvmlite (>=0.47.0,<0.48) ; python_version >= '3.14'",
|
|
116
|
+
]
|
|
111
117
|
credit_risk = ["scorecardpy==0.1.9.6", "setuptools (<82)"]
|
|
112
118
|
datasets = [
|
|
113
119
|
"datasets (>=2.10.0,<3.0.0) ; python_version < '3.14'",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.13.7"
|
|
@@ -17,6 +17,7 @@ __client = None
|
|
|
17
17
|
__model = None
|
|
18
18
|
__judge_llm = None
|
|
19
19
|
__judge_embeddings = None
|
|
20
|
+
__judge_llm_explicitly_set = False
|
|
20
21
|
OPENAI_MODEL = "gpt-4.1"
|
|
21
22
|
OPENAI_EMBEDDINGS_MODEL = "text-embedding-3-small"
|
|
22
23
|
GEMINI_MODEL = "gemini-2.5-pro"
|
|
@@ -238,14 +239,95 @@ def _unwrap_deepeval_response(response):
|
|
|
238
239
|
return getattr(response, "content", response)
|
|
239
240
|
|
|
240
241
|
|
|
241
|
-
def
|
|
242
|
+
def _is_reason_only_schema(schema):
|
|
243
|
+
"""True when ``schema`` is a single-field ``{reason}`` explanation schema.
|
|
244
|
+
|
|
245
|
+
DeepEval's ``*ScoreReason`` schemas carry only the human-readable explanation
|
|
246
|
+
and do not affect the metric score, so a missing value can be degraded safely.
|
|
247
|
+
"""
|
|
248
|
+
fields = getattr(schema, "model_fields", None) or getattr(
|
|
249
|
+
schema, "__fields__", None
|
|
250
|
+
)
|
|
251
|
+
try:
|
|
252
|
+
return set(fields.keys()) == {"reason"}
|
|
253
|
+
except Exception:
|
|
254
|
+
return False
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
def _require_structured_response(result, schema):
|
|
258
|
+
"""Guard against a judge LLM returning no parseable structured output.
|
|
259
|
+
|
|
260
|
+
Gemini's default function-calling path yields ``None`` when the model
|
|
261
|
+
response contains no tool call. Returning that ``None`` to DeepEval surfaces
|
|
262
|
+
as a cryptic ``'NoneType' object has no attribute 'reason'``.
|
|
263
|
+
|
|
264
|
+
For reason-only schemas the metric score is already computed from earlier
|
|
265
|
+
verdict calls, so a missing explanation is cosmetic: degrade to a placeholder
|
|
266
|
+
reason and keep the score. Score-bearing schemas (statements, verdicts) are
|
|
267
|
+
never faked -- doing so would yield a silently wrong score -- so those raise.
|
|
268
|
+
"""
|
|
269
|
+
if result is not None:
|
|
270
|
+
return result
|
|
271
|
+
|
|
272
|
+
schema_name = getattr(schema, "__name__", schema)
|
|
273
|
+
|
|
274
|
+
if _is_reason_only_schema(schema):
|
|
275
|
+
logger.warning(
|
|
276
|
+
"Judge LLM returned no structured output for %s; recording the score "
|
|
277
|
+
"with an empty explanation.",
|
|
278
|
+
schema_name,
|
|
279
|
+
)
|
|
280
|
+
return schema(reason="N/A (judge LLM returned no explanation)")
|
|
281
|
+
|
|
282
|
+
raise ValueError(
|
|
283
|
+
f"Judge LLM returned no parseable structured output for {schema_name}. "
|
|
284
|
+
"This usually means the model produced no tool call for the requested "
|
|
285
|
+
"schema. Try a different judge model, or check provider quotas and "
|
|
286
|
+
"safety settings."
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
def _structured_generate(chat_model, prompt, schema):
|
|
291
|
+
"""Invoke ``chat_model`` for structured output, retrying via json_mode.
|
|
292
|
+
|
|
293
|
+
Gemini's default function-calling path can return ``None`` when the model
|
|
294
|
+
emits no tool call; json_mode binds a response schema and is deterministic.
|
|
295
|
+
"""
|
|
296
|
+
result = chat_model.with_structured_output(schema).invoke(prompt)
|
|
297
|
+
if result is None:
|
|
298
|
+
try:
|
|
299
|
+
result = chat_model.with_structured_output(
|
|
300
|
+
schema, method="json_mode"
|
|
301
|
+
).invoke(prompt)
|
|
302
|
+
except Exception:
|
|
303
|
+
pass
|
|
304
|
+
return _require_structured_response(result, schema)
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
async def _a_structured_generate(chat_model, prompt, schema):
|
|
308
|
+
"""Async counterpart of :func:`_structured_generate`."""
|
|
309
|
+
result = await chat_model.with_structured_output(schema).ainvoke(prompt)
|
|
310
|
+
if result is None:
|
|
311
|
+
try:
|
|
312
|
+
result = await chat_model.with_structured_output(
|
|
313
|
+
schema, method="json_mode"
|
|
314
|
+
).ainvoke(prompt)
|
|
315
|
+
except Exception:
|
|
316
|
+
pass
|
|
317
|
+
return _require_structured_response(result, schema)
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
def _build_langchain_deepeval_model(chat_model):
|
|
321
|
+
"""Wrap any LangChain BaseChatModel as a DeepEval-compatible model.
|
|
322
|
+
|
|
323
|
+
Used when set_judge_config() has been called so that DeepEval scorers
|
|
324
|
+
honour the same judge model as prompt-validation and RAGAS tests.
|
|
325
|
+
"""
|
|
242
326
|
DeepEvalBaseLLM = _import_deepeval_base_llm()
|
|
243
|
-
judge_llm, _ = _build_gemini_judge_config(model)
|
|
244
327
|
|
|
245
|
-
class
|
|
246
|
-
def __init__(self,
|
|
247
|
-
self._chat_model =
|
|
248
|
-
self._model_name = model_name
|
|
328
|
+
class LangChainDeepEvalModel(DeepEvalBaseLLM):
|
|
329
|
+
def __init__(self, model):
|
|
330
|
+
self._chat_model = model
|
|
249
331
|
self.model = self.load_model()
|
|
250
332
|
|
|
251
333
|
def load_model(self, *args, **kwargs):
|
|
@@ -254,27 +336,28 @@ def _build_gemini_deepeval_model(model):
|
|
|
254
336
|
def generate(self, prompt: str, schema=None):
|
|
255
337
|
chat_model = self.load_model()
|
|
256
338
|
if schema is not None and hasattr(chat_model, "with_structured_output"):
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
response = chat_model.invoke(prompt)
|
|
260
|
-
|
|
261
|
-
return _unwrap_deepeval_response(response)
|
|
339
|
+
return _structured_generate(chat_model, prompt, schema)
|
|
340
|
+
return _unwrap_deepeval_response(chat_model.invoke(prompt))
|
|
262
341
|
|
|
263
342
|
async def a_generate(self, prompt: str, schema=None):
|
|
264
343
|
chat_model = self.load_model()
|
|
265
344
|
if schema is not None and hasattr(chat_model, "with_structured_output"):
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
)
|
|
269
|
-
else:
|
|
270
|
-
response = await chat_model.ainvoke(prompt)
|
|
271
|
-
|
|
272
|
-
return _unwrap_deepeval_response(response)
|
|
345
|
+
return await _a_structured_generate(chat_model, prompt, schema)
|
|
346
|
+
return _unwrap_deepeval_response(await chat_model.ainvoke(prompt))
|
|
273
347
|
|
|
274
348
|
def get_model_name(self, *args, **kwargs):
|
|
275
|
-
|
|
349
|
+
for attr in ("model", "model_name", "azure_deployment"):
|
|
350
|
+
val = getattr(self._chat_model, attr, None)
|
|
351
|
+
if val:
|
|
352
|
+
return val
|
|
353
|
+
return type(self._chat_model).__name__
|
|
354
|
+
|
|
355
|
+
return LangChainDeepEvalModel(chat_model)
|
|
356
|
+
|
|
276
357
|
|
|
277
|
-
|
|
358
|
+
def _build_gemini_deepeval_model(model):
|
|
359
|
+
judge_llm, _ = _build_gemini_judge_config(model)
|
|
360
|
+
return _build_langchain_deepeval_model(judge_llm)
|
|
278
361
|
|
|
279
362
|
|
|
280
363
|
def run_deepeval_evaluation(*, test_cases, metrics):
|
|
@@ -332,6 +415,12 @@ def get_deepeval_model():
|
|
|
332
415
|
OpenAI/Azure scorers currently pass a model string. Gemini support requires a
|
|
333
416
|
native DeepEval model object so the provider can be configured correctly.
|
|
334
417
|
"""
|
|
418
|
+
if (
|
|
419
|
+
__judge_llm_explicitly_set
|
|
420
|
+
and __judge_llm is not None
|
|
421
|
+
and __judge_embeddings is not None
|
|
422
|
+
):
|
|
423
|
+
return _build_langchain_deepeval_model(__judge_llm)
|
|
335
424
|
|
|
336
425
|
provider = _get_configured_provider()
|
|
337
426
|
_, model = get_client_and_model()
|
|
@@ -359,7 +448,7 @@ def get_deepeval_model():
|
|
|
359
448
|
|
|
360
449
|
|
|
361
450
|
def set_judge_config(judge_llm, judge_embeddings):
|
|
362
|
-
global __judge_llm, __judge_embeddings
|
|
451
|
+
global __judge_llm, __judge_embeddings, __judge_llm_explicitly_set
|
|
363
452
|
try:
|
|
364
453
|
from langchain_core.embeddings import Embeddings
|
|
365
454
|
from langchain_core.language_models.chat_models import BaseChatModel
|
|
@@ -372,12 +461,13 @@ def set_judge_config(judge_llm, judge_embeddings):
|
|
|
372
461
|
):
|
|
373
462
|
__judge_llm = judge_llm
|
|
374
463
|
__judge_embeddings = judge_embeddings
|
|
375
|
-
|
|
464
|
+
__judge_llm_explicitly_set = True
|
|
376
465
|
elif isinstance(judge_llm, FunctionModel) and isinstance(
|
|
377
466
|
judge_embeddings, FunctionModel
|
|
378
467
|
):
|
|
379
468
|
__judge_llm = judge_llm.model
|
|
380
469
|
__judge_embeddings = judge_embeddings.model
|
|
470
|
+
__judge_llm_explicitly_set = True
|
|
381
471
|
else:
|
|
382
472
|
raise ValueError(
|
|
383
473
|
"Provided Judge LLM/Embeddings are not Langchain compatible. Ensure the judge LLM/embedding provided are an instance of "
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
from typing import Tuple
|
|
7
7
|
|
|
8
|
+
import pandas as pd
|
|
8
9
|
import plotly.graph_objects as go
|
|
9
10
|
|
|
10
11
|
from validmind import RawData, tags, tasks
|
|
@@ -76,9 +77,12 @@ def IQROutliersBarPlot(
|
|
|
76
77
|
"""
|
|
77
78
|
df = dataset.df
|
|
78
79
|
|
|
79
|
-
# Exclude
|
|
80
|
+
# Exclude boolean and binary features. The IQR is not meaningful for them and
|
|
81
|
+
# `quantile` raises "numpy boolean subtract" on boolean dtype columns.
|
|
80
82
|
eligible_columns = [
|
|
81
|
-
col
|
|
83
|
+
col
|
|
84
|
+
for col in dataset.feature_columns_numeric
|
|
85
|
+
if not pd.api.types.is_bool_dtype(df[col]) and df[col].nunique() > 2
|
|
82
86
|
]
|
|
83
87
|
|
|
84
88
|
figures = []
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
from typing import Any, Dict, Tuple
|
|
7
7
|
|
|
8
|
+
import pandas as pd
|
|
9
|
+
|
|
8
10
|
from validmind import RawData, tags, tasks
|
|
9
11
|
from validmind.vm_models import VMDataset
|
|
10
12
|
|
|
@@ -72,8 +74,9 @@ def IQROutliersTable(
|
|
|
72
74
|
all_outliers = {}
|
|
73
75
|
|
|
74
76
|
for col in dataset.feature_columns_numeric:
|
|
75
|
-
# Skip binary features
|
|
76
|
-
|
|
77
|
+
# Skip boolean and binary features. The IQR is not meaningful for them and
|
|
78
|
+
# `quantile` raises "numpy boolean subtract" on boolean dtype columns.
|
|
79
|
+
if pd.api.types.is_bool_dtype(df[col]) or df[col].nunique() <= 2:
|
|
77
80
|
continue
|
|
78
81
|
|
|
79
82
|
outliers = compute_outliers(df[col], threshold)
|
{validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ModelPredictionResiduals.py
RENAMED
|
@@ -12,7 +12,7 @@ from validmind.errors import MissingDependencyError
|
|
|
12
12
|
from validmind.vm_models import VMDataset, VMModel
|
|
13
13
|
|
|
14
14
|
try:
|
|
15
|
-
from scipy.stats import kstest
|
|
15
|
+
from scipy.stats import kstest, norm
|
|
16
16
|
except ImportError as e:
|
|
17
17
|
if "scipy" in str(e):
|
|
18
18
|
raise MissingDependencyError(
|
|
@@ -109,7 +109,7 @@ def ModelPredictionResiduals(
|
|
|
109
109
|
|
|
110
110
|
# Perform KS normality test
|
|
111
111
|
ks_stat, p_value = kstest(
|
|
112
|
-
residuals,
|
|
112
|
+
residuals, norm(loc=residuals.mean(), scale=residuals.std()).cdf
|
|
113
113
|
)
|
|
114
114
|
ks_normality = "Normal" if p_value > p_value_threshold else "Not Normal"
|
|
115
115
|
|
{validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/CalibrationCurve.py
RENAMED
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
from typing import Tuple
|
|
6
6
|
|
|
7
|
+
import numpy as np
|
|
7
8
|
import plotly.graph_objects as go
|
|
8
9
|
from sklearn.calibration import calibration_curve
|
|
9
10
|
|
|
10
11
|
from validmind import tags, tasks
|
|
12
|
+
from validmind.errors import SkipTestError
|
|
11
13
|
from validmind.vm_models import VMDataset, VMModel
|
|
12
14
|
from validmind.vm_models.result import RawData
|
|
13
15
|
|
|
@@ -70,6 +72,14 @@ def CalibrationCurve(
|
|
|
70
72
|
- Assumes bin boundaries are appropriate for the problem
|
|
71
73
|
- May be affected by class imbalance
|
|
72
74
|
"""
|
|
75
|
+
# Binary-only by design: sklearn's calibration_curve raises a cryptic
|
|
76
|
+
# "pos_label is not specified" error on multiclass targets, so skip cleanly
|
|
77
|
+
# like ROCCurve/PrecisionRecallCurve rather than crashing.
|
|
78
|
+
if len(np.unique(dataset.y)) > 2:
|
|
79
|
+
raise SkipTestError(
|
|
80
|
+
"Calibration Curve is only supported for binary classification models"
|
|
81
|
+
)
|
|
82
|
+
|
|
73
83
|
prob_true, prob_pred = calibration_curve(
|
|
74
84
|
dataset.y, dataset.y_prob(model), n_bins=n_bins
|
|
75
85
|
)
|
{validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ConfusionMatrix.py
RENAMED
|
@@ -72,15 +72,20 @@ def ConfusionMatrix(
|
|
|
72
72
|
- It mainly serves as a descriptive tool and does not offer the capability for statistical hypothesis testing.
|
|
73
73
|
- Risks of misinterpretation exist because the matrix doesn't directly provide precision, recall, or F1-score data.
|
|
74
74
|
These metrics have to be computed separately.
|
|
75
|
+
- The `threshold` parameter only applies to binary classification (it splits a single positive-class probability
|
|
76
|
+
into two classes). For multiclass targets the model's argmax class predictions are used and `threshold` is ignored.
|
|
75
77
|
"""
|
|
76
|
-
#
|
|
77
|
-
|
|
78
|
+
# The `threshold` only has a meaning for binary classification (it splits a
|
|
79
|
+
# single positive-class probability into two classes). For multiclass we use
|
|
80
|
+
# the model's argmax class predictions directly, since thresholding a
|
|
81
|
+
# single probability column would silently produce wrong labels.
|
|
82
|
+
n_classes = len(np.unique(dataset.y))
|
|
83
|
+
if n_classes == 2 and hasattr(model.model, "predict_proba"):
|
|
78
84
|
y_prob = dataset.y_prob(model)
|
|
79
85
|
# Handle both 1D and 2D probability arrays
|
|
80
86
|
if y_prob.ndim == 2:
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
y_pred = (y_prob > threshold).astype(int)
|
|
87
|
+
y_prob = y_prob[:, 1]
|
|
88
|
+
y_pred = (y_prob > threshold).astype(int)
|
|
84
89
|
else:
|
|
85
90
|
y_pred = dataset.y_pred(model)
|
|
86
91
|
|
{validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/MinimumF1Score.py
RENAMED
|
@@ -58,10 +58,19 @@ def MinimumF1Score(
|
|
|
58
58
|
closely with specific requirements.
|
|
59
59
|
"""
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
y_true = dataset.y
|
|
62
|
+
y_pred = dataset.y_pred(model)
|
|
63
|
+
|
|
64
|
+
# Decide the averaging method from the labels f1_score actually sees -- the
|
|
65
|
+
# union of y_true and y_pred. Inspecting y_true alone is not enough: a split
|
|
66
|
+
# whose true labels collapse to <=2 classes while the model predicts a third
|
|
67
|
+
# class is still multiclass to sklearn, and average="binary" would raise
|
|
68
|
+
# "Target is multiclass but average='binary'".
|
|
69
|
+
n_classes = len(np.unique(np.concatenate([y_true, y_pred])))
|
|
70
|
+
if n_classes > 2:
|
|
71
|
+
score = f1_score(y_true, y_pred, average="macro")
|
|
63
72
|
else:
|
|
64
|
-
score = f1_score(
|
|
73
|
+
score = f1_score(y_true, y_pred)
|
|
65
74
|
|
|
66
75
|
return (
|
|
67
76
|
[
|
{validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/OverfitDiagnosis.py
RENAMED
|
@@ -15,6 +15,8 @@ from validmind import RawData, tags, tasks
|
|
|
15
15
|
from validmind.logging import get_logger
|
|
16
16
|
from validmind.vm_models import VMDataset, VMModel
|
|
17
17
|
|
|
18
|
+
from ._diagnosis_metrics import bind_averaging, full_labels, multiclass_auc
|
|
19
|
+
|
|
18
20
|
logger = get_logger(__name__)
|
|
19
21
|
|
|
20
22
|
# TODO: A couple of improvements here could be to:
|
|
@@ -96,6 +98,10 @@ def _compute_metrics(
|
|
|
96
98
|
feature_column: str,
|
|
97
99
|
metric: str,
|
|
98
100
|
is_classification: bool,
|
|
101
|
+
average: str = None,
|
|
102
|
+
pos_label=None,
|
|
103
|
+
labels: list = None,
|
|
104
|
+
is_multiclass: bool = False,
|
|
99
105
|
) -> None:
|
|
100
106
|
results["slice"].append(str(region))
|
|
101
107
|
results["shape"].append(df_region.shape[0])
|
|
@@ -115,11 +121,25 @@ def _compute_metrics(
|
|
|
115
121
|
if len(np.unique(y_true)) == 1:
|
|
116
122
|
return results[metric].append(0)
|
|
117
123
|
|
|
124
|
+
# The library retains only a single probability column, so a
|
|
125
|
+
# probability-based multiclass ROC AUC is not possible; fall back to the
|
|
126
|
+
# label-binarize convention used elsewhere for multiclass targets.
|
|
127
|
+
if is_multiclass:
|
|
128
|
+
return results[metric].append(
|
|
129
|
+
multiclass_auc(y_true, df_region[pred_column].values, labels)
|
|
130
|
+
)
|
|
131
|
+
|
|
118
132
|
return results[metric].append(
|
|
119
133
|
metric_func(y_true, df_region[prob_column].values)
|
|
120
134
|
)
|
|
121
135
|
|
|
122
|
-
|
|
136
|
+
# Bind averaging so precision/recall/F1 handle multiclass targets and binary
|
|
137
|
+
# targets encoded outside {0, 1}; accuracy and regression metrics pass through.
|
|
138
|
+
return results[metric].append(
|
|
139
|
+
bind_averaging(metric_func, average, pos_label)(
|
|
140
|
+
y_true, df_region[pred_column].values
|
|
141
|
+
)
|
|
142
|
+
)
|
|
123
143
|
|
|
124
144
|
|
|
125
145
|
def _plot_overfit_regions(
|
|
@@ -253,6 +273,18 @@ def OverfitDiagnosis(
|
|
|
253
273
|
train_df[prob_column] = datasets[0].y_prob(model)
|
|
254
274
|
test_df[prob_column] = datasets[1].y_prob(model)
|
|
255
275
|
|
|
276
|
+
# Resolve the label space once so every feature slice is scored consistently:
|
|
277
|
+
# multiclass targets use macro averaging (and label-binarize AUC), binary
|
|
278
|
+
# targets keep the positive label so non-{0, 1} encodings don't break.
|
|
279
|
+
if is_classification:
|
|
280
|
+
labels = full_labels(datasets, model)
|
|
281
|
+
is_multiclass = len(labels) > 2
|
|
282
|
+
average, pos_label = (
|
|
283
|
+
("macro", None) if is_multiclass else ("binary", labels[-1])
|
|
284
|
+
)
|
|
285
|
+
else:
|
|
286
|
+
labels, is_multiclass, average, pos_label = None, False, None, None
|
|
287
|
+
|
|
256
288
|
test_results = []
|
|
257
289
|
figures = []
|
|
258
290
|
results_headers = ["slice", "shape", "feature", metric]
|
|
@@ -277,6 +309,10 @@ def OverfitDiagnosis(
|
|
|
277
309
|
pred_column=pred_column,
|
|
278
310
|
metric=metric,
|
|
279
311
|
is_classification=is_classification,
|
|
312
|
+
average=average,
|
|
313
|
+
pos_label=pos_label,
|
|
314
|
+
labels=labels,
|
|
315
|
+
is_multiclass=is_multiclass,
|
|
280
316
|
)
|
|
281
317
|
df_test_region = test_df[
|
|
282
318
|
(test_df[feature_column] > region.left)
|
|
@@ -292,6 +328,10 @@ def OverfitDiagnosis(
|
|
|
292
328
|
pred_column=pred_column,
|
|
293
329
|
metric=metric,
|
|
294
330
|
is_classification=is_classification,
|
|
331
|
+
average=average,
|
|
332
|
+
pos_label=pos_label,
|
|
333
|
+
labels=labels,
|
|
334
|
+
is_multiclass=is_multiclass,
|
|
295
335
|
)
|
|
296
336
|
|
|
297
337
|
results = _prepare_results(results_train, results_test, metric)
|