import java.util.*;

class Group {
    String name;

    Group(String name) {
        this.name = name;
    }
}

// ----------------------- Model -----------------------
class Model {
    // Predict positive (1) if score >= 0.5
    public int predict(double score) {
        return (score >= 0.5) ? 1 : 0;
    }
}

// ----------------------- FairnessMetric -----------------------
class FairnessMetric {
    // Compute positive prediction rate for a group
    public double compute(Model model, List<Double> scores) {
        int positives = 0;
        for (double s : scores) {
            if (model.predict(s) == 1) {
                positives++;
            }
        }
        return (double) positives / scores.size();
    }
}

// ----------------------- FairnessLens -----------------------
class FairnessLens {
    public void evaluate(Model model,
            List<Group> groups,
            List<List<Double>> groupScores) {

        FairnessMetric metric = new FairnessMetric();

        for (int i = 0; i < groups.size(); i++) {
            double rate = metric.compute(model, groupScores.get(i));
            System.out.println("Group: " + groups.get(i).name +
                    " | Positive Rate = " + rate);
        }
    }
}

// ----------------------- Main -----------------------
public class FairnessLensSimple {
    public static void main(String[] args) {

        Model model = new Model();

        // Two groups with different score distributions
        List<Group> groups = Arrays.asList(
                new Group("Group A"),
                new Group("Group B"));

        List<List<Double>> scores = Arrays.asList(
                Arrays.asList(0.9, 0.8, 0.4), // Group A
                Arrays.asList(0.3, 0.2, 0.1) // Group B
        );

        FairnessLens lens = new FairnessLens();
        lens.evaluate(model, groups, scores);
    }
}
