Почему цена Bitcoin «сломалась»: разбор аномалий 2022–2026 с WhyTrend. anomaly detection.. anomaly detection. Data Mining.. anomaly detection. Data Mining. data science.. anomaly detection. Data Mining. data science. llm.. anomaly detection. Data Mining. data science. llm. Open source.. anomaly detection. Data Mining. data science. llm. Open source. python.. anomaly detection. Data Mining. data science. llm. Open source. python. timeseries.. anomaly detection. Data Mining. data science. llm. Open source. python. timeseries. анализ данных.. anomaly detection. Data Mining. data science. llm. Open source. python. timeseries. анализ данных. поиск информации.. anomaly detection. Data Mining. data science. llm. Open source. python. timeseries. анализ данных. поиск информации. Поисковые технологии.. anomaly detection. Data Mining. data science. llm. Open source. python. timeseries. анализ данных. поиск информации. Поисковые технологии. Программирование.

Увидел провал на графике → открыл Google или Twitter → полдня собираешь версии “почему”. Знакомо? Детектор аномалий сам по себе даёт только точки на оси времени, а вопрос “почему” как был ручным, так и остаётся.

В этот раз я прогнал WhyTrend не на паре аккуратных точек из Google Trends, а на полном ряде BTC за 4.5 года — и заодно на двух разных LLM. Результат оказался неожиданным: модель меньшего размера дала в три раза больше настоящих объяснений, чем более крупная. Расскажу, что случилось и почему.

Что запускали

Данные — дневные close BTC/USDT, 1680 точек без единого пропуска, с 1 января 2022 по 7 августа 2026. Ключевое слово одно — Bitcoin, окно вокруг каждой найденной точки — ±5 дней. Детектор — Ruptures (PELT, penalty=10). Ranker — BM25, топ-8.

pipeline = (
    Pipeline(window_days=5)
    .add_source(CSVSource("btc_usd_daily.csv", keyword="Bitcoin"))
    .add_detector(RupturesDetector(algorithm="pelt", model="rbf", penalty=10.0))
    .add_collector(HackerNewsCollector(max_results=15))
    .add_ranker(BM25Ranker(top_k=8))
    .add_explainer(OllamaExplainer(model=MODEL, timeout=180.0))
)

Источник контекста — Hacker News, и тут есть причина, почему не более очевидный Google News: у Algolia (поиск по HN) есть фильтр по дате создания поста. Живой Google News живёт настоящим моментом, а для вопроса “что писали в мае 2022 года” он почти бесполезен — архивного среза с фильтром по дате там просто нет.

CLI (whytrend analyze ...) пока в разработке, roadmap v0.5 — сейчас работа идёт через Python API и такие вот скрипты-примеры, этого достаточно, чтобы пощупать поиск аномалий на своих данных.

Два слоя аномалий

Отдельным side-pass’ом прогнал ещё и Z-score по дневным доходностям (threshold=3.5) — это не смена режима рынка, а просто резкие дни:

Дата

Тип

Return

Score

2022-06-13

drop

−15.38%

0.829

2022-02-28

spike

+14.49%

0.775

2022-11-09

drop

−14.15%

0.763

Всего таких дней вышло 23. Полезно как индикатор рыночного шума, но если скормить все 23 в LLM — получите роман и счёт за электричество вместо аналитики. 2022-11-09, кстати, легко узнаётся — это окно краха FTX.

Главный слой кейса — не удары, а смены режима. Ruptures нашёл 8 changepoint’ов:

2024-11-11  close=88,648   score=0.196
2026-01-30  close=84,260   score=0.142
2024-02-25  close=51,729   score=0.094
2025-05-10  close=104,810  score=0.079
2025-11-11  close=103,059  score=0.075
2023-03-17  close=27,395   score=0.059
2022-05-11  close=29,104   score=0.058
2023-11-07  close=35,399   score=0.024

Масштаб удобный: не тысяча алертов, а карта переломов, которую можно наложить на известную историю рынка — крах Terra/Luna в мае 2022, банковский стресс весны 2023, ETF-ралли 2024 года. Именно эти 8 точек ушли в пайплайн объяснения — на них всё и разыгралось дальше.

Первый прогон — и коты из Монголии

Первый раз гонял на Qwen 32B. Пайплайн отработал честно, но в JSON-отчёте нашлась деталь, которую нельзя обделить вниманием: у шести из восьми событий сработал fallback — после ReadTimeout у Ollama. Пайплайн не упал, что уже хорошо — вместо этого подставил эвристику “возможно, связано с top evidence”. Но именно отсюда взялись объяснения вроде:

