From 330fdd2c171fa7b9313180f631cb28259ee28303 Mon Sep 17 00:00:00 2001 From: siyulw Date: Tue, 2 Jun 2026 13:21:38 -0700 Subject: [PATCH] fix: return single bucket when all scores are identical in _compute_buckets --- .../app/engine/analytics.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/user-embedding-to-campaign-scoring/app/engine/analytics.py b/src/user-embedding-to-campaign-scoring/app/engine/analytics.py index 3a843c6..dddfdcb 100644 --- a/src/user-embedding-to-campaign-scoring/app/engine/analytics.py +++ b/src/user-embedding-to-campaign-scoring/app/engine/analytics.py @@ -91,7 +91,6 @@ def _compute_buckets( scores: np.ndarray, bucket_edges: list[int], ) -> list[ScoreBucket]: - percentiles = np.percentile(scores, bucket_edges) n_dims = min(self.config.pca_dimensions, embeddings.shape[1]) reduced: np.ndarray | None = None @@ -99,6 +98,12 @@ def _compute_buckets( pca = PCA(n_components=n_dims) reduced = pca.fit_transform(embeddings) + if len(np.unique(scores)) == 1: + centroid = reduced.mean(axis=0).tolist() if reduced is not None else None + return [ScoreBucket(bucket_label="p0-p100", count=len(scores), reduced_centroid=centroid)] + + percentiles = np.percentile(scores, bucket_edges) + buckets: list[ScoreBucket] = [] for i in range(len(percentiles) - 1): lo, hi = percentiles[i], percentiles[i + 1]