Мои личные заметки из класса машинного обучения. Эти примечания будут и дальше обновляться и улучшаться по мере того, как я продолжаю просматривать курс, чтобы по-настоящему понять его. Большое спасибо Джереми и Рэйчел, которые дали мне возможность учиться.

Уроки: 12345678910 11 12

Видео / PowerPoint

Мы рассмотрели множество различных техник интерпретации случайных лесов, и на форуме возник вопрос: для чего они на самом деле? Как это помогает мне набрать больше очков в Kaggle, и я ответил: «Не обязательно». Поэтому я хотел поговорить подробнее о том, почему мы занимаемся машинным обучением. В чем смысл? Чтобы ответить на этот вопрос, я хочу показать вам кое-что действительно важное, а именно примеры того, как люди использовали машинное обучение в основном в бизнесе, потому что именно там большинство из вас, вероятно, окажутся после того, как поработает в какой-то компании. Я собираюсь показать вам приложения машинного обучения, которые основаны либо на вещах, в которых я лично участвовал, либо на тех, кто знает людей, которые делают это напрямую, поэтому ни одно из них не будет гипотетическим - это все реальные вещи. что люди делают, о чем я знаю напрямую или из вторых рук.

Горизонтальные приложения

  • Вертикальный: то, что вы делаете в рамках бизнеса, цепочки поставок или процесса.
  • Вопрос: являются ли объяснительные проблемы, с которыми люди сталкиваются в социальных науках, чем-то, для чего машинное обучение может быть полезно или используется, или это не та область, которая находится в [«32:29»]? Я много говорил об этом с людьми, занимающимися социальными науками, и в настоящее время машинное обучение не очень хорошо применяется в экономике, психологии и т. Д. В целом. Но я убежден, что это может быть именно по тем причинам, о которых мы говорим. Так что, если вы собираетесь попытаться изучить какую-то поведенческую экономику и пытаетесь понять, почему некоторые люди ведут себя иначе, чем другие, случайный лес с графиком важности характеристик будет отличным началом. Что еще более интересно, если вы пытаетесь провести какой-то социологический эксперимент или анализ, основанный на большом наборе данных социальной сети, где у вас есть наблюдательное исследование, вы действительно хотите попытаться извлечь все источники экзогенных переменных (т.е. это происходит снаружи), поэтому, если вы используете график частичной зависимости со случайным лесом, это происходит автоматически. Я действительно выступал с докладом в Массачусетском технологическом институте пару лет назад на первой конференции по цифровым экспериментам, на которой действительно говорилось о том, как мы экспериментируем в таких вещах, как социальные сети в этих цифровых средах, и все экономисты делают что-то с классическими статистическими тестами, но в данном случае , экономисты, с которыми я разговаривал, были абсолютно очарованы этим, и они даже попросили меня провести вводную часть сеанса машинного обучения в Массачусетском технологическом институте для различных преподавателей и выпускников экономического факультета. И некоторые из этих людей написали несколько довольно известных книг, и, надеюсь, это было полезно. Это определенно первые дни, но это большие возможности. Но, как говорит Яннет, скептицизма по-прежнему много. Скептицизм проистекает из незнания этого совершенно другого подхода. Итак, если вы потратили 20 лет на изучение эконометрики, и кто-то придет и скажет, что это совершенно другой подход ко всему, что делают эконометристы, естественно, вашей первой реакцией будет «докажите это». Так что это справедливо, но я думаю, что со временем следующее поколение людей, которые растут с машинным обучением, некоторые из них перейдут в социальные науки, они окажут огромное влияние, которого никому раньше не удавалось, и люди начнут вау. Как это случилось с компьютерным зрением. Когда компьютерное зрение долгое время говорило: «Может быть, вам следует использовать глубокое обучение для компьютерного зрения», а все, кто занимался компьютерным зрением, говорили: «Докажите это. У нас есть десятилетия работы над удивительными детекторами функций для компьютерного зрения ». И вот, наконец, в 2012 году пришли Хинтон и Крызанский и сказали, что «наша модель вдвое лучше вашей, и мы только начали это делать», и все были убеждены. В настоящее время все исследователи компьютерного зрения в основном используют глубокое обучение. Так что я думаю, что и в этой области время придет.

Определенная цель [«3:48»]

Практически каждая компания должна стараться продавать больше продуктов своим клиентам, поэтому и маркетинг. Итак, каждая из этих коробок представляет собой примеры некоторых вещей, для которых люди используют машинное обучение в маркетинге:

Возьмем пример - отток. Отток относится к модели, которая пытается предсказать, кто уйдет. Совсем недавно я провел некоторое моделирование оттока клиентов в сфере телекоммуникаций. Мы пытались выяснить для этой крупной компании по производству мобильных телефонов, от каких клиентов собираются уйти. Само по себе это не так уж и интересно. Построение высокопрогнозной модели, которая говорит, что Джереми Ховард почти наверняка уйдет в следующем месяце, вероятно, не так уж полезно, потому что, если я почти наверняка собираюсь оставить чистый месяц, вы, вероятно, ничего не сможете с этим поделать - уже слишком поздно, и все идет стоить тебе слишком дорого, чтобы удержать меня.

Итак, чтобы понять, зачем нам моделировать отток, у меня есть небольшая структура, которая может вам пригодиться: Разработка отличных продуктов для обработки данных. Я написал его с несколькими коллегами несколько лет назад, и в нем я описываю свой опыт превращения моделей машинного обучения в вещи, которые приносят деньги. Основной трюк - это то, что я называю подходом к трансмиссии, который состоит из четырех этапов:

Рычаги [5:04]

Отправной точкой для превращения проекта машинного обучения во что-то действительно полезное является знание того, чего я пытаюсь достичь, и это действительно означает, что я пытаюсь достичь высокой области под кривой ROC или пытаюсь добиться большой разницы между классами. . Это может быть то, что я пытаюсь продать больше книг, или я пытаюсь уменьшить количество клиентов, которые уходят в следующем месяце, или я пытаюсь обнаружить рак легких раньше. Это цели. Таким образом, цель - это что-то абсолютно прямое, что действительно нужно компании или организации. Ни одна компания или организация не живет для того, чтобы создавать более точную прогнозную модель. На то есть причина. Итак, это ваша цель. Очевидно, это самое главное. Если вы не знаете, для чего вы моделируете, то у вас не получится хорошо с этим справиться. И, надеюсь, люди начинают понимать это в мире науки о данных, но что интересно, то, о чем говорят очень немногие, но не менее важно, - это следующая вещь, а именно рычаги.

Данные [7:01]

Рычаг - это то, что организация может сделать для достижения цели. Итак, давайте возьмем пример моделирования оттока. Какой рычаг может использовать организация, чтобы уменьшить количество уходящих клиентов? Они могли позвонить кому-нибудь и сказать: «Ты счастлив? Что мы могли сделать? " Они могут дать им бесплатную ручку или что-то в этом роде, если они купят продукт на 20 долларов в следующем месяце. Вы могли бы дать им специальные предложения. Итак, это рычаги. Каждый раз, когда вы работаете специалистом по обработке данных, продолжайте возвращаться и думать о том, чего мы пытаемся достичь (мы являемся организацией) и как мы пытаемся этого достичь, а именно, что мы можем сделать для достижения этой цели. Таким образом, создание модели никогда не бывает рычагом, но оно может помочь вам с рычагом.

Модели [8:45]

Итак, следующий шаг - какие данные есть у организации, которые могли бы помочь им установить этот рычаг для достижения этой цели. Так что это не те данные, которые вам давали, когда вы запускали проект. Но подумайте об этом с точки зрения первого принципа - хорошо, я работаю в телекоммуникационной компании, они предоставили мне определенный набор данных, но я уверен, что они должны знать, где живут их клиенты, сколько телефонных звонков они делают. сделано в прошлом месяце, сколько раз они звонили в службу поддержки и т. д. Так что подумайте, хорошо ли, если мы пытаемся решить, кому мы должны сделать специальное предложение заранее, тогда мы хотим выяснить, какая у нас есть информация, которая могла бы помочь нам, чтобы определить, кто отреагирует на это хорошо или плохо. Возможно, более интересным было бы то, что, если бы мы использовали алгоритм мошенничества. Итак, мы пытаемся выяснить, кто не будет платить за телефон, который они забирают из магазина, у них какой-то 12-месячный план оплаты, и мы никогда их больше не увидим. В этом случае данные, которые у нас есть, не имеют значения, что есть в базе данных, важно то, какие данные мы можем получить, когда покупатель находится в магазине. Таким образом, данные, которые мы действительно можем использовать, часто ограничены. Поэтому нам нужно знать, чего я пытаюсь достичь, что эта организация может конкретно сделать, чтобы изменить результат, и в момент принятия решения, какие данные у них есть или могут ли они собирать.

