модель sklearn возвращает среднюю абсолютную ошибку 0, почему?

#python #pandas #machine-learning #scikit-learn

#python #панды #машинное обучение #scikit-learn

Вопрос:

Играя с sklearn и я хотел предсказать Close цены TSLA на несколько дат, используя Open , High , Low цены и Volume . Я использовал очень простую модель для прогнозирования закрытия, и они предположительно были точными на 100%, и я не уверен, почему. Ошибка 0% заставляет меня чувствовать, что я неправильно настроил свою модель.

Код:

 from os import X_OK
from numpy.lib.shape_base import apply_along_axis
import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error

tsla_data_path = "/Users/simon/Documents/PythonVS/ML/TSLA.csv"
tsla_data = pd.read_csv(tsla_data_path)
tsla_features = ['Open','High','Low','Volume']

y = tsla_data.Close
X = tsla_data[tsla_features]

# define model
tesla_model = DecisionTreeRegressor(random_state = 1)

# fit model
tesla_model.fit(X,y)

#print results
print('making predictions for the following five dates')
print(X.head())
print('________________________________________________')
print('the predictions are')
print(tesla_model.predict(X.head()))
print('________________________________________________')
print('the error is ')
print(mean_absolute_error(y.head(),tesla_model.predict(X.head())))
 

Вывод:

 making predictions for the following five dates
        Open       High        Low    Volume
0  67.054001  67.099998  65.419998  39737000
1  66.223999  66.786003  65.713997  27778000
2  66.222000  66.251999  65.500000  12328000
3  65.879997  67.276001  65.737999  30372500
4  66.524002  67.582001  66.438004  32868500
________________________________________________
the predictions are
[65.783997 66.258003 65.987999 66.973999 67.239998]
________________________________________________
the error is
0.0
 

Данные:

 Date,Open,High,Low,Close,Adj_Close,Volume
2019-11-26,67.054001,67.099998,65.419998,65.783997,65.783997,39737000
2019-11-27,66.223999,66.786003,65.713997,66.258003,66.258003,27778000
2019-11-29,66.222000,66.251999,65.500000,65.987999,65.987999,12328000
2019-12-02,65.879997,67.276001,65.737999,66.973999,66.973999,30372500
2019-12-03,66.524002,67.582001,66.438004,67.239998,67.239998,32868500
 

Комментарии:

1. Вы прогнозируете, используя тот же набор, который вы передали fit .

Ответ №1:

Вы совершаете ошибку, измеряя производительность вашей модели по набору данных, используемому для ее обучения.

Если вы хотите иметь надлежащую метрику оценки вашей производительности, вы должны разделить свой набор данных на 2 набора данных. Тот, который используется для обучения модели, а другой для измерения ее производительности. Вы можете разделить свой набор данных, используя sklearn.model_selection.train_test_split() следующее:

 tesla_model = DecisionTreeRegressor(random_state = 1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
tesla_model.fit(X_train, X_test)
mae = mean_absolute_error(y_test,tesla_model.predict(X_test))
 

Взгляните на эту страницу Википедии, объясняющую набор данных differents в ML.