← К портфолио Sales Calls Analytics Dashboard preview
Стек
PythonStreamlitpandas
Эффект
  • 16 891 синтетический звонок, разметка детерминированная (маркеры скрипта)
  • 4-шаговая воронка: приветствие → оффер → встреча → квалификация
  • Главная утечка разбирается по типам (молчание / сброс / отказ) + взвешенная потеря контактов
  • Вовлечённость по часам и дням недели — когда звонить
  • Хук под LLM-разметку реакций (llm_labels.csv) — пайплайн воспроизводим и без него

Sales Calls Analytics Dashboard

Business Context

ИИ-обзвон — это воронка: приветствие → оффер → встреча → квалификация. Прод-выгрузка хранит звонки, но не говорит, на каком шаге бот теряет клиента. Задача — превратить сырую выгрузку в ответ за минуту: где обрыв, по каким причинам, когда звонить и что чинить.

Что показывает дашборд

БлокЧто отвечает
KPI + воронкаобщая картина и где главный обрыв
Разбор шага 1главная утечка по типам: молчание / сброс / отказ
Куда направить усилияпереходы по взвешенной потере контактов
Реакции клиентовчто чинить в скрипте по вовлечённому хвосту
Когда звонитьвовлечённость по часам и дням недели
Качество ботаготовые дефекты: баг отрасли, зацикливание, dead air
Разбор диалоговфильтр среза + транскрипты обрывов

Методология разметки

Скрипт бота шаблонный, поэтому шаг, до которого дошёл разговор, определяется детерминированно по маркерам в репликах бота:

  • 1 — приветствие + согласие;
  • 2 — оффер;
  • 3 — встреча;
  • 4 — квалификация.

Причина обрыва на шаге 1 и тип реакции клиента — эвристики по тексту. LLM в пайплайне не используется (всё воспроизводимо), но если рядом положить llm_labels.csv с колонками phone, dt_raw, <метки>, они подмешаются автоматически — разметку реакций можно усилить через LLM.

Данные

Датасет data/calls_demo.csvполностью синтетический: генерируется скриптом make_demo_data.py, детерминирован по фиксированному SEED и не содержит ни одного реального телефона, имени или записи разговора. Цифры воспроизводят форму типичной прод-выгрузки (воронка, дефекты, распределение по часам), чтобы дашборд рассказывал реалистичную историю на безопасных данных.

Run

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/streamlit run app.py

Impact

  • Минута до ответа — на каком шаге бот теряет клиента и что чинить.
  • Детерминированная разметка — воспроизводимая, без LLM в критическом пути.
  • Точка роста — взвешенная потеря контактов и первый A/B-сценарий.
  • Безопасное демо — синтетические данные, публичный деплой бесплатно.

Documentation

Разбор кейса

Проблема

Обзвон — это воронка с большим отвалом на ранних шагах, но прод-выгрузка не отвечает на главный вопрос: на каком шаге бот теряет клиента и что чинить — скрипт, тайминг или качество самого бота.

Подход

Шаг, до которого дошёл разговор, определяется детерминированно по маркерам в репликах бота (приветствие → оффер → встреча → квалификация). Причина обрыва на шаге 1 и тип реакции клиента — эвристики по тексту; LLM в пайплайне не используется, но предусмотрен хук llm_labels.csv для усиления разметки. Дашборд раскладывает воронку по взвешенной потере контактов, вовлечённость по часам/дням и дефекты бота, с drill-down в транскрипты обрывов.

Результат

Одна минута до ответа на вопрос «где бот теряет клиента»: воронка с типами главной утечки, точка роста и первый A/B-сценарий. Разметка детерминированная и воспроизводимая, датасет синтетический — демо безопасно для публичного деплоя.

16 891 Звонков (синтетика)
4 Шагов воронки
детерминированная Разметка
нет (хук есть) LLM в пайплайне

Смотрите также