Приложения отдела кадров [17:17]

Итак, я собираю все это вместе с помощью модели. Это не модель в смысле прогнозной модели, а модель в смысле имитационной модели. Итак, один из основных примеров, которые я привел в этой статье, - это когда я потратил много лет на создание, а именно: если страховая компания меняет свои цены, как это влияет на их прибыльность. Итак, как правило, ваша имитационная модель содержит ряд прогнозных моделей. Так, например, у меня была прогностическая модель, называемая моделью эластичности, в которой говорилось, что для конкретного клиента, если мы взимаем с него определенную цену за конкретный продукт, какова вероятность, что они скажут «да» как в случае нового бизнеса, так и в течение года. позже какова вероятность, что они обновятся. Затем есть еще одна прогностическая модель, которая показывает, какова вероятность того, что они собираются предъявить претензию, и сколько это будет заявка. Затем вы можете объединить эти модели вместе, чтобы сказать, что все в порядке, если мы изменим наши цены, снизив их на 10% для всех в возрасте от 18 до 25 лет, и мы сможем запустить их через эти модели, которые объединены в симуляцию, тогда общее влияние на наши рыночная доля через 10 лет равна X, наши затраты - Y, наша прибыль - Z и так далее.

На практике большую часть времени вы действительно будете больше заботиться о результатах этого моделирования, чем о прогнозной модели напрямую. Но в настоящее время большинство людей не делают этого эффективно. Например, когда я иду в Amazon, я читаю все книги Дугласа Адамса, и поэтому, прочитав все книги Дугласа Адамса, в следующий раз, когда я пошел на Amazon, они сказали, не хотите ли вы купить собрание сочинений Дугласа Адамса. Это после того, как я купил все его книги. Итак, с точки зрения машинного обучения, один специалист по данным сказал, что люди, которые покупают одну из книг Дугласа Адамса, часто покупают собрание сочинений. Но рекомендовать мне покупать собрание сочинений Дугласа Адамса - не умно. На самом деле это неразумно на нескольких уровнях. Мало того, что вряд ли я куплю коробку с чем-то, что у меня есть каждый индивидуально, но, кроме того, это не изменит моего покупательского поведения. Я уже знаю о Дугласе Адамсе. Я уже знаю, что он мне нравится, поэтому использование вашего ценного веб-пространства, чтобы сказать мне, может быть, вам стоит купить больше у автора, с которым вы уже знакомы и много раз покупали, на самом деле не изменит мое поведение. Так что, если бы вместо создания прогнозной модели Amazon построил модель оптимизации, которая могла бы имитировать, и сказала бы, если мы покажем Джереми эту рекламу, насколько вероятно, что он тогда купит эту книгу, и если я не покажу ему эту рекламу , какова вероятность, что он купит эту книгу. Так что это противоречие. Противоположным фактам является то, что произошло бы в противном случае, и тогда вы можете принять разницу и сказать, что мы должны порекомендовать ему, чтобы максимально изменить его поведение. Так что в результате вы получите больше книг, и вы, вероятно, скажете, что он никогда не покупал ни одной книги Терри Пратчетта, он, вероятно, не знает о Терри Пратчетте, но многим людям, которым нравился Дуглас Адамс, действительно нравился Терри Пратчетт, так что давайте познакомим его новому автору.

Так что это разница между прогнозной моделью, с одной стороны, и моделью оптимизации, с другой. Таким образом, эти два аспекта обычно идут рука об руку. Прежде всего, у нас есть имитационная модель. Имитационная модель говорит, что в мире, где мы поместили книгу Терри Пратчетта на первую страницу Amazon для Джереми Ховарда, произошло бы вот что. Купил бы с вероятностью 94%. Затем это говорит нам с этим рычагом о том, что я помещаю на свою домашнюю страницу для Джереми сегодня, мы говорим: "Хорошо", различные настройки этого рычага, который поместил Терри Пратчетта на домашнюю страницу, дает наивысший имитационный результат. Тогда это то, что максимизирует нашу прибыль от сегодняшнего посещения Джереми на amazon.com.

Вообще говоря, ваши прогнозные модели используются в этой имитационной модели, но вам нужно подумать о том, как все они работают вместе. Например, вернемся к оттоку. Таким образом, оказалось, что Джереми Ховард, скорее всего, уйдет из своей сотовой компании в следующем месяце. Что мы будем с этим делать? Давай позвоним ему. И я могу сказать вам, если моя сотовая компания позвонит мне прямо сейчас и скажет: «Просто позвоню, чтобы сказать, что мы вас любим», я бы сказал, что отказываюсь прямо сейчас. Это было бы ужасной идеей. Итак, вам снова нужна имитационная модель, которая говорит, какова вероятность того, что Джереми изменит свое поведение в результате того, что позвонит ему прямо сейчас. Так что один из рычагов, которые у меня есть, - это позвонить ему. С другой стороны, если я получу завтра письмо, в котором будет сказано, что за каждый месяц вы остаетесь с нами, мы дадим вам сто тысяч долларов. Тогда это определенно изменит мое поведение, верно? Но затем, введя это в имитационную модель, выясняется, что в целом это было бы невыгодным выбором. Вы видите, как это сочетается друг с другом?

Поэтому, когда мы смотрим на что-то вроде оттока, мы хотим думать, какие рычаги мы можем использовать [14:33]. Какие типы моделей мы могли бы построить на основе данных, которые помогут нам лучше использовать эти рычаги для достижения наших целей. Когда вы думаете об этом таким образом, вы понимаете, что подавляющее большинство этих приложений вообще не относятся к прогнозной модели. Они об интерпретации. Они о понимании того, что произойдет, если. Итак, если мы возьмем пересечение между ними, с одной стороны, вот все рычаги, которые мы могли бы потянуть (вот все, что мы можем сделать), а затем вот все функции из нашей важности случайной функции леса, которые оказываются сильные факторы результата. Итак, пересечение этих факторов - вот те рычаги, которые мы могли бы потянуть, которые действительно имеют значение. Потому что, если вы не можете что-то изменить, это не очень интересно. И если на самом деле это не значительный драйвер, то это не очень интересно. Таким образом, мы можем использовать важность нашей случайной функции леса, чтобы сказать нам, что мы можем сделать, чтобы изменить ситуацию. Затем мы можем использовать частичную зависимость, чтобы на самом деле построить такую ​​имитационную модель, чтобы сказать хорошо, что если бы мы это изменили, что бы произошло.

Итак, есть много примеров, и я хочу, чтобы вы думали, когда думаете о проблемах машинного обучения, над которыми вы работаете, - почему это кому-то интересно [16:02]. Каким будет хороший ответ на них и как вы действительно можете положительно повлиять на этот бизнес. Так что если вы создаете ядро ​​Kaggle, попробуйте подумать с точки зрения организатора конкурса. Что они хотели бы знать и как вы можете предоставить им эту информацию. С другой стороны, что-то вроде обнаружения мошенничества, вы, вероятно, просто хотите знать, чье мошенничество. Так что вы, вероятно, просто заботитесь о прогнозной модели. Но тогда вам нужно хорошо подумать о доступности данных здесь. Итак, хорошо, нам нужно знать, кто мошенничает, в момент, когда мы собираемся доставить им продукт. Так что нет смысла смотреть, например, на данные, которые будут доступны через месяц. Итак, у вас есть ключевая проблема - подумать о фактических операционных ограничениях, с которыми вы работаете.

Больше горизонтальных приложений… [22:04]

Много интересных приложений в сфере управления персоналом, но, как и отток сотрудников, это еще один вид модели оттока, когда, узнав, что Джереми Ховарду надоело читать лекции, он собирается уйти завтра. Что вы собираетесь с этим делать? Что ж, знать, что это на самом деле бесполезно. Было бы слишком поздно. На самом деле вам нужна модель, которая говорила бы, какие люди покидают USF, и оказывается, что все, кто идет в кафе на нижнем этаже, покидают USF. Я думаю, у них ужасная еда или что-то в этом роде. Или все, кому мы платим менее полумиллиона долларов в год, покидают USF, потому что они не могут позволить себе базовое жилье в Сан-Франциско. Таким образом, вы можете использовать свою модель оттока сотрудников не столько для того, чтобы сказать, какие сотрудники нас ненавидят, сколько для того, чтобы сказать, почему сотрудники уходят. Опять же, здесь действительно имеет значение интерпретация.