The changepoint in ‘Bitcoin’ may be related to “Stray Cats and Bitcoin: A Costly Incident at a Bitcoin Mine in Mongolia” from hacker_news.

Confidence у этого объяснения — 1.00. И это важно понимать правильно: не “модель на 100% уверена”, а артефакт запасного пути. Когда LLM не отвечает вовремя, fallback берёт первый документ по BM25-рейтингу и молча подставляет его как причину — без реального рассуждения. Статья про бездомных котов на майнинг-ферме в Монголии никак не объясняет перелом тренда цены, она просто содержала слово “Bitcoin” и оказалась в top evidence.

Такая же история — “Bitcoin Genetic Code Paper”, “Bitcoin Private Key Finder”: всё с тем же confidence=1.00, всё тем же механизмом. Корреляция в окне не равна причине, а таймаут локальной 32B-модели на восьми последовательных вызовах — рабочий риск, а не редкое исключение.

Там, где модель реально успевала ответить, картина другая. По 7 ноября 2023 года — единственный случай на 32B, где confidence не 1.00 и явно не fallback (0.60):

The detected changepoint in Bitcoin’s price on November 7, 2023, may be attributed to market speculation or a short squeeze, given the recent peak near $37K.

Top cause — “Bitcoin Tops $37K for First Time Since May 2022”. Это уже похоже на настоящую аналитику. Но два таких случая из восьми — маловато, чтобы статья звучала убедительно.

Второй прогон: модель поменьше из того же семейства

Прежде чем переписывать выводы, решил проверить очевидную гипотезу: что если дело не в качестве модели, а просто в том, что 32B на восьми последовательных вызовах регулярно не укладывается в timeout? Прогнал тот же пайплайн, тот же CSV — только qwen2.5-coder:14b вместо 32b. Это не та же модель с урезанным квантованием, а отдельный, меньший по числу параметров чекпоинт того же семейства Qwen2.5-Coder — обе версии Ollama раздаёт уже квантованными по умолчанию (обычно Q4_K_M), так что сравнение честное — это разные модели, а не одна и та же с разной точностью весов.

Qwen 32B

Qwen 14B

Время прогона

~5 мин

~3 мин

Настоящих объяснений

2 из 8

6 из 8

Fallback

6 из 8

2 из 8

Тут сразу напрашивается вопрос: если timeout=180с, а fallback словили 6 из 8 событий, откуда всего 5, а не 18 минут(6×180с)? Explainer в Pipeline вызывается для всех событий через asyncio.gather, не по очереди — wall-clock время близко к самому долгому вызову (плюс сбор контекста), а не к сумме всех.

Не ожидал такого исхода. 14B оказалась не просто быстрее — она надёжнее в разы, потому что реже упирается в timeout. Похоже, для этой конкретной задачи (короткий структурированный ответ по уже отранжированным документам) более тяжёлая модель не даёт выигрыша в качестве, зато чаще не успевает ответить вовремя — а не успела значит fallback.

Вот все 8 событий из 14B-прогона целиком:

Дата

Confidence

Что нашла модель

Результат

2024-11-11

1.00

“Bitcoin Genetic Code Paper”

fallback

2026-01-30

0.50

Один крупный игрок удерживает цену ниже $90K

реальный вывод

2024-02-25

0.80

Негативный сентимент + регуляторное давление (3 причины)

реальный вывод

2025-05-10

0.90

Keynote Сэйлора про корпоративный Bitcoin

реальный вывод

2025-11-11

0.80

Изъятия Bitcoin государствами + обвинения в хаке на $13B

реальный вывод

2023-03-17

0.85

Банковская неопределённость + крипто-ралли

реальный вывод

2022-05-11

0.80

Общий рыночный сентимент, распродажи (окно краха Terra)

реальный вывод

2023-11-07

1.00

“Bitcoin vs. Medical School”

fallback

Забавная деталь: 7 ноября 2023 года — та самая точка, где на 32B модель дала единственный убедительный неfallback-ответ про short squeeze — на 14B неожиданно ушла в fallback с котами-подобной случайностью про “Bitcoin vs. Medical School”. То есть улучшение не строго монотонное: 14B в среднем надёжнее, но не гарантирует успеха на каждой конкретной точке, где не подвела 32B.

А вот как это выглядит не в пересказе, а в самом отчёте — два реальных фрагмента, ссылки и confidence как есть, без причёсывания:

