Сохранить метки данных в модели вероятности Statsmodels - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь использовать пакет 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...