Вопрос. Что касается модели оттока, похоже, есть два предиктора, которые нужно предсказать: один - это отток, а другой - для оптимизации вашей прибыли. Итак, как это работает [18:30]? Да, точно. Вот в чем суть имитационной модели. Вы понимаете эту цель, которую мы пытаемся максимизировать, а именно прибыльность компании. Вы можете создать довольно простую модель Excel или что-то, что гласит, что вот доход, а вот затраты, и стоимость равна количеству людей, которых мы нанимаем, умноженному на их зарплату и т. Д. Внутри этой модели Excel есть определенные ячейки / входные данные, которые являются своего рода стохастическими или неопределенными. Но мы могли бы предсказать это с помощью модели, и вот что я делаю, так это говорю, что нам нужна прогностическая модель того, насколько вероятно, что кто-то останется, если мы изменим его зарплату, насколько вероятно, что они уйдут с текущей зарплатой, насколько вероятно они уйдут в следующем году, если я увеличу их зарплату сейчас, и т. д. Итак, вы предлагаете множество разных моделей, а затем вы можете связать их вместе с помощью простой бизнес-логики, а затем вы можете оптимизировать это. Тогда вы можете сказать хорошо, если я заплачу Джереми Ховарду полмиллиона долларов, это, вероятно, действительно хорошая идея, а если я заплачу ему меньше, то, вероятно, это не так или что-то в этом роде. Вы можете оценить общий эффект. Меня действительно шокирует, как мало людей это делают. Но большинство людей в промышленности измеряют свои модели, используя AUC или RMSE или что-то еще, что на самом деле никогда не является тем, что вам действительно нужно.

Вертикальные приложения [23:29]

Приоритезация лидов - действительно интересный вопрос. В каждой из этих коробок, которые я показываю, вы обычно можете найти компанию или множество компаний, единственная задача которых в жизни - создавать модели этой вещи. Итак, есть много компаний, которые продают системы приоритезации лидов, но опять же вопрос в том, как мы будем использовать эту информацию. Так что, если наш лучший лидер - это Джереми, у него самая высокая вероятность покупки. Значит ли это, что я должен послать продавца к Джереми или нет? Если он, скорее всего, купит, почему я зря трачу на него время. Итак, опять же, вам действительно нужна какая-то симуляция, которая скажет, каковы вероятные изменения в поведении Джереми, если я отправлю своего лучшего продавца пойти и посоветовать ему подписать контракт. Я думаю, что сегодня в мире у специалистов по обработке данных есть много возможностей выйти за рамки прогнозного моделирования и фактически свести все это воедино.

Другие приложения [31:02]

Помимо этих горизонтальных приложений, которые в основном применимы к каждой компании, существует целый ряд приложений, специфичных для каждой части мира. Для тех из вас, кто в конечном итоге окажется в сфере здравоохранения, некоторые из вас станут экспертами в одной или нескольких из этих областей. Как риск реадмиссии. Итак, какова вероятность того, что этот пациент вернется в больницу. В зависимости от деталей юрисдикции, повторная госпитализация может стать катастрофой для больниц. Если вы обнаружите, что у этого пациента высока вероятность повторной госпитализации, что вы будете с этим делать? Опять же, прогностическая модель полезна сама по себе. Это скорее говорит о том, что мы не должны пока отправлять их домой, потому что они собираются вернуться. Но было бы неплохо, если бы у нас был древовидный интерпретатор, который сказал бы нам, что причина их высокого риска в том, что у нас нет для них недавней ЭКГ / ЭКГ. Без недавней ЭКГ мы не можем быть уверены в их сердечном здоровье. В таком случае это не будет похоже на то, чтобы держать их в больнице две недели, а пусть сделают ЭКГ. Итак, это взаимодействие между интерпретацией и точностью прогнозов.

Вопрос. Как я понимаю, вы говорите, что прогностические модели действительно хороши, но для того, чтобы на самом деле ответить на эти вопросы, нам действительно нужно сосредоточиться на интерпретируемости этих моделей [24 : 59 ]? Думаю, да. Более конкретно, я говорю, что мы только что изучили целый ряд техник случайной интерпретации леса, и поэтому я пытаюсь объяснить, почему. Причина в том, что большую часть времени я бы сказал, что интерпретация - это то, что нас волнует. Вы можете создать диаграмму или таблицу без машинного обучения, и именно так работает большая часть мира. Большинство менеджеров строят всевозможные таблицы и диаграммы без какого-либо машинного обучения. Но они часто принимают ужасные решения, потому что не осознают важность характеристики цели, которая их интересует, и поэтому таблица, которую они создают, состоит из вещей, которые на самом деле являются наименее важными в любом случае. Или они просто составляют одномерную диаграмму, а не график частичной зависимости, поэтому они на самом деле не понимают, что отношения, на которые, как они думали, они смотрят, полностью связаны с чем-то другим. Так что я как бы выступаю за то, чтобы специалисты по данным стали более активно участвовать в разработке стратегии и в попытках использовать машинное обучение, чтобы действительно помочь бизнесу в достижении всех его целей. Есть такие компании, как dunnhumby, огромная компания, которая ничего не делает, кроме розничных приложений с машинным обучением. Я считаю, что есть какой-то дурацкий продукт, который вы можете купить, который поможет вам выяснить, разместлю ли я свой новый магазин в этом месте по сравнению с тем, сколько людей собираются делать покупки в нем. Или, если я кладу свои подгузники в эту часть магазина, а не в эту, как это повлияет на покупательское поведение и т. Д. Так что также хорошо осознавать, что подмножество приложений машинного обучения, о которых вы обычно слышите в техническая пресса или что-то в этом роде - это крошечный набор материалов, которые делают Google и Facebook. Где еще подавляющее большинство вещей, которые действительно заставляют мир вращаться, - это приложения, которые на самом деле помогают людям создавать вещи, покупать вещи, продавать вещи, строить вещи и т. Д.

Вопрос. Что касается интерпретации дерева, мы рассмотрели, какая функция была более важной для конкретного наблюдения. Для предприятий у них есть огромное количество данных, и им нужна эта интерпретация для множества наблюдений, так как же их автоматизировать? Устанавливают ли порог [27:50]? Подавляющее большинство моделей машинного обучения ничего не автоматизируют. Они предназначены для предоставления информации людям. Так, например, если вы являетесь оператором телефонной службы обслуживания клиентов страховой компании и ваш клиент спрашивает вас, почему мое продление на 500 долларов дороже, чем в прошлый раз, то, надеюсь, страховая компания предоставит в ваш терминал тот маленький экран, который показывает результат интерпретатор дерева или что-то еще. Таким образом, вы можете прыгнуть туда и сказать клиенту, что в прошлом году вы использовали этот другой почтовый индекс, который имеет меньшее количество угонов автомобилей, а в этом году вы также фактически поменяли свой автомобиль на более дорогой. Таким образом, речь идет не столько о пороговых значениях и автоматизации, сколько о том, чтобы сделать эти выходные данные модели доступными для лиц, принимающих решения в организации, независимо от того, находятся ли они на высшем стратегическом уровне, например, собираемся ли мы закрыть весь этот продукт или нет, вплоть до оперативный уровень индивидуального обсуждения с заказчиком.

Другим примером является планирование самолетов и управление выходами на посадку. Есть много компаний, которые так поступают, и в основном в аэропорту есть люди, чья работа состоит в том, чтобы указывать каждому самолету, к какому выходу идти, выяснять, когда закрывать двери, и тому подобное. Идея в том, что вы даете им программное обеспечение, в котором есть информация, необходимая для принятия правильных решений. Таким образом, модели машинного обучения в конечном итоге встроены в это программное обеспечение, чтобы сказать: хорошо, что самолет, который в настоящее время прибывает из Майами, есть 48% -ная вероятность, что он опоздает более чем на 5 минут, и если это произойдет, то это будет стук- например, при ударе через остальную часть терминала. Вот как эти вещи сочетаются друг с другом.

Различные методы интерпретации случайного леса [37:17]

