В этом видео мы поговорим о том, как оценивать качество алгоритмов, как понимать, насколько хорошо алгоритм будет работать на новых данных. Как мы уже выясняли, например, переобучение сложно поймать только по обучающей выборке, и хороший алгоритм, который хорошо обобщает, и переобученный, будут показывать хорошее качество на обучении. И нужны какие-то дополнительные данные, дополнительная информация, чтобы понять, переобучился алгоритм или нет. Да, для этого еще можно использовать меры переобученности, например, регуляризатор — норму весов, но при этом все равно они не говорят о том, насколько хорошо алгоритм будет работать на новых данных. В этом видео мы попробуем понять, как предсказать, как понять, насколько хорошо он будет работать. То есть, например, какая у новых данных у алгоритма будет доля ошибок, если это классификация, или среднеквадратичная ошибка, если это задача регрессии. Понятно, что по обучающей выборке их оценивать нельзя, алгоритм подгонялся под обучающую выборку и, скорее всего, на ней значение качества будет неплохое. Самая простая идея того, как оценивать качество алгоритма, это построение отложенной выборки. Мы берем все данные, которые у нас есть, и разбиваем на две части. При этом первая выступает в качестве обучающей выборки, на нее мы настраиваем алгоритм, вторая выступает в качестве тестовой выборки, то есть на ней мы измеряем качество алгоритма, обученного на первой части. При этом мы измеряем качество как угодно, либо это среднеквадратичная ошибка, либо доля ошибок, либо что-то еще, в зависимости от специфики задачи. При этом сразу встает вопрос о том, в каких пропорциях разбивать данные на обучение и на тест. Если взять тестовую выборку слишком маленькой, отложенную выборку слишком маленькой, то, с одной стороны, обучающая выборка будет репрезентативной, и ее размер будет почти совпадать с размером настоящей обучающей выборки. Но, с другой, контрольная выборка, тестовая выборка, окажется слишком маленькой, в ней будет слишком мало объектов, чтобы надежно оценить качество, скорее всего, оценка качества будет зашумленной. Если же взять отложенную выборку слишком большой, то оценка по ней будет надежной, но, с другой стороны, обучение будет слишком маленьким, сильно меньше, чем настоящее обучение, и, например, мы можем увидеть качество очень небольшим, но из-за того, что обучения мало, что данных было слишком мало для обучения. Поэтому можно искать опять же какой-то баланс. Здесь нет конкретных советов, обычно берут разбиение в соотношении 70 к 30 или 80 к 20, где 70 и 80, соответственно, это размер обучения. Так же, например, есть подход, в котором размер обучающей выборки составляет 0,632 от общего размера данных. Преимуществом отложенной выборки является то, что обучать алгоритм нужно всего лишь один раз, на обучающей выборке. Но при этом результат очень сильно зависит от разбиения. Рассмотрим простой пример. Допустим, мы предсказываем стоимость жилья по некоторым характеристикам. И есть особая категория жилья, двухэтажные квартиры. Если вдруг окажется, что все двухэтажные квартиры, а их очень немного, попали в отложенную выборку, то мы увидим на них очень плохое качество, поскольку алгоритм не видел их на обучении, он ничего не знает о таких ситуациях и будет плохо предсказывать для них. При этом мы никогда не узнаем, что если бы хотя бы один такой объект оказался в обучении, то качество было бы гораздо лучше. Таким образом, результат измерения качества по отложенной выборке сильно зависит от того, как мы выбираем отложенную выборку, это не очень хорошо. Чтобы решить проблему, сразу приходит в голову следующий подход. Давайте много раз, n раз, разобьем все наши данные на обучение и тест, то есть много раз сгенерируем отложенную выборку. При этом каждый раз будем обучаться по обучающей выборке, измерять качество на отложенной выборке. Поскольку процедура повторяется n раз, мы получим n показателей качества, усредним их и получим итоговую оценку. Да, возможно, это уже решает проблему, но при этом, поскольку разбиения случайные, все еще нет гарантий, что каждый объект хотя бы раз побывает в обучении. Нужен более системный подход. Таким подходом является кросс-валидация. В ней предлагается следующее. Возьмем всю выборку и разобьем на k блоков примерно одинакового размера. И дальше каждый блок по очереди будет выступать в качестве тестового. Итак, сначала возьмем первый блок в качестве тестового, а все остальные в качестве обучения. Обучим алгоритм на обучающей выборке, измерим качество на тестовом блоке, запомним его. Далее возьмем второй блок в качестве тестового, все остальные сольем в обучающую выборку, обучимся и измерим качество, и так далее. Каждый блок побывает один раз тестовым, получим k показателей качества. Усредним их и получим оценку качества по кросс-валидации. При этом в кросс-валидации снова есть параметр, который нужно как-то выбирать, это число блоков k. Здесь ситуация примерно та же, что и с отложенной выборкой, если блоков мало, например, 3, то, с одной стороны, тестовая выборка при каждом разбиении на обучение и контроль, будет большой, то есть оценка по ней будет надежной, устойчивой, но при этом обучение окажется меньше, чем на самом деле, и есть риск, что оценка будет смещенной. Если же блоков мы берем много, то, с одной стороны, оценки ненадежные, тестовая выборка всегда маленькая, С другой стороны, оценки несмещенные, поскольку обучающая выборка всегда большая. Снова нет конкретных рекомендаций, каким выбирать k, обычно его берут равным трем, пяти или десяти, при этом, чем больше у вас данных, тем, как правило, меньше нужно больше блоков, потому что много блоков нужно, чтобы обучение было побольше, если у вас данных и так много, то даже удаление одной трети от всей выборки не приведет к тому, что у вас данных станет мало для обучения. При этом заметьте, что в кросс-валидации вам нужно обучать алгоритм k раз, поэтому опять же, если обучение алгоритма очень трудоемкое, очень много требует времени, то нужно брать k поменьше. Еще один совет, который относится ко всем этим способам. Всегда перемешивайте выборку перед тем, как делать отложенную выборку или кросс-валидацию. Дело в том, что в файле с данными выборка может быть отсортирована по какому-то неслучайному признаку. Например, сначала могут идти все мальчики, а потом все девочки. И если вы не перемешаете выборку и просто разобьете в соотношении 50 к 50, то получится, что в обучении у вас есть только мальчики, в контроле — только девочки, и, скорее всего, алгоритм будет показывать очень плохое качество, и вы долго будете пытаться понять, почему. Но при этом есть ситуации, в которых выборку нельзя перемешивать и нужно вполне понятным способом разбивать ее на обучение и контроль. Например, если вы строите алгоритм, который будет предсказывать погоду на следующие дни, понятно, что в момент, когда вы будете применять модель, у вас будет информация только о прошлом, и на основе нее нужно будет предсказывать будущее. Поэтому и когда вы будете разбивать выборку на обучение и тест, вам нужно следить, чтобы в обучении были дни, которые идут перед днями в тесте, иначе обучение будет заглядывать в будущее, и качество будет получаться завышенным. Итак, мы обсудили, что для грамотного оценивания качества алгоритма, нужно использовать данные не из обучающей выборки, для этого можно, например, делать отложенную выборку, или же оценивать качество по кросс-валидации. В следующем видео мы поговорим о том, как использовать эти подходы, чтобы сравнивать модели или выбирать гиперпараметры в них.