Skip to content

binary

HitK

Bases: ElementwiseMetricK

Computes the number of hits in a list of Top-K recommendations.

A hit is counted when a recommended item in the top K for this user was interacted with.

Detailed :attr:results show which of the items in the list of Top-K recommended items were hits and which were not.

:param K: Size of the recommendation list consisting of the Top-K item predictions. :type K: int

This code is adapted from RecPack :cite:recpack

Source code in src/recnexteval/metrics/binary/hit.py
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class HitK(ElementwiseMetricK):
    """Computes the number of hits in a list of Top-K recommendations.

    A hit is counted when a recommended item in the top K for this user was interacted with.

    Detailed :attr:`results` show which of the items in the list of Top-K recommended items
    were hits and which were not.


    :param K: Size of the recommendation list consisting of the Top-K item predictions.
    :type K: int

    This code is adapted from RecPack :cite:`recpack`
    """
    IS_BASE: bool = False

    def _calculate(self, y_true: csr_matrix, y_pred: csr_matrix) -> None:
        # log number of users and ground truth interactions
        logger.debug(f"HitK compute started - {self.name}")
        logger.debug(f"Number of users: {y_true.shape[0]}")
        logger.debug(f"Number of ground truth interactions: {y_true.nnz}")

        scores = lil_matrix(y_pred.shape)

        # Elementwise multiplication of top K predicts and true interactions
        scores[y_pred.multiply(y_true).astype(bool)] = 1

        scores = scores.tocsr()
        binary_score = (scores.sum(axis=1) >= 1).astype(int)
        self._scores = csr_matrix(binary_score)

        logger.debug(f"HitK compute complete - {self.name}")

name property

Name of the metric.

params property

Parameters of the metric.

identifier property

Identifier of the object.

Identifier is made by combining the class name with the parameters passed at construction time.

Constructed by recreating the initialisation call. Example: Algorithm(param_1=value)

:return: Identifier of the object

micro_result property

macro_result property

is_time_aware property

Whether the metric is time-aware.

timestamp_limit property

The timestamp limit for the metric.

num_items property

Dimension of the item-space in both y_true and y_pred

num_users property

Dimension of the user-space in both y_true and y_pred after elimination of users without interactions in y_true.

K = K instance-attribute

col_names property

The names of the columns in the results DataFrame.

IS_BASE = False class-attribute instance-attribute

get_params()

Get the parameters of the metric.

Source code in src/recnexteval/metrics/core/base.py
53
54
55
56
57
def get_params(self) -> dict[str, int | None]:
    """Get the parameters of the metric."""
    if not self.is_time_aware:
        return {}
    return {"timestamp_limit": self._timestamp_limit}

calculate(y_true, y_pred)

Calculates this metric for all nonzero users in y_true, given true labels and predicted scores.

Source code in src/recnexteval/metrics/core/base.py
116
117
118
119
120
121
def calculate(self, y_true: csr_matrix, y_pred: csr_matrix) -> None:
    """Calculates this metric for all nonzero users in `y_true`,
    given true labels and predicted scores.
    """
    y_true, y_pred = self._prepare_matrix(y_true, y_pred)
    self._calculate(y_true, y_pred)

prepare_matrix(y_true, y_pred)

Source code in src/recnexteval/metrics/core/top_k.py
57
58
59
60
def prepare_matrix(self, y_true: csr_matrix, y_pred: csr_matrix) -> tuple[csr_matrix, csr_matrix]:
    y_true, y_pred = super()._prepare_matrix(y_true, y_pred)
    y_pred = get_top_K_ranks(y_pred, self.K)
    return y_true, y_pred