Существует множество приложений, и я хочу, чтобы вы поразмышляли над ними. Сядьте с одним из своих друзей и расскажите о нескольких примерах. Например, как мы будем проводить анализ отказов на производстве, кто будет это делать, зачем они это делают, какие модели они могут использовать, какие данные они могут использовать. Начни практиковаться и получи смысл. Затем, когда вы находитесь на рабочем месте и разговариваете с менеджерами, вы хотите сразу понять, что человек, с которым вы разговариваете, - чего он пытается достичь, какие рычаги они должны использовать, какие данные они используют. иметь возможность использовать эти рычаги для достижения этой цели, и, следовательно, как мы можем построить модели, которые помогут им в этом, и какие прогнозы они должны будут делать. Итак, вы можете провести с этими людьми по-настоящему вдумчивый и чуткий разговор, а затем сказать: «Чтобы уменьшить количество уходящих клиентов, я думаю, вы пытаетесь выяснить, для кого вы должны предлагать более выгодные цены» и т. Д.

Обсудив, почему они важны, давайте теперь напомним себе, что они из себя представляют.

Уверенность, основанная на вариации дерева

Что это нам говорит? Почему это может быть интересно? Как рассчитывается?

Важность функции [«42:36»]

Дисперсия предсказаний деревьев. Обычно прогноз - это просто среднее значение, это дисперсия деревьев.

Просто чтобы заполнить здесь детали, то, что мы обычно делаем здесь, - это часто берем только одну строку / наблюдение и выясняем, насколько мы уверены в этом (то есть, какая разница в деревьях для этого), или мы можем сделать то, что мы сделал здесь для разных групп [«39:34»].

Мы сделали здесь, чтобы сказать, есть ли какие-либо группы, в которых мы очень не уверены (что может быть связано с очень небольшими наблюдениями). Что-то, что я думаю, даже более важно, когда вы используете это в оперативном режиме. Допустим, вы разрабатываете алгоритм принятия кредитного решения. Итак, мы пытаемся определить, представляет ли Джереми хороший риск или плохой. Должны ли мы одолжить ему миллион долларов. А случайный лес говорит: Я думаю, что он хороший риск, но я совсем не уверен. И в этом случае мы могли бы сказать: Хорошо, может, мне не стоит давать ему миллион долларов. А где еще, если случайный лес сказал: Я думаю, что он хороший риск, и я очень в этом уверен, тогда нам гораздо удобнее дать ему миллион долларов. И я очень рискую. Так что не стесняйтесь дать мне миллион долларов. Раньше я проверял случайный лес - другой блокнот. Не в репо 😆

Мне довольно сложно дать вам, ребята, непосредственный опыт интерпретации такого рода отдельного наблюдения, потому что это действительно та вещь, которую вам действительно нужно выносить на передний план [«41:30»]. Это не то, что вы действительно можете так часто использовать в контексте Kaggle, но это больше похоже на то, что если вы действительно создаете некий алгоритм, который принимает важные решения, которые могут стоить много денег, вы, вероятно, не так сильно заботитесь о среднем предсказание случайного леса, но, возможно, вас действительно волнует среднее значение минус пара стандартных отклонений (то есть каков худший прогноз). Может быть, есть целая группа, в которой мы не уверены, так что эта уверенность основана на разбросе дерева.

Студент: Это в основном для того, чтобы выяснить, какие функции важны. Вы берете каждую функцию, перемешиваете значения в этой функции и проверяете, как меняются прогнозы. Если он сильно отличается, это означает, что функция действительно важна; иначе это не так уж важно.

Частичная зависимость [50:46]

Джереми: Это было потрясающе. Все было совершенно правильно. Были некоторые детали, которые мы немного упустили. Кто-нибудь еще хочет перейти к более подробному описанию того, как это рассчитывается? Как именно мы рассчитываем важность функции для конкретной функции?

Учащийся: После того, как вы закончите построение случайной модели леса, вы берете каждый столбец и случайным образом перемешиваете его. И вы запускаете прогноз и проверяете оценку валидации. Если после перетасовки одного из столбцов он становится плохим, это означает, что этот столбец был важен, поэтому он имеет более высокую важность. Я не совсем уверен, как мы количественно оцениваем важность функции.

Джереми: Хорошо, отлично. Вы знаете, как мы определяем важность функции? Это было отличное описание. Для количественной оценки мы можем взять разницу в R² или какую-либо оценку. Итак, допустим, у нас есть наша зависимая переменная, которой является цена, и множество независимых переменных, включая год производства [«44:22»]. Мы используем все это для создания случайного леса, и это дает нам наши прогнозы. Мы можем сравнить это, чтобы получить R², RMSE, все, что вам интересно, из модели.

Ключевым моментом здесь является то, что я не хочу переучивать весь свой случайный лес. Это медленно и скучно, поэтому используйте существующие случайные леса. Как я могу определить, насколько важным был год? Итак, мы предложили случайным образом перемешать весь столбец. Теперь эта колонка совершенно бесполезна. у него такое же среднее значение, такое же распределение. Все в нем одинаково, но нет никакой связи между фактическим годом и тем, что сейчас в этой колонке. Я его перемешал наугад. Итак, теперь я пропускаю эту новую версию через тот же случайный лес (чтобы не было переобучения), чтобы получить новый ŷ (ym). Затем я могу сравнить это с моими фактическими данными, чтобы получить RMSE (гм). Итак, теперь я могу начать создавать небольшую таблицу, в которой я получил исходное среднеквадратичное значение (например, 3), с зашифрованным значением YearMade со среднеквадратичным значением 2. Среднеквадратическое значение зашифрованного корпуса было равно 2,5. Тогда я просто беру эти различия. Для YearMade важность - 1, Enclosure - 0,5 и т. Д. Насколько хуже стала моя модель после перетасовки этой переменной.

Вопрос: Суммируются ли все значения в один [«46:52»]? Честно говоря, я никогда не смотрел, что такое единицы, поэтому я не совсем уверен. Если кому-то интересно, мы можем проверить это в течение недели. Взгляните на код sklearn и посмотрите, что это за единицы измерения, потому что я никогда не удосужился проверить. Хотя я не проверяю конкретно единицы измерения, я проверяю их относительную важность. Вот пример.

Так . Вместо того, чтобы просто сказать, какова первая десятка, вчера один из студентов практикума спросил меня о важности характеристики, где они сказали: О, я думаю, что эти три важны, и я указал, что первая из них была в тысячу раз важнее, чем второй. Так что посмотрите здесь на относительные числа. Так что в этом случае это похоже на нет, не смотри на тройку лидеров, посмотри на ту, которая в тысячу раз важнее, и игнорируй все остальное. Ваша естественная склонность - быть точным и осторожным, но здесь вам нужно преодолеть это и быть очень практичным. Это в тысячу раз важнее. Не тратьте время ни на что другое. Затем вы можете пойти поговорить со своим руководителем проекта и сказать, что это в тысячу раз важнее. А потом они могли сказать: О, это была ошибка. Этого там не должно было быть. У нас фактически нет этой информации во время принятия решения или по какой-либо другой причине мы не можем использовать эту переменную . Так что вы можете удалить его и посмотреть. Или они могли сказать: Черт возьми, я понятия не имел, что это намного важнее, чем все остальное вместе взятое. Так что давайте забудем об этом случайном лесу и просто сосредоточимся на понимании того, как лучше собрать эту одну переменную и лучше использовать ее . Так что это то, что всплывает довольно часто, и на самом деле еще одно место, которое всплывало только вчера. Другой студент практикума спросил меня: Я занимаюсь этим проектом по медицинской диагностике, и мой R² составляет 0,95 для заболевания, которое, как мне сказали, очень трудно диагностировать. Это случайный лесной гений или что-то не так? И я сказал: помните, второе, что вы делаете после создания случайного леса, - это определяете важность функции, так же как и важность функции, и вы, вероятно, обнаружите, что верхнего столбца там не должно быть. Так вот что произошло. Он вернулся ко мне через полчаса и сказал: «Да, я сделал важность функции, и вы были правы. Верхний столбец в основном представлял собой другую кодировку зависимой переменной. Я удалил его, и теперь мой R² составляет -0,1, так что это улучшение .

Еще мне нравится смотреть на этот график [«50:03»]:

В основном это говорит о том, где все сглаживается, с точки зрения того, на каких из них я должен действительно сосредоточиться. Так что это самый важный. Когда я проводил кредитный скоринг в сфере телекоммуникаций, я обнаружил, что существует девять переменных, которые в основном очень точно предсказывают, кто в конечном итоге будет платить за свой телефон, а кто нет. Помимо того, что в итоге получилась модель, которая сэкономила им три миллиарда долларов в год на мошенничестве и затратах по кредитам, она также позволила им существенно изменить свой процесс, чтобы они сосредоточились на сборе этих девяти переменных намного лучше.

Это интересно. Очень важно, но в некотором смысле сложно обдумать.

