прогностическое моделирование с использованием метода случайного леса

Вопрос или проблема

Я создал модель классификации случайного леса в scikit-learn, но не уверен, как завершить свой прогноз.

Я построил модель, и она показывает хорошие результаты на тестовых данных. Я получаю среднюю точность 85%. Прогнозирую, вырастет ли цена акций или упадет. Я использовал данные из Yahoo Finance, состоящие из открытой, максимальной, минимальной, закрытой цен и объема. Оттуда я вычислил некоторые технические индикаторы, такие как RSI, ROC, стохастические осцилляторы (быстрый и медленный), MACD, объем на балансе и 200-дневную скользящую среднюю и использовал их в качестве признаков (независимых переменных) в классификаторе случайного леса. Я создал еще один столбец, показывающий 1, когда цена выросла, и 0, когда цена упала. Этот столбец использовался в качестве зависимой переменной. (то, что я хочу предсказать)

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

Но как? Я не могу найти в документации scikit-learn о случайном лесу, как фактически сделать прогноз на будущее (не на тестовых данных), скажем, например, на следующие 10 дней с последнего дня данных. Надеюсь, вы понимаете, о чем я. Вот мой код.

Вот мой код:

X_train2, X_test2, y_train2, y_test2 =
train_test_split(data2.drop('prediction',axis=1),data2.prediction,test_size=0.02)

from sklearn.ensemble import RandomForestClassifier
model1 = RandomForestClassifier(random_state=13)
model1.fit(X_train2,y_train2)

predicted = model1.predict(X_test2)
model1.score(X_test2, y_test2)

from sklearn.metrics import roc_auc_score 
probabilities = model1.predict_proba(X_test)
probabilities

roc_auc_score(y_test2, probabilities[:,1])

from sklearn.metrics import confusion_matrix

confusion_matrix(y_test2, predicted)

введите описание изображения здесь

В вашем случае X – это не будущие данные.

X – это сегодняшние данные, так как вы пытаетесь предсказать завтрашнее увеличение или уменьшение значения 1 или 0.

Таким образом, model1.predict(X) с X, являющимся современными данными, даст вам предсказание 0 или 1.

И это всё с вашей моделью.

Краткий ответ: вы не можете запустить свою текущую модель, как описано, в будущее. Тем не менее, есть надежда.

