[БЕЗ_ЗВУКА] В этом видео мы поговорим о том, что такое несбалансированные выборки, к каким проблемам они могут привести и как бороться с такими проблемами. Итак, представьте, что мы решаем задачу классификации с некоторой выборкой. Эта задача называется несбалансированной, если объектов одного или нескольких классов в этой выборке существенно меньше, чем объектов всех остальных классов. Например, если мы решаем задачу бинарной классификации, то есть класса всего два, то есть такое правило: выборка считается несбалансированной, если объектов одного класса 10 % или меньше от общего числа объектов выборки. Примеров задач с несбалансированными выборками довольно много. Например, представьте, что мы хотим предсказывать, случится ли на следующий день резкий скачок курса доллара. Если определение резкого скачка будет такое, что мы хотим ловить только очень сильные изменения, то примеров таких изменений за всю историю – единицы, но при этом практически каждый день – это отрицательный пример, то есть пример, когда такого скачка не было. Выборка в этом случае будет очень несбалансированной. Примеров может быть очень много: это медицинская диагностика, где больных, как правило, сильно меньше, чем здоровых, это обнаружение мошеннических транзакций по картам в банке, где примеров таких плохих транзакций существенно меньше, чем обычных транзакций, или это может быть классификация текстов, где мы пытаемся находить какие-то очень редкие классы. Основная проблема, связанная с несбалансированными выборками, в том, что практически все классификаторы пытаются минимизировать число ошибок на обучающей выборке. Они никак не учитывают цены ошибок, и может оказаться выгоднее отнести все объекты к наибольшему классу, не пытаясь как-то выделить объекты маленького класса. То есть при работе с несбалансированными выборками классификаторы могут получаться очень плохие с точки зрения точности или полноты. Мы разберем два подхода к работе с несбалансированными выборками, и первый называется undersampling. Его основная идея состоит в том, что нам не нужно много примеров объектов из больших классов, можно выкинуть часть из них. Например, представьте, что у нас есть три класса: первый — очень большой; второй — совсем маленький; и третий имеет средний размер. В этом случае мы выкинем большую часть объектов первого класса и половину объектов третьего класса. В этом случае размеры классов примерно сравняются. При этом то, сколько именно объектов каждого класса мы выбрасываем, это гиперпараметр, который имеет смысл настраивать по отложенной выборке или на кросс-валидации. Второй подход – это oversampling. Он противоположен предыдущему. Мы будем дублировать объекты маленьких классов так, чтобы выравнять соотношение классов. В нашем примере мы пять раз повторим объекты второго класса, а для третьего класса мы возьмем случайную половину объектов и продублируем их. Таким образом третий класс мы увеличим в полтора раза. В этом случае размеры выборок, размеры классов тоже выравняются. То, насколько мы будем увеличивать каждый класс, – это тоже гиперпараметр. Обратим внимание на одну особенность. Если мы решаем задачу на исходной выборке, то, например, среднеквадратичная ошибка будет выглядеть вот так. Это среднее значение квадратичной ошибки по всем объектам. Если же мы делаем oversampling, то есть дублируем какие-то объекты, то это будет означать, что какое-то слагаемое войдет в эту сумму несколько раз. Таким образом, вместо реального дублирования объектов, мы можем просто выставить соответствующие веса при каждом слагаемом. Например, если первый объект мы продублируем три раза, то мы просто выставим вес при нем равным трем, v1 будет равно 3. Обратим внимание на еще одну проблему, с которой можно столкнуться при работе с несбалансированными выборками. Напомню, что когда мы проводим кросс-валидацию, мы разбиваем исходную выборку на k блоков примерно одинаковой длины. При этом если выборка несбалансированная и, например, первого класса очень мало, то при таком разбиении может оказаться, что в некоторые блоки объекты первого класса не попадут вообще. Это будет очень плохо. Например, при обучении на этом блоке мы получим классификатор, который никогда не видел один из классов. Чтобы бороться с этим, нужно делать стратификацию. При стратификации мы строим разбиение на блоки так, чтобы распределение классов в каждом блоке примерно совпадало с распределением классов в исходной выборке. В этом случае будет гарантироваться, что объекты каждого класса будут представлены в каждом из блоков разбиения. Итак, мы обсудили, что несбалансированные выборки – это проблема, с которой можно столкнуться при решении задач классификации. В этом случае константный классификатор может оказаться лучше с точки зрения алгоритма обучения, чем какой-то разумный классификатор, выделяющий объекты маленького класса. Чтобы бороться с такой проблемой, есть несколько подходов, например oversampling и undersampling, в которых мы либо уменьшаем большие классы, либо дублируем объекты маленьких классов, чтобы как-то выравнять пропорции этих классов. Также мы поговорили, что в случае с несбалансированными выборками могут возникнуть проблемы при разбиении данных на кросс-валидацию или на обучающую и отложенную выборку. В этом случае нужно делать стратификацию, то есть стараться сохранить соотношение классов в каждой подвыборке при разбиении. В следующем видео мы поговорим о том, как решать задачи многоклассовой классификации с помощью линейных моделей.