Интерпретатор дерева [1:02:43]

Давайте вернемся к тому, как мы вычисляем это через мгновение, но первое, что нужно понять, это то, что в подавляющем большинстве случаев, когда кто-то показывает вам диаграмму, это будет похоже на одномерную диаграмму, которая просто берет данные из базы данных, и они построят график X против Y. Тогда менеджеры склонны хотеть принять решение. Так что это было бы «о, здесь есть этот спад, поэтому мы должны прекратить иметь дело с оборудованием, произведенным между 1990 и 1995 годами. Это большая проблема, потому что данные реального мира имеют много таких взаимодействий. Так что, возможно, примерно в то время, когда эти вещи начали продаваться, был спад, или, может быть, примерно в то время люди покупали больше оборудования другого типа. Итак, как правило, мы действительно хотим знать, при прочих равных условиях, какова взаимосвязь между YearMade и SalePrice. Потому что, если вы думаете об идее рычагов трансмиссии, вам действительно нужна модель, которая говорит, что если я изменю этот рычаг, как это изменит мою цель. Разделяя их с помощью частичной зависимости, вы можете сказать, что на самом деле это связь между YearMade и SalePrice при прочих равных условиях:

Итак, как мы это вычислим?

Студент: Например, для переменной YearMade вы сохраняете все остальные переменные постоянными. Затем вы собираетесь передать каждое значение YearMade, после чего обучить модель. Итак, для каждой модели у вас будут голубые линии, а медиана будет желтой линией.

Джереми: Итак, давайте попробуем это нарисовать. Под «оставить все остальное постоянным» она имеет в виду, что оставьте их такими, какими они есть в наборе данных. Так же, как когда мы указали важность функций, мы оставим остальную часть набора данных как есть. И мы собираемся сделать график частичной зависимости для YearMade. Итак, у нас есть все остальные строки данных, которые мы оставим как есть. Вместо случайного перемешивания YearMade мы собираемся заменить каждое отдельное значение на одно и то же - 1960. Как и раньше, теперь мы пропускаем это через существующие случайные леса, которые мы не переобучили и не изменили, чтобы получить отменить набор прогнозов y1960. Затем мы можем изобразить это на графике - YearMade против частичной зависимости.

Теперь мы можем сделать это для 1961, 1962, 1963 и так далее. Мы можем сделать это в среднем для всех, или мы можем сделать это только для одного из них. Итак, когда мы делаем это только для одного из них, меняем его YearMade и пропускаем этот единственный объект через нашу модель, это дает нам одну из этих синих линий. Таким образом, каждая из этих синих линий представляет собой отдельную строку, поскольку мы меняем ее YearMade с 1960 на 2008. Итак, тогда мы можем просто взять медианное значение всех этих синих линий, чтобы сказать в среднем, какова взаимосвязь между YearMade и ценой всех других вещей. будучи равными. Почему это работает? Почему этот процесс говорит нам о взаимосвязи между YearMade и ценой при прочих равных условиях? Может быть, стоит подумать о действительно упрощенном подходе [«56:03»]. Действительно упрощенно можно сказать, каков средний аукцион? Какая у нас средняя дата продажи, какой тип машин наиболее распространен? В каком месте мы в основном продаем вещи? И мы могли бы придумать одну строку, которая представляет средний аукцион, а затем мы могли бы сказать хорошо, давайте пропустим эту строку через случайный лес, но заменим ее YearMade на 1960, а затем сделаем это снова с 1961, и мы могли бы нанести их на наш маленький Диаграмма. Это дало бы нам версию взаимосвязи между YearMade и продажной ценой при прочих равных условиях. Но что, если бы тракторы выглядели так, а экскаваторы-погрузчики - ровной линией:

Тогда взяв среднее значение, можно скрыть тот факт, что существуют совершенно разные отношения. Вместо этого мы обычно говорим: Хорошо, наши данные говорят нам, какие вещи мы склонны продавать, кому мы склонны их продавать и когда мы склонны их продавать, так что давайте воспользуемся этим. Затем мы фактически выясняем для каждой синей линии, вот реальные примеры этих отношений. Итак, что мы можем сделать, это не только построить график медианы, но и провести кластерный анализ, чтобы выявить несколько различных форм.

В этом случае все они выглядят в значительной степени как разные версии одной и той же вещи с разными наклонами, поэтому мой главный вывод из этого будет заключаться в том, что связь между продажной ценой и годом выпуска в основном прямая. И помните, это был журнал продажной цены, так что на самом деле он показывает нам экспоненту. Так что именно здесь я хотел бы использовать опыт в предметной области: «Хорошо, вещи обесцениваются с течением времени в постоянном соотношении, поэтому я ожидаю, что более старые вещи, сделанные годом ранее, будут иметь эту экспоненциальную форму». Как я уже упоминал, именно здесь, в самом начале моего проекта машинного обучения, я обычно стараюсь не использовать как можно больше знаний в предметной области и позволять данным говорить. Итак, один из вопросов, который я получил сегодня утром, был: «Есть что-то вроде идентификатора продажи и идентификатора модели, я должен выбросить их, верно? Потому что это просто удостоверения личности ». Нет. Не делайте никаких предположений относительно ваших данных. Оставьте их, и если они окажутся очень важными предсказателями, вы захотите выяснить, почему это так. Но теперь я на другом конце своего проекта. Я сделал свою важность функции, я вытащил материал, который взят из этой дендрограммы (то есть избыточные функции), я смотрю на частичную зависимость, и теперь я думаю, хорошо, эта форма - то, что я ожидал? Так что даже лучше, прежде чем строить это, прежде всего подумайте, какой формы я бы ожидал от этого. Потому что всегда легко оправдываться перед собой постфактум, о, я знал, что это будет выглядеть так. Итак, какую форму вы ожидаете, и тогда это именно та форма? В данном случае я бы сказал, что это то, чего я ожидал. Где еще предыдущий сюжет не такой, как я ожидал. Таким образом, сюжет частичной зависимости действительно вытащил основную истину.

Вопрос. Допустим, у вас есть 20 важных функций. Собираетесь ли вы измерить частичную зависимость для каждой из них [«1:00:05»]? Если есть двадцать важных функций, то я сделаю частичную зависимость для всех из них, где важные означает, как будто это рычаг, который я действительно могу потянуть, величина его размера не намного меньше остальных девятнадцати, вы знаете, исходя из обо всех этих вещах я должен позаботиться об этой функции, и тогда я захочу узнать, как она связана. По моему опыту, довольно необычно иметь такое количество функций, которые важны как с точки зрения эксплуатации, так и с точки зрения моделирования.

Вопрос: Как вы определяете важность [1:00:58]? Важно означает, что это рычаг (то есть что-то, что я могу изменить), и он находится на остром конце этого хвоста (слева):

Или, может быть, это не рычаг напрямую. Может быть, это как почтовый индекс, и я не могу сказать своим клиентам, где жить, но я мог бы сосредоточить свое новое маркетинговое внимание на другом почтовом индексе.

Вопрос: Имеет ли смысл делать попарное перемешивание для каждой комбинации двух функций и сохранять все остальное неизменным по важности функций, чтобы видеть взаимодействия и сравнивать оценки [«1:01:45»]? Вы не стали бы так делать из-за частичной зависимости. Я думаю, ваш вопрос действительно касается вопроса о том, можем ли мы сделать это для важности функции. Я считаю, что важность взаимодействия - очень важный и интересный вопрос. Но если сделать это путем случайного перемешивания каждой пары столбцов, если у вас есть сотня столбцов, это кажется трудоемким с точки зрения вычислений, возможно, невыполнимым. Итак, что я собираюсь сделать, так это после того, как мы поговорим об интерпретаторе дерева, я расскажу об интересном, но в значительной степени неизведанном подходе, который, вероятно, будет работать.

Принц: Я думал, что это больше похоже на важность функции, но важность функции предназначена для полной модели случайного леса, а этот интерпретатор дерева предназначен для важности функции для конкретного наблюдения. Допустим, речь идет о повторной госпитализации. Если пациент А будет повторно госпитализирован, какая функция для этого конкретного пациента повлияет и как мы можем это изменить. Он рассчитывается, начиная с прогноза среднего значения, а затем с учетом того, как каждая особенность меняет поведение конкретного пациента.

Экстраполяция [1:16:16]

