Средняя точность @ K Средняя отзыв @ K

У меня есть два набора с пользовательскими сессиями. Каждый набор состоит из двух столбцов:
- идентификатор просмотренных товаров в интернет-магазине
- идентификатор купленных товаров в интернет-магазине

Один комплект должен быть использован для поезда (рейтинг верхних веток), второй комплект должен использоваться для испытания.

все идентификаторы купленных предметов разные.

Мне нужно сделать:
1. На тестовом наборе подсчитайте частоты просмотренных и купленных идентификаторов (один идентификатор может встречаться несколько раз в элементах viwed)
2. Реализуйте два алгоритма рекомендаций:
- сортировать просмотренные идентификаторы по популярности (частота встречаемости просматриваемых товаров)
- сортировать просмотренные идентификаторы путем покупки (частота встречается в купленных товарах)
3. Используя эти алгоритмы, мне нужно вычислить AverageRecall@1, AveragePrecision@1, AverageRecall@5, AveragePrecision@5

Важно:
- сеансы, в которых пользователь ничего не покупал, правило оценки качества.
- Если предмет не найден в тренировочном наборе, его популярность равна 0.
- Нужно рекомендовать разные предметы. И его номер должен быть не больше, чем количество различных просмотренных пользователем элементов.
- Рекомендации никогда не превышают как минимум двух чисел: количества просмотренных элементов и k в отзыве @ k / precision @ k.

Первое задание (рассчитать частоты) я делаю с помощью OrderedDict. Для второго задания я использую функцию:

    def apk(viwed, bought, k=1):
            if len(predicted)>k:
                predicted = predicted[:k]

            score = 0.0
            num_hits = 0.0

            for i,p in enumerate(bought):
                if p in actual and p not in bought[:i]:
                    num_hits += 1.0
                    score += num_hits / (i+1.0)

            if not viewed:
                return 0.0

            return score / min(len(viewed), k)

    def mapk(actual, predicted, k=10):
        return np.mean([apk(a,p,k) for a,p in zip(actual, predicted)])

Но я не знаю, как рассчитать третье задание (средний отзыв и т. Д. Для каждого k) и что делать с OrderedDict.

0 ответов

Другие вопросы по тегам