### Explanation 3
- Confidence: 0.80

The detected changepoint in Bitcoin value on 2024-02-25 may be
influenced by a combination of negative sentiment and regulatory
concerns.

#### Causes
1. Bitcoin Is Mostly Worthless (1.00)
   Source: hacker_news
   URL: https://ajit.dhiwal.com/bitcoin-is-the-snake-oil-of-our-generation-2544a1984ce9

2. Exodus Bitcoin Wallet: $490k swindle (0.82)
   Source: hacker_news
   URL: https://popey.com/blog/2024/02/exodus-bitcoin-wallet-490k-swindle/

3. European Central Bank argues against Bitcoin ETF (0.50)
   Source: hacker_news
   URL: https://www.ecb.europa.eu/press/blog/date/2024/html/ecb.blog20240222~0929f86e23.en.html

Три независимых источника, три разных веса — модель не просто нашла один заголовок с нужным словом, а честно сопоставила несколько версий с разной степенью уверенности в каждой. Второй пример — на 11 ноября 2025 года, там источники и вовсе спорят между собой по тональности:

### Explanation 5
- Confidence: 0.80

The detected changepoint in Bitcoin value on 2025-11-11 may be
influenced by recent news about governments seizing more Bitcoin
than gold and accusations of a US involvement in a $13 billion
Bitcoin hack.

#### Causes
1. Governments Seized More Bitcoin Than Gold (0.85)
   Source: hacker_news
   URL: https://illya.sh/thoughts/more-bitcoin-has-been-seized-than-gold

2. China Accuses US of Orchestrating $13B Bitcoin Hack (0.78)
   Source: hacker_news
   URL: https://www.bloomberg.com/news/articles/2025-11-11/china-accuses-us-of-orchestrating-13-billion-bitcoin-hack

Обе причины реальные, обе про 11 ноября 2025 года, но говорят о разном — геополитика вокруг изъятий Bitcoin государствами и обвинения в хакерской атаке. Модель не выбрала одну версию произвольно, а показала обе с весами, оставив решение о том, какая важнее, за читателем отчёта — то есть ровно то, для чего вообще нужен слой ranking перед LLM, а не просто “покажи топ-1 документ”.

Что это значит на практике

Не “магию”, а конкретную экономию на конкретном шаге. Карта смен режима за четыре с половиной года собирается за один прогон, а не за вечер кликанья по TradingView. Черновик гипотез со ссылками — даже шумный, с ложными срабатываниями вроде котов из Монголии — это уже точка старта расследования, а не чистый лист.

И отдельно — честный failure mode вместо тихого выдуманного нарратива без evidence. Таймаут → fallback на top evidence, а не сочинённая моделью история, которая выглядит правдоподобно, но ничем не подкреплена. WhyTrend не защищает от ложных срабатываний автоматически, но честно показывает, где сработал fallback — отличать его от настоящего вывода пока приходится по confidence и здравому смыслу, но сам факт, что это видно, уже немало.

Практический вывод для тех, кто будет повторять: не гнаться за самой крупной локальной моделью. В этом кейсе 14B оказалась разумным балансом — быстрее и стабильнее 32B, без заметной потери в качестве. Поднимать timeout выше 180 секунд имеет смысл, только если всё же нужна именно 32B и её не жалко ждать дольше. Или вообще использовать не локальною модель, а свой ключ для доступа к нейросетевому API одного из известных провайдеров(такая возможность тоже поддерживается).

Что дальше по проекту

В roadmap — CLI для тех, кому не хочется встраивать фреймворк кодом и гибридный ranker с фильтром “correlation_only / likely_cause” — чтобы меньше случайных котов попадало в executive summary без явной пометки, что это не настоящая причина.

Как повторить у себя

Все что нужно — лежит в отдельной ветке репозитория:

git clone https://github.com/AlexProvatorov/WhyTrend
cd WhyTrend
git checkout demo/btc-case-2022-2026
uv sync --extra ruptures
# Ollama должна слушать localhost:11434
uv run python examples/btc_case_study_2022_2026.py 
  --llm ollama 
  --ollama-model qwen2.5-coder:14b

Отчёты появятся в examples/output/ — оба формата, markdown и JSON.

Исходный код — на GitHub. Если у вас есть идея, как отличать честный fallback от настоящего вывода модели ещё до чтения confidence вручную — это как раз то, что стоит добавить в roadmap следующим, и pull request тут будет особенно кстати.

Спасибо, что дочитали.

Автор: AlexProvatorov

Источник