Джереми: Я улыбаюсь, потому что это был один из лучших примеров технического общения, о котором я слышал за долгое время, так что действительно хорошо подумать, почему это было эффективно. То, что сделал Принц, он привел как можно более конкретный пример. Люди гораздо хуже понимают абстракции. Итак, если вы говорите: «Это требует какой-то функции, а затем в этой функции есть наблюдение», тогда это повторная госпитализация. Итак, возьмем конкретный пример. Еще один очень эффективный поступок, который он сделал, - это провести аналогию с тем, что мы уже понимаем. Итак, мы уже понимаем идею важности функций для всех строк в наборе данных. Итак, теперь мы собираемся сделать это для одной строки. Так что я действительно надеялся, что мы узнаем из этого опыта, как стать эффективными техническими коммуникаторами. Так что это был действительно отличный образец для подражания от Prince использования всех уловок, которые у нас есть, для эффективной технической коммуникации. Надеюсь, вы нашли это полезное объяснение. Мне нечего добавить к этому, кроме как показать вам, как это выглядит.

С помощью интерпретатора дерева мы выделили строку [«1:04:56»]:

Помните, когда мы говорили о доверительных интервалах в самом начале (то есть об уверенности, основанной на вариации дерева). Мы сказали, что вы в основном используете это для ряда. Так что это тоже будет для ряда. Это похоже на почему этого пациента, вероятно, повторно госпитализируют? Вот вся имеющаяся у нас информация об этом пациенте или, в данном случае, об этом аукционе. Почему этот аукцион такой дорогой? Затем мы вызываем ti.predict и получаем прогноз цены, смещение (то есть корень дерева - так что это просто средняя цена для всех, поэтому она всегда будет одинаковой), а затем вклады, которые насколько важна каждая из этих вещей:

Мы рассчитали, что в самом начале средняя цена была 10. Затем мы разделили корпус. Для людей с этим вольером средний показатель составил 9,5. Затем мы разделили по годам, произведенным меньше, чем в 1990 году, и средняя цена для тех, которые были произведены в том же году, составила 9,7. Затем мы разделили количество часов на счетчике, и с этой веткой мы получили 9,4.

Затем у нас есть конкретный аукцион, который мы проводим через дерево. Так уж получилось, что он идет по самому верхнему пути. У одного ряда может быть только один путь через дерево. Итак, мы закончили на 9.4. Затем мы можем создать столик. По мере прохождения мы начинаем сверху и начинаем с 10 - это наша предвзятость. И мы сказали, что вложение привело к изменению с 10 до 9,5 (то есть -0,5). Год выпуска изменил его с 9,5 на 9,7 (т.е. +0,2), затем счетчик изменил его с 9,7 на 9,4 (-0,3). Затем, если мы сложим все это вместе (10–0,5 + 0,2–0,3), то вот и предсказание.

Это приведет нас к нашей таблице Excel [«1:08:07»]:

На прошлой неделе мы использовали для этого Excel, потому что не было хорошей библиотеки Python для построения диаграмм водопада. Итак, мы увидели, что у нас есть отправная точка, это предвзятость, а затем мы получили каждый из наших вкладов, и в итоге мы получили нашу общую сумму. Теперь мир стал лучше, потому что Крис создал для нас модуль диаграммы водопада Python и поставил его на пипс. Так что больше никогда не придется использовать Excel для этого. Я хотел отметить, что водопадные диаграммы были очень важны в бизнес-коммуникациях, по крайней мере, с тех пор, как я занимаюсь бизнесом, то есть около 25 лет. Python может быть пару десятилетий назад. Но, несмотря на это, никто в мире Python так и не дошёл до того, что они действительно подумали: Знаешь, я собираюсь сделать диаграмму водопада, поэтому они не существовали до двух дней назад, то есть мир полон. того, что должно существовать, а чего нет. И не обязательно тратить много времени на создание. На это у Криса ушло около 8 часов, так что немалое количество времени, но вполне разумное. И теперь все больше людей, которым нужна диаграмма водопада Python, попадут в репозиторий Криса на Github и, надеюсь, найдут множество других участников USF, которые сделали ее еще лучше.

Чтобы помочь вам улучшить водопад Криса Python, вам нужно знать, как это сделать. Итак, вам нужно будет отправить запрос на перенос. Если вы используете что-то под названием «хаб», жизнь становится очень легкой для отправки запросов на включение. Они предлагают вам сделать псевдоним git на hub, потому что оказывается, что концентратор на самом деле является строгим надмножеством git. Он позволяет вам перейти к git fork, git push и git pull-request, и теперь вы отправили Крису запрос на перенос. Без хаба это на самом деле головная боль, и для этого нужно, например, зайти на сайт, заполнить формы и прочее. Таким образом, у вас нет причин не делать запрос на вытягивание. Я упоминаю об этом, потому что, когда вы проходите собеседование для приема на работу, я могу пообещать вам, что человек, с которым вы разговариваете, проверит ваш github, и если они увидят, что у вас есть история отправки продуманных запросов на перенос, которые принимаются в интересные библиотеки, это выглядит великолепно . Это выглядит великолепно, потому что показывает, что вы действительно вносите свой вклад. Это также показывает, что, если они принимаются, вы знаете, как создавать код, который соответствует человеческим стандартам кодирования, имеет соответствующую документацию, проходит их тесты и покрытие и т. Д. Поэтому, когда люди смотрят на вас и говорят: «О, вот кто-то, кто успешно вносил свой вклад, принимал запросы на вытягивание в библиотеки с открытым исходным кодом», это значительная часть вашего портфолио. И вы можете конкретно на это сослаться. Итак, либо я человек, который создает водопад Python, вот мое репо, либо я тот, кто внес форматирование чисел валюты в водопад Python, вот мой запрос на вытягивание. Каждый раз, когда вы видите что-то, что не работает правильно в любом программном обеспечении с открытым исходным кодом, которое вы используете, это не проблема, это отличная возможность, потому что вы можете исправить это и отправить запрос на перенос. Так что попробуйте. Это действительно здорово, когда вы впервые принимаете пул-реквест. И, конечно же, одна большая возможность - это библиотека fastai. Благодаря одному из наших студентов, теперь у нас есть строки документации для большей части библиотеки fastai.structured, снова полученные через запрос на перенос.

Есть ли у кого-нибудь вопросы о том, как рассчитать какой-либо из этих методов интерпретации случайного леса или почему мы могли бы захотеть их использовать [1:12:50]? Ближе к концу недели вам нужно будет собрать все это самостоятельно с нуля.

Вопрос: Просто взглянув на интерпретатор дерева, я заметил, что некоторые из значений - nan. Я понимаю, почему вы храните их в дереве, но как nan может иметь важность функции [1:13:19]? Позвольте мне передать его вам. Почему нет? Другими словами, как nan обрабатывается в Pandas и, следовательно, в дереве? Кто-нибудь помнит, заметит, что все они в категориальных переменных, как Pandas обрабатывает nan в категориальных переменных и как fastai с ними справляется? Pandas устанавливает для них код категории -1, а fastai добавляет единицу ко всем кодам категории, так что в итоге он равен нулю. Другими словами, помните, что к тому моменту, когда он попадает в случайный лес, это просто число, и это просто ноль. И мы сопоставляем его с описаниями здесь. Вопрос в том, почему случайный лес не может разделиться на ноль? Это просто еще один номер. Таким образом, это может быть nan, high, medium, low = 0, 1, 2, 3. Таким образом, отсутствующие значения - одна из тех вещей, которым обычно очень плохо учат. Часто людей учат некоторым способам удаления столбцов с отсутствующими значениями или строк с отсутствующими значениями или замены отсутствующих значений. Это никогда не то, чего мы хотим, потому что недостаток очень, очень часто бывает интересен. Таким образом, мы действительно узнали, что из нашей важности функции, соединительная система nan является одной из самых важных функций. По какой-то причине, ну, я мог догадаться, правда? Соединительная система nan предположительно означает, что это промышленное оборудование, не имеющее соединительной системы. Сейчас не знаю, что это за вид, но видимо дороже.

Я проводил этот конкурс на успех исследования университетского гранта, где, безусловно, наиболее важными предикторами было то, являются ли некоторые из полей нулевыми [1:15:41]. Оказалось, что это была утечка данных, и эти поля заполнялись только после принятия гранта на исследование. Так что это позволило мне выиграть конкурс Kaggle, но на самом деле не очень помогло университету.

Я собираюсь сделать что-то рискованное и опасное, а именно мы сделаем код в реальном времени. Причина, по которой мы собираемся заняться кодированием в реальном времени, заключается в том, что я хочу вместе с вами исследовать экстраполяцию, а также хочу дать вам представление о том, как вы можете быстро писать код в этой среде ноутбука. И это то, что вам нужно, чтобы уметь делать в реальном мире, и на экзамене вы можете быстро создать код, о котором мы собираемся поговорить.

