惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
D
Docker
Google DeepMind News
Google DeepMind News
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
V
Visual Studio Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
Recent Announcements
Recent Announcements
GbyAI
GbyAI
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
L
LangChain Blog
A
About on SuperTechFans
M
MIT News - Artificial intelligence
B
Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания
Какой подход к предсказанию последовательности стоит выбрать
vk15work · 2026-05-15 · via Все публикации подряд на Хабре

Какой подход к предсказанию последовательности стоит выбрать

Уровень сложностиПростой

Время на прочтение3 мин

Охват и читатели920

Кейс

Всем, привет. Если вы задавались вопросом, как эффективно построить прогноз для последовательности значений (например, для графика), то вам может оказаться полезным мой опыт. Изначально это должен был быть пост, но материал вышел за его рамки, поэтому получилась небольшая статья.

Построение прогноза последовательности - это тема отдельной книги, поэтому в своей статье я только слегка коснусь двух подходов:

  • построение прогноза по одной точке, используя цикл;

  • построение прогноза на весь период одним махом.

Есть и другие, но эти два рекомендуются наиболее часто, и я постараюсь пояснить на примерах, почему один из них скорее всего будет пустой тратой времени.

Построение прогноза в цикле по одному значению за раз

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

Модель для обучения и предсказания по одному значению может выглядеть, например, так:

model = Sequential([
    Input(shape=(64, 1)),
    # Слой долгой краткосрочной памяти, 
    # чтобы запоминать паттерны поведения последовательности
    LSTM(64, return_sequences=False),
    # Защита от переобучения сети
    Dropout(0.2),
    # Выходное значение одно
    Dense(1)
])

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

# Хотим прогноз на 7 шагов
forecast_step = 7
# Делаем список из наших начальных данных data
last_window = data[-64:].tolist() 
# Список для предсказаний
predictions = []
for _ in range(forecast_step):
    # Берем последние 64 елемента, делаем из них входной вектор
    input_data = np.array(last_window[-64:]).reshape(1, 64, 1)
    # Получаем предсказание
    next_val = float(model.predict(input_data, verbose=0)[0][0])
    predictions.append(next_val)
    # Добавляем предсказание в списк данных для следующего прогноза
    last_window.append(next_val)

Получим примерно такой результат:

Прогноз по одному значению в цикле

Прогноз по одному значению в цикле

Прогноз на 7 дней выглядит неестественно, но это и понятно, для прогноза 2-го и далее значения мы используем практически те же входные данные, добавляя всего по одному новому предсказанному значению. Странно было бы ожидать от модели сильно отличающегося прогноза.

Построение прогноза сразу на весь желаемый период

Если же мы хотим сделать модель, которая будет предсказывать не одно, а сразу нужное нам значение шагов, то она будет выглядеть примерно так:

model = Sequential([
    Input(shape=(64, 1)),  
    # Первый LSTM передает последовательность второму
    LSTM(64, return_sequences=True),
    Dropout(0.2),
    # Второй LSTM отдает только финальное состояние
    LSTM(64, return_sequences=False),
    Dropout(0.2),
    # Выходной слой: 7 нейронов соответствуют размеру нашего желаемого прогноза
    Dense(7)
])

А прогноз такой модели прогноз уже будет таким:

Прогноз сразу на весь период

Прогноз сразу на весь период

Бонусом будет то, что код получения прогноза будет значительно легче, а модель будет работать всего одну итерацию:

# Делаем список из наших начальных данных data
last_window = data[-64:].tolist() 
# Берем последние 64 елемента, делаем из них входной вектор
input_data = np.array(last_window[-64:]).reshape(1, 64, 1)
# Получаем предсказание
predictions = model.predict(input_data)

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

Итоги

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

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