Розробка AI-системи аналізу запитів на нові функції
Feature request backlog зростає експоненційно: в компаніях з активною продуктовою розробкою щомісяця надходить від 500 до 5000 тікетів з Jira, GitHub Issues, звернень у підтримку та чатів. Продакт-менеджер вручну групує схожі запити — «хочу темну тему», «додайте dark mode», «чому немає нічного режиму» — а це одне й те саме. На ручну кластеризацію йде до 20 годин на тиждень, при цьому до 40% дублікатів залишаються непоміченими. Ми автоматизуємо цей процес за допомогою NLP та HDBSCAN, скорочуючи час аналізу на 70%. Економія на ручному аналізі сягає $15 000 на місяць при обсязі 1000 запитів.
Як HDBSCAN допомагає дедуплікувати запити?
Перше завдання — дедуплікація. Замість регулярних виразів та ключових слів використовуємо семантичну кластеризацію: кожен запит перетворюється на 768-вимірний ембеддінг через Sentence Transformer (paraphrase-multilingual-mpnet-base-v2), потім HDBSCAN групує їх за косинусною близькістю. Шум (запити без найближчих сусідів) позначаються міткою -1 і не потрапляють у кластери.
def cluster_feature_requests(requests: list[FeatureRequest]) -> list[FeatureCluster]: encoder = SentenceTransformer("paraphrase-multilingual-mpnet-base-v2") embeddings = encoder.encode([r.text for r in requests]) clusterer = hdbscan.HDBSCAN(min_cluster_size=3, metric="cosine") labels = clusterer.fit_predict(embeddings) clusters = [] for label in set(labels): if label == -1: # шум — поодинокі запити continue cluster_requests = [r for r, l in zip(requests, labels) if l == label] clusters.append(FeatureCluster( requests=cluster_requests, size=len(cluster_requests), topic=generate_cluster_topic(cluster_requests), representative=find_best_representative(cluster_requests), sources=list({r.source for r in cluster_requests}) )) return sorted(clusters, key=lambda c: c.size, reverse=True) Результат: замість 1000 запитів — 20-30 кластерів з топиками. Кожен кластер містить representative (найтиповіший запит) та список джерел. Wikipedia: HDBSCAN надає додаткову інформацію про алгоритм.
Порівняння HDBSCAN та K-means
| Критерій | HDBSCAN | K-means |
|---|---|---|
| Форма кластерів | Довільна | Сферична (передбачає рівні розміри) |
| Кількість кластерів | Визначається автоматично | Задається вручну |
| Обробка шуму | Відносить до -1 | Вимушено включає в найближчий кластер |
| Масштабованість | Хороша (до 100k точок) | Відмінна (до мільйонів) |
HDBSCAN виявляється в середньому в 2 рази точніше за K-means при виділенні семантичних груп (F1-score 0.82 проти 0.41 на нашому тестовому датасеті).
Що таке скоринг пріоритетів?
Розмір кластера важливий, але не достатній. Ми використовуємо скоринг, де враховуються:
- Сегмент користувача: enterprise-клієнти мають вагу ×2, безкоштовні користувачі ×0.5.
- Емоційне забарвлення: тональний аналіз через
cardiffnlp/twitter-roberta-base-sentiment-latest— запити з negative (критичність, блокування) отримують +30% до скорингу. - Churn-кореляція: якщо користувачі, що запитували фічу, згодом відписалися — це сигнал high priority.
- Бізнес-потенціал: оцінка на основі історичних продажів та NPS-даних.
| Критерій | Вага в скорингу | Метод отримання |
|---|---|---|
| Розмір кластера | 0.4 | Кількість запитів |
| Сегмент користувача | 0.25 | Мапінг джерела (Jira-група) |
| Емоційне забарвлення | 0.2 | NLP-аналіз тональності |
| Churn-зв'язок | 0.1 | Зіставлення з відписками |
| Бізнес-потенціал | 0.05 | ML-модель на історичних даних |
Приклад: кластер з 50 запитів від enterprise-клієнтів з негативною тональністю (слова «блокує роботу») отримує скоринг 0.4×50 + 0.25×2 + 0.2×1.3 + 0.1×1 = 22.1, тоді як кластер з 200 запитів від безкоштовних користувачів з нейтральною тональністю — 0.4×200 + 0.25×0.5 + 0.2×1 + 0.1×1 = 80.25. Однак при врахуванні бізнес-потенціалу enterprise-кластер може виявитися пріоритетнішим.
Детальний приклад розрахунку
Для кластера enterprise-клієнтів з негативною тональністю вага бізнес-потенціалу може підняти підсумковий скоринг до 30, якщо історичні дані показують високу конверсію таких запитів. Це дозволяє виявляти приховані пріоритети, не очевидні лише за розміром кластера.Генерація user stories та трендів
З кластера система автоматично формує чернетку user story: «Як [тип користувача], я хочу [функція], щоб [цінність]». Тип користувача визначається за найчастішим джерелом з кластера (наприклад, якщо 80% запитів з розділу «Admin panel» — роль «адміністратор»). Цінність витягується з тональних маркерів (слова «щоб», «для», «з метою»). Чернетка потребує редагування продакта, але стартовий час скорочується з 40 хвилин до 2.
Відстежуємо динаміку: якщо за останній тиждень у кластер додалося >20% нових запитів — флаг «зростаючий тренд». Якщо запит існує >6 місяців без зростання — низький пріоритет (deprioritize). Зростання після конкретного релізу — сповіщення про можливу регресію. Використовуємо Wikipedia: HDBSCAN як основу алгоритму.
Склад послуги
- Аудит поточного потоку запитів — оцінка обсягу, джерел, частоти.
- Інтеграція тікет-систем — конектори до Jira, GitHub, HubSpot, Zendesk.
- Налаштування NLP-пайплайна — калібрування ембеддінгів на вашій специфіці (доменні терміни, сленг).
- Дашборд пріоритетів — веб-інтерфейс з кластерами, трендами, скорингом.
- Експорт user stories — вивантаження у форматі CSV/JSON для імпорту в product management tools.
- Документація та навчання команди — як інтерпретувати тренди та приймати рішення.
Строки та як почати
Оцінка проекту — від 40 до 80 годин залежно від складності інтеграції та обсягу даних. Перший прототип з базовою кластеризацією готовий через 2 тижні після старту. Для точного розрахунку отримайте консультацію: просто напишіть нам з коротким описом поточного процесу та кількості запитів на місяць. Гарантуємо, що після впровадження ви будете витрачати на аналіз фіч не більше 2 годин на тиждень. Вартість визначається після аналізу вашого проекту.
Досвід нашої команди — 5 років в NLP та MLOps, понад 30 успішних впроваджень у продуктових компаніях. Використовуємо лише open-source компоненти без vendor lock-in.
Пишіть — оцінимо ваш проект безкоштовно і запропонуємо рішення під ключ.







