У меня есть фрейм данных из двух столбцов, первый - это ряд дат, а второй - количество операций, выполненных в 2019 году. Я хочу применить ML для прогнозирования количества операций в 2020 году.
Я пытался использовать Sklearn LinearRegression для прогнозирования после преобразования дат в 'int64', но прогнозируемые значения слишком далеки от ожидаемых для меня, и значение coef_ равно -3
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.externals import joblib
from sklearn import metrics
import datetime
df= pd.read_csv(r'...surgical_clean.csv')
df= pd.to_datetime(df['pd_date_of_operation']).value_counts().to_frame().reset_index()
year_start = np.datetime64(pd.to_datetime(2017, format= '%Y'))
df= df[(df['index'] >= year_start)].astype('int64')
x= df.iloc[:,:-1].values
y= df.iloc[:,1].values
x_train,x_test,y_train,y_test= train_test_split(x,y, test_size=0.2, random_state=0)
regressor= LinearRegression()
model= regressor.fit(x_train,y_train)
y_pred= model.predict(x_test).round(0)
>>>array([4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.,
4., 4., 4., 4., 4., 4.])
print(model.coef_)
print(model.intercept_)
>>>[-3.81638905e-18]
9.546358714910848
from sklearn import metrics
print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred).round(1))
print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred).round(1))
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)).round(1))
>>>Mean Absolute Error: 1.1
Mean Squared Error: 2.4
Root Mean Squared Error: 1.5
predict = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})
predict.sum()
>>>Actual 589.0
Predicted 636.0
dtype: float64