Чтобы подать цены акций в нейросеть, их сначала нужно нарезать окнами, нормализовать так, чтобы не подмешалась информация из будущего, и решить, что именно предсказывать (целевое значение). В этой части на реальных ценах Apple за 506 торговых дней мы одинаковым способом (walk-forward) сравниваем самую простую базовую линию «завтра = сегодня», линейную модель и LSTM. Результаты приводим как есть, хорошие они или плохие. Это учебный пример, а не инвестиционная рекомендация.
На одном лишь ряду цен учиться нельзя. Его нужно превратить в задачу «посмотри на последние L дней и угадай следующий день». Сдвигая окно на одну позицию, мы каждый раз получаем ещё одну пару (вход, ответ).
Уровень цены в разные периоды разный (в 2015 году около 120 долларов, в 2016 году около 90 долларов), поэтому на тесте появляется диапазон, которого модель не видела при обучении. Поэтому переходим к дневному изменению (логарифмическая доходность = log(сегодня/вчера) × 100%). Параметры нормализации (вычесть среднее и разделить на стандартное отклонение) считаются только на обучающем отрезке. Если взять среднее за весь период, информация тестового отрезка просочится в обучение (утечка из раздела 4). Целевое значение тоже нужно выбрать заранее: «доходность следующего дня (число)», «вырастет или упадёт (направление)» или «величина колебания».
Нейросеть сама находит нелинейные связи между многими сигналами. Поэтому от неё ждут многого в задачах, где переплетено множество факторов, как в ценах акций. Но сначала стоит задать данным вопрос: «Связана ли вчерашняя доходность с сегодняшней?»
Выводы двух крупных исследований расходятся. Нужно смотреть вместе: при каких условиях стало лучше, а при каких нет.
Большинство «потрясающих результатов» в прогнозировании цен акций происходят из одной из этих четырёх ловушек. Рассмотрим каждую на числах из реальных данных.
Оцениваем точно так же, как при реальном использовании. Обучаемся только на прошлом до текущего дня, прогнозируем следующие несколько дней, а когда эти дни прошли, добавляем их и обучаемся заново. Тестовый отрезок всегда должен идти после обучающего.
Последние 200 торговых дней (2016-05-04 ~ 2017-02-16) прогнозировались методом walk-forward. Стратегия: «ждём роста — держим акции, ждём падения — в деньгах»; при каждой смене между акциями и деньгами вычитается 0.1%.
Оба примера используют только библиотеки, предустановленные в Colab. Нажмите «Скачать блокнот (.ipynb)» и откройте его в Colab через Файл → Загрузить блокнот или скопируйте код и вставьте в ячейку нового блокнота.
Загружает открытый CSV, оценивает методом walk-forward две базовые линии и линейную гребневую (ridge) модель и сравнивает стратегию за вычетом транзакционных издержек со стратегией «купить и держать». Ловушки утечки и переобучения тоже показаны на числах. Чтобы подставить свои данные, замените PRICE.
LSTM, предсказывающая следующий день по доходностям за последние 20 дней, переобучается каждые 50 дней. Результаты для двух сидов приводятся отдельно. Таблица из раздела 6 строится прямо по этому выводу.
Это промпты, которые можно вставить в ИИ-помощника вроде ChatGPT, Qwen или Claude. Если нажать «Копировать», после промпта будет добавлен выбранный код. Замените текст в 〔 〕 на свою ситуацию.
Ответ ИИ — лишь отправная точка. Предложенные статьи, числа и функции библиотек обязательно проверяйте по первоисточникам и официальной документации. Если для конкурса или статьи вы пользовались помощью ИИ, укажите факт и объём использования согласно правилам организаторов и журнала.
Это тот же словарь, что и жёлтое пунктирное подчёркивание в тексте. Во всей серии используются одни и те же обозначения. Нажмите на название раздела, чтобы перейти к месту первого упоминания.
Аналогия — первый шаг к пониманию, но и семя заблуждения. Для аналогий с дрозофилой и мозгом указана сила. Прямая есть данные, что это действительно делает то же самое · Частичная похожи лишь некоторые свойства · Нет соответствие неизвестно
| Понятие | Бытовая аналогия | Аналогия с дрозофилой и мозгом | Где аналогия ошибается |
|---|---|---|---|
| Окно | Угадать завтрашнюю погоду по погоде за прошлую неделю | Частично Дрозофила тоже выбирает направление по изменению запаха за последние несколько секунд | У погоды есть физические законы, а в ценах акций сами прогнозы людей меняют цену |
| Базовая линия | Синоптик, который говорит: «Завтра будет так же, как сегодня» | Нет | Выглядит просто, но обыграть трудно. Любая модель должна сначала обыграть именно это |
| Утечка данных | Оценка ученика, подсмотревшего ответы до экзамена | Нет | Чаще всего ответы подсматривают, сами того не замечая. Утечка прячется в нормализации и вычислении признаков |
| Переобучение (смещение отбора) | Подбросить 100 монет и назвать ту, что чаще выпадала орлом, «счастливой монетой» | Нет | «Удача» исчезает при следующем броске. Но в реальной стратегии распознать это гораздо труднее |
| Структурный сдвиг | Прогнозировать зимние продажи по истории продаж летней одежды | Частично Когда среда меняется, выученная память дрозофилы тоже обновляется | Сезоны предсказуемы, а когда изменится характер рынка — неизвестно |
| Walk-forward | Пробный экзамен, где каждую неделю прогнозируют следующую неделю, глядя только на прошлые записи | Нет | В отличие от пробного экзамена, рынок не ждёт, верен ваш прогноз или нет |
E-1 Об авторе · E-2 Научные источники · E-3 Материалы к рисункам
finance-charts-apple.csv (GitHub plotly/datasets). Использована цена закрытия с учётом дивидендов (AAPL.Adjusted)Это руководство для преподавателей, ответственных за OJT на производстве и тьюторов. Время указано ориентировочно — подстраивайте его под реальное занятие. Чтобы эта часть не воспринималась как призыв к инвестициям, в начале и в конце занятия ясно скажите: «Это учебный пример, а не инвестиционная рекомендация».
| Аудитория | Студенты и практики, которые хотят прогнозировать временные ряды — спрос, продажи, данные датчиков, цены, — а также начинающие в финтехе |
|---|---|
| Предварительные знания | Среднее и стандартное отклонение, переобучение и валидация из 3-2, LSTM из 3-7 |
| Цели обучения | ① Превращать временной ряд в задачу обучения с помощью окна, нормализации и целевого значения ② Объяснять на числах утечку, переобучение, структурный сдвиг и транзакционные издержки ③ Сравнивать базовую линию и модели одной меркой с помощью walk-forward |
| Ориентировочное время | Чтение 40~50 мин · демонстрация 20 мин · практика в Colab 30 мин (код 1 — 10 мин, код 2 — запуск 4 мин + разбор 15 мин) |
Вступление 5 мин (из шапки: «LSTM хуже базовой линии») → разделы 1·2 15 мин → четыре ловушки раздела 4 15 мин → разделы 5·6 10 мин → проверочные вопросы 5 мин.
Определить базовую линию для объекта прогноза вашей команды (спрос, продажи и т. п.) 15 мин → превратить раздел 4 в чек-лист утечек для ваших данных 25 мин → подставить ваш временной ряд в код 1 35 мин → обсуждение формата отчёта о результатах 15 мин.
Начинающим — только разделы 1·4·6. Продвинутых попросите вручную пройти цикл walk-forward в коде 1 и самим проверить, как меняются числа, если параметры стандартизации считать по всему периоду.
| Раздел | Вопрос, на котором стоит остановиться | Совет по управлению |
|---|---|---|
| 1 Окно и цель | «Что плохого в том, чтобы подавать цену как есть?» | Нажимайте по порядку: цена → доходность |
| 2 Ожидания и реальность | «Что предсказать легче — направление или величину колебания?» | Нажимайте по порядку: доходность → модуль и сравните число столбцов, вышедших за полосу |
| 3 Исследования | «Почему выводы двух исследований различаются?» | Сравните рядом строки об объёме данных и типе задачи |
| 4 Ловушки | «Если проверить 100 вариантов и выбрать один, можно ли доверять его результату?» | Смотрите по порядку: переобучение → транзакционные издержки (0 → 0.3%) |
| 5 Walk-forward | «Почему нельзя разбивать данные, случайно перемешав их?» | Переключать два способа по очереди |
| 6 Сравнение | «LSTM оказалась хуже базовой линии. Что можно попробовать изменить?» | Смотрите по порядку: RMSE → доходность стратегии |
| Заблуждение | Верное объяснение | Что показать |
|---|---|---|
| LSTM специализируется на временных рядах, значит, она лучше базовой линии | В задачах с малым количеством подсказок обыграть базовую линию трудно. В этом эксперименте LSTM оказалась хуже базовой линии | Раздел 6 |
| При точности направления 55% можно заработать | Если при ошибках теряешь много, будет убыток. Нужно учесть транзакционные издержки и сравнить со стратегией «держать» | Строка базовой линии в разделе 6 (55.0%) |
| Если в бэктесте было хорошо, то и в реальности будет хорошо | Если выбирать после многих попыток, примешивается случайность. Да и характер рынка меняется | Раздел 4: переобучение, структурный сдвиг |
| Нормализацию достаточно сделать один раз по всем данным | Параметры надо считать только на обучающем отрезке. Иначе просочится информация из будущего | Раздел 1, раздел 4: утечка |
| Нейросети бесполезны для прогноза цен акций | Есть исследования, где стало лучше, — при больших данных, многих сигналах и задачах поперечного среза. Важны условия | Раздел 3 |
505 − 5 = 500.
10 раз. В первом обучении 500 − 200 = 300 пар, в последнем — 480 пар.
40 × 0.1 = 4%p (приближённо, в терминах логарифмической доходности).
Результат, выбранный после многих попыток, подогнан под случайность и не воспроизводится на новом отрезке (переобучение, смещение отбора). Тестовый отрезок нужно использовать только один раз, в самом конце.
Написать результат как есть: «На этих данных (1 акция, 506 дней, сигнал — прошлые доходности) и при этих настройках (окно 20 дней, переобучение каждые 50 дней, 40 эпох) LSTM не обыграла базовую линию (RMSE 1.462%·1.550% против 1.209%)». Затем указать, какие условия можно изменить, и ограничения обобщения.
В ridge_fit из кода 1 замените параметры стандартизации (mu, sd) на рассчитанные по всему периоду (весь X) и запустите снова. Запишите, как изменились RMSE и доходность стратегии, и в двух предложениях объясните, почему это утечка.
Замените цель в коде 2 с «доходности следующего дня» на «модуль доходности следующего дня (величину колебания)». Базовой линией возьмите «средний модуль за последние 20 дней». Связав это с автокорреляцией из раздела 2, сообщите, обыгрывает ли LSTM базовую линию в прогнозе колебаний, используя не менее 3 сидов.
| Начинающим | Разделы 2·3 можно пропустить без потери логики. Переобучение из раздела 4 и таблицу из раздела 6 посмотрите обязательно |
|---|---|
| Углублённо | Попросите изучить, как корректировать результаты бэктеста после многих попыток (множественная проверка гипотез). Найденные статьи проверяйте по первоисточнику |
| Что изучить дальше | Сансон Ан, конспект курса «Наука о данных для бизнеса» (наука о данных в целом) · STEP [K-Digital] Основы анализа данных в финтехе (напрямую связан с этой частью) · STEP [K-Digital] Обработка естественного языка в ИИ (связан с 3-5·3-8) |
| Материалы для преподавателя | Критерии оценки проверочных вопросов и примеры ответов на задания — на странице ответов для преподавателей (3-6) |
Вы дочитали часть «3-6 Временные ряды и цены акций» до конца. Обитатели лаборатории подведут итоги — каждый по словечку.