РелизРазбор · На радарHabr AI→ оригинал

Трейдер собрал RAG и RandomForest в сигналы BUY/SELL: 62% точности на 59 записях

Разработчик превратил новостной RAG на локальных LLM в конвейер, который выдаёт сигналы BUY/SELL/NEUTRAL по акциям Мосбиржи. Новости привязываются к тикерам и превращаются в дневные фичи, а RandomForest с калибровкой выдаёт вероятность и список новостей-доказательств. На 59 записях средняя точность составила 62%, но тест — всего 45 примеров. Автор сам называет оценку предварительной.

AI-обработка оригинала Habr AI; редакция Hamidun News
Трейдер собрал RAG и RandomForest в сигналы BUY/SELL: 62% точности на 59 записях
Источник: Habr AI. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникHabr AI ↗
Главный редактор
Ключевой факт #1Спорт и происшествия отсекаются фильтром до тяжёлых LLM-шагов
OllamaNUM_PARALLEL=6 и две модели в VRAM ускорили конвейер в 1,5–2 раза
Ключевой факт #3Затухание новостей по времени уронило точность с 52% до 36%

Прикрутить LLM к новостной ленте и получить «умного аналитика» умеют многие. Гораздо реже кто-то честно показывает, что происходит дальше: когда нужно не пересказывать новости, а предсказывать цену. Автор проекта на Habr продолжил свой RAG-эксперимент и довёл его до торговых сигналов с объяснениями. Разбираем, что в этой истории полезно перенять.

Конвейер вместо трёх конкурирующих задач

Первая версия системы запускала параллельно три фоновые задачи: классификацию, извлечение сущностей и обогащение. Каждая тянула свою модель в память GPU, и Ollama постоянно выгружала и загружала веса. Когда база выросла с 12 до 37 тысяч статей, это стало слишком дорого.

Решение простое: единый конвейер. Статья проходит классификацию, фильтр мусора, оценку влияния на рынок, NER, суммаризацию и эмбеддинг. Если фильтр решил, что новость про спорт или культуру, она помечается как skipped, и больше на неё не тратится ни секунды GPU. Урок универсален: сначала дешёвый отсев, потом дорогая модель.

Настройки Ollama тоже подбирались руками. Автор разрешил держать в памяти две модели (Qwen 14B и BGE-M3), поставил параллелизм 6 и привязал всё к одной Tesla P100. При значении 8 память упиралась в потолок и запросы падали по таймауту. Вторую карту сознательно не используют: когда слои расползаются между GPU, скорость падает в 3–5 раз из-за передачи данных по PCIe.

От новости к сигналу

Пример: NER нашёл в тексте «Сбер». Словарь синонимов, который пополняется из API Мосбиржи, превращает его в тикер SBER. Для каждого дня и тикера считаются фичи: сумма направлений новостей (+1 за позитивную, −1 за негативную), число новостей, волатильность за 5 и 20 дней, средний объём торгов. Дальше RandomForest с калибровкой Platt scaling выдаёт BUY, SELL или NEUTRAL и вероятность, а API возвращает ещё и список новостей, повлиявших на решение. В Streamlit это превращается в терминал со свечами и раскрывающимися доказательствами.

Забавная деталь: для «Альфа-банка», который не торгуется на бирже, завели фиктивный тикер ALFAMOCK. Новости копятся заранее, а после IPO тикер просто заменят.

Где всё ломается

Самое ценное в статье — разбор неудач. Попытка добавить затухание по времени сделала признак дробным (0,85 вместо 1), и точность упала с 52% до 36%. На 55 записях это просто шум, поэтому идею отложили до 200+ записей.

Другой случай: VKCO получил BUY с уверенностью 64% при нейтральных новостях. Модель просто выучила, что рынок растёт в 55% случаев. Жёсткий фильтр «нет давления — значит NEUTRAL» автор отверг как маскировку симптома и запланировал признаки доминирования, но тоже после накопления данных. Техдолг записан и задокументирован.

Валидация идёт методом walk-forward: окно обучения скользит по времени, чтобы не угадать «удачный» период. Целевая схема — 30 дней обучения и 7 теста, но пока работает урезанная 14/3/3. Результат — средняя точность 62% (медиана 67%) на 45 тестовых примерах.

Что с этим делать

Не воспринимайте 62% как торговую стратегию: выборка крошечная, комиссии и проскальзывание не учтены, а модель легко может выучить шум. Ценность проекта в другом. Это хороший шаблон архитектуры: ранний фильтр для экономии GPU, объяснимый вывод с источниками, калиброванные вероятности и честная фиксация решений в ADR. Если вы строите похожий пайплайн на локальных моделях, стоит забрать подход к настройке Ollama и привычку замерять эффект каждой фичи, прежде чем её оставлять. Код публичной части открыт на GitHub.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: конвейер вместо трёх конкурирующих задач?

Первая версия системы запускала параллельно три фоновые задачи: классификацию, извлечение сущностей и обогащение. Каждая тянула свою модель в память GPU, и Ollama постоянно выгружала и загружала веса. Когда база выросла с 12 до 37 тысяч статей, это стало слишком дорого. Решение простое: единый конвейер. Статья проходит классификацию, фильтр мусора, оценку влияния на рынок, NER, суммаризацию и эмбеддинг.

Что известно по теме: от новости к сигналу?

Пример: NER нашёл в тексте «Сбер». Словарь синонимов, который пополняется из API Мосбиржи, превращает его в тикер SBER. Для каждого дня и тикера считаются фичи: сумма направлений новостей (+1 за позитивную, −1 за негативную), число новостей, волатильность за 5 и 20 дней, средний объём торгов. Дальше RandomForest с калибровкой Platt scaling выдаёт BUY, SELL или NEUTRAL и вероятность, а API возвращает ещё и список новостей, повлиявших на решение.

Что известно по теме: где всё ломается?

Самое ценное в статье — разбор неудач. Попытка добавить затухание по времени сделала признак дробным (0,85 вместо 1), и точность упала с 52% до 36%. На 55 записях это просто шум, поэтому идею отложили до 200+ записей. Другой случай: VKCO получил BUY с уверенностью 64% при нейтральных новостях. Модель просто выучила, что рынок растёт в 55% случаев. Жёсткий фильтр «нет давления — значит NEUTRAL» автор отверг как маскировку симптома и запланировал признаки доминирования, но тоже после накопления данных.

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Закрытый клуб практиков · Vibe Club

Внедряйте ИИ быстрее рынка вместе с инженерами и фаундерами

Внутри Vibe Club (hamidun.com/club): еженедельные живые мастермайнды и разборы архитектуры с Жемалом Хамидуном, закрытый Tech Radar, LMS и обновляемая база из 370+ боевых скиллов.

Вступить в Vibe Club →Тест-драйв Академии (72ч)
Что вы думаете?
Загружаем комментарии…