BorisovAI
Все публикации
Новая функцияtrend-analisisGit коммит

Связь вместо хаоса: как мы научили анализы разговаривать с трендами

Связь вместо хаоса: как мы научили анализы разговаривать с трендами

Как мы научили систему анализа трендов видеть связи между явлениями

Работаем над проектом trend-analysis — это система, которая анализирует тренды в данных и выявляет причинно-следственные связи. Всё интересно, но вот беда: когда аналитик хочет глубже погрузиться в конкретный тренд, система не могла его за ручку взять и показать, откуда вообще взялась эта информация. Анализы существовали сами по себе, графики — сами по себе. Нужно было связать их воедино.

Задача была чёткой: добавить возможность связывать анализы напрямую с конкретными трендами по ID. Звучит просто, но это касалось сразу нескольких слоёв архитектуры.

Первым делом расширили API запросов: добавили параметр trend_id в запрос к анализу. Теперь при создании анализа система знает, какой именно тренд его вызвал. Логично, но раньше этой связи просто не было.

Дальше — самая интересная часть. Нужно было хранить эту информацию, поэтому добавили поле trend_id в таблицу analyses. Но одного сохранения мало — нужно было ещё и по-человечески отображать результат. Началось с описаний эффектов: когда система выявляет причинно-следственную связь (это называется causal_chain в кодовой базе), она может объяснить, почему один фактор влияет на другой. Мы вытащили эти рассуждения (rationale) и превратили их в читаемые описания эффектов — теперь они отображаются прямо на интерактивном графе.

Но вот неожиданность: граф строится из узлов, а узлы — это просто точки без контекста. Добавили поле description к каждому узлу, чтобы при наведении мышкой пользователь видел, что это вообще за узел и на что он влияет. Мелкое изменение, но пользователям нравится.

Потом пришлось разбираться с интернационализацией. Карточки зон влияния и типы графиков должны были переводиться на разные языки. Добавили i18n переводы — теперь система говорит с пользователем на его языке, а не на смеси английского и технических термов.

Всё это потребовало фиксов в типах TypeScript для навигации по параметрам поиска — система должна была знать, какие параметры можно передавать и как они называются. Без этого была бы путаница с undefined и ошибки во время выполнения.

Вот интересный момент: когда работаешь с причинно-следственными связями в данных, очень легко создать «спагетти-граф» — такой, где всё связано со всем, и пользователь теряется. Важный паттерн в таких системах — скрывать сложность слоями. Сначала показываешь главные узлы и связи, потом — при клике — раскрываешь подробности. Мы это учитывали при добавлении описаний.

В итоге: система стала гораздо более связной. Теперь аналитик видит не просто скучную таблицу с анализами, а историю того, как конкретный тренд повлиял на другие явления, с объяснениями на его языке. Граф перестал быть набором непонятных точек и стал рассказывать. Обновили CHANGELOG, и задача легла в историю проекта.

Следующий шаг — добавить возможность сохранять эти связи как правила, чтобы система сама училась предсказывать новые влияния. Но это уже совсем другая история.

😄 Почему граф анализа пошёл к психологу? Потому что у него было слишком много глубоких связей.

Метаданные

Branch:
feat/scoring-v2-tavily-citations
Dev Joke
Почему Ansible пошёл к врачу? У него были проблемы с производительностью

Часть потока:

Разработка: trend-analisis

Оцените материал

0/1000