Здравствуйте! Мы начинаем седьмую неделю нашего курса, на которой будем говорить о решающих деревьях. Мы обсудим, что это такое, как их обучать, как их применять, обсудим некоторые проблемы, связанные с их обучением, и в конце поговорим про обработку категориальных признаков. Но сначала давайте вернемся к тому, что изучали в самом начале нашего курса, кажется, на третьей неделе, когда говорили про линейную регрессию. Тогда мы обсуждали задачу предсказания стоимости квартиры. У нас были признаки (площадь, этаж, расстояние до метро и так далее), и мы предсказывали, собственно, стоимость этой квартиры по этим признакам. Если вы помните, линейная модель выглядела вот так: просто с некоторыми весами суммировали значения признаков. И мы обсуждали некоторые проблемы, связанные с такой моделью. В частности, площадь, умноженная на какой-то вес, — это еще ничего страшного, действительно, наверное, чем больше площадь — тем больше будет стоимость квартиры, и действительно, в каких-то случаях эта стоимость может расти линейно от площади (но не факт, в разных районах стоимость одного квадратного метра может быть разная). Но вот, например, была проблема с расстоянием до метро. Мы с вами обсуждали, что зависимость стоимости квартиры от расстояния до метро может выглядеть как на картинке, и видно, что она нелинейная. И чтобы решить эту проблему, мы придумывали какие-то эвристики, например, мы этот признак разбивали на интервалы и добавляли признаки — индикаторы вхождения значения признака в каждый интервал. Но это не единственная проблема, связанная с линейностью модели. Еще одна проблема — следующая: если вы внимательно посмотрите на эту формулу, вы заметите, что она предполагает независимость признаков. В частности, если меняется площадь, то меняется вклад в прогноз только у одного слагаемого, где я вес умножаю на площадь, при этом остальные слагаемые никак не меняются. Возможно, это странно. Возможно, если растет площадь, то и зависимость от расстояния до метро тоже должна стать другой. Например, может быть, если квартира гигантская, то, скорее всего, у человека, который там живет, есть много денег. Скорее всего, он ездит на такси или на своей машине и ему неважно, где находится метро. Поэтому, может быть, при изменении одного признака другие слагаемые тоже должны меняться. В этой модели это совершенно не учитывается. Как это можно исправить? Например, можно добавить так называемые парные или, в общем случае, полиномиальные признаки. Получится что-то вроде того, что написано на этом слайде. У нас будут исходные признаки: площадь, этаж, расстояние до метро, но еще добавится, например, площадь в квадрате со своим весом, или этаж в квадрате, или, например, площадь, умноженная на этаж, и так далее. Возможно, это уже будет работать лучше. Например, здесь есть произведение площади и этажа, и если поменяется площадь, то и влияние этажа на прогноз тоже как-то изменится. Но у такого подхода, конечно же, есть очевидная проблема. Эту модель гораздо сложнее интерпретировать. ОК, допустим, вы сделали такую модель, у вас там есть признаки с квадратами, кубами, произведения признаков, и вы замечаете, что у вас есть признак с очень большим значением веса. Например, этот признак — "расстояние до метро умножить на этаж в квадрате". Я не очень представляю, как вы будете объяснять вашему заказчику, какой смысл имеет этот признак. Расстояние до метро — понятно, что такое; этаж — понятно, что такое. Почему этаж в квадрате? Почему мы умножаем его на расстояние до метро? Совершенно непонятно. Такие модели уже гораздо сложнее для объяснения. Более того, такие модели могут быть очень тяжелыми для обучения. Допустим, изначально у нас всего 10 признаков. Это очень немного, модель с таким количеством признаков обучится просто моментально. Если вы добавляете полиномиальные признаки степени два — у вас уже будет где-то 55 признаков (ровно 55 признаков). Если вы будете делать признаки степени три, то есть кубы признаков и произведения троек признаков, — у вас будет 220 признаков. Степени четыре — 715 признаков. Я нарисовал график, где показана зависимость количества признаков от того, какой степени вы добавляете произведения. И в общем-то, вы видите, что если вы делаете 10-ю степень и выше, — у вас будут миллионы и сильно больше признаков. Но, конечно, если речь про миллионы или даже десятки миллионов признаков, то задача обучить такую модель становится просто на порядки сложнее. И более того — данных нужно на порядки больше. Если модель с 10 признаками, в принципе, может получиться обучить на тысячах или даже сотнях объектов (не факт, но такое бывает), то для обучения такой модели понадобятся миллионы и десятки миллионов примеров, что, конечно же, гораздо сложнее добыть. Хорошо, попробуем побороться хотя бы с одной из этих проблем — с интерпретацией таких моделей. Давайте сначала заменим исходные признаки на индикаторы попадания в разные интервалы, как мы это делали еще в начале курса в лекции про линейную регрессию. Это можно сделать, у нас будут признаки, например, вида "площадь находится в интервале от 30 до 50" или "от 50 до 80" и так далее. Про этаж то же самое будет, про расстояние до метро, понятно. У нас вместо исходных, скажем, 10 признаков уже получится несколько сотен признаков, потому что у каждого признака будет несколько интервалов, которые мы добавляем. После этого над такими исходными признаками можно построить полиномиальные, можно построить произведения, и тогда признаки в такой большой полиномиальной модели будет интерпретировать уже не так сложно. В частности, если у вас, допустим, есть признак с большим весом и этот признак вычисляется как индикатор того, что площадь — от 30 до 50 квадратных метров, индикатор того, что этаж — от второго до пятого и расстояние до метро — от 100 до 500 метров, в общем-то, это вполне понятный признак, вы сможете объяснить вашему заказчику, что вот, если квартира удовлетворяет трем таким критериям, то данные показывают, что она будет стоить больше. Дальше уже эксперт в недвижимости может попытаться это объяснить. И реально часто случается, что эксперт посмотрит на это и скажет: "Ну да, знаете, в общем-то, вы правы. Если квартира вот такая, этаж такой и к метро довольно близко, — да, люди это ценят, потому что: раз, два, три". ОК, эта проблема решена. Но, правда, вторую проблему (про сложность модели) мы только усугубили. Если изначально вы просто добавляли разные степени и произведения исходных признаков — теперь исходных признаков стало в десятки раз больше и нужно добавить их произведения. И, конечно же, признаков — если там были миллионы, тут будут десятки миллионов. В общем, пока что не удалось найти каких-то эффективных способов строить нелинейные модели, но есть другие подходы, которые основаны совершенно не на дифференцируемых моделях, а на чем-то другом. Этот подход называется "решающие деревья", и мы поговорим про него в следующем видео.