Skip to content

check_similarity_to_weights_rows_reserve_mass

yohou.testing.check_similarity_to_weights_rows_reserve_mass(similarity, y_calib, y_pred_calib)

Check each predicted weight row is non-negative and sums below 1.

Pins the BaseSimilarity._to_weights / _reserve_mass invariant: a softmax of negative distances re-normalized as raw / (sum(raw) + 1), so every row reserves mass for the (hypothetical) test point.

Parameters

Name Type Description Default
similarity BaseSimilarity

Similarity instance.

required
y_calib DataFrame

Calibration target frame.

required
y_pred_calib DataFrame

Calibration prediction frame.

required

Raises

Type Description
AssertionError

If any row is negative or sums to 1 or more.

Source Code

Source code in src/yohou/testing/similarity.py
def check_similarity_to_weights_rows_reserve_mass(
    similarity, y_calib: pl.DataFrame, y_pred_calib: pl.DataFrame
) -> None:
    """Check each predicted weight row is non-negative and sums below 1.

    Pins the ``BaseSimilarity._to_weights`` / ``_reserve_mass`` invariant: a
    softmax of negative distances re-normalized as ``raw / (sum(raw) + 1)``, so
    every row reserves mass for the (hypothetical) test point.

    Parameters
    ----------
    similarity : BaseSimilarity
        Similarity instance.
    y_calib : pl.DataFrame
        Calibration target frame.
    y_pred_calib : pl.DataFrame
        Calibration prediction frame.

    Raises
    ------
    AssertionError
        If any row is negative or sums to 1 or more.

    """
    name = type(similarity).__name__
    sim = clone(similarity)
    sim.fit(y_calib, y_pred_calib)

    weights = sim.predict(y_pred_calib.head(2))
    assert np.all(weights >= 0), f"{name}.predict produced negative weights"
    row_sums = weights.sum(axis=1)
    assert np.all(row_sums < 1.0), (
        f"{name}.predict rows must sum to < 1 (reserved-mass invariant), got max row sum {row_sums.max()}"
    )