Я работаю с данными НФЛ и прогнозирую исходы игр. Мои исходные данные (используемые для обоих процессов ниже) состоят из примерно 3800 строк по 20 отдельных характеристик (по десять для каждой команды, плюс дата, идентификатор игры, команда хозяев и гостей, а также столбцы побед дома/победы на выезде).
Модель A циклически проходит через определенные диапазоны дат для разделения обучения/тестирования. То есть я использую жесткие обрезки, поэтому каждый набор является смежным по дате. Я использую даты, которые отражают разделение 50%, 55% и т. д. до 85%. С помощью этой модели каждый из 8 результатов точности составляет ~ 61%, что типично для прогнозов НФЛ (возможно, немного завышено).
Модель «B» использует модуль train_test_split. от sklearn для разделения данных в тех же процентах, что и выше. Я понимаю, что этот метод перемешивает данные, поэтому я знаю, что каждое разделение работает с данными, отличными от модели A. Но при использовании этого метода процентная точность для каждого цикла составляет ~ 82%, что НАМНОГО выше, чем у модели A, и, по-видимому, необоснованно. Поэтому я хочу понять, правильно ли я реализую один (или оба) из этих методов.
(Если кто-нибудь может показать мне, как прикрепить исходный CSV-файл, я буду рад это сделать)
Соответствующая часть модели A
train_test_date_range = ['2017-11-02', '2018-10-04', '2019-09-05', '2019-12-01', '2020-11-05', '2021-10-03', '2022-01-02', '2022-11-24']
features = [
'team_1_average_ptsScored_last_five',
'team_1_average_feature_1_last_five',
FEATURE LIST ABBREVIATED FOR CLARITY
'team_2_average_feature_9_allowed_last_three_away',
'team_2_average_feature_10_allowed_last_three_away'
]
for tt_line_date in train_test_date_range :
train_data = match_stats[match_stats['date'] < tt_line_date]
test_data = match_stats[match_stats['date'] >= tt_line_date]
X_train = train_data[features]
X_test = test_data[features]
Y_train = train_data['team_1_result']
Y_test = test_data['team_1_result']
names = ["Log Reg"]
classifiers = [
LogisticRegression()
]
for name, clf in zip(names, classifiers):
# Fit the classifier on the training data and make predictions
clf.fit(X_train, Y_train)
test_data[name + '_team_1_result'] = clf.predict(X_test)
accuracy = clf.score(X_test, Y_test)
print(name + ' accuracy at T/T_Line ' + tt_line_date + ' =', format(accuracy, ".2%"))
Выход из модели «А»
Log Reg accuracy at T/T_Line 2017-11-02 = 62.11%
Log Reg accuracy at T/T_Line 2018-10-04 = 61.83%
etc.
Соответствующая часть модели «Б»
train_test_split_range = [0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85]
for tt_line in train_test_split_range:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=tt_line, random_state=42)
model = LogisticRegression()
scaler = StandardScaler()
scaled_train = scaler.fit_transform(X_train)
scaled_test = scaler.fit_transform(X_test)
model.fit(X_train, y_train)
y_pred_proba = model.predict_proba(X_train)[:, 1]
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
roc_auc = roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])
# Calculate pseudo r squared
# Modified from: https://github.com/scikit-learn/scikit- ... sues/25982
ll_null = log_loss(y_train, [y_train.mean()] * len(y_train))
ll_model = log_loss(y_train, y_pred_proba)
pseudo_r2 = 1 - ll_model / ll_null
# Print the metrics
print(f"\033[1m\033[4mResults at " + str(tt_line) + " train/test split\033[0m")
print(f"Accuracy: {accuracy:.3f}")
print(f"Precision: {precision:.3f}")
print(f"Recall: {recall:.3f}")
print(f"F1-score: {f1:.3f}")
print(f"ROC AUC: {roc_auc:.3f}")
print(f"Pseudo R-squared: {pseudo_r2:.3f}")
print()
Выход модели «Б» (1 из 8, но типовой)
Results at 0.5 train/test split
Accuracy: 0.820
Precision: 0.828
Recall: 0.854
F1-score: 0.841
ROC AUC: 0.896
Pseudo R-squared: 0.490
Подробнее здесь: https://stackoverflow.com/questions/792 ... erent-resu
Почему две разные модели логистической регрессии дают совершенно разные результаты на одних и тех же исходных данных? [з ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему R и Python дают мне разные доверительные интервалы в логистической модели?
Anonymous » » в форуме Python - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему эти простые вычисления градиента весов линейной регрессии дают разные результаты?
Anonymous » » в форуме Python - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-