Добро пожаловать в это руководство по разработке модели прогнозирования волатильности с использованием Python. В этом руководстве мы рассмотрим, как получить исторические данные о волатильности с помощью библиотеки yfinance
и использовать такие методы, как GARCH (обобщенная авторегрессионная условная гетероскедастичность), для оценки и прогнозирования волатильности на фондовом рынке.
Волатильность — это мера изменения цены финансового инструмента во времени. Это важная концепция в финансах, поскольку она помогает инвесторам оценить риск, связанный с инвестициями. Прогнозируя волатильность, мы можем получить представление о потенциальных движениях рынка и принять обоснованные инвестиционные решения.
В этом уроке мы рассмотрим следующие темы:
- Получение исторических данных о волатильности с помощью
yfinance
- Исследовательский анализ данных волатильности
- Внедрение модели GARCH для прогнозирования волатильности
- Оценка эффективности модели прогнозирования волатильности
На протяжении всего руководства мы будем использовать концепции объектно-ориентированного программирования для создания всеобъемлющей и многократно используемой модели прогнозирования волатильности. Мы также включим основы Python и объясним их в разговорной манере, чтобы обеспечить глубокое понимание концепций.
Получение исторических данных о волатильности
Для начала нам нужны исторические данные о волатильности для обучения и тестирования нашей модели прогнозирования волатильности. Мы будем использовать библиотеку yfinance
для получения этих данных непосредственно в Python.
Во-первых, давайте установим библиотеку yfinance
, выполнив следующую команду:
!pip install yfinance
После завершения установки мы можем импортировать необходимые библиотеки и получить исторические данные о волатильности. Вот код:
import yfinance as yf import numpy as np # Define the ticker symbol for the stock ticker_symbol = "AAPL" # Retrieve historical data using yfinance stock_data = yf.download(ticker_symbol, start="2010-01-01", end="2023-06-30") # Calculate daily returns stock_data["Returns"] = np.log(stock_data["Close"] / stock_data["Close"].shift(1)) # Calculate daily volatility stock_data["Volatility"] = stock_data["Returns"].rolling(window=252).std() * np.sqrt(252) # Remove missing values stock_data = stock_data.dropna() # Display the first few rows of the data print(stock_data.head())
В приведенном выше коде мы сначала импортируем необходимые библиотеки: yfinance
для получения данных и numpy
для выполнения вычислений. Затем мы определяем тикер для акции, которую хотим проанализировать (в данном случае «AAPL» для Apple Inc.).
Затем мы используем функцию yf.download()
для получения исторических данных для указанного тикера. Мы устанавливаем дату начала как «2010-01-01» и дату окончания как «2023-06-30». Не стесняйтесь корректировать эти даты в соответствии с вашими потребностями.
После получения данных мы рассчитываем дневную доходность, взяв логарифмическую разницу цен закрытия. Затем мы рассчитываем дневную волатильность, беря скользящее стандартное отклонение дневной доходности за окно в 252 торговых дня (приблизительно один год) и умножая его на квадратный корень из 252, чтобы перевести волатильность в годовой отчет.
Наконец, мы удаляем все отсутствующие значения из данных и отображаем первые несколько строк, чтобы убедиться, что данные были получены правильно.
Давайте визуализируем исторические данные о волатильности, используя линейный график. Вот код:
import matplotlib.pyplot as plt # Plot the historical volatility plt.figure(figsize=(10, 6)) plt.plot(stock_data["Volatility"]) plt.title("Historical Volatility of AAPL") plt.xlabel("Date") plt.ylabel("Volatility") plt.grid(True) plt.show()
В приведенном выше коде мы импортируем библиотеку matplotlib.pyplot
и строим исторические данные о волатильности с помощью функции plt.plot()
. Мы устанавливаем размер фигуры на (10, 6), чтобы настроить размеры графика. Мы также добавляем заголовок, метку оси X, метку оси Y и линии сетки, чтобы улучшить читаемость графика.
Теперь, когда мы получили и визуализировали исторические данные о волатильности, давайте перейдем к исследовательскому анализу данных.
Исследовательский анализ данных
Исследовательский анализ данных (EDA) является важным шагом в любом проекте анализа данных. Это помогает нам понимать характеристики данных, выявлять закономерности и раскрывать идеи, которые могут направлять наши решения по моделированию.
В этом разделе мы выполним EDA для исторических данных о волатильности, которые мы получили ранее. Начнем с расчета некоторых основных статистических данных. Вот код:
# Calculate basic statistics mean_volatility = stock_data["Volatility"].mean() median_volatility = stock_data["Volatility"].median() min_volatility = stock_data["Volatility"].min() max_volatility = stock_data["Volatility"].max() # Display the statistics print("Mean Volatility:", mean_volatility) print("Median Volatility:", median_volatility) print("Minimum Volatility:", min_volatility) print("Maximum Volatility:", max_volatility)
Приведенный выше код вычисляет среднее, медианное, минимальное и максимальное значения исторических данных волатильности. Затем мы отображаем эту статистику с помощью функции print()
.
Mean Volatility: 0.27819826458743924 Median Volatility: 0.26734167832860667 Minimum Volatility: 0.16879256252237965 Maximum Volatility: 0.4746781009399715
Далее давайте визуализируем распределение исторических данных волатильности с помощью гистограммы. Вот код:
# Plot the distribution of volatility plt.figure(figsize=(10, 6)) plt.hist(stock_data["Volatility"], bins=30, edgecolor="black") plt.title("Distribution of Volatility") plt.xlabel("Volatility") plt.ylabel("Frequency") plt.grid(True) plt.show()
В приведенном выше коде мы используем функцию plt.hist()
для построения гистограммы исторических данных волатильности. Мы устанавливаем количество интервалов равным 30, чтобы контролировать степень детализации гистограммы. Мы также добавляем заголовок, метку оси X, метку оси Y и линии сетки, чтобы улучшить читаемость графика.
Теперь, когда мы изучили базовую статистику и распределение исторических данных о волатильности, давайте перейдем к реализации модели GARCH для прогнозирования волатильности.
Реализация модели GARCH
Модель GARCH (обобщенная авторегрессионная условная гетероскедастичность) — это популярный подход к моделированию и прогнозированию волатильности данных финансовых временных рядов. Он учитывает условную гетероскедастичность, что означает, что волатильность данных может меняться во времени.
В этом разделе мы реализуем модель GARCH, используя библиотеку arch
в Python. Начнем с установки библиотеки arch
, выполнив следующую команду:
!pip install arch
После завершения установки мы можем импортировать необходимые библиотеки и реализовать модель GARCH. Вот код:
import arch # Create a GARCH model garch_model = arch.arch_model(stock_data["Returns"], vol="Garch", p=1, q=1) # Fit the model garch_model_fit = garch_model.fit() # Display the model summary print(garch_model_fit.summary())
В приведенном выше коде мы сначала импортируем библиотеку arch
и создаем модель GARCH с помощью функции arch.arch_model()
. Мы передаем дневную доходность в качестве входных данных и указываем модель волатильности как «Garch» с p = 1 и q = 1, которые представляют порядок компонентов авторегрессии и скользящего среднего в модели соответственно.
Затем мы подгоняем модель GARCH к данным, используя метод fit()
. Это оценивает параметры модели с использованием оценки максимального правдоподобия.
Наконец, мы отображаем сводку модели GARCH, используя метод summary()
. Это предоставляет информацию об оцененных параметрах, стандартных ошибках и других статистических показателях.
Теперь, когда мы внедрили модель GARCH, давайте оценим ее эффективность при прогнозировании волатильности.
Оценка производительности
Чтобы оценить эффективность модели GARCH в прогнозировании волатильности, мы сравним прогнозируемую волатильность с фактической волатильностью. Мы будем использовать среднеквадратичную ошибку (RMSE) в качестве метрики оценки.
Начнем с создания прогнозов волатильности с использованием модели GARCH. Вот код:
# Generate volatility forecasts forecast_volatility = garch_model_fit.forecast(horizon=1) # Extract the forecasted volatility forecasted_volatility = np.sqrt(forecast_volatility.variance.values[-1, :]) # Display the forecasted volatility print("Forecasted Volatility:", forecasted_volatility)
Приведенный выше код генерирует прогнозы волатильности с использованием метода forecast()
подобранной модели GARCH. Мы устанавливаем горизонт равным 1, что означает, что мы заинтересованы в прогнозировании волатильности для следующего временного шага. Затем мы извлекаем прогнозируемую волатильность из объекта прогноза и отображаем ее с помощью функции print()
.
Forecasted Volatility: [0.01412285]
Далее давайте сравним прогнозируемую волатильность с фактической волатильностью. Вот код:
# Extract the actual volatility actual_volatility = stock_data["Volatility"].values[-1] # Calculate the root mean squared error rmse = np.sqrt(np.mean((forecasted_volatility - actual_volatility) ** 2)) # Display the RMSE print("Root Mean Squared Error:", rmse)
В приведенном выше коде мы извлекаем фактическую волатильность из исторических данных о волатильности и вычисляем среднеквадратичную ошибку между прогнозируемой волатильностью и фактической волатильностью. Затем мы отображаем RMSE, используя функцию print()
.
Root Mean Squared Error: 0.28266498314196065
Поздравляем! Вы успешно разработали модель прогнозирования волатильности с использованием метода GARCH. Извлекая исторические данные о волатильности, выполняя исследовательский анализ данных, внедряя модель GARCH и оценивая ее эффективность, вы получили ценную информацию о волатильности фондового рынка.
Заключение
В этом руководстве мы рассмотрели, как разработать модель прогнозирования волатильности с помощью Python. Мы использовали библиотеку yfinance
для извлечения исторических данных о волатильности, провели исследовательский анализ данных, чтобы понять характеристики данных, внедрили модель GARCH для прогнозирования волатильности и оценили ее эффективность с использованием среднеквадратичной ошибки.
Включив концепции объектно-ориентированного программирования и объяснив основы Python в разговорной манере, мы стремились предоставить всесторонний и практический опыт обучения. Мы надеемся, что это руководство помогло вам понять процесс прогнозирования волатильности и то, как его можно применять на фондовом рынке.
Не забудьте поэкспериментировать с различными акциями, настроить параметры модели GARCH и изучить другие методы, чтобы еще больше углубить свое понимание прогнозирования волатильности.