Principio de sustitución de Likosov#

  • Última modificación: Mayo 14, 2022

[ ]:
#
# Qué pasa si aparece un bug en el siguiente código cuando
# está en productivo?
#

from typing import List

import pandas as pd


class Metric:
    def calculate_metric(self, data: pd.DataFrame):
        pass


class MAP5(Metric):
    def calculate_map5(self, data: pd.DataFrame):
        print("Calculating Mean Average Precision @ 5")
        return "metric"


class MRR(Metric):
    def calculate_mrr(self, data: pd.DataFrame):
        print("Calculating Mean Reciprocal Rank")
        return "metric"


class NDCG(Metric):
    def calculate_ndcg(self, data: pd.DataFrame):
        print("Calculating Normalized Discounted Cumulative Gain")
        return "metric"


def evaluate_models(train_data: pandas.DataFrame, metrics: List[Metric]):
    res = []
    for metric in metrics:
        if isinstance(metric, MAP5):
            metric.calculate_map5(train_data)
        elif isinstance(metric, NDCG):
            metric.calculate_ndcg(train_data)
        elif isinstance(metric, MAP5):
            metric.calculate_map5(train_data)
        res.append(metric.calculate_metric(train_data))
    return res


metrics = [
    NDCG(),
    MRR(),
    MAP5(),
]

res = evaluate_models(train_data, metrics)
[ ]:
from abc import ABC, abstractmethod
from typing import List

import pandas as pd


class Metric(ABC):
    @abstractmethod
    def calculate_metric(self, data: pd.DataFrame):
        pass


class MAP5(Metric):
    def calculate_metric(self, data: pd.DataFrame):
        print("Calculating Mean Average Precision @ 5")
        return "metric"


class MRR(Metric):
    def calculate_metric(self, data: pd.DataFrame):
        print("Calculating Mean Reciprocal Rank")
        return "metric"


class NDCG(Metric):
    def calculate_metric(self, data: pd.DataFrame):
        print("Calculating Normalized Discounted Cumulative Gain")
        return "metric"


def evaluate_models(train_data: pandas.DataFrame, metrics: List[Metric]):
    res = []
    for metric in metrics:
        res.append(
            metric.calculate_metric(train_data),
        )
    return res


metrics = [
    NDCG(),
    MRR(),
    MAP5(),
]

res = evaluate_models(train_data, metrics)