Важность взаимодействия [1:17:24]

Мне очень нравится создавать синтетические наборы данных каждый раз, когда я пытаюсь исследовать поведение чего-либо, потому что, если у меня есть синтетический набор данных, я знаю, как он должен себя вести.

Это напоминает мне, что перед тем, как мы это сделаем, я пообещал, что мы поговорим о важности взаимодействия, и почти забыл.

Интерпретатор дерева сообщает нам вклады для конкретной строки на основе различий в дереве. Мы можем рассчитать это для каждой строки в нашем наборе данных и сложить их. Это говорит нам о важности функции. И это по-другому скажет нам о важности характеристик. Один из способов повысить важность функции - перетасовать столбцы по одному. Другой способ - создать интерпретатор дерева для каждой строки и сложить их. Ни один из них не правее других. На самом деле они оба довольно широко используются, так что это своего рода важность функций типа 1 и типа 2. Так что мы могли бы попытаться немного расширить это. Чтобы сделать не просто важность одной переменной, но важность взаимодействия. Теперь вот в чем дело. То, что я собираюсь описать, описать очень легко. Он был описан Брейманом еще тогда, когда были впервые изобретены случайные леса, и является частью коммерческого программного продукта компании Salford systems, имеющей торговую марку на случайных лесах. Но это не часть какой-либо библиотеки с открытым исходным кодом, о которой я знаю, и я никогда не видел академической статьи, которая действительно внимательно изучала бы ее. Итак, то, что я собираюсь описать здесь, - это огромные возможности, но это также похоже на то, что есть много-много деталей, которые необходимо конкретизировать. Но вот основная идея.

Вернуться к живому программированию [1:24:50]

Эта конкретная разница здесь (выделена красным) не только из-за года, но и из-за комбинации года и вложения [«1:19:15»]:

Тот факт, что это 9,7, объясняется тем, что вложение было в этом филиале и год изготовления был в этом филиале. Другими словами, мы могли бы сказать, что вклад огораживания, связанный с выполненным годом, составляет -0,3.

Так в чем разница между 9,5 и 9,4? Это взаимодействие созданного года и часов на счетчике. Я использую звездочку здесь не в значении «время», а в значении «с кем взаимодействовал». Это обычный способ делать такие вещи, как формулы R. Таким образом, год, проведенный во взаимодействии со счетчиком, имеет вклад -0,1.

Возможно, мы могли бы также сказать от 10 до 9,4, это также показывает взаимодействие между измерителем и корпусом с одной вещью между ними. Таким образом, мы могли бы сказать, что счетчик, взаимодействующий с корпусом, равняется… и что это должно быть? Должно быть -0,6? Некоторые способы кажутся несправедливыми, потому что мы также учитываем влияние прошедшего года. Так что, возможно, должно быть -0,6, и, может быть, нам следует добавить это 0,2 (9,5 → 9,7). Это как детали, на которые я даже не знаю ответа. Как лучше всего назначить вклад каждой паре переменных на этом пути? Но ясно, что концептуально мы можем. Все пары переменных в этом пути представляют взаимодействия.

Вопрос: Почему вы не заставляете их стоять рядом друг с другом на дереве [«1:21:47»]? Не скажу, что это неправильный подход. Но я не думаю, что это правильный подход. Потому что кажется, что на этом пути счетчик и корпус взаимодействуют. Кажется, что непризнание этого вклада отбрасывает информацию. Но я не уверен. Несколько лет назад у меня был один из моих сотрудников в Kaggle, который действительно провел некоторые исследования и разработки по этому поводу, и они действительно обнаружили (я был недостаточно близко, чтобы знать, как они справляются с этими деталями), но у них это работало очень хорошо. Но, к сожалению, он так и не увидел свет как программный продукт. Но это то, что, возможно, группа из вас могла бы собрать и построить. Попробуйте погуглить, чтобы проверить, но я действительно не думаю, что в любой библиотеке с открытым исходным кодом есть какие-либо важные элементы взаимодействия.

Вопрос: не будет ли это исключать взаимодействия между переменными, которые не имеют значения, пока они не взаимодействуют? Скажем, ваша строка никогда не решает разделиться по этому пути, но эта переменная, взаимодействующая с другой, становится вашим самым важным разделением [1:22:56]. Я не думаю, что это произойдет. Потому что, если есть взаимодействие, которое важно только потому, что это взаимодействие (а не на одномерной основе), оно будет иногда появляться, предполагая, что вы установили максимальное количество функций меньше единицы, поэтому оно появится на некотором пути.

Вопрос: что подразумевается под взаимодействием? Это умножение, соотношение, сложение [1:23:31]? Средство взаимодействия появляется на том же пути через дерево. В приведенном выше примере существует взаимосвязь между корпусом и годом создания, потому что мы разветвлялись по корпусу, а затем мы разветвлялись по году создания. Итак, чтобы добраться до 9,7, мы должны иметь определенное значение ограждения и определенное значение года.

Вопрос: что, если вы спуститесь по средним листам между двумя объектами, которые вы пытаетесь наблюдать, и при этом также примете во внимание окончательную меру? Я имею в виду, что если мы продолжим дерево вниз, у вас будет много мер, таких как две вещи, на которые вы пытаетесь смотреть, а также промежуток между шагами. Кажется, есть способ усреднить информацию между ними [1:24:03]? Может быть. Я думаю, что нам следует поговорить об этом на форуме. Я думаю, что это увлекательно, и я надеюсь, что мы создадим что-то отличное, но мне нужно писать код в реальном времени. Это была отличная дискуссия. Продолжайте думать об этом и проводите эксперименты.

Итак, чтобы поэкспериментировать с этим, вы почти наверняка сначала захотите создать синтетический набор данных. Это похоже на y = x1 + x2 + x1*x2 или что-то в этом роде. Что-то, о чем вы знаете, что есть этот эффект взаимодействия, а его нет, и вы хотите убедиться, что важность функции, которую вы получаете в конце, соответствует вашим ожиданиям.

Горизонтальность: в бизнесе горизонтальность означает то, что вы делаете в разных сферах бизнеса. то есть все, что связано с маркетингом.

Так что, вероятно, первым шагом будет определение важности одной переменной с использованием подхода в стиле интерпретатора дерева [«1:25:14»]. В этом есть одна хорошая особенность: на самом деле не имеет значения, сколько у вас данных. Все, что вам нужно сделать, чтобы рассчитать важность функции, - это просто пролистать дерево. Таким образом, вы должны уметь писать на самом деле довольно быстро, поэтому даже написание на чистом Python может быть достаточно быстрым в зависимости от размера вашего дерева.

Мы собираемся поговорить об экстраполяции, и первое, что я хочу сделать, это создать синтетический набор данных с простой линейной зависимостью. Мы собираемся сделать вид, что это временной ряд. Итак, нам нужно создать несколько значений x. Самый простой способ создать некоторые синтетические данные этого типа - использовать linspace, который просто создает некоторые равномерно распределенные данные между началом и остановкой по умолчанию 50 наблюдений.

Затем мы собираемся создать зависимую переменную, поэтому предположим, что существует линейная связь между x и y, и давайте добавим к ней немного случайности. random.uniform между низким и высоким, поэтому мы можем добавить, например, где-то между -0,2 и 0,2.

Следующее, что нам нужно, это форма, которая, в основном, определяет размеры этих случайных чисел, и, очевидно, мы хотим, чтобы они были той же формы, что и форма x. Так что мы можем просто сказать x.shape.

Другими словами, (50,) это x.shape. Помните, что когда вы видите что-то в круглых скобках с запятой, это кортеж, в котором есть только один элемент. Это фигура 50, поэтому мы добавили 50 случайных чисел. Теперь мы можем их построить.

Хорошо, вот и наши данные. Когда вы оба работали специалистом по данным или сдавали экзамены в этом курсе, вам нужно было быстро создать такой набор данных, добавить его в график, не задумываясь слишком долго. Как видите, вам совсем не обязательно много запоминать. Вам просто нужно знать, как нажать shift + tab, чтобы проверить названия параметров, Google или что-то еще, чтобы попытаться найти linspace, если вы забыли, как это называется.

Итак, предположим, что это наши данные [«1:28:33»]. Теперь мы собираемся построить модель случайного леса, и я хочу построить модель случайного леса, которая будет действовать так, как если бы это был временной ряд. Так что я собираюсь взять левую часть в качестве тренировочного набора. И возьмите правильную часть в качестве нашего набора для проверки или тестирования, как мы это делали в бакалейных магазинах или бульдозерах.

