kpfadnis commited on
Commit
a66466f
·
1 Parent(s): 1cd25a0

fix (performance overview): Use normalized scores for radar plots.

Browse files
src/views/model-comparator/ModelComparator.tsx CHANGED
@@ -666,7 +666,7 @@ export default function ModelComparator({
666
  <Slider
667
  ariaLabelInput="Lower bound"
668
  unstable_ariaLabelInputUpper="Upper bound"
669
- labelText={`${extractMetricDisplayName(selectedMetric)} Range`}
670
  value={
671
  selectedMetricRange
672
  ? selectedMetricRange[0]
 
666
  <Slider
667
  ariaLabelInput="Lower bound"
668
  unstable_ariaLabelInputUpper="Upper bound"
669
+ labelText={`Choose range`}
670
  value={
671
  selectedMetricRange
672
  ? selectedMetricRange[0]
src/views/performance-overview/Hide.module.scss CHANGED
@@ -47,7 +47,7 @@
47
  margin: 0 0 $spacing-03 $spacing-05;
48
  padding: $spacing-05;
49
  display: none;
50
- column-gap: $spacing-09;
51
  box-shadow: 0 0 5px 2px $gray-40;
52
  }
53
 
@@ -72,3 +72,13 @@
72
  .selector {
73
  max-width: 30%;
74
  }
 
 
 
 
 
 
 
 
 
 
 
47
  margin: 0 0 $spacing-03 $spacing-05;
48
  padding: $spacing-05;
49
  display: none;
50
+ column-gap: $spacing-12;
51
  box-shadow: 0 0 5px 2px $gray-40;
52
  }
53
 
 
72
  .selector {
73
  max-width: 30%;
74
  }
75
+
76
+ .selector label {
77
+ width: 100%;
78
+ }
79
+
80
+ .selectorLabel {
81
+ display: flex;
82
+ justify-content: space-between;
83
+ align-items: center;
84
+ }
src/views/performance-overview/Hide.tsx CHANGED
@@ -80,11 +80,26 @@ export default function HidePanel({
80
  </Tooltip>
81
  {show ? (
82
  <div className={cx(classes.container, show && classes.visible)}>
83
- <div className={classes.selector}>
 
 
 
84
  <FilterableMultiSelect
85
  id={'model--limiter'}
86
- titleText="Models"
 
 
 
 
 
 
 
 
 
 
 
87
  items={models}
 
88
  itemToString={(item) => (item.name ? item.name : item.modelId)}
89
  onChange={(event) => {
90
  setIgnoredModels(event.selectedItems);
@@ -103,11 +118,26 @@ export default function HidePanel({
103
  })}
104
  </div>
105
  </div>
106
- <div className={classes.selector}>
 
 
 
107
  <FilterableMultiSelect
108
  id={'metrics--limiter'}
109
- titleText="Metrics"
 
 
 
 
 
 
 
 
 
 
 
110
  items={metrics}
 
111
  itemToString={(item) =>
112
  item.displayName ? item.displayName : item.name
113
  }
 
80
  </Tooltip>
81
  {show ? (
82
  <div className={cx(classes.container, show && classes.visible)}>
83
+ <div
84
+ key={'models-limiter--' + `${ignoredModels === models}`}
85
+ className={classes.selector}
86
+ >
87
  <FilterableMultiSelect
88
  id={'model--limiter'}
89
+ titleText={
90
+ <div className={classes.selectorLabel}>
91
+ <span>Models</span>
92
+ <Button
93
+ kind="ghost"
94
+ size="sm"
95
+ onClick={() => setIgnoredModels(models)}
96
+ >
97
+ select all
98
+ </Button>
99
+ </div>
100
+ }
101
  items={models}
102
+ initialSelectedItems={ignoredModels}
103
  itemToString={(item) => (item.name ? item.name : item.modelId)}
104
  onChange={(event) => {
105
  setIgnoredModels(event.selectedItems);
 
118
  })}
119
  </div>
120
  </div>
121
+ <div
122
+ key={'metrics-limiter--' + `${ignoredMetrics === metrics}`}
123
+ className={classes.selector}
124
+ >
125
  <FilterableMultiSelect
126
  id={'metrics--limiter'}
127
+ titleText={
128
+ <div className={classes.selectorLabel}>
129
+ <span>Metrics</span>
130
+ <Button
131
+ kind="ghost"
132
+ size="sm"
133
+ onClick={() => setIgnoredMetrics(metrics)}
134
+ >
135
+ select all
136
+ </Button>
137
+ </div>
138
+ }
139
  items={metrics}
140
+ initialSelectedItems={ignoredMetrics}
141
  itemToString={(item) =>
142
  item.displayName ? item.displayName : item.name
143
  }
src/views/performance-overview/PerformanceOverview.tsx CHANGED
@@ -825,25 +825,48 @@ export default function PerformanceOverview({
825
  <>
826
  <RadarChart
827
  data={humanMetricsData.map((entry) => {
 
828
  const metric = metrics.find(
829
  (m) => m.displayName === entry.metric,
830
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
831
  return {
832
  model: entry.model,
833
  metric: entry.metric,
834
- score:
835
- metric && metric.maxValue
836
- ? Math.round(
837
- (entry.score /
838
- (typeof metric.maxValue === 'number'
839
- ? metric.maxValue
840
- : castToNumber(
841
- metric.maxValue?.value,
842
- metric.values,
843
- ))) *
844
- 100,
845
- ) / 100
846
- : entry.score,
847
  };
848
  })}
849
  options={{
@@ -899,10 +922,50 @@ export default function PerformanceOverview({
899
  data={algorithmicMetricsData
900
  .sort((a, b) => (a.model > b.model ? -1 : 1))
901
  .map((entry) => {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
902
  return {
903
  group: entry.model,
904
  key: entry.metric,
905
- value: entry.score,
906
  };
907
  })}
908
  options={{
 
825
  <>
826
  <RadarChart
827
  data={humanMetricsData.map((entry) => {
828
+ // Step 1: Find metric under consideration
829
  const metric = metrics.find(
830
  (m) => m.displayName === entry.metric,
831
  );
832
+
833
+ // Step 2: Calculate normalized score
834
+ let normalizedScore = entry.score;
835
+ if (
836
+ metric?.minValue !== undefined &&
837
+ metric.maxValue !== undefined
838
+ ) {
839
+ // Step 2.a: Fetch minimum value
840
+ const minValue =
841
+ typeof metric.minValue === 'number'
842
+ ? metric.minValue
843
+ : castToNumber(
844
+ metric.minValue?.value,
845
+ metric.values,
846
+ );
847
+
848
+ // Step 2.b: Fetch maximum value
849
+ const maxValue =
850
+ typeof metric.maxValue === 'number'
851
+ ? metric.maxValue
852
+ : castToNumber(
853
+ metric.maxValue?.value,
854
+ metric.values,
855
+ );
856
+
857
+ // Step 2.c: Calculate min-max normalized score
858
+ normalizedScore =
859
+ Math.round(
860
+ ((entry.score - minValue) / (maxValue - minValue)) *
861
+ 100,
862
+ ) / 100;
863
+ }
864
+
865
+ // Step 3: Return
866
  return {
867
  model: entry.model,
868
  metric: entry.metric,
869
+ score: normalizedScore,
 
 
 
 
 
 
 
 
 
 
 
 
870
  };
871
  })}
872
  options={{
 
922
  data={algorithmicMetricsData
923
  .sort((a, b) => (a.model > b.model ? -1 : 1))
924
  .map((entry) => {
925
+ // Step 1: Find metric under consideration
926
+ const metric = metrics.find(
927
+ (m) => m.displayName === entry.metric,
928
+ );
929
+
930
+ // Step 2: Calculate normalized score
931
+ let normalizedScore = entry.score;
932
+
933
+ if (
934
+ metric?.minValue !== undefined &&
935
+ metric.maxValue !== undefined
936
+ ) {
937
+ // Step 2.a: Fetch minimum value
938
+ const minValue =
939
+ typeof metric.minValue === 'number'
940
+ ? metric.minValue
941
+ : castToNumber(
942
+ metric.minValue?.value,
943
+ metric.values,
944
+ );
945
+
946
+ // Step 2.b: Fetch maximum value
947
+ const maxValue =
948
+ typeof metric.maxValue === 'number'
949
+ ? metric.maxValue
950
+ : castToNumber(
951
+ metric.maxValue?.value,
952
+ metric.values,
953
+ );
954
+
955
+ // Step 2.c: Calculate min-max normalized score
956
+ normalizedScore =
957
+ Math.round(
958
+ ((entry.score - minValue) /
959
+ (maxValue - minValue)) *
960
+ 100,
961
+ ) / 100;
962
+ }
963
+
964
+ // Step 3: Return
965
  return {
966
  group: entry.model,
967
  key: entry.metric,
968
+ value: normalizedScore,
969
  };
970
  })}
971
  options={{