ИИ для прогноза акций Apple: гайд для школьников и начинающих | AiManual
AiManual Logo Ai / Manual.
28 Дек 2025 Гайд

Как школьнику сделать ИИ для прогноза акций Apple: пошаговый гайд

Пошаговый гайд по созданию ИИ для прогноза акций Apple. Проект для школы с датасетами, Python кодом и простыми моделями машинного обучения.

Почему именно прогноз акций Apple?

Если ты школьник и хочешь сделать крутой проект по машинному обучению, прогноз акций — идеальный вариант. Почему? Во-первых, это реальная задача, которую решают хедж-фонды и трейдеры по всему миру. Во-вторых, данные по акциям Apple (AAPL) доступны бесплатно и в огромных количествах. В-третьих, это отличный способ понять, как работает обучение с учителем и бинарная классификация — две ключевые концепции ML.

Важно: Этот проект — образовательный. Не используй его для реальных инвестиций! Рынок акций сложнее, чем кажется, и наш простой ИИ не учитывает множество факторов.

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

Основная задача — научить компьютер предсказывать, вырастет ли цена акций Apple завтра, основываясь на данных за последние дни. Это задача бинарной классификации: модель должна ответить «да» (1) или «нет» (0).

Сложность в том, что:

  • Цены акций зависят от сотен факторов (новости, экономика, настроения инвесторов)
  • Рынок нестабилен и подвержен случайным колебаниям
  • Нужно правильно подготовить данные и выбрать признаки (features)

Решение: простой пайплайн машинного обучения

Мы создадим классический ML-пайплайн из 5 шагов:

  1. Сбор и загрузка данных
  2. Предобработка и создание признаков
  3. Разделение на обучающую и тестовую выборки
  4. Обучение моделей (логистическая регрессия, Random Forest)
  5. Оценка точности и визуализация результатов
💡
Этот подход похож на создание ML-песочницы для Data Scientist'ов, только в миниатюре и без сложной инфраструктуры.

1 Подготовка среды и установка библиотек

Для начала создай виртуальное окружение и установи необходимые библиотеки:

# Создаем виртуальное окружение
python -m venv apple_stock_env

# Активируем (Windows)
apple_stock_env\Scripts\activate
# Или Mac/Linux
source apple_stock_env/bin/activate

# Устанавливаем библиотеки
pip install pandas numpy matplotlib seaborn scikit-learn yfinance jupyter

Предупреждение: Если у тебя уже установлен Python, убедись, что версия 3.8 или выше. Старые версии могут не поддерживать некоторые библиотеки.

2 Сбор данных с Yahoo Finance

Используем библиотеку yfinance для загрузки исторических данных Apple. Это бесплатно и легально:

import yfinance as yf
import pandas as pd
import numpy as np

# Загружаем данные Apple за последние 5 лет
data = yf.download('AAPL', start='2019-01-01', end='2024-12-31')

# Сохраняем в CSV на всякий случай
data.to_csv('apple_stock_data.csv')

# Посмотрим на первые строки
print(data.head())
print(f"\nВсего строк: {len(data)}")

Ты получишь DataFrame с колонками:

Колонка Описание
Open Цена открытия
High Максимальная цена дня
Low Минимальная цена дня
Close Цена закрытия
Volume Объем торгов

3 Создание целевой переменной и признаков

Наша цель — предсказать, вырастет ли цена завтра. Создадим целевую переменную:

# Создаем целевую переменную: 1 если цена завтра выше сегодняшней, иначе 0
data['Target'] = (data['Close'].shift(-1) > data['Close']).astype(int)

# Удаляем последнюю строку (у нее нет целевого значения)
data = data[:-1]

# Создаем технические индикаторы как признаки
data['SMA_5'] = data['Close'].rolling(window=5).mean()  # Скользящее среднее за 5 дней
data['SMA_10'] = data['Close'].rolling(window=10).mean()
data['Price_Change'] = data['Close'].pct_change()  # Процентное изменение