Мы можем использовать точно такой же код, который мы использовали в split_vals. Итак, мы можем сказать:

Это разбивает его на первые 40 по сравнению с последними 10. Мы можем сделать то же самое для y, и вот мы.

x_trn, x_val = x[:40], x[40:]

Следующее, что нам нужно сделать, это создать случайный лес и подогнать его под требования x и y.

y_trn, y_val = y[:40], y[40:]

На самом деле это приведет к ошибке, и причина в том, что он ожидает, что x будет матрицей, а не вектором, потому что он ожидает, что x будет иметь несколько столбцов данных.

m = RandomForestRegressor().fit(x, y)

Поэтому важно знать, что матрица с одним столбцом - это не то же самое, что вектор.

Итак, если я попытаюсь запустить это, «Ожидаемый 2D-массив, вместо этого получил 1D-массив»:

Итак, нам нужно преобразовать одномерный массив в двухмерный. Помните, я сказал, что x.shape это (50,). Итак, x имеет одну ось, а ранг x равен 1. Ранг переменной равен длине ее формы - количеству осей у нее. Вектор мы можем рассматривать как массив ранга 1, а матрицу как массив ранга 2. Я очень редко использую такие слова, как вектор и матрица, потому что они бессмысленны - конкретный пример чего-то более общего: все они являются N-мерными тензорами. или N размерных массивов. Итак, о N-мерном массиве мы можем сказать, что это тензор ранга N. Они в основном означают одно и то же. Физики сходят с ума, когда вы говорите, что, поскольку для физика тензор имеет вполне конкретное значение, но в машинном обучении мы обычно используем его таким же образом.

Итак, как нам превратить одномерный массив в двумерный массив. Есть несколько способов сделать это, но в основном мы разрезаем его. Двоеточие (:) означает «дай мне все на этой оси». :,None означает "дать мне все" по первой оси (это единственная ось, которая у нас есть), а затем None - это специальный индексатор, что означает добавление здесь оси единиц. Итак, позвольте мне показать вам.

Он имеет форму (50, 1), значит, это ранг 2. У него две оси. Одна из них - очень скучная ось - это длина в одну ось. Итак, переместим None влево. Есть (1, 50). Напомню, что оригинал - это (50,).

Итак, вы можете видеть, что я могу поместить None в качестве специального индексатора, чтобы ввести там новую ось единиц измерения. Итак, x[None,:] имеет одну строку и пятьдесят столбцов. В x[:,None] пятьдесят строк и один столбец - это то, что нам нужно. Подобная игра с рангами и измерениями будет становиться все более важной в этом курсе и в курсе глубокого обучения. Так что потратьте много времени на нарезку с помощью None, нарезку с другими вещами, попытайтесь создать трехмерные, четырехмерные тензоры и так далее. Я покажу вам два трюка.

Во-первых, вам никогда не нужно писать ,:, как всегда предполагалось. Итак, это одно и то же:

И вы все время видите это в коде, поэтому вам нужно это распознать.

Второй трюк - это 40_ добавление оси во втором измерении (или, я полагаю, в измерении индекса 1). Что, если я всегда захочу поместить это в последнее измерение? Часто наши тензоры меняют размеры без нашего внимания, потому что вы перешли от одноканального изображения к трехканальному или от одиночного изображения к мини-пакету изображений. Внезапно появляются новые измерения. Так что сделайте все в общем, я бы сказал ..., что означает столько измерений, сколько вам нужно, чтобы заполнить это. Итак, в этом случае (x[…, None].shape) это точно так же, но я всегда старался писать так, потому что это означает, что он будет продолжать работать по мере того, как я получаю тензоры более высоких измерений.

В данном случае мне нужно 50 строк и один столбец, поэтому я назову это x1. Давайте теперь воспользуемся этим здесь, и теперь это двумерный массив, и я могу создать свой случайный лес.

Тогда я мог бы это построить, и именно здесь вам нужно будет включить свои мозги, потому что люди сегодня утром получили это очень быстро, что было очень впечатляюще. Я собираюсь составить y_trn заговор против m.predict(x_trn). Прежде чем я начну, как это будет выглядеть? В принципе, должно быть так же. Надеемся, что наши прогнозы совпадают с фактами. Таким образом, это должно попадать в линию, но есть некоторая случайность, поэтому это не совсем так.

Это было легко. А теперь займемся самым сложным, веселым. Как это будет выглядеть?

Подумайте о том, что делают деревья, и подумайте о том, что у нас есть набор проверки справа и обучающий набор слева:

Так что представьте, что лес - это просто группа деревьев.

Тим: Я предполагаю, поскольку все новые данные на самом деле выходят за рамки первоначального объема, поэтому все будет в основном одинаковым - это как одна огромная группа [«1:37:15»].

Джереми: Да, верно. Так что забудьте про лес, давайте создадим одно дерево. Итак, мы, вероятно, собираемся сначала разделить где-то здесь, а затем разделить где-нибудь здесь… Итак, наше окончательное разделение - это самый правый узел. Наше предсказание, когда мы берем один из набора для валидации, мы собираемся пропустить его через весь лес и в конечном итоге получить правильное, наиболее среднее значение. Он не может предсказать ничего выше этого, потому что нет ничего выше среднего.

Поэтому очень важно понимать, что случайный лес - это не волшебство. Он просто возвращает среднее значение ближайших наблюдений, когда поблизости находится что-то вроде «пространства деревьев». Итак, давайте запустим его и посмотрим, прав ли Тим

Чёрт возьми, это ужасно. Если вы не знаете, как работают случайные леса, это вас полностью облажает. Если вы думаете, что он действительно сможет экстраполировать на какие-либо данные, которых раньше не видел, особенно на будущий период времени, то это не так. Просто не может. Это просто усреднение того, что уже было видно. Это все, что он может.

Итак, мы поговорим о том, как избежать этой проблемы. В прошлом уроке мы немного поговорили о попытках избежать этого, избегая ненужных переменных, зависящих от времени, где это возможно. Но, в конце концов, если у вас действительно есть временной ряд, который выглядит так, нам действительно нужно иметь дело с проблемой. Один из способов решения проблемы - использование нейронной сети. Используйте что-то, что действительно имеет функцию или форму, которая действительно может соответствовать чему-то, что действительно имеет функцию или форму, которая действительно может соответствовать чему-то вроде этого, так что это будет хорошо экстраполировано:

Другой подход - использовать все методы временных рядов, которые вы, ребята, изучаете на утреннем уроке, чтобы соответствовать какому-то временному ряду, а затем устранять его тренд. Затем вы получите точки с удаленным трендом, а затем воспользуетесь случайным лесом для их предсказания. Это особенно круто, потому что представьте, что ваш случайный лес на самом деле пытался предсказать данные, которые находились в двух разных состояниях. Итак, синие там внизу, а красные здесь.

Если вы попытаетесь использовать случайный лес, это будет довольно ужасно, потому что время будет казаться гораздо более важным. Так что, по сути, он по-прежнему будет разделяться вот так и вот так, а затем, наконец, когда он дойдет до левого угла, это будет типа «о, хорошо, теперь я вижу разницу между состояниями».

Другими словами, когда у вас есть этот большой отрезок времени, вы не увидите других взаимосвязей в случайном лесу, пока каждое дерево не займется временем. Таким образом, один из способов исправить это - использовать машину для повышения градиента (GBM). GBM создает небольшое дерево и пропускает все через это первое маленькое дерево (которое может быть временным деревом), затем вычисляет остатки, а следующее маленькое дерево просто предсказывает остатки. Так что это все равно что избавиться от тренда, верно? GBM все еще не может экстраполировать на будущее, но, по крайней мере, они могут более удобно работать с данными, зависящими от времени.

Мы будем говорить об этом гораздо больше в течение следующих двух недель, и, в конце концов, решением будет просто использование нейронных сетей. Но на данный момент использование какого-либо анализа временных рядов, устранение тренда, а затем использование случайного леса, - это совсем не плохой метод. Если вы играете во что-то вроде конкурса бакалейных товаров в Эквадоре, это было бы действительно хорошей вещью, с которой можно поиграть.

Уроки: «1» ・ «2» ・ «3» ・ «4» ・ «5» ・ «6» ・ «7» ・ «8» ・ «9» ・ «10» ・ « 11 »・« 12 »

Машинное обучение 1: Урок 6