[ЗАСТАВКА] Вы уже изучили много разных алгоритмов классификации: логические, метрические, линейные. Узнали об их особенностях. О том, какие параметры у них есть. Но при это мы пока не говорили о том, как измерить качество алгоритма. Как понять, хорошо или плохо он работает на той или иной выборке. В этой лекции мы поговорим о мерах качества классификации. Итак, пусть дана выборка x для каждого вектора которой мы знаем бинарный ответ – ноль или один. Нулевой или первый класс. И дан некоторый алгоритм a, качество которого мы хотим измерить на этой выборке. Первое, что приходит в голову, когда мы хотим измерить качество алгоритма классификации, это посчитать, на скольки объектах мы даем правильный ответ, и поделить это на размер выборки. Это метрика так и называется – «доля правильных ответов» или accuracy на английском. Она очень интуитивная. Ее легко объяснить вашему заказчику, например. Но при этом у нее есть ряд проблем. В частности, с интерпретацией на несбалансированных выборках. Поговорим об этой проблеме подробнее. Рассмотрим простой пример. Пусть в выборке 1000 объектов, из них 950 относятся к классу 0, 50 относятся к классу 1. Такие выборки встречаются, например, в медицине, в медицинской диагностике, из-за того, что больных, как правило, гораздо меньше, чем здоровых. В нашем примере класс 0 отвечает за здоровых, класс 1 – за больных. И рассмотрим очень простой, очень глупый алгоритм a. Который для всех объектов возвращает нулевой класс. То есть всех пациентов относит к классу «здоровые». Это крайне нелогичный, крайне бесполезный алгоритм, который не несет никакой пользы, и мы никогда не будем использовать его на практике. Но при этом доля правильных ответов для него равна 95 % из-за того, что выборка несбалансированная. Как решить эту проблему? Ну, например, можно измерять не только долю правильных ответов, но и базовую долю правильных ответов, которая равна максимальному качеству, которое можно достичь, если алгоритм возвращает константу на всех объектах – 0 или 1. В нашем случае базовая доля правильных ответов равна 95 %. Это означает, что разумный интервал значений для доли правильных ответов – – это от 95 % до 100 %, а не от 50 % до 100 %, как мы могли бы ожидать. Видно, что здесь есть противоречие со здравым смыслом. У доли правильных ответов есть и другие проблемы, но прежде, чем говорить о них, давайте разберемся с тем, какие виды ошибок может допускать классификатор. Каждый объект характеризуется двумя числами – – тем, какой правильный ответ на нем, и тем, какой ответ дает наш алгоритм. В зависимости от сочетания этих двух чисел, можно разделить все объекты на четыре категории. Первая – это «верные срабатывания» или True Positive. К ним относятся те объекты, на которых правильный ответ – 1, и наш алгоритм возвращает 1. Если же объект относится к классу 0, но при этом алгоритм относит его к классу 1 – это «ложное срабатывание» или False Positive. Наоборот, если объект относится к классу 1, а алгоритм относит его к классу 0 – это «ложный пропуск» или False Negative. Если же объект относится к классу 0 и мы относим его к классу 0 – это «верный пропуск» или True Negative. Через эти четыре показателя, например, можно выразить долю правильных ответов. Она равна отношению числа верных ответов в нашей выборке, то есть сумме верных срабатываний и верных пропусков, к размеру всей выборки, то есть сумме всех четырех показателей. Снова рассмотрим пример из медицинской диагностики. Класс 1 отвечает за больных, класс 0 – за здоровых. Рассмотрим выборку, в которой 25 положительных примеров и 1050 отрицательных примеров с данными показателями качества. Видно, что алгоритм в целом неплох. Он находит 20 из 25 больных и при этом не очень много пациентов, которые здоровые, относит к классу «больные». Кажется, что алгоритм очень приемлемый. Его доля правильных ответов равна 94,9 %. А вот другой пример: та же самая выборка, но алгоритм – константный, относит всех к классу 0. При этом его доля правильных ответов гораздо выше – 97,6 %. В чем же дело? Почему более разумный алгоритм, более подходящий для нас, имеет качество меньше? Дело в том, что разные типы ошибок могут иметь разную цену. В нашей задаче ложное срабатывание ничего не значит. Нам не страшно провести несколько дополнительных анализов и понять, что человек здоров. При этом ложный пропуск крайне опасен – мы не определяем больного человека, мы не понимаем, что его нужно лечить. Это крайне нежелательно. Поэтому здесь ложное срабатывание гораздо менее ценно, чем ложный пропуск. В случаях, когда разные ошибки имеют разную цену, гораздо лучше измерять две другие метрики качества вместо одной: точность и полноту. Поговорим о них подробнее. Точность показывает, насколько мы можем доверять классификатору, если он выдает ответ 1. Более формально она равна отношению числа верных срабатываний к количеству объектов, на которых алгоритм выдал ответ 1. Вернемся к нашему примеру. В нем наш классификатор выдает ответ 1 на 70 объектах. При этом 20 из них действительно относятся к классу 1, к классу «больные». Значит, точность равна 20 / 70, или 28,6 %. При этом точность контактного классификатора, который все объекты относит к классу 0, равна нулю. Вторая метрика называется «полнотой» или recall. Она показывает, как много объектов класса 1 наш алгоритм находит. Более формально она равна отношению числа верных срабатываний к общему размеру класса 1. В нашем примере в классе 1 – 25 примеров. Из них 20 мы отнесли к классу 1. Значит, полнота равняется 20 / 25, или 80 %. У нашего алгоритма очень высокая полнота – он находит почти всех больных. При этом полнота константного классификатора снова равна 0 %, потому что он не находит ни один объект 1-го класса. Итак, точность и полнота характеризуют разные стороны качества классификатора. Чем выше точность, тем меньше ложных срабатываний. Чем выше полнота, тем меньше ложных пропусков. В зависимости от того, какие ошибки мы меньше хотим допускать, мы можем отдавать предпочтения либо точности, либо полноте. В разных задачах эти предпочтения могут быть разные. Разберем несколько примеров. Пример первый. Допустим, мы хотим определять мошеннические действия на банковских счетах. Если классификатор говорит, что на каком-то счете происходит нечто нехорошее, то сотрудник банка будет этот счет проверять на предмет того, правда это или нет. Понятно, что в этой задаче гораздо важнее полнота. Мы не хотим пропустить ни одного мошеннического счета, мы не хотим оставить мошенников безнаказанными. При этом точность не так важна. Если мы сделаем ложное срабатывание, то сотрудник произведет проверку и убедится, что все в порядке. Ничего страшного в этом нет, мы потратим не очень много ресурсов. А вот второй пример. Допустим, мы делаем классификатор, который разделяет самолеты на свои и на вражеские. При этом если самолет вражеский, то мы автоматически стреляем ракетой по нему. В этом случае гораздо важнее точность. Мы не можем допустить стрельбы по своим самолетам. Мы готовы жертвовать полнотой. Пусть мы пропустим несколько вражеских самолетов, пусть за ними следят другие системы, но при этом точность важнее всего. Итак, точность и полнота – очень неплохие метрики. Но при этом их две. В задачах машинного обучения приятнее иметь одну метрику, которую мы будем оптимизировать: минимизировать или максимизировать. Как их объединить? Первое, что приходит в голову – это найти арифметическое среднее. Просто усреднить точность и полноту. Оказывается, это далеко не самый лучший вариант. Давайте разберемся, почему. Чтобы понять причину, удобно рассмотреть оси из точности и полноты, в которых мы будем рисовать линии уровня метрики. На одной линии лежат алгоритмы, которые имеют одно и то же качество с точки зрения среднего арифметического. Рассмотрим такой пример: пусть есть некоторый очень простой алгоритм, который для всех объектов дает ответ 1. В этом случае его полнота равна 100 %, а точность – 5 % в случае, если положительных примеров в выборке – 5 %. Среднее арифметическое между точностью и полнотой – 52,5 %. Это довольно много. Рассмотрим другой алгоритм, гораздо более разумный, у которого и точность, и полнота составляют 52,5 %. Это очень качественный алгоритм, скорее всего, мы захотим его использовать гораздо больше, чем константный. Но при этом среднее арифметическое снова равно 52,5 %. Эти два алгоритма лежат на одной линии уровня. Это не очень хорошо. Давайте подумаем, как получить их. Наверное, в нашем примере было бы разумно взять минимум из точности и полноты, а не среднее. Это могло бы решить проблему. Действительно, если брать минимум из точности и полноты, то в нашем примере константный классификатор получает качество 5 %, а разумный классификатор – 52,5 %. Это гораздо лучше. При этом линии уровня констатируются в правом верхнем углу, там, где лежит классификатор с точностью и полнотой 100 %. При этом некоторые проблемы остаются. Рассмотрим другой пример. Пусть есть два классификатора. У одного и у другого точность – 20 %. При этом у одного полнота – 100 %, а у другого – 30 %. Понятно, что при равной точности, мы хотим отдавать приоритет классификаторам с большей полнотой. При этом наша метрика качества «минимум» и для одного, и для другого классификатора даст качество 20 %. Это снова не очень хорошо, нужно решить и эту проблему. Это можно сделать с помощью гармонического среднего или F-меры. По сути, это – сглаженный минимум. Чтобы посчитать F-меру нужно найти отношение произведения точности и полноты к их сумме и умножить это на 2. В этом случае решается наша первая проблема с константным разумным классификатором. Константный получает качество 10 %, разумный – 52,5 %. Так же решается проблемы и со вторым примером. Если два классификатора имеют точность 20 %, но при этом у одного полнота 100 %, а у другого – 30 %, то у первого качество будет 33 %, а у второго – 24 %. Первому будет отдано предпочтение. По сути F-мера является стандартом в машинном обучении для усреднения точности и полноты. Итак, что мы узнали сегодня? В задаче вычисления качества алгоритмов классификации самый простой подход – это вычислять долю верных ответов. Она простая, но у нее есть ряд проблем. Ее сложно интерпретировать на несбалансированных выборках. Она не учитывает цены ошибок. Если цены ошибок играют роль, то гораздо полезнее вычислять точность и полноту. Они позволят балансировать между ложными срабатываниями и ложными пропусками. Если же мы хотим использовать не две, а одну метрику качества, то можно посчитать F-меру. Это гармоническое среднее между точностью и полнотой, которое является стандартом в машинном обучении. [ЗАСТАВКА] [ЗАСТАВКА]