data['High_Low_Pct'] = (data['High'] - data['Low']) / data['Close'] * 100
data['Volume_Change'] = data['Volume'].pct_change()

# Удаляем строки с NaN (первые дни, где нет скользящих средних)
data_clean = data.dropna().copy()

print(f"Данных после очистки: {len(data_clean)}")
print(data_clean[['Close', 'Target', 'SMA_5', 'Price_Change']].head(10))
💡
Создание правильных признаков — ключевой этап. Здесь мы используем простые технические индикаторы, но в реальных проектах можно добавить больше, как в продвинутых аналитических системах.

4 Подготовка данных для обучения

Разделим данные на признаки (X) и целевую переменную (y), а затем на обучающую и тестовую выборки:

from sklearn.model_selection import train_test_split

# Выбираем признаки
features = ['Open', 'High', 'Low', 'Close', 'Volume', 
            'SMA_5', 'SMA_10', 'Price_Change', 
            'High_Low_Pct', 'Volume_Change']

X = data_clean[features]
y = data_clean['Target']

# Разделяем данные: 80% на обучение, 20% на тестирование
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, shuffle=False
)

print(f"Обучающая выборка: {len(X_train)} записей")
print(f"Тестовая выборка: {len(X_test)} записей")
print(f"Процент роста в обучающей: {y_train.mean():.2%}")
print(f"Процент роста в тестовой: {y_test.mean():.2%}")

Важный нюанс: Мы используем shuffle=False, потому что временные ряды имеют последовательность. Перемешивание разрушит временные зависимости.

5 Обучение моделей машинного обучения

Попробуем две простые модели: логистическую регрессию и Random Forest:

from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report

# Модель 1: Логистическая регрессия
lr_model = LogisticRegression(max_iter=1000, random_state=42)
lr_model.fit(X_train, y_train)
lr_predictions = lr_model.predict(X_test)

# Модель 2: Random Forest
rf_model = RandomForestClassifier(n_estimators=100, random_state=42, max_depth=5)
rf_model.fit(X_train, y_train)
rf_predictions = rf_model.predict(X_test)

# Оценка точности
lr_accuracy = accuracy_score(y_test, lr_predictions)
rf_accuracy = accuracy_score(y_test, rf_predictions)

print(f"Точность логистической регрессии: {lr_accuracy:.2%}")
print(f"Точность Random Forest: {rf_accuracy:.2%}")
print("\nОтчет по классификации (Random Forest):")
print(classification_report(y_test, rf_predictions))

6 Визуализация результатов

Создадим графики, чтобы лучше понять результаты:

import matplotlib.pyplot as plt
import seaborn as sns

# Настройка стиля графиков
plt.style.use('seaborn-v0_8-whitegrid')
sns.set_palette("husl")

fig, axes = plt.subplots(2, 2, figsize=(14, 10))

# 1. Фактическая цена и прогнозы
axes[0, 0].plot(data_clean.index[-len(y_test):], data_clean['Close'].iloc[-len(y_test):], 
                label='Фактическая цена', alpha=0.7)
axes[0, 0].set_title('Цена акций Apple (тестовый период)')
axes[0, 0].set_xlabel('Дата')
axes[0, 0].set_ylabel('Цена ($)')
axes[0, 0].legend()
axes[0, 0].tick_params(axis='x', rotation=45)

# 2. Сравнение точности моделей
models = ['Логистическая регрессия', 'Random Forest']
accuracies = [lr_accuracy, rf_accuracy]
axes[0, 1].bar(models, accuracies, color=['skyblue', 'lightcoral'])
axes[0, 1].set_title('Сравнение точности моделей')
axes[0, 1].set_ylabel('Точность')
axes[0, 1].set_ylim(0, 1)
for i, v in enumerate(accuracies):
    axes[0, 1].text(i, v + 0.02, f'{v:.2%}', ha='center')

# 3. Важность признаков в Random Forest
feature_importance = pd.DataFrame({
    'feature': features,
    'importance': rf_model.feature_importances_
}).sort_values('importance', ascending=True)

