Почему моя модель логистической регрессии предсказывает только 0? / маленький размер выборки? - PullRequest
0 голосов
/ 14 мая 2019

Я строю модель прогнозирования оттока с логистической регрессией в Python.Моя точность модели составляет 0,47 и предсказывает только 0 с.Реализованная переменная y на самом деле составляет 81 ноль и 92 единицы.

У меня есть только несколько функций и 220 пользователей (записей).Если я установлю эталонное время, оно будет еще меньше (около 123 записей для тренировочного набора и 173 для тестового набора).Поэтому я думаю, что размер выборки слишком мал, чтобы использовать логистическую регрессию.Но я все еще пытался, потому что это всего лишь пример теста, поэтому я получил только этот небольшой набор данных.(Теоретически данных больше)

from sklearn.linear_model import LogisticRegression

logreg = LogisticRegression()
logreg.fit(x_train, y_train)

y_pred = logreg.predict(x_test)
print('Accuracy: {:.2f}'.format(logreg.score(x_test, y_test)))

Даже если я не тестирую модель, то есть я использую весь набор данных для построения модели, когда я предсказываю будущее изменение, оно все равно возвращает только 0 с.из-за того, что размер моей выборки слишком мал, или потому что точность меньше 0,5, поэтому он просто возвращает одно значение (0 здесь)?Или я что-то не так сделал в коде?

Большое спасибо!

1 Ответ

1 голос
/ 14 мая 2019

Существует несколько потенциальных причин для сильно предвзятого прогноза из модели логистической регрессии. Для информирования широкой аудитории я перечислю наиболее распространенные, хотя некоторые из них не применимы к вашему делу.

  1. ( Перекошенное распределение выходных данных ) Ваши тренировочные данные имеют смещенное, несбалансированное распределение меток. Если ваша тренировка содержит, например, 1 позитив и 100000 негативов, смещение / перехват в регрессии будет очень маленьким. После применения функции связи прогнозы могут быть практически нулевыми.

  2. ( Разреженность ) Пространство объектов большое, а набор данных небольшой, что приводит к разреженным данным обучения. Поэтому большинство новых поступающих экземпляров точки данных ранее не видели. В худшем случае, когда все признаки являются факторами, невидимые значения коэффициентов приводят к нулям, поскольку не может быть определен правильный столбец с одной горячей точкой.

  3. ( Перекошенное входное распределение ) Пространство объектов мало, и ваш набор данных плотен вокруг небольшой области. Если окажется, что в этом регионе больше нулей, предсказания всегда будут равны нулю даже для будущих случаев ввода. Например, мои данные X имеют два столбца: пол и возраст. Оказывается, большинство моих данных - это 30-летний мужчина и 80 из 100 30-летних мужчин, таких как мороженое, в наборе данных на 101 точку. Модель будет прогнозировать 30-летних мужчин, таких как мороженое, для будущих входных данных, которые обычно предназначены для 30-летних мужчин, предполагающих аналогичное распределение входных данных.

Вы должны проверить распределение оценок, используя функцию predict_proba, и проверить распределение входных функций, используя что-то вроде pairplot.

...