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)