Лошади действительно непредсказуемые животные? Уильям Бентер заработал почти 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 минут
Ваша поддержка была бы потрясающей❤️
Наличие большего числа подписчиков побудит меня писать больше статей.
Ключевые слова: прогнозы скачек, ставки на спорт, машинное обучение.