Я анализирую данные Citi Bike за сентябрь 2019 года (данные временных рядов) для моей диссертации, чтобы построить прогностические регрессионные модели. Набор данных можно найти здесь . В настоящее время я собираю набор данных из 2,4 миллионов строк, чтобы получить почасовую потребность в велосипедах для каждой станции на каждый день в течение всего месяца. Вот как выглядит агрегат: Я разделил набор данных с помощью train_test_split и применил различные алгоритмы обучения, в основном из scikit-learn. Тем не менее, результаты этих моделей выводят очень низкое значение R2. Например, для линейной регрессии scikit-learn я получаю R2 0.09019569965308272, следовательно, модели не распознают шаблон в данных. Вот код для модели линейной регрессии:
def lr(X_train, X_test, y_train, y_test):
#Create a linear regression object
reg = LinearRegression()
sc_X = StandardScaler()
X_train, X_test = scaleData(X_train, X_test, "robust")
print(X_train)
print(X_test)
reg.fit(X_train, y_train)
print("reg.score(X, y): {} \n".format(reg.score(X_test, y_test)))
print("reg.coef_: {} \n".format(reg.coef_))
print("reg.intercept_: {} \n".format(reg.intercept_))
pred = reg.predict(X_test)
print("Pred: {} \n".format(pred))
results = pd.DataFrame({'Actual': y_test.flatten(), 'Predicted': pred.flatten()})
print(results)
PlotResultsGetPerformance(results)
lr(X_train, X_test, y_train, y_test)
Метод scaledata
:
def scaleData(X_train, X_test, scalingType, X=None):
scaler = []
stype = scalingType.lower()
if stype == "standard":
scaler = StandardScaler()
elif stype == "minmax":
scaler = MinMaxScaler()
elif stype == "robust":
scaler = RobustScaler()
if X == None:
scaler = scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
return X_train, X_test
else:
X = scaler.fit_transform(X)
return X
Вывод алгоритма бегущей линейной регрессии:
reg.score(X, y): 0.09019569965308272
reg.coef_: [[-4.71123839 0.87411394 -0.1425281 1.33332683]]
reg.intercept_: [4.94247875]
Pred: [[ 4.16553018]
[10.71438879]
[ 5.21549358]
...
[10.23551752]
[ 4.94370368]
[ 4.10551935]]
Средняя абсолютная ошибка: 4.833603206597555 Средняя квадратичная ошибка: 61,94697363477656 Root средняя ошибка в квадрате: 7.870639976188503 R2: 0,09019569965308272
В чем проблема? Это проблема с данными или проблема с моделью? Любая помощь будет оценена.