Как правильно настроить обучающие и тестовые данные, которые включают как дату, так и двоичные данные? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть набор данных, который содержит 2 столбца, один из которых является датой, а другой - двоичным результатом события обработки, либо 0 для отсутствия лечения или 1 для обработки.

  Dates        Events
  2010-01-01      0
  2010-01-02      1
  2010-01-03      0
  2010-01-04      1

У меня ровно 2854 строки на 2 столбца. Даты начинаются с

2010-01-01 to 2017-12-31.

Мой набор данных содержит дисбаланс классов из-за характера данных. Количество без лечения составляет 2372 и 482 за лечение. То, что я хочу сделать, это использовать алгоритм классификации, чтобы предсказать, какие даты мне будут лечить, основываясь на моих исторических данных.

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

KNN=57.5
Log Reg= 59.61
SVC= 61.72
Decision Tree= 61.72
Random forest= 61.72
Gradient boost= 61.72
Naive Bayes= 57.59

Я также добавил год, месяц, неделю и день недели в свой фрейм данных.

df=pd.read_csv('Binary Data.csv')
df['year'] = pd.DatetimeIndex(df['Dates']).year
df['month']=pd.DatetimeIndex(df['Dates']).month
df['week']=pd.DatetimeIndex(df['Dates']).week
df['weekday']=pd.DatetimeIndex(df['Dates']).weekday
df.head()


Dates     Events year month week weekday

2010-03-10   0   2010   3    10     2 
2010-03-11   1   2010   3    10     3 
2010-03-12   0   2010   3    10     4 
2010-03-13   0   2010   3    10     5 
2010-03-14   0   2010   3    10     6 

Ранее я получал более высокие оценки по моей модели, игнорируя дисбаланс классов и используя обычные даты. Все модели набрали 84%, но я понял, что они просто предсказывают, когда у меня нет обработок, потому что это большинство данных. Поэтому я изменил свой код, чтобы учесть дисбаланс классов, и перешел на использование значений дня недели.

Выбор моего предиктора и целевых переменных:

X=df.weekday.values  
y=df.Events.values
X=X.reshape(-1, 1)
X.shape, y.shape
(2854, 1), (2854,)

Учет дисбаланса класса с использованием SMOTE:

from imblearn.over_sampling import SMOTE
sm = SMOTE(random_state=0, ratio=1.0)
X, y = sm.fit_sample(X, y)

Обучение и тестирование:

X_train, X_test, y_train, y_test = train_test_split(X, y,stratify=y, 
test_size=0.25, random_state=0)

X_train.shape, y_train.shape, X_test.shape, y_test.shape
 ((3558, 1), (3558,), (1186, 1), (1186,))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...