axes[1, 0].barh(feature_importance['feature'], feature_importance['importance'])
axes[1, 0].set_title('Важность признаков (Random Forest)')
axes[1, 0].set_xlabel('Важность')

# 4. Матрица ошибок для Random Forest
from sklearn.metrics import confusion_matrix
import seaborn as sns

cm = confusion_matrix(y_test, rf_predictions)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', ax=axes[1, 1])
axes[1, 1].set_title('Матрица ошибок (Random Forest)')
axes[1, 1].set_xlabel('Предсказанный класс')
axes[1, 1].set_ylabel('Фактический класс')
axes[1, 1].set_xticklabels(['Не рост', 'Рост'])
axes[1, 1].set_yticklabels(['Не рост', 'Рост'])

plt.tight_layout()
plt.savefig('apple_stock_predictions.png', dpi=300, bbox_inches='tight')
plt.show()

Возможные ошибки и как их избежать

Ошибка Причина Решение
Точность около 50% Модель не учится, признаки не информативны Добавь больше признаков (RSI, MACD, волатильность)
Переобучение Модель запоминает шум, а не закономерности Уменьши сложность модели, используй регуляризацию
Data leakage Использование будущих данных для прогноза прошлого Всегда разделяй данные хронологически
Низкая точность на новых данных Рынок изменился, модель устарела Регулярно переобучай модель на свежих данных

Как улучшить проект для школы?

Чтобы получить отличную оценку, добавь эти элементы:

  1. Веб-интерфейс: Создай простой сайт на Flask или Streamlit, где можно ввести дату и получить прогноз
  2. Больше данных: Добавь данные по конкурентам Apple (Microsoft, Google) или макроэкономические показатели
  3. Ансамбли моделей: Объедини прогнозы нескольких моделей для повышения точности
  4. Анализ ошибок: Проанализируй, в какие дни модель ошибается чаще всего и почему
  5. Бэктестинг: Смоделируй, сколько денег можно было бы заработать, следуя прогнозам модели
💡
Если хочешь углубиться в сложные ML-системы, посмотри статью про мультиагентные системы, но для школьного проекта простой подход часто лучше.

Часто задаваемые вопросы (FAQ)

1. Почему точность не 100%?

Рынок акций — сложная система со множеством случайных факторов. Даже профессиональные трейдеры не могут предсказывать с абсолютной точностью. Точность 55-65% уже считается хорошей для простой модели.

2. Можно ли использовать эту модель для реальных инвестиций?

Нет! Это образовательный проект. Реальные инвестиции требуют учета сотен факторов, анализа рисков и глубокого понимания рынка. Начни с бумажной торговли (simulated trading), если хочешь попрактиковаться.

3. Какие еще модели можно попробовать?

После освоения базовых моделей попробуй:

  • Градиентный бустинг (XGBoost, LightGBM)
  • Простые нейронные сети (MLP)
  • Модели для временных рядов (ARIMA, LSTM)

4. Как представить проект на школьной конференции?

Создай презентацию с:

  1. Постановкой проблемы (зачем прогнозировать акции?)
  2. Описанием данных и их источников
  3. Визуализацией процесса (графики из кода выше)
  4. Результатами и выводами
  5. Демонстрацией работающего прототипа (если сделал веб-интерфейс)

Заключение

Ты только что создал свой первый ИИ для прогноза акций! Это отличный старт в машинном обучении. Помни:

  • Начинай с простого и постепенно усложняй
  • Экспериментируй с разными признаками и моделями
  • Визуализируй всё — это помогает понять данные
  • Делись кодом на GitHub (это отличное портфолио)

Следующий шаг — попробовать предсказывать не просто рост/падение, а процент изменения. Или добавить анализ новостей о Apple с помощью NLP. Возможности безграничны!

💡
Если тебе интересны фундаментальные математические задачи в ML, посмотри статью про гипотезу Римана — это показывает, как далеко может зайти машинное обучение.