Реализация AI-анализа крипторынка (Sentiment) в мобильном приложении
Криптовалютный рынок реагирует на новости быстрее, чем традиционные рынки. Твит Илона Маска в 2021 году двигал Dogecoin на 30% за минуты. Sentiment analysis — попытка формализовать это влияние: собрать текстовые данные из множества источников, оценить тональность и агрегировать в торгово-полезный сигнал.
Источники данных
Социальные сети и новости
Основные источники для крипто-сентимента:
-
Twitter/X:
tweepy(Python) с Bearer Token для Academic Research API. Поиск по тикерам ($BTC,$ETH, каши монеты). Ограничение бесплатного тира — 500k твитов/месяц -
Reddit:
prawбиблиотека. Сабреддиты r/CryptoCurrency, r/Bitcoin, r/ethereum. Pushshift API для исторических данных (частично недоступен после 2023) -
Telegram-каналы: Telegram Bot API не даёт читать публичные каналы без членства. Решение —
telethon(Python MTProto client) от имени пользовательского аккаунта - CryptoPanic API: агрегатор новостей с готовым sentiment scoring. Удобно как baseline
import tweepy
from datetime import datetime, timedelta
class TwitterSentimentCollector:
def __init__(self, bearer_token: str):
self.client = tweepy.Client(bearer_token=bearer_token)
def fetch_recent_tweets(self, query: str, hours: int = 1) -> list[dict]:
start_time = datetime.utcnow() - timedelta(hours=hours)
tweets = self.client.search_recent_tweets(
query=f"{query} lang:en -is:retweet -is:reply",
start_time=start_time,
max_results=100,
tweet_fields=["created_at", "public_metrics", "author_id"]
)
return [
{
"text": t.text,
"likes": t.public_metrics["like_count"],
"retweets": t.public_metrics["retweet_count"],
"created_at": t.created_at
}
for t in (tweets.data or [])
]
Взвешиваем твиты по engagement: weight = 1 + log(1 + likes + retweets * 2). Твит с 10k лайков влияет на агрегированный sentiment сильнее, чем твит без реакций.
NLP модели для крипто-сентимента
Готовые решения
VADER — правило-базированный анализатор для social media текста. Быстрый, работает on-device, не требует GPU. Но не обучен на крипто-специфике: «FUD» (Fear, Uncertainty, Doubt), «moon», «rekt», «HODL» — не в его словаре.
FinBERT — BERT, дообученный на финансовых текстах. Хорошо работает на новостных заголовках. Тяжёлый для мобиля (400 MB), подходит для серверной обработки.
CryptoBERT — дообученный на крипто-Reddit и Twitter. Доступен на HuggingFace: kk08/CryptoBERT. Понимает крипто-жаргон лучше FinBERT.
Кастомная классификация
Если CryptoBERT недостаточно — дообучаем на размеченных данных конкретных монет. Labeling: вручную или через слабую разметку (pump+5% за 4 часа = positive, dump-5% = negative). Осторожно: корреляция цены и sentiment — не всегда причинно-следственная.
Для мобильного on-device использования конвертируем DistilBERT (меньше 70 MB в INT8) в CoreML или TFLite:
from transformers import DistilBertForSequenceClassification
import coremltools as ct
import torch
model = DistilBertForSequenceClassification.from_pretrained("distilbert-crypto-sentiment")
model.eval()
traced = torch.jit.trace(model, (input_ids, attention_mask))
mlmodel = ct.convert(
traced,
inputs=[
ct.TensorType(name="input_ids", shape=(1, 128), dtype=np.int32),
ct.TensorType(name="attention_mask", shape=(1, 128), dtype=np.int32)
],
compute_precision=ct.precision.FLOAT16
)
mlmodel.save("CryptoSentiment.mlpackage")
Агрегация в Sentiment Index
Отдельные оценки твитов → единый индикатор. Варианты агрегации:
| Метод | Описание | Особенность |
|---|---|---|
| Weighted average | Среднее с весами по engagement | Простой, понятный |
| Temporal decay | Более новые данные весят больше | weight *= exp(-λ * age_hours) |
| Source weighting | Twitter × 1.0, Reddit × 0.7, новости × 1.3 | Настраивается под монету |
Нормализуем финальный score в диапазон [-1, +1] или по шкале Fear & Greed 0–100 (как у Alternative.me Crypto Fear & Greed Index — популярный benchmark).
Визуализация в мобильном приложении
Sentiment — абстракция, нужна визуализация:
- Gauge-метр (от Extreme Fear до Extreme Greed) — интуитивен, один взгляд
- Временной график sentiment vs цена — корреляционный анализ
- Word cloud топ-терминов за последний час
- News feed с color-coding по тональности (зелёный / красный)
Обновление данных — WebSocket от сервера или polling каждые 5 минут (чаще избыточно, Twitter API лимиты не позволяют).
Серверная инфраструктура
Вся тяжёлая обработка — на сервере:
- Сбор данных: cron jobs / Kafka consumer для real-time
- NLP pipeline: FastAPI сервис с моделью
- Хранение: TimescaleDB для временных рядов sentiment
- Кэш: Redis для текущего индекса (обновление раз в 5 мин)
Мобильное приложение потребляет только готовый агрегированный индекс через REST, детальный feed через WebSocket.
Disclaimer и регуляторика
Sentiment analysis — не торговая рекомендация. В приложении это должно быть явно: «Данный индикатор носит информационный характер и не является инвестиционной рекомендацией». Регуляторы (SEC, FCA) следят за приложениями, которые подталкивают к торговым решениям без соответствующих лицензий.
Процесс работы
Выбор источников данных и оформление API доступа. Разработка NLP pipeline (выбор/дообучение модели). Система агрегации в Sentiment Index. REST/WebSocket API для мобиля. UI-компоненты: gauge, график, news feed. Мониторинг качества сентимента (drift detection).
Ориентиры по срокам
MVP с CryptoPanic API + VADER + базовым дашбордом — 1–2 недели. Полноценная система с кастомным NLP, Twitter/Reddit ingestion и real-time обновлениями — 3–5 недель.







