Этот набор данных содержит информацию о шахматных партиях, включая сведения об игроках, ходе игры и различные показатели производительности. Эти данные подходят для широкого спектра аналитических и исследовательских задач.
Этот набор данных представляет собой набор шахматных партий со следующими ключевыми характеристиками:
- Game_ID: Уникальный идентификатор для каждой партии. (Категориальный)
- Rated: Рейтинг: Указывает, была ли игра оценена (True) или нет (False). (Категориальный)
- Variant: Вариант: Играемый вариант шахмат (например, стандартные, chess960). (Категориальный)
- Speed: Скорость: Контроль времени, используемый в игре (например, блиц, рапид, классическая). (Категориальный)
- Created_At: Временная метка, указывающая на момент создания игры. (Категориальный)
- Last_Move_At: Временная метка последнего хода, сделанного в игре. (Категориальный)
- Game_Status: Результат игры (например, отставка, ничья, мат). (Категориальный)
- Source: Источник: Источник игры (например, турнир, друг, пул). (Категориальный)
- Winner: Победитель: Победитель игры (белые, черные или ничья). (Категориальный)
- Opening_Name: Название проигрываемого опенинга. (Категориальный)
- Opening_ECO: Экологический код проигрываемого опенинга. (Категориальный)
- Opening_PLY: Количество полуходов, сыгранных в начальной фазе. (Числовой)
- White_Player: Идентификатор белого игрока. (Категориальный)
- White_Title: Шахматный титул белого игрока (например, гроссмейстер, IM, FM). (Категориальный)
- White_Rating: Рейтинг белого игрока. (Числовой)
- White_incuracy: Количество неточностей, допущенных белым игроком. (Числовой)
- White_Mistake: Количество ошибок, допущенных белым игроком. (Числовой)
- White_Blunder: Количество грубых ошибок, допущенных белым игроком. (Числовой)
- White_ACPL: Среднее количество потерь в многоножках (ACPL) для белого игрока. (Числовой)
- Black_Player: Идентификатор черного игрока. (Категориальный)
- Black_Title: Шахматный титул черного игрока (например, гроссмейстер, IM, FM). (Категориальный)
- Black_Rating: Рейтинг черного игрока. (Числовой)
- Black_incuracy: Количество неточностей, допущенных черным игроком. (Числовой)
- Black_Mistake: Количество ошибок, допущенных черным игроком. (Числовой)
- Black_Blunder: Количество грубых ошибок, допущенных черным игроком. (Числовой)
- Black_ACPL: Среднее значение потерь в многоножке (ACPL) для черного игрока. (Числовой)
- Clocks: Часы: Данные о времени игры, предположительно, список времени, оставшегося у каждого игрока после каждого хода. (Категориальный)
- Анализ: Анализ игры, скорее всего, с помощью шахматного движка. (Категориальный)
- Total_Time_Init: Начальное время, отведенное на игру, в секундах. (Числовой)
- Total_Time_Increment: Увеличение времени, добавляемого за ход, в секундах. (Числовой)
- Total_Time: Общее время, затраченное на игру, в секундах. (Числовой)
- Moves: Ходы: (Числовой)
- Данные взяты с сайта Lichess. Ссылка на файл drive.google.com/uc?id
- Пропущенные значения были обработаны с помощью подсчета количества пропущенных значений в каждом столбце.
- С выбросами были обработаны и удалены. Удалены дубликаты.
Отфильтрованы нерейтинговые игры, чтобы избежать ошибок, связанных с некорректной игрой участников в партиях, не идущих на результат. Найдено распределение контроля времени по каждому элементу в процентах Удалены игры через api, которые из-за нестандартного интерфейса для игрока могли повлиять на его уровень игры. В параметре Winner NA значения заменены параметром draw. Удалены читерные партии из набора (cheat) и партии, где игроку засчитался проигрыш при отключении (timeout). Найдены самые популярные дебюты и их процент в общей доле.
Определены наиболее часто встречающиеся дебюты:
A00 - "неопределенные дебюты".
A04 - дебют известный как "Скандинавская защита", начинается с хода пешки на королевском фланге и стремится быстро развивать фигуры, чтобы контролировать центр. Этот дебют обычно выбирают игроки, которые хотят атаковать и не боятся рискованных позиций.
A45 - дебют, который называется "Защита Оуэна", начинается с хода пешкой на королевском фланге, но сосредоточен на более медленном и стратегическом раскрытии фигур. Игроки, использующие этот дебют, часто стремятся к созданию сложной позиции и могут играть на противостоянии сопернику, ожидая, когда тот сделает ошибку.
Сделан вывод о том, что в среднем, игроки делают около 6 ходов, следуя известным дебютам, прежде чем начинают играть по своему усмотрению.
- Удалены данные с 2014 по 2019 годы из-за малого числа наблюдений.
Распределение игр по месяцам показало, что чаще всего играют в январе и декабре. Можно выделить спад в весенне-летний период. Распределение игр по дням недели показало, что по пятницам и субботам в шахматы играют чаще всего. По времени суток чаще всего люди играют в вечернее время (с 17 до 20 UTC).
В параметрах White_Title и Black_Title (шахматный титул игрока) пропуски заменены значением NT - No Title.
Распределение рейтингов у белых и черных игроков очень схоже. Рейтинги после удаления выбросов лежат в промежутке примерно 1500 - 3500 и графики распределения их по играм идентичны. Большее количество игр сыграли игроки с рейтингом 2700 - 2800.
Проведено сравнение неточностей белого и черного игрока. Bullet и UltraBullet выделяется. Это видно на графике и по квантилям ошибок. У белых: Q75 = 5.0, Q90 = 7.0 (выше, чем в других форматах). Т.е. из-за меньшего времени на ход, кол-во ошибок выше.
Распределение ошибок за белых и черных по типу временного контроля показало, что в большинстве партий (для всех типов скорости) игроки делают мало ошибок. Это хорошо, потому что это значит, что они играют на высоком уровне.
- Выявлены Белые ошибки: 25% партий не имеют белых ошибок (значение 0). В половине партий (50%) игроки делают 1 или меньше белых ошибок. 75% партий имеют 2 или меньше белых ошибок. 90% партий имеют 3 или меньше белых ошибок.
- Выявлены Черные ошибки: 25% партий не имеют черных ошибок, но в ultraBullet 25% партий имеют 1 черную ошибку. В половине партий (50%) игроки делают 1 или меньше черных ошибок. 75% партий имеют 2 или меньше черных ошибок. 90% партий имеют 3 или меньше черных ошибок.
Найдено количество партий и доля, сыгранных игр без ошибок для белых и черных игроков: Количество партий без ошибок у белых: 20991 (18.26%) Количество партий без ошибок у черных: 19006 (16.53%).
Вычислен процент безошибочных партий у белых и черных одновременно: Количество партий, где ни белые, ни черные не совершили ни одной ошибки.: 4150 Процент партий, где ни белые, ни черные не совершили ни одной ошибки: 3.61%.
Вычислены процентили зевков для каждого контроля времени партии (Speed). Белые и черные зевки: 25% партий: 0 зевков в blitz, classical, и rapid; 1 зевок в bullet и ultraBullet; 50% партий: 1 или меньше зевков; в ultraBullet — 2; 75% партий: 2 или меньше зевков в blitz, classical, rapid; 3 в bullet и ultraBullet.
Вывод по количеству белых и черных зевков, что их значения похожи, но в быстрых партиях (ultraBullet) наблюдается тенденция к большему количеству зевков. В большинстве партий (особенно в blitz, classical и rapid) игроки делают мало зевков. Это свидетельствует о высоком уровне игры.
- Введены новые параметры White_Clocks и White_Clocks_Diffs, и Black_Clocks и Black_Clocks_Diffs - остаток времени на таймере игрока белыми фигурами и черными фигурами, после каждого хода. Проведено логарифмированное распределение White_Q50, White_Q75, White_Q90 по параметру Speed, и также Black_Q50, Black_Q75, Black_Q90 по параметру Speed.
Найдены проценты партий, с приемущественными позициями белых и черных игроков. Процент партий, где преимущественно была выгодная позиция для белых: 55.72%. Процент партий, где преимущественно была выгодная позиция для черных: 44.27%. Процент сбалансированных позиций: 0.00%.
Найден процент партий, где выиграли белые, несмотря на то, что средняя оценка позиции (avg_eval) была в пользу черных, и наоборот, процент партий, где выиграли черные, несмотря на приемущество белых. Общее количество партий: 114958. Количество партий, где белые выиграли с преимуществом черных или черные выиграли с преимуществом белых: 13092. Процент таких партий в общем объеме: 11.00 %.
Посчитано количество оценок Lichess движка для каждой партии.
Проведено сравнение как распределяются значения eval в партиях с наибольшим и наименьшим числом ошибок.
Сделан вывод о том, что мы прослеживаем закономерность между количеством ошибок и неоднородностью графика eval. Чем больше ошибок, тем более неоднароден график eval, тем более резкие перепады между приемуществами белых и черных.
Классические турниры по шахматам имеют стартовое время 60 минут и 90 минут в офлайне или менее. В онлайне партий с большим стартовым временем встречается очень редко, поэтому удалим все значения, что больше показателя в 2000 секунд и построим снова распределение.
По параметру Total_Time_Increment удалены значения, которые больше 30 секунд добавления, поскольку они являются нестандартной игрой и представляли собой большое количество выбросов.
- Создан категориальный параметр для объединения распределений по группам: 0 sec, 1–3 sec, 4–8 sec, 9–15 sec, 15+ sec.
В силу несоответствия параметра реальной продолжительности партии дропнули его, используем параметр Game_Duration.
Посмотрели какой фигурой чаще всего делается последний ход - Чаще всего завершает игру ход Ферзем или ладьей.
- Введены Новые параметры Is_Berserk_White и Is_Berserk_Black - параметры показывающийебрал ли игрок белыми и черными берсерк режим на партию. Режим берсерк в шахматах — это функция, при которой игрок сокращает своё время на партию вдвое (иногда также теряет добавление времени за ход), чтобы получить дополнительные очки в случае победы.
Посмотрели, в каком количестве оба игрока брали берсерк режим - Количество партий, где оба игрока взяли берсерк: 2744, Процент таких партий: 2.44%.
-
Создан Новый параметр Game_Duration на основе параметров Created_At и Last_Move_At параметр - продолжительность партии.
-
Создан Новый параметр Num_Moves - список ходов, сделанных в партии - категориальный. Создадим новый параметр кол-во ходов в партии.
-
Корреляционный анализ:** Выполнена корреляционная матрица для исследования взаимосвязи между всеми переменными. отражающая вззаимосвязи между исследуемыми признаками (n=37 с учетом новых созданных столбцов )
Матрица получилась интересная, много очевидных корреляций, следовательно данные собрались хорошие. Есть корреляции более сильные, например, между рейтингам черных и белых, между временем на обдумывание и начальным временем на партию, между контролем и временем на партию, между числом ошибок белых/чёрных и тотальным числом ошибок. но есть и менее очевидные корреляции, например, число ходов & неточности белых, средней ошибкой и временем на партию, тотальными ошибками и временем обдумывания ходов - их будем дальше изучать в ходе проекта.
-
Визуализация: Точечные диаграммы были созданы для визуализации взаимосвязей между переменными.
Гипотеза 1. Разнофланговая рокировка открывает сторонам возможность одновременных пешечных штурмов — короли оказываются под встречными атаками, поэтому партии реже заканчиваются миром. (Тест Пирсона) H1: Партии, где стороны рокировались в разные фланги, заканчиваются чаще результативно (win/lose), чем партии с одинаковой рокировкой. H0: Доли результативных партий в группах рокировавшихся в одну сторону и в разные стороны равны.
Вывод: В любых партиях от bullet до classical разнофланговая рокировка действительно делает исход более «боевым». В ultrabullet такой разницы нет, потому что почти все партии и так заканчиваются победой по времени.
Гипотеза 2. В классических партиях допускают меньшее количество ошибок и неточностей, чем в блиц-партиях. (Тест Шапиро-Уилка, Тест Левена, Тест Манна-Уитни). H0: В классических и блиц-партиях нет значимой разницы в количестве ошибок. H1: В классических партиях допускают меньшее количество ошибок и неточностей, чем в блиц-партиях.
Вывод: Есть значимая разница в количестве ошибок между классикой и блицом (отвергаем нулевую гипотезу) . В классических партиях допускают меньшее количество ошибок и неточностей, чем в блиц-партиях.
Гипотеза 3. Игрок совершает больше ошибок, играя против сильного соперника. (Критерий Колмогорова-Смирнова) H0: Игра с сильнейшим противником не влияет на общее количество ошибок и неточностей. H1: Игра с сильнейшим противником увеличивает общее количество ошибок и неточностей.
Вывод: Обе гипотезы не отвергнуты. Не существует прямой зависимости между силой игрока и количеством допускаемых ошибок при игре с ним при любой разнице в рейтинге.
При создании ML модели мы сосредоточились на стандартных шахматных партиях без этого специфического условия, изменяющего время. Основные параметры для моделей ML: победа белых, победа черных, ничья. Также скорость игры, начало игры, рейтинги игроков, показатели, связанные со временем, и оценку движка (Opening eco, White title, Black Title, ACPL). Ограничение – партии только рейтинговые.
- Проведена очистка данных - удалены определенные типы игр (например, berserk, ultraBullet, friend), чтобы получить более последовательный и конкурентный набор данных.
- Определен столбец победителей в качестве цели для задачи по прогнозированию.
- Создана функция
Diff_Rating
, которая отображает разницу в рейтингах игроков (разница их навыков). - Анализирован список строковых оценок для шахматного движка.
- Извлечены оценки отдельных ходов для белых и черных из объединенного списка оценок.
- Подготовлены данные для классификационной модели, позволяющей прогнозировать исход шахматной партии (победа белых, победа черных или ничья) и устранять потенциальный дисбаланс в классе.
Ключевые наблюдения из матрицы: Хорошее предсказание выигрышей белых и выигрышей черных: Как выигрыши белых, так и выигрыши черных показывают достаточно высокие значения по диагонали, что свидетельствует о некоторой предсказательной способности. Ничьи плохо прогнозируются: модель с трудом предсказывает ничьи, о чем свидетельствует низкое значение (1141) по диагонали для класса “Ничья”. Многие ничьи ошибочно классифицируются как выигрыши черных или белых. Относительно низкие показатели точности и запоминания для класса “ничьи” отражены в том факте, что прогнозирование ничьих недостаточно эффективно.
Вывод по модели Random Forest: Модель Random Forest, прошедшая обучение с использованием весовых коэффициентов классов для устранения дисбаланса данных, продемонстрировала приемлемую производительность на тренировочных данных, но с трудом поддавалась обобщению на тестовые данные, особенно при прогнозировании ничьих. Наилучшими параметрами для модели случайного леса были {'classifier__max_depth': None, 'classifier__max_features': 'sqrt', 'classifier__min_samples_leaf': 2, 'classifier__min_samples_split': 5, 'classifier__n_estimators': 100} , предполагающий переобучение. Посредственная точность модели и баллы F1 по результатам тестирования указывают на то, что есть возможности для улучшения.4
Модель CatBoost, оптимизированная с помощью рандомизированного поиска, дала многообещающие результаты в прогнозировании исходов шахматных партий. С такими параметрами, как скорость обучения 0,15, регуляризация L2 5, 700 итераций и глубина дерева 4, он превзошел Random Forest, достигнув лучших результатов по F1-макросам в тестовом наборе и сделав более точные прогнозы для розыгрышей, хотя дальнейшая настройка может привести к дополнительному повышению производительности”.
CatBoost значительно превосходит Random Forest по производительности. Он демонстрирует хорошие результаты для оценки макросов F1. Результаты ничьих в целом улучшились.
После предварительной обработки и разработки функций мы обучили и оценили две модели: Random Forest и Can Boost, которые позволяют прогнозировать результаты шахматной партии. Модель Cat Boots, использующая рандомизированный поиск для настройки гиперпараметров, значительно превзошла Random Forest, показав лучшие результаты по F1-макросам в тестовом наборе и улучшив производительность при прогнозировании ничьих. Но при этом ей может потребоваться дополнительная обработка гиперпараметров.
Stacking ensemble реализован для объединения моделей Random Forest и CatBoost. Класс CBWrapper обертывает CatBoostClassifier, чтобы сделать его совместимым с StackingClassifier. Это, по сути, создает интерфейс в стиле scikit-learn для CatBoost, позволяющий легко использовать его в рамках stacking framework. Он включает параметры, передаваемые в классификатор CatBoost, для обеспечения соответствующей функции.
Такой комплексный подход, который объединяет лучшие модели Random Forest и CatBoost, используя логистическую регрессию в качестве мета-метода обучения. Этот подход позволяет использовать сильные стороны обеих моделей для достижения более высокой производительности, чем любая из них по отдельности.
Тепловая карта модели Stacking выглядит как CatBoost. Модель Stacking демонстрирует улучшенную точность, запоминаемость и оценку F1 по сравнению с Random Forest с точки зрения большей точности изображения.
Мы проанализировали признаки, относящиеся к факторам, которые влияют на победу в шахматных партиях. На начальном этапе у нас было 140 792 строки с данными и 32 признака. В ходе нашего анализа мы применяли следующие меры:
Удалили дубликаты: мы проверили данные на наличие дублирующихся записей и удалили их, чтобы избежать искажения результатов анализа. Устранили пропуски. Отфильтровали значения, чтобы не было искажения данных: отфильтровали нерейтинговые игры, чтобы избежать ошибок, связанных с некорректной игрой участников в партиях, не идущих на результат (по параметру Rated). отфильтровали значения fromPosition, чтобы не искажать данные играми, не начинающими с самого начала (по параметру Variant). отфильтровали игры, созданные или полученные через API, используемые для автоматизации или разработки приложений (по параметру Source). отфильтровали читерные партии из набора (cheat) и партии, где игроку засчитался проигрыш при отключении (timeout) (по параметру Game_Status). отфильтровали данные по параметру Total_Time_Init. отфильтровали данные по параметру Total_Time_Increment. отфильтровали данные по параметру Total_Time. Удалили выбросы в данных: по параметрам White_Rating и Black_Rating. по параметрам White_Mistake и Black_Mistake. по параметрам White_Blunder и Black_Blunder. Прологарифмировали данные для уменьшения разброса значений: параметры White_ACPL и Black_ACPL. новый параметр Game_Duration - продолжительность партии. Так же мы исследовали сложные признаки:
Clocks - информация о времени игроков по ходу партии в виде последовательного числового списка; Analysis - данные анализа партии от Lichess движка; Moves - список ходов, сделанных в партии – категориальный. В результате анализа у нас появилось 28 новых признаков, которые нам понадобились для более детального анализа.
После проведенного анализа у нас осталось 112 481 строки.
- В любых партиях от bullet до classical разнофланговая рокировка действительно делает исход более «боевым».
- В ultrabullet такой разницы нет, потому что почти все партии и так заканчиваются победой по времени.
- Есть значимая разница в количестве ошибок между классикой и блицом (отвергаем нулевую гипотезу) .
- В классических партиях допускают меньшее количество ошибок и неточностей, чем в блиц-партиях.
- Не существует прямой зависимости между силой игрока и количеством допускаемых ошибок при игре с ним при любой разнице в рейтинге.
- Говоря о моделях ML, можно сделать вывод, что и у Random Forest, и у CatBoost есть много других параметров по умолчанию, которые не были настроены явно. Эти значения по умолчанию все еще влияют на поведение модели.
- Наибольшей производительности модели ML можно достичь, применяя комплексный подход и объединяя две модели в Stacking, а также, используя логистическую регрессию в качестве мета-метода обучения.
- Гипермараметры (параметры, которые были настроены с помощью GridSearchCV или RandomizedSearchCV), наиболее важны для оптимизации производительности для нашего конкретного набора данных и задачи.
Таким образом, рассмотренные наборы параметров помогли определить направление процесса поиска эффективных моделей машинного обучения и позволяют продолжить поиск других признаков и гипотез, наиболее соответствующих цели по прогнозированию победы в шахматных партиях.
- Язык программирования: Python
- Библиотеки: Pandas, Seaborn, Matplotlib, SciPy
- Дальнейший анализ влияния различных вариантов дебюта на исход игры.
- Изучение нелинейных зависимостей между переменными.
- Включение данных о рейтингах игроков для лучшего понимания эффективности игры.
- Увеличить объем данных для улучшения качества модели.
- Добавить параметры. Например, история игры и взаимодействия с соперниками, результаты их игр, взаимосвязи с другими параметрами.
- Проверить другие гипотезы. Возможно, исследовать, как различия в стратегии влияют на количество ошибок.
- Оптимизировать гипермараметры. С помощью методов GridSearchCV и RandomizedSearchCV найти оптимальные гиперпараметры, это может значительно повысить производительность моделей.
- Использовать различные другие модели. Возможно, сравнить производительность разных моделей, например, ансамблевые методы, нейронные сети, методы глубокого обучения.
- Провести детальный анализ ошибок моделей. Проверить, почему модель допускает ошибки и какие параметры могут быть улучшены.
- Использовать кросс-валидацию для более надежной оценки производительности и регуляризацию для предотвращения переобучения.
- Экспертное мнение. Возможно, получить обратную связь от экспертов о значимости тех или иных параметров и гипотез.