Примечание. Первоначально текст был написан в августе 2019 года, до выхода фильма "Джокер".

Клянусь, я собирался написать о чем-то важном.

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

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

Создание дерева решений с некатегоризированными Bat-данными

Скажем, гипотетически, что вы используете науку о данных, чтобы предсказать вероятность того, что вам понравится фильм о Бэтмене. Как и любой здоровый, эмоционально зрелый взрослый, вы приступаете к созданию фрейма данных CSV, каталогизирующего фильмы, выпущенные в кинотеатрах, в которых Бэтмен хотя бы косвенно фигурирует. Затем вы классифицируете, понравились они вам, не понравились или вы их не видели, потому что они выглядели плохо (HSLB).

Это красиво, но как прогностическая модель она довольно неточна. С девятью «хорошими» фильмами, двумя «плохими» фильмами и тремя фильмами «HSLB» существует большая степень дисперсии. Как вы можете улучшить предсказательную силу ваших Bat-данных?

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

После этого я решил попробовать создать дерево решений, которое разделяло бы фильмы на те, что были сняты до 1967 года, и те, что были сняты после 1967 года.

Я не знаю, как я отнесусь к фильму о Бэтмене, снятому после 1967 года, но, основываясь на этих данных, я со 100% уверенностью знаю, что мне понравится фильм о Бэтмене, снятый в 1966 году или ранее. Это, безусловно, дерево решений, но хороший ли он? Как мы можем количественно оценить его эффективность?

Измерения эффективности

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

До разделения фильмы 9/14 были хорошими, 2/14 — плохими, а 3/14 — HSLB. Таким образом, наша примесь Джини:
((9/14)*(1-(9/14)))+((2/14)*(1-(2/14))) +((3/14)*(1-(3/14))) =
(45/196)+(24/196)+(33/196) =
102/196 = 0,52

Чтобы рассчитать примесь после разделения, мы вычисляем примесь Джини для каждого нового набора и умножаем ее на процент от общего набора. Таким образом, примесь Джини для фильмов до 1967 года равна:
((1/1)*(1-(1/1)))+((0/1)*(1- (0/1)))+((0/1)*(1-(3/14))) =
(1*0)+(0*1)+(0*1) = 0

Этот результат показывает, что первый бин не имеет категориальной примеси. 100% фильмов хорошие. Однако, поскольку эта категория представляет только одну четырнадцатую часть всего набора данных. Второй бин имеет остальные 13: 8 хороших, 2 плохих, 3 HSLB. Их примесь можно рассчитать следующим образом:
((8/13)*(1-(8/13)))+((2/13)*(1-(2/13))) +((3/13)*(1-(3/13))) =
(40/169)+(22/169)+(30/169) =
92/169 = 0,544

На самом деле это больше, чем в предварительно отсортированном бункере, но это уравновешивается тем фактом, что это всего 13/14 всего уровня примеси Джини. В целом, общая примесь Джини этого дерева решений может быть рассчитана как:
(0*(1/14)) + (0,544*(13/14)) = 0,505

Немного лучше, но далеко от нулевого результата, который мы ищем.

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

Используя эту формулу, мы можем рассчитать энтропию до разделения как:
((9/14)*log2(9/14))+((2/14)*log2(2/14)) +((3/14)*log2(3/14)) = 1,287

Аналогичным образом мы можем рассчитать энтропию после разделения группы Бэтмена до 1967 года как:
(1*log2(1))+(0*log2(0))+(0*log2(0) ) = 0

…и фильмы о Бэтмене после 1967 года:
((8/13)*log2(8/13))+((2/13)*log2(2/13))+((3 /13)*log2(3/13)) = 1,335

…приравнивается к общему уровню энтропии:
((0*(1/14)) + (1,335*(13/14)) = 1,24

Если мы вычтем обе эти суммы из начальных уровней, мы можем с уверенностью сказать, что дерево решений до/после 1962 года…

… дает общий прирост чистоты (потеря примесей) только:
0,52–0,505 = 0,015

…и прирост информации (потеря энтропии) всего лишь:
1,287–1,24 = 0,047

Должен быть лучший способ

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

…Python смог циклически пройти через каждый год раскола, вернуть чистоту и прирост информации и сказать мне, какой раскол дал максимальный прирост.

Как видите, наибольшую выгоду мы можем получить, разделив фильмы на снятые до 2015 года и снятые в 2015 году или позже. Результирующее дерево решений:

… имеет уровень примесей всего 0,336 и уровень энтропии 0,747 — почти половину наших первоначальных уровней. Даже без вычислений вы можете увидеть снижение уровня дисперсии, просто взглянув на полученные наборы данных.

Настоящая игра начинается

Это дерево решений хорошо, но само по себе далеко от совершенства. Если мы посмотрим фильмы до 2015 года, то увидим, что состав «хороший»: 8, «плохой»: 2. Неплохо, но далеко не идеально. Как мы можем улучшить эту корзину?

Мы могли бы продолжить разбивать его по годам, но нам нужно было бы сделать еще два разбиения, чтобы достичь категориальной чистоты. Кроме того, могут быть и другие факторы. Что если, например, мы создадим еще одну колонку, на этот раз повторяющую, был ли режиссером соответствующего фильма был Джоэл Шумахер? Что ж, если мы это сделаем, произойдет забавная вещь.

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

Результирующее дерево решений имеет примесь всего 0,107 и уровень энтропии всего 0,231, что улучшает набор нефильтрованных данных примерно на 0,413 и 1,055 соответственно. Тем не менее, ни один из них еще не достиг нуля, поэтому в категории после 2014 года еще есть возможности для улучшения.

Послушайте, мы все знаем лучший способ разделить этот набор данных.

И когда мы это делаем, наше дерево решений, наконец, достигает нулевого уровня как для примеси Джини, так и для энтропии.

Основываясь на этом дереве решений, мы можем в 100 % случаев подтвердить следующие наблюдения:
 – Если фильм о Бэтмене, не относящийся к Шумахеру, был снят до 2015 года или если фильм о Бэтмене после 2015 года был фильмом "Лего", то он был хорошо.
- Если Джоэл Шумахер снял фильм о Бэтмене, это было плохо.
- Если фильм о Бэтмене после 2015 года не был фильмом Lego, я не смотрел его, потому что думал, что он выглядит плохо .

Вывод:

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