Узнайте, как построить модель 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, вы можете повысить эффективность прогнозирования модели. Удачных прогнозов!