Я пытаюсь использовать пакет statsmodels для оценки максимального правдоподобия.
Моя цель - вычислить набор рейтингов футбольных команд с учетом множества результатов игры.
Я использую модель Logisti c:
1/(1 + e^(HFA + HT - AT))
, которая имеет следующие параметры:
HFA
- преимущество домашнего поля
HT
- рейтинг команды хозяев
AT
- рейтинг команды гостей
Цель состоит в том, чтобы вычислить рейтинги каждой команды (всего 18 команд) плюс постоянный коэффициент преимущества поля хозяев. .
Данные, которые я привел, представляют собой просто список результатов игры - команда хозяев, команда гостей, 1, если команда хозяев выиграла игру, 0, если нет.
В настоящее время я думаю, что обогатить эти данные, чтобы иметь столбец для каждой команды. Затем я бы поставил конкретный столбец 1, если эта команда играет в этой конкретной игре, и 0, если нет, поэтому в каждой строке должно быть два «1». Затем добавьте еще один столбец с именем «hfa», который всегда равен 1, что представляет преимущество домашнего поля.
Из-за того, как работает модель, для любой конкретной игры мне нужно знать, какая команда была дома, а какая отсутствовала, тогда я могу правильно рассчитать прогноз. И для этого, мне кажется, мне нужны метки данных, чтобы я мог определить, какая из двух команд в игре была домашней. Однако каждый раз, когда я включаю нечисловые c данные (например, название команды) в мои X
столбцы, я получаю сообщение об ошибке statsmodels
.
Вот суть кода, который я пытаюсь написать. Любое руководство о том, как сделать то, что я пытаюсь сделать, будет высоко ценится - спасибо!
from statsmodels.base.model import GenericLikelihoodModel
class MyLogit(GenericLikelihoodModel):
def nloglikeobs(self, params):
"""
This function should return one evaluation of the negative log-likelihood function per observation in your
dataset (i.e. rows of the endog/X matrix).
"""
???
X_cols = ['hfa'] + list(teams)
X = results[X_cols]
y = results['game_result']
model = MyLogit(X, y)
result = model.fit()
print(result.summary())