No i was talking about the fact that in the collaborative algorithm i was using a kind of calculation for the features and in the clustering one another kind: private double computeEnhancedSimilarity(User user, User candidate) {
        double embeddingSimilarity = userRepository.doCosineSimilarity(user.getId(), candidate.getId());
        double eloSimilarity = 1.0 - Math.abs(user.getElo() - candidate.getElo()) / 3000.0;
        double swipeSimilarity = computeSwipeSimilarity(user, candidate);
        double lastActiveSimilarity = computeLastActiveSimilarity(user, candidate);

        return (WEIGHT_EMBEDDING * embeddingSimilarity) +
                (WEIGHT_ELO * eloSimilarity) +
                (WEIGHT_SWIPE * swipeSimilarity) +
                (WEIGHT_LAST_ACTIVE * lastActiveSimilarity);
    }

    private double computeSwipeSimilarity(User user, User candidate) {
        Set<User> userRightSwipes = userSwipeRepository.findBySwiper_Id(user.getId()).stream()
                .filter(swipe -> swipe.getType() == SwipeType.POSITIVE)
                .map(UserSwipe::getSwipedUser)
                .collect(Collectors.toSet());

        Set<User> candidateRightSwipes = userSwipeRepository.findBySwiper_Id(candidate.getId()).stream()
                .filter(swipe -> swipe.getType() == SwipeType.POSITIVE)
                .map(UserSwipe::getSwipedUser)
                .collect(Collectors.toSet());

        long commonRightSwipes = userRightSwipes.stream()
                .filter(candidateRightSwipes::contains)
                .count();

        long totalSwipes = Math.max(userRightSwipes.size(), candidateRightSwipes.size());
        if (totalSwipes == 0) return 0.0;
        return (double) commonRightSwipes / totalSwipes;
    }

    private double computeLastActiveSimilarity(User user, User candidate) {
        long daysDifference = Math.abs(ChronoUnit.DAYS.between(user.getLastActive(), candidate.getLastActive()));
        return 1.0 / (1.0 + daysDifference); // More recent activity similarity
    }private double[] createFeatureVector(User user) {
        float[] embedding = user.getEmbedding();
        // Enhanced feature count: embedding + elo + swipe ratio + last active
        int additionalFeaturesCount = 3;
        double[] featureVector = new double[embedding.length + additionalFeaturesCount];

        // Embed user embeddings
        for (int i = 0; i < embedding.length; i++) {
            featureVector[i] = embedding[i];
        }

        // Normalize and add additional features
        featureVector[embedding.length] = normalizeEloScore(user.getElo());
        featureVector[embedding.length + 1] = normalizeSwipeCount(Set.copyOf(userSwipeRepository.findBySwiper_Id(user.getId())));
        featureVector[embedding.length + 2] = normalizeLastActive(user.getLastActive());

        return featureVector;
    }

    private double normalizeSwipeCount(Set<UserSwipe> userSwipes) {
        long swipeRight = userSwipes.stream().filter(swipe -> swipe.getType() == SwipeType.POSITIVE).count();
        long swipeLeft = userSwipes.stream().filter(swipe -> swipe.getType() == SwipeType.NEGATIVE).count();
        long totalSwipes = swipeRight + swipeLeft;

        if (totalSwipes == 0) return 0.0;
        return (double) swipeRight / totalSwipes;
    }

    private double normalizeEloScore(Integer eloScore) {
        if (eloScore == null) return 0.0;
        double maxElo = 3000.0;
        return Math.min(eloScore, maxElo) / maxElo;
    }

    private double normalizeLastActive(LocalDate lastActive) {
        long daysSinceActive = ChronoUnit.DAYS.between(lastActive, LocalDateTime.now());
        return 1.0 / (1.0 + daysSinceActive); // More recent activity gets higher score
    }