Узнайте, как построить модель ARIMA для прогнозирования временных рядов для прогнозирования цен на акции Apple.
Введение
В этом руководстве мы познакомим вас с реализацией модели ARIMA для прогнозирования временных рядов с использованием данных о ценах на акции Apple Inc. (AAPL). ARIMA (AutoRegressive Integrated Moving Average) — популярный метод прогнозирования будущих значений на основе исторических данных. Давайте погрузимся!
Шаг 1: Импорт необходимых библиотек
Для начала нам нужно импортировать несколько основных библиотек Python:
import pandas as pd import numpy as np import matplotlib.pyplot as plt from statsmodels.tsa.arima.model import ARIMA from sklearn.metrics import mean_squared_error import yfinance as yf
Шаг 2. Скачайте и загрузите набор данных
Мы будем использовать исторический набор данных о ценах на акции от Yahoo Finance для Apple Inc. (AAPL):
def download_stock_data(ticker, start_date, end_date): stock_data = yf.download(ticker, start=start_date, end=end_date) return stock_data ticker = 'AAPL' start_date = '2015-01-01' end_date = '2021-01-01' data = download_stock_data(ticker, start_date, end_date)
Шаг 3: Предварительно обработайте набор данных
Давайте предварительно обработаем набор данных, чтобы сделать его пригодным для прогнозирования временных рядов:
data['Close'] = data['Adj Close'] data = data[['Close']]
Шаг 4: Визуализируйте данные временных рядов
Давайте визуализируем данные о ценах на акции, чтобы лучше понять их структуру:
plt.figure(figsize=(10, 6)) plt.plot(data['Close']) plt.xlabel('Date') plt.ylabel('Close Price') plt.title('Apple Stock Price Time Series') plt.show()
Шаг 5: Разделите данные
Теперь давайте разделим данные на наборы для обучения и тестирования:
train_data = data['Close'][:int(len(data)*0.8)] test_data = data['Close'][int(len(data)*0.8):]
Шаг 6: Обучите модель ARIMA
Далее мы обучим нашу модель ARIMA. Мы будем использовать параметры (p, d, q) (1, 1, 1) для этого урока. Вы можете оптимизировать эти параметры для достижения лучших результатов:
model = ARIMA(train_data, order=(1, 1, 1)) model_fit = model.fit()
Шаг 7: Делайте прогнозы и оценивайте модель
Теперь мы можем делать прогнозы на тестовых данных и оценивать производительность модели:
forecast = model_fit.forecast(steps=len(test_data)) mse = mean_squared_error(test_data, forecast) print("Mean Squared Error:", mse)
Шаг 8: Визуализируйте прогноз
Давайте визуализируем фактические цены акций и прогнозируемые значения:
plt.figure(figsize=(10, 6)) plt.plot(train_data, label='Training Data') plt.plot(test_data, label='Test Data') plt.plot(test_data.index, forecast, label='Forecast', color='r') plt.xlabel('Date') plt.ylabel('Close Price') plt.title('ARIMA Model Forecast') plt.legend() plt.show()
Развертывание вашей модели машинного обучения в облаке
Введение в развертывание
В этом разделе мы покажем вам, как развернуть вашу модель машинного обучения, такую как прогнозирование временных рядов ARIMA, в облаке. Мы будем использовать Flask, облегченную веб-инфраструктуру, для создания веб-приложения и Heroku, облачную платформу, для развертывания.
Шаг 1: Настройте каталог вашего проекта
Создайте новый каталог для вашего проекта и настройте следующую структуру:
your_project/ | |-- app.py |-- requirements.txt |-- Procfile |-- model/ | |-- model.py | |-- model.pkl |-- templates/ | |-- index.html | |-- result.html
Шаг 2: Установите Фласк
Если вы еще этого не сделали, установите Flask с помощью следующей команды:
pip install Flask
Шаг 3: Создайте свое веб-приложение
В app.py
создайте простое веб-приложение Flask для обработки пользовательского ввода и отображения результатов:
from flask import Flask, render_template, request import model.model as model app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': user_input = request.form['user_input'] prediction = model.predict(user_input) return render_template('result.html', prediction=prediction) return render_template('index.html') if __name__ == '__main__': app.run(debug=True)
Шаг 4: Создайте HTML-шаблоны
Создайте два HTML-шаблона в папке templates
: index.html
для пользовательского ввода и result.html
для отображения результатов.
index.html
:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Your Model</title> </head> <body> <h1>Your Model</h1> <form action="/" method="POST"> <label for="user_input">Enter your input:</label> <input type="text" name="user_input" id="user_input" required> <button type="submit">Predict</button> </form> </body> </html>
result.html
:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Your Model</title> </head> <body> <h1>Your Model</h1> <p>Prediction: {{ prediction }}</p> <a href="/">Try again</a> </body> </html>
Шаг 5: Сохраните и загрузите свою модель
В папке model
создайте файл model.py
, содержащий функции для сохранения и загрузки обученной модели машинного обучения. Сохраните обученную модель в виде файла .pkl
в той же папке:
import pickle def save_model(model, filename): with open(filename, 'wb') as file: pickle.dump(model, file) def load_model(filename): with open(filename, 'rb') as file: return pickle.load(file) def predict(user_input): model = load_model('model.pkl') # Preprocess the user input and make predictions using your model # The preprocessing and prediction code will vary depending on your model (ARIMA or Naive Bayes) # For example: # processed_input = preprocess(user_input) # prediction = model.predict(processed_input) # Add the appropriate code for your specific model and return the prediction return prediction
Шаг 6: Создайте требования и Procfile
Создайте файл `requirements.txt` со следующими библиотеками:
Flask gunicorn numpy pandas matplotlib statsmodels scikit-learn yfinance
Убедитесь, что вы включили все дополнительные библиотеки, которые вы использовали в своем конкретном проекте.
Создайте Procfile
со следующим содержимым:
web: gunicorn app:app
Имея эти файлы, вы готовы развернуть свое приложение на Heroku.
Шаг 7. Разверните приложение на Heroku
Сначала установите интерфейс командной строки Heroku и создайте учетную запись на Heroku.
Инициализируйте репозиторий Git в каталоге вашего проекта и зафиксируйте изменения:
git init git add . git commit -m "Initial commit"
Войдите в Heroku и создайте новое приложение Heroku:
heroku login heroku create your-app-name
Разверните приложение:
git push heroku master
Ваша модель машинного обучения теперь развернута на Heroku! Посетите https://your-app-name.herokuapp.com
, чтобы просмотреть свое веб-приложение.
Заключение
В этом руководстве мы внедрили модель ARIMA для прогнозирования временных рядов с использованием данных о ценах на акции Apple Inc. (AAPL) из Yahoo Finance. Вы можете легко адаптировать этот код к своему конкретному варианту использования и набору данных, например к различным ценам на акции или другим типам данных временных рядов, например данным о погоде. Оптимизируя параметры модели ARIMA, вы можете повысить эффективность прогнозирования модели. Удачных прогнозов!