Масштабирование биржевых данных - PullRequest
0 голосов
/ 01 июля 2019

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

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

Если я нанесу прогноз и метку теста на график, прогноз будет максимальным или максимальным. Проблема в том, что стандартизатор подходит для набора поездов, набор тестов (позднее на временной шкале) имеет гораздо более высокое значение, алгоритм не знает, что делать с этими экстремальными данными

def test(X, y):
    # split the data
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, shuffle=False)

    # preprocess the data
    pipeline = Pipeline([
    ('std_scaler', StandardScaler()),
    ])
    # model = LinearRegression()
    model = RandomForestRegressor(n_estimators=20, random_state=0)

    # preprocessing fit transform on train data
    X_train = pipeline.fit_transform(X_train)
    # fit model on train data with train label
    model.fit(X_train, y_train)
    # transform on test data
    X_test = pipeline.transform(X_test)
    # predict on test data
    y_pred = model.predict(X_test)
    # print(np.sqrt(mean_squared_error(y_test, y_pred)))

    d = {'actual': y_test, 'predict': y_pred}
    plot_data = pd.DataFrame.from_dict(d)
    sns.lineplot(data=plot_data)
    plt.show()

Что делать с масштабированием?

Это то, что я получил для построения прогноза, фактическая цена закрытия против времени

predict, label vs time

1 Ответ

0 голосов
/ 01 июля 2019

Проблема в основном исходит от используемой вами модели.Регрессор RandomForest создается на деревьях решений.Он учится сопоставлять входные данные с выходными для каждого примера в обучающем наборе.Следовательно, регрессор RandomForest будет работать для средних значений, но для экстремальных значений, которые он не видел во время обучения, он, конечно, будет работать, если ваша фотография показывает.То, что вы хотите, это изучить функцию напрямую, используя линейную / полиномиальную регрессию или более продвинутые алгоритмы, такие как ARIMA.

...