У меня есть датасет для ранжирования. query_id - это уникальный айдишник пользоательской сессии по запросу таргет - был ли совершён заказ rn - ranking number report_date - feature_1-11 - фичи rn находится в промежутке от 1 до 100 обучил модель lgbm
param_ranking = {
"objective": "lambdarank",
"label_gain": [int(i) for i in range(int(max(y_train.max(), y_validation.max())) + 1)],
"metric": ["ndcg"],
"eval_at": 5,
"random_state": 1,
"verbosity": -1,
# 'num_threads': 16,
"learning_rate": 0.1,
}
callbacks = [
lgb.early_stopping(20),
lgb.log_evaluation(period=10) # Коллбэк для логирования
]
model_gbm = lgb.train(
param_ranking,
lgb_train,
2000,
valid_sets=[lgb_train, lgb_valid],
callbacks=callbacks,
feval=custom_map5,
)
пытаюсь получить результаты
```
def custom_map5(preds, lgb_dataset):
labels = lgb_dataset.get_label()
groups_size = lgb_dataset.get_group()
begin = 0
ranks = []
for group_size in groups_size:
preds_group = preds[begin : (begin + group_size)] # noqa
temp = (-preds_group).argsort()
ranks_group = np.empty_like(temp)
ranks_group[temp] = np.arange(len(preds_group))
ranks.append(ranks_group)
begin += group_size
ranks = np.concatenate(ranks)
is_top5 = ranks < 5
map5 = labels[is_top5].sum() / labels.sum()
return "custom_map@5", map5, True
```
получаю заниженные, когда пытаюсь вычислить mrr результат 1, что невозможно. Подскажите пожалуйста где ошибка