Прогноз цен на золото с использованием Python

Обзор :

В этой статье мы создадим проект о том, как анализировать и прогнозировать будущие цены на золото, используя регрессор случайного леса машинного обучения. Звучит увлекательно? Тогда давайте продолжим..!!

Кратко о регрессии случайного леса

Чтобы понять, что такое алгоритм регрессии случайного леса, можно дать простое, но четкое определение: Регрессия случайного леса — это контролируемый алгоритм обучения, который использует метод ансамблевого обучения для регрессии. Он работает путем построения нескольких деревьев решений во время обучения и вывода среднего значения классов в качестве прогноза всех деревьев, как указано в статье levelup.gitconnected.

Источник изображения: ссылка

Создание нашего проекта:

Примечание: это видео на YouTube вдохновляет этот проект. Обязательно ознакомьтесь с ним после прочтения этой статьи: ссылка.

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

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

Описание набора данных:

В этом проекте я использовал набор данных, доступный на Kaggle. Можно найти различные такие сайты для загрузки. (Обратите внимание, что чем больше набор данных, тем больше времени потребуется для обучения модели. В качестве удобного для начинающих предложения я посоветую вам взять набор данных среднего размера с небольшим количеством значений, чтобы сначала понять, как он работает.)

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

Хотя, вы также должны знать, чем больше данных вы передаете модели для обучения, тем больше мы можем обучить нашу модель, и тем более точными получаются наши результаты, но в то же время увеличивается время компиляции, и если вы новичок, вы можете потерять энтузиазм в это утомительное время. Не волнуйтесь, если вам все это покажется странным, то же самое было и со мной, когда я только начинал, все это обретет смысл через несколько минут :)

Кодирование проекта:

Поскольку мы будем использовать Python для этого проекта, нам также понадобится подходящая среда для запуска нашего кода. Вы можете использовать любую предпочитаемую среду (например, Pycharm, VS Code, Sublime и т. д.). В моем случае я использовал Google Collaboratory, так как он устраняет утомительный процесс компиляции на самом компьютере, и любой тип кода можно запускать очень легко.

Зависимости:

Первое, что нам нужно сделать, это импортировать необходимые зависимости, которые мы будем использовать в следующей части программы. Здесь, в этом проекте, мы будем использовать numpy, pandas, matplotlib и sklearn.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn import metrics

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

Чтение набора данных:

Поскольку загруженный файл набора данных имеет форму CSV-файла, для его чтения нам понадобится модуль pandas. Он поставляется с методом read.csv() для чтения CSV-файлов.

Давайте сохраним его в переменной с именем «gold_data».

gold_data = pd.read_csv('/content/gold price dataset.csv')

Чтобы посмотреть, как данные были сохранены в переменной, мы используем команду variable_name.head(), чтобы просмотреть первые пять строк таблицы.

gold_data.head()

Вышеуказанный вывод.

Значение значений столбца (SPX, USO и т. д.) можно найти на веб-сайте, с которого мы скачали набор данных.

Мы видели на Kaggle при загрузке набора данных, что данные имеют 2290 строк и 6 столбцов.

Теперь давайте проверим, сколько ячеек в таблице осталось пустыми, чтобы лучше понять:

gold_data.isnull().sum()

Результат был:

Разделение данных на цель и функции:

X = gold_data.drop(['Date','GLD'],axis=1)
Y = gold_data['GLD']

Так как пустых ячеек не было, мы могли легко приступить к манипуляциям с таблицей;

Здесь X — переменная характеристик, содержащая все характеристики, такие как SPX, USO, SLV и т. д., от которых зависит цена золота, за исключением самих столбцов GLD и Date.

Y, с другой стороны, является целевой переменной, поскольку это результат, который мы хотим определить, то есть цена золота. (Он содержит только столбец GLD).

Разделение набора данных на наборы для тестирования и наборы для обучения:

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state=2)

Давайте разберемся с переменными, зная, какие типы значений они хранят:

X_train: содержит случайный набор значений из переменной «X».

Y_train: содержит вывод (цену золота) соответствующего значения X_train.

X_test: содержит случайный набор значений из переменной ‘ X ’, исключая значения из X_train (поскольку они уже взяты).

Y_test: содержит вывод (цена золота) соответствующего значения X_test.

test_size: представляет соотношение того, как данные распределяются между X_trai и X_test (здесь 0,2 означает, что данные будут разделены в переменных X_train и X_test в соотношении 80:20). Вы можете использовать любое значение, которое хотите. Значение ‹ 0,3 является предпочтительным.

Спецификация модели и определение:

Мы будем использовать модель регрессора Random Forest.

Назовем нашу модель «регрессор».

regressor = RandomForestRegressor(n_estimators=100)

Теперь давайте обучим модель с нашими значениями, содержащими набор обучающих данных, которые (X_train, Y_train)

regressor.fit(X_train,Y_train)

Модель обучается следующим образом: «Когда значения X такие, то значение Y такое».

Оценка определенной модели:

Теперь давайте предскажем значения набора данных X_test, используя метод predict(), чтобы проверить точность модели.

test_data_prediction = regressor.predict(X_test)

Вычисление ошибки R-квадрата из прогнозируемого значения:

error_score = metrics.r2_score(Y_test, test_data_prediction)
print("R squared error : ", error_score)

На выходе получается: «Ошибка в квадрате R: 0,9887338861925125», что является отличным результатом..!!

Сравнение фактических и прогнозируемых значений:

Преобразование значений Y_test в список.

Y_test = list(Y_test)

Теперь построим графики значений фактических цен по сравнению с прогнозируемыми ценами, чтобы узнать, насколько наши прогнозы были близки к фактическим ценам:

plt.plot(Y_test, color='blue', label = 'Actual Value')
plt.plot(test_data_prediction, color='green', label='Predicted Value')
plt.title('Actual Price vs Predicted Price')
plt.xlabel('Number of values')
plt.ylabel('GLD Price')
plt.legend()
plt.show()

И на выходе получилось:

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

Примечания к прощанию:

Как вы видели в этом проекте, мы сначала обучаем модель машинного обучения, а затем используем обученную модель для прогнозирования. Точно так же любую модель можно сделать гораздо более точной, предоставив очень большой набор данных, чтобы получить очень точную оценку (но это займет довольно много времени). Для новичка я считаю, что набор данных, который я использовал, был довольно приличным.

Спасибо, что прочитали…

Если вам понравилась статья, поделитесь ею с друзьями.

Добрый день..!!

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

Связанный

"Почта"