Как и в большинстве вопросов, связанных с наукой о данных, ответ на вопрос «какой из них лучше» сводится к «зависит». Важно ли иметь хорошие показатели для каждого класса в отдельности? Или вы больше заинтересованы в достижении хорошей общей производительности?
Когда вы устанавливаете average='micro'
, вы измеряете общую производительность алгоритма для всех классов. Например, чтобы вычислить точность, вы должны сложить все свои истинные положительные прогнозы и поделить на все истинные положительные результаты и все ложные положительные результаты, которые с использованием ваших данных будут:
(34 + 778 + 46730) / ((34 + 778 + 46730) + (157 + 890 + 125 + 4694 + 688 + 4592))
Результат 0,81106. Однако, когда вы смотрите на детали, вы замечаете, что для каждого из ваших классов существует широкий разброс в вычислениях точности в каждом классе, и что расчет точности в значительной степени определяется классом No Injury
:
Severe Injury = 0.0312
Medium Injury = 0.1409
No Injury = 0.8985
Когда вы устанавливаете average='macro'
, вы усредняете вычисления точности каждого класса вместе и устраняете влияние несбалансированных классов. Используя вычисленную точность класса выше вашей общей точности, когда average='macro'
будет:
(0.0312 + 0.1409 + 0.8985) / 3 = 0.356
Обратите внимание, что входные данные являются точными вычислениями для каждого отдельного класса и что каждый из них взвешен одинаково. Поскольку классы No Injury
и Medium Injury
имеют гораздо более низкие оценки точности, а поскольку вы устраняете влияние несбалансированных классов, точность macro
будет ниже.
Итак, что лучше, зависит от того, что важно для вас и вашего варианта использования. Если вы хотите убедиться, что большинство случаев, независимо от класса, назначены правильному классу, тогда average='micro'
- это метрика для использования, но учтите, что при этом результат будет перегружен одним классом в вашем примере. Если категории «Серьезный» или «Средний» имеют наибольшее значение, вы, вероятно, не захотите оценивать свою модель, используя average='micro'
, поскольку высокий уровень производительности будет показан в целом, даже при плохих результатах для этих классов самостоятельно.