Лошади действительно непредсказуемые животные? Уильям Бентер заработал почти 1 миллиард долларов, используя программное обеспечение и алгоритмы, которые он создал. Поэтому сегодня давайте посмотрим, сможем ли мы стать следующим Уильямом Бентером, используя машинное обучение для предсказания победителя гонки.

Отказ от ответственности. Эта статья носит исключительно образовательный характер и не должна рассматриваться как профессиональный совет по инвестициям или ставкам.

Судя по Википедии, Уильям Бентер обладает прекрасными математическими и статистическими способностями. Ему удалось определить факторы, которые могут привести к успешным прогнозам гонок, и создать формулу для выбора победителей гонок.

1️⃣ Цель

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

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

2️⃣ Набор данных

Сегодня мы используем набор данных, охватывающий чистокровные скачки в Австралии с 2020 по 2021 год, чтобы спрогнозировать лошадь-победителя. В целом, в нем проводится 634гонки, в которых принимают участие 10 665 бегунов.

#load data
df = pd.read_csv(filename)
print('shape:' + str(df.shape))
#check missing value
df.isnull().sum()

Набор данных содержит до 50 объектов, включая:

  • race_id — уникальный идентификатор расы.
  • дата — дата проведения гонки, ГГГГ-ММ-ДД.
  • distance — дистанция гонки в метрах.
  • состояние — число, обозначающее тип покрытия гоночной трассы:
    1 = твердое, 2 = хорошее, 3 = мягкое, 4 = тяжелое.
  • horse_id — уникальный идентификатор лошади.
  • age — текущий возраст лошади на момент скачек.
  • финиш — конечная позиция лошади
  • распределенный вес — фактический вес, переносимый лошадью, в фунтах.
  • и более…

Мы обнаружили, что среди всех функций в число 10 наиболее важных факторов, обеспечивающих успешные прогнозы, входят:

✅ВОЗРАСТ

✅Призовой фонд

✅Барьерная позиция

✅Последние 4 номера формы

✅Победы в карьере

✅Карьера 2 место

✅Карьера 3-е место

✅Распределенный вес

✅Ограничение веса

✅Расстояние

Выберите критические факторы, которые приводят к успешным прогнозам:

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

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

▶️удалить константу

▶️удалить квазиконстанту

▶️удалить дубликат

▶️удалить коррелированные функции

👉 Удалить постоянные функции

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

# Splitting data into training and test Sets
x_train, x_test, y_train, y_test=train_test_split(df.drop(labels=['TARGET'], axis=1),df['TARGET'], test_size=0.2,random_state=41)

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

Мы устанавливаем порог = 0, что означает, что мы хотим найти признаки с нулевой дисперсией.

from sklearn.feature_selection import VarianceThreshold
# using the VarianceThreshold to find constant features
constant_threshold = VarianceThreshold(threshold=0)
# apply the VarianceThreshold
constant_threshold.fit(x_train)
# get the number of non-constant features
len(x_train.columns[constant_threshold.get_support()])
# find the number of constant features
constant_features = [column for column in x_train.columns                     if column not in x_train.columns[constant_threshold.get_support()]]

👉 Удалить квазипостоянные функции

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

пороговый параметр 0,01 означает, что если дисперсия значений меньше 0,01, то мы удаляем эту функцию

from sklearn.feature_selection import VarianceThreshold
# using the VarianceThreshold to find constant features
qconstant = VarianceThreshold(threshold=0.01)
# apply the VarianceThreshold
qconstant.fit(x_train)
# get the number of non-quasi-constant columns
len(x_train.columns[qconstant.get_support()])
# find the number of constant features
non_quasi_constant_features = [column for column in x_train.columns                     if column not in x_train.columns[qconstant.get_support()]]

👉 Удалить повторяющиеся функции

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

# using Transpose to find duplicate features
x_train_T = x_train.T
print(x_train_T.duplicated().sum())

👉Удалить связанные функции

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

# using Transpose to find duplicate features
correlation_matrix = df.corr()
unstack_corr= correlation_matrix.unstack().sort_values().drop_duplicates()
# find a correlation value of 0.8
high_corr = unstack_corr[(((unstack_corr > 0.8)|(unstack_corr < -0.8))&(unstack_corr != 1.0))]

3️⃣ Моделирование

Здесь я воспользуюсь простой техникой наложения, чтобы создать 4 базовые модели, а затем объединить их для получения улучшенных результатов. Результаты прогнозирования модели 1-го уровня будут входными данными модели 2-го уровня.

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

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

Узнайте больше о методе ансамбля: Методы ансамбля: элегантные методы для получения улучшенных результатов машинного обучения

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

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

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

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

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

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

4️⃣ Оценка

Существует множество типов ставок, и сегодня мы сосредоточимся только на прямых ставках, включая:

  • Выигрыш: это самая простая ставка. Вы выиграете деньги, только если ваша лошадь финиширует первой.
  • Место: вы выигрываете, если ваша лошадь финиширует первойили второй.
  • Шоу: вы выигрываете, если ваша лошадь финиширует первой, второй, или третьей.

продолжение следует

Другие темы прогнозов:

Предсказать цены на акции так же просто, как 123

Стань профессионалом на фондовом рынке за 5 минут

Ваша поддержка была бы потрясающей❤️

Наличие большего числа подписчиков побудит меня писать больше статей.

Ключевые слова: прогнозы скачек, ставки на спорт, машинное обучение.