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—rule-based аналізатор для social media тексту. Швидкий, на устройстве, без 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
Окремі оцінки твітів→єдиний індикатор. Варіанти агрегації:
| Метод | Опис | Особливість |
|---|---|---|
| Зважене середнє | Середнє з вагами по 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 конвеєр: FastAPI сервіс з моделлю
- Зберігання: TimescaleDB для часових рядів sentiment
- Кеш: Redis для поточного індексу (оновлення раз у 5 хв)
Мобільне додаток споживає тільки готовий агрегований індекс через REST, детальний feed через WebSocket.
Disclaimer та регуляторика
Sentiment analysis—не торгова рекомендація. У додатку це має бути явно: "Цей індикатор носить інформаційний характер і не є інвестиційною рекомендацією". Регулятори (SEC, FCA) слідять за додатками, які підштовхують до торгових рішень без відповідних ліцензій.
Процес розробки
Вибір джерел даних та оформлення API доступу. Розробка NLP конвеєра (вибір/дообучення моделі). Система агрегації в 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 тижнів.







