mlm_insights.core.metrics.classification_metrics package¶
Submodules¶
mlm_insights.core.metrics.classification_metrics.accuracy_score module¶
- class mlm_insights.core.metrics.classification_metrics.accuracy_score.AccuracyScore(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, target_column: str = 'y_true', prediction_column: str = 'y_predict', actual_score: float = 0.0, total_count: int = 0)¶
Bases:
DatasetMetricBase
This metric calculates the Accuracy score of a classification model. Accuracy is the ratio of the number of correct predictions to the total number of input samples.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an exact metric.This metric doesn’t handle NaN values. If there is a single NaN value in the target or prediction column, it will throw InvalidTargetPredictionExceptionConfiguration¶
None
Returns¶
float: number of correctly classified samples
float: fraction of correctly classified samples
Examples
import numpy as np import pandas as pd from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.accuracy_score import AccuracyScore from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { 'email_subject': FeatureType( data_type=DataType.STRING, variable_type=VariableType.TEXT, column_type=ColumnType.INPUT), "spam_or_ham_prediction": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), "spam_or_ham_target": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } y_true_binary = ['spam', 'spam', 'spam', 'ham', 'ham', 'ham', 'ham'] y_pred_binary = ['spam', 'spam', 'ham', 'spam', 'spam', 'ham', 'ham'] binary_class_data_frame = pd.DataFrame({'email_subject': np.random.rand(len(y_pred_binary)), 'spam_or_ham_prediction': y_pred_binary, 'spam_or_ham_target': y_true_binary }) metric_details = MetricDetail(univariate_metric={}, dataset_metrics=[MetricMetadata(klass=AccuracyScore)]) runner = InsightsBuilder(). with_input_schema(input_schema=input_schema). with_data_frame(data_frame=binary_class_data_frame). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() profile_json = runner.run().profile.to_json() dataset_metrics = profile_json['dataset_metrics'] print(dataset_metrics["AccuracyScore"]) if __name__ == "__main__": main() Returns the standard metric result as: { 'metric_name': 'AccuracyScore', 'metric_description': 'Computes Accuracy classification score', 'variable_count': 2, 'variable_names': ['actual_score', 'normalized_accuracy_score'], 'variable_types': [CONTINUOUS, CONTINUOUS], 'variable_dtypes': [FLOAT, FLOAT], 'variable_dimensions': [0, 0], 'metric_data': [4.0, 0.5714], 'metadata': {}, 'error': None }
- actual_score: float = 0.0¶
- compute(dataset: DataFrame, **kwargs: Any) None ¶
Computes accuracy score for the passed in dataset
Parameters¶
dataset : pd.DataFrame DataFrame object for either the entire dataset for a partition on which a Metric is being computed
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) AccuracyScore ¶
Create an accuracy score metric using the configuration and kwargs
Parameters¶
config : Metric configuration kwargs: Key value pair for dynamic arguments. The current kwargs contains:
features_metadata: Contains input schema for each feature
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns Accuracy score Metric in Standard format.
Returns¶
StandardMetricResult: Accuracy score Metric in Standard format.
- merge(other_metric: AccuracyScore, **kwargs: Any) AccuracyScore ¶
Merge two Accuracy Score into one, without mutating the others.
Parameters¶
- other_metricAccuracy Score metric
Other Accuracy Score that need be merged.
Returns¶
- TypeMetric
A new instance of Accuracy Score
- prediction_column: str = 'y_predict'¶
- target_column: str = 'y_true'¶
- total_count: int = 0¶
mlm_insights.core.metrics.classification_metrics.common module¶
- mlm_insights.core.metrics.classification_metrics.common.compute_average_micro(multi_class_cm: MultiClassConfusionMatrix) float ¶
- mlm_insights.core.metrics.classification_metrics.common.compute_precision_score_macro(multi_class_cm: MultiClassConfusionMatrix) float ¶
- mlm_insights.core.metrics.classification_metrics.common.compute_precision_score_weighted(multi_class_cm: MultiClassConfusionMatrix) float ¶
- mlm_insights.core.metrics.classification_metrics.common.get_metric_result(ovr_list: List[float] | None = None, labels: List[str | int] | None = None, macro: float | None = None, micro: float | None = None, weighted: float | None = None, wrap_result: bool = True) Dict[str, Any] ¶
- This method returns metric result for Precision, Recall, Fbeta metrics. These metrics have the same shape , hence the method has been refactored to a common location
Parameters¶
ovr_list : Score for each label versus the rest of the labels
labels: List of labels present in the model dataset
macro: Macro averaging output where metrics is calculated for each label and then return their unweighted mean
micro: Micro averaging output where metrics is computed globally by counting the total true positives, false negatives and false positives
weighted: Weighted averaging output where metrics is computed for each label, and then return the average weights
mlm_insights.core.metrics.classification_metrics.confusion_matrix module¶
- class mlm_insights.core.metrics.classification_metrics.confusion_matrix.ConfusionMatrix(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>)¶
Bases:
DatasetMetricBase
This metric calculates the Confusion Matrix for a classification model. A confusion matrix is a table that is used to define the performance of a classification model.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an exact metric.The result returned by this metric is a Confusion matrix whose i-th row and j-th column entry indicates the number of samples with true label being i-th class and predicted label being j-th class
Configuration¶
None
Returns¶
- matrix: List[List[Integer]]
confusion matrix for the classification model
- labels: List[String]
Labels or classes within the classification model
Examples
import numpy as np import pandas as pd from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.confusion_matrix import ConfusionMatrix from mlm_insights.core.metrics.classification_metrics.recall_score import RecallScore from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { 'email_subject': FeatureType( data_type=DataType.STRING, variable_type=VariableType.TEXT, column_type=ColumnType.INPUT), "spam_or_ham_prediction": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), "spam_or_ham_target": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } y_true_binary = ['spam', 'spam', 'spam', 'ham', 'ham', 'ham', 'ham'] y_pred_binary = ['spam', 'spam', 'ham', 'spam', 'spam', 'ham', 'ham'] binary_class_data_frame = pd.DataFrame({'email_subject': np.random.rand(len(y_pred_binary)), 'spam_or_ham_prediction': y_pred_binary, 'spam_or_ham_target': y_true_binary }) metric_details = MetricDetail(univariate_metric={}, dataset_metrics=[MetricMetadata(klass=RecallScore), MetricMetadata(klass=ConfusionMatrix)]) runner = InsightsBuilder(). with_input_schema(input_schema=input_schema). with_data_frame(data_frame=binary_class_data_frame). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() profile_json = runner.run().profile.to_json() dataset_metrics = profile_json['dataset_metrics'] print(dataset_metrics["ConfusionMatrix"]) if __name__ == "__main__": main() Returns the standard metric result as: { 'metric_name': 'ConfusionMatrix', 'metric_description': 'Metric to compute confusion matrix to evaluate the accuracy of a classification.' 'variable_count': 2, 'variable_names': ['matrix', 'labels'], 'variable_types': [DISCRETE, NOMINAL], 'variable_dtypes': [INTEGER, STRING], 'variable_dimensions': [2, 1], 'metric_data': [[[2,2],[2,1]], ['ham', 'spam']], 'metadata': {}, 'error': None }
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) ConfusionMatrix ¶
Factory Method to create an object. The configuration will be available in config.
Returns¶
- MetricBase
An Instance of MetricBase.
Returns the Shareable Dataset Components that a Metric requires to compute its state and values Metrics which do not require SDC need not override this property
Returns¶
List of SDCMetaData. Each SDCMetaData must contain the klass attribute which points to the SDC class
mlm_insights.core.metrics.classification_metrics.false_negative_rate module¶
- class mlm_insights.core.metrics.classification_metrics.false_negative_rate.FalseNegativeRate(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, labels: ~typing.List[str | int] | None = None)¶
Bases:
DatasetMetricBase
This metric calculates the False Negative Rate of a classification model.FalseNegativeRate is the ratiofn / (fn + tp)
wherefn
is the number of false negatives andtp
the number of true positives. The false negative rate is the proportion of positive transactions that were incorrectly scored as negative by the classifier.The best value is 0 and the worst value is 1.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an exact metric.Configuration¶
- labels: List[Union[str, int]], default=None
When no labels are provided to the metric, the metric returns empty result.
When labels are provided to the metric, the metric returns one-versus-rest FNR for each of the provided labels
Examples
import numpy as np import pandas as pd from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.false_negative_rate import FalseNegativeRate from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { 'email_subject': FeatureType( data_type=DataType.STRING, variable_type=VariableType.TEXT, column_type=ColumnType.INPUT), "spam_or_ham_prediction": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), "spam_or_ham_target": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } y_true_binary = ['spam', 'spam', 'spam', 'ham', 'ham', 'ham', 'ham'] y_pred_binary = ['spam', 'spam', 'ham', 'spam', 'spam', 'ham', 'ham'] binary_class_data_frame = pd.DataFrame({'email_subject': np.random.rand(len(y_pred_binary)), 'spam_or_ham_prediction': y_pred_binary, 'spam_or_ham_target': y_true_binary }) metric_details = MetricDetail(univariate_metric={}, dataset_metrics=[MetricMetadata(klass=FalseNegativeRate)]) runner = InsightsBuilder(). with_input_schema(input_schema=input_schema). with_data_frame(data_frame=binary_class_data_frame). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() profile_json = runner.run().profile.to_json() dataset_metrics = profile_json['dataset_metrics'] print(dataset_metrics["FalseNegativeRate"]) if __name__ == "__main__": main() Returns the standard metric result as: { 'metric_name': 'FalseNegativeRate', 'metric_description': 'Metric computes the False Negative Rate.' ' FalseNegativeRate is the ratio ``fn / (fn + tp)``' ' where ``fn`` is the number of false negatives and ``tp`` the number of true positives.' ' The false negative rate is the proportion of positive transactions that' ' were incorrectly scored as negative by the classifier.' 'variable_count': 2, 'variable_names': ['ovr', 'labels'], 'variable_types': [CONTINUOUS, NOMINAL], 'variable_dtypes': [FLOAT, STRING], 'variable_dimensions': [1, 1], 'metric_data': [[], []], 'metadata': {}, 'error': None }
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) FalseNegativeRate ¶
Factory Method to create an object. The configuration will be available in config.
Returns¶
- MetricBase
An Instance of MetricBase.
Returns the Shareable Dataset Components that a Metric requires to compute its state and values Metrics which do not require SDC need not override this property
Returns¶
List of SDCMetaData. Each SDCMetaData must contain the klass attribute which points to the SDC class
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns FalseNegativeRate Metric in Standard format.
Returns¶
StandardMetricResult: FalseNegativeRate Metric in Standard format.
- labels: List[str | int] = None¶
- merge(other_metric: FalseNegativeRate, **kwargs: Any) FalseNegativeRate ¶
Merge two FalseNegativeRate metric into one, without mutating the others.
Parameters¶
- other_metricFalseNegativeRate
Other FalseNegativeRate metric that need be merged.
Returns¶
- TypeMetric
A new instance of FalseNegativeRate
mlm_insights.core.metrics.classification_metrics.false_positive_rate module¶
- class mlm_insights.core.metrics.classification_metrics.false_positive_rate.FalsePositiveRate(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, labels: ~typing.List[str | int] | None = None)¶
Bases:
DatasetMetricBase
This metric calculates the False Positive Rate of a classification model (Type 1 Error).False Positive Rate is the ratiofp / (fp + tn)
wherefp
is the number of false positives andtn
the number of true negatives. It indicates number of items wrongly classified as positive out of the total actual negativesThe best value is 0 and the worst value is 1.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an exact metric.Configuration¶
- labels: List[Union[str, int]], default=None
When no labels are provided to the metric, the metric returns empty result
When labels are provided to the metric, the metric returns one-versus-rest FPR for each of the provided labels
Examples
import numpy as np import pandas as pd from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.false_positive_rate import FalsePositiveRate from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { 'email_subject': FeatureType( data_type=DataType.STRING, variable_type=VariableType.TEXT, column_type=ColumnType.INPUT), "spam_or_ham_prediction": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), "spam_or_ham_target": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } y_true_binary = ['spam', 'spam', 'spam', 'ham', 'ham', 'ham', 'ham'] y_pred_binary = ['spam', 'spam', 'ham', 'spam', 'spam', 'ham', 'ham'] binary_class_data_frame = pd.DataFrame({'email_subject': np.random.rand(len(y_pred_binary)), 'spam_or_ham_prediction': y_pred_binary, 'spam_or_ham_target': y_true_binary }) metric_details = MetricDetail(univariate_metric={}, dataset_metrics=[MetricMetadata(klass=FalsePositiveRate)]) runner = InsightsBuilder(). with_input_schema(input_schema=input_schema). with_data_frame(data_frame=binary_class_data_frame). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() profile_json = runner.run().profile.to_json() dataset_metrics = profile_json['dataset_metrics'] print(dataset_metrics["FalsePositiveRate"]) if __name__ == "__main__": main() Returns the standard metric result as: { 'metric_name': 'FalsePositiveRate', 'metric_description': 'Metric computes the False Positive Rate (Type 1 Error).' ' False Positive Rate is the ratio ``fp / (fp + tn)`` where' ' ``fp`` is the number of false positives and ``tn`` the number of true negatives.' ' It indicates number of items wrongly classified as positive out of the total actual negatives' 'variable_count': 2, 'variable_names': ['ovr', 'labels'], 'variable_types': [CONTINUOUS, NOMINAL], 'variable_dtypes': [FLOAT, STRING], 'variable_dimensions': [1, 1], 'metric_data': [[], []], 'metadata': {}, 'error': None }
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) FalsePositiveRate ¶
Factory Method to create an object. The configuration will be available in config.
Returns¶
- MetricBase
An Instance of MetricBase.
Returns the Shareable Dataset Components that a Metric requires to compute its state and values Metrics which do not require SDC need not override this property
Returns¶
List of SDCMetaData. Each SDCMetaData must contain the klass attribute which points to the SDC class
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns FalsePositiveRate Metric in Standard format.
Returns¶
StandardMetricResult: FalsePositiveRate Metric in Standard format.
- labels: List[str | int] = None¶
- merge(other_metric: FalsePositiveRate, **kwargs: Any) FalsePositiveRate ¶
Merge two FalsePositiveRate metric into one, without mutating the others.
Parameters¶
- other_metricFalsePositiveRate
Other FalsePositiveRate metric that need be merged.
Returns¶
- TypeMetric
A new instance of FalsePositiveRate
mlm_insights.core.metrics.classification_metrics.fbeta_score module¶
- class mlm_insights.core.metrics.classification_metrics.fbeta_score.FBetaScore(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, labels: ~typing.List[str | int] | None = None, beta: float = 1)¶
Bases:
DatasetMetricBase
This metric calculates the F-beta score of a classification model.F-beta score is the weighted harmonic mean of precision and recall, reaching its optimal value at 1 and its worst value at 0.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an exact metric.- The beta parameter determines the weight of recall in the combined score.
beta = 1, recall and the precision are equally important
beta < 1 lends more weight to precision
beta > 1 favors recall
Configuration¶
- labels: List[Union[str, int]], default=None
When no labels are provided to the metric, the metric returns micro, macro and weighted average scores
When labels are provided to the metric, the metric returns one-versus-rest fbeta score for each of
the provided labels
- beta: float, default=1
The default value of beta is set to 1, thus by default this metric computes F1 score
Examples
import numpy as np import pandas as pd from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.fbeta_score import FBetaScore from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { 'email_subject': FeatureType( data_type=DataType.STRING, variable_type=VariableType.TEXT, column_type=ColumnType.INPUT), "spam_or_ham_prediction": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), "spam_or_ham_target": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } y_true_binary = ['spam', 'spam', 'spam', 'ham', 'ham', 'ham', 'ham'] y_pred_binary = ['spam', 'spam', 'ham', 'spam', 'spam', 'ham', 'ham'] binary_class_data_frame = pd.DataFrame({'email_subject': np.random.rand(len(y_pred_binary)), 'spam_or_ham_prediction': y_pred_binary, 'spam_or_ham_target': y_true_binary }) metric_details = MetricDetail(univariate_metric={}, dataset_metrics=[MetricMetadata(klass=FBetaScore)]) runner = InsightsBuilder(). with_input_schema(input_schema=input_schema). with_data_frame(data_frame=binary_class_data_frame). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() profile_json = runner.run().profile.to_json() dataset_metrics = profile_json['dataset_metrics'] print(dataset_metrics["FBetaScore"]) if __name__ == "__main__": main() Returns the standard metric result as: { 'metric_name': 'FBetaScore', 'metric_description': 'Metric computes the F-beta score.' ' F-beta score is the weighted harmonic mean of precision and recall,' ' reaching its optimal value at 1 and its worst value at 0.' ' The beta parameter determines the weight of recall in the combined score.' 'variable_count': 6, 'variable_names': ['macro', 'micro', 'weighted', 'ovr', 'labels', 'beta_value'], 'variable_types': [1, 1, 1, 1, 6, 1], 'variable_dtypes': [2, 2, 2, 2, 6, 2], 'variable_dtypes': [FLOAT, FLOAT, FLOAT, FLOAT, STRING, FLOAT], 'variable_types': [CONTINUOUS, CONTINUOUS, CONTINUOUS, CONTINUOUS, TEXT, CONTINUOUS], 'variable_dimensions': [0, 0, 0, 1, 1, 0], 'metric_data': [4.0, 0.5714, 3.25, None, None, 1], 'metadata': {}, 'error': None }
- beta: float = 1¶
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) FBetaScore ¶
Factory Method to create an object. The configuration will be available in config.
Returns¶
- MetricBase
An Instance of MetricBase.
Returns the Shareable Dataset Components that a Metric requires to compute its state and values Metrics which do not require SDC need not override this property
Returns¶
List of SDCMetaData. Each SDCMetaData must contain the klass attribute which points to the SDC class
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns FBetaScore Metric in Standard format.
Returns¶
StandardMetricResult: FBetaScore Metric in Standard format.
- labels: List[str | int] = None¶
- merge(other_metric: FBetaScore, **kwargs: Any) FBetaScore ¶
Merge two FBetaScore metric into one, without mutating the others.
Parameters¶
- other_metricFBetaScore
Other FBetaScore metric that need be merged.
Returns¶
- TypeMetric
A new instance of FBetaScore
mlm_insights.core.metrics.classification_metrics.log_loss module¶
- class mlm_insights.core.metrics.classification_metrics.log_loss.LogLoss(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, target_column: str = 'y_true', prediction_score_column: str = 'y_score', actual_score: float = 0.0, total_count: int = 0, labels: ~typing.List[~typing.Any] | None = None)¶
Bases:
DatasetMetricBase
This metric calculates the Log loss of a classification model.This is the loss function used in (multinomial) logistic regression, defined as the negative log-likelihood of a logistic model that returns y_pred probabilities for its training data y_true.The log loss is only defined for two or more labels. The log loss is non-negative and value closer to Zero is considered better.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an exact metric.Along with target and prediction columns, Log loss needs a prediction score column as well. Without the prediction score column defined, the metric will throw an Exception.This metric doesn’t handle NaN values. If there is a single NaN value in the target or prediction column, it will throw InvalidTargetPredictionExceptionConfiguration¶
- labels: List[Union[str, int]], default=None
When no labels are provided to the metric, the metric assumes that data is of binary classification and 1 is considered as the positive label. If the target data is of multi-classification then loss and normalized loss is not calculated and None is returned.
When only 1 label is provided then the label is considered as positive label and data is assumed to be of binary classification.
When labels are provided to the metric, the labels are used to hot encode the prediction scores and the result is used to calculate the log loss. labels need to be provided in the same order as the values in prediction score column.
In case of any mismatch in labels and target data, loss and normalized loss is not calculated and None is returned.
Examples
from mlm_insights.core.metrics.classification_metrics.log_loss import LogLoss classification_metrics = [ MetricMetadata(klass=LogLoss) ] metric_details = MetricDetail(univariate_metric={}, dataset_metrics=classification_metrics) runner = InsightsBuilder(). with_input_schema(input_schema). with_data_frame(data_frame=multi_class_data_frame). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() run_result = runner.run().profile.to_json() dataset_metrics = profile_json['dataset_metrics'] dataset_metrics["LogLoss"]["value"]["loss"] Returns the metric result as: { 'value': { 'loss': log_loss, 'normalized_loss' : normalized_log_loss, } }
- actual_score: float = 0.0¶
- compute(dataset: DataFrame, **kwargs: Any) None ¶
Computes log loss for the passed in dataset
Parameters¶
dataset : pd.DataFrame DataFrame object for either the entire dataset for a partition on which a Metric is being computed
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) LogLoss ¶
Create a log loss metric using the configuration and kwargs
Parameters¶
config : Metric configuration kwargs: Key value pair for dynamic arguments. The current kwargs contains:
features_metadata: Contains input schema for each feature
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns log loss Score Metric in Standard format.
Returns¶
StandardMetricResult: log loss Score Metric in Standard format.
- labels: List[Any] = None¶
- merge(other_metric: LogLoss, **kwargs: Any) LogLoss ¶
Merge two log loss Score into one, without mutating the others.
Parameters¶
- other_metricLog Loss metric
Other Log Loss metric that need be merged.
Returns¶
- TypeMetric
A new instance of Log Loss Metric
- prediction_score_column: str = 'y_score'¶
- target_column: str = 'y_true'¶
- total_count: int = 0¶
mlm_insights.core.metrics.classification_metrics.precision_recall_auc module¶
- class mlm_insights.core.metrics.classification_metrics.precision_recall_auc.PrecisionRecallAreaUnderCurve(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, positive_label: str | int = 1)¶
Bases:
DatasetMetricBase
This metric calculates the Area Under Curve for the Precision-Recall Curve.A precision-recall curve is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.It is created by plotting precision (precision = tp / (tp + fp)
) vs. recall (recall = tp / (tp + fn)
), at various threshold settings. Once the precision-recall pairs are computed for different threshold values, the Area Under Curve is computed.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an approximate metric.This metric doesn’t handle NaN values. If there is a single NaN value in the target or prediction column, it will throw InvalidTargetPredictionExceptionPart of the implementation is taken from sklearn: https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/metrics/_ranking.py
Configuration¶
- positive_label: int or str , default=1
The label of the positive class.
Examples
import pandas from sklearn.datasets import make_classification from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.precision_recall_auc import PrecisionRecallAreaUnderCurve from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { "y_true": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), "y_score": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } X, y = make_classification(n_samples=1000, n_classes=2, random_state=1) x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=2) model = LogisticRegression(solver='lbfgs') model.fit(x_train, y_train) y_score = model.predict_proba(x_test)[:, 1] df = pandas.DataFrame({'y_true': y_test, 'y_score': y_score}) classification_metrics = [ MetricMetadata(klass=PrecisionRecallAreaUnderCurve, config={"positive_label": 1}) ] metric_details = MetricDetail(univariate_metric={}, dataset_metrics=classification_metrics) runner = InsightsBuilder(). with_input_schema(input_schema). with_data_frame(data_frame=df). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() run_result = runner.run().profile.to_json() dataset_metrics = run_result['dataset_metrics'] print(dataset_metrics["PrecisionRecallAreaUnderCurve"]) if __name__ == "__main__": main() Returns the metric result as: return { "value": auc }
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) PrecisionRecallAreaUnderCurve ¶
Factory Method to create an object. The configuration will be available in config.
Returns¶
- MetricBase
An Instance of MetricBase.
Returns the Shareable Dataset Components that a Metric requires to compute its state and values Metrics which do not require SDC need not override this property
Returns¶
List of SDCMetaData. Each SDCMetaData must contain the klass attribute which points to the SDC class
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns PrecisionRecallAreaUnderCurve Metric in Standard format.
Returns¶
StandardMetricResult: PrecisionRecallAreaUnderCurve Metric in Standard format.
- merge(other_metric: PrecisionRecallAreaUnderCurve, **kwargs: Any) PrecisionRecallAreaUnderCurve ¶
Merge two PrecisionRecallAreaUnderCurve metric into one, without mutating the others.
Parameters¶
- other_metricPrecisionRecallAreaUnderCurve
Other PrecisionScore metric that need be merged.
Returns¶
- PrecisionRecallAreaUnderCurve
A new instance of PrecisionRecallAreaUnderCurve
- positive_label: str | int = 1¶
mlm_insights.core.metrics.classification_metrics.precision_recall_curve module¶
- class mlm_insights.core.metrics.classification_metrics.precision_recall_curve.PrecisionRecallCurve(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, positive_label: str | int = 1)¶
Bases:
DatasetMetricBase
This metric computes the Precision-Recall Curve, by computing precision-recall pairs for different probability thresholds.A precision-recall curve is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.It is created by plotting precision (precision = tp / (tp + fp)
) vs. recall (recall = tp / (tp + fn)
), at various threshold settings.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an approximate metric.This metric doesn’t handle NaN values. If there is a single NaN value in the target or prediction column, it will throw InvalidTargetPredictionExceptionConfiguration¶
- positive_label: int or str , default=1
The label of the positive class.
Examples
import pandas from sklearn.datasets import make_classification from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.precision_recall_curve import PrecisionRecallCurve from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { "y_true": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), "y_score": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } X, y = make_classification(n_samples=1000, n_classes=2, random_state=1) x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=2) model = LogisticRegression(solver='lbfgs') model.fit(x_train, y_train) y_score = model.predict_proba(x_test)[:, 1] df = pandas.DataFrame({'y_true': y_test, 'y_score': y_score}) classification_metrics = [ MetricMetadata(klass=PrecisionRecallCurve, config={"positive_label": 1}) ] metric_details = MetricDetail(univariate_metric={}, dataset_metrics=classification_metrics) runner = InsightsBuilder(). with_input_schema(input_schema). with_data_frame(data_frame=df). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() run_result = runner.run().profile.to_json() dataset_metrics = run_result['dataset_metrics'] print(dataset_metrics["PrecisionRecallCurve"]) if __name__ == "__main__": main() Returns the metric result as: { "value": { "precision": precision, "recall": recall, "thresholds": thresholds } }
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) PrecisionRecallCurve ¶
Factory Method to create an object. The configuration will be available in config.
Returns¶
- MetricBase
An Instance of MetricBase.
Returns the Shareable Dataset Components that a Metric requires to compute its state and values Metrics which do not require SDC need not override this property
Returns¶
List of SDCMetaData. Each SDCMetaData must contain the klass attribute which points to the SDC class
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns PrecisionRecallCurve Metric in Standard format.
Returns¶
StandardMetricResult: PrecisionRecallCurve Metric in Standard format.
- merge(other_metric: PrecisionRecallCurve, **kwargs: Any) PrecisionRecallCurve ¶
Merge two PrecisionRecallCurve metric into one, without mutating the others.
Parameters¶
- other_metricPrecisionRecallCurve
Other PrecisionScore metric that need be merged.
Returns¶
- PrecisionRecallCurve
A new instance of PrecisionRecallCurve
- positive_label: str | int = 1¶
mlm_insights.core.metrics.classification_metrics.precision_score module¶
- class mlm_insights.core.metrics.classification_metrics.precision_score.PrecisionScore(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, labels: ~typing.List[str | int] | None = None)¶
Bases:
DatasetMetricBase
This metric calculates the Precision score of a classification model.The precision is the ratiotp / (tp + fp)
wheretp
is the number of true positives andfp
the number of false positives. The precision is intuitively the ability of the classifier not to label as positive a sample that is negative.The best value is 1 and the worst value is 0.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an exact metric.Configuration¶
- labels: List[Union[str, int]], default=None
When no labels are provided to the metric, the metric returns micro, macro and weighted average scores
When labels are provided to the metric, the metric returns one-versus-rest precision score for each of the provided labels
Examples
import numpy as np import pandas as pd from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.precision_score import PrecisionScore from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { 'email_subject': FeatureType( data_type=DataType.STRING, variable_type=VariableType.TEXT, column_type=ColumnType.INPUT), "spam_or_ham_prediction": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), "spam_or_ham_target": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } y_true_binary = ['spam', 'spam', 'spam', 'ham', 'ham', 'ham', 'ham'] y_pred_binary = ['spam', 'spam', 'ham', 'spam', 'spam', 'ham', 'ham'] binary_class_data_frame = pd.DataFrame({'email_subject': np.random.rand(len(y_pred_binary)), 'spam_or_ham_prediction': y_pred_binary, 'spam_or_ham_target': y_true_binary }) metric_details = MetricDetail(univariate_metric={}, dataset_metrics=[MetricMetadata(klass=PrecisionScore)]) runner = InsightsBuilder(). with_input_schema(input_schema=input_schema). with_data_frame(data_frame=binary_class_data_frame). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() profile_json = runner.run().profile.to_json() dataset_metrics = profile_json['dataset_metrics'] print(dataset_metrics["PrecisionScore"]) if __name__ == "__main__": main() Returns the standard metric result as: { 'metric_name': 'PrecisionScore', 'metric_description': 'This metric computes the Precision.The precision is the ratio ``tp / (tp + fp)``' ' where ``tp`` is the number of true positives and ``fp`` the number of false positives.' ' The precision is intuitively the ability of the classifier not to label as positive' ' a sample that is negative.' 'The best value is 1 and the worst value is 0.', 'variable_count': 5, 'variable_names': ['macro', 'micro', 'weighted', 'ovr', 'labels'], 'variable_dtypes': [FLOAT, FLOAT, FLOAT, FLOAT, STRING], 'variable_types': [CONTINUOUS, CONTINUOUS, CONTINUOUS, CONTINUOUS, NOMINAL], 'variable_dimensions': [0, 0, 0, 1, 1], 'metric_data': [4.0, 0.5714], 'metadata': {}, 'error': None }
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) PrecisionScore ¶
Factory Method to create an object. The configuration will be available in config.
Returns¶
- MetricBase
An Instance of MetricBase.
Returns the Shareable Dataset Components that a Metric requires to compute its state and values Metrics which do not require SDC need not override this property
Returns¶
List of SDCMetaData. Each SDCMetaData must contain the klass attribute which points to the SDC class
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns PrecisionScore Metric in Standard format.
Returns¶
StandardMetricResult: PrecisionScore Metric in Standard format.
- labels: List[str | int] = None¶
- merge(other_metric: PrecisionScore, **kwargs: Any) PrecisionScore ¶
Merge two PrecisionScore metric into one, without mutating the others.
Parameters¶
- other_metricPrecisionScore
Other PrecisionScore metric that need be merged.
Returns¶
- TypeMetric
A new instance of PrecisionScore
mlm_insights.core.metrics.classification_metrics.recall_score module¶
- class mlm_insights.core.metrics.classification_metrics.recall_score.RecallScore(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, labels: ~typing.List[str | int] | None = None)¶
Bases:
DatasetMetricBase
This metric computes the recall score of a classification model.Recall is the ratio tp / (tp + fn) where tp is the number of true positives and fn the number of false negatives. The recall is intuitively the ability of the classifier to find all the positive samples.The best value is 1 and the worst value is 0.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an exact metric.Configuration¶
- labels: List[Union[str, int]], default=None
When no labels are provided to the metric, the metric returns micro, macro and weighted average scores
When labels are provided to the metric, the metric returns one-versus-rest recall score for each of the provided labels
Examples
import numpy as np import pandas as pd from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.recall_score import RecallScore from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { 'email_subject': FeatureType( data_type=DataType.STRING, variable_type=VariableType.TEXT, column_type=ColumnType.INPUT), 'spam_or_ham_prediction': FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), 'spam_or_ham_target': FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } y_true_binary = ['spam', 'spam', 'spam', 'ham', 'ham', 'ham', 'ham'] y_pred_binary = ['spam', 'spam', 'ham', 'spam', 'spam', 'ham', 'ham'] binary_class_data_frame = pd.DataFrame({'email_subject': np.random.rand(len(y_pred_binary)), 'spam_or_ham_prediction': y_pred_binary, 'spam_or_ham_target': y_true_binary }) metric_details = MetricDetail(univariate_metric={}, dataset_metrics=[MetricMetadata(klass=RecallScore)]) runner = InsightsBuilder(). with_input_schema(input_schema=input_schema). with_data_frame(data_frame=binary_class_data_frame). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() profile_json = runner.run().profile.to_json() dataset_metrics = profile_json['dataset_metrics'] print(dataset_metrics["RecallScore"]) if __name__ == "__main__": main() Returns the standard metric result as: { 'metric_name': 'RecallScore', 'metric_description': 'Metric computes the recall.Recall is the ratio tp / (tp + fn)' ' where tp is the number of true positives and fn the number of false negatives.' 'The recall is intuitively the ability of the classifier to find all the positive samples', 'variable_count': 5, 'variable_names': ['macro', 'micro', 'weighted', 'ovr', 'labels'], 'variable_dtypes': [FLOAT, FLOAT, FLOAT, FLOAT, STRING], 'variable_types': [CONTINUOUS, CONTINUOUS, CONTINUOUS, CONTINUOUS, NOMINAL], 'variable_dimensions': [0, 0, 0, 1, 1], 'metric_data': [4.0, 0.5714], 'metadata': {}, 'error': None }
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) RecallScore ¶
Factory Method to create an object. The configuration will be available in config.
Returns¶
- MetricBase
An Instance of MetricBase.
Returns the Shareable Dataset Components that a Metric requires to compute its state and values Metrics which do not require SDC need not override this property
Returns¶
List of SDCMetaData. Each SDCMetaData must contain the klass attribute which points to the SDC class
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns RecallScore Metric in Standard format.
Returns¶
StandardMetricResult: RecallScore Metric in Standard format.
- labels: List[str | int] = None¶
- merge(other_metric: RecallScore, **kwargs: Any) RecallScore ¶
Merge two RecallScore metric into one, without mutating the others.
Parameters¶
- other_metricRecallScore
Other RecallScore metric that need be merged.
Returns¶
- TypeMetric
A new instance of RecallScore
mlm_insights.core.metrics.classification_metrics.roc module¶
- class mlm_insights.core.metrics.classification_metrics.roc.ROCCurve(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, positive_label: str | int = 1)¶
Bases:
DatasetMetricBase
This metric computes the ROC Curve (receiver operating characteristic curve).A receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.It is created by plotting the fraction of true positives out of the positives (TPR = true positive rate) vs. the fraction of false positives out of the negatives (FPR = false positive rate), at various threshold settings. TPR is also known as sensitivity, and FPR is one minus the specificity or true negative rate.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an approximate metric.This metric doesn’t handle NaN values. If there is a single NaN value in the target or prediction column, it will throw InvalidTargetPredictionExceptionConfiguration¶
- positive_label: int or str , default=1
The label of the positive class.
Examples
import pandas from sklearn.datasets import make_classification from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.roc import ROCCurve from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { "y_true": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), "y_score": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } X, y = make_classification(n_samples=1000, n_classes=2, random_state=1) x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=2) model = LogisticRegression(solver='lbfgs') model.fit(x_train, y_train) y_score = model.predict_proba(x_test)[:, 1] df = pandas.DataFrame({'y_true': y_test, 'y_score': y_score}) classification_metrics = [ MetricMetadata(klass=ROCCurve) ] metric_details = MetricDetail(univariate_metric={}, dataset_metrics=classification_metrics) runner = InsightsBuilder(). with_input_schema(input_schema). with_data_frame(data_frame=df). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() run_result = runner.run().profile.to_json() dataset_metrics = run_result['dataset_metrics'] print(dataset_metrics["ROCCurve"]) if __name__ == "__main__": main() Returns the metric result as: { "value": { "fpr": fpr, "tpr": tpr, "thresholds": thresholds } }
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) ROCCurve ¶
Factory Method to create an object. The configuration will be available in config.
Returns¶
- MetricBase
An Instance of MetricBase.
Returns the Shareable Dataset Components that a Metric requires to compute its state and values Metrics which do not require SDC need not override this property
Returns¶
List of SDCMetaData. Each SDCMetaData must contain the klass attribute which points to the SDC class
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns ROC Curve Metric in Standard format.
Returns¶
StandardMetricResult: ROC Curve Metric in Standard format.
- merge(other_metric: ROCCurve, **kwargs: Any) ROCCurve ¶
Merge two ROCCurve metric into one, without mutating the others.
Parameters¶
- other_metricROCCurve
Other ROCCurve metric that need be merged.
Returns¶
- TypeMetric
A new instance of ROCCurve
- positive_label: str | int = 1¶
mlm_insights.core.metrics.classification_metrics.roc_auc module¶
- class mlm_insights.core.metrics.classification_metrics.roc_auc.ROCAreaUnderCurve(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, positive_label: str | int = 1)¶
Bases:
DatasetMetricBase
This metric computes the ROC Area under CurveA receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.It is created by plotting the fraction of true positives out of the positives (TPR = true positive rate) vs. the fraction of false positives out of the negatives (FPR = false positive rate), at various threshold settings. TPR is also known as sensitivity, and FPR is one minus the specificity or true negative rate.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an approximate metric.This metric doesn’t handle NaN values. If there is a single NaN value in the target or prediction column, it will throw InvalidTargetPredictionExceptionConfiguration¶
- positive_label: int or str, default=None
The label of the positive class. When pos_label=1,
Examples
import pandas from sklearn.datasets import make_classification from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.roc_auc import ROCAreaUnderCurve from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { "y_true": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), "y_score": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } X, y = make_classification(n_samples=1000, n_classes=2, random_state=1) x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=2) model = LogisticRegression(solver='lbfgs') model.fit(x_train, y_train) y_score = model.predict_proba(x_test)[:, 1] df = pandas.DataFrame({'y_true': y_test, 'y_score': y_score}) classification_metrics = [ MetricMetadata(klass=ROCAreaUnderCurve, config={"positive_label": 1}) ] metric_details = MetricDetail(univariate_metric={}, dataset_metrics=classification_metrics) runner = InsightsBuilder(). with_input_schema(input_schema). with_data_frame(data_frame=df). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() run_result = runner.run().profile.to_json() dataset_metrics = run_result['dataset_metrics'] print(dataset_metrics["ROCAreaUnderCurve"]) if __name__ == "__main__": main() Returns the metric result as: { "value": auc }
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) ROCAreaUnderCurve ¶
Factory Method to create an object. The configuration will be available in config.
Returns¶
- MetricBase
An Instance of MetricBase.
Returns the Shareable Dataset Components that a Metric requires to compute its state and values Metrics which do not require SDC need not override this property
Returns¶
List of SDCMetaData. Each SDCMetaData must contain the klass attribute which points to the SDC class
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns ROC Area Under Curve Metric in Standard format.
Returns¶
StandardMetricResult: ROC Area Under Curve Metric in Standard format.
- merge(other_metric: ROCAreaUnderCurve, **kwargs: Any) ROCAreaUnderCurve ¶
Merge two ROCAreaUnderCurve metric into one, without mutating the others.
Parameters¶
- other_metricROCAreaUnderCurve
Other ROCAreaUnderCurve metric that need be merged.
Returns¶
- TypeMetric
A new instance of ROCAreaUnderCurve
- positive_label: str | int = 1¶
mlm_insights.core.metrics.classification_metrics.specificity module¶
- class mlm_insights.core.metrics.classification_metrics.specificity.Specificity(config: ~typing.Dict[str, ~mlm_insights.constants.definitions.ConfigParameter] = <factory>, labels: ~typing.List[str | int] | None = None)¶
Bases:
DatasetMetricBase
This metric computes the Specificity or True Negative Rate of a classification model.Specificity is the ratiotn / (fp + tn)
wheretn
is the number of true negatives andfp
the number of false positives.The specificity is intuitively the ability of the classifier to find all the negative samples.The best value is 1 and the worst value is 0.This is a dataset metric which can process numerical as well as categorical data (target and prediction columns)This is an exact metric.Configuration¶
- labels: List[Union[str, int]], default=None
When no labels are provided to the metric, the metric returns empty result
When labels are provided to the metric, the metric returns one-versus-rest specificity for each of the provided labels
Examples
import numpy as np import pandas as pd from mlm_insights.builder.builder_component import MetricDetail, EngineDetail from mlm_insights.builder.insights_builder import InsightsBuilder from mlm_insights.constants.types import FeatureType, DataType, VariableType, ColumnType from mlm_insights.core.metrics.classification_metrics.false_positive_rate import FalsePositiveRate from mlm_insights.core.metrics.metric_metadata import MetricMetadata def main(): input_schema = { 'email_subject': FeatureType( data_type=DataType.STRING, variable_type=VariableType.TEXT, column_type=ColumnType.INPUT), "spam_or_ham_prediction": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.PREDICTION), "spam_or_ham_target": FeatureType( data_type=DataType.STRING, variable_type=VariableType.NOMINAL, column_type=ColumnType.TARGET) } y_true_binary = ['spam', 'spam', 'spam', 'ham', 'ham', 'ham', 'ham'] y_pred_binary = ['spam', 'spam', 'ham', 'spam', 'spam', 'ham', 'ham'] binary_class_data_frame = pd.DataFrame({'email_subject': np.random.rand(len(y_pred_binary)), 'spam_or_ham_prediction': y_pred_binary, 'spam_or_ham_target': y_true_binary }) metric_details = MetricDetail(univariate_metric={}, dataset_metrics=[MetricMetadata(klass=FalsePositiveRate)]) runner = InsightsBuilder(). with_input_schema(input_schema=input_schema). with_data_frame(data_frame=binary_class_data_frame). with_metrics(metrics=metric_details). with_engine(engine=EngineDetail(engine_name="native")). build() profile_json = runner.run().profile.to_json() dataset_metrics = profile_json['dataset_metrics'] print(dataset_metrics["FalsePositiveRate"]) if __name__ == "__main__": main() Returns the standard metric result as: { 'metric_name': 'Specificity', 'metric_description': 'Metric computes the Specificity or True Negative Rate.' ' Specificity is the ratio ``tn / (fp + tn)`` where' ' ``tn`` is the number of true negatives and ``fp`` the number of false positives.' ' The specificity is intuitively the ability of the classifier to find all the negative samples.' 'variable_count': 2, 'variable_names': ['ovr', 'labels'], 'variable_dtypes': [FLOAT, STRING], 'variable_types': [CONTINUOUS, NOMINAL], 'variable_dimensions': [1, 1], 'metric_data': [[], []], 'metadata': {}, 'error': None }
- classmethod create(config: Dict[str, ConfigParameter] | None = None, **kwargs: Any) Specificity ¶
Factory Method to create an object. The configuration will be available in config.
Returns¶
- MetricBase
An Instance of MetricBase.
Returns the Shareable Dataset Components that a Metric requires to compute its state and values Metrics which do not require SDC need not override this property
Returns¶
List of SDCMetaData. Each SDCMetaData must contain the klass attribute which points to the SDC class
- get_result(**kwargs: Any) Dict[str, Any] ¶
Returns the computed value of the metric
Returns¶
Dict[str, Any]: Dictionary with key as string and value as any metric property.
- get_standard_metric_result(**kwargs: Any) StandardMetricResult ¶
Returns Specificity Metric in Standard format.
Returns¶
StandardMetricResult: Specificity Metric in Standard format.
- labels: List[str | int] = None¶
- merge(other_metric: Specificity, **kwargs: Any) Specificity ¶
Merge two Specificity metric into one, without mutating the others.
Parameters¶
- other_metricSpecificity
Other Specificity metric that need be merged.
Returns¶
- TypeMetric
A new instance of Specificity