Ваша задача может быть сформулирована как задача классификации; чтобы построить классификатор, решающий
задачу, рекомендуется использовать готовые для этого решения, например, библиотеку scikit-learn.
Конечно, можно создать “экспертный” классификатор на чистом Python, без всяких там sklearn, например,
использовать решающее правило “если в команде больше героев, то та и победит”. Однако, может оказать так, что подобные экспертные классификаторы могут обаладать слабой прогностической силой.
Я представляю себе задачу следующим образом. Для начала нам нужно подготовить данные, чтобы их можно
было передать на обучение одному из алгоритмов классификации из sklearn. При этом нам лучше будет использовать
какой-нибудь классификатор, который принимает как количественные, так и качественные признаки. Хорошим выбором в этом случае будут деревья решений или случайный лес (RandomForestClassifier).
Самое главное теперь подготовить данные. У нас есть две команды: radiant, dire. и результат боя – допустим это
переменная Y. Эта переменная может принимать 2 значения: 0 – победила команда dire, 1 – победила команда radiant;
если возможна ничья, то тогда у переменной Y должно будет 3 значения: 2 – дополнительно соответствует ничье.
Таким образом, у нас должен быть сформирован массив Y из 0 и 1 (или 0, 1, 2 – если допустимы ничьи) – общей длиной 50k. Используя pandas это должно быть просто.
Теперь собственно данные X, которые вместе с Y, должны будут переданы на обучение классификатору.
C матрицей данных, или значениями переменных предикторов более сложно. Здесь мы сами должны создать такие предикторы (по ML терминологии этот этап обычно называется feature engeneering), или отобрать, если они уже созданы.
Здесь должны быть переменные, характеризующие как первую, так и вторую команду, какая-то такая матрица:
'num_of_heroes1 ' 'total_health1 ' ..., 'num_of_heroes2 ' 'total_health2 ' ....
3 420 2 510
....etc.
50 k rows
Потом, эту матрицу X, вместе с Y, передаем классификатору, как-то так:
clf = RandomForestClassfiier()
clf.fit(X, Y)
Далее, вообще говоря, может возникнуть проблема оценки качестве классификации, подбора параметров классификатора, обеспечивающего приемлемую точность. Для оценки точности обычно разделяют имеющуюся обучающую выборку на тестовую и тренировочную. На тестовой проверяют работу классификатора. В sklearn многое
автоматизировано в этом плане и оценить точность классификатора можно, например, используя cross_val_score функцию.
Далее, чтобы предсказать результат боя на новых данных, нужно вызвать:
где NEW_DATA – имеет то же число колонок, что и X.
На выходе получаем либо 0 либо 1, т.е. какая команда выиграет по прогнозу (либо еще и 2, если допустимы ничьи).
В общих словах, какой-то такой процесс классификации …