22,5% возврата инвестиций!

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

Часть 1: Характеристики набора данных
Часть 2: Моделирование
Часть 3: Прогнозирование и оценка

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

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

Я построил простой случайный лес в scikit-learn, используя CV для выбора гиперпараметров и используя общие лучшие процедуры. Я получил этот сюжет:

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

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

Далее давайте посмотрим, что важно. Но сначала давайте сделаем небольшое отступление, чтобы заранее подумать о том, что может показаться правильным. Давайте на мгновение проигнорируем график переменной важности.

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

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

Тем не менее, боксер может драться один раз, а через 10 лет снова подраться. В этом сценарии P1_days_since_ff будет значением около 3650, но это не будет точным измерением накопленного износа этого боксера. За это время боксер провел бы всего два боя. К счастью для нас, следующие по важности особенности сюжета соответствуют суммарному количеству раундов, в которых сражались противники. Долгая жизнь на ринге явно может сыграть большую роль в успехе бойца (см. трагический пример Али против Холмса). И наоборот, слишком малое количество раундов также может сыграть роль в прогнозировании проигрыша.

Возвращаясь к графику важности переменных, две метрики качества оппозиции (QOO) показаны как важные, что хорошо не только потому, что для их построения потребовалось много усилий!

Переменные last6_L и last6_W имеют большую дисперсию, о чем свидетельствуют столбцы. Скорее всего, это связано с дискуссией о том, что отдельные записи неадекватно отражают качество оппозиции. Для некоторых боксеров последние 6 очень важны; для некоторых это не так. Это имеет смысл.

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

Положительным моментом является то, что из-за небольшого размера файла плоского набора данных (всего 1,85 ГБ) не было больших требований к операциям ввода-вывода или памяти. Таким образом, я мог безболезненно просматривать каждую эпоху на базовом облачном графическом процессоре AWS и легко повторять модели.

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

Приличная окончательная конфигурация выглядела так:

mlp_004 = Sequential()
mlp_004.add(Dense(64, activation='relu', input_dim=13))
mlp_004.add(Dense(64, activation='relu'))
mlp_004.add(Dense(64, activation='relu'))
mlp_004.add(Dropout(0.2))
mlp_004.add(Dense(64, activation='relu'))
mlp_004.add(Dense(1, activation='sigmoid'))
mlp_004.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
mlp_004.fit(X_train, y_train, batch_size=64, validation_split=0.2, nb_epoch=10)

Точность возвращенного набора проверки составила 73%.

Вот матрица путаницы:

Вот кривая ROC:

Итак, как я должен относиться к таким относительно скромным результатам в наш век ChatGPT и всех, кто беспокоится о том, что Арнольд возвращается?

Должен признаться, я чувствую себя довольно хорошо. Здесь полезно сделать шаг назад и повторить, что цель этого проекта — заработать на боксе. Если бы мы использовали этот алгоритм, чтобы указать, когда делать ставку, то мы предпочли бы большую точность за счет отзыва. Это означает, что лучше избегать ставок и упускать возможности выиграть (более низкий отзыв), если мы более уверены, что, когда мы ДЕЛАЕМ ставку, мы выиграем. Подробнее об этом подходе в третьем посте.

А пока позвольте мне еще раз немного побродить и обсудить один из многих моих экспериментов, которые не окупились. Я пошел вперед и пошел на лунный выстрел. Реальность такова, что когда дело доходит до ставок на бокс, одно дело ставить на исход W или L. Но если вы можете выиграть ставку, предсказывая более детальные типы результатов, выплаты будут на несколько порядков выше. Фактический тип результата — либо решение судей, либо настоящий нокаут, либо технический нокаут — вот где большие деньги. А когда дело доходит до нокаутов, можно ли предсказать реальный раунд? Выплаты огромные.

Я изменил метки, чтобы представить детализированные результаты, упомянутые выше, и я перестроил модель и скрестил пальцы. К сожалению, и не слишком удивительно, точность упала примерно до 30%. Хммм… ну… стоит попробовать. И, безусловно, стоит вернуться позже.

Далее… время предсказания!