При построении модели прогнозирования вы, как правило, используете “авторегрессионную” модель, которая предсказывает, например, цену в будущем на основе цены в прошлом. Причина, по которой это работает, заключается в том, что вы предсказываете следующее значение и генерируете следующий вход для вашей модели. Допустим, у вас есть авторегрессионная модель $F(X) \rightarrow Y$, которая предсказывает цену акций завтра ($Y$) на основе цены сегодня ($X$). Вы можете запустить это в будущее с помощью рекурсивных вызовов к вашей модели.
$Y_{10}$ = $F(Y_9)$ = $F(F(Y_8))$$= F(…F(X)$.

Теперь давайте взглянем на ваш случай. Ваша модель принимает на вход различные технические индикаторы
$\color{grey}{\text{RSI, ROC, стохастические осцилляторы (быстрые и медленные), MACD, объем на балансе и 200-дневная скользящая средняя}}$
Таким образом, с вашей текущей моделью, чтобы спроецировать на будущее 10 дней, нам нужна оценка этих признаков на 9 дней вперед.

Вот несколько решений.

Вы можете обучить модель, чтобы предсказывать на 10 дней вперед. Таким образом, вместо обучения $F(X_i) \rightarrow Y_{i+1}$ вы обучаете $F(X_i) \rightarrow Y_{i+10}$.

Вы можете построить модель, чтобы предсказывать ваши признаки на будущее. $F(X_i) \rightarrow X_{i+1}$, а затем использовать эти новые оцененные признаки с вашей текущей моделью. Это легче, если $\color{grey}{\text{RSI, ROC, стохастические осцилляторы, …}}$ выведены из цены. В этом случае мы можем оценить цену, а затем вывести эти значения. Хотя я не знаком с финансами, чтобы сказать, можете ли вы вывести их из цены.

Тем не менее, в качестве предостережения вы должны глубоко подумать о производительности вашей модели и о том, не вводит ли она вас в заблуждение. Вы можете рассмотреть следующее: Сравнивали ли вы производительность с какими-либо простыми базовыми моделями? Есть ли “утечка цели”? Если вы посмотрите на интерпретацию вашей модели, логичны ли шаблоны, которые она нашла?

Вы завершили фазу обучения. Следующая фаза обычно называется предсказанием / выводом. Это когда уже обученная модель предсказывает метки для данных.

Поскольку вы используете scikit-learn, вам следует вызвать .predict метод. В вашем коде это будет model1.predict(X), где X – это массив в стиле numpy, содержащий данные признаков. Результатом будет предсказанный класс (0 или 1) для каждой записи в X.

Ответ или решение

Прогнозирование с использованием модели случайного леса: Полное руководство

Введение

Разработка модели машинного обучения для прогнозирования цен на акции — важный этап в финансовом анализе. В данном случае вы создали классификационную модель с использованием Random Forest и достигли средней точности в 85% на тестовых данных. Модель использует технические индикаторы в качестве независимых переменных и бинарную метку (0 или 1) как зависимую переменную для прогнозирования изменения цен. Тем не менее, возникает вопрос: как применять вашу модель для прогноза цен на акции в будущем, а не на тестовых данных?

Шаг 1: Понимание вашей модели

Ваши независимые переменные включают:

  • RSI (индекс относительной силы)
  • ROC (показатель изменения)
  • Стохастические осцилляторы
  • MACD (конвергенция/дивергенция скользящих средних)
  • Объем нарастающим итогом
  • 200-дневная скользящая средняя

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

Шаг 2: Прогнозирование будущих значений

Чтобы использовать вашу модель Random Forest для прогнозирования на несколько дней вперед, следует применить один из следующих подходов:

  1. Авто-регрессионное моделирование:
    Это подразумевает, что вы используете вашу модель для прогнозирования следующего значения на основе текущего значения. Вы сможете выполнить это путем последовательных прогнозов, где каждое предсказание становится входными данными для следующего. Например, если вы предсказываете, будет ли цена расти или падать, вы можете использовать:
    [
    Y{n} = F(X{n-1})
    ]
    Здесь $Yn$ — это предсказание для дня $n$, а $X{n-1}$ — это данные за день $n-1$.

  2. Предсказание характеристик:
    Прогнозируйте зависимые переменные для создания наборов данных, которые можно затем использовать для генерации ваших независимых переменных. Вы можете создать новую модель, которая будет предсказывать ваши индикаторы (например, RSI, MACD и т. д.) на основе некоторой информации о прошлых ценах. После этого используйте результаты для ввода в вашу модель Random Forest.

Шаг 3: Реализация в коде

Для примера, допустим, что вы хотите осуществлять прогноз на 10 дней вперед. Вам нужно будет створить цикл, который будет прогонять прогнозы повторно:

# Предыдущие значения (например, последние известные индикаторы)
last_known_features = [...] # Здесь вы должны указать последние известные значения индикаторов

predictions = []

for day in range(10):
    prediction = model1.predict([last_known_features])
    predictions.append(prediction[0])

    # Здесь обновляем last_known_features
    # Мы можем добавить логику для изменения last_known_features на основании предсказанного значения

Шаг 4: Оценка результатов

Важно помнить, что простая высокая точность на тестовых данных не всегда гарантирует успех на реальных данных. Рекомендуется:

  • Сравнить производительность вашей модели с простыми базовыми моделями, чтобы убедиться в ее эффективности.
  • Проверить на наличие утечек целевой переменной — когда информация из тестового набора данных неправомерно используется в процессе обучения.
  • Интерпретировать модель и проверить, логичны ли найденные ею закономерности.

Заключение

Прогнозирование будущих цен на акции с использованием Random Forest требует продуманного подхода к выбору и параллельной разработке моделей. Используя представленные методы и рекомендации, вы сможете лучше использовать свою модель для прогнозирования и принимать более обоснованные инвестиционные решения.

Оцените материал
Добавить комментарий

Капча загружается...